微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 51单片机串口程序

51单片机串口程序

时间:11-19 来源:互联网 点击:

interrupt4
{if(TI)
{TI=0;
if(outbufsign)
//if(putlast==outlast)outbufsign=0;
//else
{SBUF=*outlast;//未发送完继续发送
outlast++;//最后传出去的字节位置加一
if(outlast==outbuf+OLEN)outlast=outbuf;//地址到顶部回到底部
if(putlast==outlast)outbufsign=0;//数据发送完置发送缓冲区空标志
}
elseoutbufsign0=0;
}
if(RI)
{RI=0;
if(!inbufful)
{
*inlast=SBUF;//放入数据
inlast++;//最后放入的位置加一
inbufsign=1;
if(inlast==inbuf+ILEN)inlast=inbuf;//地址到顶部回到底部
if(inlast==getlast)inbufful=1;//接收缓冲区满置满标志

}
}
}
//*
//串口初始化0xfd=19200,0xfa=9600,0xf4=4800,0xe8=2400,0xd0=1200
serial_init(){
SCON=0x50;/*mode1:8-bitUART,enablereceiver*/
TMOD|=0x20;/*timer1mode2:8-Bitreload*/
PCON|=0x80;TH1=0xfA;//fa,//baud*2/*reloadvalue19200baud*/
TR1=1;/*timer1run*/
ES=1;REN=1;EA=1;SM2=1;//SM2=1时收到的第9位为1才置位RI标志
TMOD|=0x01;//th1autoload2X8,th01X16
TH0=31;TL0=0;//X32=1S
TR0=1;//ET0=1;

}
//*
//测试用主函数

voidmain(void)
{charc;
idataunsignedcharfree[16];
unsignedcharidata*freep=free;
serial_init();


putstring("jdioptuejls;j;klj");
delay(10);

while(1)
{putstring("comisready!");}
c=getbyte();
putbyte(0x20);
puthex(c);
switch(c)
{caser:
putbytes(inbuf,ILEN);
break;
caseg:
getline(freep,10);
putbyte(0x20);
putstring(freep);
break;
default:
putbyte(c);
//}
}
}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top