汇编程序提问
来源:百度知道 编辑:UC知道 时间:2024/06/24 16:04:09
ORG 0000H
AJMP START
ORG 000BH ;定时器0的中断向量地址
AJMP TIME0 ;跳转到真正的定时器程序处
ORG 30H
START:
MOV P1,#0FFH ;关所 灯
MOV 30H,#00H ;软件计数器预清0
MOV TMOD,#00000001B ;定时/计数器0工作于方式1
MOV TH0,#3CH
MOV TL0,#0B0H ;即数15536
SETB EA ;开总中断允许
SETB ET0 ;开定时/计数器0允许
SETB TR0 ;定时/计数器0开始运行
LOOP: AJMP LOOP ;真正工作时,这里可写任意程序
TIME0: ;定时器0的中断处理程序
PUSH ACC
PUSH PSW ;将PSW和ACC推入堆栈保护
INC 30H
MOV A,30H
CJNE A,#20,T_RET ;30H单元中的值到了20了吗?
T_L1: CPL P1.0 ;到了,取反P10
MOV 30H,#0 ;清软件计数器
T_RET:
MOV TH0,#15H
MOV TL0,#9FH ;重置定时常数
POP PSW
POP ACC
RETI
END
上面一段程序是以12M晶振做的一个计时器led灯闪烁,请问为什么
“T_RET:
MOV TH0,#15H
MOV TL0,#9FH ;重置定时常数”
这个常数为什么要定成159F#呢?5535。
请各位大虾解答一下!
初值不是应该是5636那么溢出次数才是
AJMP START
ORG 000BH ;定时器0的中断向量地址
AJMP TIME0 ;跳转到真正的定时器程序处
ORG 30H
START:
MOV P1,#0FFH ;关所 灯
MOV 30H,#00H ;软件计数器预清0
MOV TMOD,#00000001B ;定时/计数器0工作于方式1
MOV TH0,#3CH
MOV TL0,#0B0H ;即数15536
SETB EA ;开总中断允许
SETB ET0 ;开定时/计数器0允许
SETB TR0 ;定时/计数器0开始运行
LOOP: AJMP LOOP ;真正工作时,这里可写任意程序
TIME0: ;定时器0的中断处理程序
PUSH ACC
PUSH PSW ;将PSW和ACC推入堆栈保护
INC 30H
MOV A,30H
CJNE A,#20,T_RET ;30H单元中的值到了20了吗?
T_L1: CPL P1.0 ;到了,取反P10
MOV 30H,#0 ;清软件计数器
T_RET:
MOV TH0,#15H
MOV TL0,#9FH ;重置定时常数
POP PSW
POP ACC
RETI
END
上面一段程序是以12M晶振做的一个计时器led灯闪烁,请问为什么
“T_RET:
MOV TH0,#15H
MOV TL0,#9FH ;重置定时常数”
这个常数为什么要定成159F#呢?5535。
请各位大虾解答一下!
初值不是应该是5636那么溢出次数才是
初值5535 则计时器溢出次数为65535-5535=60000 在12M晶振的情况下 一次溢出就是60毫秒 方便计时而已
这个就不知道了 可能是程序本身没有写好
因为程序不完整,不知主程序写什么 ,所以不好下定论.
如果象你所说,这个中断部分当然是错的.通常一进入中断就要置初值,减少误差.
你的计算推理都正确,你试试改成正确的吧!
把这两句放在中断开头:
MOV TH0,#3CH
MOV TL0,#0B0H ;即数15536
把T_RET:后的两句删了
;========================
最好看清程序再确定.