[芯片] 3、接口技術·實驗三·可編程並行接口8255A


  

 

 

目錄

一、實驗目的和要求

二、實驗原理與背景

      2-1、8255A簡介

      2-2、8255A編程

三、實驗具體的內容

      3-1、8255方式0實驗1 

      3-2、8255方式0實驗2

      3-3、8255方式1輸出實驗

      3-4、8255方式1輸入實驗

四、實驗的代碼說明

      4-1、8255方式0實驗1代碼及說明

      4-2、8255方式0實驗2代碼及說明

      4-3、8255方式1輸出實驗代碼及說明

      4-4、8255方式1輸入實驗代碼及說明

五、實驗結果的分析

      5-1、8255方式0實驗1實驗分析

      5-1、8255方式0實驗2實驗分析

      5-1、8255方式1輸出實驗實驗分析

      5-1、8255方式1輸入實驗實驗分析

附錄資料


 

一、    實驗目的和要求

學會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/4174961.html

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

文檔下載:http://pan.baidu.com/s/1mg3eCzQ 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM