并行IO接口电路扩展设计及应用

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第7章I/O接口扩展设计及应用7.1概述7.2可编程并行I/O接口芯片8255A7.3可编程RAM/IO扩展器8155/81567.4用TTL芯片扩展简单的I/O接口7.5显示器与键盘接口7.6并行打印机接口并行接口的基本概念MCS-51单片机有四个并行I/O口。当用MCS-51单片机组成的应用系统需外扩程序存储器和数据存储器时,真正可用的并行口,就只有一个P1口了。并行接口的基本概念可编程并行接口芯片8255A8255A的内部结构及引脚可编程并行接口芯片8255A/CSA1A0功能000A口001B口010C口011控制寄存器8255A的内部结构及引脚7.2.28255A的操作说明18255工作方式方式0:基本式输入输出方式1:选通式输入输出方式2:双向传送方式(1)方式选择控制字(2)PC口按位置/复位控制字8255A的操作说明8255A的扩展接口电路MOVA,#98H;方式控制字→AMOVDPTR,#7FFFH;选通控制寄存器MOVX@DPTR,A;方式控制字送入8255AMOVDPTR,#7FFCH;MOVXA,@DPTR;读PA口数据MOVDPTR,#7FFDH;MOVX@DPTR,A;送PB口输出例程例7-4在一个8031的应用系统中,利用扩展8255A设计一个EPROM2764编程器,要求8255A的PA口作为D0~D7数据输出口,PB口作为低8位地址口,PC口作为高5位的地址口。并将起始地址设定为ADR1,长度为L16的外扩RAM中用户程序固化到起始地址为ADR2的2764EPROM中。例7-4EPROM编程器逻辑图用户程序固化子程序框图①对8255的初始化编程用下列程序实现:START:MOVDPTR,#7FFFH;选通控制寄存器MOVA,#80H;MOVX@DPTR,A;方式控制字送接口MOVA,#0FH;置/复位控制字MOVX@DPTR,A;1→PC7,2764编程无效程序1START1:MOVDPTR,#addr1;RAM起始地址→DPTRMOVR4,#addr2L;MOVR5,#addr2H;EPROM起始地址→R5,R4MOVR6,#L16L;长度→R7,R6MOVR7,#L16H;MOVA,R6JNZLOOPDECR7;调整长度值程序2LOOP:MOVXA,@DPTR;取RAM中数据INCDPTR;RAM地址指针加1PUSHDPL;PUSHDPH;RAM地址压入堆栈MOVDPTR,#07FFCH;A口地址→DPTRMOVX@DPTR,A;数据→A口INCDPTR;选通B口地址MOVA,R4;MOVX@DPTR,A;低8位地址→B口INCDPTR;选通C口地址MOVA,R5;ANLA,#1FH;地址高5位PC0~PC4SETBACC.6;0→PC7MOVX@DPTR,A;开始写EPROM程序3MOVA,R4;INCA;EPROM地址加1MOVR4,A;JNZLOOP1;若A不为0转LOOP1INCR5;否则R4有进位到高位,即R5加1LOOP1:ACALLDL50;延时DL50子程为50ms延时子程序MOVDPTR,#7FFFH;MOVA,#0FH;1→PC7(控制口),MOVX@DPTR,A;停止编程POPDPH;POPDPL;RAM地址指针出栈DJNZR6,LOOP;DJNZR7,LOOP;长度减为0结束,非0继续RET程序47.4用TTL芯片扩展简单的I/O接口1.用74LS377扩展8位输出端口用74LS377扩展8位输出端口2.用74LS373扩展一个8位并行输入口用74LS373扩展一个8位并行输入口ORG0LJMPBEGIN;ORG03H;入口地址LJMPPINT0;初始化BEGIN:SETBIT0;下降沿触发MOVR0,#30H;数据缓冲首址SETBEX0;;开中断SETBEA;CPU开中断…;中断服务:PINT0:MOVDPTR,#07FFFH;指向373输入口MOVXA,@DPTR;读入MOV@R0,A;送数据缓冲区INCR0;修改R0指针RETI;返回程序输入接口输出接口扩展逻辑①8位并行输出口74LS273,由P2.7和相“或”控制,地址为7FFFHMOVDPTR,#7FFFHMOVA,#DATAMOVX@DPTR,A②8位并行输入口74LS244,由P2.6和相“或”控制,地址为0BFFFHMOVDPTR,#0BFFFHMOVXA,@DPTR③如果将图7-13中,U4A的第一脚接在P2.7上,两口地址为7FFFHMOVDPTR,#7FFFHLOOP:MOVXA,@DPTRMOVX@DPTR,ASJMPLOOP程序7.5显示器与键盘接口显示器与键盘接口入口:显示数据首址送R0DIR:MOVP2,#7FH;P2.7=0MOVR1,#0FFH;R1指向L1MOVDPTR,#TAB;段码表首址MOVR7,#4;DIR1:MOVA,@R0;取要显示数据ANLA,#0FHMOVCA,@A+DPTR;查表CPLA;取反MOVX@R1,A;送段码显示INCR0;指向下一个要显示数据DECR1;指向下一个LEDDJNZR7,DIR1;未完继续RETTAB:DB3FH,06H,5BH,4FH,66H,6DH,7DH,07HDB7FH,6FH,77H,7CH,39H,5EH,79H,71H程序LED显示接口--动态扫描驱动接口LED显示接口--动态扫描驱动接口DIR:MOVDPTR,#CWR;MOVA,#4DH;设置8155工作方式MOVX@DPTR,A;设A口、C口均作输出口MOVR0,#DISBUF;指向显示缓冲区首址MOVR5,#0FEH;选中最左边LED显示器MOVR4,#4;DIR1:CLRA;MOVDPTR,#PC;MOVX@DPTR,A;全熄DIR0:MOVA,@R0;取数MOVDPTR,#TAB;指向表首址MOVCA,@A+DPTR;查表,取段码MOVDPTR,#PA;指向段码地址MOVX@DPTR,A;送段码至PA口程序1MOVA,R5;取位码MOVDPTR,#PC;指向位码地址MOVX@DPTR,A;送位码至PC口RLA;MOVR5,A;修改位码LCALLDELY;延时INCR0;准备取下一个数DJNZR4,DIR0RETDELY:MOVR7,#3DEL1:MOVR6,#250DJNZR6,$DJNZR7,DEL1RETTAB:DB3FH,06H,5BH,4FH,66H,6DH,7DH,07HDB7FH,6FH,77H,7CH,39H,5EH,79H,71H程序27.5.2键盘接口键盘接口8155扩展I/O组成的行列式键盘KEY:CLRAACALLKS;有键按下吗?JZNK;无键按下返回ACALLDLAY;调用延时程序,消除抖动CLRA;ACALLKS;再次判断是否有键按下JZNK;无键按下返回MOVA,#0FEH;行扫描信号,从最低位开始MOVR4,#0;行计数器K1:MOVR2,AACALLKS;扫描键盘JNZFIND;找到键转移INCR4;行计数器加1,指向下一行MOVA,R2RLA;行扫描信号左移一位CJNEA,#0FE,K1;8行扫描完?MOVA,#0;没找到键SJMPNK程序1FIND:SWAPAADDA,R4NK:RETKS:MOVDPTR,#PA;A口地址送DPTRMOVX@DPTR,A;送行扫描信号MOVDPTR,#PC;C口地址送DPTRMOVXA,@DPTR;读列回扫信号CPLA;求反ANLA,#0FH;屏蔽高四位RET;A=0,无键按下程序2

1 / 28
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功