單片機(jī)入門實(shí)例20150302_第1頁(yè)
單片機(jī)入門實(shí)例20150302_第2頁(yè)
單片機(jī)入門實(shí)例20150302_第3頁(yè)
單片機(jī)入門實(shí)例20150302_第4頁(yè)
單片機(jī)入門實(shí)例20150302_第5頁(yè)
已閱讀5頁(yè),還剩19頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、單片機(jī)入門實(shí)例李素敏2015.3 實(shí)例1: 點(diǎn)亮一個(gè)發(fā)光管P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78RST/VPD9RXD P3.010TXD P3.111INT0 P3.212INT1 P3.313T0 P3.414T1 P3.515WR P3.616RD P3.717XTAL218XTAL119VSS20P2.021P2.122P2.223P2.324P2.425P2.526P2.627P2.728PSEN29ALE/PROG30EA/VPP31P0.732P0.633P0.534P0.435P0.336P0.237P0.138P0.039VCC408

2、031 8051 8751一、單片機(jī)的外部結(jié)構(gòu)最基本的必要連線v1、 電源:電源:?jiǎn)纹瑱C(jī)使用的是單片機(jī)使用的是5V電源,其中正極接電源,其中正極接40引腳,負(fù)極(地)接引腳,負(fù)極(地)接20引腳。引腳。 v2、振蒎電路:、振蒎電路:?jiǎn)纹瑱C(jī)是一種時(shí)序電路,必須提供單片機(jī)是一種時(shí)序電路,必須提供脈沖信號(hào)才能正常工作,在單片機(jī)內(nèi)部已集成了振脈沖信號(hào)才能正常工作,在單片機(jī)內(nèi)部已集成了振蕩器,使用晶體振蕩器,接蕩器,使用晶體振蕩器,接18、19腳。只要買來(lái)晶腳。只要買來(lái)晶振,電容,連上就可以了,按圖振,電容,連上就可以了,按圖1接上即可。接上即可。v 3、復(fù)位引腳:、復(fù)位引腳:按圖按圖1中畫(huà)法連好,至于

3、復(fù)位是何含中畫(huà)法連好,至于復(fù)位是何含義及為何需要復(fù)要復(fù)位,在單片機(jī)功能中介紹。義及為何需要復(fù)要復(fù)位,在單片機(jī)功能中介紹。v 4、 EA引腳:引腳:EA引腳接到正電源端。引腳接到正電源端。 至此,一個(gè)單片機(jī)就接好,通上電,單片機(jī)至此,一個(gè)單片機(jī)就接好,通上電,單片機(jī)就開(kāi)始工作了。就開(kāi)始工作了。發(fā)光管(圖1)R1二、 任務(wù)分析v我們的第一個(gè)任務(wù)是要用單片機(jī)點(diǎn)亮一只發(fā)光二極管LED,顯然,這個(gè)LED必須要和單片機(jī)的某個(gè)引腳相連,否則單片機(jī)就沒(méi)法控制它了,那么和哪個(gè)引腳相連呢?v單片機(jī)上除了剛才用掉的單片機(jī)上除了剛才用掉的6個(gè)引腳,還有個(gè)引腳,還有34個(gè),我個(gè),我們將這個(gè)們將這個(gè)LED和和1腳相連。(

4、見(jiàn)圖腳相連。(見(jiàn)圖1,其中,其中R1是限是限流電阻)流電阻) u按照這個(gè)圖的接法,當(dāng)按照這個(gè)圖的接法,當(dāng)1腳是高電平時(shí),腳是高電平時(shí),LED不亮,不亮,只有只有1腳是低電平時(shí),腳是低電平時(shí),LED才發(fā)亮。才發(fā)亮。u因此要因此要1腳我們要能夠控制,也就是說(shuō),我們要能夠腳我們要能夠控制,也就是說(shuō),我們要能夠讓讓1引腳按要求變?yōu)楦呋虻碗娖?。引腳按要求變?yōu)楦呋虻碗娖健既然我們要控制既然我們要控制1腳,就得給它起個(gè)名字,總不能就腳,就得給它起個(gè)名字,總不能就叫它一腳吧?叫它一腳吧?u叫它什么名字呢?設(shè)計(jì)叫它什么名字呢?設(shè)計(jì)51芯片的芯片的INTEL公司已經(jīng)起公司已經(jīng)起好了,就叫它好了,就叫它P1.0,

