- 1、本文档共46页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第7章MCS-51单片机的并行IO接口及扩展解析
7.4 MCS-51与可编程并行I/O芯片8255的接口 8255A是Intel公司采用CHMOS工艺生产的一种高性能通用可编程输入/输出并行接口芯片,可以方便地应用在Intel系列微处理器系统中。MCS-51通过8255A可以扩展3组8位I/O端口。 7.4.1 8255A内部结构及其引脚功能 1.引脚信号 图7-4-1 8255A的引脚图 D7~D0(data bus):三态、双向数据线,与CPU数据总线连接,用来传送数据。 (chip select):片选信号线,低电平有效时,芯片被选中。 A1、A0(port address):地址线,用来选择内部端口。 (read):读出信号线,低电平有效时,允许数据读出。 (write):写入信号线,低电平有效时,允许数据写入。 RESET(reset):复位信号线,高电平有效时,将所有内部寄存器(包括控制寄存器)清0。 PA7~PA0(port A):A口输入/输出信号线。 PB7~PB0(port B):B口输入/输出信号线。 PC7~PC0(port C):C口输入/输出信号线。 VCC:+5V电源。 GND:电源地线。 8255A的内部结构如图7-4-2所示,由三部分电路组成:与CPU的接口电路、内部控制逻辑电路和与外设连接的输入/输出接口电路。 (1)与CPU的接口电路 (2)内部控制逻辑电路 (3)输入/输出接口电路 图7-4-2 8255A的内部结构 表7-4-1 8255A的端口分配及读/写功能 7.4.2 8255A的工作方式及其初始化编程 1.8255A的工作方式 (1)方式0:基本输入/输出方式(basic Input/Output) (2)方式1:单向选通输入/输出方式(strobe Input/Output) 图7-4-3当数据输入时,C口的引脚信号定义 图7-4-4端口A和端口B方式1数据输入的时序图 图7-4-5当数据输出时,C口的引脚信号定义 图7-4-6端口A和端口B方式1数据输出的时序图 图7-4-7端口A方式2引脚信号定义 (3)方式2:双向选通输入/输出方式(bi-directional bus) 2.8255A初始化编程 8255A的A、B、C三个端口的工作方式是在初始化编程时,通过向8255A的控制端口写入控制字来设定的。 (1)方式控制字的格式 图7-4-8 8255A工作方式控制字的格式 (2)C口置位/复位控制字的格式 图7-4-9 8255A C口置位/复位控制字的格式 [例7-4-1] 设8255A的A口工作在方式0,数据输出,B口工作在方式1,数据输入,编写初始化程序(设8255A的端口地址为FF80H~FF83H)。 初始化程序如下: MOV DPTR, #0FF83H ;控制寄存器端口地址为FF83H MOV A, ;A口方式0, 数据输出, B口方式1, 数据输入 MOVX @ DPTR,A ;将控制字写入控制端 在C语言中: # includereg51.h #includeabsacc.h //包含绝对地址访问库 #define COM8255 XBYTE[0xFF83] void main(void) { COM8255=0x86; } 7.4.3 8255与MCS-51单片机的接口 例 7-4-3 8255控制打印机。 图7-4-10是8031扩展8255与打印机接口的电路。8255的片选线为P0.7,打印机与803l采用查询方式交换数据。打印机的状态信号输入给PC7,打印机忙时BUSY=l,微型打印机的数据输入采用选通控制,当STB上负跳变时数据被打入。8255采用方式0,由PC0模拟产生STB信号。 向打印机输出字符串“WELCOME”的程序print.c如下: # includereg51.h # includeabsacc.h # define uchar unsigned char # define COM8255 XBYTE[0x007F] /*命令口地址*/ # define PA8255 XBYTE[0x007C] /*口A地址*/ # define PC8255 XBYTE[0x007E] /*口C地址*/ void toprn(uchar *p) /*打印字符串函数*/ { while(*p !=’ /0 ’) { wh
文档评论(0)