用过汇编的同学知道,在汇编语言中,指令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:关于ISR()不能更新变量
下一篇:ATMega8 中断方式UART测试程序
推荐阅读最新更新时间:2024-03-16 15:46