主要想練習中斷的使用,但是使用的是否發現與我預期的相差很多,一分鐘差了幾秒鐘,不知道什么原因 希望有的大佬給出答案- ORG 000H
- MOV R7,#000H;不初始化的時候,會亂碼 我也不知道為什么
- MOV R1,#000H
- MOV R2,#000H
- MOV R3,#000H
- MOV R4,#000H
- MOV R0,#000H
- MOV DPTR,#TIME
- LJMP MAIN
- ORG 01BH;中斷入口
- CLR TR1
- LJMP SU
- MAIN:;主函數
- MOV TMOD,#10H;設置TMOD
- MOV TL1,#0B0H;
- MOV TH1,#03CH;
- SETB EA
- SETB ET1
- LOOP: SETB TR1
- LOOP1:LCALL DISPLAY
- SJMP LOOP1
- SU:;中斷后函數
- INC R7;判斷是否夠20次
- CJNE R7,#20,LOOP_END;不夠20此直接返回
- MOV R7,#00H
- INC R4
- CJNE R4,#0AH,LOOP_END;判斷是否夠10秒,進1
- MOV R4,#00H
- INC R3
- CJNE R3,#0AH,LOOP_END
- MOV R3,#00H
- INC R2
- CJNE R2,#0AH,LOOP_END
- MOV R2,#00H
- INC R1
- CJNE R1,#9,LOOP_END
- MOV R1,#00H
- LOOP_END:
- MOV TL1,#0B0H
- MOV TH1,#03CH
- SETB TR1
- RETI
- DISPLAY:;數碼管顯示
- MOV A,R1
- MOVC A,@A+DPTR
- MOV P2,#0FEH
- MOV P0,A
- ACALL D10MS
- MOV A,R2
- MOVC A,@A+DPTR
- MOV P2,#0FDH
- MOV P0,A
- ACALL D10MS
- MOV A,R3
- MOVC A,@A+DPTR
- MOV P2,#0FBH
- MOV P0,A
- ACALL D10MS
- MOV A,R4
- MOVC A,@A+DPTR
- MOV P2,#0F7H
- MOV P0,A
- ACALL D10MS
- RET
- D10MS:;延時函數
- MOV R5,#10
- DY1:
- MOV R6,#75
- DY2:
- DJNZ R6,$
- DJNZ R5,DY1
- RET
- TIME:
- DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H,080H,090H
- END
復制代碼
|