5、這是規(guī)定,不可以由我們來(lái)更改。,這是規(guī)定,不可以由我們來(lái)更改。 v名字有了,我們又怎樣讓它變高或變低呢?v叫人做事,說(shuō)一聲就可以,這叫發(fā)布命令,要計(jì)叫人做事,說(shuō)一聲就可以,這叫發(fā)布命令,要計(jì)算機(jī)做事,也得要向計(jì)算機(jī)發(fā)命令,計(jì)算機(jī)能聽(tīng)算機(jī)做事,也得要向計(jì)算機(jī)發(fā)命令,計(jì)算機(jī)能聽(tīng)得懂的命令稱之為計(jì)算機(jī)的指令。得懂的命令稱之為計(jì)算機(jī)的指令。v讓一個(gè)引腳輸出高電平的指令是讓一個(gè)引腳輸出高電平的指令是SETBSETB,讓一個(gè)引,讓一個(gè)引腳輸出低電平的指令是腳輸出低電平的指令是CLRCLR。v因此,我們要因此,我們要P1.0P1.0輸出高電平,只要寫輸出高電平,只要寫SETB P1.0SETB P1.0,要

6、要P1.0P1.0輸出低電平,只要寫輸出低電平,只要寫 CLR P1.0CLR P1.0就可以了。就可以了。v讓燈亮的程序簡(jiǎn)單如下:讓燈亮的程序簡(jiǎn)單如下: clr p1.0clr p1.0 end end現(xiàn)在我們已經(jīng)有辦法讓計(jì)算機(jī)去將現(xiàn)在我們已經(jīng)有辦法讓計(jì)算機(jī)去將P1.0輸出高或低電輸出高或低電平了,但是我們?cè)鯓硬拍苡?jì)算機(jī)執(zhí)行這條指令呢?平了,但是我們?cè)鯓硬拍苡?jì)算機(jī)執(zhí)行這條指令呢?v總不能也對(duì)計(jì)算機(jī)也說(shuō)一聲了事吧。要解決這個(gè)問(wèn)總不能也對(duì)計(jì)算機(jī)也說(shuō)一聲了事吧。要解決這個(gè)問(wèn)題,還得有幾步要走。題,還得有幾步要走。v第一步,第一步,計(jì)算機(jī)看不懂計(jì)算機(jī)看不懂SETB CLR之類的指令,我之類的指令,我

7、們得把指令翻譯成計(jì)算機(jī)能懂的方式,再讓計(jì)算機(jī)們得把指令翻譯成計(jì)算機(jī)能懂的方式,再讓計(jì)算機(jī)去讀。去讀。 計(jì)算機(jī)能懂什么呢?它只懂一樣?xùn)|西計(jì)算機(jī)能懂什么呢?它只懂一樣?xùn)|西數(shù)字。數(shù)字。因此我們得把因此我們得把SETB P1.0變?yōu)椋ㄗ優(yōu)椋―2H,90H ),把),把CLR P1.0變?yōu)樽優(yōu)?(C2H,90H ),至于為什么是這兩),至于為什么是這兩個(gè)數(shù)字,這也是由個(gè)數(shù)字,這也是由51芯片的設(shè)計(jì)者芯片的設(shè)計(jì)者-INTEL規(guī)定的,規(guī)定的,我們不去研究。我們不去研究。v第二步,第二步,在得到這兩個(gè)數(shù)字后,怎樣讓這兩個(gè)數(shù)字在得到這兩個(gè)數(shù)字后,怎樣讓這兩個(gè)數(shù)字進(jìn)入單片機(jī)的內(nèi)部呢?進(jìn)入單片機(jī)的內(nèi)部呢? 這要借助

8、于一個(gè)硬件工具這要借助于一個(gè)硬件工具“編程器編程器”。 v這里是我們邁出單片機(jī)編程的第一步,別看很簡(jiǎn)單這里是我們邁出單片機(jī)編程的第一步,別看很簡(jiǎn)單可是卻有重要的意義,沒(méi)錯(cuò),我們已經(jīng)在編程序了可是卻有重要的意義,沒(méi)錯(cuò),我們已經(jīng)在編程序了 v然后用軟件編程,再燒入然后用軟件編程,再燒入5151芯片里,這時(shí),按圖芯片里,這時(shí),按圖1 1連線的情況下,通上電源,這個(gè)連線的情況下,通上電源,這個(gè)LEDLED燈就亮了。燈就亮了。這時(shí)可能有的朋友會(huì)問(wèn);這么簡(jiǎn)單的問(wèn)題,這時(shí)可能有的朋友會(huì)問(wèn);這么簡(jiǎn)單的問(wèn)題, 為啥要為啥要用單片機(jī)搞得這么復(fù)雜?接一個(gè)電池,用單片機(jī)搞得這么復(fù)雜?接一個(gè)電池, 燈不就亮了?燈不就亮

