找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1948|回复: 4
收起左侧

新手问一个有关单片机串口通信的简单问题

[复制链接]
ID:229583 发表于 2017-8-27 19:10 | 显示全部楼层 |阅读模式
1.jpg
为什么串口调试时发送00,LED不是全亮而是下面的样子。程序如下:
  1. #include "reg52.h"               

  2. typedef unsigned int u16;          //对数据类型进行声明定义
  3. typedef unsigned char u8;

  4. /*******************************************************************************
  5. * 函数名         :UsartInit()
  6. * 函数功能                   :设置串口
  7. *******************************************************************************/
  8. void UsartInit()
  9. {
  10.         SCON=0X50;                        //设置为工作方式1
  11.         TMOD=0X20;                        //设置计数器工作方式2
  12.         PCON=0X80;                        //波特率加倍
  13.         TH1=0XF3;                                //计数器初始值设置,注意波特率是4800的
  14.         TL1=0XF3;
  15.         ES=1;                                                //打开接收中断
  16.         EA=1;                                                //打开总中断
  17.         TR1=1;                                        //打开计数器
  18. }

  19. /*******************************************************************************
  20. * 函 数 名       : main
  21. * 函数功能                 : 主函数
  22. * 输    入       : 无
  23. * 输    出             : 无
  24. *******************************************************************************/
  25. void main()
  26. {      
  27.         UsartInit();  //        串口初始化
  28.         while(1);               
  29. }

  30. /*******************************************************************************
  31. * 函数名         : Usart() interrupt 4
  32. * 函数功能                  : 串口通信中断函数
  33. *******************************************************************************/
  34. void Usart() interrupt 4
  35. {
  36.         RI=0;
  37.         P2=SBUF;//出去接收到的数据
  38.     SBUF=P2;//将接收到的数据放入到发送寄存器
  39.         while(!TI);                         //等待发送数据完成
  40.         TI=0;
  41. }
复制代码




回复

使用道具 举报

ID:151348 发表于 2017-8-28 14:48 | 显示全部楼层
LED是否完好?
回复

使用道具 举报

ID:229716 发表于 2017-8-28 16:54 | 显示全部楼层
串口要以十六进制数发送,不能以文本方式发送,看看是不是这个问题。
回复

使用道具 举报

ID:190832 发表于 2017-8-28 17:55 | 显示全部楼层
lhf710551 发表于 2017-8-28 16:54
串口要以十六进制数发送,不能以文本方式发送,看看是不是这个问题。

顶你上去,串口发送的字符串,你需要转成对应的数字。。。
回复

使用道具 举报

ID:213173 发表于 2017-8-29 07:07 | 显示全部楼层
改成这样就可以正常收发数据了
void UsartInit()
{
        SCON=0X50; //设置为工作方式1
        TMOD=0x20;//定时器1方式2(8位重载)
        TH1=0xfd; //波特率9600
        TL1=0xfd; //波特率9600
        TR1=1;        //开定时器1
        REN=1;        //允许串行接收
        EA=1;        //总中断开
        ES=1;        //串口中断开
}
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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