① 單片機c的輸出函數putchar(char c)
printf函數是調用putchar函數輸入;
而putchar應該是先判斷TI是否為1,不為1則等待為1。如果為1則清0,然後送出一個字元。而單片機上電復位後TI是為零的, 因此你如果直接使用printf函數,你的程序就會在putchar函數中等待TI為1。這時你的程序就相當於直接死掉了。可以再用這兩個函數的時候先將TI初始話為1.就可以使用了,在keil中可在串口輸出口觀察到。
② 51單片機C語言中使用printf函數需要設置什麼
其實和直接的串口發送是一樣的#include
<intrins.h
包含進去tp=adcread(adr);讀取ad轉換的值sprintf(str,
"ad
result
is:
%dmv
\r",
tp);str是個char型數組再調用你編寫的串口發送字元串程序發送strvoid
sentstr(uchar
*str){
while(1)
{
if(*str='\0')break;
putbuffer(*str++);
}}sentstr(str);
51單片機中沒有printf這個函數,你如果想用串口發送的話,要自己去寫一個串口發送函數就可以了。
③ 關於51單片機串口中printf()的使用的問題
printf 函數在單片機中要重定向到串口,printf 調用標准庫函數 ,你需要重寫fputc() 這個c標准庫函數
④ c51中 printf怎用
是這樣的,keil的stdio.h提供了一堆函數,大致分兩類,一類是通過串口在上位機上輸入輸出,另一類是指定一個指針變數,向其輸入輸出,這樣便可以將得到的字元數組指針的內容輸出到LCD一類設備上了,也可通過指針獲得按鍵輸入。
對於一類,你必須得軟體初始化串口,硬體與電腦連接好,然後利用windows的超級終端就可以顯示單片機中程序里的printf等函數列印出的內容了,你也可以使用getchar獲得超級終端的按鍵碼。(當然也可以使用串口助手之類軟體代替超級終端,注意波特率,數據位,校驗位,等設置要保持一致)
對於第二類,是不用初始化串口的,因為跟串口沒任何關系,你只要用指針虛擬設備就可以了,輸入輸出都是你自己做的硬體。
附串口初始化程序:
#define T1_INIT_VALUE 0x0D //定時器1初始值設定 [email protected]
void UartInit(void) {
SCON = 0x50; //8位數據,可變波特率
TMOD &= 0x0f; //清除定時器1模式位
TMOD |= 0x20; //設定定時器1為8位自動重裝方式
TL1 = T1_INIT_VALUE; //設定定時初值
TH1 = T1_INIT_VALUE; //設定定時器重裝值
ET1 = 0; //禁止定時器1中斷
TR1 = 1; //啟動定時器1
ES = 0; //禁止串列口中斷
TI = 1; //必須置高TI,RI
RI = 1;
puts("Uart Initialize Success!");
// *.調用printf之前應該關閉串口中斷使能
}