51单片机串口程序
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);
//}
}
}
51单片机串口程 相关文章:
- 51单片机串口程序,字符串/16进制发送与接收(11-19)
- 51单片机串口程序C语言版(11-19)
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
