51單片機模擬串口的三種方法
/***********************************************************
方法三:中斷法
分 析:中斷的方法和計數器的方法差不多,只是當計算器溢出時便產生一次中斷,用戶可以在中斷程序中置標志,程序不斷的查詢該標志來決定是否發(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單片機教程
評論