新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 用CPLD实现单片机与ISA总线并行通信

用CPLD实现单片机与ISA总线并行通信

作者:时间:2012-02-04来源:网络收藏


IOCHRDY 用来使ISA接口等待5个时钟周期;
DLY_D 延时输入信号;
DLY_CK 延时等待时钟信号;
DLY_CLR
等待清除信号,为开始下一次送数周期作准备;
DELAY 延时5个时钟周期后的输出信号,作为DLY_CLR信号的输入;
SYSCLK ISA接口的系统时钟信号。

在MCS51与PC104进行通信的过程中,DLY_D信号一直有效(高电平)。在信号SYSCLK的作用下,每5个时钟周期DELAY信号有效一次,即为高电平。此时DLY_CLR信号有效(低电平),IOCHRDY信号变为高电平,PC104可以读写数据。

地址译码部分采用文本输入方式,用ALTERA公司的硬件设计开发语言AHDL(ALTERA HARDWARE DESCRIPTION Language)。AHDL是一种模块化的高级语言,完全集成于MAX+plusII系统中,特别适合于描述复杂的组合逻辑、状态机和真值表,地址译码部分用文本输入方式,这充分体现了文本输入方式的优点。文本输入内容如下:
SUBDESIGN Address
(
PCA[9..0] : INPUT;
AEN,IOR,IOW : INPUT;
RESETDR,DELAY : INPUT;
A[15..14] :INPUT;
RD,WR : INPUT;
DLY_D : OUTPUT;
DLY_CK : OUTPUT;
DLY_CLR : OUTPUT;
STATE : OUTPUT;
PCRD : OUTPUT;
PCWR : OUTPUT;
MCURD : OUTPUT;
MCUWR : OUTPUT;
)
BEGIN
!DLY_CLR=RESETDR#DELAY;
DLY_D=!AEN (PCA[9..1]=
=H"110");
DLY_CK=!AEN (PCA[9..1]=
=H"110")(!IOR # ! IOW);
!PCWR=!AEN(PCA[9..0]=
=H"220") !IOW;
!PCRD=!AEN(PCA[9..0]=
=H"220") !IOR;
!STATE=!AEN(PCA[9..0]=
=H"221")!IOR;
!MCSRD=([15..14]= =H"1") !RD;
!MCSWR=(A[15..14]= =H"2" !WR;
END;
说明:PCA[9..0]是PC104的地址信号,A[15..14]是单片机的地址信号,PC104用到端口地址220H和221H。



3 通信软件设计

PC104是基于的,在系统软件设计中要防止地址冲突。PC104中使用A0~A9地址位来表示I/O端口地址,即可有1024个口地址:前512个供系统板使用,后512个供扩充槽使用。当A9=0时表示为系统板上的口地址;A9=1时,表示扩充插槽接口卡上的口地址[2]。因此,采用保留的口地址220H和221H,保证不会发生地址冲突。

本程序中PC104采用查询方式接收数据,单片机用中断方式接收数据。
#define pcreadwrite 0x220 /*PC104读写数据口地址*/
#define pcrdstate 0x221 /*PC104查询状态口地址*/
PC104写数据函数:
Void pcwrite(int port,unsigned char ch)
{ outportb(pcreadwrite,ch);
while ((inportb(pcrdstate)0x02)!=0x02);
/*等待单片机读走数据*/
{ }
}
单片机读子程序:
MCUWR:MOV DPTR,#4000H
MOVX A,@DPTR
RETI
PC104读数据函数:
Unsigned char pcread(int port)
{ while((inportb(pcrdstate)0x01)!=0x01);/*等待单片机写数据*/
{}
return inportb(pcreadwrite);
}
单片机写子程序:
MCUWR:MOV DPTR,#8000H
MOVX @DPTR,A
;等待PC104读走数据
RET

4 结论

实现单片机与接口的,电路结构简单、体积小,1片芯片足够,并且控制方便,实时性强,通信效率高。本设计方法已成功地应用于作者开发的各种数据采集系统中,用作单片机与PC104之间的并行数据通信,效果非常理想。


上一页 1 2 下一页

评论


相关推荐

技术专区

关闭