單片機(jī)的“語言”規(guī)范
這是在學(xué)校里面單片機(jī)的教學(xué)情況,社會上學(xué)習(xí)單片機(jī)的情況又怎樣呢?隨著電子元器件技術(shù)的發(fā)展,硬件電路的制作越來越簡單容易,有些器件可以直接把管腳焊接在一起,甚至無需用電路板連接即可使用,讓大家感到頭疼的還是編程。
尤其是業(yè)余單片機(jī)愛好者,沒有受過專業(yè)的編程語言訓(xùn)練,大多數(shù)情況下是使用別人寫好的程序,最多是在別人的程序上修改。我們看有關(guān)單片機(jī)制作的文章,內(nèi)容大都是介紹原理,說到編程,往往只是說可以到哪兒下載。說實(shí)在的,編程語言就是出現(xiàn)在文章里,懂得的人不必去看,不懂的人看也看不懂,也是費(fèi)力不討好。
難道學(xué)習(xí)編程真的是"無章可循",教編程只能是"即興發(fā)揮"式的嗎?經(jīng)過多年的教學(xué)實(shí)踐,我摸索出了一種編程的方法,取得了很好的教學(xué)效果,我暫且把它稱作--單片機(jī)的"語言"規(guī)范。
單片機(jī)如何"說話"單片機(jī)的匯編語言,既然稱作"語言",它跟我們的自然語言是有相似之處的。比如它有語句,語句要符合語法規(guī)則。
說到"規(guī)范"二字,有的朋友會說,既然是"語言",只要語句正確,語法正確,想怎么說就怎么說,想怎么寫就怎么寫,只要編譯通過,功能能夠?qū)崿F(xiàn)就可以,難道還要有什么"規(guī)范"不成?答案是,當(dāng)然需要。我們在學(xué)習(xí)自然語言時也是要有規(guī)范的。語文課本里的文章,我們不是把它們叫做"范文"嗎。當(dāng)然,自然語言的使用可以非常靈活自由,但也要看是哪一類的文章。像詩歌、散文這類的文章,語言的使用可以非常靈活,而像一些應(yīng)用文,語言的使用就要受到限制,如我們學(xué)習(xí)寫請假條,尋人啟事,會議通知之類的文章,就要遵守一定的格式。我們在進(jìn)行應(yīng)用文寫作的時候,只有遵守這些"格式",才能寫出合格的應(yīng)用文來。
匯編語言是我們跟單片機(jī)打交道所使用的語言,我們使用匯編語言跟單片機(jī)"說話",讓它聽從我們的指揮,首先是讓它能聽懂我們的"說話",那就是要正確使用指令。單片機(jī)的"大腦"還沒有我們?nèi)四X這么聰明,我們在說話時能揣測對方的意思,而單片機(jī)只能嚴(yán)格按照我們的約定來執(zhí)行我們的命令。其次是如何"說話".匯編語言屬于工程語言,工程語言的精髓就是規(guī)范。它的規(guī)則更加嚴(yán)謹(jǐn),書寫要求更加嚴(yán)格。越是規(guī)范嚴(yán)謹(jǐn)?shù)恼Z言,學(xué)習(xí)起來就越應(yīng)該有法可依。而找到了這個"法",我們的學(xué)習(xí)就會向前邁出一大步。匯編語言里有什么樣的規(guī)范呢?
在進(jìn)行匯編語言的教學(xué)時,我們首先向?qū)W生們強(qiáng)調(diào),匯編語言程序由三部分組成:①預(yù)定義部分;②主程序部分;③子程序部分。這就是匯編語言程序編寫的規(guī)范格式。當(dāng)然,有些簡單的程序,可能會缺少某一部分,但是我們還是從一開始就向?qū)W生們強(qiáng)調(diào),簡單的程序也要盡量寫出這三部分。因?yàn)殡S著程序內(nèi)容的增加,這三部分的結(jié)構(gòu)與層次的重要意義就會越發(fā)地顯現(xiàn)出來。下面我們以一個最簡單的單片機(jī)控制電路為例子,介紹這種規(guī)范程序的寫法,并逐一介紹每部分的內(nèi)容與含義。
圖1是單片機(jī)系統(tǒng)的三個管腳p0.1,p0.2,p0.3與三個發(fā)光二極管的電路連接圖。從圖1中我們可以看到,只要控制單片機(jī)p0這三個腳的電位,我們就可以隨意控制這三個LED燈的亮滅。我們的控制要求是:LED1亮1s滅1s,接著LED2亮1s滅1s,接著LED3亮1s滅1s,結(jié)束。
圖1 單片機(jī)系統(tǒng)與LED的電路連接圖
電路功能很簡單,編程思路可以這樣來敘述。如圖2。
圖2 電路編輯思路
程序編寫也很簡單,大多數(shù)人認(rèn)為程序可以直接寫出來,請看下面的程序示例一。
//程序功能:三個LED燈依次各亮滅1s
start: clr p0.0 //點(diǎn)亮第一個LED燈
acall delay1s
setb p0.0 //熄滅第一個LED燈
acall delay1s
clr p0.1 //點(diǎn)亮第二個LED燈
acall delay1s
setb p0.1 //熄滅第二個LED燈
acall delay1s
clr p0.2 //點(diǎn)亮第三個LED燈
acall delay1s
setb p0.2 //熄滅第三個LED燈
acall delay1s
ajmp $ //待機(jī)狀態(tài)
delay1s: //延時1s子程序
mov r5,#50
d3: mov r6,#100
d2: mov r7,#100
d1: djnz r7,d1
djnz r6,d2
djnz r5,d3
ret
end //程序結(jié)束
評論