找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机串口通信程序 接收失败是什么原因?

[复制链接]
跳转到指定楼层
楼主
ID:880458 发表于 2021-2-19 12:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <reg52.h>                        
        
#define uint unsigned int
#define uchar unsigned char
        
/*函数声明区*/
void SendByte(unsigned char dat);
void SendStr(unsigned char *s);
void Uart_Init(void);


/*------------------主函数----------------------*/
void main(void)
{
        Uart_Init();                             //        SendStr(" UART test");        
        ES = 1;                                  //打开串口中断
        while (1);                       

}

void Uart_Init(void)
{
    SCON  = 0x50;                                        // SCON: 模式 1, 8-bit UART, 使能接收  
    TMOD |= 0x20;               // TMOD: timer 1, mode 2, 8-bit 重装
    TH1   = 0xF4;               // TH1:  重装值 2400 波特率 晶振 11.0592MHz  
    TR1   = 1;                  // TR1:  timer 1 打开                        
    EA    = 1;                  //打开总中断
}  

/*-----------------发送一个字节-----------------*/
void SendByte(unsigned char dat)
{
         SBUF = dat;
         while(!TI);
                 TI = 0;
}

/*-----------------发送一个字符串---------------*/
void SendStr(unsigned char *s)
{
         while(*s!='\0')// \0 表示字符串结束标志,通过检测是否字符串末尾
         {
                  SendByte(*s);
                  s++;
         }
}
/*-----------------串口中断程序-----------------*/
void UART_SER (void) interrupt 4 //串行中断服务程序
{
    unsigned char Temp;          //定义临时变量   
           if(RI == 1)                  //判断是接收中断产生
    {
                        RI = 0;                    //标志位清零
                  Temp=SBUF;                 //读入缓冲区的值
             SBUF=Temp;                 //把接收到的值再发回电脑端
                }
           if(TI == 1)
                {                                                                                
            TI=0;                //如果是发送标志位,清零
                }
}


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

使用道具 举报

沙发
ID:883031 发表于 2021-2-25 11:25 | 只看该作者
中断服务程序有问题。
回复

使用道具 举报

板凳
ID:213173 发表于 2021-2-25 13:34 | 只看该作者
抄来的程序先要读懂再改,胡乱改当然会出问题。给你把赘句屏蔽掉了,肯定能行。
  1. #include <reg52.h>
  2.         
  3. #define uint unsigned int
  4. #define uchar unsigned char
  5.         
  6. /*函数声明区*/
  7. void SendByte(unsigned char dat);
  8. //void SendStr(unsigned char *s);
  9. void Uart_Init(void);


  10. /*------------------主函数----------------------*/
  11. void main(void)
  12. {
  13.         Uart_Init();                // SendStr(" UART test");        
  14.         ES = 1;                     //打开串口中断
  15.         while (1);                       
  16. }

  17. void Uart_Init(void)
  18. {
  19.         SCON  = 0x50;               // SCON: 模式 1, 8-bit UART, 使能接收  
  20.         TMOD |= 0x20;               // TMOD: timer 1, mode 2, 8-bit 重装
  21.         TH1   = 0xF4;               // TH1:  重装值 2400 波特率 晶振 11.0592MHz  
  22.         TR1   = 1;                  // TR1:  timer 1 打开                        
  23.         EA    = 1;                  //打开总中断
  24. }  
  25. /*-----------------发送一个字节-----------------*/
  26. void SendByte(unsigned char dat)
  27. {
  28.         SBUF = dat;
  29.         while(!TI);
  30.         TI = 0;
  31. }
  32. /*-----------------发送一个字符串---------------*/
  33. /*
  34. void SendStr(unsigned char *s)
  35. {
  36.         while(*s!='\0')// \0 表示字符串结束标志,通过检测是否字符串末尾
  37.         {
  38.                 SendByte(*s);
  39.                 s++;
  40.         }
  41. }*/
  42. /*-----------------串口中断程序-----------------*/
  43. void UART_SER (void) interrupt 4 //串行中断服务程序
  44. {
  45.         unsigned char Temp;          //定义临时变量   
  46. //        if(RI == 1)                  //判断是接收中断产生
  47. //        {
  48.         RI = 0;                    //标志位清零
  49.         Temp=SBUF;                 //读入缓冲区的值
  50. //        SBUF=Temp;                 //把接收到的值再发回电脑端
  51.         SendByte(Temp);            //把接收到的值再发回电脑端
  52. //        }
  53. //        if(TI == 1)
  54. //        {
  55. //                TI=0;                //如果是发送标志位,清零
  56. //        }
  57. }
复制代码

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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