打印

请问串口通信部分代码无法正常运行是怎么回事?

[复制链接]
3021|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
cr315|  楼主 | 2021-8-23 11:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
今天偶然去弄一个很早以前运行通过的串口通信实验例程,源代码中,有个功能,即按K1后,单片机会通过串口自动发送一个字符串给电脑,并显示在串口调试软件的接收窗口中,当我把K1这个按钮去掉,直接去运行K1这部分代码时,此部分代码却无法运行,不能自动发送字符串给PC,百思不得。
下面是部分代码:
uchar T1_com[]=" Receving Data:\0";                //发送的字符串
void K1_com(void)         //按键K1功能子函数
{
uchar i=0;
  IF(!K1)                //按键是否按下
{
  while(T1_com!='\0') //发送预定字符是否完毕
  {
   SBUF=T1_com;      //发送预定字符
        while(!ti);          //判断字符是否发送完毕
         TI=0;               //停止发送字符
         i++;                //计数加1,返回发下个字符
        }
  }
}
下面是main部分代码
while(1)                 //循环
{
K1_com();                //调用按键子函数
  delay();                //按键间隔延时
  if(RI)                  //判断是否收到PC机串口信号
         {
          x=SBUF;              //收到的信号存X
          lcd1602_rendd(x);       //收到的数字送显示子函数显示
          SBUF=x;                 //收到数字送回串口
             while(!TI);            //判断串口发送是否完成
           TI=0;                  //停止发送字符
此后代码省略.
以上代码,当按下目标板上的K1时,自动发送设定好的字符串到PC
我把上面 void K1_com(void)  子函数改成如下代码
void usart_com(void)         //串口发送固定字符子函数
{
   while(T1_com!='\0') //发送预定字符是否完毕
  {
   SBUF=T1_com;      //发送预定字符
        while(!TI);          //判断字符是否发送完毕
         TI=0;               //停止发送字符
         i++;                //计数加1,返回发下个字符
        }
}
将main主程序中改为
void main(void)            //主程序开始
{
uchar x;
T1_com_init();            //调定时器1串口初始化子函数
LED0=0;                  //LED0点亮,
usart_com();
while(1)                 //循环
{
  if(RI)                  //判断是否收到PC机串口信号
         {
         
          x=SBUF;              //收到的信号存X
          SBUF=x;                 //收到数字送回串口
             while(!TI);            //判断串口发送是否完成
           TI=0;                  //停止发送字符
                RI=0;                  //停止接收字符
         }
  }
程序不能自动发送设置好的字符串,相当于跳过usart_com(); 子函数,直接运行后面的代码。

使用特权

评论回复

相关帖子

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

本版积分规则

1323

主题

3802

帖子

0

粉丝