C51 中断接收 查询发送
扫描二维码
随时随地手机看文章
C51 中断接收 查询发送
#include
volatileunsignedcharrx_data;
volatilebitrx_flag=0;
voiddalay_1ms(unsignedshortn)
{
unsignedshorti,j;
for(i=0;i
{
for(j=60000;j>0;j--);
}
}
voidsend_char(unsignedcharch)
{
SBUF=ch;
while(!TI);
TI=0;
}
voidsend_string(unsignedchar*str,unsignedcharlen)
{
unsignedchari;
for(i=0;i
{
send_char(*(str+i));
}
}
//----------------------------------------------
voidmain(void)
{
//volatileunsignedchari,tmp;
unsignedchar*str="Serialtest";
TMOD=0x20;//T1方式2
TH1=0xFD;//Baud:9600bps@11.0592MHz
TL1=0xFD;
TR1=1;//启动定时器1
SCON=0x50;//串口方式1,8-n-1,允许接收
REN=1;//使能串口接收
EA=1;//打开总中断
ES=1;//打开串口中断开关
send_string((unsignedchar*)str,11);
while(1)
{
dalay_1ms(1);
if(rx_flag)
{
ES=0;//必须得先关串口中断,否则PC收不到数据
SBUF=rx_data;
while(RI==0);
ES=1;//再开串口中断
RI=0;
}
}
}
//----------------------------------------------
voidserial(void)interrupt4
{
rx_data=SBUF;
P1=rx_data;
rx_flag=1;
RI=0;
}
//----------------------------------------------