IT技术互动交流平台

芯片3接口技术 实验三可编程并行接口8255A

作者:beautifulzzzz  来源:IT165收集  发布日期:2014-12-21 19:49:29

一、    实验目的和要求

学会8255A芯片和微机接口原理和方法。

掌握8255A并行接口芯片的基本工作原理、工作方式和编程原理。

 

二、    实验原理与背景

2-1、8255A简介

8255A是Intel公司生产的可编程并行I/O接口芯片,有3个8位并行I/O口。具有3个通道3种工作方式的可编程并行接口芯片(40引脚)。 其各口功能可由软件选择,使用灵活,通用性强。8255A可作为单片机与多种外设连接时的中间接口电路。

      图2.1 8255A内部结构

2-2、8255A编程

8255能并行传送8位数据,所以其数据线为8根D0~D7。由于8255具有3个通道A、B、C,所以只要两根地址线就能寻址A、B、C口及控制寄存器,故地址线为两根A0~A1。此外CPU要对8255进行读、写与片选操作,所以控制线为片选、复位、读、写信号。各信号的引脚编号如下:

  • (1)数据总线DB:编号为D0~D7,用于8255与CPU传送8位数据。
  • (2)地址总线AB:编号为A0~A1,用于选择A、B、C口与控制寄存器。
  • (3)控制总线CB:片选信号、复位信号RST、写信号、读信号。当CPU要对8255进行读、写操作时,必须先向8255发片选信号选中8255芯片,然后发读信号或写信号对8255进行读或写数据的操作。

 

        图2-2 8255A控制方式字

 

三、   实验具体的内容

3-1、8255方式0实验1

从8255端口C输入数据,再从端口A输出。

