天天看點

基于proteus的51單片機仿真執行個體六十一、序列槽發送字元串執行個體

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,電路原理圖如下所示:

基于proteus的51單片機仿真執行個體六十一、序列槽發送字元串執行個體

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

基于proteus的51單片機仿真執行個體六十一、序列槽發送字元串執行個體

繼續閱讀