#include <stc12c5a60s2.h>
#define S2TI 0x02 //S2CON.1
unsigned int receCount=0,commandCount=0,i;
unsigned char rece_buf[6]={0X01,0X02,0X03,0X04,0X05,0X08},command_buf[6]={0xFD,0x00,0x00,0x00,0x00,0x00};
void Delay5000ms() //@11.0592MHz
{
unsigned char i, j, k;
//_nop_();
//_nop_();
i = 211;
j = 30;
k = 11;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void UartInit1() //115200bps@11.0592MHz
{
PCON &= 0x7F; //波特率不倍速
SCON = 0x50; //8位数据,可变波特率
AUXR |= 0x40; //定时器1时钟为Fosc,即1T
AUXR &= 0xFE; //串口1选择定时器1为波特率发生器
TMOD &= 0x0F; //清除定时器1模式位
TMOD |= 0x20; //设定定时器1为8位自动重装方式
TL1 = 0xFD; //设定定时初值
TH1 = 0xFD; //设定定时器重装值
ET1 = 0; //禁止定时器1中断
TR1 = 1; //启动定时器1
ES=1;
EA=1;
}
void UartInit2() //9600bps@11.0592MHz
{
AUXR &= 0xF7; //波特率不倍速
S2CON = 0x50; //8位数据,可变波特率
AUXR |= 0x04; //独立波特率发生器时钟为Fosc,即1T
BRT = 0xDC; //设定独立波特率发生器重装值
AUXR |= 0x10; //启动独立波特率发生器
}
/***********************************串口1中断*******/
void ser1_int() interrupt 4 //中断函数不用声明
{
if(RI==1)
{
RI=0;
rece_buf[receCount]=SBUF;
receCount++;
}
}
void main()
{
UartInit2();
UartInit1();
while(1)
{
for(i=0;i<6;i++)
{
SBUF=command_buf[i];
while(TI==0);
TI=0;
}
Delay5000ms();
if(receCount=6)
{
for(i=0;i<6;i++)
{
S2BUF=rece_buf[i];
while(S2CON & S2TI==0);
S2CON &= ~S2TI; //清除S2TI位;
}
}
receCount=0;
}
}
为啥我的串口2只能发送rece_buf[i]中的最后一个数??????????、
|