打印

单片机总是接收不到串口向单片机发的数据

[复制链接]
511|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hanwe|  楼主 | 2020-12-2 23:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
单片机总是接收不到串口向单片机发的数据

使用特权

评论回复
沙发
langgq| | 2020-12-2 23:53 | 只看该作者
楼主程序可以公开吗?贴程序看下吧,这么说看不出什么原因

使用特权

评论回复
板凳
hanwe|  楼主 | 2020-12-2 23:57 | 只看该作者

#pragma SMALL
#include <REG52.H>
#include "absacc.h"
#define uchar unsigned char

unsigned int i=0;
void delay10ms();
void display_led();
uchar test_count,C;
unsigned char num=0 ;/**[4]={0x00,0x00,0x00,0x00};**/
uchar led[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//led显示码
sbit p22=P2^2;

void init(void)
{
       TMOD=0x20;
       TH1=0xf3;//波特率2400
       TL1=0xf3;//

     PCON=0x00;   
    SCON=0x50;
       TR1=1;

}

uchar receive(void)
{
       while(RI==0);
//    {
       RI=0;
       return SBUF;
//     }
}

void  send(uchar d)
{
                    //发送数据
            SBUF=d;
            while(TI==0);TI=0;                    
}

void main(void)
{  unsigned char b;
       init();   
while(1){
        b=receive();
           num=b&0x0F;   
           display_led();    //led显示                           
         }        
}

void display_led()
{
  P0=led[num];
p22=0;
}

使用特权

评论回复
地板
谭翬| | 2020-12-4 10:05 | 只看该作者
1、晶振11.0592,计算出波特率对应的值,给TH1、TL1;
2、有条件的话,示波器检测P3.0(rxd)的i信号。
程序如下:
#pragma SMALL
#include <REG52.H>
#include "absacc.h"
#define uchar unsigned char

unsigned char num=0 ;/**[4]={0x00,0x00,0x00,0x00};**/
uchar led[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//led显示码
sbit p22=P2^2;
uchar rxdch=0;
void display_led();
void  int_es() interrupt 4 using 1//串口中断程序

if(RI==1){
    RI=0;
    rxdch=SBUF;
    SBUF=rxdch;//接收到的数据,发送出去
   }
if(TI==1){TI=0;}

///
void init(void)
{
       TMOD=0x20;
       TH1=0xf3;//波特率2400
       TL1=0xf3;//

     PCON=0x00;   
    SCON=0x50;
       TR1=1;
    EA=1;ES=1;//开中断,串口中断允许
}
void main(void)
{  unsigned char b;
    init();   
    while(1){
           b=rxdch;
           num=b&0x0F;   
           display_led();    //led显示                           
         }        
}

void display_led()
{
P0=led[num];
p22=0;
}

使用特权

评论回复
5
weifeng90| | 2020-12-6 21:33 | 只看该作者
先检查硬件连线有无问题,在排查软件问题。

使用特权

评论回复
6
guoyt| | 2020-12-8 22:10 | 只看该作者
硬件接线对吗?
波特率对吗?

单片机一上电初始化后,马上噼里啪啦往外发送数据,由PC接收,这样定位问题还快些。

使用特权

评论回复
7
llia| | 2020-12-8 22:14 | 只看该作者

那就先在串口中原样发回看看void main(void)

{

     unsigned char c;





    while(1)

     {

         if (RI == 1)

         {

             RI = 0;



            c = SBUF;

             SBUF = c;

             while(TI == 0);

             TI = 0;

         }

     }

}

使用特权

评论回复
8
zhanglli| | 2020-12-8 22:18 | 只看该作者

不知道你有没有将字符与数字之间相互转换!

使用特权

评论回复
9
lium| | 2020-12-8 22:23 | 只看该作者
先确保你的串口助手没问题。看看是否发出了数据,波特率是多少。

使用特权

评论回复
10
hanwe|  楼主 | 2020-12-8 22:37 | 只看该作者
调试通讯程序时最好先确认一边是正确的。
你可以先用两个电脑的串口(经232芯片转换的)对发。
成功以后你就可以确认一边是正确的。

再调试单片机的收和发,两个状态。
我建议你先调试单片机的发。发比收的程序简单一点。
如果电脑上收不到数,就检查接线和初始化程序。
如果在电脑上有错数,说明波特率不对。

使用特权

评论回复
11
llia| | 2020-12-8 22:41 | 只看该作者
单片机发送,用串口调试助手是可以正常收到的,但是单片机就是收不到啊。。。

使用特权

评论回复
12
langgq| | 2020-12-8 22:45 | 只看该作者
检查一下RS232芯片的连接,最好能用示波器量一下RS232芯片的接收端和单片机的RX接收端

使用特权

评论回复
13
zhanglli| | 2020-12-8 22:50 | 只看该作者
看看从PC往单片机发送数据的时候是否有电平的跳变。

使用特权

评论回复
14
hanwe|  楼主 | 2020-12-8 22:56 | 只看该作者
用示波器看检查了一下整个电路,最终发现原来是我那个串口转USB线出了问题,只能从PC读不能写,换了一根后就全部OK了。。。

使用特权

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

本版积分规则

979

主题

8749

帖子

4

粉丝