?? 新建 文本文檔.txt
字號:
單片機自學教材之用單片機做流水燈(一)
第一節
第一步:制作硬件電路
流水燈電原理圖如下圖,圖中用一片AT89C2051單片機及少量外圍元件組成。
圖中,R1~R8為LED1~8的限流電阻;R9、C3為單片機的簡易上電復位電路;C1、C2、T1組成單片機的時鐘電路;
工作原理:在上電后由于C3、R9的作用,使單片機的RST復位腳電平先高后低,從而達到復位;之后,在C1、C2、T1以及單片機內部時鐘電路的作用下,單片機依程序將P1.0~P1.7引腳拉低或抬高;拉低的引腳對應的LED點亮,抬高的引腳對應的LED熄滅。
印版圖:
電路制作時,AT89C2051的位置應安裝20腳的IC座,以便使單片機可以從電路板中拿下去燒寫程序。電路中的元件無太苛刻的要求,若LED為高亮度的,R1~R8可加大到1k;C3漏電不要太大;否則會造成單片機無法復位。
下一步的準備:
1、下載匯編編譯器 ASM51 ,這里先以DOS下的ASM51為例,因為它編譯匯編程序時不產生輔助代碼,所以較適合初學理解其產生的代碼。
2、準備一片AT89C2051或AT89C1051;一般電子商場即可購到,當然,如果有舊片只要是好的也行。
3、準備一臺可以燒寫AT89C2051和 1051的編程器;
4、電腦一臺;噢對啦!你現在正使用的這臺就行。
第二步:軟件的編寫
現在,我們假設單片機可以聽懂我們的漢語,那么想讓LED1點亮,就說“P1.0變低”;(單片機在上電初始后,其各端口輸出為高電平)LED1就點亮啦!想讓LED1滅,LED2亮,就說“P1.0升高,P1.1變低”;LED1就熄滅LED2隨后既點亮!
若用漢語編寫的流水燈程序應該是:
程序部分 ;解釋部分用“;”分號與程序部分隔開
開始: ;“開始:”為標號
P1.0低
P1.0高
P1.1低
P1.1高
P1.2低
P1.2高
P1.3低
P1.3高
P1.4低
P1.4高
P1.5低
P1.5高
P1.6低
P1.6高
P1.7低
P1.7高
返回到開始 ;返回到“開始:”處繼續循環
結束 ;說明程序到此結束
這樣,LED1~LED8便會不停的流動點亮熄滅,從而產生流水效果。
然而單片機聽不懂漢語,只能接受二進制的“10......”代碼,但要用二進制代碼編寫流水燈程序,其意思與上述的“漢語程序”基本相同,只是“漢語”改為二進制代碼罷啦。
為了讓單片機工作,只能將程序寫為二進制代碼交給其執行;早期單片機開發人員就是使用人工編寫的二進制代碼交給單片機去工作的。
今天,我們不必用煩人的二進制去編寫程序,完全可以將我們容易理解的“程序語言”通過“翻譯”軟件“翻譯”成單片機所需的二進制代碼,然后交給單片機去執行。這里的“程序語言”目前主要有匯編和C兩種;“翻譯”軟件有好多種,一般依所使用的“程序語言”不同而不同,匯編語言用“宏匯編”,如上面讓你下載的ASM51,C語言用FC或KC(以后會學到,現在你不必關心)。在這里我們所說的“翻譯”軟件,行話叫編譯器,將“程序語言”通過編譯器產生單片機的二進制代碼的過程叫編譯。
現在讓我們將上面的“漢語”語言程序改寫為匯編語言程序:
“漢語”語言 匯編語言
開始: star:
P1.0低 clr p1.0
P1.0高 setb p1.0
P1.1低 clr p1.1
P1.1高 setb p1.1
P1.2低 clr p1.2
P1.2高 setb p1.2
P1.3低 clr p1.3
P1.3高 setb p1.3
P1.4低 clr p1.4
P1.4高 setb p1.4
P1.5低 clr p1.5
P1.5高 setb p1.5
P1.6低 clr p1.6
P1.6高 setb p1.6
P1.7低 clr p1.7
P1.7高 setb p1.7
返回到開始 ljmp star
結束 end
這里用到了四條匯編指令:clr、 setb、 ljmp 、end;
clr 是將其后面指定的位清為0;
setb 是將其后面指定的位置成1;
ljmp 是無條件跳轉指令,意思是:跳轉到指定的標號處繼續運行。
end 是一條告訴編譯器:程序到此結束的偽指令。偽指令只告訴編譯器此程序到此有何要求或條件,它不參與和影響程序的執行。
這里需要說明的是,按匯編語法要求,所編制的程序(下稱源程序)之格式和書寫要求必須依下列原則:
1、源程序必須為純文本格式文件,如用Windows“附件”中的“記事本”編寫的文本文件;
2、源程序的擴展名應是 *.ASM;
3、一行只能寫一條語句,以回車作為本句的結束,每一語句行長度應少于80個字符(即40個漢字)。
4、每行的格式應為:
標號: 命令 參數 ;注釋
即一行由四部份組成,各部份的順序不能搞錯,依實際要求可以缺省其中的一部份或幾部份,甚至全部省去,即空白行。需要使用標號時標號后面必須有“:”(冒號),而命令語句和參數之間必須用空格分開,如果命令有多個參數,則參數與參數之間必須用“,”(逗號)分開,需要注釋時注釋前必須用“;”(分號),“;”后面的語句可以寫任何字符,包括漢字用于解釋前面的匯編語句,它將不參與匯編,不生成代碼。由于匯編程序對我們還不直觀,所以在編寫源程序時,應當養成多寫注釋的習慣,這樣有助于今后源程序的閱讀和維護。
標號是標志程序中某一行的符號名,編譯后標號的數值就是標號所在行代碼的地址。在宏匯編ASM51中標號的長度不受限制,但標號中不能包含‘:’或其它的一些特殊符號,也不能用漢字,可以用數字作標號,但必須用字母開頭。當標號作參數用(如標號作轉移地址),在命令后面出現時,必須舍去‘:’(如上面程序中的 LJMP STAR中的 STAR 是不能再有:)。
每行只能有一個標號,一個標號只能用在一處,如果有兩行用了同一個標號,則匯編時就會出錯。由于標號的長度沒有限制,可以用有意義的英文或漢語拼音來說明行,使源程序讀起來更方便。
源程序中的字母不區分大小寫,也就是說 star 和 STAR 是一樣的,請不要用大小寫方式去區分不同的標號。
好拉!現在來看看前面我們編寫的源程序該怎樣處理,
為便于以后敘述,也便于你對源程序的學習與管理,請在C盤下建立一個McuCai目錄,將下載的MASM51和你編寫的程序均放到這里。下面均認為你已建立了這個目錄。
編寫源程序:先將上面的匯編源程序在Windows的記事本中依原樣輸入,之后保存為 Test.asm。
由于ASM51為漢化版,需要中文環境,在進入DOS模式后請在命令行鍵入 pdos95 回車 既進入中文環境;要退出中文環境,只要在命令行鍵入 quit 即可。
編譯:在命令行鍵入: asm51 test.asm 回車
如果你編寫的源程序有錯誤,編譯時編譯器會提示你那一句錯啦;若想詳細查看編譯結果,可用“記事本”打開編譯后產生的test.lst列表文件。我們最后需要的便是編譯后產生的 test.hex 文件
燒寫:回到Windows;將編程器與電腦連接好并接通電源(這里以本站介紹的AT51編程器為例),啟動編程器程序,在“器件”菜單中選擇“AT89C2051”;從“文件”菜單中“打開HEX文件”打開C:\McuCai\Test.hex文件;在編程器上裝入AT89C2051芯片,先擦除,后寫入。好拉,到此我們已將第一個流水燈程序編寫、編譯、燒寫進行完啦,再下來就是將燒寫好的AT89C2051從編程器上取下,安裝到前面制作的電路板中通電讓LED1~LED8“流水”。
說明:由于單片機的時鐘高達12MHz,8個LED發光與熄滅的時間很短,實際實驗結果憑我們的眼是看不到“流水”效果的!哪怎樣才能讓我們肉眼看到“流水”效果呢?請繼續學習下節課
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -