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

專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

51單片機之printf

作者:佚名   來源:本站原創   點擊數:  更新時間:2014年04月26日   【字體:

 typedef char *va_list;

 
我先在知道想要在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!='\0')   //判斷是否到字符串的尾端
 {
  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的語言,那么如果片子的棧是向上生長的,函數的形參入棧的方向是從左向右,如果片子的棧是向下生長的,那么函數的形參是從右向左。
關閉窗口

相關文章

主站蜘蛛池模板: 国产一区二区视频免费在线观看 | 一区二区三区高清在线观看 | 99久久婷婷国产综合精品 | 天天躁日日躁狠狠躁2018小说 | 日韩av一区二区在线观看 | 蜜月aⅴ国产精品 | 欧美精品日韩 | 国产日韩视频 | 精品国产鲁一鲁一区二区张丽 | 久久久不卡网国产精品一区 | 欧美精品在线播放 | 国产精品久久久久久久岛一牛影视 | 黄色大片免费看 | 国产高清久久 | 欧美99久久精品乱码影视 | 国产成人精品一区二区三区在线 | 夜夜爽99久久国产综合精品女不卡 | 亚洲精品在线观看网站 | 国产精品久久久久久久毛片 | 亚洲精品永久免费 | 国产九九九九 | 日韩在线中文 | 人妖无码| 国产91丝袜在线播放 | 成人黄色电影在线播放 | 亚洲一区二区久久 | 亚洲午夜精品在线观看 | 亚洲精品久久久久中文字幕欢迎你 | 成人三级在线观看 | 日本成人免费网站 | 天天插天天操 | 国产91 在线播放 | 欧美成人猛片aaaaaaa | 亚洲天堂网站 | 五月天国产视频 | 在线观看av网站永久 | 欧美色性 | 精品国产aⅴ | 精品国产一区二区三区在线观看 | 久久久久国产一区二区三区 | 亚洲成人免费视频在线观看 |