打印

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

[复制链接]
463|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lium|  楼主 | 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);
             }
         }
     }
}
沙发
guoyt| | 2017-7-16 22:20 | 只看该作者
程序不会自己循环的

使用特权

评论回复
板凳
hanwe| | 2017-7-16 22:22 | 只看该作者
要想仍然有输出应该怎么做,但是不要while(1)语句

使用特权

评论回复
地板
yufe| | 2017-7-16 22:24 | 只看该作者

没while(1)只会执行一遍这事你知道么?

使用特权

评论回复
5
yufe| | 2017-7-16 22:27 | 只看该作者

把while(1)换成for(;;)一样。

使用特权

评论回复
6
llia| | 2017-7-16 22:30 | 只看该作者

没有while(1)

就不断从上到下的执行,一次又一次的,不能实时检测按键

使用特权

评论回复
7
wangpe| | 2017-7-16 22:32 | 只看该作者

大多数情况下,确实要避免死循环。
但是有时候,没有死循环是不行滴。

使用特权

评论回复
8
langgq| | 2017-7-16 22:34 | 只看该作者

别说嵌入式就几K的程序了,Windows那么大的东西,它的消息机制也是一个while(1)

使用特权

评论回复
9
lium|  楼主 | 2017-7-16 22:36 | 只看该作者

哦,惭愧呀

使用特权

评论回复
10
wangzsa| | 2017-7-16 22:40 | 只看该作者

不用while(1)可以采用调度器机制或定时中断

使用特权

评论回复
11
落叶_阿三| | 2017-8-10 14:26 | 只看该作者
这个,有点,,,,,

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

915

主题

9578

帖子

3

粉丝