主要想练习中断的使用,但是使用的是否发现与我预期的相差很多,一分钟差了几秒钟,不知道什么原因 希望有的大佬给出答案- 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
复制代码
|