串口发送数据单片机接收不到。

[复制链接]
9520|12
 楼主| 274643473 发表于 2010-4-2 10:13 | 显示全部楼层 |阅读模式
大家好,我用串口向单片机发数据,单片机总是接收不到,就是RI一直为0,不知道为什么,大家帮看一下。谢谢了。
#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;
}
john_light 发表于 2010-4-2 10:51 | 显示全部楼层
硬件接线对吗?
波特率对吗?

单片机一上电初始化后,马上噼里啪啦往外发送数据,由PC接收,这样定位问题还快些。
 楼主| 274643473 发表于 2010-4-2 11:21 | 显示全部楼层
检查过,没有问题啊!我之前试过可以用串口调试助手接收但是就是不能发送到单片机
2# john_light
john_light 发表于 2010-4-2 13:20 | 显示全部楼层
那就先在串口中原样发回看看

  1. void main(void)
  2. {
  3.     unsigned char c;


  4.     while(1)
  5.     {
  6.         if (RI == 1)
  7.         {
  8.             RI = 0;

  9.             c = SBUF;
  10.             SBUF = c;
  11.             while(TI == 0);
  12.             TI = 0;
  13.         }
  14.     }
  15. }
zhangjinboxp 发表于 2010-4-2 20:13 | 显示全部楼层
不知道你有没有将字符与数字之间相互转换!
 楼主| 274643473 发表于 2010-4-2 21:11 | 显示全部楼层
什么意思呢?
5# zhangjinboxp
歪 歪 发表于 2010-4-3 10:52 | 显示全部楼层
先确保你的串口助手没问题。看看是否发出了数据,波特率是多少。

下载地址:
http://download.cnet.com/ComTrac ... 6892.html?tag=mncol

感觉好别忘了给个review(评论),谢谢!
救火车 发表于 2010-4-3 11:04 | 显示全部楼层
调试通讯程序时最好先确认一边是正确的。
你可以先用两个电脑的串口(经232芯片转换的)对发。
成功以后你就可以确认一边是正确的。

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

一点一点调吧。祝你好运。
 楼主| 274643473 发表于 2010-4-3 14:59 | 显示全部楼层
单片机发送,用串口调试助手是可以正常收到的,但是单片机就是收不到啊。。。
8# 救火车
ShakaLeo 发表于 2010-4-3 15:24 | 显示全部楼层
检查一下RS232芯片的连接,最好能用示波器量一下RS232芯片的接收端和单片机的RX接收端,看看从PC往单片机发送数据的时候是否有电平的跳变。
 楼主| 274643473 发表于 2010-4-4 21:32 | 显示全部楼层
谢谢了,今天用示波器看检查了一下整个电路,最终发现原来是我那个串口转USB线出了问题,只能从PC读不能写,换了一根后就全部OK了。。。
10# ShakaLeo
xfgood3872 发表于 2010-4-5 14:41 | 显示全部楼层
顶10楼一下
xfgood3872 发表于 2010-4-7 20:30 | 显示全部楼层
定10楼
您需要登录后才可以回帖 登录 | 注册

本版积分规则

42

主题

75

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部