AVR-GCC 关于reti()

发布者:幸福满溢最新更新时间:2017-11-21 来源: eefocus关键字:AVR-GCC  reti() 手机看文章 扫描二维码
随时随地手机看文章

用过汇编的同学知道,在汇编语言中,指令reti是用来从中断服务程序中返回的。然后在winavr中我们用C遍了这样一段程序:

 

#include

……

ISR(USART_RXC_vect)

{

          uart_putc('a');

          while(!(UCSRA&(1<

          char dummy = UDR;

          flag = !flag;

          uart_putc_hex(flag);

          reti();

}

……

int main(void)

{

        uart_init();

        uart_putstring("starting\r\n");  //send data to PC

        sei();

        while(1)

       {

           ……

        }

}

运行程序发现,只要你从串口助手向单片机发送字符,都会输出一条:

“starting”

这就说明了,每次从中断返回的时候,程序被重启了。被谁重启的呢,经过调试发现,是reti()重启的。我晕,原来它不只是简单的从中断返回,而且重启了整个程序。这一点要谨记啊。


关键字:AVR-GCC  reti() 引用地址:AVR-GCC 关于reti()

上一篇:AVR-GCC:关于ISR()不能更新变量
下一篇:ATMega8 中断方式UART测试程序

推荐阅读最新更新时间:2024-03-16 15:46

51单片机汇编语言子程序调用指令RET RETI
控制转移 指令 用于控制程序的流向,所控制的范围即为程序存储器区间,MCS-51系列单片机的控制转移 指令 相对丰富,有可对64kB程序空间地址单元进行访问的长调用、长转移指令,也有可对2kB字节进行访问的绝对调用和绝对转移指令,还有在一页范围内短相对转移及其它无条件转移指令,这些指令的执行一般都不会对标志位有影响。 . 子程序调用指令(1条) 子程序是为了便于程序编写,减少那些需反复执行的程序占用多余的地址空间而引入的程序分支,从而有了主程序和子程序的概念,需要反复执行的一些程序,我们在编程时一般都把它们编写成子程序,当需要用它们时,就用一个调用命令使程序按调用的地址去执行,这就需要子程序的调用指令和返回指令。 LCALL
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved