找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2373|回復: 2
收起左側(cè)

單片機串口通信程序 接收失敗是什么原因?

[復制鏈接]
ID:880458 發(fā)表于 2021-2-19 12:57 | 顯示全部樓層 |閱讀模式
#include <reg52.h>                        
        
#define uint unsigned int
#define uchar unsigned char
        
/*函數(shù)聲明區(qū)*/
void SendByte(unsigned char dat);
void SendStr(unsigned char *s);
void Uart_Init(void);


/*------------------主函數(shù)----------------------*/
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;                  //打開總中斷
}  

/*-----------------發(fā)送一個字節(jié)-----------------*/
void SendByte(unsigned char dat)
{
         SBUF = dat;
         while(!TI);
                 TI = 0;
}

/*-----------------發(fā)送一個字符串---------------*/
void SendStr(unsigned char *s)
{
         while(*s!='\0')// \0 表示字符串結束標志,通過檢測是否字符串末尾
         {
                  SendByte(*s);
                  s++;
         }
}
/*-----------------串口中斷程序-----------------*/
void UART_SER (void) interrupt 4 //串行中斷服務程序
{
    unsigned char Temp;          //定義臨時變量   
           if(RI == 1)                  //判斷是接收中斷產(chǎn)生
    {
                        RI = 0;                    //標志位清零
                  Temp=SBUF;                 //讀入緩沖區(qū)的值
             SBUF=Temp;                 //把接收到的值再發(fā)回電腦端
                }
           if(TI == 1)
                {                                                                                
            TI=0;                //如果是發(fā)送標志位,清零
                }
}


回復

使用道具 舉報

ID:883031 發(fā)表于 2021-2-25 11:25 | 顯示全部樓層
中斷服務程序有問題。
回復

使用道具 舉報

ID:213173 發(fā)表于 2021-2-25 13:34 | 顯示全部樓層
抄來的程序先要讀懂再改,胡亂改當然會出問題。給你把贅句屏蔽掉了,肯定能行。
  1. #include <reg52.h>
  2.         
  3. #define uint unsigned int
  4. #define uchar unsigned char
  5.         
  6. /*函數(shù)聲明區(qū)*/
  7. void SendByte(unsigned char dat);
  8. //void SendStr(unsigned char *s);
  9. void Uart_Init(void);


  10. /*------------------主函數(shù)----------------------*/
  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. /*-----------------發(fā)送一個字節(jié)-----------------*/
  26. void SendByte(unsigned char dat)
  27. {
  28.         SBUF = dat;
  29.         while(!TI);
  30.         TI = 0;
  31. }
  32. /*-----------------發(fā)送一個字符串---------------*/
  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)                  //判斷是接收中斷產(chǎn)生
  47. //        {
  48.         RI = 0;                    //標志位清零
  49.         Temp=SBUF;                 //讀入緩沖區(qū)的值
  50. //        SBUF=Temp;                 //把接收到的值再發(fā)回電腦端
  51.         SendByte(Temp);            //把接收到的值再發(fā)回電腦端
  52. //        }
  53. //        if(TI == 1)
  54. //        {
  55. //                TI=0;                //如果是發(fā)送標志位,清零
  56. //        }
  57. }
復制代碼

回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表