找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1409|回复: 10
收起左侧

关于单片机串口接收数据后无法发送问题

[复制链接]
ID:924899 发表于 2023-4-29 11:02 | 显示全部楼层 |阅读模式
大家好,新手小白。在做串口通信的时候,单独的发送、接收能够实现,在仿真的仪器上能看到确实接收到了数据,但始终无法在接收完成后,向外发送接收到的数据或其他字符串,查询或中断方式都尝试过,不知道问题到底出在哪儿了。麻烦大家帮忙解解惑,谢谢!
51hei.png

单片机源程序如下:
  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. /*以查询方式接收数据
  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; //将数据写入发送缓冲器,启动发送
  44. while(!TI); //若没有发送完毕,等待
  45. TI = 0;
  46. }
  47. void Uart1_SendStr(uchar *s)
  48. {
  49. while(*s!='\0')// \0 表示字符串结束标志,检测是否字符串末尾
  50. {
  51. Uart1_SendChar(*s);
  52. s++;
  53. }
  54. }
  55. /*以查询方式接收数据
  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. }
复制代码



回复

使用道具 举报

ID:161164 发表于 2023-4-29 22:13 来自手机 | 显示全部楼层
试试uchar Uart1R_Buf[20]=0,point1=0;
回复

使用道具 举报

ID:924899 发表于 2023-4-30 19:35 来自手机 | 显示全部楼层
lkc8210 发表于 2023-4-29 22:13
试试uchar Uart1R_Buf[20]=0,point1=0;

谢谢伙伴,有尝试过像这样给Uart1R_Buf一个10的长度,并在中断函数中设置接收长度超过10时,让point1重新指向0,但还是实现不了将接收到的数据再发送出去【唉想不通】
回复

使用道具 举报

ID:924899 发表于 2023-5-4 17:07 | 显示全部楼层
伙伴们,我尝试用STC数据手册上的官方例程但同样无法实现接收后发送数据问题,而且只能实现串口1的发送,不能实现串口2的发送,求大佬指点迷津【忧桑】!
回复

使用道具 举报

ID:646520 发表于 2023-5-4 17:58 | 显示全部楼层
不知道你用的什么版本,说出来你可能不信,我之前用8.13的ptoteus,不管怎么仿真,单片机都收不到数据,一模一样的环境和程序,我换了个版本就可以。
回复

使用道具 举报

ID:924899 发表于 2023-5-4 20:41 | 显示全部楼层
最后一个夏天1 发表于 2023-5-4 17:58
不知道你用的什么版本,说出来你可能不信,我之前用8.13的ptoteus,不管怎么仿真,单片机都收不到数据,一 ...

呃用的8.13版本,那我也换个版本试试
回复

使用道具 举报

ID:924899 发表于 2023-5-5 12:18 | 显示全部楼层
黑电子ABCf 发表于 2023-5-4 20:41
呃用的8.13版本,那我也换个版本试试

试了,不行,问题到底出在哪儿了呢【脑壳痛】
回复

使用道具 举报

ID:924899 发表于 2023-5-5 13:02 | 显示全部楼层
黑电子ABCf 发表于 2023-5-5 12:18
试了,不行,问题到底出在哪儿了呢【脑壳痛】

用了8.6版本,用官方例程能够实现串口1的接发,但串口2还是不行,而且单独的发送也实现不了
回复

使用道具 举报

ID:883242 发表于 2023-5-5 13:49 | 显示全部楼层
黑电子ABCf 发表于 2023-5-5 13:02
用了8.6版本,用官方例程能够实现串口1的接发,但串口2还是不行,而且单独的发送也实现不了

单独发送都不行只能说明proteus模型不完整,上实物吧。
回复

使用道具 举报

ID:647261 发表于 2023-6-13 09:31 | 显示全部楼层
最后一个夏天1 发表于 2023-5-4 17:58
不知道你用的什么版本,说出来你可能不信,我之前用8.13的ptoteus,不管怎么仿真,单片机都收不到数据,一 ...

啊,这……这……这……我也是用8.13版本的,可以发送数据,就是收不到数据,我已经搞了好久了,一直搞不明白哪里出了问题,正准备搜集一下资料,再整理了好了上论坛求助呢
不知道你现在换了什么版本的,能正常串口收发呢?
感谢!
回复

使用道具 举报

ID:77589 发表于 2023-6-16 17:37 | 显示全部楼层
Hephaestus 发表于 2023-5-5 13:49
单独发送都不行只能说明proteus模型不完整,上实物吧。

这个可能性很大
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表