找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

51单片机串口通信 接收不到返回值

查看数: 5185 | 评论数: 2 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2019-8-17 17:33

正文摘要:

新人第一次提问,如有不足请各位多多包涵~ 单片机型号:STC85C516  晶振:12MHz  波特率:2400 问题描述:在做UART串口通信时 我想实现用电脑给单片机发送一个数字 然后单片机返回这个数字+ ...

回复

ID:601140 发表于 2019-8-18 11:22
wulin 发表于 2019-8-18 07:16
1.没有STC85C516这个型号,只有STC89C516RD+这个型号。
2.使用12MHz晶振波特率会有误差,建议使用11.0592M ...

那个单片机型号确实是我打错了不好意思...非常感谢您的详细解答!!
ID:213173 发表于 2019-8-18 07:16
1.没有STC85C516这个型号,只有STC89C516RD+这个型号。
2.使用12MHz晶振波特率会有误差,建议使用11.0592MHz晶振。
3.串口通讯模块已经是做在MCU内部的硬件,通过正常配置相应寄存器就能正常工作,不需要像模拟串口那样写程序。
4.串口中断号是interrupt 4, 不是interrupt 3
给你一个测试程序参考
  1. #include <reg52.H>

  2. unsigned char a;//接收缓冲变量

  3. void main()                                                       
  4. {
  5.         TMOD=0x20;        //定时器1方式2(8位自动重载)
  6.         TH1=0xf3;         //波特率2400,12MHz晶振误差0.16%
  7.         TL1=0xf3;
  8. //        TH1=0xf4;         //波特率2400,11.0592MHz晶振误差0.00%
  9. //        TL1=0xf4;
  10.         TR1=1;                //开定时器1
  11.         REN=1;                //允许串行接收
  12.         SM0=0;                //设置串口方式1(8位UART波特率可变)
  13.         SM1=1;                //设置串口方式1(8位UART波特率可变)
  14.         EA=1;                        //开总中断
  15.         ES=1;                        //开串口中断
  16.         while(1);
  17. }

  18. void UARTInterrupt(void) interrupt 4
  19. {//当接收完成发生中断请求RI由硬件置1
  20.         RI=0;                        //接收中断请求标志位必须软件清0
  21.         a=SBUF;                //保存SBUF接收到的数据
  22.         SBUF=a;                //发送收到的数据
  23.         while(!TI);        //等待发送中断请求标志位为1
  24.         TI=0;                        //发送中断请求标志位必须软件清0
  25. }
复制代码

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

Powered by 单片机教程网

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