#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]中的最后一個數??????????、
|