单片机串口中断发送的实现与特点

jackxiang 2010-7-31 17:17 | |
     假设要发送一组数据   Send[10]
一般采用查询发送(循环发送)方式:
unsigned char Send[10];                  //发送量
unsigned char i;                               //循环量
for(i=0;i<10;i++)
{
       SBUF= Send[i];                      //发送
       while(TI==0);                         //等待发送完成
       TI=0;                                      //清标志
}

采用中断发送方式:
unsigned char Send[10];                 //发送量
unsigned char num;                         //发送数据量
unsigned char *p;                           //发送用指针

//发送时:
num=10;                                        //定义发送数据量
p=&Send ;                                    //取首地址
SBUF=*p;                                    //发送第一个数据,启动发送中断
//中断代码:
void ComInt() interrupt 4
{
       if(RI)  RI=0;                          //接收中断略;
      
       if(TI)                                     //发送中断处理
       {
              TI=0;                             //清标志
              num--;                            //计数减1
              p++;                               //指针加1
              if(num >0) SBUF=*p;     //数据继续发送至全部发完
       }
}

中断发送优点:省去循环等待时间,以上面例子为例,9600bps时查询发送约占用单片机10ms多,而中断发送只占单片机几十微秒(单片机速度越快,占用时间越少)。
中断发送缺点:代码稍复杂,发送过程不易控制。
来源:http://mazhijing.blog.51cto.com/215535/197250

作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:http://jackxiang.com/post/3356/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!

评论列表
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]