一般都是讓P1.0這個(gè)管腳使燈亮,我們能設(shè)想:既然P1.0能讓燈亮,那么其它的管腳可不能呢?看一下圖1,它是8031單片機(jī)管腳的說(shuō)明,在P1.0旁邊有P1.1,P1.2.P1.7,它們是否都能讓燈亮呢?除了以P1開(kāi)頭的外,還有以P0,P2,P3開(kāi)頭的,數(shù)一下,一共是32個(gè)管腳,前
MAIN:?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)為機(jī)器碼,用編程
器寫(xiě)入單片機(jī)中,結(jié)果如何?通電以后我們能看到8只LED全部在閃動(dòng)。因此,P10P17是全部能點(diǎn)亮燈的。事實(shí)上,凡以P開(kāi)頭的這32個(gè)管腳都是能點(diǎn)亮燈的,也就是說(shuō):這32個(gè)管腳都能作為輸出使用,如果不用來(lái)點(diǎn)亮LED,能用來(lái)控制繼電器,能用來(lái)控制其它的執(zhí)行機(jī)構(gòu)。??
程序分析:這段程序和前面做過(guò)的程序比較,只有兩處不一樣:第一句:原來(lái)是SETB?P1.0,現(xiàn)在改為MOV?P1,#0FFH,第三句:原來(lái)是CLR?P1.0,現(xiàn)在改為MOV?P1.0,#00H。從中能看出,P1是P1.0P1.7的全體的代表,一個(gè)P1就表示了所有的這八個(gè)管腳了。當(dāng)然用的指令也不一樣了,是用MOV指令。為什么用這條指令?看圖2,我們把P1作為一個(gè)整體,就把它當(dāng)作是一個(gè)存儲(chǔ)器的單元,對(duì)一個(gè)單元送進(jìn)一個(gè)數(shù)能用MOV指令。?