这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 单片机MAIN函数里加不加while(1)的问题

共8条 1/1 1 跳转至

单片机MAIN函数里加不加while(1)的问题

菜鸟
2013-12-30 20:12:52     打赏

WT:我发现MAIN函数里加上while(1)与不加while(1)对于MAIN函数里是没影响的,但对于中断函数是有影响的。如不加while(1)时,中断函数中红色部分做实验成功运行,而那个加while(1)时,那个中断函数中红色部分做实验不成功(跟不写一样)。

 

主函数部分如下

void main(void) //加不加循环对串口的影响???????????????????
{
 //while(1)  
 //{
  UART_init();  
  P2 = 0x99;
  DELAY_MS(1000);
  P2 = ~P2;
  DELAY_MS(1000);
//}
}

 

中断函数部分

 

void UART_R (void) interrupt 4  using 1{ //切换寄存器组到1
 unsigned char UART_data, i; //定义串口接收数据变量
 RI = 0; 
    //令接收中断标志位为0(软件清零)
 UART_data = SBUF; //将接收到的数据送入变量 UART_data
 for(i;i<10;i++)    
 {
  P2 = UART_data; 
  DELAY_MS(100);
  P2 = ~UART_data;
  DELAY_MS(100);
 }
 //用户函数内容(用户可使用UART_data做数据处理)
 SBUF = ~UART_data; //将接收的数据发送回去(删除//即生效)
 while(TI == 0); //检查发送中断标志位
 TI = 0;  //令发送中断标志位为0(软件清零)

 




关键词: 单片机     while      uart    

菜鸟
2013-12-30 20:21:58     打赏
2楼

恩恩,我是菜鸟。

第一,不加的话在编译的时候应该会自动加。

第二,如果不给sbuf发数据的话是一样的,但发的话,不加while的话反而成功,加的话反而不成功。


菜鸟
2013-12-30 20:23:47     打赏
3楼
放外面也是一样,不成功啊。试过了。不加反而可以

菜鸟
2013-12-30 20:28:39     打赏
4楼

恩恩,我是菜鸟。

第一,不加的话在编译的时候应该会自动加。

第二,如果不给sbuf发数据的话是一样的,但发的话,不加while的话反而成功,加的话反而不成功。


菜鸟
2013-12-30 20:30:45     打赏
5楼
放外面也是一样,不成功啊。试过了。不加反而可以

菜鸟
2013-12-30 20:34:22     打赏
6楼

是的 P2 IO口是连着8个led  问题是中断是不闪  加那个while的话 问题是中断是P2的LED不闪 , 也就是说不成功

不加那个while的话 问题是中断的P2的LED是闪的也就是说成功

菜鸟
2013-12-30 21:09:53     打赏
7楼

是的  不加while()的话 实验成功

 


菜鸟
2013-12-30 21:11:03     打赏
8楼
不管加不加那个while
串口发个11都会返回ee,这个没问题; 问题在于加while的话,中断中 for(i;i<10;i++)   
{
P2 = UART_data;
DELAY_MS(100);
P2 = ~UART_data;
DELAY_MS(100);
}就不闪。就是那个LED不闪
不加while的话  中断会闪10次  

共8条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]