微機原理與介面技術-第八章常用介面技術

cxy8發表於2023-10-28

定時控制介面

8253/8254定時器

由數位電路中的計數電路構成用於記錄輸入脈衝的個數,常用於定時中斷、定時檢測

定時器的應用

並行介面

並行介面電路8255

內部引腳

image

  • 8225具有24條可程式設計輸入輸出引腳,分成3個埠:ABC埠每個埠都是8位
  • A、B、C、3個埠分成兩組進行控制,A組控制埠A和埠C的高部(PC7PC4),`B組`控制B埠和C埠的低半部(PC3PC0)
  • 埠A和埠B作為輸入和輸出的資料埠,埠C作為控制或狀態埠

工作方式

工作方式0:基本輸入輸出方式

工作方式0是一種基本的輸入輸出方式,不需要應答式的聯絡訊號

  • D0~D7:8255與處理器間的資料引腳
  • :是指8255與外設間的資料引腳PA0~PA7PB0~PB7、和PC0~PC7

當處理器執行IN指令時,產生讀訊號~RD,控制8255從埠讀取外設的輸入資料,然後從D0~D7輸入處理器

當處理器執行輸出OUT指令時,產生寫訊號~WR,將處理器的資料從D0~D7提供給8255,然後控制8255將該資料從埠提供給外設

8255的三個埠都可以工作在基本輸入輸出方式,

工作方式1:選通輸入輸出方式

藉助於選通(應答)聯絡訊號進行輸入或輸出的工作方式。8225只有埠A和埠B可以採用方式1,但是每個資料埠要利用埠C的3個資料引腳作為應答聯絡訊號。
當8225的埠A埠B都工作於方式1,此時埠C剩下的兩個引腳還可作為基本輸入輸出引腳
image

  • (~STB)選通訊號:這是由外設提供的輸入訊號,有效時,將輸入裝置送來的資料鎖存至8255的輸入鎖存器
  • IBF:輸入緩衝滿訊號,8255的聯絡訊號,當此訊號有效時,表示資料已鎖存至輸出鎖存器
  • INTR:中斷請求訊號,用於向處理器發出中斷請求,要求處理器讀取外設資料

image

選通輸出方式
image

程式設計

8225是通用並行介面,在具體應用時,要根據實際情況選擇工作方式,也就是需要進行輸出設定。
8255的初始化程式設計只需要一個方式控制字就可以把三個埠設定完成

  1. 寫入方式控制字
    image

例如我們要把A埠指定為方式1輸出,C埠上半部分指定為輸出,B埠指定為方式0輸出,C埠下半部分指定為輸入,方式控制字:0B1H,或10110001B

mov dx, 0fffeh		;假設控制埠的地址為FFFEH
mov ak,0b1h			;方式控制字
out ax,al			;送到控制埠
  1. 讀寫資料埠
    經過了步驟1對讀寫方式的初始化之後,處理器執行IN指令、OUT指令,對3個資料埠進行讀寫就可以實現處理器與外設之間的資料交換
    如何實現對資料埠的置位:
mov dx,0fffah		;B埠地址假設位FFFAH
in al,dx			;讀出B埠原輸出內容
or al, 80h			;使D7=PB7=1
out dx,al			;輸出新的內容
  1. 讀寫埠C
  • C埠主要被分為兩個4位埠,兩個埠只能以0方式工作,但可分別選擇輸入和輸出(但情況必須合法比如用火選擇PC0為輸入、PC1為輸出將無法辦到,因為他們兩個都是屬於C埠的下半部分的只能同輸入輸出)
  • 當埠A和B工作在方式1下,C埠的部分引腳將被徵用,其餘引腳可設定工作在方式0
  • 對埠C的資料輸出有兩種辦法
    • 透過埠C的I/O地址,向C埠直接寫入位元組資料。
    • 透過控制埠,向C埠寫入位控制字,使C埠的某個引腳輸出0或1,或置位、復位內部的中斷允許觸發器
      image
  • 讀取的C埠資料有兩種情況
    • 對未被A埠和B埠徵用的引腳,將從定義為輸入的埠讀到引腳輸入資訊,將從定義為輸出的埠讀到輸出鎖存器的資訊。
    • 對被A、B埠徵用作為聯絡線的引腳,將讀到反映8255狀態的狀態字
      image

並行介面的應用

例子:
image

mov al,10011001b		;8255的方式控制字我9H
out 63h,al				;設定埠A和埠C為方式0輸入,埠B為方式0輸出

用8255方式0與印表機介面

image

採用埠C的PC7引腳產生負脈衝選通訊號,PC2引腳連線印表機的忙訊號查詢其狀態,處理器利用擦查詢方式輸出資料。

;初始化程式段
mov dx,0fffeh		;控制埠地址為FFFEH
mov al,10000001B	;方式控制字
out dx,al			;A埠方式0輸出C埠上半部分輸出、下半部分輸入(埠B任意)
mov al,00001111B	;埠C的復位/置位控制字
out dx,al			;使PC7=1,即置~STORBE=1

