- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
中断方式下进行串口通讯的正确方法
一般普遍的把串口通讯分为查询方式和中断方式。
查询方式比较容易理解,各种书籍上都介绍的比较清楚。
但中断方式,没有几本书讲得好的,甚至有些例程根本
无法实际应用。
问题有:
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(){
hellip;;// 初始化
While (1) {
If (rx_flag ==1){// 查询接收标志
rx_flag = 0; // 清楚接收标志
x = temp; // 从暂存变量读取数据
hellip;;// 接收处理
}
hellip;; // 其它操作
}
}
这里的问题是:如果串口接收数据的间隔时间小于
ldquo; 接收处理 rdquo; 和ldquo; 其它操作 rdquo; 所
用的时间时,接收数据会丢失一部分。
正确使用中断方式处理串口收发应达到以下目的:
1,完全使用中断控制接收和发送,以达到最快的收发速
度。
2 ,接收和发送互不影响,达到全双工通讯效果。
3,应用程序不发生等待,以达到最高运行效率。
正确的中断发送方法如下:
1,建立一个足够大小的环形发送缓冲区,建立一个信号
量 (用于指示发送的数据量) ,建立一个发送标志位 (用
于指示发送状态)。
2 ,应用程序将数据写入环形发送缓冲区,查询发送接收
标志,若不在发送状态,手动触发中断。
3,产生发送中断时,查询信号量,以判别发送缓冲区内
是否有数据;若有,置发送标志位,从缓冲区读取数据
发送,累减信号量;若无,清除发送标志位。
C51 的例程如下:
// 变量定义
#define BUF_SIZE 0x10// 环形收发缓冲区长度
// 发送参数
char tx_circbuf[BUF_SIZE];// 环形发送缓冲区
uint8 tx_sem;// 信号量
bool tx_run;// 发送标志位
uint8 tx_circin;// 进环形缓冲区的位置指示
uint8 tx_circout;// 出环形缓冲区的位置指示
// 发送初始化程序
void tx_init(void){
// 硬件初始化 略
// 发送参数初始化
tx_sem = 0;
tx_run = False;
tx_circin = 0;
tx_circout = 0;
}
// 中断程序
void tx_int(void) interrupt 4 {
if (TI){
TI = 0;
if (tx_sem){
SBUF = tx_circbuf [tx_circout]; // 发送缓冲区
中的字符
if (++tx_circout ;= BUF_SIZE) tx_circout = 0;
tx_sem--;/
原创力文档


文档评论(0)