久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1363|回復: 3
打印 上一主題 下一主題
收起左側

各位大佬幫我看看,為啥單片機首發一次就不能接收數據了

[復制鏈接]
跳轉到指定樓層
樓主
ID:477828 發表于 2020-3-28 14:52 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
串口助手。發送一次字符 能收到數據。但是顯示一直發送中。不知道什么原因TI沒有置為1  導致一直發送中。。。再給單片機發送數據就收不到數據了。
  1. #include <reg52.h>
  2.        
  3. #define uchar  unsigned char
  4. #define uint   unsigned int

  5. uchar buf;
  6. //volatile unsigned char sending;
  7. sbit led=P1^0;
  8. sbit sending = P1^1;

  9. //申明函數
  10. void delay(unsigned char i);
  11. void send(uchar d);
  12. void initUart(void);

  13. void main(void)
  14. {
  15.                 //初始化串口
  16.           initUart();
  17.     while(1);        
  18. }

  19. //初始化串口 9600
  20. void initUart(void){
  21.           SCON=0x50;      
  22.     PCON=0x00;         
  23.                        
  24.     TMOD=0x20;         
  25.     EA=1;
  26.     ES = 1;            
  27.     TL1=0xfd;
  28.     TH1=0xfd;           
  29.     TR1=1;
  30.           led = 0;
  31.           sending = 0;
  32. }

  33. //發送一個字節的數據,形參d即為待發送數據。
  34. void send(uchar d)                  
  35. {
  36.           sending=1;         //設置發送標志
  37.                 SBUF=d; //將數據寫入到串口緩沖
  38.     while(sending); //等待發送完畢
  39. }


  40. /**
  41. * 延時函數
  42. **/
  43. void delay(unsigned char i)
  44. {
  45.         uchar j,k;
  46.         for(j=i;j>0;j--)
  47.                 for(k=125;k>0;k--);
  48. }

  49. /*********************************************************

  50. 串口接收

  51. *********************************************************/
  52. void  serial() interrupt 4
  53. {
  54.          //收到數據
  55.    if(RI){
  56.                   RI=0;   //清中斷請求
  57.                         buf = SBUF;
  58.                         send(buf);
  59.          }
  60.          
  61.          if(TI){
  62.                   TI=0;
  63.                         sending=0;  //清正在發送標志
  64.          }
  65. }
復制代碼



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:235200 發表于 2020-3-28 15:51 | 只看該作者
void send(uchar d)                  
{
          sending=1;         //設置發送標志
                SBUF=d; //將數據寫入到串口緩沖
    while(sending); //等待發送完畢
}
此程序寫錯了
應該為
void send(uchar d)                  
{
          SBUF=d; //將數據寫入到串口緩沖
    while(!TI); //等待發送完畢
    TI=0;
}
回復

使用道具 舉報

板凳
ID:477828 發表于 2020-3-28 16:19 | 只看該作者
csmyldl 發表于 2020-3-28 15:51
void send(uchar d)                  
{
          sending=1;         //設置發送標志

非常感謝!用你這個代碼成功了
回復

使用道具 舉報

地板
ID:213173 發表于 2020-3-28 17:47 | 只看該作者
你試試

  1. #include <reg52.h>
  2.         
  3. #define uchar  unsigned char
  4. #define uint   unsigned int

  5. uchar buf;
  6. //volatile unsigned char sending;
  7. sbit led=P1^0;
  8. //sbit sending = P1^1;

  9. //申明函數
  10. void delay(unsigned char i);
  11. void send(uchar d);
  12. void initUart(void);

  13. void main(void)
  14. {
  15.         //初始化串口
  16.         initUart();
  17.         while(1);        
  18. }

  19. //初始化串口 9600
  20. void initUart(void)
  21. {
  22.         SCON=0x50;      
  23.         PCON=0x00;         
  24.         TMOD=0x20;         
  25.         EA=1;
  26.         ES = 1;            
  27.         TL1=0xfd;
  28.         TH1=0xfd;           
  29.         TR1=1;
  30.         led = 0;
  31. //        sending = 0;
  32. }

  33. //發送一個字節的數據,形參d即為待發送數據。
  34. void send(uchar d)                  
  35. {
  36. //        sending=1;         //設置發送標志
  37.         SBUF=d; //將數據寫入到串口緩沖
  38.         while(!TI);        //等待發送中斷請求標志位為1
  39.         TI=0;                //發送中斷請求標志位清0
  40. }


  41. /**
  42. * 延時函數
  43. **/
  44. /*
  45. void delay(unsigned char i)
  46. {
  47.         uchar j,k;
  48.         for(j=i;j>0;j--)
  49.                 for(k=125;k>0;k--);
  50. }
  51. */
  52. /*********************************************************

  53. 串口接收

  54. *********************************************************/
  55. void  serial() interrupt 4
  56. {
  57.         //收到數據
  58. //        if(RI){
  59.         RI=0;   //清中斷請求
  60.         buf = SBUF;
  61.         led = ~led;
  62.         send(buf);

  63. //        }
  64.        
  65. //        if(TI){
  66. //        TI=0;
  67. //        sending=0;  //清正在發送標志
  68. //        }
  69. }
復制代碼

回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 99精品免费视频 | 日本超碰| 国产福利精品一区 | 国产天堂 | 国产视频福利一区 | 91精品国产91久久久久久吃药 | 国产精品99久久久久久宅男 | 四虎海外 | 91国在线视频 | 日韩在线视频一区 | 日韩快播电影网 | 91精品国模一区二区三区 | 亚洲国产精品成人久久久 | 久久精品中文字幕 | 麻豆视频在线免费观看 | 午夜影视| 中文字幕中文字幕 | 日韩综合在线 | 国产在线麻豆精品入口 | 日韩在线视频免费观看 | 久久福利网站 | 日韩喷潮 | 精品欧美一区二区精品久久久 | 久99久视频 | 一二区视频 | 国产9999精品 | 91视频正在播放 | 日本公妇乱淫xxxⅹ 国产在线不卡 | 中文二区 | 久久久成 | 久久久久久久久久久久久久国产 | 久草在线 | 3p视频在线观看 | 午夜网 | 免费在线成人 | v片网站| 国产午夜精品视频 | 在线免费视频一区 | 久久精品国产亚洲 | 久久久久久国产一区二区三区 | 毛片a级毛片免费播放100 |