8253譯碼電路設計以及初始化編程講解

先驗知識回顧:知識點不清晰的時候可以查詢相關知識點。
https://blog.csdn.net/qq_42604176/article/details/105810973

需掌握的主要知識點

1、譯碼電路設計
2、初始化編程

例題1

在以 8086構成的最大方式系統中,有一片8254的端口地址分別爲301H、303H、305H和307H,給定的外部時鐘爲512kHz。 要求:、
(1)利用計數器0產生週期爲1ms的週期信號,請編寫初始化程序;利用這一計數器能產生的最低信號頻率爲_______, 這時的時常數CR。=________;
思路:
1、分析採用哪種方式
根據要求產生週期信號,採用方式2/3:分頻器/週期性方波輸出;
2、計算時常數CR0
CR0=輸出信號週期/外部時鐘週期=1ms/(1/512k)=512
3、瞭解該計數器的最大分頻次數,計算最大分頻次數
最大分頻次數是62256次,這樣可以獲取最低頻率:512k/62256=8.22Hz

MOV DX,307H;DX指向控制寄存器
MOV AL,0011 0110B;配置字:選擇通道0, CR/OL使用16位,方式3,2進制計數
OUT DX,AL;	字配置完成
MOV DX,301H;DX指向通道0
MOV AX,512;設置時常數
OUT DX,AL;
XCHG AL,AH;
OUT DX,AL;	配置完成

(2)利用計數器1和2產生如圖9. 17所示的週期信號,並編寫初始化程序;
產生信號
產生這種非方波的週期信號,使用方式2,但是在方式2下,低電平時間僅爲一個時鐘週期。因此,利用一個計數通道無法實現。現在採用計數器1和計數器2聯合,先利用計數器1產生週期爲1.5ms的週期信號,然後將輸出OUT1信號作爲計數器2的時鐘輸入CLK2。
對於計數器1,工作方式可以選擇方式2/3,一般選擇方式3,這樣可以使產生的信號近似對稱,其時常數CR1=1.5ms/(1/512k)=768,採用16位的時常數表示。
對於計數器2,工作方式只能選擇方式2,其時間常數CR2=(3s+1.5ms)/1.5ms=2001,所以也需要16位時常數表示。

;配置計數器1
MOV DX,307H;DX指向控制寄存器
MOV AL,0111 0110B;配置字:選擇通道1, CR/OL使用16位,方式3,2進制計數
OUT DX,AL;	字配置完成
MOV DX,303H;DX指向通道1
MOV AX,768;設置時常數
OUT DX,AL;
XCHG AL,AH;
OUT DX,AL;	配置完成

;配置計數器2
MOV DX,307H;DX指向控制寄存器
MOV AL,1011 0100B;配置字:選擇通道2, CR/OL使用16位,方式2,2進制計數
OUT DX,AL;	字配置完成
MOV DX,305H;DX指向通道2
MOV AX,2001;設置時常數
OUT DX,AL;
XCHG AL,AH;
OUT DX,AL;	配置完成

(3)畫出8253的端口譯碼電路(地址線只使用Ao~Ag)及其連接圖。
譯碼電路地址要求:

A2A1 ADDR(二進制) ADDR(16進制)
00 11,0000,0001 301H
01 11,0000,0011 303H
10 11,0000,0101 305H
11 11,0000,0111 307H

注意由於是奇地址,數據線和A0所做出的的更改:
電路

例題2

設8253的端口地址爲260H ~ 263H,外部時鐘信號爲1MHz,要求產生如圖所示的週期波形,畫出8253的連接圖,並編寫初始化程序段。
題目
分析:
產生的信號低電平時間比高電平寬的多,所以不能直接採用方式2實現。如果可以增加外部器件,則可以在上一題的基礎上,將OUT端信號非門取反。
1、由於要採用方式3,產生週期:1s+12ms=1012ms的方波信號,題目給定的外部時鐘週期爲1MHz,這時候需要的分頻係數(時常數)爲:1012ms/1us=1012000,顯然這個超過了65536(2^16),所以通過一個計數通道無法實現,所以採用計數器0和計數器1聯合產生。CR0=1000,CR1=1012,這樣OUT0週期爲1ms。
2、利用計數器2的方式1(可編程單穩脈衝)實現單脈衝形成一次作爲要求產生信號的低電平,時常數CR2=1s/1ms-1=1000-1=999,計數器0 的OUT0信號作爲計數器2的時鐘輸入信號,OUT1作爲計數器2的硬件觸發信號,確保週期爲1012ms。這裏注意,計數器的方式1的時常數確定的是輸出低電平的時長,也就是所謂的單脈衝寬度.

MOV DX,263H;寫計數器0方式控制字
MOV AL, 0011 0110B;計數器016位,方式三,二進制
OUT DX,AL;
MOV DX,260H;寫計數器0的時常數
MOV AX,1000;
OUT DX,AL;
XCHG AL,AH;
OUT DX,AL;
MOV DX,263H;寫計數器1方式控制字
MOV AL,0111 0110B;計數器116位,方式三,二進制
OUT DX,AL;
MOV DX,261H;寫計數器1時常數
MOV AX,1012;
OUT DX,AL;
XCHG AL,AH;
OUT DX,AL;
MOV DX,263H;寫計數器2方式控制字
MOV AL,1011 0010B;計數器216位,方式1,二進制
OUT DX,AL;
MOV DX,262H;寫計數器2時常數
MOV AX,999;
OUT DX,AL;
XCHG AL,AH;
OUT DX,AL;

連接圖
OUT0:輸出的是週期爲1ms的方波
OUT1:輸出的是週期爲1012ms的方波,也就是說每1012ms產生一個上升沿,這確定了計數器2的方式1一個週期寬度
OUT2:輸出的是週期爲1012ms,低電平時長爲1000ms的脈衝。
我覺得最需要關注的兩個連接點就是:OUT0->CLK1,OUT1->GATE2

例題3

在8088最小系統中,8253 的端口地址爲284H~287H.系統提供的時鐘爲IMHz,要求在OUT0輸出週期爲20微秒的方波,在OUTI輸出週期爲200微秒,其中每週期爲負的時間是180微秒的信號。請編寫8253的初始化程序。
分析:這一題和上一題的思路很相似,主要的就是不需要聯合。
1
通道0產生方波,可以使用方式3產生。
時常數CR0=輸出信號週期/外部時鐘週期=20us/(1/1M)=20;
通道2產生方波,可以使用方式3產生。
時常數CR2=輸出信號週期/外部時鐘週期=200us/(1/1M)=200;
通道1,採用方式1,時常數,CR1=180/20-1=8;

;配置計數器0
MOV DX,287H;DX指向控制寄存器
MOV AL,0001 0110B;配置字:選擇通道0, CR/OL使用低8位,方式3,2進制計數
OUT DX,AL;	字配置完成
MOV DX,284H;DX指向通道0
MOV AL,20;設置時常數
OUT DX,AL;配置完成
MOV DX,287H;寫計數器2控制方式字
MOV AL,1001 0110B;
OUT DX,AL;
MOV DX,286H;寫計數器2時常數
MOV AL,200;
OUT DX,AL;
MOV DX,287H;
MOV AL,0101 0010B;
OUT DX,AL;
MOV DX,285H;
MOV AL,8;
OUT DX,AL;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章