新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 51單片機模擬串口的三種方法

51單片機模擬串口的三種方法

作者: 時間:2013-02-26 來源:網絡 收藏

/***********************************************************

方法三:

分 析:中斷的方法和計數器的方法差不多,只是當計算器溢出時便產生一次中斷,用戶可以在中斷程序中置標志,程序不斷的查詢該標志來決定是否發(fā)送或接收下一位,當然程序中需對中斷進行初始化,同時編寫中斷程序。本程序使用Timer0中斷。也是我推薦的方法,和計數法大同小異。發(fā)送程序參考計數法,相信是件很容易的事。另外還需注明的是本文所說的串口就是通常的三線制異步通信串口(UART),只用

RXD、TXD、GND。

***********************************************************/

#define TM0_FLAG P1_2 //設傳輸標志位

//計數器及中斷初始化

void S2INI(void)

{

TMOD |=0x02; //計數器0,方式2

TH0=0xA0; //預值為256-96=140,十六進制A0

TL0=TH0;

TR0=0; //在發(fā)送或接收才開始使用

TF0=0;

ET0=1; //允許定時器0中斷

EA=1; //中斷允許總開關

}

//接收一個字符

uchar RByte()

{

uchar Output=0;

uchar i=8;

TR0=1; //啟動Timer0

TL0=TH0;

WaitTF0(); //等過起始位

//接收8位數據位

while(i--)

{

Output >>=1;

if(RXD) Output |=0x80; //先收低位

WaitTF0(); //位間延時

}

while(!TM0_FLAG) if(RXD) break;

TR0=0; //停止Timer0

return Output;

}

//中斷1處理程序

void IntTimer0() interrupt 1

{

TM0_FLAG=1; //設置標志位。

}

//查詢傳輸標志位

void WaitTF0( void )

{

while(!TM0_FLAG) ;

TM0_FLAG=0; //清標志位

}

51單片機相關文章:51單片機教程



上一頁 1 2 3 下一頁

評論


相關推薦

技術專區(qū)

關閉