nguyenquoctrung-hhk
Thành Viên PIF
mình chưa hình dung cách quét led 7 đoạn dùng ngắt timer, mình dùng hợp ngữ, nhờ các bạn có thể nói giải thuật của phương pháp này như thế nào! cám ơn các bạn nhiều
; DUNG NGAT TIMER0 DE QUET LED (4 LED 7 DOAN), TIMER1 DELAY 1S
;-----------------------------
NGHIN EQU 127
TRAM EQU 126
CHUC EQU 125
DONVI EQU 124
MOV TMOD, #21H
;-----------------------------
; KHAI BAO CAC LOAI NGAT
;-----------------------------
ORG 0000H
LJMP BEGIN
ORG 000BH
LJMP TIMER0_ISR ; NGAT TIMER0
ORG 001BH
LJMP TIMER1_ISR ; NGAT TIMER1
;-----------------------------
BEGIN :
MOV CHUC, #0
MOV DONVI, #0
MOV NGHIN, #0
MOV TRAM, #0
SETB EA
SETB ET0
SETB ET1
SETB TR0
SETB TR1
MOV TH1, #(-200) ; THOI GIAN QUET 1 LED 200US
MOV TL1, #(-200)
MOV TH0, #HIGH (-50000) ; DAT THOI GIAN TRE
MOV TL0, #LOW (-50000)
MOV R5, #20 ; 20 * 50000 *1US = 1S
MOV R0, #127
MOV R1, #0 ; DINH VI TRI CAC LED
SJMP $
;----------------------------
TIMER1_ISR :
PUSH ACC
MOV P1, #00H
MOV A, @R0 ;LAY DIA CHI GIAN TIEP NOI DUNG CUA O NHO 127
MOV DPTR, #MALED7
MOVC A, @A + DPTR
MOV P0, A
DEC R0 ; GIAM DIA CHI
MOV A, R1
MOV DPTR, #MACOT ; DINH VI TRI MO LED
MOVC A, @A + DPTR
MOV P1, A
INC R1
CJNE R1, #4, EXIT_TIMER1
MOV R0, #127
MOV R1, #0
EXIT_TIMER1:
POP ACC
RETI
;------------------------------
TIMER0_ISR:
MOV TH0, #HIGH (-50000)
MOV TL0, #LOW (-50000)
DJNZ R5, EXIT_TIMER0
MOV R5, #20 ; !!! GAN 200 THI MOI DUNG 1 S ????
;--------------
INC DONVI
MOV A, DONVI
CJNE A, #10, EXIT_TIMER0
MOV DONVI, #0
;--------------
INC CHUC
MOV A, CHUC
CJNE A, #10, EXIT_TIMER0
MOV CHUC, #0
;--------------
INC TRAM
MOV A, TRAM
CJNE A, #10, EXIT_TIMER0
MOV TRAM, #0
;--------------
INC NGHIN
MOV A, NGHIN
CJNE A, #3, EXIT_TIMER0
;--------------
MOV CHUC, #0
MOV DONVI, #0
MOV TRAM, #0
MOV NGHIN, #0
EXIT_TIMER0:
RETI
;-----------------------------
MALED7 : DB 0C0H, 0F9H, 0A4H, 0B0H, 99H, 92H, 82H, 0F8H, 80H, 90H
MACOT : DB 01H, 02H,04H, 08H
;-----------------------------
END