51單片機教程:單片機并行口結(jié)構(gòu)
看一下圖1,它是8031單片機管腳的說明,在P1.0旁邊有P1.1,P1.2….P1.7,它們是否都能讓燈亮呢?除了以P1開頭的外,還有以P0,P2,P3開頭的,數(shù)一下,一共是32個管腳,前面我們以學(xué)過7個管腳,加上這32個這39個了。它們都以P字開頭,只是后面的數(shù)字不一樣,它們是否有什么聯(lián)系呢?它們能不能都讓燈亮呢?在我們的實驗板上,除了P10之外,還有P11 -> P17都與LED相連,下面讓我們來做一個實驗,程序如下:
本文引用地址:http://www.ex-cimer.com/article/171359.htmMAIN: MOV P1,#0FFH
LCALL DELAY
MOV P1,#00H
LCALL DELAY
LJMP MAIN
DELAY:MOV R7,#250
D1: MOV R6,#250
D2: DJNZ R6,D2
DJNZ R7,D1
RET
END
將這段程序轉(zhuǎn)為機器碼,用編程器寫入單片機中,結(jié)果如何?通電以后我們能看到8只LED全部在閃動。因此,P10->P17是全部能點亮燈的。事實上,凡以P開頭的這32個管腳都是能點亮燈的,也就是說:這32個管腳都能作為輸出使用,如果不用來點亮LED,能用來控制繼電器,能用來控制其它的執(zhí)行機構(gòu)。
程序分析:這段程序和前面做過的程序比較,只有兩處不一樣:第一句:原來是SETB P1.0,現(xiàn)在改為MOV P1,#0FFH,第三句:原來是CLR P1.0,現(xiàn)在改為MOV P1.0,#00H。從中能看出,P1是P1.0->P1.7的全體的代表,一個P1就表示了所有的這八個管腳了。當然用的指令也不一樣了,是用MOV指令。為什么用這條指令?看圖2,我們把P1作為一個整體,就把它當作是一個存儲器的單元,對一個單元送進一個數(shù)能用MOV指令。
二、第四個實驗
除了能作為輸出外,這32個管腳還能做什么呢?下面再來做一個單片機實驗,源程序如下:
MAIN: MOV P3,#0FFH
LOOP: MOV A,P3
MOV P1,A
LJMP LOOP
先看一下這個實驗的結(jié)果:所有燈全部不亮,然后我按下一個按鈕,第(1)個燈亮了,再按下另一個按鈕,第(2)個燈亮了,松開按鈕燈就滅了。從這個實驗現(xiàn)象結(jié)合電路來分析一下程序。
從硬件電路的連線能看出,有四個按鈕被接入到P3口的P32,P33,P34,P35。第一條指令的用途我們能猜到:使P3口全部為高電平。第二條指令是MOV A,P3,其中 MOV已經(jīng)知道,是送數(shù)的意思,這條指令的意思就是將P3口的數(shù)送到A中去,我們能把A當成是一個中間單元(看圖3),第三句話是將A中的數(shù)又送到P1口去,第四句話是循環(huán),就是持續(xù)地重復(fù)這個過程,這我們已見過。當我們按下第一個按鈕時,第(3)只燈亮了,所以P12口應(yīng)當輸出是低電平,為什么P12口會輸出低電平呢?我們看一下有什么被送到了P1口,只有從P3口進來的數(shù)送到A,又被送到了P1口,所以,肯定是P3口進來的數(shù)使得P12位輸出電平的。P3口的P32位的按鈕被按下,使得P32位的電平為低,通過程序,又使P12口輸出低電平,所以P3口起來了一個輸入的作用。驗證:按第二、三、四個按鈕,同時按下2個、3個、4個按鈕都能得到同樣的結(jié)論,所以P3口確實起到了輸入作用,這樣,我們能看到,以P字開頭的管腳,不僅能用作輸出,還能用作輸入,其它的管腳是否能呢?是的,都能。這32個管腳就稱之為并行口,下面我們就對并行口的結(jié)構(gòu)作一個分析,看一下它是怎樣實現(xiàn)輸入和輸出的。
并行口結(jié)構(gòu)分析:
1、輸出結(jié)構(gòu)
并行口結(jié)構(gòu)圖>
評論