9、了?v沒(méi)錯(cuò),但是這是在編程序,如果我們不要沒(méi)錯(cuò),但是這是在編程序,如果我們不要p1.0p1.0亮。亮。 而是要而是要p2.0p2.0亮,那么寫入亮,那么寫入clr p2.0clr p2.0就可以啦,不就可以啦,不需要你動(dòng)烙鐵來(lái)改線。需要你動(dòng)烙鐵來(lái)改線。v這樣我們看到,硬件電路的連線沒(méi)有做任何改變,這樣我們看到,硬件電路的連線沒(méi)有做任何改變,只要改變寫入單片機(jī)中的內(nèi)容,就可以改變電路只要改變寫入單片機(jī)中的內(nèi)容,就可以改變電路的輸出效果。的輸出效果。三、單片機(jī)內(nèi)部結(jié)構(gòu)分析三、單片機(jī)內(nèi)部結(jié)構(gòu)分析v我們來(lái)思考一個(gè)問(wèn)題:當(dāng)我們?cè)诰幊唐髦邪岩粭l我們來(lái)思考一個(gè)問(wèn)題:當(dāng)我們?cè)诰幊唐髦邪岩粭l指令寫進(jìn)單片要內(nèi)部,

10、然后取下單片機(jī),單片機(jī)指令寫進(jìn)單片要內(nèi)部,然后取下單片機(jī),單片機(jī)就可以執(zhí)行這條指令,那么這條指令一定保存在就可以執(zhí)行這條指令,那么這條指令一定保存在單片機(jī)的某個(gè)地方,并且這個(gè)地方在單片機(jī)掉電單片機(jī)的某個(gè)地方,并且這個(gè)地方在單片機(jī)掉電后依然可以保持這條指令不會(huì)丟失,這是個(gè)什么后依然可以保持這條指令不會(huì)丟失,這是個(gè)什么地方呢?地方呢?v這個(gè)地方就是單片機(jī)內(nèi)部的只讀存儲(chǔ)器即這個(gè)地方就是單片機(jī)內(nèi)部的只讀存儲(chǔ)器即ROMROM(READ ONLY MEMORYREAD ONLY MEMORY)。)。v為什么稱它為只讀存儲(chǔ)器呢?剛才我們不是明明為什么稱它為只讀存儲(chǔ)器呢?剛才我們不是明明把兩個(gè)數(shù)字寫進(jìn)去了嗎?

11、把兩個(gè)數(shù)字寫進(jìn)去了嗎?v原來(lái)在原來(lái)在89C5189C51中的中的ROMROM是一種電可擦除的是一種電可擦除的ROMROM,稱為,稱為FLASH ROMFLASH ROM,剛才我們是用的編程器,在特殊的條,剛才我們是用的編程器,在特殊的條件下由外部設(shè)備對(duì)件下由外部設(shè)備對(duì)ROMROM進(jìn)行寫的操作,在單片機(jī)正進(jìn)行寫的操作,在單片機(jī)正常工作條件下,只能從那面讀,不能把數(shù)據(jù)寫進(jìn)常工作條件下,只能從那面讀,不能把數(shù)據(jù)寫進(jìn)去,所以我們還是把它稱為去,所以我們還是把它稱為ROMROM。實(shí)例實(shí)例2:點(diǎn)亮一個(gè)閃爍的發(fā)光管:點(diǎn)亮一個(gè)閃爍的發(fā)光管一、任務(wù)分析一、任務(wù)分析v怎樣才能讓燈不斷地閃爍呢?怎樣才能讓燈不斷地閃

