本文包含原理图、PCB、源代码、封装库、中英文PDF等资源
您需要 登录 才可以下载或查看,没有账号?注册会员
×
自己改的电子钟程序,为什么每分钟会慢4秒左右,请高手指点一下,不胜感激!!
S_1 EQU 30H ;秒寄存器
M_1 EQU 31H ;分寄存器
ORG 00H
LJMP START
ORG 0BH ;定时0中断入口
LJMP TIMER
ORG 30H
START:MOV S_1, #0 ;秒、分、寄存器清0
MOV M_1, #0
MOV 20H, #20 ;1秒钟中断次
数,1s=50msx20
MOV SP, #40H ;堆栈指针设置
MOV IE, #82H ;开定时器0中断及总中断
MOV TMOD, #01H ;定时器0模式1
MOV TH0, #03CH ;50ms初值
MOV TL0, #0B0H
SETB TR0 ;启动定时器0
DISP: ;显示子程序
MOV DPTR, #NUMTAB ;表头地址送数据指针
MOV A, S_1 ;秒送A
MOV B, #10
DIV AB ;
MOVC A, @A+DPTR ; 查表
MOV P0, A ;秒十位送p0口显示
CLR P2.2 ;开秒十位显示
ACALL D1MS ;延时1ms
SETB P2.2 ;关显示
MOV A, B ;秒个位p0口显示
MOVC A, @A+DPTR ;查表
MOV P0, A
CLR P2.3
ACALL D1MS
SETB P2.3
MOV A, M_1 ;分送A
MOV B, #10
DIV AB
MOVC A, @A+DPTR
MOV P0, A
CLR P2.0 ;显示分十位
ACALL D1MS
SETB P2.0
MOV A, B
MOVC A, @A+DPTR
MOV P0, A
CLR P2.1 ;显示分个位
ACALL D1MS
SETB P2.1
LJMP DISP
TIMER: ;定时中断程序
PUSH ACC ;数据保护
PUSH PSW
MOV A,#0BOH
ADD A,TL0
MOV TL0, A ;重置50ms定时值
MOV TH0, #03CH
DJNZ 20H, RETI_1 ;到1秒了吗?
MOV 20H, #20
INC S_1 ;秒加1
MOV A, S_1
CJNE A, #60, RETI_1;到60秒了吗?
MOV S_1, #0 ;到60秒清0
INC M_1 ;分加1
MOV A, M_1
CJNE A, #60, RETI_1 ;到60分了吗?
MOV M_1, #0
RETI_1: ;中断返回
POP PSW
POP ACC
RETI
D1MS: ;1毫秒延时
MOV R7, #2
D_1:
MOV R6, #250
DJNZ R6, $
DJNZ R7, D_1
RET
NUMTAB:
DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ;0 ~ 9
END |
|