Mã:
$MOD52
;Khai bao nhan va cac bien
XA equ P1.0
DoA equ P1.1
VA equ P1.2
XB equ P1.3
DoB equ P1.4
VB equ P1.5
SELECT BIT p3.0
;=1 thi hien thi thoi gian dem cot A
;=0 thi hien thi thoi gian dem cot B
UT BIT P3.1
LJMP INIT ;Nhay toi chuong trinh INIT
ORG 0013H ;Dia chi ngat EXT1
LJMP EXT1 ;go to EXT1 Interrupt handler
LJMP MAIN ;Quay tro lai vong lap chinh
INIT:
MOV SP,#20h ;Di chuyen SP toi phan xa cua thanh ghi
LCALL ENABLE_INTS;Bat dau ngat khi thay thich hop
;/////////////////////////////////////////////////////////////////////////////
ORG 30H ; Dia chi bat dau chuong trinh chinh
MAIN:
MOV P2,#0
CALL CLEAR_ALL
SETB DoB
SETB XA
MOV R0,#7
; Thoi gian cho truoc khi den bat dau thay doi trang thai
MOV R1,#10; thoi gian hien thi cua led 7 doan
SETB SELECT
LOOP1:
LCALL HIENTHI
LCALL ONESEC
DJNZ R0,LOOP1
;///////////////////////////////////////////////////////////////////////////
CLR XA
SETB VA
MOV R0,#3 ;THOI GIAN HIEN THI DEN VANG LA 5s
LOOP2:
CALL HIENTHI
CALL ONESEC
; Doi 1s de chuyen trang thai tu den vang sang den do
DJNZ R0,LOOP2
;////////////////////////////////////////////////////////////////////
CALL CLEAR_ALL
SETB DoA
SETB XB
MOV R0,#7
; Thoi gian cho truoc khi den bat dau thay doi trang thai
MOV R1,#10
CLR SELECT
LOOP3:
CALL HIENTHI
LCALL ONESEC
DJNZ R0,LOOP3
;/////////////////////////////////////////////////////
CLR XB
SETB DoA
SETB VB
MOV R0,#3
LOOP4:
CALL HIENTHI
LCALL ONESEC ;Doi 1s de chuyen trang thai tu den vang sang den do
DJNZ R0,LOOP4
JMP MAIN
;EXT1 Phuc vu ngat ngoai
EXT1:
CPL UT ;
RETI
;Cac thu tuc con
CLR_LCD:
MOV P0, #00h
RET
ENABLE_INTS:
SETB IT1 ;Co ngat ngoai 1(kich canh hoac muc).
SETB EX1 ;Cho phep ngat ngoai 1
MOV TMOD,#01H
; SET 16 BIT COUNTER.Bo dinh thoi 1 che do 1
SETB EA ;Enable interrupt global
RET
; CLEARS ALL THE LIGHTS
CLEAR_ALL:
MOV P1,#00H ; Xoa tat ca cac den
CLR ACC.0 ; Xoa toan bo co ngat
MOV P0,0
RET
;Bo dem trong 1s
ONESEC:
MOV R5,#12H
; COUNTER USED TO LOOP 20 TIMES, WHICH IS EQUIVALENT TO 1 SEC
SEC_LOOP:
MOV TH0,#00H; Xoa TIMER 0
MOV TL0,#00H
CLR TF0 ; Xoa bit tran
SETB TR0 ; Khoi dong TIMER 0
JNB TF0,$ ; WAIT FOR OVERFLOW FLAG
CLR TR0 ; Dung TIMER 0
JB UT,HUONG_UT
; Nut danh cho nguoi di bo bi an,thoat khoi vong lap
DJNZ R5,SEC_LOOP
RET
HUONG_UT:
MOV P0,#0
MOV p1,#1
MOV P2,#1
LCALL ClEAR_ALL
LOOP_UT:
SETB DoB
SETB DoA
JB UT,LOOP_UT
; Nut danh cho nguoi di bo bi an,thoat khoi vong lap
LCALL CLEAR_ALL
LJMP MAIN
RET
HIENTHI:
MOV A,R1 ;NAP SO DEM CHO LED 7 DOAN
MOV B,#0AH
DIV AB
SWAP A
ADD A,B
JB SELECT,COTB
COTA:
MOV P2,A
DEC R1;GIAM SO DEM CUA LED
MOV A,#0
RET
COTB:
MOV P0,A
DEC R1;GIAM SO DEM CUA LED
MOV A,#0
RET
;///////////////////////////////////////
HALT: JMP $
END