【微机原理 实验】可编程外围接口芯片8255(4)(硬件-含汇编代码)

实验十  可编程外围接口芯片8255(4)

 

更多微机实验:

Github: https://github.com/Amoiensis/Assembly-language 

CSDN: https://blog.csdn.net/yxp189/column/info/39992 

                         汇编语言-微机原理与接口技术-实验

注意未经允许,请勿转载!

           转载请标明出处~

适用课程:微机原理与接口技术(实验)

选用教材:微型计算机原理与接口技术-中国科学技术大学出版社

注意:8255芯片对应多个实验,请于???链接中查看~

 

一、实验目的

1、掌握8255A编程原理。

2、了解键盘阵列结构,学会读取按键的方法。

 

二、实验内容

按下图接线,8255C口接键盘(实际8255的PC0~PC3接键盘的列0~列3,PC4~PC7接键盘的行0~行3),8255CS接地址译码输出的288h~28fh。 8255的A口PA0~PA7接数码管的a~dp。

8255端口A地址为:288H

端口C地址为:    28AH

控制口地址为:   28BH

编程使得在键盘阵列上每按一个键后,微机屏幕上有相应字符显示出来,按“E”退出程序。

 

三、编程提示

1.识别键盘上的闭合键,通过采用行扫描法或行翻转法:

行扫描法是使键盘上某一行线为低电平,而其余行接高电平,然后读取列值;如果列值中有某位为低电平,则表明行列交点处的键被按下;否则扫描下一行,直到扫完全部的行线为止。

行翻转法是识别闭合键时,要将行线接一个并行口,先让它工作在输出方式,将列线也接到一个并行口,先让它工作在输入方式;程序通过输出端口向全部行线上送低电平,然后读取列线的值;如果此时有某一键被按下,则必定会使某一列线值为零,程序再对两个并行端口进行方式设置,使行线工作在输入方式,列线工作在输出方式,并且将刚才读到的列线值从列线所接的并行端口输出,再读取行线上的值;那么,在闭合键所在的行线上的值必定为零。这样,当一个键被按下时,必定可以读到一对唯一的行值和列值。

2.在程序设计时,将各个键对应的代码(列值,行值)放在一个表中,程序通过查表来确定具体按下的为哪一个键。

 

四、实验电路图

【微机原理 实验】可编程外围接口芯片8255(4)(硬件-含汇编代码)_第1张图片

 

实验代码

