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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7231|回復(fù): 16
打印 上一主題 下一主題
收起左側(cè)

請教STC8G1K08A單片機串口程序發(fā)送正常,接收不正常

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
#
ID:725306 發(fā)表于 2022-1-11 16:16 | 只看該作者 |只看大圖 回帖獎勵 |正序瀏覽 |閱讀模式
請大俠指點下:
串口為什么發(fā)送正常,接收卻不正常呢?



單片機源程序如下:

  1. #include "STC8G.h" #include "intrins.h"  

  2. void UartInit(void)                //115200bps@35MHz
  3. {         SCON = 0x50;                //8位數(shù)據(jù),可變波特率         AUXR |= 0x40;                //定時器時鐘1T模式         AUXR &= 0xFE;                //串口1選擇定時器1為波特率發(fā)生器         TMOD &= 0x0F;                //設(shè)置定時器模式         TL1 = 0xB4;                //設(shè)置定時初始值         TH1 = 0xFF;                //設(shè)置定時初始值         ET1 = 0;                //禁止定時器%d中斷         TR1 = 1;                //定時器1開始計時 }  void GPI_Init(void) {           P0M0 = 0x00;     P0M1 = 0x00;     P1M0 = 0x00;     P1M1 = 0x00;     P2M0 = 0x00;     P2M1 = 0x00;     P3M0 = 0x00;     P3M1 = 0x00;     P4M0 = 0x00;     P4M1 = 0x00;     P5M0 = 0x00;     P5M1 = 0x00;     P31 = 0; //PWM關(guān) }  /* 串口發(fā)送字節(jié)數(shù)據(jù)函數(shù) 參數(shù)是你要發(fā)送的字節(jié) */ void UartSend_Data(unsigned char dat) {         SBUF = dat;  // 把要發(fā)送的數(shù)據(jù)給了SBUF寄存器         while(!TI);  // 等待數(shù)據(jù)發(fā)送完成         TI = 0;      // 清除發(fā)送完成標(biāo)志位 }

  4. void main() {               
  5. /* 定義一個8位變量 用于接收串口接收的字節(jié) */                 
  6. unsigned char x =0;                          /* IO設(shè)置*/                 GPI_Init();                                  UartInit(); // 串口初始化      

  7. while (1)                 
  8. {                                
  9. if (TI)                                 {                                                
  10. TI = 0;     //清中斷標(biāo)志                                                
  11. P31 = !P31; //測試PWM端口                                 }                                
  12. if (RI)// 如果串口接收到數(shù)據(jù)                                 {                                                
  13. RI = 0;      //清中斷標(biāo)志                                                
  14. x =SBUF;                                                
  15. if (x == 0x01)                                                 {                                                                 
  16. P31 = !P31;  //翻轉(zhuǎn)MOS管狀態(tài)                                                                 
  17. UartSend_Data('l');                                                 }                                                               
  18. if (x == 0x02)                                                
  19. {                                                               
  20. P32 = !P32;  //翻轉(zhuǎn)led狀態(tài)                                                                 
  21. SBUF = 'm';  // 把要發(fā)送的數(shù)據(jù)給了SBUF寄存器                                                                 
  22. while(!TI);  // 等待數(shù)據(jù)發(fā)送完成                                                                 
  23. TI = 0;      // 清除發(fā)送完成標(biāo)志位                                                 }                                                 }                 } }
復(fù)制代碼



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

使用道具 舉報

16#
ID:725306 發(fā)表于 2022-1-15 10:02 | 只看該作者

用的查詢法,不需要EA=1;
回復(fù)

使用道具 舉報

15#
ID:725306 發(fā)表于 2022-1-15 10:01 | 只看該作者
TEC 發(fā)表于 2022-1-14 11:00
你這個程序單片機沒法工作的,單片機不能接收,也不能發(fā)送,單片機和上位機無法通信。發(fā)送成功和單片機沒關(guān) ...

原來上傳的程序串口初始化中,P31 = 0; //PWM關(guān) 這一句不能寫的。寫了串口就收發(fā)不了數(shù)據(jù)了。
回復(fù)

使用道具 舉報

14#
ID:725306 發(fā)表于 2022-1-15 09:51 | 只看該作者
TEC 發(fā)表于 2022-1-14 11:00
你這個程序單片機沒法工作的,單片機不能接收,也不能發(fā)送,單片機和上位機無法通信。發(fā)送成功和單片機沒關(guān) ...

單片機可以接收,LED是有動作的。只是上位機接收不到串口發(fā)送的。原因為P32是串口。不能操作的同時收發(fā)數(shù)據(jù)。

51hei圖片_20220115094952.png (37.01 KB, 下載次數(shù): 109)

調(diào)整波特率為9600以后的效果

調(diào)整波特率為9600以后的效果
回復(fù)

使用道具 舉報

13#
ID:725306 發(fā)表于 2022-1-15 09:38 | 只看該作者
188610329 發(fā)表于 2022-1-11 21:06
你知道不知道  P31 是用來干什么的么?
你一邊要用  P31 發(fā)送串口, 一邊還要反轉(zhuǎn)  P31, 心不是一般的大阿 ...

大哥,就是這個問題 。。。。。 后來我調(diào)整了波特率為9600,可以正常收到數(shù)據(jù)了。因為用的事8腳的單片機,資源比較少,所以調(diào)試的時候想看看正常不。謝謝,貼吧是個好環(huán)境,大家都會幫助小白菜。
回復(fù)

使用道具 舉報

12#
ID:625730 發(fā)表于 2022-1-14 11:00 | 只看該作者
你這個程序單片機沒法工作的,單片機不能接收,也不能發(fā)送,單片機和上位機無法通信。發(fā)送成功和單片機沒關(guān)系,是上位機給單片機發(fā)送了數(shù)據(jù),但是單片機沒法接收到。
回復(fù)

使用道具 舉報

11#
ID:213173 發(fā)表于 2022-1-13 08:39 | 只看該作者

串口助手發(fā)送用HEX模式,接收用文本模式
  1. #include "STC8G.h"
  2. #include "intrins.h"
  3. /*
  4. void UartInit(void)                //115200bps@35MHz
  5. {
  6.         SCON = 0x50;                //8位數(shù)據(jù),可變波特率
  7.         AUXR |= 0x40;                //定時器時鐘1T模式
  8.         AUXR &= 0xFE;                //串口1選擇定時器1為波特率發(fā)生器
  9.         TMOD &= 0x0F;                //設(shè)置定時器模式
  10.         TL1 = 0xB4;                //設(shè)置定時初始值
  11.         TH1 = 0xFF;                //設(shè)置定時初始值
  12.         ET1 = 0;                //禁止定時器%d中斷
  13.         TR1 = 1;                //定時器1開始計時
  14. }*/
  15. void UartInit(void)                //115200bps@33.1776MHz
  16. {
  17.         SCON = 0x50;                //8位數(shù)據(jù),可變波特率
  18.         AUXR |= 0x40;                //定時器時鐘1T模式
  19.         AUXR &= 0xFE;                //串口1選擇定時器1為波特率發(fā)生器
  20.         TMOD &= 0x0F;                //設(shè)置定時器模式
  21.         TL1 = 0xB8;                //設(shè)置定時初始值
  22.         TH1 = 0xFF;                //設(shè)置定時初始值
  23.         ET1 = 0;                //禁止定時器%d中斷
  24.         TR1 = 1;                //定時器1開始計時
  25. }

  26. void GPI_Init(void)
  27. {
  28.         P0M0 = 0x00;
  29.         P0M1 = 0x00;
  30.         P1M0 = 0x00;
  31.         P1M1 = 0x00;
  32.         P2M0 = 0x00;
  33.         P2M1 = 0x00;
  34.         P3M0 = 0x00;
  35.         P3M1 = 0x00;
  36.         P4M0 = 0x00;
  37.         P4M1 = 0x00;
  38.         P5M0 = 0x00;
  39.         P5M1 = 0x00;
  40. //        P31 = 0; //PWM關(guān)
  41. }

  42. /* 串口發(fā)送字節(jié)數(shù)據(jù)函數(shù) 參數(shù)是你要發(fā)送的字節(jié) */
  43. void UartSend_Data(unsigned char dat)
  44. {
  45.         SBUF = dat;  // 把要發(fā)送的數(shù)據(jù)給了SBUF寄存器
  46.         while(!TI);  // 等待數(shù)據(jù)發(fā)送完成
  47.         TI = 0;      // 清除發(fā)送完成標(biāo)志位
  48. }
  49. void main()
  50. {
  51.         /* 定義一個8位變量 用于接收串口接收的字節(jié) */
  52.         unsigned char x =0;       
  53.         /* IO設(shè)置*/
  54.         GPI_Init();       
  55.         UartInit(); // 串口初始化       
  56.         while (1)
  57.         {
  58. /*                SBUF = 0x01;  // 把要發(fā)送的數(shù)據(jù)給了SBUF寄存器
  59.                 while(!TI);  // 等待數(shù)據(jù)發(fā)送完成
  60.                 TI = 0;         
  61.                 if (TI)
  62.                 {
  63.                 TI = 0;     //清中斷標(biāo)志
  64.                 P31 = !P31; //測試PWM端口
  65.                 }*/
  66.                 if(RI)// 如果串口接收到數(shù)據(jù)
  67.                 {
  68.                         RI = 0;      //清中斷標(biāo)志
  69.                         x =SBUF;
  70.                         if (x == 0x01)
  71.                         {
  72.                                 P32 = !P32;  //翻轉(zhuǎn)MOS管狀態(tài)
  73.                                 UartSend_Data('l');
  74.                         }               
  75.                         if (x == 0x02)
  76.                         {
  77.                                 P33 = !P33;  //翻轉(zhuǎn)led狀態(tài)
  78.                                 UartSend_Data('m');
  79. //                                SBUF = 'm';  // 把要發(fā)送的數(shù)據(jù)給了SBUF寄存器
  80. //                                while(!TI);  // 等待數(shù)據(jù)發(fā)送完成
  81. //                                TI = 0;      // 清除發(fā)送完成標(biāo)志位
  82.                         }               
  83.                 }
  84.         }
  85. }
復(fù)制代碼
回復(fù)

使用道具 舉報

10#
ID:25310 發(fā)表于 2022-1-12 15:46 | 只看該作者
EA=1 有嗎?
回復(fù)

使用道具 舉報

9#
ID:624769 發(fā)表于 2022-1-11 21:06 | 只看該作者
你知道不知道  P31 是用來干什么的么?
你一邊要用  P31 發(fā)送串口, 一邊還要反轉(zhuǎn)  P31, 心不是一般的大阿……
回復(fù)

使用道具 舉報

8#
ID:725306 發(fā)表于 2022-1-11 19:18 | 只看該作者
npn 發(fā)表于 2022-1-11 18:51
35Mhz/115200 不能被整除,你要用33.1776Mhz的晶振。

按照你的方法 還是不行。void UartInit(void)                //115200bps@33.1776MHz
{
        SCON = 0x50;                //8位數(shù)據(jù),可變波特率
        AUXR |= 0x40;                //定時器時鐘1T模式
        AUXR &= 0xFE;                //串口1選擇定時器1為波特率發(fā)生器
        TMOD &= 0x0F;                //設(shè)置定時器模式
        TL1 = 0xB8;                //設(shè)置定時初始值
        TH1 = 0xFF;                //設(shè)置定時初始值
        ET1 = 0;                //禁止定時器%d中斷
        TR1 = 1;                //定時器1開始計時
}


回復(fù)

使用道具 舉報

7#
ID:725306 發(fā)表于 2022-1-11 19:10 | 只看該作者
npn 發(fā)表于 2022-1-11 18:51
35Mhz/115200 不能被整除,你要用33.1776Mhz的晶振。

按照你說的調(diào)節(jié)了, 還是不行
回復(fù)

使用道具 舉報

6#
ID:725306 發(fā)表于 2022-1-11 18:53 | 只看該作者
npn 發(fā)表于 2022-1-11 18:51
35Mhz/115200 不能被整除,你要用33.1776Mhz的晶振。

下面顯示已自動調(diào)節(jié)為35.004MHz了呀
回復(fù)

使用道具 舉報

5#
ID:725306 發(fā)表于 2022-1-11 18:52 | 只看該作者
  1. #include "STC8G.h"
  2. #include "intrins.h"

  3. void UartInit(void)                //115200bps@35MHz
  4. {
  5.         SCON = 0x50;                //8位數(shù)據(jù),可變波特率
  6.         AUXR |= 0x40;                //定時器時鐘1T模式
  7.         AUXR &= 0xFE;                //串口1選擇定時器1為波特率發(fā)生器
  8.         TMOD &= 0x0F;                //設(shè)置定時器模式
  9.         TL1 = 0xB4;                //設(shè)置定時初始值
  10.         TH1 = 0xFF;                //設(shè)置定時初始值
  11.         ET1 = 0;                //禁止定時器%d中斷
  12.         TR1 = 1;                //定時器1開始計時
  13. }
  14. void GPI_Init(void)
  15. {
  16.         P3M0 = 0x00;
  17.         P3M1 = 0x00
  18.         P31 = 0; //PWM關(guān)
  19. }

  20. /* 串口發(fā)送字節(jié)數(shù)據(jù)函數(shù) 參數(shù)是你要發(fā)送的字節(jié) */
  21. void UartSend_Data(unsigned char dat)
  22. {
  23.         SBUF = dat;  // 把要發(fā)送的數(shù)據(jù)給了SBUF寄存器
  24.         while(!TI);  // 等待數(shù)據(jù)發(fā)送完成
  25.         TI = 0;      // 清除發(fā)送完成標(biāo)志位
  26. }
  27. void main()
  28. {
  29.         /* 定義一個8位變量 用于接收串口接收的字節(jié) */
  30.         unsigned char x =0;
  31.        
  32.         /* IO設(shè)置*/
  33.         GPI_Init();
  34.                
  35.         UartInit(); // 串口初始化

  36.         while (1)
  37.         {
  38.                 SBUF = 0x01;  // 把要發(fā)送的數(shù)據(jù)給了SBUF寄存器
復(fù)制代碼


回復(fù)

使用道具 舉報

地板
ID:57657 發(fā)表于 2022-1-11 18:51 | 只看該作者
35Mhz/115200 不能被整除,你要用33.1776Mhz的晶振。
回復(fù)

使用道具 舉報

板凳
ID:725306 發(fā)表于 2022-1-11 18:47 | 只看該作者
第一次用,不太熟悉帖子版面
回復(fù)

使用道具 舉報

沙發(fā)
ID:725306 發(fā)表于 2022-1-11 18:47 | 只看該作者
代碼格式顯示是亂的,  我重新補下
回復(fù)

使用道具 舉報

樓主
ID:725306 發(fā)表于 2022-1-11 18:46 | 只看該作者
  1. #include "STC8G.h"
  2. #include "intrins.h"

  3. void UartInit(void)                //115200bps@35MHz
  4. {
  5.         SCON = 0x50;                //8位數(shù)據(jù),可變波特率
  6.         AUXR |= 0x40;                //定時器時鐘1T模式
  7.         AUXR &= 0xFE;                //串口1選擇定時器1為波特率發(fā)生器
  8.         TMOD &= 0x0F;                //設(shè)置定時器模式
  9.         TL1 = 0xB4;                //設(shè)置定時初始值
  10.         TH1 = 0xFF;                //設(shè)置定時初始值
  11.         ET1 = 0;                //禁止定時器%d中斷
  12.         TR1 = 1;                //定時器1開始計時
  13. }

  14. void GPI_Init(void)
  15. {
  16.           P0M0 = 0x00;
  17.     P0M1 = 0x00;
  18.     P1M0 = 0x00;
  19.     P1M1 = 0x00;
  20.     P2M0 = 0x00;
  21.     P2M1 = 0x00;
  22.     P3M0 = 0x00;
  23.     P3M1 = 0x00;
  24.     P4M0 = 0x00;
  25.     P4M1 = 0x00;
  26.     P5M0 = 0x00;
  27.     P5M1 = 0x00;
  28.     P31 = 0; //PWM關(guān)
  29. }

  30. /* 串口發(fā)送字節(jié)數(shù)據(jù)函數(shù) 參數(shù)是你要發(fā)送的字節(jié) */
  31. void UartSend_Data(unsigned char dat)
  32. {
  33.         SBUF = dat;  // 把要發(fā)送的數(shù)據(jù)給了SBUF寄存器
  34.         while(!TI);  // 等待數(shù)據(jù)發(fā)送完成
  35.         TI = 0;      // 清除發(fā)送完成標(biāo)志位
  36. }
  37. void main()
  38. {
  39.                 /* 定義一個8位變量 用于接收串口接收的字節(jié) */
  40.                 unsigned char x =0;
  41.        
  42.                 /* IO設(shè)置*/
  43.                 GPI_Init();
  44.                
  45.                 UartInit(); // 串口初始化

  46.     while (1)
  47.                 {
  48.                         SBUF = 0x01;  // 把要發(fā)送的數(shù)據(jù)給了SBUF寄存器
  49.                                                                 while(!TI);  // 等待數(shù)據(jù)發(fā)送完成
  50.                                                                 TI = 0;  
  51.                        
  52.                                 if (TI)
  53.                                 {
  54.                                                 TI = 0;     //清中斷標(biāo)志
  55.                                                 P31 = !P31; //測試PWM端口
  56.                                 }
  57.                                 if (RI)// 如果串口接收到數(shù)據(jù)
  58.                                 {
  59.                                                 RI = 0;      //清中斷標(biāo)志
  60.                                                 x =SBUF;
  61.                                                 if (x == 0x01)
  62.                                                 {
  63.                                                                 P31 = !P31;  //翻轉(zhuǎn)MOS管狀態(tài)
  64.                                                                 UartSend_Data('l');
  65.                                                 }               
  66.                                                 if (x == 0x02)
  67.                                                 {
  68.                                                                 P32 = !P32;  //翻轉(zhuǎn)led狀態(tài)
  69.                                                                 SBUF = 'm';  // 把要發(fā)送的數(shù)據(jù)給了SBUF寄存器
  70.                                                                 while(!TI);  // 等待數(shù)據(jù)發(fā)送完成
  71.                                                                 TI = 0;      // 清除發(fā)送完成標(biāo)志位
  72.                                                 }               
  73.                                 }
  74.                 }
  75. }
復(fù)制代碼
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲成人午夜电影 | 久久久久亚洲精品 | 精品国产乱码久久久久久老虎 | 在线色网站 | 日韩欧美一区二区三区 | caoporn视频 | 免费的网站www | 黄色av网站在线观看 | 亚洲系列第一页 | 久久久久99 | 国产精品久久久久久久久久久免费看 | 999久久久 | 在线播放一区 | 亚洲免费视频播放 | 国产乱码精品一区二区三区忘忧草 | 亚洲天堂成人在线视频 | 在线观看视频福利 | 色综合久久久 | 男女激情网 | 欧美不卡视频 | 国产日韩一区二区 | 在线免费av电影 | 国产农村妇女毛片精品久久麻豆 | 久久久噜噜噜www成人网 | 亚洲一区国产精品 | 欧美一区二区三区在线视频 | 亚洲高清视频在线观看 | 免费在线国产视频 | 免费在线看黄视频 | 国产精品美女www爽爽爽视频 | 国产日韩欧美一区二区 | 一级二级三级在线观看 | 国产欧美日韩一区 | 成人高清在线视频 | 精品美女久久久 | 亚洲精品视频免费观看 | 拍真实国产伦偷精品 | 中文字幕欧美日韩一区 | 国产成人精品久久二区二区91 | 免费视频一区二区 | 美女视频一区 |