8255 是用來擴充介面的晶元。
用上一片 8255,就可以為系統增加 3 個 8 位的 io 介面。
在微控制器的教材上,總是使用「三匯流排」的方式來連線 8255。
在這樣的條件下,輸入/輸出資料的速度確實是比較快,一般用 2 個機器週期,就可以讀/寫一次。
但是,採用這種形式,電路則是相當麻煩的,必須加上乙個鎖存器晶元(74ls373);
並且,對於微控制器的引腳,占用的也太多了,如 p0、p2,還要占用 p3.6、p3.7。
呵呵,占用了微控制器自身 2 個半的介面,僅僅換來 3 個介面,有點得不償失。
如果搞清楚了 8255 的讀寫時序,使用微控制器的介面引線「直接控制」 8255,效果則要好的多。
下圖就是乙個「直接控制」 8255 的電路。
在圖中可以看出,僅僅使用了 p0 和 p2 的四個引腳,就近,和 8255 進行連線。
不但節省了引腳數目,而且非常靈活。
在設計實際應用的電路板時,可以隨意的就近使用引腳,而不必拘泥於 p0、p3.6、p3.7 等引腳。
當把 8255 pa 輸入的開關量,輸出到 pc 口,使用如下的程式即可。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
組合語言:
sbit rd_8255 = p2^0 ;設定相關引腳
sbit wr_8255 = p2^1 ;
sbit a0_8255 = p2^2 ;
sbit a1_8255 = p2^3 ;
org 0000h
mov p0, #92h ;pa輸入, pb pc輸出
clr wr_8255 ;寫入控制暫存器
setb wr_8255
loop:
mov p0, #255 ;輸出1
clr a1_8255 ;選定pa
clr a0_8255
clr rd_8255 ;讀
nop ;稍延時,以保證寬度
mov a, p0 ;讀出
setb rd_8255
setb a1_8255 ;選定pc
clr a0_8255
mov p0, a ;寫
clr wr_8255 ;寫入
setb wr_8255
sjmp loop
endc 語言:
#include
sbit rd_8255 = p2^0;
sbit wr_8255 = p2^1;
sbit a0_8255 = p2^2;
sbit a1_8255 = p2^3;
main()
char aa;
p0 = 0x92; //控制字: pa輸入, pb pc輸出
a1_8255 = 1; a0_8255 = 1; //選中控制暫存器
wr_8255 = 0; wr_8255 = 1; //寫
while(1) {
p0 = 0xff; //先輸出1
a1_8255 = 0; a0_8255 = 0; //選中pa
rd_8255 = 0; aa = p0; rd_8255 = 1; //讀
p0 = aa; //這是剛才讀入的
a1_8255 = 1; a0_8255 = 0; //選中pc
wr_8255 = 0; wr_8255 = 1; //寫
如果需要用 pb 輸出資料,如下即可:
p0 = 0xb0; //輸出資料
a1_8255 = 0; a0_8255 = 1; //選中pb
wr_8255 = 0; wr_8255 = 1; //寫
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
因為沒有使用「三匯流排」方式,所以,也就沒有介面位址的問題。
那麼,一般的教材中所說的片外位址,就沒有用了。
下面這些 c 語言中的標頭檔案、巨集定義,也用不上了:
#include
#define pa xbyte[0xe000] /*pa口位址*/
#define pb xbyte[0xe001] /*pb口位址*/
#define pc xbyte[0xe002] /*pc口位址*/
#define con xbyte[0xe003] /*控制字位址*/
呵呵,好多知識,統統都沒有用了,罪過罪過...
按照這種方式,讀寫 io 口的速度,確實是降低了一些,但是,對於速度要求不太敏感的場合,還是非常適用的。
因為節省了乙個鎖存器晶元,pcb 板的面積,也可以縮小,這就直接使硬體成本得到降低。
有時,乙個產品,是否能夠占領市場,成本才是關鍵,讀寫速度慢上幾個微秒,對效能的影響極其微小。
前些天,做而論道還寫過乙個關於 8155 的博文,可見:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Pycharm直接連線Github
pycharm可以說是使用python語言開發者的必備利器。高校學生有學生郵箱就可以免費使用,著實省了我不少銀兩。附個license圖 git是乙個開源的分布式版本控制系統,用以有效 高速的處理從很小到非常大的專案版本管理。託管 版本控制神馬的,還是github和git最搭哦。現在pycharm已經...
PDA上直接連線上資料庫!
sqlconnection con new sqlconnection server 192.168.0.6 uid sa pwd sa database pubs sqldataadapter da new sqldataadapter select from employee con datas...
c mysql 埠號 C 直接連線MySql
1 引入mysql.data.dll 首先在建立工程後要引入mysql.data.dll檔案。在建立的專案上右鍵找到nuget程式包。qq截圖20200318223656.png qq截圖20200318223723.png sdk引入之後下面我們就可以進行對mysql的操作啦。2 與資料庫建立連線...