怎樣下載單片機參數
發布時間:2019-08-02 15:34:36來源:
代碼下載到單片機中的方法有兩種,一種在通過ISP(在線下載)下載到單片機,另外一種比較常見的是通過編程器把代碼燒錄到單片機。
只要把匯編指令都寫出來了,你就可以到指令表中找到每一條指令所對應的機器碼,然后你只要在機器碼后面加上操作數即可,比如,把一個30H單元送入A累加器;指令是這樣的:MOV A , 30H .那么你可以在指令表中查到執行這條指的機器碼是1110 0101,但是由于這條指令后面的那個30H單元的數是根據你的要求在不斷的變的,機器沒規定你只能用30H單元,所以這個30的操作數必須由你填,它們和在一塊兒,這條指令的機器碼是:1110 0101 0011 0000用十六進制來表示:E530,很明顯前兩位E5是機器指定的,而后兩位30是你自己加進去的。共是十六位,占用兩個字節……。
你說的LED燈閃爍,不知是指的流水燈還是一只發光二極管在不停地閃爍?但不管是哪一種,有一點很重要。你在編寫此程序時必須要考慮延時,因為51單片機的晶體振蕩器比較低頻率可能是6M(具體數值我已記不清了)。也就是說單片機的每一個機器周期所占用的時間僅2微秒,如果你不考慮延時的話,那么你設計的那盞燈,它閃爍的結果是;亮2微秒,熄2微秒,也就是說每一秒鐘要亮暗50萬次,肉眼看這盞燈根本就不會有熄滅的時候,只是比不閃的燈暗了一半。我們生活中用的白熾燈,每秒鐘亮暗100次,你能感覺出燈泡有熄滅的時候嗎?更何況那是50萬次啊!
比如設計流水燈的程序,不妨可以這樣考慮它的算法。計數寄存器的高八位加上低八位,合起來也只有十六位,它能數的數比較大也就是65535,就算單片機用的是比較低的6M的晶體振蕩器,一個機器周期是12個機器節拍,所以,每一個機器周期占用2微秒時間,從0數到65535,僅用了131070微秒就數完了,約130毫秒,如果就按這個延時去改變燈的亮暗時間,那么這盞燈每秒鐘要亮暗3、4次,肉眼雖然能夠看到燈有熄滅的時間了。但是眼睛看這樣的燈總不會那么舒服,所以至少應讓它延時到1秒鐘亮暗一次。為了計算方便,就讓計數器數100毫秒的時間吧!等計數器數到100毫秒后,就讓它再數一次,然后再數一次……,等它數滿5次后,這就是500毫秒(半秒鐘),然后,我們再去改變燈的亮暗狀態。
這個程序可以這樣來編:
MOV A ,#0FEH ;比較低位設為0
MOV P1, A ;點亮比較低位燈
MOV TCON,#10H ;T1為方式1,定時
BEGIN: MOV R7 ,#05H ;設循環5次
STAR: MOV TH1 #3CH ;計數器數100毫秒
MOV TL1 #AFH
SETB TR1 ;開始計數
ROU: JBC TF1 SE ;100毫秒到否?
SJMP ROU ;等待到100毫秒
SE: CLR TR1 ;關閉計數器
DJNZ R7 STAR ;5次循環到否? RL A ;把0向左移一位
MOV P1 ,A ;改下一只燈亮
SJMP BEGIN
51的單片機
ORG 0000H
MAIN:MOV R2,#2
L1:MOV R3,#200
L2:MOV R4,#200
L3:NOP
NOP
DJNZ R4,L3
DJNZ R3,L2
DJNZ R2,L1
CPL P1.7
JMP MAIN
END
Medwin編寫C51匯編
八只LED燈做流水燈實驗
單片機在上電初始后,其各端口輸出為高電平。如果我們現在想讓接在P1.0口的LED1亮,那么我們只要把P1.0口的電平變為低電平就可以了。想讓LED1滅,LED0亮,只需將P1.0升高,P1.1變低,LED1就熄滅LED2隨后既點亮!依始類推如下所示8只LED變會一亮一暗的做流水燈了.
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高、返回到開始、程序結束。
我們不能說P1.1你變低,它就變低了。因為單片機聽不懂我們的漢語的,只能接受二進制的“1、0......”代碼。我們又怎樣來用二進制語議論使單片機按我們的意思去工作呢?為了讓單片機工作,只能將程序寫為二進制代碼交給其執行;早期單片機開發人員就是使用人工編寫的二進制代碼交給單片機去工作的。今天,我們不必用煩人的二進制去編寫程序,完全可以將我們容易理解的“程序語言”通過“翻譯”軟件“翻譯”成單片機所需的二進制代碼,然后交給單片機去執行。這里的“程序語言”目前主要有匯編和C兩種;在這里我們所說的“翻譯”軟件,同行們都叫它為“編譯器”,將“程序語言”通過編譯器產生單片機的二進制代碼的過程叫編譯。前面說到,要想使LED1變亮,只需將對應的單片機引腳電平變為低電平就可以了。現在讓我們將上面提到的8只LED流水燈實驗寫為匯編語言程序。