基于CPLD的单片机I/O口扩展研究
2019-04-04向兵赵红军
向兵 赵红军
摘要:单片机的应用在日常生活中已逐渐普及,大至家用电器,小至儿童玩具。在高等教育中,尤其是电子信息专业方面,单片机知识也是必不可少的一门课程。在使用单片机的同时,不但要求对理论知识的掌握,也需要在实际应用中得心应手,游刃有余。最基本的莫过于单片机的端口操作,其中I/O口的电平控制给我们日常生活带来了极大方便。在使用的过程中,低端单片机由于I/O口数量不足导致部分功能无法实现,我们常使用数字集成芯片进行扩展,如74LS系列移位寄存器,但是这种集成芯片也会由于引脚数量限制而无法确保单片机端口的充分扩展。所以,在此我们采用复杂可编程逻辑器件CPLD(Complex Programmable Logic Device)进行扩展研究,选取EPM1270T144结合AT89C51芯片进行设计,可根据实际需求扩展对应数量的端口。
关键词:单片机;I/0口;扩展;CPLD
一、AT89C51端口使用
在使用单片机进行电路开发时,我们肯定会用到其中32个输入输出引脚,在程序中对其电平进行控制便能实现外围电路的相应功能。例如,控制8*8LED点阵屏时,我们将其中16个引脚分别接至点阵的行和列,便可让点阵屏显示相应内容。控制16*16点阵时,将单片机所有IO口分为两组,即2*16,便可实现控制。但是如果点阵屏太大,如32*32点阵,则徐64个IO口,这样,只靠一片AT89C51单片机是无法直接实现功能控制,所以,我们选择复杂可编程逻辑器件EPM1270进行端口扩展。
二、EPM1270T144
EPM1270是Altera公司旗下MAXⅡ系列产品,内部包含1270个逻辑单元,外部144个引脚,根据使用情况来讲,排除下载端口及时钟引脚,此芯片可用作普通I/O口的数量高达115(24个电源接口+4个下载接口+1个时钟引脚)。EPM1270采用JTAG编程方式,对应引脚编号为33-36。
因CPLD无内部时钟,需要外部晶振提供脉冲信号作为其处理节拍标准,在选择时钟引脚时,可使用引脚编号为18,20,89,91任一引脚作为时钟信号输入端,在此我们使用有源晶振频率为11.0592MHz作为时钟基准。
三、译码扩展
EPM120为复杂可编程逻辑器件,其通用I/O口均可设置为双向或单向端口。在此,以2-4译码为例,即使用单片机两个I/O口扩展为4路I/O口。我们使用AT89C51D的P1.0,P1.1引脚作为待扩展引脚,将其连接至EPM1270编号21,22引脚,通过编号130-133引脚输出扩展信号。此译码原理与二进制译码原理相同,也可进行3-8译码或4-16译码扩展。本文扩展输出的4个I/O口连接4路LED进行控制。
四、软件设计
我们通过AT89C51两路引脚控制4路LED工作状态,按照2-4译码原理,两路输入可形成4种状态,分别对应4路输出引脚的电平,并在某一时刻单独点亮单个LED,若进行动态扫描,则可使显示效果类似于静态多路显示。单片机P1.0,P1.1四种工作状态00,01,10,11对应扩展输出工作状态分别为0001,0010,0100,1000。在此,我们以第三种情况为例,将单片机P1.1-1.0引脚电平设置为10,则通过P1=0X02即可实现,此后译码工作由EPM1270完成。由于P1.1-1.0引脚信号作为EPM1270输入,则需将EPM1270的20,21引脚设为输入端口,其设置代码如下:
moduleblock1(P10,P11,LED0,LED1,LED2,LED3);
input P10,P11;//定义21,22为输入引脚
output LED0,LED1,LED2,LED3;//定义130-133为输出引脚
reg LED0,LED1,LED2,LED3;//将输出引脚设置为寄存器类型变量
由于EPM1270输出信号是由21,22引脚的输入信号决定,所以逻辑上属于组合逻辑,只要21,22引脚电平产生变化,则130-133引脚电平会随之变化,因此,EPM1270程序设计如下:
always @ (P10 or P11)
begin
if({p11,p10} == 2b00)
begin
{LED3,LED2,LED1,LED0} <= 4b0001;
End
else if({p11,p10} == 2b01)
begin
{LED3,LED2,LED1,LED0} <= 4b0010;
End
else if({p11,p10} == 2b10)
begin
{LED3,LED2,LED1,LED0} <= 4b0100;
end
else if({p11,p10} == 2b11)
begin
{LED3,LED2,LED1,LED0} <= 4b1000;
end
end
编译完成后,在quartues中点击assignment->pin,打开Pin Planner进行引脚分配,将P10,P11引脚分别配置到EPM1270的第21,22引脚即,将LED0,LED1,LED2,LED3分別分配至EPM1270的130-133引脚即可。
五、小结
本文通过复杂可编程逻辑器件EPM1270对单片机I/O口进行扩展,其优越的可编程性能可充分满足单片机应用中的端口需求,译码原理清晰,程序设计简单方便。但是对于追求低成本的电路系统而言,EPM1270价格偏高,焊接技术要求过硬,对于普通开发者来讲,在需求度不是很高的情况下仍建议采用数字集成芯片进行设计。
参考文献:
[1]沈莉丽等.FPGA/CPLD设计与实践教程[M].中国电力出版社.2017.02
[2]王静霞.单片机基础与应用[M].高等教育出版社.2016.3
[3]王金明.数字系统设计与verilog HDL[M].电子工业出版社.2019.01
[4]赵勇等.单片机原理与接口技术[M].电子科技大学出版社.2016.12
[5]刘春龙等.CPLD应用技术实用教程[M].机械工业出版社.2012.06
作者简介:
向兵(1990-),男,汉,四川南充人,助教,硕士研究生,从事单片机原理与应用、电子产品分析与制作等课程研究及项目开发。
赵红军(1980-),男,汉,四川南充人,副教授,在读博士,从事电力系统设计与研究。