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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1386|回復: 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 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 四虎影院久久 | 国产人成在线观看 | 91精品久久久久久久久 | 色播久久 | 国产精品久久久久久久久久久久午夜片 | 天天看天天干 | 日韩亚洲视频在线 | 久久精片 | 99久久久久国产精品免费 | 一区二区免费视频 | 亚洲国产成人在线视频 | 精品国产不卡一区二区三区 | 国产色爽 | av黄色免费在线观看 | 成年人在线观看视频 | 一区二区在线免费播放 | 成年人视频免费在线观看 | 在线色网| 少妇一区在线观看 | 中文字幕在线视频精品 | 操视频网站 | 国产日产精品一区二区三区四区 | 亚洲精品视频免费看 | 91极品尤物在线播放国产 | 天天综合久久 | 91久久久久久久久久久 | 日本三级电影在线看 | 91免费小视频| 在线国产小视频 | 久久精品一区二区 | 国产乱性 | 亚洲成人免费视频 | 99re66在线观看精品热 | 狠狠躁躁夜夜躁波多野结依 | 欧美福利在线 | 国产一区二区三区免费观看视频 | 精品国产一二三区 | 天天拍夜夜爽 | 九九精品在线 | 精品国产一区二区三区日日嗨 | 91av在线视频观看 |