核心
對于一個多功能可編程接口芯片,我們要想使用它,必須
- 先確定需求,要用什么芯片去干什么
- 設置芯片的工作方式
- 然后再讓芯片工作
至于設置的方式,當然是軟件編程。
同時重點注意,例如8255A,它一次只能寫8位數據,像多干活,就多寫幾次就好了,反正速度快。需要理解不是一次性完成就好。
與CPU控制接口的方式結合理解
- 無條件
- 查詢
- 中斷
- DMA
前提
CPU能夠對接口進行讀寫控制,通過IO譯碼能夠選中端口地址,進行數據讀寫。
控制字的編碼含義
我們將8位控制字編碼拆開看!
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
---|---|---|---|---|---|---|---|
1 | x | x | x | x | x | x | x |
0 | x | x | x | x | x | x | x |
首先看最高位D7
- D7 = 1:方式選擇控制
- D7 = 0:C端口置0置1控制
方式選擇控制
對于方式選擇控制,我們拆開看
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | ||
---|---|---|---|---|---|---|---|---|---|
1 |
- 最高位是1
- D6~D3:A組控制
- D2~D0:B組控制
A組控制
D6 | D5 | D4 | D3 |
---|
- D6D5:A組的方式選擇(很好記,與二進制的十進制值一樣)
- 00:方式0
- 01:方式1
- 10、11:方式2
- D4:A端口輸入輸出控制
- D3:C端口高4位輸入輸出控制
B組控制
D2 | D1 | D0 |
---|
- D2:B組方式選擇
- 0:方式0
- 1:方式1
- D1:B端口輸入輸出控制
- D0:C端口低四位輸輸出控制
一些通用法則
- A組和B組控制是相互獨立的
- 端口的輸入,就是1(input的i就像1);端口輸出,就是0(output)
- 方式的選擇,二進制的十進制值與方式對應
- A、B端口只能作為輸入或輸出,用于傳送外設數據
- C端口不同方式下的含義不同
- 可以設置
D7 = 0
來設置C寄存器的每一位的值 - 方式0下是作為獨立的輸入輸出的
- 其他方式下,作為A組或B組的補充信息位,用于表示A端口或B端口傳送狀態,空閑位仍可以獨立使用
- A組與B組的工作方式可以不一樣,因此C端口的高4位和低4位的作用也可以不一樣,相互獨立
- 可以設置
- 如果沒有用到,就寫0,當然這只是習慣。
總之,二進制編碼分開看待,相互獨立,不同情況下含義不同,一樣分開看,就什么都能看清楚了。
C端口置0置1控制
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | |||
---|---|---|---|---|---|---|---|---|---|---|
0 | x | x | x |
- x可以直接都寫0就好
- D3D2D1:3位編碼對應C端口的8個二進制位,用于選中某一位
- D0:0的時候將選中的位置0,1的時候置1
這個控制字的作用,就是控制C端口某一位的值的,如果有單獨控制的需要,就設置就好了。
- 可能是設置空閑位
- 也可能設置狀態位
對待每種工作方式的思考點
- 接口:如何設置,原理和功能
- CPU :如何控制,控制方式,匯編指令
- 外設:能干啥(數據肯定行,但是響應信號之類的呢?它能不能干,能不能用?)
其實也就這些了,還是內3個器件,4個箭頭的事兒。
接下來,將會具體闡述每個工作方式下,二進制編碼的含義。
見下一篇。