PHP Code:
;CAC LENH GAN
DATA_LED EQU P0
;---------------------------------
ORG 0000H
LJMP START
;---------------------------------
ORG 03H ;external interrupt 0
;GOI CTC PHUC VU NGAT
RETI
ORG 0BH ;timer 0 interrupt
LJMP NGAT_T0
ORG 13H ;external interrupt 1
;GOI CTC PHUC VU NGAT
RETI
ORG 1BH ;timer 1 interrupt
RETI
ORG 23H ;serial port interrupt
;GOI CTC PHUC VU NGAT
RETI
;=====================================
ORG 30H
;=====================================
KHOI_TAO: ;set up control registers
MOV TCON,#00H
MOV TMOD,#00000001B ; che do 1 ngat timer 0
MOV PSW,#00H
MOV IE,#10000010B ;CHO PHEP NGAT TIMER0
RET
;-------------------------------------
;HAM MAIN
;-------------------------------------
START:
ACALL KHOI_TAO ;KHOI TAO CAC THANH GHI
MOV TH0,#03CH
MOV TL0,#0B0H
SETB TR0
SETB TF0
MOV R0,#0
MOV 30H,#0
LJMP $
RET
;-------------------------------------
NGAT_T0:
CLR TR0
MOV TH0,#03CH
MOV TL0,#0B0H ; dat lai thanh ghi timer
SETB TR0 ; bat TR0 cho timer hoat dong
ACALL HT_R0 ; goi ham hien thi
MOV R1,30H
CJNE R1,#20,TANG_30H ;say 20 lan thi tang gia tri cua o nho 30H len 1
MOV 30H,#0 ;neu toi 20 thi ve 0 tro lai
ACALL DC_R0 ; sau 20 lan goi timer la dc 1 giay, tien hanh dieu chinh R0 len 1
LJMP EXIT
TANG_30H:
INC 30H
EXIT:
RETI
;-------------------------------------
HT_R0:
MOV A,R0
ACALL DOI_MA_LED
MOV DATA_LED,A
RET
;-------------------------------------
DC_R0:
JB 00H,DEM_XUONG
;-----------DEM LEN
CJNE R0,#9,TANG_R0
SETB 00H ;DIEU KHIEN DEM XUONG
DEC R0
LJMP EXIT_DC_R0
TANG_R0:
INC R0
LJMP EXIT_DC_R0
;---------------DEM XUONG
DEM_XUONG:
CJNE R0,#0,GIAM_R0
CLR 00H ;DIEU KHIEN DEM LEN
INC R0
LJMP EXIT_DC_R0
GIAM_R0:
DEC R0
EXIT_DC_R0:
RET
;-------------------------------------
DOI_MA_LED:
INC A
MOVC A,@A+PC
RET
DB 11000000B,01111001B,00100100B,00110000B,00011001B,00010010B,00000010B,01111000B,00000000B
DB 00010000B
;-------------------------------------
END
1.
Code:
Các ORG+0000H ,ORG+03H ... là cái gì thế và mình lấy các 0000H,03H dựa vào cơ sở nào vậy
Code:
Sao lúc mình thấy RET lúc thì lại RETI vậy 2 cái đó khác nhau thế nào
Code:
ORG 0000H LJMP START
4.
Trong cái hàm START mình thấy là TF0 ban đầu người ta thường CLR nó để đưa nó về 0 và dùng JNB để kiếm tra TF0 đã bật chưa sao trong này nó SETB lun
- khi LJMP nhảy tại chỗ cho đến khi xảy ra ngắt thì nó sẽ gọi NGAT_TO và khi thực hiện xong thì nó sẽ trả về đâu để tiếp tục đợi ngắt lần tiếp theo
5.
Cái đoạn
Code:
JB 00H,DEM_XUONG ;-----------DEM LEN CJNE R0,#9,TANG_R0 SETB 00H ;DIEU KHIEN DEM XUONG DEC R0 LJMP EXIT_DC_R0
6.
Đoạn này
Code:
DOI_MA_LED: INC A MOVC A,@A+PC RET DB 11000000B,01111001B,00100100B,00110000B,00011001B,00010010B,00000010B,01111000B,00000000B DB 00010000B
Comment