期望实现的功能是:当串口调试助手发送给串口2 0xAA后
单片机通过串口2连续发送数组sendbuffer给上位机,当发送来的是0xFF
时停止发送
望大神们给看下,我的程序毫无反应。。。。。
void Uar
tinit2(void) //9600bps@11.0592MHz
{
AUXR &= 0xf7; //波特率不倍速
S2CON = 0x50; //8位数据,可变波特率
BRT = 0xFD; //设定独立波特率发生器重装值
AUXR &= 0xfb; //独立波特率发生器时钟为Fosc/12,即12T
AUXR |= 0x10; //启动独立波特率发生器
IE2=0x01; //允许串口2中断ES2=1
}
void sendoneByte(uchar c)
{
S2CON =S2CON&0xFD;//TI=0
S2BUF=c;
while(!(S2CON&0xFD));
S2CON =S2CON&0xFD;
}
void sendString(uchar *aaa)
{
while(*aaa!=' ')
{
sendoneByte(*aaa);
aaa++;
}
}
void Com2_Service(void) interrupt 8
{
if(S2CON & S2RI)
{
S2CON=S2CON&0xFE;//清标志位
accept=S2BUF;
if(accept==0xAA)//AA开始传送
{
com2flag=1;
//sendString(sendbuffer);
}
if(accept==0xFF)//结束命令
{
com2flag=0;
}
}
}
void main()
{
UartInit2();
EA=1;//开总中断
while(1)
{
if( com2flag==1)
{
sendString(sendbuffer);
}
if(com2flag==0)
{
IE2=0x00;
}
}
}
void sendoneByte(uchar c)
{
S2CON =S2CON&0xFD;//TI=0
S2BUF=c;
while(!(S2CON&0xFD));
S2CON =S2CON&0xFD;
}
这样的话一次不能发送太多字节,这样就可以
void sendoneByte(uchar c)
{
S2CON =S2CON&0xFD;//TI=0
S2BUF=c;
while(!(S2CON&0xFD));
S2CON =S2CON&0xFD;
}
希望这对其它朋友也有帮助
一周热门 更多>