歡迎您光臨本站 登入註冊首頁

概述

單片機是靠程序來運行的,程序是通過編程器燒寫進單片機晶元中去的,我們編寫不同的燒寫文件,單片機就會按照我們的意願來完成不同的功能,但是如何寫程序和獲得燒寫文件,並且燒寫成功,這一個部分卻是很多教科書上……

單片機是靠程序來運行的,程序是通過編程器燒寫進單片機晶元中去的,我們編寫不同的燒寫文件,單片機就會按照我們的意願來完成不同的功能,但是如何寫程序和獲得燒寫文件,並且燒寫成功,這一個部分卻是很多教科書上忽略的,即使有介紹也可能因為他們介紹的編程器或者彙編軟體我們無法獲得,而使初學者無所適從。站長在自學單片機的過程中也花了不少精力才搞懂這一個部分。
第一步,我們用WINDOWS自帶記事本程序來寫彙編語言程序,例如,在D盤下新建一個001.TXT文檔


ORG 0000H
START:MOV P1,#01111111B
LCALL DELAY
MOV P1,#10111111B
LCALL DELAY
MOV P1,#11011111B
LCALL DELAY
MOV P1,#11101111B
LCALL DELAY
MOV P1,#11110111B
LCALL DELAY
MOV P1,#11111011B
LCALL DELAY
MOV P1,#11111101B
LCALL DELAY
MOV P1,#11111110B
LCALL DELAY
MOV P1,#11111111B;完成第一次LED跳燈循環
AJMP START;反覆循環
DELAY:MOV R4,#02H;延時子程序,12M晶振延時約1秒
L3: MOV R2 ,#0FAH
L1: MOV R3 ,#0FAH
L2: DJNZ R3 ,L2
DJNZ R2 ,L1
DJNZ R4 ,L3
RET
END
第二步,我們需要使用一個彙編軟體:宏彙編軟體MASM51 點擊這裡可以下載這個軟體
軟體下載成功后經過ZIP解壓后獲得MAS51.EXE和MAS51.OVI兩個文件,我們將它們放到D盤根目錄下,然後雙擊MAS51.EXE文件,進入DOS界面的彙編程序,如下圖:


我們通過鍵盤敲入asm51 d:\001.txt后回車,如果出現00 Errors (0000)的話,表示彙編沒有任何錯誤,成功了!
如果出現別的文字提示,說明彙編有錯誤,您可以根據提示的內容找出錯誤的語句,一一改正,再重新彙編,直到出現00 Errors (0000)。這時在D盤的根目錄下自動會產生001.HEX的編程器燒寫文件,這就是最終寫入單片機的文件。
在學習單片機的過程中您可以在理解的基礎上修改我網站的程序範例,然後:軟體彙編--編程器燒寫--AT89C51實驗板驗證,這樣可以快速掌握單片機技術。
編寫彙編語言常見錯誤分析:
一、 MAS51彙編軟體彙編失敗原因分析:
單片機的彙編語言編寫時要注意一定的語法,詳細介紹可以參考相關參考書,語法錯誤匯會造成彙編失敗,常見的彙編錯誤如下:
1.標號重複 常見於複製、粘貼程序時忘記修改標號,造成出現多個相同的標號,標號是不允許重複的。
2.標點符號以全形方式輸入 MAS51程序要求標點符號為半形方式,否則彙編失敗。可以在輸入:,;時切換到半形方式,或者在大寫狀態輸入標點符號,這也是很容易犯而且不容易發覺的錯誤。
3.註釋太長 有時為了以後讀懂程序,寫了很長的註釋,站長發現超過20個漢子時也會造成彙編失敗,解決辦法可以將太長的註釋分成多個註釋。
4.數值#FFH 前遺漏0,根據要求應該在a~f前加0,寫成#0FFH
5.字母O和數字0搞混 有時候這兩個字看上去完全相同,要注意哦~~
6.標號後邊遺漏":"
7.標號使用了特殊字元,比如:T1、T2、A、B這些字元有特定的含義,不允許用於標號。
8.AJMP跳轉超過2K地址,AJMP屬於短跳轉命令,有2K地址範圍的限制。
9.JB P3.2,EXIT跳轉超過-128~127個地址範圍。這個是最容易出現的錯誤!你有可能程序剛才還能彙編編譯成功,你加了一段程序后程序就提示出錯了,你可以把
JB P3.2,EXIT
轉換成
JNB P3.2,UUU
AJMP EXIT
UUU:
10.字母I和數字1混淆,冒失鬼的常見問題。
11.創造發明不存在的彙編語言指令,在編寫程序程序的過程中可不歡迎這種創新,這種指令彙編程序不支持,晶元也不認可。
12.符號“:”“;”最好用半形書寫。
使用彙編軟體常見問題解答:
1.如果彙編軟體出現** Unrecongnized Command **提示字樣說明是彙編命令輸入錯誤。正確的彙編命令是asm51 d:\001.txt 注意asm51後面要加空格。
2.如果彙編軟體出現**Dos File I/O error **提示字樣說明是彙編文件的路徑出錯。第一要注意MASM51軟體的安裝路徑中不能出現中文名稱,例如彙編軟體安裝在D:\單片機\下面,第二要彙編的文件的路徑中也不能出現中文名稱,例如D:\單片機\001.TXT。當文件後綴不是asm時,後綴不能省略。
二、程序出錯:
1.寄存器重複調用 比如主程序中設定了R4=5,表示主程序循環執行5次,而其中的一個延時子程序又用到R4,使R4的值發生紊亂,造成程序無法正常執行。
2.硬體不熟悉 單片機一般採用下拉輸出,往往埠輸出0驅動外設工作,和常見的正邏輯相反,容易搞錯。
以上是站長學單片機時發生的不止一次的錯誤!!
編寫彙編語言的忠告:
要養成良好的程序書寫習慣,比如標號對齊、參數對齊、註釋對齊,這樣看起來賞心悅目,也不容易出錯。標號最好採用有意義的英文,這樣比較直觀,註釋盡量詳細準確,便於以後讀懂,而且有利於其它程序中作為子程序模塊的調用。還有要注意典型程序模塊的積累,再複雜的程序也是由一個個小程序模塊組成的,在初學階段可以對典型程序比如:延時子程序、查表子程序、按鍵消抖子程序等編寫實踐一次,這樣印象深刻,便於以後引用。
常見彙編語言指令解釋:
1.Rn 表示R0~R7中的一個
2.#data 表示8位的數值 00H~FFH
3.direct 表示8位的地址 00H~FFH
4.@Ri 表示寄存器間接定址 只能是R0或者R1
5.@DPTR 表示數據指針間接定址
6.bit 表示位地址
7.$ 表示當前地址
寄存器定址 MOV A,R1 將R1中的數值賦予A
直接定址 MOV A,3AH 將地址3AH中的數值賦予A

[admin via 研發互助社區 ] 怎樣生成51單片機編程器燒寫文件HEX已經有2684次圍觀

http://cocdig.com/docs/show-post-421.html