zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    java HTTP代码示例
    eclipse创建文件package,source folder和folder区别及相互转换
    spring 及 spring boot 资源文件配置
    深入理解Java枚举类型(enum)
    Linux环境变量配置的三个方法--/etc/profile,~/.bashrc,shell
    JAXB和XStream比较
    java将配置信息写在数据库(利用反射)
    【大数据实战】Logstash采集->Kafka->ElasticSearch检索
    Linux 安装rabbitmq 遇到的一些问题
    Linux 下的jdk安装
  • 原文地址:https://www.cnblogs.com/jqdy/p/12255620.html
Copyright © 2011-2022 走看看