论坛风格切换切换到宽版
  • 2943阅读
  • 7回复

新手诚心请教reti概念问题(已解决,感谢各位热心朋友) [复制链接]

上一主题 下一主题
离线sniperjack
 
发帖
4003
只看楼主 倒序阅读 0楼 发表于: 2007-02-01
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     ;立即数

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         ;到了

mov 30h,#0       ;清软件计数器
time1:mov th0,#15h ;给 t0 重新赋值
mov tl0,#9fh     ;重置定时常数
pop psw         ;
pop acc         ;
reti             ;   <----------------------请问这个reti执行完后该执行哪里了?
end


这个地方彻底没理解到啊....
离线周学南
发帖
556
只看该作者 1楼 发表于: 2007-02-01
主程序运行到哪里产生中断,reti就反回到哪里
离线sniperjack
发帖
4003
只看该作者 2楼 发表于: 2007-02-01
那下一句就该执行哪句命令??
离线周学南
发帖
556
只看该作者 3楼 发表于: 2007-02-01
执行loop:ajmp loop ;真正工作时,这里可写任意程序
里面的产生中断处的后面的哪句
具体哪一句要看具体程序,如果有按键程序,那么按与不按是不一样的
离线sniperjack
发帖
4003
只看该作者 4楼 发表于: 2007-02-01
以上就是所有程序了,按我的理解应该是跳到org 30h开始顺序执行,运行20次后满足<cjne a,#20,time1 ;30h单元中的值到了 20 了吗?>条件后反转一次电平
离线sniperjack
发帖
4003
只看该作者 5楼 发表于: 2007-02-01
经过请教各位ham,得出的答案是

bg6agb(9508270) 1728
你贴出来的程序最后会在
loop:ajmp loop
这个语句上无限次循环,所以中断发生的时候,程序只是在执行上面这个语句,中断结束,执行reti后,也会回到上面这个语句


谢谢bg6agb了
离线周学南
发帖
556
只看该作者 6楼 发表于: 2007-02-01

org 30h ;
start:mov p1,#0ffh ;关所有的灯
mov 30h,#00h ;软件计数器预清 0
mov tmod,#01h ;定时/计数器 0 工作于方式 1
mov th0,#3ch ;
mov tl0,#0b0h ;立即数

setb ea ;开总中断允许
setb et0 ;开定时/计数器 0 允许
setb tr0 ;定时/计数器 0 开始运行
这里只运行一次
然后产生20次中断,满足cjne a,#20,time1 这一句条件后反转一次电平
离线sniperjack
发帖
4003
只看该作者 7楼 发表于: 2007-02-01
楼上说的很对