打印
[ZLG-MCU]

借助单片机外部中断实现与微机通信

[复制链接]
1531|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xlhtracy|  楼主 | 2012-2-17 13:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
MCS-51系列单片机只有一个全双工串行口,它既可以实现串行异步通信,也可以作为同步移位寄存器使用,但不能同时实现两者功能。实际系统中,单片机的并行口常作为单片机与其他器件的快速交换数据口,而其串行口则用来作为同步移位寄存器发出数据。例如以下电路图中,8951单片机的串行口与串入并出移位寄存器74LS164配合,控制数码管的显示数据。显然,如果此时使微机与单片机系统进行串行通信,用以前普遍采用的串行口发生中断是不行的,因为此时单片机的串行口工作于方式是方式0,而通信则要使其工作于方式1、2或是方式3。为解决此问题,笔者设计了以下电路和软件。
1、硬件电路
微机的RS232通信口经电平转换器GD75189与8951单片机的P3.2和 RXD连接,单片机的TXD经GD75188与微机的串行口连接,这里两个电平转换器负责把电信号转换为单片机和微机所需要的电平。从电路看出,我们通过单片机的外部中断0来响应微机的串行通信申请,即单片机系统在串行口作为同步寄存器使用时,依然能及时捕捉到微机发出的信号,然后准备就绪开始与微机进行串行通信。单片机与微机串行口接口电路如图1所示。

2、软件编程
在单片机初始化过程当中,将外部中断0设为优先级,串行口设为工作方式0,用定时器控制串行口定时发出一组数据,经74LS164转换为并行数据,点亮数码管。若在此过程中微机串行口发出数据,则引起单片机外部中断0的发生。单片机在执行中断服务子程序时,首先关闭外部中断0,以免在通信时又误引起中断,再改变串行口工作方式,使其工作于微机同样的方式1,并把波特率设定成与微机波特率一致,然后与微机进行通信。单片机的外部中断0在它检测到P3.2口是低电平时有效,所以先要使微机发出的数据中有一位为0,例如88H。在微机与单片机通信完毕后一定要把单片机串行口重新设置为工作方式0,以便它重新作为同步移位寄存器使用,而且要开放外部中断0,为下一次通信作准备。这里,因上位机微机的通信程序与下位机类似,所以只给出作为下位机的单片机外部中断0 服务子程序流程图(图2)。

3、总结
利用这种方法,在不需要增加任何硬件的基础上,稍微改变连线,用软件相配合实现了微机与单片机的串行通信,而丝毫没有影响单片机串行口作为同步移位寄存器使用,实现了一举两得,笔者已将此方法成功应用到以8951单片机为核心的仪器中。这种方法充分利用了软件的灵活性,不仅适用于51系列单片机,同样可以推广到其他单片机系统中。
参考文献:
[1] 李广弟.单片机基础[M].北京:北京航空航天大学出版社,1994.
[2] 何立民.MCS-51系列单片机应用系统设计系统配置与接口技术[M].北京:北京航空航天大学出版社,1990.

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:菜地里的西兰花

52

主题

1449

帖子

25

粉丝