• 单片机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. }

  • 相关阅读:
    【Python从入门到精通】(六)Python内置的数据类型-列表(list)和元组(tuple),九浅一深,十个章节,不信你用不到
    电力安全智慧云平台:引领更安全的用电新时
    任意代码执行漏洞复现
    手机无人直播软件在苹果iOS系统中能使用吗?
    关于神经网络的思考
    数据结构速通-重点知识点回顾
    MVC三层架构
    gin 集成 Swagger
    【明解c语言中级篇 第二章练习答案】
    【雷达原理】雷达信号级建模与仿真
  • 原文地址:https://blog.csdn.net/m0_49968063/article/details/132914411