sheafh

C51:串口接收和发送,查询与中断方法

0
阅读(1918)

假设要发送一组数据   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多,而中断发送只占单片机几十微秒(单片机速度越快,占用时间越少)。

中断发送缺点:代码稍复杂,发送过程不易控制。