普中开源电子分享网

 找回密码
 立即注册
搜索
查看: 6318|回复: 0

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

 关闭 [复制链接]

139

主题

382

帖子

1531

积分

金牌会员

Rank: 6Rank: 6

积分
1531
发表于 2015-9-11 15:10:57 | 显示全部楼层 |阅读模式
假设要发送一组数据   Send[10]
一般采用查询发送(循环发送)方式:
unsigned char Send[10];                  //发送量
unsigned char i;                               //循环量
for(i=0;i<10;i++)
{
       SBUF= Send;                      //发送
       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多,而中断发送只占单片机几十微秒(单片机速度越快

,占用时间越少)。
中断发送缺点:代码稍复杂,发送过程不易控制。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

Archiver|手机版|小黑屋|普中开源电子分享网 粤ICP备16123577号-2

GMT+8, 2024-5-5 09:06 , Processed in 0.084189 second(s), 30 queries .

Powered by 论坛搭建 X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表