;Author:YXP
;CSDN:yxp189
;Email:[email protected]
;如有问题,欢迎和我联系~
;转载请标明出处~

      IOPORT  EQU       0CC00H-280H
       A8255  EQU       IOPORT+288H ;8255端口,a口  段码
       B8255  EQU       IOPORT+289H ;8255端口,b口 位码
       C8255  EQU       IOPORT+28AH ;8255端口,c口 键盘
       K8255  EQU       IOPORT+28BH ;8255端口,控制口
        DATA  SEGMENT
      TABLE1  DW        0770H,0B70H,0D70H,0E70H,07B0H,0BB0H,0DB0H,0EB0H
              DW        07D0H,0BD0H,0DD0H,0ED0H,07E0H,0BE0H,0DE0H,0EE0H ;键盘扫描码表
         LED  DB        3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH
              DB        39H,5EH,79H,71H,0FFH    ;LED段码表,0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f
        CHAR  DB        '0123456789ABCDEF'      ;字符表
      KEY_IN  DB        'G'
       CHAR1  DB        0FFH
         MES  DB        0AH,0DH
              DB        'PLAY ANY KEY IN THE SMALL KEYBOARD! ',0AH,0DH
              DB        'IT WILL BE ON THE SCREEN AND LED ! END WITH F or ANY KEY',0AH,0DH,'$'
        DATA  ENDS
      STACKS  SEGMENT   STACK       ;堆栈空间
              DB        100 DUP (?)

      STACKS  ENDS
        CODE  SEGMENT
              ASSUME    CS:CODE,DS:DATA,SS:STACKS,ES:DATA
      START:
              CLI
              MOV       AX,DATA
              MOV       DS,AX
              MOV       ES,AX
              MOV       AX,STACKS
              MOV       SS,AX
              MOV       DX,OFFSET MES           ;显示提示信息
              MOV       AH,09
              INT       21H
         KY:  CALL      KEY         ;调键盘扫描子程序,得到一个字符
              CALL      DISPLY      ;调显示子程序,显示得到的字符
              MOV       AH,1
              INT       16H
              JNZ       EXIT        ;按任意键退出
              MOV       DL,BYTE PTR KEY_IN
              CMP       DL,'F'
              JNZ       KY
       EXIT:  MOV       AX,4C00H    ;如果是"F"键则退出
              INT       21H         ;退出
         KEY  PROC      NEAR
   KEY_LOOP:  MOV       DX,K8255
              MOV       AL,81H
              OUT       DX,AL
              MOV       DX,C8255
              MOV       AL,0FH
              OUT       DX,AL
              IN        AL,DX       ;读行扫描值
              AND       AL,0FH
              CMP       AL,0FH
              JZ        KEY1        ;未发现有键按下则转
              CALL      DELAY       ;延时
              MOV       AH,AL
              MOV       DX,K8255
              MOV       AL,88H
              OUT       DX,AL
              MOV       DX,C8255
              MOV       AL,AH
              OR        AL,0F0H
              OUT       DX,AL
              IN        AL,DX       ;读列扫描值
              AND       AL,0F0H
              CMP       AL,0F0H
              JZ        KEY1        ;未发现有键按下则转
    
              MOV       SI,OFFSET TABLE1        ;键盘扫描码表首址
              MOV       DI,OFFSET CHAR          ;字符表首址
              MOV       CX,16       ;待查表的表大小
 KEY_TONEXT:
              CMP       AX,[SI]
              JZ        KEY_FINDKEY
              DEC       CX
              JZ        KEY1        ;未找到对应扫描码
              ADD       SI,2
              INC       DI
              JMP       KEY_TONEXT
            KEY_FINDKEY:
              MOV       DL,[DI]
              MOV       AH,02
              INT       21H         ;显示查找到的键盘码
              MOV       BYTE PTR KEY_IN,DL
 KEY_WAITUP:
              MOV       DX,K8255
              MOV       AL,81H
              OUT       DX,AL
              MOV       DX,C8255
              MOV       AL,0FH
              OUT       DX,AL
              IN        AL,DX       ;读行扫描值
              AND       AL,0FH
              CMP       AL,0FH
              JNZ       KEY_WAITUP  ;按键未抬起转
              CALL      DELAY       ;等待
       KEY1:  RET
         KEY  ENDP
       DELAY  PROC      NEAR
              PUSH      AX          ;延时 50ms--100ms
              PUSHF
              MOV       AH,0
              INT       1AH
              MOV       BX,DX
     DELAY1:
              MOV       AH,0
              INT       1AH
              CMP       BX,DX
              JZ        DELAY1
              MOV       BX,DX
     DELAY2:
              MOV       AH,0
              INT       1AH
              CMP       BX,DX
              JZ        DELAY2
              POPF
              POP       AX
              RET
       DELAY  ENDP
      DISPLY  PROC      NEAR
              PUSH      AX
              MOV       BX,OFFSET LED
              MOV       AL,BYTE PTR KEY_IN
              SUB       AL,30H
              CMP       AL,09H
              JNG       DIS2
              SUB       AL,07H
       DIS2:  XLAT
              MOV       DX,A8255
              OUT       DX,AL       ;输出显示数据,段码
              MOV       AL,0FFH
              MOV       DX,B8255
              MOV       CX,0006     ;段码显示,6位
    DISPLY1:
              OUT       DX,AL       ;输出显示数据,位码,打开显示
              PUSH      CX
              MOV       CX,0A000H   ;显示时间延迟
           DISPLY_DELAY:
              LOOP      DISPLY_DELAY
              POP       CX
              LOOP      DISPLY1
              POP       AX
              RET
      DISPLY  ENDP
        CODE  ENDS
              END       START

 

你可能感兴趣的:(汇编语言,微机原理,汇编语言,微机原理,接口技术,硬件,实验)