久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計實例 >> 瀏覽文章

51單片機(jī)之printf

作者:佚名   來源:本站原創(chuàng)   點擊數(shù):  更新時間:2014年04月26日   【字體:

 typedef char *va_list;

 
我先在知道想要在51單片機(jī)使用printf有兩種辦法,一種是用庫自己的printf,一種是寫自己的printf,不過都很簡單,我先介紹一下庫的printf吧。
 
1、首先添加頭文件#include
 
2、配置一下串口,但是在串口初始化的時候TI必須為1,否則無法發(fā)送。
 
3、也可以使用中斷接收,但是不要再中斷里有TI=0;這條語句,否則也發(fā)送不成功。
 
 
 
就這么簡單,你就可以使用printf(“”,x,x,x)了,嘎嘎!
 
 
 
#include
#include
 
#define FOSC 11059200L//系統(tǒng)時鐘頻率
#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;//定義的數(shù)不能是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強制轉(zhuǎn)換一下
  Delay100us();Delay100us();Delay100us();Delay100us();Delay100us();Delay100us();Delay100us();Delay100us(); 
 }
}
 
void USART_Init(void)
{
 AUXR=0x40;//定時器1的速度是傳統(tǒng)的8051的12倍 不分頻   不可以位尋址
 TMOD=0x00;//設(shè)置定時器1為16位自動重裝寄存器 不可以位尋址
 SCON=0x50;//設(shè)置為8位波特率可變 并允許串口接收使能
 PCON=0x00;//用定時器1模式0時于PCON無關(guān)了
 
 TL1=(65536-(FOSC/4/BAUD));
 TH1=(65536-(FOSC/4/BAUD))>>8;
 TI=1;//用系統(tǒng)自帶的printf函數(shù),TI必須等于1,否則無法發(fā)送,不能
 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)//發(fā)送成功TI置位
 {
  //TI=0;//用系統(tǒng)的printf的時候,如果又用到中斷的話,那么這句話就得屏蔽,否則無法發(fā)送
 }
}
 
還有一種就是自己寫printf。
 
void sendstring(unsigned char *string)//這個是字符串發(fā)送函數(shù)
{
 while(*string!='\0')   //判斷是否到字符串的尾端
 {
  sendbyte(*string);
  string++;
 }
}
void uart_printf(char *fmt,...)//這個是我們的printf函數(shù)
{
 va_list ap;//typedef char *va_list; va_list是char型的指針
 
 char xdata string[1024];//訪問外部RAM 兩字節(jié)對齊
 
 va_start(ap,fmt);//這個函數(shù)的功能是,找到第一個可變形參的地址,并把地址賦給ap
 vsprintf(string,fmt,ap);//其實這個函數(shù)才是核心函數(shù),沒研究。。。
 sendstring(string);//這個函數(shù)就是發(fā)送字符串函數(shù),通過上一個函數(shù),就把該提取的東西都提取了
 va_end(ap);//結(jié)束函數(shù)
}
 
如果不懂得就參考網(wǎng)址:
 
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的語言,那么如果片子的棧是向上生長的,函數(shù)的形參入棧的方向是從左向右,如果片子的棧是向下生長的,那么函數(shù)的形參是從右向左。
關(guān)閉窗口

相關(guān)文章

主站蜘蛛池模板: 日韩在线精品 | 欧美日韩高清在线 | 午夜视频在线 | 欧美不卡视频 | 国产成人午夜精品 | 精品久久久久久久久久久久久 | 欧美午夜片 | 视频一区中文字幕 | 亚洲91在线 | 夜夜操夜夜爽 | 精品久久久久久久久久久久久久 | 欧美色综合天天久久综合精品 | 日日不卡av | 亚洲伊人影院 | 久久精品国产免费 | 人人干人人澡 | 日日夜夜精品 | 免费毛片观看 | 国产精品偷乱一区二区三区 | 久操视频在线 | 麻豆一级片 | 97精品国产 | 国产三级成人 | 国产一级自拍 | 五月天毛片 | 午夜激情福利 | 日韩在线网址 | 日韩精品三区 | 亚洲成人欧美 | 欧美日韩一区二区三区视频 | 日韩在线观看中文字幕 | 久久久久免费 | 91av免费| 午夜在线免费观看 | 五月伊人网 | 人人综合网| 久久不卡 | 一级国产片 | 国产美女自拍 | 黄视频网站在线观看 | 国产午夜在线观看 |