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 ...
随机推荐
- JMock2入门
说明:学习JMock官网的Getting Started的笔记 例子:为测试publish/subscribe发布/订阅信息系统的publisher(发布者),mock subscriber(订阅者) ...
- HPU第一次团队赛
D. Tom的战力问题 Tom被斯派克揍了TAT.Tom下定决心要战胜斯派克.但是在战胜最强的斯派克之前,Tom要先打败其他的狗.为此,他打算先收集一下信息.现在Tom在了得到了一些关于战斗力的小道消 ...
- E. 数字串
给你一个长度为 n 的数字串,找出其中位数不超过15位的不包含前导0和后导0的数 x ,使得 x+f(x) 是一个回文数,其中 f(x) 表示将 x 反转过来的数. 输入格式 多组输入,处理到文件结束 ...
- Linux命令:chown
说明: 将指定文件的拥有者改为指定的用户或组. 语法: chown [-cfhvR] [--help] [--version] user[:group] file... 参数: user : 新的文件 ...
- 详解 Web基本概念
作为本专栏的第一篇博文,本人将带领同学们初步了解什么是Web,以及有关Web学习的一些基本知识点 那么,话不多说,开始主题的讲解吧: 首先,本人来解释下什么是Web: 概念: 使用浏览器进行访问的应用 ...
- [php] 简单的实现一个错误接管类
自己弄的一个错误接管类: <?php //---------------------------------- // Leephp 错误接管类 // 2017-07-06 // Pengchon ...
- java Int类型转为double 类型;string转double
int a=12; double b=(double)a; or double c=Double.valueOf((double)a); string a_s="12"; doub ...
- 基于layui,Jquery 表格动态编辑 设置 编辑值为 int 或者 double 类型及默认值
首先先推荐大家在看这篇笔记时,阅读过我写的这篇 Layui表格编辑[不依赖Layui的动态table加载] 阅读过上面那篇笔记之后呢,才能更好的理解我现在所要说的这个东西 接下来废话不多说,上代码. ...
- Zookeepe的安装和集群的配置
Zookeepe的安装和集群的配置 一.Zookeeper的简介 Zookeeper是个框架 二.Zookeeper在Linux上安装 官方提供的下载服务器 地址1:http://mirror.bit ...
- 【认证与授权】Spring Security的授权流程
上一篇我们简单的分析了一下认证流程,通过程序的启动加载了各类的配置信息.接下来我们一起来看一下授权流程,争取完成和前面简单的web基于sessin的认证方式一致.由于在授权过程中,我们预先会给用于设置 ...