欧美午夜欧美,台湾成人av,久久av一区,最近看过的日韩成人

電子開(kāi)發(fā)網(wǎng)

電子開(kāi)發(fā)網(wǎng)電子設(shè)計(jì) | 電子開(kāi)發(fā)網(wǎng)Rss 2.0 會(huì)員中心 會(huì)員注冊(cè)
搜索: 您現(xiàn)在的位置: 電子開(kāi)發(fā)網(wǎng) >> 電子開(kāi)發(fā) >> 單片機(jī) >> 正文

8051單片機(jī)并行I/0口讀寫(xiě)

作者:佚名    文章來(lái)源:本站原創(chuàng)    點(diǎn)擊數(shù):    更新時(shí)間:2011-8-10

前兩天看資料,見(jiàn)到關(guān)于I/O口作為輸入時(shí),要先輸出1的說(shuō)明,有點(diǎn)迷惑。今天特意查了一些資料,費(fèi)了半天勁,雖然還沒(méi)有完全弄明白,但也算也所收獲,下面就列出來(lái),以便將來(lái)查詢并進(jìn)一步補(bǔ)充。

   

                            ‍單片機(jī)鎖存器電路原理圖


1、作為I/O口使用時(shí),輸入和輸出原理。

I/O口使用時(shí),在控制信號(hào)的作用下,與門(mén)關(guān)閉,V1截止,同時(shí)多路開(kāi)關(guān)打向下邊,與鎖存器的反向輸出端Q^相連。

輸出數(shù)據(jù)時(shí),“寫(xiě)鎖存器”端發(fā)出脈沖,將“內(nèi)部總線”上的數(shù)據(jù)寫(xiě)入輸出鎖存器,由Q^端控制V2,從而在引腳上反應(yīng)出相應(yīng)的狀態(tài)。此種應(yīng)用時(shí)P0端口各引腳應(yīng)外接上拉電阻。

輸入數(shù)據(jù)時(shí),分為讀引腳和讀端口兩種方式。讀端口的位置就是上圖中的“讀鎖存器”,而讀引腳則是上圖中的“讀引腳”。至于何時(shí)讀端口,何時(shí)讀引腳則是根據(jù)不同的指令由硬件自動(dòng)完成的,這不需要我們操心。

(附:讀端口的指令:讀端口的指令為端口內(nèi)容取反這樣的-修改-寫(xiě)指令。

資料稱(chēng):這樣的指令才有Read-Modify-Write功效
ANL (logical AND, e.G., ANL P1,A)
ORL (logical OR, e.g., ORL P2,A)
XRL (logical EX-OR, e.g., XRL P3,A)
JBC (jump if bit = 1 and clear bit, e.g., JBC P1.1, LABEL)
CPL (complement bit, e.g., CPL P3.0)
INC (increment, e.g., INC P2)
DEC (decrement, e.g., DEC P2)
DJNZ (decrement and jump if not zero, e.g., DJNZ P3, LABEL)
MOV PX.Y,C(move carry bit to bit Y of
PORT X)
CLR PX.Y(clear bit Y of
PORT X)
SETB PX.Y(set bit Y of
PORT X)

引腳的指令:如下所示,讀之前應(yīng)先將端口置1,即先輸出1,修改鎖存器的內(nèi)容為1

MOV A, P1
MOV 20H, P1
MOV R0, P1
MOV @R0, P1

2、為什么讀之前要先寫(xiě)1

從上圖可知,如果不對(duì)端口置1,端口鎖存器原來(lái)的狀態(tài)有可能為0Q端為0Q^1,加到場(chǎng)效應(yīng)管柵極的信號(hào)為1,該場(chǎng)效應(yīng)管就導(dǎo)通對(duì)地呈現(xiàn)低阻抗,此時(shí)即使引腳上輸入的信號(hào)為1也會(huì)因端口的低阻抗而使信號(hào)拉低,使得外加的1信號(hào)讀入后不一定是1,若先執(zhí)行置1操作則可以使場(chǎng)效應(yīng)管截止,引腳信號(hào)直接加到三態(tài)緩沖器中,實(shí)現(xiàn)正確的讀入。

3、實(shí)際應(yīng)用

P0P1P2P3I/0口使用時(shí),如果要從外部讀取數(shù)據(jù),讀取之前應(yīng)先將端口置1。因初始化時(shí),四個(gè)I/O均被初始化為0XFF,所以若端口在整個(gè)程序過(guò)程中無(wú)輸出時(shí),即輸出鎖存器的狀態(tài)始終為1,則讀數(shù)據(jù)時(shí)可不用手動(dòng)置1。(附:參考引腳內(nèi)部結(jié)構(gòu)圖可知,縱使鎖存器D口數(shù)據(jù)在變(內(nèi)部數(shù)據(jù)線),只要時(shí)鐘觸發(fā)端clk沒(méi)有觸發(fā)信號(hào),鎖存器中的內(nèi)容永遠(yuǎn)都不會(huì)改變,也就是說(shuō),不管外部引腳信號(hào)如何變,也不管執(zhí)行過(guò)多少次讀引腳操作,端口鎖存器中的內(nèi)容是不會(huì)發(fā)生變化的。那么,端口內(nèi)容何時(shí)變化?答曰:只要執(zhí)行過(guò)一次輸出,端口內(nèi)容必為輸出值,因?yàn)槎丝诰褪禽敵龅臄?shù)據(jù)鎖存器。)

