之前为 89c4051单片机与单片机B相连。 有两个线相连,一个是SBUSY,若SBUSY=1,表示单片机B忙,拒绝接受数据。反之,可以接受。另一个是SDATA,4051用来向单片机B发送数据。
void SCISend(INT8U Data)
{
SBUSY = 1;
while(SBUSY);
SBUFF=Data;
while(!TI);
TI=0;
}
现在换成atmeag162,
//PORTC.0相当于SBUSY线。
void SCISend(unsigned char send_data)
{
while(PINC&0x01);
delay_us(500);
while(PINC&0x01); //检测PINC.0为高还是地电平。
delay_us(500);
while(PINC&0x01);
delay_us(500);
while(PINC&0x01);
while(!(UCSR1A&DATA_REGISTER_EMPTY));
UDR1=send_data;
}
单片机B接受几个字符后,将会置SBUSY为1,处理这几个字符,所需时间在0.5s—3s范围内。
若不加延时,单片机B处理结果错误,说明收到的数据有丢失。但加了延时1.5ms(时间再小的话,如果mega162发送频繁,也会出错)正确。
为什么51不用延时,而avr需要?
|