;輸出列印資料子程式,入口引數AH=列印資料
printc	prc
		push ax
		push dx
prn:	mov dx,0fffch	;讀取埠C
		in al,dx		;查詢印表機的狀態
		and al,04h		;印表機忙否
		jnz prn			;PC2=1印表機忙,則迴圈等待
		mov dx,0fff8h	;PC2=0印表機不忙,則輸出資料
		mov al,ah
		out dx,al		;將列印資料從埠A輸出
		mov dx, 0fffeh	;從埠C的PC7送出控制低脈衝
		mov al,00001110B;使PC7=0,即置~STORBE=0
		out dx,al
		nop				;適當延時,產生一定寬度的低電平
		nop
		mov al,00001111B;使PC7=1,置~STROBE=1
		out dx,al
		pop dx
		pop ax
		ret
printc	endp

數碼管及其介面

數碼管的工作原理

LED數碼管的主要部分是7段發光管,這七段發光管順時針分別被稱為a、b、c、d、e、f、g,有的還有一個小數點h。透過7個發光段的不同組合,數碼管可以顯示09和AF共16個字母數字,從而實現十六進位制數的顯示。
image
LED數碼管有共陽極和共陰極兩種結構。如果共陽極結構。
共陽極的話就是低電平有效
共陰極的話就是高電平有效

單個數碼管的顯示

為了將一位十六進位制數在一個LED數碼管上顯示出來,就需要將一位十六進位制數譯為LED的7位顯示程式碼,一種方法是硬體方法,另一種方法是軟體方法,軟體方法就是將0~F這16個數字對應的顯示程式碼組成一個表,透過查表進行譯碼

ledtb byte 3f,06h,5bh,...,顯示數碼錶
mov bx,1	;要顯示的數字
mov al,ledtb[bx];
mov dx,port	;假設port表似乎與數碼管相接的埠地址
out dx,al	;輸出顯示

多個數碼管的顯示

多個數碼管進行顯示的話我們需要考慮兩個問題,就是選中那個數碼管,然後讓這個數碼管顯示什麼數字,首先我們已經把第二個問題(顯示什麼數字)解決了(單個數碼管的顯示),然後選中那個數碼管可以用一個位控制埠

  • 位控制埠:控制哪個數碼管顯示
  • 段控制埠:決定具體顯示什麼數碼

image

	;資料段
ledt	byte 8 dup(0)
	;主程式
	mov si,offset ledt	;指向數碼緩衝區
	call displed
	;子程式:顯示一次數碼緩衝區的8個數碼,入口引數:DS:SI=緩衝區首地址
displed	proc
	push ax
	push bx
	push dx
	xor bx,bx
	mov ah,0feh			;指向最左邊的數碼管
led1:	
	mov bl,[si]			;取出要顯示的數字
	inc si
	mov al,ledtb[bx]	;得到顯示程式碼:AL<-LEDTB[BX]
	mov dx,segport		;segport位段控制埠
	out dx,al			;送出段碼
	mov al,ah;			取出位碼
	mov dx,bitport		;bitport為位控制埠
	out dx,al			;送出位碼
	call delay			;實現數碼管的延時顯示
	rol ah,1			;指向下一個數碼管
	cmp ah,0feh			;是否指向最右邊的數碼管
	jnz	led1			;沒有顯示下一個數字
	pop dx
	pop bx
	pop ax
	ret					;8位數碼管都顯示一遍,返回
ledtb	byte	0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h
		byte	80h,90h,88h,83h,0c6h,0c1h,86h,8eh
displed	endp
timer	=10				;延時常量(需要根據實際情況確定具體數值)
delay	pro
...
delay	endp

非同步序列通訊介面

模擬介面

在現實中許多訊號並不是數字訊號,而是計算機無法處理的模擬訊號,模擬介面就是為了處理這類訊號。

模擬輸入輸出系統

image

  • 感測器:將各種現場的物理量測量出來並轉換成電訊號
  • 放大器: 把感測器輸出的訊號放大到ADC所需的量程範圍
  • 低通濾波器:降低噪聲、濾去高頻干擾
  • 多路開關:把多個現場訊號分時地接通到A/D轉換器上轉換
  • 取樣保持器:對高速變化的訊號進行A/D轉換時,為了保持轉換精度,需要使用取樣保持器,週期性取樣連續訊號,並在A/D轉換期間保持不變

D/A轉換器

D/A轉換器(DAC)將微機處理後的數字量轉換為模擬量

D/A轉換原理

將數字量轉換為模擬量,先把每一位程式碼按其權值的大小轉換成相應的模擬分量,然後將各模擬分量相加,總和就是與數字量相應的模擬量。例如1101B=13
Vref:基準電壓,提供給轉換電路的穩定的電壓源,也稱參考電壓Vref

DAC0832的數字介面

