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

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,数据不仅多了一位还不一致,不知道是什么原因,还望大神门帮忙看看
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。