12、爍呢?v實(shí)例實(shí)例1 1中的程序?qū)嵲谑菦](méi)什么用,要燈不亮還要重中的程序?qū)嵲谑菦](méi)什么用,要燈不亮還要重寫一下片子,下面我們要讓燈不斷地閃爍,這就寫一下片子,下面我們要讓燈不斷地閃爍,這就有一定的實(shí)用價(jià)值了,比如可以把它當(dāng)成汽車上有一定的實(shí)用價(jià)值了,比如可以把它當(dāng)成汽車上的一個(gè)信號(hào)燈用了。的一個(gè)信號(hào)燈用了。v實(shí)際上就是要燈亮一段時(shí)間,再滅一段時(shí)間,也實(shí)際上就是要燈亮一段時(shí)間,再滅一段時(shí)間,也就是說(shuō)要就是說(shuō)要P10P10不斷地輸出高和低電平。怎樣實(shí)現(xiàn)這不斷地輸出高和低電平。怎樣實(shí)現(xiàn)這個(gè)要求呢?個(gè)要求呢?請(qǐng)考慮用下面的指令是否可行:請(qǐng)考慮用下面的指令是否可行:vSETB P1.0 SETB P1.0 v

13、CLR P1.0 CLR P1.0 v這是不行的,有兩個(gè)問(wèn)題:這是不行的,有兩個(gè)問(wèn)題:第一,計(jì)算機(jī)執(zhí)行指令的時(shí)間很快,執(zhí)行完第一,計(jì)算機(jī)執(zhí)行指令的時(shí)間很快,執(zhí)行完SETB SETB P1.0P1.0后,燈是滅了,但在極短時(shí)間(微秒級(jí))后,后,燈是滅了,但在極短時(shí)間(微秒級(jí))后,計(jì)算機(jī)又執(zhí)行了計(jì)算機(jī)又執(zhí)行了CLR P1.0CLR P1.0指令,燈又亮了,所以根指令,燈又亮了,所以根本分辨不出燈曾滅過(guò)。本分辨不出燈曾滅過(guò)。第二,在執(zhí)行完第二,在執(zhí)行完CLR P1.0CLR P1.0后,不會(huì)再去執(zhí)行后,不會(huì)再去執(zhí)行SETB SETB P1.0P1.0指令,所以以后再也沒(méi)有機(jī)會(huì)讓滅了。指令,所以以后再

14、也沒(méi)有機(jī)會(huì)讓滅了。為了解決這兩個(gè)問(wèn)題,我們可以做如下設(shè)想:為了解決這兩個(gè)問(wèn)題,我們可以做如下設(shè)想:v第一,在執(zhí)行完第一,在執(zhí)行完SETB P10SETB P10后,延時(shí)一段時(shí)間(幾后,延時(shí)一段時(shí)間(幾秒或零點(diǎn)幾秒)再執(zhí)行第二條指令,就可以分辨秒或零點(diǎn)幾秒)再執(zhí)行第二條指令,就可以分辨出燈曾滅過(guò)了。出燈曾滅過(guò)了。v第二在執(zhí)行完第二條指令后,讓計(jì)算機(jī)再去執(zhí)行第二在執(zhí)行完第二條指令后,讓計(jì)算機(jī)再去執(zhí)行第一條指令,不斷地在原地兜圈,我們稱之為第一條指令,不斷地在原地兜圈,我們稱之為 循循環(huán)環(huán) ,這樣就可以完成任務(wù)了。,這樣就可以完成任務(wù)了。v以下先給出程序(后面括號(hào)中的數(shù)字是為以下先給出程序(后面括號(hào)

15、中的數(shù)字是為了便于講解而寫的,實(shí)際不用輸入):了便于講解而寫的,實(shí)際不用輸入): ;主程序:;主程序: LOOPLOOP: SETB P1.0 SETB P1.0 ;();() LCALL DELAY LCALL DELAY ;();() CLR P1.0 CLR P1.0 ;();() LCALL DELAY LCALL DELAY ;();() AJMP LOOP AJMP LOOP ;();() ;以下子程序以下子程序 DELAYDELAY: MOV R7MOV R7,#250 #250 ;();() D1D1: MOV R6MOV R6,#250 #250 ;();() D2D2: D

16、JNZ R6DJNZ R6,D2 D2 ;();() DJNZ R7DJNZ R7,D1 D1 ;();() RET RET ;();() END END ;();()按上面的設(shè)想分析一下前面的五條指令:按上面的設(shè)想分析一下前面的五條指令:v第一條是讓燈滅,第二條應(yīng)當(dāng)是延時(shí),第三條是讓第一條是讓燈滅,第二條應(yīng)當(dāng)是延時(shí),第三條是讓燈亮,第四條和第二條一模一樣,也是延時(shí),第五燈亮,第四條和第二條一模一樣,也是延時(shí),第五條應(yīng)當(dāng)是轉(zhuǎn)去執(zhí)行第一條指令。條應(yīng)當(dāng)是轉(zhuǎn)去執(zhí)行第一條指令。v第二和第四條實(shí)現(xiàn)的原理稍后談,先看第五條,第二和第四條實(shí)現(xiàn)的原理稍后談,先看第五條,AJMP是一條指令,意思是轉(zhuǎn)移,往什么地

