赞助论坛
  • 3758阅读
  • 0回复

单片机汇编程序,请高手解释 [复制链接]

楼层直达
zyuih  
发帖
4
精华
0
金币
12
威望
0
贡献
0
好评
-1
注册
2010-01-21
楼主    zyuih 发表于: 2010-07-18 11:28:44 
这是摘自芯源单片机教程
延长定时时间的方法
ORG 0000H ;
AJMP START ;
ORG 000BH ;定时器0的中断向量地址
AJMP TIME0 ;跳转到真正的定时器程序处
ORG 30H ;
START:MOV P1,#0FFH ;关所有的灯
MOV 30H,#00H ;软件计数器预清0
MOV TMOD,#01H ;定时/计数器0工作于方式1
MOV TH0,#3CH ;
MOV TL0,#0B0H ;立即数3CH+0BH=15536
SETB EA ;开总中断允许
SETB ET0 ;开定时/计数器0允许
SETB TR0 ;定时/计数器0开始运行
LOOP:AJMP LOOP ;真正工作时,这里可写任意程序
TIME0:
PUSH ACC ;将ACC推入堆栈保护
PUSH PSW ;将PSW推入堆栈保护
INC 30H ;
MOV A,30H ;
CJNE A,#20,TIME1 ;30H单元中的值到了20了吗?
CPL P1.0 ;到了取反P1.0
MOV 30H,#0 ;清软件计数器
TIME1:MOV TH0,#15H ;给T0重新赋值
MOV TL0,#9FH ;重置定时常数
POP PSW ;
POP ACC ;
RETI ;
END
先用T0做一个50毫秒的定时器定时时间到了之后并不是立即取反P1.0而是将软件计数器中的值加1如果软件计数器计到了20就取反一次P1.0并清掉软件计数器中的值否则直接返回这样就变成了20次定时中断才取反一次P1.0因此定时时间就延长了成了20*50mS即1000毫秒了

请问TIME1:MOV TH0,#15H ;给T0重新赋值
MOV TL0,#9FH ;重置定时常数这段程序的重设定是常数是怎么算的?和
MOV TH0,#3CH ;
MOV TL0,#0B0H ;立即数3CH+0BH=15536 是不一样的