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

2019-07-16 04:07发布

最近在使用串口通信时遇到了点小问题解决不了,
用的是AT89S51和max232与PC的通信,串口连接好之后板子上电,测试程序在跑,但是串口不工作,此时测的单片机TX引脚低电平,然后掉电之后迅速上电串口就好了,大神给我分析一下子。。。在线等。。。。。。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
6条回答
靠譜尐圊哖
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;
}

一周热门 更多>