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