没有合适的资源?快使用搜索试试~ 我知道了~
首页中断方式下进行串口通讯的正确方法
资源详情
资源评论
资源推荐

中断方式下进行串口通讯的正确方法
一般普遍的把串口通讯分为查询方式和中断方式。查询方式比较容易理解,各种书籍
上都介绍的比较清楚。但中断方式,没有几本书讲得好的,甚至有些例程根本无法实际应
用。
问题有:
1,半中断法。只使用接收中断,不使用发送中断,发送时还是依靠查询中断标志的办法;
如下:
ES = 0;//若是接收使用中断方式,某些单片机需要关中断。但 C51 不一定需要。这里
只是示例。
SBUF = needsendchar;
While (!TI);
TI = 0;
ES = 1;
这里的问题是:发送数据时需要等待数据发完才能继续其他工作,程序效率降低;发送时
需要关中断,影响数据接收。
2,接收中断的处理方法错误。如下:
中断程序:
void ser() interrupt 4 {
RI = 0;
temp = SBUF; //读走数据,放入缓存(全局的)变量
rx_flag = 1; //设置接收标志
}
主程序:
void main(){
…;//初始化
While (1) {
If (rx_flag ==1){//查询接收标志
rx_flag = 0; //清楚接收标志
x = temp; //从暂存变量读取数据
…;//接收处理
}
…; //其它操作
}
}
这里的问题是:如果串口接收数据的间隔时间小于“接收处理”和“其它操作”所用的时间时,
接收数据会丢失一部分。
正确使用中断方式处理串口收发应达到以下目的:
1,完全使用中断控制接收和发送,以达到最快的收发速度。
2,接收和发送互不影响,达到全双工通讯效果。
3,应用程序不发生等待,以达到最高运行效率。
正确的中断发送方法如下:
1,建立一个足够大小的环形发送缓冲区,建立一个信号量(用于指示发送的数据量),
建立一个发送标志位(用于指示发送状态)。
















安全验证
文档复制为VIP权益,开通VIP直接复制

评论6