步骤如下:

  • 1)连接实验电路如图3.1,8255端口C接逻辑电平开关K0~K7,端口A接LED显示电路L0~L7。

      
         图3.1  TPC-USB平台8255方式0实验一连线 

  • 2)根据流程图3.2,编程并运行,观察实验结果。

         

        图3.2  TPC-USB平台8255方式0实验1:程序流程

     

    3-2、8255方式0实验2

    用8255测试3-8译码器74LS138输出结果。要求人机交互界面设计按照集成电路74LS138芯片的引脚图显示在屏幕上,如图3.3所示。

        

      图3.3  TPC-USB平台8255方式0实验二:人机交互界面图

    步骤如下:

  • 1)按图3.4连接硬件电路。

      

           图3.4  TPC-USB平台8255方式0实验二连线图

  • 2)根据流程图3.5,编程并运行,观察实验结果。

        

         图3.5  TPC-USB平台8255方式0实验二流程图

     

    3-3、8255方式1输出实验

    编程实现每按一次单脉冲按钮产生一个正脉冲,使8255产生一次中断请求,让CPU进行一次中断服务:依次输出01H、02H,04H,08H,10H,20H,40H,80H使L0~L7依次发光,中断8次结束。

    步骤如下:

  • 1)按图3.6连好线路。

       

          图3.6  TPC-USB平台8255方式1输出实验连线图

  • 2)根据流程图3.7,编程并运行,观察实验结果。

      

            图3.7  TPC-USB平台8255方式1输出实验流程图

     

    3-4、8255方式1输入实验

    编程实现:每按一次单脉冲按钮产生一个正脉冲使8255产生一次中断请求,让CPU进行一次中断服务:读取逻辑电平开关预置的ASCII码,在屏幕上显示其对应的字符,中断8次结束。

    步骤如下:

  • 1)按图3.8连好线路。

       

           图3.8  TPC-USB平台8255方式1输入实验连线图

  •   2)根据流程图3.9,编程并运行,观察实验结果。

      

          图3.9  TPC-USB平台8255方式1输入实验流程图

     

    四、   实验的代码说明

    4-1、8255方式0实验1代码及说明

     1 ASSUME  CS:CODE  
     2 CODE       SEGMENT  PUBLIC
     3 start:  
     4     mov dx,28bh     ;C口输入,A口输出
     5     mov al,89h 
     6     out dx,al 
     7 inout: 
     8     mov dx,28ah     ;从C口输入一数据
     9     in al,dx
    10     ;and al,00001111b
    11 
    12     mov dx,288h     ;从A口输出刚才自C口的数据
    13     out dx,al       ;所输入的数据
    14        mov dl,0ffh  ;判断开关是否按下
    15     mov ah,06h      ;dos中断服务功能号06h
    16     int 21h
    17     jz inout        ;若无则继续自c输入,a输出
    18     mov ah,4ch      ;否则,返回
    19     int 21h 
    20  END       START  
    21 code ends

    4-2、8255方式0实验2代码及说明

      1 data segment
      2     chip db 13,10
      3          db 13,10
      4          db '             Program to test the chip of 74LS138',13,10
      5          db 13,10
      6          db 13,10
      7          db '              +------------------------------+',13,10
      8          db '              |Y0  Y1  Y2  Y3  Y4  Y5  Y6  Y7|',13,10
      9          db '              |                              |',13,10
     10          db '              |           74LS138            |',13,10
     11          db '              |                              |',13,10
     12          db '              |   A    B    C   G1  G2A+G2B  |',13,10
     13          db '              +------------------------------+',13,10,'$'
     14     mess db 'After you have ready,Please press any key !','$'
     15     mes2 db 'Test Again ?(Y/N)','$'
     16     InA  db 0
     17     OutC db 0
     18     cll  db '                                           ','$'   
     19     data   ends 
     20 code   segment 
     21     assume cs:code,ds:data   
     22 ;------------------------------------
     23 start:
     24      mov ax,data
     25      mov ds,ax 
     26 again: 
     27      call cls
     28      call InputB  
     29      mov  dx,28bh 
     30      mov  al,10001011b
     31      out  dx,al
     32      mov  dx,288h
     33      mov  al,InA
     34      out  dx,al        
     35      call OutputC  
     36 jmp1:  
     37      mov ah,2        
     38      mov dh,15        
     39      mov dl,20        
     40      int 10h        
     41      mov ah,09        
     42      lea dx,mes2        
     43      int 21h        
     44      mov ah,1        
     45      int 21h        
     46      cmp al,'y'        
     47      je  again        
     48      cmp al,'n'        
     49      je  exit       
     50      mov ah,2        
     51      mov dh,15        
     52      mov dl,0        
     53      int 10h        
     54      lea dx,cll        
     55      mov ah,9        
     56      int 21h
     57      jmp jmp1
     58 exit:
     59      mov ah,4ch
     60      int 21h  
     61 ;------------------------------------
     62 InputB proc near
     63       mov ah,2
     64       mov bh,0
     65       mov dx,0
     66       int 10h
     67       mov ah,09
     68       lea dx,chip
     69       int 21h
     70       mov ah,2
     71       mov bh,0
     72       mov dh,15
     73       mov dl,10
     74       int 10h
     75       mov ah,09h
     76       lea dx,mess
     77       int 21h
     78       mov ah,0ch
     79       mov al,08h
     80       int 21h
     81 wait1:
     82       mov ah,0Bh
     83       int 21h
     84       cmp al,0
     85       jne wait1
     86       mov ah,2
     87       mov bh,0
     88       mov dh,15
     89       mov dl,10
     90       int 10h   
     91       lea dx,cll
     92       mov ah,09h 
     93       int 21h
     94       mov dh,12   
     95       mov dl,18  
     96 jmp3:  
     97       push dx        
     98       mov ah,2        
     99       mov bh,0       
    100       int 10h 
    101 jmp4:  
    102        mov ah,7      
    103        int 21h       
    104        cmp al,'1'       
    105        jne jmp2       
    106        mov ah,2        
    107        xchg al,dl    
    108        int 21h       
    109        mov cl,1        
    110        mov bl,InA       
    111        sal bl,cl        
    112        add bl,1        
    113        mov InA,bl        
    114        jmp jmp5 
    115 jmp2:  
    116        cmp al,'0'        
    117        jne jmp4       
    118        mov ah,2       
    119        xchg al,dl        
    120        int 21h        
    121        mov cl,1        
    122        mov bl,InA        
    123        sal bl,cl        
    124        mov InA,bl 
    125 jmp5:  
    126        pop dx        
    127        add dl,5  
    128        cmp dl,43        
    129        jb jmp3        
    130        mov cl,3        
    131        mov bl,InA        
    132        sal bl,cl        
    133        mov InA,bl       
    134        ret  
    135 ;------------------------------------
    136 InputB endp
    137 cls proc near        
    138     mov ah,6       
    139     mov al,0        
    140     mov ch,0        
    141     mov cl,0        
    142     mov dh,24        
    143     mov dl,79        
    144     mov bh,7        
    145     int 10h        
    146     ret 
    147 cls    endp   
    148 ;------------------------------------
    149 OutputC proc near        
    150     mov dx,28ah        
    151     in  al,dx        
    152     mov OutC,al        
    153     mov dh,4        
    154     mov dl,16 
    155 j:     
    156     push dx       
    157     mov ah,2     
    158     mov bh,0
    159     int 10h        
    160     mov al,OutC        
    161     mov bl,01h        
    162     and bl,al        
    163     mov cl,1       
    164     shr al,cl        
    165     mov OutC,al        
    166     add bl,30h       
    167     xchg bl,dl        
    168     mov ah,2       
    169     int 21h        
    170     pop dx        
    171     add dl,4        
    172     cmp dl,46       
    173     jb j        
    174     ret 
    175 OutputC endp     
    176     end start
    177 code ends

    4-3、8255方式1输出实验代码及说明

     1 code segment 
     2     assume cs:code 
     3 start: 
     4     mov ax,cs       ;设置中断向量IRQ3
     5     mov ds,ax 
     6     mov dx,offset int_proc 
     7     mov ax,250bh
     8     int 21h 
     9    
    10     mov dx,21h      ;开放IRQ3
    11     in al,dx 
    12     and al,0f7h  
    13     out dx,al 
    14     
    15     mov dx,28bh     ;A口方式1输出
    16     mov al,0a0h 
    17     out dx,al 
    18     
    19     mov al,0dh      ;PC6置位
    20     out dx,al 
    21     
    22     mov bl,1 
    23 ll: 
    24     jmp ll  
    25     
    26 int_proc: 
    27     mov al,bl       ;将bl输出到灯控制灯
    28     mov dx,288h  
    29     out dx,al 
    30     
    31     mov al,20h 
    32     out 20h,al 
    33     
    34     shl bl,1        ;右移一位
    35     
    36     jnc next        ;cf==2,NO返回中断
    37     
    38     in al,21h       ;关闭IRQ3
    39     or al,08h 
    40     out 21h,al
    41      
    42     sti             ;恢复中断
    43     
    44     mov ah,4ch 
    45     int 21h 
    46 next: 
    47     iret            ;中断返回
    48     code ends 
    49 end start

    4-4、8255方式1输入实验代码及说明

     1 code segment 
     2     assume cs:code 
     3 start: 
     4     mov ax,cs      ;设置中断向量IRQ3
     5     mov ds,ax 
     6     mov dx,offset int_proc      
     7     mov ax,250bh     
     8     int 21h   
     9       
    10     in  al,21h      ;开放IRQ3
    11     and al,0f7h       
    12     out 21h,al 
    13     
    14     mov dx,28bh     ;A方式1输入  
    15     mov al,0b8h     
    16     out dx,al 
    17     
    18     mov al,09h      ;C4置位      
    19     mov dx,28bh     
    20     out dx,al 
    21     
    22     mov bl,8        ;循环      
    23 
    24 ll: 
    25     jmp ll                 
    26 int_proc:                
    27     mov dx,288h     ;从A端口输入数据 
    28     in al,dx 
    29     add al,'0'
    30     mov dl,al  
    31            
    32     mov ah,02h      ;屏幕上显示     
    33     int 21h 
    34     mov dl,0dh      ;换行      
    35     int 21h 
    36     mov dl,0ah      
    37     int 21h
    38     
    39     mov al,20h      ;关中断       
    40     out 20h,al 
    41     
    42     dec bl          ;循环减一          
    43     jnz next 
    44           
    45     in al,21h       ;关闭IRQ3    
    46     or al,08h 
    47     out 21h,al     
    48       
    49     sti                
    50     mov ah,4ch             
    51     int 21h     
    52 next:
    53     iret     
    54     code ends     
    55 end start

    五、   实验结果的分析

  • 5-1、8255方式0实验1实验分析:在上位机DOS窗口下输入一个字符,上位机将数据送至端口C,然后再从端口A获得数据,并显示出来,结果完成了从C口输入A口输出。
  • 5-1、8255方式0实验2实验分析:利用上位机模拟了用8255测74LS138的功能。实验了138译码器的功能验证。
  • 5-1、8255方式1输出实验实验分析:编程实现了每按一次单脉冲按钮产生一个正脉冲,使8255产生一次中断请求,让CPU进行一次中断服务:依次输出01H、02H,04H,08H,10H,20H,40H,80H使L0~L7依次发光,中断8次结束。
  • 5-1、8255方式1输入实验实验分析:编程实现了:每按一次单脉冲按钮产生一个正脉冲使8255产生一次中断请求,让CPU进行一次中断服务:读取逻辑电平开关预置的ASCII码,这里我们利用8个逻辑电平对应一个八位二进制的数,当利用开关拨出某一个二进制的时候,上位机能获得其值并转换为相应的ASCALL在屏幕上显示,中断8次结束。

    附录资料

     

    更多精彩:http://www.cnblogs.com/zjutlitao/p/4125085.html 

    文档下载:http://pan.baidu.com/s/1mg3eCzQ 

     

Tag标签: 接口   芯片   技术  
  • 专题推荐

About IT165 - 广告服务 - 隐私声明 - 版权申明 - 免责条款 - 网站地图 - 网友投稿 - 联系方式
本站内容来自于互联网,仅供用于网络技术学习,学习中请遵循相关法律法规