1、本例中的單片機通過序列槽按一定時間間隔,通過序列槽資料發送端P3.1(TXD)向主機發送字元串,利用proteus内置的虛拟終端(virtual terminal)的RXD端連接配接單片機的TXD端,單片機發送的字元可以在虛拟終端中顯示出來,另外還要注意将單片機的晶振頻率設為11.0592MHz。并且虛拟終端的波特率等設定要與程式中的設定相同。 2、本例中程式像主機發送的是英文字元串,所發送的字母表會通過虛拟終端顯示出來,在系統運作後,如果虛拟終端沒有顯示,可單擊proteus的調試(debug)菜單,然後單擊virtual terminal-VT1。 3、在keil c51中建立工程ex49,編寫如下程式代碼,編譯并生成ex49.hex檔案 //執行個體49:利用虛拟中斷實作序列槽資料的發送
//
#include <reg51.h> //包含頭檔案 //毫秒級延時函數
void delay(unsigned int x)
{
unsigned char i;
while(x--)
{
for(i = 0;i < 120;i++);
}
} //字元發送函數
void putchar(unsigned char data1)
{
SBUF = data1; //将待發送的字元送入發送緩沖器
while(TI == 0); //等待發送完成
TI = 0; //發送中斷标志請0
} //字元串發送函數
void putstring(unsigned char *dat)
{
while(*dat != '\0') //判斷字元串是否發送完畢
{
putchar(*dat); //發送單個字元
dat++; //字元位址加1,指向先下一個字元
delay(5);
}
} //主函數
void main(void)
{
unsigned char c = 0;
SCON = 0x40; //序列槽工作方式設定
TMOD = 0x20; //定時器工作方式設定
PCON = 0x00; //波特率倍增設定
TL1 = 0xfd; //波特率設定
TH1 = 0xfd; //
TI = 0; // 清0發送中斷标志
TR1 = 1; //開啟定時器
delay(200);
putstring("Receiving from 8051...\r\n"); //發送字元串,結尾回車換行
putstring("----------------------\r\n");
delay(50);
while(1)
{
putchar(c + 'A'); //發送字元
delay(100);
putchar(' '); //
delay(100);
if(c == 25) //每輸出一遍後加橫線
{
putstring("\r\n----------\r\n");
delay(100);
}
c = (c+1)%26;
if(c%10 == 0) //每輸出10個字元後回車換行
{
putstring("\r\n");
delay(100);
}
}
} 4、在proteus中建立仿真檔案ex49.dsn,電路原理圖如下所示:

5、将ex49.hex檔案載入at89c51中,啟動仿真,觀察程式運作結果,下圖是某一時刻程式運作結果