• 单片机C语言实例:23、串口通讯


    一、轮询发送

    程序实例1:

    1. #include //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
    2. #include"delay.h"
    3. /*------------------------------------------------
    4. 函数声明
    5. ------------------------------------------------*/
    6. void SendStr(unsigned char *s);
    7. /*------------------------------------------------
    8. 串口初始化
    9. ------------------------------------------------*/
    10. void InitUART (void)
    11. {
    12. SCON = 0x50; // SCON: 模式 1, 8-bit UART, 使能接收
    13. TMOD |= 0x20; // TMOD: timer 1, mode 2, 8-bit 重装
    14. TH1 = 0xFD; // TH1: 重装值 9600 波特率 晶振 11.0592MHz
    15. TR1 = 1; // TR1: timer 1 打开
    16. EA = 1; //打开总中断
    17. //ES = 1; //打开串口中断
    18. }
    19. /*------------------------------------------------
    20. 主函数
    21. ------------------------------------------------*/
    22. void main (void)
    23. {
    24. InitUART();
    25. while (1)
    26. {
    27. SendStr("UART test!");
    28. DelayMs(240);//延时循环发送
    29. DelayMs(240);
    30. }
    31. }
    32. /*------------------------------------------------
    33. 发送一个字节
    34. ------------------------------------------------*/
    35. void SendByte(unsigned char dat)
    36. {
    37. SBUF = dat;
    38. while(!TI);
    39. TI = 0;
    40. }
    41. /*------------------------------------------------
    42. 发送一个字符串
    43. ------------------------------------------------*/
    44. void SendStr(unsigned char *s)
    45. {
    46. while(*s!='\0')// \0 表示字符串结束标志,
    47. //通过检测是否字符串末尾
    48. {
    49. SendByte(*s);
    50. s++;
    51. }
    52. }

    二、中断收发

    程序实例2:

    1. #include //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
    2. /*------------------------------------------------
    3. 函数声明
    4. ------------------------------------------------*/
    5. void SendStr(unsigned char *s);
    6. /*------------------------------------------------
    7. 串口初始化
    8. ------------------------------------------------*/
    9. void InitUART (void)
    10. {
    11. SCON = 0x50; // SCON: 模式 1, 8-bit UART, 使能接收
    12. TMOD |= 0x20; // TMOD: timer 1, mode 2, 8-bit 重装
    13. TH1 = 0xFD; // TH1: 重装值 9600 波特率 晶振 11.0592MHz
    14. TR1 = 1; // TR1: timer 1 打开
    15. EA = 1; //打开总中断
    16. // ES = 1; //打开串口中断
    17. }
    18. /*------------------------------------------------
    19. 主函数
    20. ------------------------------------------------*/
    21. void main (void)
    22. {
    23. InitUART();
    24. SendStr("UART test!");
    25. ES = 1; //打开串口中断
    26. while (1)
    27. {
    28. }
    29. }
    30. /*------------------------------------------------
    31. 发送一个字节
    32. ------------------------------------------------*/
    33. void SendByte(unsigned char dat)
    34. {
    35. SBUF = dat;
    36. while(!TI);
    37. TI = 0;
    38. }
    39. /*------------------------------------------------
    40. 发送一个字符串
    41. ------------------------------------------------*/
    42. void SendStr(unsigned char *s)
    43. {
    44. while(*s!='\0')// \0 表示字符串结束标志,通过检测是否字符串末尾
    45. {
    46. SendByte(*s);
    47. s++;
    48. }
    49. }
    50. /*------------------------------------------------
    51. 串口中断程序
    52. ------------------------------------------------*/
    53. void UART_SER (void) interrupt 4 //串行中断服务程序
    54. {
    55. unsigned char Temp; //定义临时变量
    56. if(RI) //判断是接收中断产生
    57. {
    58. RI=0; //标志位清零
    59. Temp=SBUF; //读入缓冲区的值
    60. P1=Temp; //把值输出到P1口,用于观察
    61. SBUF=Temp; //把接收到的值再发回电脑端
    62. }
    63. if(TI) //如果是发送标志位,清零
    64. TI=0;
    65. }

  • 相关阅读:
    JWT如何解析过期的token中的信息
    软文推广如何实现效果?媒介盒子为你支招
    2022年编程语言排名,官方数据来了,让人大开眼界
    RPC原理
    linux使用less排查日志文件
    Unity中使用自定义mesh和UImesh
    农业产业谋定颠覆与重构-国稻种芯-万祥军:现代农业发展前景
    SQL命令及MariaDB(二)
    【Typescript重点】泛型的使用
    2023 | 组蛋白乳酸化如何影响免疫、自噬最新发现!
  • 原文地址:https://blog.csdn.net/m0_49968063/article/details/132914411