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

共20条 1/2 1 2 跳转至

单片机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:16:02     打赏
2楼
不加的话程序不就跑飞了么?楼主这个咋还反过来了呢

菜鸟
2013-12-30 20:20:31     打赏
3楼

要加呢,,你的初始化程序应该放在while的循环外面吧。


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

恩恩,我是菜鸟。

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

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


高工
2013-12-30 20:22:42     打赏
5楼

没看懂你写的程序想干什么

把主程序中和中断程序中使用的端口分开来,不要都用P2,先验证一下问题在哪里


可以肯定的是,必须加while(1),而且对进没进中断程序没有影响

这就是没有仿真器的弊端了



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

院士
2013-12-30 20:24:26     打赏
7楼

这个是有区别的,通常情况下我们是编写while(1);来限定程序在while内运行。

而有部分单片机在运行结束后会继续从头开始运行。


另  我们在编写汇编语言时,会在结束的时候写上 原地踏步 语句。


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

恩恩,我是菜鸟。

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

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


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

院士
2013-12-30 20:33:05     打赏
10楼
这个帖子短时间内反应火热

共20条 1/2 1 2 跳转至

回复

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