关于单片机串口通信发送字符串问题

2019-07-15 20:12发布




  1. #include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义                        
  2. #include"delay.h"
  3. #include<stdio.h>
  4. /*------------------------------------------------
  5.                 硬件端口定义
  6. ------------------------------------------------*/
  7. unsigned char rev[12];
  8. unsigned char ser_rev;
  9. unsigned char count=0;

  10. bit flag;
  11. /*------------------------------------------------
  12.                  函数声明
  13. ------------------------------------------------*/
  14. void SendStr(unsigned char *s);

  15. /*------------------------------------------------
  16.                 串口初始化
  17. ------------------------------------------------*/
  18. void InitUART  (void)
  19. {

  20.     TMOD |= 0x20;               // TMOD: timer 1, mode 2, 8-bit 重装
  21.     TH1   = 0xfd;         // TH1:  重装值 9600 波特率 晶振 11.0592MHz  
  22.           TL1=0xfd;
  23.     TR1   = 1;                  // TR1:  timer 1 打开      
  24.     REN=1;
  25.     SM0=0;
  26.     SM1=1;       
  27.     EA    = 1;                  //打开总中断
  28.     ES    = 1;                  //打开串口中断
  29. }

  30. /*------------------------------------------------
  31.                     主函数
  32. ------------------------------------------------*/
  33. void main (void)
  34. {
  35. InitUART();


  36. while (1)                       
  37.     {
  38.                 if(flag==1)
  39.                 {
  40.                 ES=0;
  41.                 SendStr(rev);
  42.                
  43.                
  44.     flag=0;


  45.                 ES=1;
  46.                 }
  47.     }
  48. }

  49. /*------------------------------------------------
  50.                     发送一个字节
  51. ------------------------------------------------*/
  52. void SendByte(unsigned char dat)
  53. {
  54. SBUF = dat;
  55. while(!TI);
  56.       TI = 0;
  57. }
  58. /*------------------------------------------------
  59.                     发送一个字符串
  60. ------------------------------------------------*/
  61. void SendStr(unsigned char *s)
  62. {
  63. while(*s!='')// 表示字符串结束标志,通过检测是否字符串末尾
  64.   {
  65.   SendByte(*s);
  66.   s++;
  67.   }
  68. }

  69. void ser() interrupt 4
  70. {
  71. if(RI)
  72. {
  73.        

  74. RI=0;
  75. if(count<=11)
  76. {
  77. ser_rev=SBUF;
  78. rev[count]=ser_rev;
  79. count++;
  80. }
  81. else
  82. {
  83.          count=0;
  84.          flag=1;
  85. }

  86. }
  87. }

复制代码本人新手菜鸟用串口助手调试,我发送123456789106,接收到1234567891066或者是2123456789100,数据不仅多了一位还不一致,不知道是什么原因,还望大神门帮忙看看
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
17条回答
不是一个风骚女
1楼-- · 2019-07-16 00:34
 精彩回答 2  元偷偷看……
294411253
2楼-- · 2019-07-16 04:31
不是一个风骚女 发表于 2014-4-13 18:05
波特率对吗?????????

波特率应该没问题 我22.1184M 波特率19200,应该还是程序问题
294411253
3楼-- · 2019-07-16 09:38
跪求大神啊!!!!!!!!!!
zy2014
4楼-- · 2019-07-16 13:07
294411253 发表于 2014-4-13 19:12
跪求大神啊!!!!!!!!!!

参考一下这个吧 http://bbs.21ic.com/icview-377947-3-1.html  48楼
说实话我也在写一个这样的程序,很遗憾没有看懂。
qq729101414
5楼-- · 2019-07-16 14:03
在初始化里面对TI = 0;
字符数组赋值 和字符串赋值是不同的,字符数组赋值没有自动的'',
依然落叶飘零
6楼-- · 2019-07-16 18:30
 精彩回答 2  元偷偷看……

一周热门 更多>