Untitled

 avatar
unknown
assembly_x86
2 years ago
4.4 kB
5
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...