而當(dāng)端口實(shí)際應(yīng)用時(shí)要不停地同外部數(shù)據(jù)交換時(shí),即又有輸出又有讀入時(shí),如單片機(jī)與存儲(chǔ)器<?xml:namespace prefix = st1 />24C16通過(guò)I2C總線相連,SCL總是由單片機(jī)輸出可不用考慮,而SDA則可通過(guò)單片機(jī)向外發(fā)數(shù)據(jù),又可以從外部讀數(shù)據(jù),假若之前發(fā)送的最后一位數(shù)據(jù)為0時(shí),此時(shí)若再讀數(shù)據(jù),因?yàn)殒i存器的狀態(tài)仍為0,則之后立即讀數(shù)據(jù)時(shí)就有可能出錯(cuò)。所以實(shí)際操作時(shí),在發(fā)送數(shù)據(jù)代碼之后,總會(huì)有一個(gè)單片機(jī)主動(dòng)將SDA拉高的指令,之后再讀數(shù)據(jù)時(shí)才不會(huì)出問(wèn)題。(本人淺見(jiàn),不一定正確)

而當(dāng)P0P2口作總線使用與外部并口連接時(shí),應(yīng)該就不會(huì)有上面的問(wèn)題,因?yàn)閺纳蠄D可各,當(dāng)作總線使用時(shí),在控制信號(hào)的作用下,與門(mén)導(dǎo)通,同時(shí)多路開(kāi)關(guān)通過(guò)反向器與“地址/數(shù)據(jù)總線”連接,此時(shí)V1V2的驅(qū)動(dòng)電路形成反相,形成推拉式電路。在這種情況下輸出時(shí),可直接驅(qū)動(dòng)電路,不需要接上拉電阻(因?yàn)?/SPAN>V1導(dǎo)通)。而輸入時(shí),直接讀引腳即可,不需置1。(因?yàn)檩斎霑r(shí),地址/數(shù)據(jù)線上沒(méi)有數(shù)據(jù),V2應(yīng)該截止(我認(rèn)為的))

----------------------------------

P1_0=!P1_0在KEIL中編譯后的反匯編指令為CPL 1.0;從上面所述可知為讀端口指令,所以可以在C中直接使用,如用作看門(mén)狗的清除脈沖和LED燈的閃爍等。

讀端口指令似乎是要對(duì)內(nèi)部的端口寄存器(P0~P4)進(jìn)行改寫(xiě)時(shí)才進(jìn)行的,所有說(shuō)要先讀端口鎖存器狀態(tài),改寫(xiě)完后同時(shí)有鎖存器輸出

而讀引腳指令沒(méi)有改寫(xiě)寄存器

Tags:單片機(jī)并行I0口讀寫(xiě),單片機(jī),端口  
責(zé)任編輯:admin
請(qǐng)文明參與討論,禁止漫罵攻擊,不要惡意評(píng)論、違禁詞語(yǔ)。 昵稱(chēng):
1分 2分 3分 4分 5分

還可以輸入 200 個(gè)字
[ 查看全部 ] 網(wǎng)友評(píng)論
關(guān)于我們 - 聯(lián)系我們 - 廣告服務(wù) - 友情鏈接 - 網(wǎng)站地圖 - 版權(quán)聲明 - 在線幫助 - 文章列表
返回頂部
刷新頁(yè)面
下到頁(yè)底
晶體管查詢
主站蜘蛛池模板: 泽普县| 启东市| 陇西县| 高州市| 湘阴县| 安阳县| 中西区| 黔南| 湘阴县| 贵州省| 甘泉县| 张北县| 峡江县| 全南县| 海阳市| 台北市| 屯留县| 华亭县| 高邮市| 开江县| 平顶山市| 金山区| 开远市| 米泉市| 宕昌县| 阳城县| 邵东县| 木里| 泸西县| 古浪县| 紫阳县| 盐边县| 蒲江县| 垦利县| 福建省| 基隆市| 石门县| 临西县| 祁东县| 江口县| 忻州市|