久久久久久久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的語言,那么如果片子的棧是向上生長的,函數的形參入棧的方向是從左向右,如果片子的棧是向下生長的,那么函數的形參是從右向左。
關閉窗口

相關文章

主站蜘蛛池模板: 国产一区二区三区 | 欧美一区2区三区3区公司 | 亚洲一区二区三区乱码aⅴ 四虎在线视频 | 黄色免费在线观看网站 | 日本91av视频| 91视频网| 日韩1区| 久久精品国产一区二区电影 | 亚洲国产第一页 | 91高清视频在线观看 | 超碰人人插 | 91影院在线观看 | 亚洲视频在线看 | 中文字幕av第一页 | 欧美国产在线一区 | 中文字幕亚洲精品在线观看 | 精品美女在线观看视频在线观看 | 国产精品爱久久久久久久 | 黄在线免费观看 | 欧洲色综合 | 天天拍天天射 | 欧美5区 | 亚洲网址在线观看 | 成人超碰 | 人人干人人超 | 国产精品视频网 | 国产精品嫩草影院精东 | 成人a免费 | 精品久久久久久久 | 日韩在线视频免费观看 | 国产精品成人一区二区三区夜夜夜 | 九色在线观看 | 81精品国产乱码久久久久久 | 欧美在线一区二区三区 | 久久国产精品免费一区二区三区 | 欧美国产视频 | 粉嫩粉嫩芽的虎白女18在线视频 | 99久久久国产精品免费消防器 | 国产在线精品一区二区 | 久久福利电影 | 91视频在线看 |