51单片机之printf

来源:本站
导读:目前正在解读《51单片机之printf》的相关信息,《51单片机之printf》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《51单片机之printf》的详细说明。
简介:我先在知道想要在51单片机使用printf有两种办法,一种是用库自己的printf,一种是写自己的printf,不过都很简单,我先介绍一下库的printf吧。

1、首先添加头文件#include

2、配置一下串口,但是在串口初始化的时候TI必须为1,否则无法发送。

3、也可以使用中断接收,但是不要再中断里有TI=0;这条语句,否则也发送不成功。

就这么简单,你就可以使用printf(“”,x,x,x)了,嘎嘎!

#include

#include

#define FOSC 11059200L//系统时钟频率

#define BAUD 9600 //串口波特率

void USART_Init();

void Delay100us() //@11.0592MHz

{

unsigned char i, j;

i = 2;

j = 15;

do

{

while (--j);

} while (--i);

}

void main()

{

unsigned int a=99;//定义的数不能是char 或者 unsigned char

char table[]="abc";

char *abc=table;

USART_Init();

Delay100us();

while(1)

{

printf("%d %c %x %s",a,(char)a,a,table);//必须(char)a强制转换一下

Delay100us();Delay100us();Delay100us();Delay100us();Delay100us();Delay100us();Delay100us();Delay100us();

}

}

void USART_Init(void)

{

AUXR=0x40;//定时器1的速度是传统的8051的12倍 不分频 不可以位寻址

TMOD=0x00;//设置定时器1为16位自动重装寄存器 不可以位寻址

SCON=0x50;//设置为8位波特率可变 并允许串口接收使能

PCON=0x00;//用定时器1模式0时于PCON无关了

TL1=(65536-(FOSC/4/BAUD));

TH1=(65536-(FOSC/4/BAUD))>>8;

TI=1;//用系统自带的printf函数,TI必须等于1,否则无法发送,不能

TR1=1;//使能定时器1

ES=1; //串口中断使能

EA=1; //全局中断使能

}

void Uart() interrupt 4 using 1

{

static unsigned char RI_date=0;

if(RI)//接收成功RI置位

{

RI_date=SBUF;

RI=0;

}

if(TI)//发送成功TI置位

{

//TI=0;//用系统的printf的时候,如果又用到中断的话,那么这句话就得屏蔽,否则无法发送

}

}

还有一种就是自己写printf。

void sendstring(unsigned char *string)//这个是字符串发送函数

{

while(*string!='') //判断是否到字符串的尾端

{

sendbyte(*string);

string++;

}

}

void uart_printf(char *fmt,...)//这个是我们的printf函数

{

va_list ap;//typedef char *va_list; va_list是char型的指针

char xdata string[1024];//访问外部RAM 两字节对齐

va_start(ap,fmt);//这个函数的功能是,找到第一个可变形参的地址,并把地址赋给ap

vsprintf(string,fmt,ap);//其实这个函数才是核心函数,没研究。。。

sendstring(string);//这个函数就是发送字符串函数,通过上一个函数,就把该提取的东西都提取了

va_end(ap);//结束函数

}

如果不懂得就参考网址:

http://blog.csdn.net/googlemi/article/details/8988567#1536434-tsina-1-80220-66a1f5d8f89e9ad52626f6f40fdeadaa

http://blog.csdn.net/googlemi/article/details/8988567#1536434-tsina-1-98185-66a1f5d8f89e9ad52626f6f40fdeadaa

http://blog.csdn.net/googlemi/article/details/8996605#1536434-tsina-1-96011-66a1f5d8f89e9ad52626f6f40fdeadaa

只要是支持printf的语言,那么如果片子的栈是向上生长的,函数的形参入栈的方向是从左向右,如果片子的栈是向下生长的,那么函数的形参是从右向左。

提醒:《51单片机之printf》最后刷新时间 2024-03-14 01:09:34,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《51单片机之printf》该内容的真实性请自行鉴别。