51单片机串口发送接收问题

[复制链接]
7423|0
 楼主| law3411209 发表于 2021-6-14 16:37 | 显示全部楼层 |阅读模式
学习串口通信,想通过电脑串口助手发送字符单片机,单片机再把接收到的字符发送给串口助手,可是串口助手接收到的数据全是00,
  1. #include <STC15F2K60S2.H>
  2. #include "intrins.h"
  3. #define uint_16 unsigned int
  4. #define uchar_8 unsigned char
  5. typedef unsigned char BYTE;
  6. typedef unsigned int WORD;        

  7. #define FOSC 11059200L              //系统频率
  8. #define BAUD 57600                  //串口波特率

  9. #define NONE_PARITY     0       //无校验
  10. #define ODD_PARITY      1       //奇校验
  11. #define EVEN_PARITY     2       //偶校验
  12. #define MARK_PARITY     3       //标记校验
  13. #define SPACE_PARITY    4       //空白校验

  14. #define PARITYBIT  NONE_PARITY   //定义校验位
  15. #define BN 6

  16. uchar_8 code tbuf[6]={"AT+VCC"};
  17. uchar_8 rbuf;
  18. bit busy;
  19. uchar_8 i,y,h=65;

  20. void UART_INIT();
  21. void SendData(BYTE dat);
  22. void SendString(char *s);
  23. void SendData2();

  24. void main()     //主程序
  25. {
  26.                 UART_INIT();
  27.         _nop_();
  28.         _nop_();
  29.           SendData2();
  30.                 while(1)
  31.                 {
  32.                         
  33.                 }
  34. }
  35. /*----------------------------
  36. 串口初始化
  37. ----------------------------*/
  38. void UART_INIT()     //串口初始化
  39. {
  40.         SCON= 0x50;                                                                       //9位可变波特率,校验位初始为0
  41.         T2L = (65536 - (FOSC/4/BAUD));   //设置波特率重装值
  42.   T2H = (65536 - (FOSC/4/BAUD))>>8;
  43.         AUXR = 0x14;                     //T2为1T模式, 并启动定时器2
  44.   AUXR |= 0x01;                    //选择定时器2为串口1的波特率发生器
  45.   ES = 1;                          //使能串口1中断
  46.   EA = 1;
  47. }


  48. void Uart() interrupt 4
  49. {
  50.                
  51.                
  52.       
  53.                  if (RI)
  54.     {
  55.                                 ES=0;
  56.         RI = 0;                 //清除RI位
  57.         ACC= SBUF;              //P0显示串口数据
  58.         ES=1;
  59.     }
  60.    
  61.     if (TI)
  62.     {
  63.         TI = 0;                 //清除TI位
  64.         busy = 0;               //清忙标志
  65.     }
  66. }

  67. /*----------------------------
  68. 发送串口数据
  69. ----------------------------*/
  70. void SendData(BYTE dat)
  71. {
  72.     while (busy);               //等待前面的数据发送完成
  73.     ACC = dat;                  //获取校验位P (PSW.0)
  74.     busy = 1;
  75.     SBUF = ACC;                 //写数据到UART数据寄存器
  76. }
  77. void SendData2()
  78. {
  79.                     //while(busy);
  80.                
  81.                                 SBUF=ACC;
  82.                                 
  83.                
  84. }
  85. /*----------------------------
  86. 发送字符串
  87. ----------------------------*/
  88. void SendString(char *s)
  89. {
  90.     while (*s)                      //检测字符串结束标志
  91.     {
  92.         SendData(*s++);             //发送当前字符
  93.     }
  94. }

不知道是哪里有问题?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

17

主题

56

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部