17、方轉(zhuǎn)移是一條指令,意思是轉(zhuǎn)移,往什么地方轉(zhuǎn)移呢?后面跟的是呢?后面跟的是LOOP,看一下,什么地方還有,看一下,什么地方還有LOOP,對(duì)了,在第一條指令的前面有一個(gè),對(duì)了,在第一條指令的前面有一個(gè)LOOP,所以很直觀地,我們可以認(rèn)識(shí)到,它要轉(zhuǎn)到第一條所以很直觀地,我們可以認(rèn)識(shí)到,它要轉(zhuǎn)到第一條指令處。這個(gè)第一條指令前面的指令處。這個(gè)第一條指令前面的LOOP被稱之為標(biāo)被稱之為標(biāo)號(hào),它的用途就是給這一行起一個(gè)名字,便于使用。號(hào),它的用途就是給這一行起一個(gè)名字,便于使用。v第二條和第四條指令的用途是延時(shí),它是怎樣實(shí)現(xiàn)第二條和第四條指令的用途是延時(shí),它是怎樣實(shí)現(xiàn)的呢?的呢?v指令的形式是指令的形式是L

18、CALL,這條指令稱為調(diào)用子程序指,這條指令稱為調(diào)用子程序指令,看一下指令后面跟的是什么,令,看一下指令后面跟的是什么,DELAY,找一下,找一下DELAY,在第六條指令的前面,顯然,這也是一個(gè),在第六條指令的前面,顯然,這也是一個(gè)標(biāo)號(hào)。標(biāo)號(hào)。v這條指令的作用是這樣的:當(dāng)執(zhí)行這條指令的作用是這樣的:當(dāng)執(zhí)行LCALL指令時(shí),指令時(shí),程序就轉(zhuǎn)到程序就轉(zhuǎn)到LCALL后面的標(biāo)號(hào)所標(biāo)定的程序處執(zhí)行,后面的標(biāo)號(hào)所標(biāo)定的程序處執(zhí)行,如果在執(zhí)行指令的過(guò)程中遇到如果在執(zhí)行指令的過(guò)程中遇到RET指令,則程序就指令,則程序就返回到返回到LCALL指令的下面的一條指令繼續(xù)執(zhí)行,從指令的下面的一條指令繼續(xù)執(zhí)行,從第六行

19、開(kāi)始的指令中,可以看到確實(shí)有第六行開(kāi)始的指令中,可以看到確實(shí)有RET指令。指令。v在執(zhí)行第二條指令后,將轉(zhuǎn)去執(zhí)行第條指令,而在執(zhí)行第二條指令后,將轉(zhuǎn)去執(zhí)行第條指令,而在執(zhí)行完,條指令后將遇到第條在執(zhí)行完,條指令后將遇到第條令:令:RET,執(zhí)行該條指令后,程序?qū)⒒貋?lái)執(zhí)行第三,執(zhí)行該條指令后,程序?qū)⒒貋?lái)執(zhí)行第三條指令,即將條指令,即將P10清零,使燈亮;清零,使燈亮;v然后又是第四條指令,執(zhí)行第四條指令就是轉(zhuǎn)去執(zhí)然后又是第四條指令,執(zhí)行第四條指令就是轉(zhuǎn)去執(zhí)行第行第6,7,8,9,10條指令,然后回來(lái)執(zhí)行第條指令,然后回來(lái)執(zhí)行第5條條指令,第指令,第5條指令就是讓程序回到第條指令就是讓程序回到第1條開(kāi)始執(zhí)行,條開(kāi)始執(zhí)行,如此周而復(fù)始,燈就在不斷地亮、滅了。如此周而復(fù)始,燈就在不斷地亮、滅了。 v在標(biāo)號(hào)在標(biāo)號(hào)DELAY標(biāo)志的這一行到標(biāo)志的這一行到RET這一行中的所有這一行中的所有程序,這是一段延時(shí)程序,大概延時(shí)零點(diǎn)幾秒,至程序,這是一段延時(shí)程序,大概延時(shí)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論