找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机接受的数据没有加一是波特率代码配置错误了吗?

[复制链接]
抢楼 抢楼 本帖为抢楼帖,欢迎抢楼! 
跳转到指定楼层
楼主
ID:418482 发表于 2018-11-7 21:07 | 只看该作者 |只看大图 回帖奖励 |阅读模式
6黑币
麻烦大家告我一下如何改正
  1. #include<stc12c5a60s2.h>

  2. void configuart(unsigned int baud);

  3. void main()
  4. {
  5.    EA=1;
  6.    configuart(9600);
  7.    while(1);
  8. }
  9. void configuart(unsigned int baud)
  10. {
  11.            PCON|=0X80;
  12.         SCON=0X50;
  13.         TMOD&=0X0F;
  14.         TMOD|=0X20;
  15.         TH1=256-(22118400/12/32)/baud;
  16.         TL1=TH1;
  17.         ET0=0;
  18.         ES=1;
  19.         TR1=1;
  20. }

  21. void interruptuart() interrupt 4
  22. {
  23.       if(RI)
  24.           {
  25.              RI=0;
  26.                  SBUF=SBUF+1;
  27.           }
  28.           if(TI)
  29.           {
  30.              TI=0;
  31.           }
  32. }
复制代码


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

使用道具 举报

沙发
ID:164602 发表于 2018-11-8 08:21 | 只看该作者
看你用的是STC12的单片机,你确定它是12分频的?
可能问题就出在这里。
看看STC-ISP下载软件的波特率计算器,可以知道:如果你的单片机是12分频的,你的计算就是正确的,如果不是12分频的,就错了。


这是12分频的,初值和你计算的一样。



这个是不分频的,初值和你的计算结果就不同了。
回复

使用道具 举报

板凳
ID:94031 发表于 2018-11-8 09:10 | 只看该作者
SBUF=SBUF+1;用法错误,应该rbuf=SBUF;,rbuf=rbuf+1;
回复

使用道具 举报

地板
ID:149144 发表于 2018-11-8 09:12 | 只看该作者
怎么又是你,你在做什么东西,做东西不要急,先好好看看数据手册
configuart(9600); baud = 9600 ?
里面的内容发过来
估计你的 AUXR  没有配置
回复

使用道具 举报

5#
ID:418482 发表于 2018-11-8 12:16 | 只看该作者
xuyaqi 发表于 2018-11-8 09:10
SBUF=SBUF+1;用法错误,应该rbuf=SBUF;,rbuf=rbuf+1;

这样不行啊
回复

使用道具 举报

6#
ID:418482 发表于 2018-11-8 12:17 | 只看该作者
cuihaodianzi 发表于 2018-11-8 09:12
怎么又是你,你在做什么东西,做东西不要急,先好好看看数据手册
configuart(9600); baud = 9600 ?
里面 ...

配置了也没有用
回复

使用道具 举报

7#
ID:418482 发表于 2018-11-8 13:06 | 只看该作者
HC6800-ES-V2.0 发表于 2018-11-8 08:21
看你用的是STC12的单片机,你确定它是12分频的?
可能问题就出在这里。
看看STC-ISP下载软件的波特率计算 ...
  1. #include<stc12c5a60s2.h>

  2. //void configuart(unsigned int baud);

  3. void main()
  4. {
  5.    EA=1;
  6.    
  7.    while(1);
  8. }
  9. void configuart()
  10. {
  11.            PCON &= 0x7F;                //波特率不倍速
  12.         SCON = 0x50;                //8位数据,可变波特率
  13.         AUXR &= 0xBF;                //定时器1时钟为Fosc/12,即12T
  14.         AUXR &= 0xFE;                //串口1选择定时器1为波特率发生器
  15.         TMOD &= 0x0F;                //清除定时器1模式位
  16.         TMOD |= 0x20;                //设定定时器1为8位自动重装方式
  17.         TL1 = 0xFA;                //设定定时初值
  18.         TH1 = 0xFA;                //设定定时器重装值
  19.         ET1 = 0;                //禁止定时器1中断
  20.         TR1 = 1;
  21. }

  22. void interruptuart() interrupt 4
  23. {
  24.       if(RI)
  25.           {
  26.              RI=0;
  27.                  SBUF=SBUF+1;
  28.           }
  29.           if(TI)
  30.           {
  31.              TI=0;
  32.           }
  33. }
复制代码


重新添加了代码还是不加1 啊
回复

使用道具 举报

8#
ID:123289 发表于 2018-11-8 13:10 | 只看该作者
你现发一个,试试。第一个中断由谁引起呢?
回复

使用道具 举报

9#
ID:418482 发表于 2018-11-8 13:10 | 只看该作者
xuyaqi 发表于 2018-11-8 09:10
SBUF=SBUF+1;用法错误,应该rbuf=SBUF;,rbuf=rbuf+1;

这个代码也是不行
回复

使用道具 举报

10#
ID:418482 发表于 2018-11-9 08:32 | 只看该作者
已解决
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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