芯片复制51单片机printf函数的说明
- 芯片复制#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 = 0; /*将接收标识符置1 可以继续接收信息*/
- while (!RI); /*判断是否接收到了信息,是则往下循环*/
- }
- while (SBUF != XON); /*判断接收的信息是否为启动信息,是则退出循环,不是继续循环*/
- RI = 0; /*将接受标识符置1 可以继续接收信息*/
- }
- }</div><div>/*只要c是换行符,最终都要执行这里 判断发送标识符是否为1,只有为1才往下执行,这点非常重要调用printf函数时,必须将TI置1*/</div><div>while (!TI);</div><div> TI = 0; /*将TI置0 准备发送数据*/
- SBUF = 0x0d; /* output CR */ /* 发送回车符*/
- }
- if (RI) { /*下面的if函数又是判断SBUF中是否接收了中断信号与上面的一样*/
- if (SBUF == XOFF) {
- do {
- RI = 0;
- while (!RI);
- }
- while (SBUF != XON);
- RI = 0;
- <div> }</div><div>while (!TI); /*判断发送标识符是否为1*/
- TI = 0; /*将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 = 0;
- SBUF = 0x0d; /* output CR */ /* c是换行符先发送回车符*/
- }
- while (!TI); /*又是判断TI是否为1 为1向下执行*/
- TI = 0; /*将TI置0 准备发送数据*/
- return (SBUF = c); /*发送字符c*/
- }
- /*
- * putchar (mini version): outputs charcter only /*迷离版 少了判断字符c是否为换行符的步骤 */
- */
- char putchar (char c) {
- while (!TI); /*判断TI是否置1 为1向下执行*/
- TI = 0; /*将TI置0 准备发送数据*/
- return (SBUF = c);/*发送字符c*/
- }

芯片解密