微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > MCU和DSP > 带大量I/O口扩展的串行芯片GM8164及其应用

带大量I/O口扩展的串行芯片GM8164及其应用

时间:06-28 来源:互联网 点击:

GM8164适合与单片机的UART相连,也可用I/O口线来模拟UART。为了提高数据传送速度,本设计使用了单片机的异步串行口,并使之工作于方式0(即移位寄存器方式),此时波特率为fosc/12,如采用12MHz晶振,则GM8164的fcLK=1MHz,完全可满足GM8164对时钟频率的要求。为了不影响单片机的串口通信功能,电路中使用了一片74HC4052双4 选一模拟开关来实现串行通信、输出口控制和并口数据输入的功能切换,并使用AT89C2051的P1.0、P1.1口实现A、B通道的选择。当P1.1P1.0=00时选择串行输入/并行输出;P1.1P1.0=01时选择并行输入/串行输出;P1.1P1.0=10时为串口通信功能;P1.1P1.0=11时禁止所有功能,同时使用单片机的P1.2-P1.4口来分别作为I/O控制、锁存控制 和高阻输出控制口。

以下给出串行输入/并行输出方式和并行输入/串行输出工作方式的子程序,本程序假设使用了全部32个输入口和40个输出口,并用DOUTC端输出串行数据,开关量输入缓冲区设在具有位寻址功能的20-23H,开关量输出缓冲区设在24-28H,并使用串口工作方式0。发送和接收数据采用等待查询方式。具体程序如下:

;位定义
A BIT P1.0 ;4052通道选择低位
B BIT P1.1 ;4052通道选择高位
I/O BIT P1.2 ;I/O控制
LE BIT P1.3 ;LE锁存控制
OC BIT P1.4 ;OC高阻控制
;并行输入/串行输出子程序
INPUT:MOV R0,#20H;设置开关量输入缓冲区指针
MOV R1,#04H ;设置开关量输入位数
SETB A ;选择开关量
CLR B ;输入功能
CLR LE
CLR OC
SETB I/O ;并行置数
CLR I/O ;I0-I31高阻态
RCV 1:CLR RI ;清接收结束标志
MOV SCON ,#10H ;设串口工作方式0,
并启动接收
WAIT 1:JNB RI,WAIT 1 ;未接收完等待
MOV A,SBUF ;将串行开关量数据送入A中
MOV @ R0 ,A ; 开关数据送开关量输入缓冲区

INC R0 ;指向下一缓冲区
DJNZ R1,RCV 1 ;未接收完则继续接收
RET ;返回
;串行输入/并行输出子程序
;将输出口要求的开关状态由输出量缓冲区输出
OUTPUT:MOV R0,#24H ;设置开关量输出缓冲区指针

MOV R1,#05H ;设置开关量输出位数
CLR A ;选择开关输出功能
CLR B
CLR OC
SETB LE ;允许输出数据
CLR I/O
MOV SCON,#00H;设串行口工作方式0
LOOP: MOV A,@ R0 ;取开关量数据
CLR TI ;清发送结束标志
MOV SBUF,A ;发送数据
WAIT2 JNB TI,WAIT 2 ;未发送完等待
INC R0 ;指向下一缓冲区
DJNZ R1,LOOP ;未发送完则继续发送
CLK LE ;锁存O0-O39状态
RET ;返回

开关量输入缓冲区20H~23H中的每一位与输人口引脚10-I31一一对应。开关量输出缓冲区24H~28H中的每一位和输出口引脚O0~O39--一对应,缓冲区长度可根据使用的I/O口数量进行设置,输人口的状态可用位判别指令或字节判别指令来判断,输出口状态可用更新对应口线输出缓冲区字节内容的方法实现并口数据输出或用置位/复位指令来实现位控输出,限于篇幅,在这里就不详述了。

5 结束语

GM8164串行I/O扩展芯片具有扩展I/O数量多,占用单片机硬件资源较少,接口电路及接口时序简单,数据传送速度快的特点,因而是一种较理想的开关量扩展芯片。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top