• 精简版STC单片机串口程序(只有初始化和sendbyte)


    摘要:本文分享两个函数构成的STC单片机串口发送程序,代码占用空间极小。不想调用stdio.h和printf但是还想用串口发送简单的调试信息?那就试试它吧!

    直接上代码 ,核心函数只有2个,如下所示

    1. void UartInit(void) //115200bps@11.0592MHz
    2. {
    3. SCON = 0x50; //8位数据,可变波特率
    4. AUXR |= 0x01; //串口1选择定时器2为波特率发生器
    5. AUXR |= 0x04; //定时器时钟1T模式
    6. T2L = 0xE8; //设置定时初始值
    7. T2H = 0xFF; //设置定时初始值
    8. AUXR |= 0x10; //定时器2开始计时
    9. TI=1;
    10. }
    11. void SendData(BYTE dat)
    12. {
    13. while (!TI); //等待前一个数据发送完成
    14. TI = 0; //清除发送标志
    15. SBUF = dat; //发送当前数据
    16. }

    完整代码如下:

    1. /*************************************************
    2. 版权声明:
    3. 文件名:main.c
    4. 作者:花生
    5. 版本号:
    6. 完成日期:2023年10月25日13:54:54
    7. 文件描述:通过STC单片机串口定时20毫秒发送0x55的16进制数据,串口波特率是115200.
    8. 主要函数列表:void UartInit(void),void SendData(BYTE dat),void SendData(BYTE dat)
    9. 开发环境:win7 64位操作系统,编译软件,STC-ISP6.92烧录,SSCOM串口助理观察发送的信息
    10. 所需硬件:STC15W408AS,其他硬件应该也没有问题,请注意延时和串口初始化的参数需要根据芯片型号重新计算。
    11. 使用说明:
    12. 1.本文件编译成功后,会生成一个test-uart.hex文件;
    13. 2.通过USB串口连接单片机,注意TXD RXD收发要交叉连接;
    14. 3.使用STC-ISP烧录,烧录的时候,需要确认芯片时钟工作在11.0592MHz,STC单片机是有内置的时钟的,可以不用晶振就能工作起来;
    15. 4.烧录完成后,用串口助理打开对应的端口,用十六进制模式就可以看到定时发送的55 55 55 55 了
    16. 修改历史:
    17. *************************************************/
    18. #include "main.h"
    19. typedef unsigned char BYTE;
    20. typedef unsigned int WORD;
    21. //==================================================================
    22. //函 数 名:void UartInit(void) //115200bps@11.0592MHz
    23. //功能描述:芯片时钟是11.0592MHz,串口波特率是115200bps。函数这些参数是STC-ISP软件“串口波特率计算”模块计算得来的
    24. //输入参数:无
    25. //返 回 值:无
    26. //作 者:STC-ISP
    27. //日 期:
    28. //修改记录:
    29. //==================================================================
    30. void UartInit(void) //115200bps@11.0592MHz
    31. {
    32. SCON = 0x50; //8位数据,可变波特率
    33. AUXR |= 0x01; //串口1选择定时器2为波特率发生器
    34. AUXR |= 0x04; //定时器时钟1T模式
    35. T2L = 0xE8; //设置定时初始值
    36. T2H = 0xFF; //设置定时初始值
    37. AUXR |= 0x10; //定时器2开始计时
    38. TI=1; //花生,请注意,这个TI一定要打开,否则发送不出去
    39. }
    40. //==================================================================
    41. //函 数 名:void SendData(BYTE dat)
    42. //功能描述:通过串口发送一个字节的数据
    43. //输入参数:unsigned char类型的一个字节的数据
    44. //返 回 值:无
    45. //作 者:STC-ISP
    46. //日 期:
    47. //修改记录:
    48. //==================================================================
    49. void SendData(BYTE dat)
    50. {
    51. while (!TI); //等待前一个数据发送完成
    52. TI = 0; //清除发送标志
    53. SBUF = dat; //发送当前数据
    54. }
    55. //==================================================================
    56. //函 数 名:void Delay20ms(void) //@11.0592MHz
    57. //功能描述:通过空语句延时20毫秒
    58. //输入参数:无
    59. //返 回 值:无
    60. //作 者:STC-ISP
    61. //日 期:
    62. //修改记录:
    63. //==================================================================
    64. void Delay20ms(void) //@11.0592MHz
    65. {
    66. unsigned char data i, j;
    67. i = 216;
    68. j = 37;
    69. do
    70. {
    71. while (--j);
    72. } while (--i);
    73. }
    74. //==================================================================
    75. //函 数 名:void main()
    76. //功能描述:主函数,初始化串口之后,延时20毫秒定时通过串口发送0x55数据
    77. //输入参数:无
    78. //返 回 值:无
    79. //作 者:
    80. //日 期:
    81. //修改记录:
    82. //==================================================================
    83. void main()
    84. {
    85. BYTE x = 0x55;
    86. UartInit();
    87. while(1)
    88. {
    89. SendData(x);
    90. Delay20ms();
    91. }//while
    92. }

    去掉注释后的代码如下,您可以直接复制粘贴了

    1. #include "main.h"
    2. typedef unsigned char BYTE;
    3. typedef unsigned int WORD;
    4. void UartInit(void) //115200bps@11.0592MHz
    5. {
    6. SCON = 0x50; //8位数据,可变波特率
    7. AUXR |= 0x01; //串口1选择定时器2为波特率发生器
    8. AUXR |= 0x04; //定时器时钟1T模式
    9. T2L = 0xE8; //设置定时初始值
    10. T2H = 0xFF; //设置定时初始值
    11. AUXR |= 0x10; //定时器2开始计时
    12. TI=1; //花生,请注意,这个TI一定要打开,否则发送不出去
    13. }
    14. void SendData(BYTE dat)
    15. {
    16. while (!TI); //等待前一个数据发送完成
    17. TI = 0; //清除发送标志
    18. SBUF = dat; //发送当前数据
    19. }
    20. void Delay20ms(void) //@11.0592MHz
    21. {
    22. unsigned char data i, j;
    23. i = 216;
    24. j = 37;
    25. do
    26. {
    27. while (--j);
    28. } while (--i);
    29. }
    30. void main()
    31. {
    32. BYTE x = 0x55;
    33. UartInit();
    34. while(1)
    35. {
    36. SendData(x);
    37. Delay20ms();
    38. }//while
    39. }

     本段代码编译完成后的大小是:

    Program Size: data=11.0 xdata=0 code=72

    运行的截图如下所示,选择16进制显示,会一直显示55 55 55 55。其实实现这一步之后,我们需要

     

    如果您需要工程文件,代码已经上传至gitee,请用下面连接下载

    最纯净的STC单片机原生串口发送字节: 初始化串口后sendbyte就能完成一个字节的数据发送,代码只有三个函数,都在main.c中,要想在调试的时候添加串口信息发送,可以直接将这个代码复制到自己的工程中。芯片是STC15W408AS

  • 相关阅读:
    百数服务商模式:为制造业未来插上数字化的翅膀,创造商机!
    Anaconda全网最全conda命令行(新建、复制、重命名、删除、国内源加速等)
    基地树洞 | 自动化小系列之OS脚本篇
    mysql远程连接 Communications link failure失败问题
    基于java web的学生考勤带请假管理系统——计算机毕业设计
    EWSD交换机加电过程
    照片加水印怎么弄?方法步骤介绍
    读书笔记:Effective C++ 2.0 版,条款9(避免隐藏标准形式的new)、条款10(new、delete对称定义)
    【Java SE】继承的详解
    Golang 代码调用可视化工具 go-callvis
  • 原文地址:https://blog.csdn.net/youngwah292/article/details/134034801