• 51单片机putchar函数的说明


    原文排版远些乱,整理了一下。

     1 #include <reg51.h>
     2 
     3 #define XON  0x11            /*串口流控制符  启动*/
     4 #define XOFF 0x13            /*串口流控制符  中断*/
     5 
     6 /* putchar (full version):  expands '
    ' into CR LF and handles        完整版 每次发送数据都要检查sbuf是否有中断信号
     7  *XON/XOFF (Ctrl+S/Ctrl+Q) protocol                                    XON启动 XOFF中断      通信协议*/
     8 char putchar (char c)
     9 {
    10     if (c == '
    ') /*判断是否是换行符的原因,是因为字符串的标准格式是末尾为
    (回车符)
    (换行符)这两个字符*/
    11     { 
    12         if (RI) /*判断接收标识符是否为1,若为1则说明SBUF接受到了信息*/
    13         {
    14             if (SBUF == XOFF) /*判断SBUF中的信息是否为中断信号  是则执行以下程序*/
    15             {
    16                 do
    17                 {
    18                     RI = 0; /*将接收标识符置1 可以继续接收信息*/
    19                     while (!RI); /*判断是否接收到了信息,是则往下循环*/
    20                 }while (SBUF != XON); /*判断接收的信息是否为启动信息,是则退出循环,不是继续循环*/
    21                 RI = 0; /*将接受标识符置1 可以继续接收信息*/
    22             }
    23         } /*只要c是换行符,最终都要执行这里判断发送标识符是否为1,只有为1才往下执行,这点非常重要调用printf函数时,必须将TI置1*/
    24         while (!TI);
    25         TI = 0; /*将TI置0 准备发送数据*/
    26         SBUF = 0x0d; /* output CR  */          /*  发送回车符*/
    27     }
    28     if (RI) /*下面的if函数又是判断SBUF中是否接收了中断信号与上面的一样*/
    29     {
    30         if (SBUF == XOFF)
    31         {
    32             do
    33             {
    34                 RI = 0;
    35                 while (!RI);
    36             } while (SBUF != XON);
    37             RI = 0; 
    38         }
    39     }
    40     while (!TI); /*判断发送标识符是否为1*/
    41     TI = 0; /*将TI置0 准备发送数据*/
    42     return (SBUF = c); /*发送字符c*/
    43 }
    44 
    45 
    46 
    47 #if 0  // comment out versions below
    48 /*
    49 * putchar (basic version): expands '
    ' into CR LF  精简版
    50 */
    51 char putchar (char c)
    52 {              
    53     if (c == '
    ') /*还是判断字符c是不是换行符*/
    54     {
    55         while (!TI); /*判断TI是否置1     为1向下执行*/
    56         TI = 0;
    57         SBUF = 0x0d; /* output CR  */       /* c是换行符先发送回车符*/
    58     }
    59     while (!TI); /*又是判断TI是否为1   为1向下执行*/
    60     TI = 0; /*将TI置0 准备发送数据*/
    61     return (SBUF = c); /*发送字符c*/
    62 }
    63 
    64 
    65 /*
    66 * putchar (mini version): outputs charcter only  少了判断字符c是否为换行符的步骤
    67 */
    68 char putchar (char c)
    69 {
    70     while (!TI);  /*判断TI是否置1     为1向下执行*/
    71     TI = 0;  /*将TI置0 准备发送数据*/
    72     return (SBUF = c);  /*发送字符c*/
    73 }                                                          
    74 #endif
  • 相关阅读:
    sas 基础(1)-关于数据格式的SAS函数
    sas 命令行打开SAS IDE 的代码
    获取指定数据集观测数
    sas spawner
    sas 解析json
    正则表达式(更新中。。。)
    async await的简单使用
    element ui只输入数字校验
    element ui中表单循环项的校验
    微信小程序template和组件
  • 原文地址:https://www.cnblogs.com/jqdy/p/12255620.html
Copyright © 2020-2023  润新知