image
DAC0832內部具有輸入暫存器和DAC暫存器兩級數字量緩衝暫存器
DI0~DI7是8為數字量輸入引腳
ILE~CS~WR1控制輸入暫存器鎖存訊號LE1
~XFERWR2:控制DAC暫存器的鎖存訊號LE2
三種工作方式

  • 直通方式:LE1和LE2一直為高,資料可以直接進入D/A轉換器
  • 單緩衝方式:LE1或LE2一直為高,只控制一級緩衝
  • 雙緩衝方式:不讓LE1和LE2一直為高,控制兩級暫存器

模擬輸出

DAC0832的模擬輸出有Iout1Iout2Rfb

  • Iout1:模擬輸出電流1,是邏輯電平為1的各位輸出電流之和,輸出全為1的時候值最大,輸出全為0的時候值最小
  • Iout2:模擬輸出電流2,是邏輯電平為0的各位輸出電流之和,Iout1 + Iout2 = 常量
  • Rfb:反饋電阻引出端,用作外接運算放大器的反饋電阻
  • VREF:參考電壓輸出端
  • Vcc:電源電壓
  • AGND:模擬地
  • DGND:數字地
    image

DAC晶片與主機的連線

DAC晶片作為一個輸出裝置介面電路,與主機相連時中間需要有鎖存器

mov al,buf	;取數字量
mov dx,portd	;PORTD為DAC埠地址
out dx,al		;輸出,進行D/A轉換

A/D轉換器

A/D轉換器將模擬量轉換為數字兩輸入微機處理

A/D轉換原理簡介

ADC主要有兩種實現技術,一種是計數器式,一種是逐次逼近式。
計數式的原理:就是從0開始加,產生數字量,然後用D/A轉換器,將數字量轉換成模擬量,和輸入進來的模擬量進行比較,看是否相同,不相同的話繼續累加,遇到相同的則說明此時暫存器裡面儲存的就是該模擬訊號要轉換的數字量
逐次逼近式:是從最大的數開始減,類似計數式

ADC0809的模擬輸入

image
ADC8089提供8通道的多路開關和定址邏輯

  • IN0~IN7:8個模擬電壓輸入端
  • ADDA、ADDB、ADDC:3個地址輸入線,經過譯碼器後選擇一個模擬輸入端進行A/D轉換

ADC0809的數字輸出

ADC0809內部對轉換後的數字量具有鎖存能力,數字量輸出端D0D7具有三態功能,只有在OE為高電平有效時,才將三態鎖存器的梭子兩從D0D7輸出
8為A/D轉換器,從輸入模擬量Vin轉換為數字模擬量N的公式:
image

ADC晶片和主機連線

ADC晶片是一個向主機輸出的裝置。
ADC開始轉換時需要一個啟動訊號。
ADC轉換結束時,ADC輸出一個轉換結束訊號,通知主機讀取結果,主機檢查判斷A/D轉換結束的方式主要有兩種一種是查詢方式、一種是中斷方式

  • 查詢方式:ADC開始轉換後,主機不斷查詢資料匯流排上的某一位(這一位是ADC在轉換結束後傳送到資料匯流排上的),發現結束訊號有效時,才讀取資料
  • 中斷方式:把結束訊號作為中斷請求訊號接到主機的中斷請求線上。ADC轉換結束後,主動向處理器申請中斷。處理器響應中斷後,在中斷服務程式中讀取資料。

ADC晶片的應用:中斷方式

image

;.data設定緩衝區
adtemp byte 0
;.code
...		;設定中斷向量表等工作
sti		;開中斷
mov dx,220h
out ad,al		;啟動A/D轉換
... ;其他工作

中斷服務程式

adint	proc		;中斷服務程式
		sti			;開中斷
		push ax		;保護暫存器
		push dx
		push ds
		mov ax,@data	設定資料段DS的段地址
		mov ds,ax
		mov dx,220h
		in al,dx	;讀取A/D轉換後的數字量
		mov adtemp,al	;送入緩衝區
		mov al, 20h	;給中斷控制器傳送EOI命令
		out 20h,al
		pop ds
		pop dx
		pop ax
		iret		;中斷返回
adint	endp

ADC晶片的應用:查詢方式

image

	;.data
counter	equ 8
buf		byte	counter dup(0)
	;.code
	mov bx, offset buf;資料緩衝區偏移地址
	mov cx, counter;檢測的資料個數
	mov dx,220h	;從IN0開始轉換
start1:	
	out dx,al	;啟動A/D轉換
	push dx
	mov dx, 238h	;迴圈查詢是否轉換結束
start2:
	in al, dx	;讀入狀態資訊
	test al, 80h	;D7=1轉換結束
	jz start2	;沒有結束繼續查詢
	pop dx		;轉換結束
	in al,dx	;讀取資料
	mov [bx],al	;存入快取區
	inc cx
	inc dx		;轉向下一個模擬通道進行檢測
loop start1
...	資料處理

相關文章