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

 

假设要发送一组数据   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多,而中断发送只占单片机几十微秒(单片机速度越快,占用时间越少)。
中断发送缺点:代码稍复杂,发送过程不易控制。


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值