51单片机putchar函数的说明
原文排版远些乱,整理了一下。
#include <reg51.h> #define XON 0x11 /*串口流控制符 启动*/
#define XOFF 0x13 /*串口流控制符 中断*/ /* putchar (full version): expands '\n' into CR LF and handles 完整版 每次发送数据都要检查sbuf是否有中断信号
*XON/XOFF (Ctrl+S/Ctrl+Q) protocol XON启动 XOFF中断 通信协议*/
char putchar (char c)
{
if (c == '\n') /*判断是否是换行符的原因,是因为字符串的标准格式是末尾为\r(回车符)\n(换行符)这两个字符*/
{
if (RI) /*判断接收标识符是否为1,若为1则说明SBUF接受到了信息*/
{
if (SBUF == XOFF) /*判断SBUF中的信息是否为中断信号 是则执行以下程序*/
{
do
{
RI = ; /*将接收标识符置1 可以继续接收信息*/
while (!RI); /*判断是否接收到了信息,是则往下循环*/
}while (SBUF != XON); /*判断接收的信息是否为启动信息,是则退出循环,不是继续循环*/
RI = ; /*将接受标识符置1 可以继续接收信息*/
}
} /*只要c是换行符,最终都要执行这里判断发送标识符是否为1,只有为1才往下执行,这点非常重要调用printf函数时,必须将TI置1*/
while (!TI);
TI = ; /*将TI置0 准备发送数据*/
SBUF = 0x0d; /* output CR */ /* 发送回车符*/
}
if (RI) /*下面的if函数又是判断SBUF中是否接收了中断信号与上面的一样*/
{
if (SBUF == XOFF)
{
do
{
RI = ;
while (!RI);
} while (SBUF != XON);
RI = ;
}
}
while (!TI); /*判断发送标识符是否为1*/
TI = ; /*将TI置0 准备发送数据*/
return (SBUF = c); /*发送字符c*/
} #if 0 // comment out versions below
/*
* putchar (basic version): expands '\n' into CR LF 精简版
*/
char putchar (char c)
{
if (c == '\n') /*还是判断字符c是不是换行符*/
{
while (!TI); /*判断TI是否置1 为1向下执行*/
TI = ;
SBUF = 0x0d; /* output CR */ /* c是换行符先发送回车符*/
}
while (!TI); /*又是判断TI是否为1 为1向下执行*/
TI = ; /*将TI置0 准备发送数据*/
return (SBUF = c); /*发送字符c*/
} /*
* putchar (mini version): outputs charcter only 少了判断字符c是否为换行符的步骤
*/
char putchar (char c)
{
while (!TI); /*判断TI是否置1 为1向下执行*/
TI = ; /*将TI置0 准备发送数据*/
return (SBUF = c); /*发送字符c*/
}
#endif
51单片机putchar函数的说明的更多相关文章
- 关于51单片机使用printf串口调试
在51系列单片机上面使用串口的时候,有时候为了方便调试看一下输出结果,会用到printf函数输出到电脑终端,再用串口助手显示.但是单片机使用printf的时候有一点需要注意的地方. 1.首先添加头文件 ...
- 51单片机 Keil C 延时程序的简单研究
应用单片机的时候,经常会遇到需要短时间延时的情况.需要的延时时间很短,一般都是几十到几百微妙(us).有时候还需要很高的精度,比如用单片机驱动DS18B20的时候,误差容许的范围在十几us以内,不然很 ...
- 51单片机实现对24C02进行页写、顺序读取并显示验证
//************************************************************************************* //**程序名称:51单 ...
- 基于51单片机IIC通信的PCF8591学习笔记
引言 PCF8591 是单电源,低功耗8 位CMOS 数据采集器件,具有4 个模拟输入.一个输出和一个串行I2C 总线接口.3 个地址引脚A0.A1 和A2 用于编程硬件地址,允许将最多8 个器件连接 ...
- [学习笔记]15个QA让你快速入门51单片机开发
一.C语言相关 Q1:sbit与sfr代表是什么?有什么作用? Q2:#define OSC_FREQ 22118400L这句宏命令里的“L”是什么意思? Q3:我粘贴了别人的代码,怎么发现没有un ...
- 51单片机---点亮一个LED灯
1 程序源码 #include <REGX52.H> `包含51单片机的头文件` sbit led = P0^0; int main(void) { while(1) { led = 1; ...
- 51单片机学习笔记(郭天祥版)(1)——单片机基础和点亮LED灯
关于单片机型号的介绍: STC89C52RC40C-PDIP 0721CV4336..... STC:STC公司 89:89系列 C:COMS 52(还有51,54,55,58,516,):2表示存储 ...
- 【转载】51单片机data,bdata,idata,xdata使用注意事项
"51单片机编程在不同内存空间data xdata bdata定义变量的注意事项": 关键词:51 单片机 编程 不同 内存空间 data xdatabdata 定义 变量 注意事 ...
- #51单片机#蓝牙模块(ATK-SPP-HC06从机串口)的使用方法
#include <AT89X51.H> #include <intrins.h> // 函数原形定义 #define uchar unsigned char #define ...
随机推荐
- AJ学IOS(51)多线程网络之GCD下载合并图片_队列组的使用
AJ分享,必须精品 合并图片(图片水印)第一种方法 效果 实现: 思路: 1.分别下载2张图片:大图片.LOGO 2.合并2张图片 3.显示到一个imageView身上 // 异步下载 dispatc ...
- (一) Mybatis源码分析-解析器模块
Mybatis源码分析-解析器模块 原创-转载请说明出处 1. 解析器模块的作用 对XPath进行封装,为mybatis-config.xml配置文件以及映射文件提供支持 为处理动态 SQL 语句中的 ...
- js操作svg整体缩放
首先我们先创建一个svg整体布局,代码如下: <!DOCTYPE html> <html> <head> <title>js操作svg实现整体缩放< ...
- 结束基础,开始MVC之旅!
今天终于把前端Extjs和基础折腾完,虽然每一个都只是实现一个小的实例,但是也算是把.NET基础和前端基础顺了一遍.也算是提升.不足就是高级的知识点并没有吃透,比如委托,lamda之类的,还得在后面的 ...
- XML-解析失败原因初步分析
更多精彩文章请关注公众号『大海的BLOG』 首先放出有问题的代码 之所以直入主题是因为肝完了事情,急需入睡.hiahia hiboard:updateUrl="https://xxx.com ...
- kafka消息分区机制原理
背景 kafka如何支撑海量消息的集中写入? 答案就是消息分区. 核心思想是:负载均衡,采用合适的分区策略把消息写到不同的broker上的分区中: 其它的产品中有类似的思想. 比如monogodb, ...
- python列表简介
什么是列表?如何使用列表?https://docs.python.org/3/library/stdtypes.html#sequence-types-list-tuple-range 列表相关知识: ...
- Java的数组索引问题
/* 数组操作的两个常见小问题: ArrayIndexOutOfBoundsException:数组索引越界异常 原因:你访问了不存在的索引. NullPointerException:空指针异常 原 ...
- Asynchronous Disk I/O Appears as Synchronous on Windows
Summary File I/O on Microsoft Windows can be synchronous or asynchronous. The default behavior for I ...
- var、let、const
var.let.const之间的区别和使用 1.var声明变量可以重复声明,而let不可以重复声明 let a = 1; let a = 2; var b = 3; var b = 4; a // I ...