Untitled
unknown
assembly_x86
3 years ago
4.4 kB
11
Indexable
$NOMOD51
$INCLUDE (8051.MCU)
;====================================================================
; DEFINITIONS
;====================================================================
;====================================================================
; VARIABLES
;====================================================================
BRAKE BIT P1.0
EMERG BIT P1.1
PARK BIT P1.2
L_TURN BIT P1.3
R_TURN BIT P1.4
L_FRNT BIT P0.0
R_FRNT BIT P0.1
L_DASH BIT P0.2
R_DASH BIT P0.3
L_REAR BIT P0.4
R_REAR BIT P0.5
L_FRNT_CHECK BIT P2.0
R_FRNT_CHECK BIT P2.1
L_DASH_CHECK BIT P2.2
R_DASH_CHECK BIT P2.3
L_REAR_CHECK BIT P2.4
R_REAR_CHECK BIT P2.5
; INDICATOR SEGMENTS
INDIC_A BIT P3.0
INDIC_B BIT P3.1
INDIC_C BIT P3.2
INDIC_D BIT P3.3
INDIC_E BIT P3.4
INDIC_F BIT P3.5
INDIC_G BIT P3.6
; INDICATORS ACTIVITY FLAGS
ACTIVE_L_F BIT P2.6
ACTIVE_R_F BIT P2.7
ACTIVE_L_R BIT P1.6
ACTIVE_R_R BIT P1.7
DIM BIT PSW.1
SUB_DIV DATA 20H ;Делитель частоты прерываний
HI_FREQ BIT SUB_DIV.0 ;Бит генератора высокой частоты - передние и задние фары
LO_FREQ BIT SUB_DIV.7 ;Бит генератора низкой частоты - поворотники
;====================================================================
; RESET and INTERRUPT VECTORS
;====================================================================
; Reset Vector
org 0000h
jmp Start
;====================================================================
; CODE SEGMENT
;====================================================================
org 000Bh
ACALL TIMER0_TICK
RETI
org 0100h
Start:
MOV TMOD, #00000001B ;Таймер0 в режим 1
MOV TL0, #0 ;Инициализация младшего байта таймер
MOV TH0, #-26 ;Инициализация старшего байта таймер
MOV SUB_DIV, #244 ;Деление частоты прерываний на 24
SETB ET0 ;Разрешение прерываний от Таймера0
SETB EA ;Общее разрешение прерываний
SETB TR0 ;Старт Таймера
; SET ERROR LETTER
CLR INDIC_A
SETB INDIC_B
SETB INDIC_C
CLR INDIC_D
CLR INDIC_E
CLR INDIC_F
CLR INDIC_G
Loop:
jmp Loop;
TIMER0_TICK:
MOV TH0, #-16
PUSH PSW
PUSH ACC
PUSH B
DJNZ SUB_DIV, CHECK_L_F
MOV SUB_DIV, #244
CHECK_L_F:
; XOR
MOV C, L_FRNT_CHECK
ORL C, L_FRNT
CPL C
MOV F0, C
MOV C, L_FRNT_CHECK
CPL C
ANL C, L_FRNT
ORL C, F0
MOV ACTIVE_L_F, C
CHECK_R_F:
; XOR
MOV C, R_FRNT_CHECK
ORL C, R_FRNT
CPL C
MOV F0, C
MOV C, R_FRNT_CHECK
CPL C
ANL C, R_FRNT
ORL C, F0
MOV ACTIVE_R_F, C
CHECK_L_R:
; XOR
MOV C, L_REAR_CHECK
ORL C, L_REAR
CPL C
MOV F0, C
MOV C, L_REAR_CHECK
CPL C
ANL C, L_REAR
ORL C, F0
MOV ACTIVE_L_R, C
CHECK_R_R:
; XOR
MOV C, R_REAR_CHECK
ORL C, R_REAR
CPL C
MOV F0, C
MOV C, R_REAR_CHECK
CPL C
ANL C, R_REAR
ORL C, F0
MOV ACTIVE_R_R, C
T0_SERV:
MOV C, SUB_DIV.0
ORL C, SUB_DIV.1
ANL C, PARK
MOV DIM, C
MOV C, L_TURN
ORL C, EMERG
ANL C, LO_FREQ
MOV L_DASH, C
MOV F0, C
ORL C, DIM
MOV L_FRNT, C
MOV C, BRAKE
ANL C, /L_TURN
ORL C, F0
ORL C, DIM
MOV L_REAR, C
MOV C, R_TURN
ORL C, EMERG
ANL C, LO_FREQ
MOV R_DASH, C
MOV F0, C
ORL C, DIM
MOV R_FRNT, C
MOV C, BRAKE
ANL C, /R_TURN
ORL C, F0
ORL C, DIM
MOV R_REAR, C
POP B
POP ACC
POP PSW
RETI
;====================================================================
END
Editor is loading...