导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→请教串口通信的延时问题

* 18137: 请教串口通信的延时问题

   smartbean 
smartbean发表的帖子 

 请教串口通信的延时问题
各位大虾,请教大家一个问题。我用单片机的串口来接收和发送数据,并且都是用中断的方式将其放在两个不同缓冲区中。并且,我在串口发

送出命令之后,延时一段时间再去读接收缓冲区中的数据。这个延时使用的是一个循环。我发现当我延时时间长一点的时候,发送的数据的速

度也变的很慢。我想发送数据的速度应该是只和时钟频率相关的,程序的延时对发送速度是没有影响的。
请教大家一下,上面我描述的问题是怎么回事?
下面是我的一些代码
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

  
回复该帖

本主题共有 1 帖,分页:>>>>>该主题的所有内容[1]条

 *树形目录 只列出部分跟帖的标题以及简单的摘要信息 该主题的部分跟帖如下:

[上一篇帖子]:EXE文件打包工具(可注册组件)[原创]制作免安装程序工具 /P P
[下一篇帖子]:[求助]我想做一个LM3886R的DD B文件,那位高手可以帮我,Q我用的是PROTEL9