单片机汇编语言RETI的用法

来源:百度知道 编辑:UC知道 时间:2024/06/17 17:36:25
89c51,要求P1^0口每1s取反一次。使用T0定时器方式1,晶振12MHZ,
根据公式:(2^16-x初值)*震荡周期*12=50ms,求出x=3CB0H;
我想使用循环程序方法程序实现,即赋值B为20,DJNZ方法,20次定时50ms即达到1s。
ORG 0000H
AJMP MAIN
ORG 000BH
AJMP PART1

ORG 0030H
MAIN:
MOV TMOD,#01H
MOV TH0,#3CH
MOV TL0,#0B0H
MOV R7,#0AH
MOV IE,#82H;这个和你的按位启动是一样效果
SETB TR0
SJMP $;等待!!

PART1:
MOV TH0,#3CH
MOV TL0,#0B0H
DJNZ R7,FANHUI
CPL P1.0
MOV R7,#0AH
;AA:SJMP $ 原地踏步喽
FANHUI:
RETI
end
我想问一下,reti指令到底返回到什么地方了?

单片机汇编语言中,RETI指令用于从中断程序中返回。用法只有一个,就是放在中断服务程序的最后,实现从中断程序中返回。示例如下:

;定时器1中断服务程序;
T1INT:PUSH PSW;保护现场
PUSH ACC;
;
MOV TH1,#0EEH;刷新速率200/4=50

QT1:POP ACC;恢复现场
POP PSW;
RETI;
;

reti指令可以返回到任何一条指令上,当中断发生时,自动将断点入口入栈,于是最后使用reti就可以返回到程序断点处,继续执行下面的指令。

就返回到( SJMP $;等待!! )这条指令这里.

RETI只能用于中断返回。在哪里发生中断,就返回到哪里。子程序返回要用RET就可以了