我用单片机的双串口来实现数据的中转站功能,即128的串口0连接身份*读卡器,通过对其发送指令附带返回值由串口0接收,再由128串口1发送到电脑上,现在的问题是串口0和ISP下载线同时用着会对数据的接收有影响吗?现在串口0只能接收到三个返回的数据,但是要求的返回值远远大于三个,不知道是程序问题还是复用问题,希望看到的都能给指点迷津。。。。拜托。。。。
//*************************************************************************
// 串口相关中断服务子程序
//*************************************************************************
//数据发送结束中断向量
SIGNAL(SIG_USART0_TRANS) //中断服务程序
{
delay_ms(10); //相关操作
}
//数据接收结束中断向量
SIGNAL(SIG_USART0_RECV) //中断服务程序
{
uchar temp;
temp=UDR0;
table33[t]=temp;
t++;
if(t>7)
{
UCSR0B=0XE0;//禁止接收
UCSR1B=0XF8;//发送中断允许
m=0;
}
}
/*uchar USART_Receive()
{
uchar temp;
while(!(UCSR1A&(1<<RXC)));
return UDR1;
temp=UDR1;
table00[j]=temp;
j++;
data_do(0xff);
UCSR0B=0XF8;//发送中断允许
if(j>14)
{
j=0;
UCSR1B=0XE0;//禁止接收
UCSR0B=0XF8;//发送中断允许
}
}*/
//数据寄存器空中断向量
SIGNAL(SIG_USART0_DATA) //中断服务程序
{
if(i<=2)
{
UDR0=table4[i];
i++;
}
else
{
UCSR0B=0XF0;//禁止发送
t=0;
}
}
//数据发送结束中断向量
SIGNAL(SIG_USART1_TRANS) //中断服务程序
{
delay_ms(10); //相关操作
}
//数据寄存器空中断向量
SIGNAL(SIG_USART1_DATA) //中断服务程序
{
uchar temp;
temp=table33[m];
UDR0=temp; //发送数据到数据寄存器
m++;
if(m>6)
{
UCSR0B=0Xc0;//禁止发送
m=0;
}
}
//*************************************************************************
// 74HC573控制数码管动态扫描显示函数,显示采集到的温度
//*************************************************************************
/*void Display_Uart(uint data_b,uint data_s,uint data_g)
{
uchar i,j;
system_init();
j=0x01; //此数据用来控制位选
for(i=0;i<5;i++) //用后3位数码管来显示
{
D_LE1;
W_LE1;
Data_IO=~j;
W_LE0;
j=(j<<1);
Data_IO=0x00;
D_LE0;
delay_ms(1);
}
D_LE1;
W_LE1;
Data_IO=~j;
W_LE0;
j=(j<<1);
Data_IO=table[A1];
D_LE0;
delay_ms(1);
D_LE1;
W_LE1;
Data_IO=~j;
W_LE0;
j=(j<<1);
Data_IO=table[A2];
D_LE0;
delay_ms(1);
D_LE1;
W_LE1;
Data_IO=~j;
W_LE0;
j=(j<<1);
Data_IO=table[A3];
D_LE0;
delay_ms(1);
}*/
//****************************** ************************************** *****
// 主程序
//*************************************************************************
void main()
{
system_init(); //系统初始化
usart0_init(); //usart串口初始化配置
// usart0_init();
usart_tx_data=0xff;
SREG|=0x80; //开启全局中断
i=0;
while(1)
{
SREG=0x00; //关中断,PD口做IO口用,才能正常显示数码管
Display_Uart(A1,A2,A3); //显示接收到的数据
SREG|=0x80; //开中断,用于下次接收中断
}
}
|