單片機流水燈設計方法
|
在上面主程序中用到了五條匯編語(yǔ)言指令:CLR、ACALL、SETB、LJMP、END。
CLR: 是將其后面指定的位清為0,程序中使對應端口輸出低電平
ACALL:是子程序調用指令,程序中調用了DELAY延時(shí)子程序
SETB:是將其后面指定的位置成1,程序中使對應端口輸出高電平
AJMP:是無(wú)條件跳轉指令,意思是:跳轉到指定的標號處繼續運行
END: 是程序結束的偽指令,意思是告訴編譯器,程序到此結束。偽指令只告訴編譯器此程序到此有何要求或條件,它不參與和影響程序的執行。
在上面源程序中"ACALL DELAY"指令的作用是調用DELAY延時(shí)子程序。為什么要使用這指令呢?如果不用該指令能夠實(shí)現"流水"效果嗎?答案是肯定的,一定要用該指令才能看到我們需要的"流水"效果。如果不用該指令,則由于8個(gè)LED發(fā)光與熄滅的時(shí)間都很短,我們肉眼無(wú)法看到LED的熄滅與點(diǎn)亮,憑我們肉眼看到的是LED1~LED8都同時(shí)亮(半亮),而看不到“流水”效果的!注:初學(xué)者可以將上面源程序中所有"ACALL DELAY"指令行刪除后再編譯后燒寫(xiě)到單片機進(jìn)行驗證一下。
產(chǎn)生這種現象主要是因為單片機執行每條指令的時(shí)間很短,我們知道實(shí)驗板上單片機的時(shí)鐘高達11.0592MHz,在這個(gè)時(shí)鐘信號(即晶體振蕩信號)下,一個(gè)“機器周期”僅大約1.08uS(微秒)。本程序中我們用到的SETB P.x和CLR P.x均屬于單周期指令,也就是說(shuō),執行一句 SETB P.x 用時(shí)僅1.08uS(微秒),CLR P.x 也是1.08uS(微秒);也就是點(diǎn)亮和熄滅時(shí)間都為1.08uS(微秒),在如此高速的流水速度下,8個(gè)LED發(fā)光與熄滅的時(shí)間都很短,當然憑我們的肉眼看不到“流水”效果了!
這里需要說(shuō)明的是,按匯編語(yǔ)法要求,所編制的程序(下稱(chēng)源程序)之格式和書(shū)寫(xiě)要求必須依下列原則:
1、源程序必須為純文本格式文件,如用Windows“附件”中的“記事本”編寫(xiě)的文本文件或用UltraEdit文本編輯器編輯;
2、源程序的擴展名應是 *.ASM;
3、一行只能寫(xiě)一條語(yǔ)句,以回車(chē)作為本句的結束,每一語(yǔ)句行長(cháng)度應少于80個(gè)字符(即40個(gè)漢字)。
4、每行的格式應為:標號: 命令 參數 ;注釋 。即一行由四部份組成,各部份的順序不能搞錯,依實(shí)際要求可以缺省其中的一部份或幾部份,甚至全部省去,即空白行。需要使用標號時(shí)標號后面必須有“:”(冒號),而命令語(yǔ)句和參數之間必須用空格分開(kāi),如果命令有多個(gè)參數,則參數與參數之間必須用“,”(逗號)分開(kāi),需要注釋時(shí)注釋前必須用“;”(分號),“;”后面的語(yǔ)句可以寫(xiě)任何字符,包括漢字用于解釋前面的匯編語(yǔ)句,它將不參與匯編,不生成代碼。由于匯編程序對我們還不直觀(guān),所以在編寫(xiě)源程序時(shí),應當養成多寫(xiě)注釋的習慣,這樣有助于今后源程序的閱讀和維護。
標號是標志程序中某一行的符號名,編譯后標號的數值就是標號所在行代碼的地址。在宏匯編ASM51中標號的長(cháng)度不受限制,但標號中不能包含‘:'或其它的一些特殊符號,也不能用漢字,可以用數字作標號,但必須用字母開(kāi)頭。當標號作參數用(如標號作轉移地址),在命令后面出現時(shí),必須舍去‘:'(如上面程序中的 AJMP START中的START是不能再有:)。每行只能有一個(gè)標號,一個(gè)標號只能用在一處,如果有兩行用了同一個(gè)標號,則匯編時(shí)就會(huì )出錯。由于標號的長(cháng)度沒(méi)有限制,可以用有意義的英文或漢語(yǔ)拼音來(lái)說(shuō)明行,使源程序讀起來(lái)更方便。在源程序中的字母不區分大小寫(xiě),也就是說(shuō) start 和 START 是一樣的,請不要用大小寫(xiě)方式去區分不同的標號。
好啦!我們知道了匯編語(yǔ)言程序的規則,現在就動(dòng)手編輯源程序吧。馬上啟動(dòng)Keil單片機集成開(kāi)發(fā)環(huán)境,建立新工程liu01.UV2,將上面的源程序liu01.asm導入到工程中,設置好Keil工程的編譯參數,編譯得到HEX格式的目標文件liu01.hex,用 ISP編程器 將目標文件liu01.hex燒寫(xiě)到AT89S51單片機中,接下來(lái)就是將燒寫(xiě)好的AT89S51從編程器上取下,放到“ S51增強型單片機實(shí)驗板 ”上通電,我們就看到了LED1~LED8的"流水"效果了。
評論