單片機(jī)與pc串口通信-----下位機(jī)程序
//MCS-51通過中斷方式接收pc機(jī)發(fā)來的字符,并回送給主機(jī)
本文引用地址:http://cafeforensic.com/article/201608/294951.htm#include
#include
#define uchar unsigned char
uchar xdata rt_buf[32];
uchar r_in,t_out;
bit r_full,t_empty;
serial() interrupt 4 //串口中斷程序
{
if(RI && r_full)
{
rt_buf[r_in]=SBUF;
RI=0;
if(rt_buf[r_in]==0x24)
{
r_full=1;
SBUF=rt_buf[t_out];
t_empty=0;
}
/*接收字符為$,則接收結(jié)束;設(shè)置接收結(jié)束標(biāo)志,開始發(fā)送*/
r_in=++r_in;
}
else if(TI && t_empty)
{
TI=0;
t_out=++t_out;
SBUF=rt_buf[t_out];
if(t_out==r_in)
t_empty=1;
/*t_out=r_in則發(fā)送完,設(shè)發(fā)送完標(biāo)志t_empty*/
}
}
main()
{
/*設(shè)置定時器T1工作于方式2,計數(shù)常數(shù)為0xfdH */
TMOD=0x20; //TMOD:GATE C/T1 M1 M0 GATE C/T0 M1 M0 0010 0000 以TR啟動定時
TL1=0xfd; //定時3us
TH1=0xfd;
SCON=0x50; //在11.0592MHz下,設(shè)置串行口波特率為9600,方式1,允許接收 01010000
PCON=0xD0; // 11010000 波特率加倍
IE=0x10; //00010000 允許串行中斷ES=1
TR1=1;
EA=1;
r_in=t_out=0;
t_empty =1;
r_full=0;
for(;;)
{
printf ("%s","serial communicationn"); //添加自己的程序處理代碼
}
}
附上: proteus下單片機(jī)和pc機(jī)串口的連接圖
評論