找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[已解决]关于单片机串口通讯的疑惑

[复制链接]
跳转到指定楼层
楼主
我按照老师给的程序运行了下,如下。
  1. #include <reg52.h>
  2. void ConfigUART(unsigned int baud);

  3. void main()
  4. {
  5.     EA = 1;   //使能总中断
  6.     ConfigUART(9600);  //配置波特率为9600
  7.     while (1);
  8. }
  9. /* 串口配置函数,baud-通信波特率 */
  10. void ConfigUART(unsigned int baud)
  11. {
  12.     SCON  = 0x50;  //配置串口为模式1
  13.     TMOD &= 0x0F;  //清零T1的控制位
  14.     TMOD |= 0x20;  //配置T1为模式2
  15.     TH1 = 256 - (11059200/12/32)/baud;  //计算T1重载值
  16.     TL1 = TH1;     //初值等于重载值
  17.     ET1 = 0;       //禁止T1中断
  18.     ES  = 1;       //使能串口中断
  19.     TR1 = 1;       //启动T1
  20. }
  21. /* UART中断服务函数 */
  22. void InterruptUART() interrupt 4
  23. {
  24.     if (RI)  //接收到字节
  25.     {
  26.         RI = 0;   //手动清零接收中断标志位
  27.         SBUF = SBUF;  //接收的数原路返回,左边是发送SBUF,右边是接收SBUF
  28.     }
  29.     if (TI)  //字节发送完毕
  30.     {
  31.         TI = 0;   //手动清零发送中断标志位
  32.     }
  33. }
复制代码
按理来说,我按照字符类发送0,接收是十六进制,他应该给我返回的是30,结果给我返回的是B0,我按照字符类发送1,接收是十六进制,他应该给我返回的是31,结果给我返回的是B1.
按照返回的值B0转换为十进制是176,减128是48,48的ASCLL值是0.
按照返回的值B1转换为十进制是177,减128是49,48的ASCLL值是1.
我有点理解不了他为什么给我返回的不是是30而是B0,为什么为这样,求解答?



QQ截图20171108092057.png (73.51 KB, 下载次数: 82)

QQ截图20171108092057.png

QQ截图20171108092111.png (42.68 KB, 下载次数: 83)

QQ截图20171108092111.png

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

沙发
ID:164602 发表于 2017-11-8 11:34 | 只看该作者
看了你的电路图,可能问题出在你的晶振上。
你程序用的时钟11.0592MHz,但电路图中用的是12M,而12M晶振情况下,要误差小,最大波特率为4800加倍。你设置的9600,误差6.99%。一般都不可能接收到正确的信息了。
另外,你的STC-ISP程序太老了吧,下载一个新的。新版的可以看到波特率设置的误差。



评分

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

查看全部评分

回复

使用道具 举报

板凳
ID:214628 发表于 2017-11-8 13:56 | 只看该作者
HC6800-ES-V2.0 发表于 2017-11-8 11:34
看了你的电路图,可能问题出在你的晶振上。
你程序用的时钟11.0592MHz,但电路图中用的是12M,而12M晶振情 ...

晶振没有错误,仿真设置里面我设置的是11.0592MHZ,只是没有改外面的的标号。
回复

使用道具 举报

地板
ID:246841 发表于 2017-11-8 14:21 | 只看该作者
仿真中单片机的晶振没改,

评分

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

查看全部评分

回复

使用道具 举报

5#
ID:214628 发表于 2017-11-8 14:29 | 只看该作者
问题已解决了,感谢长帆888,我重建了一个新的仿真用的12M来测试发现没问题,然后检查原来的仿真设计,发现我的串口设置跟晶振时钟设置没有问题,主要是单片机内部还有一个时钟忘记设置了,所以出现了这个问题,谢谢长帆888。

评分

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

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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