日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > 單片機 > 單片機
[導讀]在用keil仿真查看串口輸出時,遇到了一個問題,代碼如下:#include#include /* 為使用printf函數(shù)而加入*/main(){ SCON= 0x50;/*SCON:工作模式1,8-bit UART,允許接收*/ TMOD |= 0x20;/*TMOD:定時器T1,工作模式2,

在用keil仿真查看串口輸出時,遇到了一個問題,代碼如下:

#include

#include /* 為使用printf函數(shù)而加入*/

main()

{

SCON= 0x50;/*SCON:工作模式1,8-bit UART,允許接收*/

TMOD |= 0x20;/*TMOD:定時器T1,工作模式2, 8位自動重載方式*/

TH1= 0xf3;/*當波特率為2400時,定時器初值*/

TR1= 1;/*定時器T1開始運行*/

TI= 1;/*允許發(fā)送數(shù)據(jù)*/

printf("hello world");

}

上面代碼調試運行后,串口不斷輸出"hello world",程序陷入死循環(huán)。

問題的解決:在程序末尾應加上while(1);

原因:如果不加while(1); 單片機將執(zhí)行一條RET指令,這條指令會讓程序復

位(軟件復位,從堆棧彈出0000H到PC寄存器),復位后程序重新開始

執(zhí)行。

思考:習慣了window下編程,主程序執(zhí)行完了就退出到操作系統(tǒng),單片機就

不一樣了,退到哪里呢?以下是單片機和編譯器的對話:

單片機:我沒事做了,死了算了~~~

編譯器:想死?你還是復位吧~~~RET

單片機:o,shit~~~

單片機串口相關問題:標準51只有一個串口,但是現(xiàn)在很多基于51內核的單

片機都會有兩個串口或是更多,那么printf函數(shù)針對哪個串口呢?

回答:KeilC51LIB目錄下有個putchar.c文件,printf函數(shù)會調用該文件中的

putchar函數(shù),putchar里面的使用的寄存器都是標準51的sfr(如TI,SBUF),它

們的地址是固定的,由此可知printf函數(shù)只針對串口0。如果想讓printf函數(shù)支

持串口1或串口2。。。那么修改putchar函數(shù)的寄存器即可,比如SBUF改為

SBUF1。但是能不能用printf函數(shù)對串口0,串口1。。。都適用呢,自己想辦

法吧:)

另外:如果只是用printf輸出字符串的話還是自己編個函數(shù)吧,因為printf要處

理各類數(shù)據(jù)的輸出,占用代碼空間很大,我試了一下,程序里就一條printf語

句,code就1K了,而且printf執(zhí)行起來也慢。

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內容侵犯您的權益,請及時聯(lián)系本站刪除( 郵箱:macysun@21ic.com )。
換一批
延伸閱讀
關閉