Xin báo cáo với các bác là em đang gặp problem với cái interrupt, ai biết giúp cái. Đây là phần lập trình của em ( nhìn rấy ư rookie, đừng chê ... ^^). Mới tìm hiểu cái này lần đầu.
THOUSAND equ 1000H
HUNDRED equ 1001H
TEN equ 1002H
UNIT equ 1003H
ORG 0000H
Ljmp Main
ORG 0013H
Ljmp Count0
ORG 0030H
;************************************************* ***************
;Main program
Main:
Mov UNIT,#00H
Mov TEN,#00H
Mov HUNDRED,#00H
Mov THOUSAND,#00H
Setb TCON.2
Mov IE,#84H
Mov A,#00H
Lcall Display
Here:
Sjmp Here
;************************************************* ***************
;Subroutine for interrupt
ORG 0100H
Count0:
Mov A,UNIT; count the unit digit
Inc A
Mov UNIT,A
Mov R3,UNIT
Lcall Display
Cjne A,#09H,Count0
Mov UNIT,#00H
Mov R3,UNIT
Count1:
Mov A,TEN; count the ten digit
Inc A
Mov TEN,A
Mov R2,TEN
Mov UNIT,#00H
Mov R3,#00H
Lcall Display
Lcall Delay2
Sjmp Count0
Cjne A,#09H,Count1
Mov TEN,#00H
Mov R2,TEN
Count2:
Mov A,HUNDRED; count the hundred digit
Inc A
Mov HUNDRED,A
Mov R1,HUNDRED
Mov TEN,#00H
Mov UNIT,#00H
Lcall Display
Lcall Delay2
Sjmp Count1
Cjne A,#09H,Count2
Mov HUNDRED,#00H
Mov R1,HUNDRED
Count3:
Mov A,THOUSAND; count the thousand digit
Inc A
Mov R0,A
Mov THOUSAND,A
Mov HUNDRED,#00H
Mov TEN,#00H
Mov UNIT,#00H
Lcall Display
Lcall Delay2
Sjmp Count2
Cjne A,#09H,Count0
Reti
;************************************************* ***************
;Subroutine for display to 7 segments led
Display:
Mov P2,#11111110B
Mov P0,THOUSAND
Lcall Delay1
Mov P2,#11111101B
Mov P0,HUNDRED
Lcall Delay1
Mov P2,#11111011B
Mov P0,TEN
Lcall Delay1
Mov P2,#11110111B
Mov P0,UNIT
Lcall Delay1
Ret
;************************************************* ******************
;Delay program
Delay1:
Mov R7,#0FFH
Ck2:
Mov R6,#0FFH
Ck1:
Djnz R6,Ck1
Djnz R7,Ck2
Ret
Delay2:
Mov R7,#08H
Kt3:
Mov R6,#0FFH
Kt2:
Mov R5,#0FFH
Kt1:
Djnz R5,Kt1
Djnz R6,Kt2
Djnz R7,Kt3
Ret
;************************************************* ***************
;End of the program
End
Đếm thì nó làm được rồi nhưng mà có ngắt hay ko ngắt nó đều đếm, cái này em ga` ko biết sử dụng cai RETI sao cho hợp lí sau mỗi lần đếm thi nó phải thoát khỏi ngắt ngay nhưng mà cái này em chả biết gi` nhiều nên chả biết xử lí sao. Mong mấy huynh giúp em cái, sắp nộp report rồi T_T
Thx mấy huynh nhiều
THOUSAND equ 1000H
HUNDRED equ 1001H
TEN equ 1002H
UNIT equ 1003H
ORG 0000H
Ljmp Main
ORG 0013H
Ljmp Count0
ORG 0030H
;************************************************* ***************
;Main program
Main:
Mov UNIT,#00H
Mov TEN,#00H
Mov HUNDRED,#00H
Mov THOUSAND,#00H
Setb TCON.2
Mov IE,#84H
Mov A,#00H
Lcall Display
Here:
Sjmp Here
;************************************************* ***************
;Subroutine for interrupt
ORG 0100H
Count0:
Mov A,UNIT; count the unit digit
Inc A
Mov UNIT,A
Mov R3,UNIT
Lcall Display
Cjne A,#09H,Count0
Mov UNIT,#00H
Mov R3,UNIT
Count1:
Mov A,TEN; count the ten digit
Inc A
Mov TEN,A
Mov R2,TEN
Mov UNIT,#00H
Mov R3,#00H
Lcall Display
Lcall Delay2
Sjmp Count0
Cjne A,#09H,Count1
Mov TEN,#00H
Mov R2,TEN
Count2:
Mov A,HUNDRED; count the hundred digit
Inc A
Mov HUNDRED,A
Mov R1,HUNDRED
Mov TEN,#00H
Mov UNIT,#00H
Lcall Display
Lcall Delay2
Sjmp Count1
Cjne A,#09H,Count2
Mov HUNDRED,#00H
Mov R1,HUNDRED
Count3:
Mov A,THOUSAND; count the thousand digit
Inc A
Mov R0,A
Mov THOUSAND,A
Mov HUNDRED,#00H
Mov TEN,#00H
Mov UNIT,#00H
Lcall Display
Lcall Delay2
Sjmp Count2
Cjne A,#09H,Count0
Reti
;************************************************* ***************
;Subroutine for display to 7 segments led
Display:
Mov P2,#11111110B
Mov P0,THOUSAND
Lcall Delay1
Mov P2,#11111101B
Mov P0,HUNDRED
Lcall Delay1
Mov P2,#11111011B
Mov P0,TEN
Lcall Delay1
Mov P2,#11110111B
Mov P0,UNIT
Lcall Delay1
Ret
;************************************************* ******************
;Delay program
Delay1:
Mov R7,#0FFH
Ck2:
Mov R6,#0FFH
Ck1:
Djnz R6,Ck1
Djnz R7,Ck2
Ret
Delay2:
Mov R7,#08H
Kt3:
Mov R6,#0FFH
Kt2:
Mov R5,#0FFH
Kt1:
Djnz R5,Kt1
Djnz R6,Kt2
Djnz R7,Kt3
Ret
;************************************************* ***************
;End of the program
End
Đếm thì nó làm được rồi nhưng mà có ngắt hay ko ngắt nó đều đếm, cái này em ga` ko biết sử dụng cai RETI sao cho hợp lí sau mỗi lần đếm thi nó phải thoát khỏi ngắt ngay nhưng mà cái này em chả biết gi` nhiều nên chả biết xử lí sao. Mong mấy huynh giúp em cái, sắp nộp report rồi T_T
Thx mấy huynh nhiều
Comment