單片機入門 第五課(轉)


單片機入門 第五課:單片機的內外部結構分析(四)

一、第三個實驗

上兩次我們做過兩個實驗,都是讓P1.0這個引腳使燈亮,我們可以設想:既然P1.0可以讓燈亮,那么其它的引腳可不可以呢?看一下圖1,它是8031單片機引腳的說明,在P1.0旁邊有P1.1P1.2….P1.7,它們是否都可以讓燈亮呢?除了以P1開頭的外,還有以P0P2P3開頭的,數一下,一共是32個引腳,前面我們以學過7個引腳,加上這32個這39個了。它們都以P字開頭,只是后面的數字不一樣,它們是否有什么聯系呢?它們能不能都讓燈亮呢?在我們的實驗板上,除了P10之外,還有P11~P17都與LED相連,下面讓我們來做一個實驗,程序如下:

MAINMOV P1#0FFH

LCALL DELAY

MOV P1#00H

LCALL DELAY

LJMP MAIN

DELAYMOV R7#250

D1MOV R6#250

D2DJNZ R6D2

DJNZ R7D1

RET

END

將這段程序轉為機器碼,用編程器寫入芯片中,結果如何?通電以后我們可以看到8LED全部在閃動。因此,P10��P17是全部可以點亮燈的。事實上,凡以P開頭的這32個引腳都是可以點亮燈的,也就是說:這32個引腳都可以作為輸出使用,如果不用來點亮LED,可以用來控制繼電器,可以用來控制其它的執行機構。

程序分析:這段程序和前面做過的程序比較,只有兩處不一樣:第一句:原來是SETB P1.0,現在改為MOV P1#0FFH,第三句:原來是CLR P1.0,現在改為MOV P1.0#00H。從中可以看出,P1P1.0��P1.7的全體的代表,一個P1就表示了所有的這八個管腳了。當然用的指令也不一樣了,是用MOV指令。為什么用這條指令?看圖2,我們把P1作為一個整體,就把它當作是一個存儲器的單元,對一個單元送進一個數可以用MOV指令。

二、第四個實驗

除了可以作為輸出外,這32個引腳還可以做什么呢?下面再來做一個實驗,程序如下:

MAINMOV P3#0FFH

LOOPMOV AP3

MOV P1A

LJMP LOOP

先看一下實驗的結果:所有燈全部不亮,然后我按下一個按鈕,第()個燈亮了,再按下另一個按鈕,第()個燈亮了,松開按鈕燈就滅了。從這個實驗現象結合電路來分析一下程序。

從硬件電路的連線可以看出,有四個按鈕被接入到P3口的P32P33P34P35。第一條指令的用途我們可以猜到:使P3口全部為高電平。第二條指令是MOV AP3,其中 MOV已經見,是送數的意思,這條指令的意思就是將P3口的數送到A中去,我們可以把A當成是一個中間單元(看圖3),第三句話是將A中的數又送到P1口去,第四句話是循環,就是不斷地重復這個過程,這我們已見過。當我們按下第一個按鈕時,第(3)只燈亮了,所以P12口應當輸出是低電平,為什么P12口會輸出低電平呢?我們看一下有什么被送到了P1口,只有從P3口進來的數送到A,又被送到了P1口,所以,肯定是P3口進來的數使得P12位輸出電平的。P3口的P32位的按鈕被按下,使得P32位的電平為低,通過程序,又使P12口輸出低電平,所以P3口起來了一個輸入的作用。驗證:按第二、三、四個按鈕,同時按下2個、3個、4個按鈕都可以得到同樣的結論,所以P3口確實起到了輸入作用,這樣,我們可以看到,以P字開頭的管腳,不僅可以用作輸出,還可以用作輸入,其它的管腳是否可以呢?是的,都可以。這32個引腳就稱之為並行口,下面我們就對並行口的結構作一個分析,看一下它是怎樣實現輸入和輸出的。

  1. 並行口結構分析:

1、輸出結構

先看P1口的一位的結構示意圖(只畫出了輸出部份):從圖中可以看出,開關的打開和合上代表了引腳輸出的高和低,如果開關合上了,則引腳輸出就是低,如果開關打開了,則輸出高電平,這個開關是由一根線來控制的,這根數據總線是出自於CPU,讓我們回想一下,數據總線是一根大家公用的線,很多的器件和它連在一起,在不同的時候,不同的器件當然需要不同的信號,如某一時刻我們讓這個引腳輸出高電平,並要求保持若干時間,在這段時間里,計算機當然在忙個不停,在與其它器件進行聯絡,這根控制線上的電平未必能保持原來的值不變,輸出就會發生變化了。怎么解決這個問題呢?我們在存儲器一節中學過,存儲器中是可以存放電荷的,我們不妨也加一個小的存儲器的單元,並在它的前面加一個開關,要讓這一位輸出時,就把開關打開,信號就進入存儲器的單元,然后馬上關閉開關,這樣這一位的狀態就被保存下來,直到下一次命令讓它把開關再打開為止。這樣就能使這一位的狀態與別的器件無關了,這么一個小單元,我們給它一個很形象的名字,稱之為“鎖存器”。

2、輸入結構

這是並行口的一位的輸出結構示意圖,再看,除了輸出之外,還有兩根線,一根從外部引腳接入,另一根從鎖存器的輸出接出,分別標明讀引腳和讀鎖存器。這兩根線是用於從外部接收信號的,為什么要兩根呢?原來,在51單片機中輸入有兩種方式,分別稱為‘讀引腳’和‘讀鎖存器’,第一種方式是將引腳作為輸入,那是真正地從外部引腳讀進輸入的值,第二種方式是該引腳處於輸出狀態時,有時需要改變這一位的狀態,則並不需要真正地讀引腳狀態,而只是讀入鎖存器的狀態,然后作某種變換后再輸出。

請注意輸入結構圖,如果將這一根引線作為輸入口使用,我們並不能保證在任何時刻都能得到正確的結果(為什么?)參考圖2輸入示意圖。接在外部的開關如果打開,則應當是輸入1,而如果閉合開關,則輸入0,但是,如果單片機內部的開關是閉合的,那么不管外部的開關是開還是閉,單片機接受到的數據都是0。可見,要讓這一端口作為輸入使用,要先做一個‘准備工作’,就是先讓內部的開關斷開,也就是讓端口輸出‘1’才行。正因為要先做這么一個准備工作,所以我們稱之為“准雙向I/O口”。

以上是P1口的一位的結構,P1口其它各位的結構與之相同,而其它三個口:P0P2P3則除入作為輸入輸出口之外還有其它用途,所以結構要稍復雜一些,但其用於輸入、輸出的結構是相同的。看圖()。對我們來說,這些附加的功能不必由我們來控制,所以我們就不去關心它了。


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
  © 2014-2022 ITdaan.com 联系我们: