找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2122|回復(fù): 10
收起左側(cè)

關(guān)于單片機(jī)串口接收數(shù)據(jù)后無法發(fā)送問題

[復(fù)制鏈接]
ID:924899 發(fā)表于 2023-4-29 11:02 | 顯示全部樓層 |閱讀模式
大家好,新手小白。在做串口通信的時(shí)候,單獨(dú)的發(fā)送、接收能夠?qū)崿F(xiàn),在仿真的儀器上能看到確實(shí)接收到了數(shù)據(jù),但始終無法在接收完成后,向外發(fā)送接收到的數(shù)據(jù)或其他字符串,查詢或中斷方式都嘗試過,不知道問題到底出在哪兒了。麻煩大家?guī)兔饨饣螅x謝!
51hei.png

單片機(jī)源程序如下:
  1. #include<reg51.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. bit flag1=0;
  5. uchar Uart1R_Buf[]=0,point1=0;
  6. void Serial_Init();
  7. void Uart1_SendChar(uchar C);
  8. void Uart1_SendStr(uchar *s);
  9. // uchar Uart1_RecieveChar();

  10. void main()
  11. {
  12. // uchar Rev;
  13. Serial_Init();
  14. while(1)
  15. {
  16. /*以查詢方式接收數(shù)據(jù)
  17. Rev=Uart1_RecieveChar();
  18. Uart1_SendStr("Rev_Data:");
  19. Uart1_RecieveChar();
  20. */
  21. /*以中斷方式接收*/
  22. if(flag1)
  23. {
  24. flag1=0;
  25. if(Uart1R_Buf[0]=='O'&&Uart1R_Buf[1]=='K')
  26. Uart1_SendStr(Uart1R_Buf);
  27. }
  28. }
  29. }

  30. void Serial_Init()
  31. {
  32. PCON=0x00;
  33. SCON=0x50;
  34. TMOD=0x20;
  35. TH1=0xFD;
  36. TL1=0xFD;
  37. TR1=0;
  38. ES=1; //允許串口中斷;
  39. EA=1;
  40. }
  41. void Uart1_SendChar(uchar C)
  42. {
  43. SBUF=C; //將數(shù)據(jù)寫入發(fā)送緩沖器,啟動(dòng)發(fā)送
  44. while(!TI); //若沒有發(fā)送完畢,等待
  45. TI = 0;
  46. }
  47. void Uart1_SendStr(uchar *s)
  48. {
  49. while(*s!='\0')// \0 表示字符串結(jié)束標(biāo)志,檢測(cè)是否字符串末尾
  50. {
  51. Uart1_SendChar(*s);
  52. s++;
  53. }
  54. }
  55. /*以查詢方式接收數(shù)據(jù)
  56. uchar Uart1_RecieveChar()
  57. {
  58. uchar Rev;
  59. // R=SBUF;
  60. while(!RI); //若沒有接收完畢,等待
  61. Rev=SBUF;
  62. RI = 0;
  63. return Rev;
  64. }
  65. */
  66. void Uart1_Isr() interrupt 4
  67. {
  68. if(RI==1)
  69. {
  70. RI=0;
  71. Uart1R_Buf[point1]=SBUF;
  72. if(Uart1R_Buf[point1]=='\0')
  73. {
  74. point1=0;
  75. flag1=1;
  76. }
  77. else point1++;
  78. }
  79. }
復(fù)制代碼



回復(fù)

使用道具 舉報(bào)

ID:161164 發(fā)表于 2023-4-29 22:13 來自觸屏版 | 顯示全部樓層
試試uchar Uart1R_Buf[20]=0,point1=0;
回復(fù)

使用道具 舉報(bào)

ID:924899 發(fā)表于 2023-4-30 19:35 來自觸屏版 | 顯示全部樓層
lkc8210 發(fā)表于 2023-4-29 22:13
試試uchar Uart1R_Buf[20]=0,point1=0;

