查看: 37|回复: 9
收起左侧

去掉while(1)串口为什么没有输出了

[复制链接]

393

主题

4093

帖子

1万

积分

资深工程师

 楼主| 发表于 2017-7-16 22:18 | 显示全部楼层 |返回版面|阅读模式

#define  uint  unsigned int
#define  uchar unsigned char

//定义LED的端口
#define LED1 P1_0
#define K11 P0_5

//函数声明
void Delay_ms(uint);
void initUART(void);
void UartSend_String(char *Data,int len);
//void zdsensor(void);

char Txdata[14]; //存放"HELLO WEBEE   "共14个字符串

/****************************************************************
    延时函数                                                                                       
****************************************************************/
void Delay_ms(uint n)
{
     uint i,j;
     for(i=0;i<n;i++)
     {
     for(j=0;j<1774;j++);
     }
}

void IO_Init()
{
   //  P0DIR = 0x20;      //P1_0,P1_1 IO方向输出
  //  P1INP |= 0X03;     //打开下拉
  K11 = 1;
  //  LED2 = 0;
}

/****************************************************************
   串口初始化函数                                
****************************************************************/
void InitUART(void)
{
    PERCFG = 0x00;                      //位置1 P0口
    P0SEL = 0x0c;                      //P0_2,P0_3用作串口(外部设备功能)
    P2DIR &= ~0XC0;                   //P0优先作为UART0

    U0CSR |= 0x80;                      //设置为UART方式
    U0GCR |= 11;                                       
    U0BAUD |= 216;                      //波特率设为115200
    UTX0IF = 0;                       //UART0 TX中断标志初始置位0
}
/****************************************************************
串口发送字符串函数                        
****************************************************************/
void UartSend_String(char *Data,int len)
{
  int j;
  for(j=0;j<len;j++)
  {
    U0DBUF = *Data++;
    while(UTX0IF == 0);
    UTX0IF = 0;
  }
}
/****************************************************************
主函数                                                
****************************************************************/
void main(void)
{        
  UartSend_String("get data",9);  
    CLKCONCMD &= ~0x40;               //设置系统时钟源为32MHZ晶振
    while(CLKCONSTA & 0x40);          //等待晶振稳定为32M
    CLKCONCMD &= ~0x47;               //设置系统主时钟频率为32MHZ   
     IO_Init();
    InitUART();
    while(1)
      {
           P0DIR  = 0x00;  
         if(K11==0)
         {
            Delay_ms(2);
             if(K11 == 0)
             {
              // HalUARTWrite(0,"01",2);
                 UartSend_String("01",2);   
                   P0DIR  = 0x20;
                    K11 = 1;
                    Delay_ms(50);
             }
         }
     }
}
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里 http://open.21ic.com 移步更多21ic独家微课:http://open.21ic.com/list/3/0/0

515

主题

4008

帖子

1万

积分

资深工程师

发表于 2017-7-16 22:20 | 显示全部楼层 |返回版面
程序不会自己循环的
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里 http://open.21ic.com 移步更多21ic独家微课:http://open.21ic.com/list/3/0/0

499

主题

3691

帖子

1万

积分

资深工程师

发表于 2017-7-16 22:22 | 显示全部楼层 |返回版面
要想仍然有输出应该怎么做,但是不要while(1)语句
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里 http://open.21ic.com 移步更多21ic独家微课:http://open.21ic.com/list/3/0/0

500

主题

4167

帖子

1万

积分

资深工程师

发表于 2017-7-16 22:24 | 显示全部楼层 |返回版面

没while(1)只会执行一遍这事你知道么?
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里 http://open.21ic.com 移步更多21ic独家微课:http://open.21ic.com/list/3/0/0

500

主题

4167

帖子

1万

积分

资深工程师

发表于 2017-7-16 22:27 | 显示全部楼层 |返回版面

把while(1)换成for(;;)一样。
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里 http://open.21ic.com 移步更多21ic独家微课:http://open.21ic.com/list/3/0/0

496

主题

3933

帖子

1万

积分

资深工程师

发表于 2017-7-16 22:30 | 显示全部楼层 |返回版面

没有while(1)

就不断从上到下的执行,一次又一次的,不能实时检测按键
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里 http://open.21ic.com 移步更多21ic独家微课:http://open.21ic.com/list/3/0/0

490

主题

4187

帖子

1万

积分

资深工程师

发表于 2017-7-16 22:32 | 显示全部楼层 |返回版面

大多数情况下,确实要避免死循环。
但是有时候,没有死循环是不行滴。
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里 http://open.21ic.com 移步更多21ic独家微课:http://open.21ic.com/list/3/0/0

478

主题

3784

帖子

1万

积分

资深工程师

发表于 2017-7-16 22:34 | 显示全部楼层 |返回版面

别说嵌入式就几K的程序了,Windows那么大的东西,它的消息机制也是一个while(1)
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里 http://open.21ic.com 移步更多21ic独家微课:http://open.21ic.com/list/3/0/0

393

主题

4093

帖子

1万

积分

资深工程师

 楼主| 发表于 2017-7-16 22:36 | 显示全部楼层 |返回版面

哦,惭愧呀
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里 http://open.21ic.com 移步更多21ic独家微课:http://open.21ic.com/list/3/0/0

467

主题

3748

帖子

1万

积分

资深工程师

发表于 2017-7-16 22:40 | 显示全部楼层 |返回版面

不用while(1)可以采用调度器机制或定时中断
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里 http://open.21ic.com 移步更多21ic独家微课:http://open.21ic.com/list/3/0/0
您需要登录后才可以回帖 登录 | 注册

本版积分规则

分享 快速回复 返回顶部 返回列表