|
一、实验目的
⑴掌握8155并行口的扩展与编程方法。
⑵了解8155并行口的键盘扫描及LED动态显示程序的编程方法。
8155介绍: 1)、8155是一个多功能的芯片,它的片内具有256字节的静态RAM、三个可编程选择工作方式
的并行I/O端口(2个8位口、一个6位口)、1个14位的可编程选择工作方式的减法计数器、1
个地址锁存器,因此外接一片8155,就相当于综合扩展了数据存储器、I/O口、定时器/计数
器。 8015芯片的引脚功能: PA0~PA7 | 端口A的I/O线(8位,接外设) | PB0~PB7 | 端口B的I/O线(8位,接外设) | PC0~PC5 | 端口C的I/O线(6位,接外设) | AD0~AD7 | 三态地址/数据复用线(8位,一般接单片机P0口,CPU与8155之间的地址、数据、命令、状态等信号都通过它来传送) | IO/ M | 端口/存储器 选择控制 “0”选择片内RAM “1”选择片内I/O口 | TIMER IN | 8155片内定时器/计数器的计数脉冲输入引脚 | TIMER OUT | 8155片内定时器/计数器的计满回零输出引脚 | RD、WR | 分别是对8155片内的RAM或I/O口的的读、写控制信号 | ALE | 地址锁存引脚 | CE | 选片 | RESET | 复位引脚 |
2)、8155的RAM和I/O口地址 RAM地址:当给8155的IO/ M 加低电平时,其AD0~AD7上得到的地址值是指8155的某一RAM单元的地址,地址范围是0000 0000到1111 1111,分别指向8155 RAM 的256个存储单元。 I/O口地址:当给8155的IO/ M 加高电平时,其AD0~AD7(仅用到低三位AD2、AD1、AD0)上得到的地址值是指8155的某一I/O口的地址. 3)、8155的使用 8155内RAM的使用:与一般外部数据存储器的使用基本一样,唯一区别是事先要使IO/ M 为低电平。 8155各端口的使用:A、B、C各端口可工作于不同的工作方式,使用前要进行初始化(写命令字到命令口),我们只要求基本输入/输出方式。
二、实验电路
上图为8155扩展I/O控制的4位共阴极LED动态显示接口电路。图中,PB口输出段选码,PA口输出位选码,位选码占用输出口的线数决定于显示器位数,比如4位就要占4条。75452是反向驱动器(30v高电压,OC门),这是因为8155PA口正逻辑输出的位控与共阴极LED要求的低电平点亮正好相反,即当PA口位控线输出高电平时,点亮一位LED。240是同向OC门,做段选码驱动器。 逐位轮流点亮各个LED,每一位保持1ms,在10ms~20ms之内再点亮一次,重复不止,这样。利用人的视觉赞留,好像4位LED同时点亮了。 三、实验连线 对于后缀名含有“H”的机型,按实验电路图连接138译码输入端A.B.C,其中A连A2,B连A3,C连A4,138使能控制输入端G与位于地址线A0引出孔所在位置下方的使能控制输出端G作对应连接,该端的寻址范围为0FFE0H~0FFFFH。
①用一8芯扁平线把位于16×16点阵显示单元右下角的总线接口与数据总线单元的D0~D7任一接口相连,并把Y2插孔与8155片选CS相连。 ②位于显示器左下方的控制总线WR/IOWR、RD/IORD分别与8155并行口的WR、RD引出端相连。 ③显示控制端LED-G与GND相连、8155并行口的I/M引出端与六位LED显示右下方的地址总线A8相连。 ④8155并行口的ALE、RST引出端分别与六位LED显示左下方ALE、/CLR端相连。
四、实验步骤 ⑴在“P.”状态下按“0→F1→4→F2→0→EV”,进行实验程序装载。 ⑵在“P.”状态下键入“ 3C6E→EXEC”命令,以连续方式运行键扫、显示控制程序。 ⑶LED左边第一位显示闪动的“P”,在“P”状态下按“0~7”任意一个数字键,闪动位显示与其对应的数字,按“MON”返回命令键,显示器返“P”待命。
五、实验说明 本实验仅适用于通用机型,不适用于Dais-8086H+等微机接口专用机型。 六、实验程序 CODE SEGMENT ASSUME CS:CODE,DS:CODE,ES:CODE ;=========4位七段显示、3x3键扫实验============== LED_CS EQU 0FFE8H ;8155命令口 LED_JR EQU 0FFEBH ;键入口 LCD_RW EQU 0FFE9H ;PA口=字形口 LCD_RS EQU 0FFEAH ;PB口=字位口/键扫口 ;================================================ ORG 3C6EH LEDGD: MOV DX,led_cs ;写8155控制字 MOV Al,43H out dx,Al ;令A、B 口为输出口、C口为输入口 led_jg: MOV BUF,11H ;送待令符“p” MOV BUF+1,10H ;清显示缓冲单元 MOV BUF+2,10H MOV BUF+3,10H MOV BX,OFFSET BUF MOV BUF+6,bL MOV BUF+7,bH LEDT: CALL X2 ;调闪动显示、键扫消抖子程序 CMP AL,10H JNC led_jg ;是返“P”命令转! call x3 ;送当前LED光标闪动单元 JMP LEDT ;完成送数操作返回显示键扫入口 ;=======刷新光标单元调正闪动指针========== X3: mov cx,ax MOV BX,OFFSET BUF+6 MOV AX,[BX] MOV BX,AX MOV [BX],cL ;接收值送显示缓冲区 INC ax ;调整显示指针 MOV BX,OFFSET BUF+4 CMP AX,BX JC SERI3 MOV AX,OFFSET BUF SERI3: MOV BUF +6,AL MOV BUF+7,AH RET ;==========闪动显示子程序=============== X2: MOV buf+4,80H X0: CALL DISPKEY cmp al,20h jc XX0 mov bx,OFFSET buF mov al,04h XLAT sub al,01h mov buf+4,al jnc x0 mov buf+4,30H mov bx,OFFSET buF+6 mov ax,[bx] mov bx,ax mov al,[bx] mov buf+5,al mov al,10h mov [bx],al X1: CALL DISPKEY cmp al,20h jc XX1 mov bx,OFFSET buF mov al,04h XLAT sub al,01h mov buf+4,al jnc x1 mov bx,OFFSET buF mov al,05h XLAT push ax mov bx,OFFSET buF+6 mov ax,[bx] mov bx,ax pop ax mov [bx],al JMP X2 XX1: mov bx,OFFSET buF mov al,05h XLAT push ax mov bx,OFFSET buF+6 mov ax,[bx] mov bx,ax pop ax mov [bx],al XX0: RET ;================================== LS3: DB 00H,01H,02H,20H,20H,20H,20H,20H ; 0,1,2,无键按下值 DB 03H,04H,05H,20H,20H,20H,20H,20H ; 3,4,5, DB 06H,07H,10H,20H,20H,20H,20H,20H ; 6,7,返回键按下值 ;================================== LED DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H DB 88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,0DEH,0F3H,0BFH ;================================ BUF DB ?,?,?,?,?,?,?,?,?,? ; 3,2,1,0,4,6,8, ;================================ DISPKEY:CALL DIS;调显示子程序 DISCDEY:CALL KEY ;调键扫子程序 MOV AH,AL ;键消抖处理 MOV BX,OFFSET buF+8 MOV CX,[BX] MOV BL,CL MOV BH,CH CMP AH,BH MOV BH,AH MOV AH,BL JZ DISK4 MOV BL,88H MOV AH,88H DISK4: DEC AH CMP AH,82H JZ DISK6 CMP AH,0EH JZ DISK6 CMP AH,00H JZ DISK5 MOV AH,20H DEC BL JMP DISK7 DISK5: MOV AH,0FH DISK6: MOV BL,AH MOV AH,BH DISK7: mov buF+8,bL mov buF+9,bh mov aL,ah cmp cl,ah RET ;===========显示子程序============= DIS: MOV CL,80H ;显示子程序 MOV BX,OFFSET BUF DIS1: MOV AL,[BX] PUSH BX MOV BX,OFFSET LED XLAT POP BX MOV DX,lcd_rw or al,80h OUT DX,AL MOV AL,CL or al,0fh MOV DX,lcd_rs OUT DX,AL PUSH CX MOV CX,0100H DELAY: LOOP $ POP CX CMP CL,10H JZ EXIT INC BX SHR CL,1 JMP DIS1 EXIT: MOV AL,0fH MOV DX,lcd_rs OUT DX,AL RET ;============键扫子程序============== key: mov aL,0ffh ;关显示口 mov dx,lcd_rw out dx,aL mov bL,00h mov ah,0feh mov cx,0003h key1: mov al,ah mov dx,lcd_rs out dx,aL SHL AL,01H MOV AH,AL NOP NOP NOP NOP NOP NOP MOV DX,led_jr IN AL,DX NOT AL NOP NOP AND AL,07H JNZ KEY2 INC BL LOOP KEY1 NKEY: MOV AL,20H ret KEY2: TEST AL,01H JE KEY3 MOV AL,00H JMP KEY6 KEY3: TEST AL,02H JE KEY4 MOV AL,08H JMP KEY6 KEY4: TEST AL,04H JE NKEY MOV AL,10H KEY6: ADD AL,BL mov bx,offset LS3 xlat ret ;================================== < |