打印

串口通讯问题

[复制链接]
1679|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gxgclg|  楼主 | 2012-8-30 18:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一段C51程序,其他部分不管,下面贴出了串口部分,串口发送数据给上位机。
我要发送“LiMing”,可串口助手只接收到“L”
因在面包板上,可能是接触不好,按键后串口助手只能获得这样的结果:
有时没反应,有时出现一个L,有时连续出现两个L
系统晶振是11.0592
串口是用串口usb下载模块连接电脑的。
void main()
{
  TMOD
=0x22;     
  TH1
=0xFD;      
  TL1
=TH1;
  EA
=1;  ET0=1;  //全局中断允许,T0中断允许
  TR0=1;         //T0运行
  TR1=1;         //T1运行
  REN=1;         //串口接收允许
  SM0=0;  SM1=1; //串口工作方式1
  ES=1;          //串口中断允许
  keyTestSat=0;
  
while(1)
  {
    keyScan();
  }
}

void keyScan()     //键盘检测
{
   
if (keyTestSat==0)
    {
        
if (keyTest==0)
        {
            delayms(
10);
            
if (keyTest==0)
            {keyTestSat
=1;
            sendmsg();
            }
        }
    }
else{
        
if (keyTestSat==1)
        {
            delayms(
10);
            keyTestSat
=0;
        }
    }
}

void delayms(uchar xms)            //延迟调用
{
    uchar i,j;
   
for(i=xms;i>0;i--)
        
for(j=110;j>0;j--);
}

void sendmsg()
{
  uchar a,b,c,d,e,f;
  a
='L';  b="i"; c="M"; d="i"; e="n"; f="g";
  TR0
=0;  
  ES
=0;
  SBUF
=a;  while(!TI);
  SBUF
=b;  while(!TI);
  SBUF
=c;  while(!TI);
  SBUF
=d;  while(!TI);
  SBUF
=e;  while(!TI);
  SBUF
=f;  while(!TI);
  ES
=1;   //允许串口中断
  reSetIR();
  TR0
=1;
}

相关帖子

沙发
火箭球迷| | 2012-8-30 19:16 | 只看该作者
while(!TI);
请确认这条语句。
此外终端设置了什么中断方式

使用特权

评论回复
板凳
dfsa| | 2012-8-30 19:22 | 只看该作者
字符赋值的引号应该是单引号

使用特权

评论回复
地板
summerlover| | 2012-9-2 21:41 | 只看该作者
估计是其他中断影响了串口,是不是设置了中断优先级啊

使用特权

评论回复
5
autor| | 2012-9-7 12:34 | 只看该作者
肯定是被其他终端干扰了,程序跑飞了

使用特权

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

本版积分规则

177

主题

1653

帖子

1

粉丝