我说下吧,首先 30H, 31H,32H,33H,34H,35H存储的分别是时分秒的各位,初始化时间是12:00:00
XS0: 这段初始化定时器0,计数初值为0,16位计数模式,也就是说每65.536ms(12M晶振)发生一次中断,按道理这里晶振不会是12M
XS:
MOV 40H,#0FEH //40H存储数码管片选,这里应该是第一个数码管被选中
MOV DPTR,#TAB //数码管显示段码表,一般送入P0口
MOV P2,40H //P2口接的就是数码管片选端
MOV A,30H //30H存的是小时的十位
MOVC A,@A+DPTR //查表获取段码
MOV P0,A //段码送P0口
LCALL YS1MS //延时1ms
MOV P0,#0FFH //清空段码,即实现动态显示
MOV A,40H
RL A
MOV 40H,A //选择第二个数码管,即显示小时各位的数码管
下面的几段大致相同,分别显示小时个位、分钟十位和个位、秒钟十位和个位
JB TF0,JIA //定时器中断发生,跳转到加程序
JNB P1.0,P100 //P1.0按下,跳转到P100
JNB P1.1,P1000
JNB P1.2,P10000
下面这段主要是对秒钟的个位和十位自动加
JIA: CLR TF0
MOV A,35H
CJNE A,#9,JIA1 //JIA1是对个位相加
MOV 35H,0 //超过9就变成0
MOV A,34H
CJNE A,#5,JIA10 //JIA10是对十位相加
MOV 34H,#0 //超过5变0
P100是对时间复位,P1000是调节小时,P10000是调节分钟
JIA100000是加小时的十位.JIA10000是加小时个位,它每次先判断十位是否超过2,再判断个位是否超过3。这里程序有点错误,修改为:
JIA10000:
MOV A,30H
CJNE A,#02,JIAJIA
MOV A,#31H
CJNE A,#3,JIAJIA
MOV 30H,#0
MOV 31H,#0
AJMP XS0
最后的是延时程序
只说我看懂的:
MOV 30H,#1
MOV 31H,#2
MOV 32H,#0
MOV 33H,#0
MOV 34H,#0
MOV 35H,#0
把时分秒放入这五个地址内,后面的就是分别对地址进行操作了
RL A :A的各位依次左移一位,A.0<-A.7
希望对你能有帮助
这个太长啦。。。。。。。。。你说说 那句不理解吧
谢谢了,还有谁懂得帮忙解释下?