找回密码
 注册会员
更新自动建库工具PCB Footprint Expert 2024.04 Pro / Library Expert 破解版

我自制的电子钟为什么不准

[复制链接]
admin 发表于 2012-9-2 14:06:24 | 显示全部楼层 |阅读模式

本文包含原理图、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
*滑块验证:
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

QQ|手机版|MCU资讯论坛 ( 京ICP备18035221号-2 )|网站地图

GMT+8, 2024-11-25 02:37 , Processed in 0.058261 second(s), 11 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表