找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 15631|回复: 7
打印 上一主题 下一主题
收起左侧

【求助】51单片机串口发送接收问题(PC向单片机发送1位字符,单片机接收后发回PC)

[复制链接]
跳转到指定楼层
楼主
ID:65624 发表于 2014-8-30 23:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
新人,在学习单片机时卡在这里了,因此才来请教
程序实现功能:
PC向单片机发送1位字符,单片机接收后发回PC
问题描述:
如图所示,向单片机发送十六进制11(0001 0001),最终PC接收到B1(1011 0001)或91(1001 0001)。经验证,其他数据也存在类似问题,即PC最后接收到数据最高位为1,第6位可能为0可能为1。
程序:
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
unsigned char flag,a,i;


void init()
{
        TMOD=0x20;
        TH1=0xfd;
        TL1=0xfd;
        TR1=1;
        REN=1;
        SM0=0;
        SM1=1;
        EA=1;
        ES=1;
}

void main()
{
        init();
        while(1)
        {
                if(flag==1)
                {
                        ES=0;
                        SBUF=a;
                        while(!TI);
                        TI=0;
                        ES=1;
                        flag=0;
                }
        }
        
}

void ser()interrupt 4
{
        RI=0;
        a=SBUF;
        flag=1;
}        


QQ截图20140830213313.png (19.17 KB, 下载次数: 182)

QQ截图20140830213313.png
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1 发表于 2014-8-31 00:20 | 只看该作者
可能是用的晶振不对
回复

使用道具 举报

板凳
ID:1 发表于 2014-8-31 00:22 | 只看该作者
你看这里 和你的问题类似:http://www.51hei.com/bbs/dpj-27050-1.html
回复

使用道具 举报

地板
ID:58502 发表于 2014-8-31 00:26 | 只看该作者
本帖最后由 liaolinhui 于 2014-8-31 00:28 编辑

你看看我这个程序,或许是你波特率的原因

/***********************************************************************************
*  标题:                  RS232串口通信试验(接收与发送)                            *         
*                                                                                                                                                                   *
*  1.通过本例程了解串口的基本原理及使用 ,理解并掌握对串口进行初始化                                   *
*                                                                                                                                                                   *
*   2.请使用串口调试助手(Baud 4800、数据位8、停止位1、效验位无)做为上位机来做收发试验。
*     在调试助手字符串输入框中输入数字和字符,按发送按钮,然后观察接受窗口的变化。也可以用
*         调试助手自动循环发送。                                                                                                            *
*                                                                                      *   
* 请学员认真消化本例程,学会用C语言操作串口                                             *   
*************************************************************************************/
#include<reg52.h>
unsigned char SenData,Flag;

void main()
   {

        SCON = 0x50;      //REN=1允许串行接受状态,串口工作模式1                              
            TMOD|= 0x20;      //定时器工作方式2                    
                PCON|= 0x80;                                                         
                //TH1  = 0xFD;     //baud*2  /* reload value 19200、数据位8、停止位1。效验位无 (11.0592)
                TH1 = 0xF3;                                        // //baud*2  /*  波特率4800、数据位8、停止位1。效验位无 (12M)
            TL1 = 0xF3;         
                TR1  = 1;                                                            
                ES   = 1;        //开串口中断                  
                EA   = 1;        // 开总中断
        
           // IE = 0x0;
   
        while(1)
    {
        
          if (Flag==1)
          {
            EA=0;
             SBUF=SenData;                     //SUBF接受/发送缓冲器
             while(TI==0);
         TI=0;
                 Flag=0;
                 EA=1;
          }

}

}         

/****************************************************
               串口中断程序
******************************************************/

void ser_int (void) interrupt 4 using 1
{

unsigned char ReData;
if(RI == 1)        //RI接受中断标志
{
         RI = 0;                    //清除RI接受中断标志
        ReData = SBUF;  //SUBF接受/发送缓冲器
        SenData=ReData;
         Flag=1;
   
}
}

回复

使用道具 举报

5#
ID:65490 发表于 2014-8-31 12:56 | 只看该作者
明显是波特率不对
回复

使用道具 举报

6#
ID:65624 发表于 2014-8-31 15:05 | 只看该作者
admin 发表于 2014-8-31 00:22
你看这里 和你的问题类似:http://www.51hei.com/bbs/dpj-27050-1.html

虽然不是很明白为什么,看了这个帖子,将波特率改为2400后就没问题了,十分感谢
回复

使用道具 举报

7#
ID:65624 发表于 2014-8-31 15:06 | 只看该作者
beill88 发表于 2014-8-31 12:56
明显是波特率不对

是的,是波特率的问题,十分感谢
回复

使用道具 举报

8#
ID:257389 发表于 2017-12-11 15:25 | 只看该作者
我的也是改成2400就能接收了(例程上面说的是4800)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表