此章節主要是利用LED做基本輸出練習,依照電路圖LED的接法,只要輸出為0,LED便會導通發亮,輸出為1,會因電流等於0而不亮。

因此,只要下達

      mov    p2,#11111110b

就會使得P2.0控制的LED亮,其他LED皆熄滅,若要依序點亮其他LED,可透過指令   rl    a   (將累加器內資料左旋)完成

例如:

       mov    a,#11111110b
loop:  mov    p2,a
       rl     a
       jmp    loop

但因8051執行速度很快,所以在每次送出資料間,都必須加上延遲程式,才可方便使用者觀察,不然只是感覺每個LED都是亮的而已。範例(ASM)

程式中有用到迴圈,其用法另外說明於右側聯結 迴圈說明

1.各位讀者可參考範例,利用   RR    A   指令改成右旋。

2.將LED左旋一圈(8次),再右旋一圈(8次),如此週而復始

3.關於迴圈延遲時間的說明,是以標準8051晶片為準,本網頁的測試程式是針對笙泉科技所生產的82G516,相同石英震盪器時脈下,82G516指令執行速度比標準8051大約快6倍。如要減少使用不同晶片造成執行時間的不同,建議改用8051內建的計時器來完成。

 

若要以C語言設計,因標準C語言並不提供左旋與右旋指令,因此在撰寫C程式,須先在程式開頭宣告#include <intrins.h>,載入Keil uVision內建的左旋與右旋指令函數,才可正常執行,或者讀者要以標準C語言自行設計左旋與右旋指令也可以。

extern unsigned char _cror_ (unsigned char, unsigned char);
extern unsigned char _crol_ (unsigned char, unsigned char);

範例(C)