串口发送
HEROP 2005-03-25 04:24:44 以前没有注意的问题,最近便了一个调试程序和pc机通信,先用串口助手看了一下,结果发现发送前关了中断,助手接收正常。不关中断,发送少一些数据,助手接收正确,发送多一些数据,助手接收数据有的错误。请问大虾有哪些问题要注意?程序如下:
void main(void)
{
uchar i;
cpu_init();
while (1)
{
if (flag)
{
flag=0;
// EA=0;
for(i=0; i<3; i++)
{
SBUF=0xeb;
while (TI==0);
TI=0;
SBUF=0x90;
while (TI==0);
TI=0;
}
SBUF=0x71;
while (TI==0);
TI=0;
SBUF=0x61;
while (TI==0);
TI=0;
SBUF=0x02;
while (TI==0);
TI=0;
SBUF=0x01;
while (TI==0);
TI=0;
SBUF=0x01;
while (TI==0);
TI=0;
SBUF=0x84;
while (TI==0);
TI=0;
SBUF=0x06;
while (TI==0);
TI=0;
SBUF=0xdc;
while (TI==0);
TI=0;
SBUF=0x00;
while (TI==0);
TI=0;
SBUF=0xdc;
while (TI==0);
TI=0;
SBUF=0x00;
while (TI==0);
TI=0;
SBUF=0xd7;
while (TI==0);
TI=0;
SBUF=0x07;
while (TI==0);
TI=0;
SBUF=0x08;
while (TI==0);
TI=0;
SBUF=0x00;
while (TI==0);
TI=0;
SBUF=0x00;
while (TI==0);
TI=0;
SBUF=0x80;
while (TI==0);
TI=0;
SBUF=0x2B;
while (TI==0);
TI=0;
// EA=1;
}
}
}
void cpu_init(void)
{
IE=0;
PCON=0x00;
TMOD=0x21;
SCON=0x50; //UART mode 1,permit receive
TH1=0xfd;
TL1=0xfd;
TH0=0xfc;
TL0=0x66;
P1=0xff;
P2=0xff;
P0=0xff;
TR0=1;
TF0=0;
TR1=1;
TF1=0;
ET0=1;
ET1=0;
TI=0;
RI=0;
// EX0=1;
// EX1=1;
// ES=1;
EA=1;
}
//timer0 interrupt
void timer0(void) interrupt 1 using 0
{
uchar i,count;//,count1;
TH0=0xfc;
TL0=0x66;
i++;
if (i==0xff)
{
count++;
}
if (count==0x06)
{
count=0;
flag=1;
}
}