51单片机串口通信求助!!!!!

2019-07-16 04:07发布

最近在使用串口通信时遇到了点小问题解决不了,
用的是AT89S51和max232与PC的通信,串口连接好之后板子上电,测试程序在跑,但是串口不工作,此时测的单片机TX引脚低电平,然后掉电之后迅速上电串口就好了,大神给我分析一下子。。。在线等。。。。。。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
lovezjf234
1楼-- · 2019-07-16 08:55
max232是不是有问题,还有你的代码能保证正确么?
靠譜尐圊哖
2楼-- · 2019-07-16 09:22
lovezjf234 发表于 2012-10-30 09:40
max232是不是有问题,还有你的代码能保证正确么?

是一个电机驱动的程序   我把串口的程序贴出来给你看一下啊
靠譜尐圊哖
3楼-- · 2019-07-16 14:55
lovezjf234 发表于 2012-10-30 09:40
max232是不是有问题,还有你的代码能保证正确么?

void cpu_init()
{
  //I/0初始化
  TMOD=0x20;//使定时器T1工作在方式2,即T1工作在常数自动装入的8位定时器/计数器状态
  TCON=0x00;//清定时器T0T1溢出标志,关定时器T0T1,
            //清外中断INT0和INT1溢出标志,选择INTOINT1为电平触发方式
  TH1=0xfd; //11.0592MHz下,设置串行口波特率为9600
  TL1=0xfd;  
  PCON=0x00;//波特率不加倍
  TR1=1;//启动定时器T1
  SCON=0x50;//串口工作在方式1,且允许串行口接收,set byte rate as 9600bps
  //IP=0x01;//设置外中断INT0为高优先级,此处加优先级           
   
  IE=0x90;   // EA=1,ES=1,开总中断,开串行中断

ZM_Key1=1;  
ZM_Key2=1;
FM_Key1=1;  
FM_Key2=1;
eye_LR=0;
eye_LR_temp=0xFF;
}

下面是串口通信
//增加串口中断模块
void cpu_com() interrupt 4
{
   uchar rev;
   EA=0;
   if(RI)
   {
     RI=0;
     rev=SBUF;//CPU收到的PC机数据
  if( (rev&0x60)==0x40)//判断是否为镜头变倍指令
  {  
      switch(rev&0x03)
       {
       case 0x00:zoom_motor(0,0);break;//控制变倍镜头停止(锁定)      
     case 0x01:zoom_motor(1,1);break;//控制变倍镜头倍率变大     
     case 0x02:zoom_motor(1,0);break;//控制变倍镜头倍率变小            
     default:break;
     }
   }
  if( (rev&0x60)==0x20 )//判断是否为镜头聚焦指令
    {
     switch(rev&0x03)
     {        
      case 0x00:send_LR_info() ;break;
    default: break;
     }
    }        
  }
   if(TI)
   {
   TI=0;
   }
   EA=1;
}
richard_wang
4楼-- · 2019-07-16 19:38
 精彩回答 2  元偷偷看……
靠譜尐圊哖
5楼-- · 2019-07-16 23:16
richard_wang 发表于 2012-10-30 10:58
好好学习天天向上谢谢lz

问题没解决呢     烦的
靠譜尐圊哖
6楼-- · 2019-07-17 01:18
靠譜尐圊哖 发表于 2012-10-30 11:20
问题没解决呢     烦的

问题已解决,是因为开机的时候没清SBUF寄存器引起的   MCU通信   要先有“握手”信号才能建立连接    此时若SBUF中有数据  这个时候会发生电平冲突    连接建立不起来         MCU后迅速上电就等于将单片机“复位”复位后的MCU就相当于将SBUF清0,所以就像上面说的第二次开电的时候才能建立连接   

一周热门 更多>