找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机串口通信问题(输入什么字符或数字返回显示程序)

[复制链接]
跳转到指定楼层
楼主
30黑币
程序目的:输入什么字符或数字返回显示
主要问题:向单片机发送0时,返回80.麻烦能帮忙看下吗?


单片机源程序如下:
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. void init()
  6. {
  7.         //串口
  8.                 REN=1;//允许串口接受数据
  9.                 SM0=0;//SM2和0为串口工作模式选择
  10.                 SM1=1;
  11.                 ES=1;//允许串口中断
  12.                 //定时器设置
  13.                 TMOD=0x20;//定时器工作模式选择方式2        自动装填
  14.                 TH1=0xfd; //TH1与TL1为定时器中T1寄存器的高8低8位;设置波特率用
  15.                 TL1=0xfd;
  16.                 EA=1;//允许总中断
  17.                 TR1=1;//开启T1定时器
  18. }
  19. void main()
  20. {         
  21.         init();
  22.         while(1)
  23.         {}
  24. }
  25. void ya(void) interrupt 4
  26. {
  27.         uchar a;
  28.         if(RI)
  29.         {  
  30.                 a=SBUF;
  31.                 RI=0;
  32.                 SBUF=a;
  33.         }
  34.         if(TI)
  35.                         TI=0;
  36. }
复制代码

最佳答案

查看完整内容

程序本身没有什么问题,主要是因为晶振频率不合适,导致波特率误差太大,需要设置加倍。 void UartInit(void) //4800bps@12.000MHz { PCON |= 0x80; //使能波特率倍速位SMOD SCON = 0x50; //8位数据,可变波特率 TMOD = 0x20; //设定定时器1为8位自动重装方式 TL1 = 0xF3; //设定定时初值 TH1 = 0xF3; //设定定时器重装值 TR1 = 1; //启动定时器1 ET1 = 0; //禁止定时器1中断 EA ...

评分

参与人数 1黑币 +10 收起 理由
猪脚 + 10 很给力!

查看全部评分

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

使用道具 举报

沙发
ID:213173 发表于 2019-4-9 15:40 | 只看该作者
lizzz 发表于 2019-4-9 21:22
求指点呀,调了一下午加晚上了    头疼

程序本身没有什么问题,主要是因为晶振频率不合适,导致波特率误差太大,需要设置加倍。
void UartInit(void)                //4800bps@12.000MHz
{
        PCON |= 0x80;                //使能波特率倍速位SMOD
        SCON = 0x50;                //8位数据,可变波特率
        TMOD = 0x20;                //设定定时器1为8位自动重装方式
        TL1 = 0xF3;                //设定定时初值
        TH1 = 0xF3;                //设定定时器重装值
        TR1 = 1;                       //启动定时器1
        ET1 = 0;                        //禁止定时器1中断
        EA=1;                       //允许总中断
        ES=1;                    //允许串口中断
}

评分

参与人数 1黑币 +10 收起 理由
猪脚 + 10 赞一个!

查看全部评分

回复

使用道具 举报

板凳
ID:440482 发表于 2019-4-9 16:22 | 只看该作者
不要沉呀
回复

使用道具 举报

地板
ID:508043 发表于 2019-4-9 16:56 | 只看该作者
等待大佬
回复

使用道具 举报

5#
ID:506093 发表于 2019-4-9 17:04 | 只看该作者
你这里可能是串口初始化有问题 ,你看看用的是什么型号的单片机,然后在STC-ISP那个下载程序软件里面可以找到对应型号的串口初始化程序,你修改一下应该就可以的了
回复

使用道具 举报

6#
ID:440482 发表于 2019-4-9 21:20 | 只看该作者
后来发现和波特率的设置有问题,硬件单片机的晶振是12MHZ的。
修改后传一些数没问题,但传某些数如CC就会出现端口不停传一些不知道的数.求指点呀
代码如下
  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. uchar a,flag;

  5. void init()
  6. {
  7.         //串口输ru
  8.                 SCON=0X50;
  9.                 ES=1;//允许串口中断
  10.                 //定时器设置
  11.                 TMOD=0X20;//定时器工作模式选择方式2        自动装填
  12.                 TH1=0XF3; //TH1与TL1为定时器中T1寄存器的高8低8位;设置波特率用
  13.                 TL1=0XF3;//波特率4600
  14.                 PCON=0X80;
  15.                 EA=1;//允许总中断
  16.                 TR1=1;//开启T1定时器
  17. }
  18. void main()
  19. {         
  20.         init();
  21.         while(1);
  22. }
  23. void ya() interrupt 4
  24. {

  25.          a=SBUF;
  26.          RI=0;
  27.          ES=0;
  28.          SBUF=a;
  29.          while(!TI);
  30.          TI=0;
  31.          ES=1;
  32.         }
  33.        


复制代码
回复

使用道具 举报

7#
ID:440482 发表于 2019-4-9 21:22 | 只看该作者
求指点呀,调了一下午加晚上了    头疼
回复

使用道具 举报

8#
ID:506093 发表于 2019-4-10 08:33 | 只看该作者
lizzz 发表于 2019-4-9 21:20
后来发现和波特率的设置有问题,硬件单片机的晶振是12MHZ的。
修改后传一些数没问题,但传某些数如CC就会 ...

你这里应该仍然是串口初始化问题,你这里的波特率设置4600,那串口调试助手那里也是设置为4600吗?你的单片机型号是什么?我帮你修改一下串口初始化程序,你再试试吧!

评分

参与人数 1黑币 +20 收起 理由
lizzz + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

9#
ID:440482 发表于 2019-4-10 10:21 | 只看该作者
飞云 发表于 2019-4-10 08:33
你这里应该仍然是串口初始化问题,你这里的波特率设置4600,那串口调试助手那里也是设置为4600吗?你的单 ...

谢谢,谢谢问题解决了。找到问题了上边波特率我打错了它是加倍下的4800,后来在普中(卖开发板的带的串口调试工具)改了,问题就出现上述发送CC后串口不停返回值,之后又用了其他串口调试软件,显示就正常了
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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