请教串口通信的延时问题
各位大虾,请教大家一个问题。我用单片机的串口来接收和发送数据,并且都是用中断的方式将其放在两个不同缓冲区中。并且,我在串口发
送出命令之后,延时一段时间再去读接收缓冲区中的数据。这个延时使用的是一个循环。我发现当我延时时间长一点的时候,发送的数据的速
度也变的很慢。我想发送数据的速度应该是只和时钟频率相关的,程序的延时对发送速度是没有影响的。
请教大家一下,上面我描述的问题是怎么回事?
下面是我的一些代码
void uart0int(void)interrupt SIO_VECTOR using 2{
//接收数据中断
if(RI == 1){
RI = 0;
from_mc35_buf[from_mc35_buf_ptr++] = SBUF;
}
//发送数据中断
if(TI == 1){
TI = 0;
if((to_mc35_buf_out != to_mc35_buf_in)){
SBUF = to_mc35_buf[to_mc35_buf_out]; //
to_mc35_buf_out = (to_mc35_buf_out + 1) % MAX_CHARS_IN_SMS;
if(to_mc35_buf_out == to_mc35_buf_in){
to_mc35_buf_out = 0;
to_mc35_buf_in = 0;
}
}else{
flag = 0;
}
}
}
void send_at(void){
unsigned char i;
while(1){
memset(to_mc35_buf,0,MAX_CHARS_IN_SMS); //对缓冲区清零
for(i = 0; i < sizeof(AT); i++){
if(((to_mc35_buf_in + 1) % MAX_CHARS_IN_SMS) != to_mc35_buf_out){
to_mc35_buf[to_mc35_buf_in] = AT[i];
to_mc35_buf_in = (to_mc35_buf_in+1)% MAX_CHARS_IN_SMS;
}
TI = 1;
delay(10);
if(sub_str(from_mc35_buf,from_mc35_buf_ptr,"OK",2) == -1){ //是否响应了OK
//处理
}
}
}
在上面的程序里面,我把第二个函数的delay(×××);语句的参数加大,就会出现串口发送数据变慢。
发表时间:2008年1月28日22:25:57