謝謝伙伴,有嘗試過像這樣給Uart1R_Buf一個(gè)10的長(zhǎng)度,并在中斷函數(shù)中設(shè)置接收長(zhǎng)度超過10時(shí),讓point1重新指向0,但還是實(shí)現(xiàn)不了將接收到的數(shù)據(jù)再發(fā)送出去【唉想不通】
回復(fù)

使用道具 舉報(bào)

ID:924899 發(fā)表于 2023-5-4 17:07 | 顯示全部樓層
伙伴們,我嘗試用STC數(shù)據(jù)手冊(cè)上的官方例程但同樣無法實(shí)現(xiàn)接收后發(fā)送數(shù)據(jù)問題,而且只能實(shí)現(xiàn)串口1的發(fā)送,不能實(shí)現(xiàn)串口2的發(fā)送,求大佬指點(diǎn)迷津【憂!浚
回復(fù)

使用道具 舉報(bào)

ID:646520 發(fā)表于 2023-5-4 17:58 | 顯示全部樓層
不知道你用的什么版本,說出來你可能不信,我之前用8.13的ptoteus,不管怎么仿真,單片機(jī)都收不到數(shù)據(jù),一模一樣的環(huán)境和程序,我換了個(gè)版本就可以。
回復(fù)

使用道具 舉報(bào)

ID:924899 發(fā)表于 2023-5-4 20:41 | 顯示全部樓層
最后一個(gè)夏天1 發(fā)表于 2023-5-4 17:58
不知道你用的什么版本,說出來你可能不信,我之前用8.13的ptoteus,不管怎么仿真,單片機(jī)都收不到數(shù)據(jù),一 ...

呃用的8.13版本,那我也換個(gè)版本試試
回復(fù)

使用道具 舉報(bào)

ID:924899 發(fā)表于 2023-5-5 12:18 | 顯示全部樓層
黑電子ABCf 發(fā)表于 2023-5-4 20:41
呃用的8.13版本,那我也換個(gè)版本試試

試了,不行,問題到底出在哪兒了呢【腦殼痛】
回復(fù)

使用道具 舉報(bào)

ID:924899 發(fā)表于 2023-5-5 13:02 | 顯示全部樓層
黑電子ABCf 發(fā)表于 2023-5-5 12:18
試了,不行,問題到底出在哪兒了呢【腦殼痛】

用了8.6版本,用官方例程能夠?qū)崿F(xiàn)串口1的接發(fā),但串口2還是不行,而且單獨(dú)的發(fā)送也實(shí)現(xiàn)不了
回復(fù)

使用道具 舉報(bào)

ID:883242 發(fā)表于 2023-5-5 13:49 | 顯示全部樓層
黑電子ABCf 發(fā)表于 2023-5-5 13:02
用了8.6版本,用官方例程能夠?qū)崿F(xiàn)串口1的接發(fā),但串口2還是不行,而且單獨(dú)的發(fā)送也實(shí)現(xiàn)不了

單獨(dú)發(fā)送都不行只能說明proteus模型不完整,上實(shí)物吧。
回復(fù)

使用道具 舉報(bào)

ID:647261 發(fā)表于 2023-6-13 09:31 | 顯示全部樓層
最后一個(gè)夏天1 發(fā)表于 2023-5-4 17:58
不知道你用的什么版本,說出來你可能不信,我之前用8.13的ptoteus,不管怎么仿真,單片機(jī)都收不到數(shù)據(jù),一 ...

啊,這……這……這……我也是用8.13版本的,可以發(fā)送數(shù)據(jù),就是收不到數(shù)據(jù),我已經(jīng)搞了好久了,一直搞不明白哪里出了問題,正準(zhǔn)備搜集一下資料,再整理了好了上論壇求助呢
不知道你現(xiàn)在換了什么版本的,能正常串口收發(fā)呢?
感謝!
回復(fù)

使用道具 舉報(bào)

ID:77589 發(fā)表于 2023-6-16 17:37 | 顯示全部樓層
Hephaestus 發(fā)表于 2023-5-5 13:49
單獨(dú)發(fā)送都不行只能說明proteus模型不完整,上實(shí)物吧。

這個(gè)可能性很大
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表