忽然發(fā)現(xiàn),想系統(tǒng)的寫點東西,還真不是那么容易的事,不過已經(jīng)開始了,我就硬著頭皮上了。 之前講了如何點亮LED,包括硬件電路和程序,今天說一下如何讓LED閃爍。單片機(jī)控制LED閃爍有兩種方法,一種是軟件延時,另一種是定時器中斷。因為涉及到單片機(jī)指令集的問題,還有一些簡單的C語言,今天只講第一種。 先說指令集,早期的51單片機(jī)都是復(fù)雜指令集,因為沿用的習(xí)慣現(xiàn)在用的STC89C52單片機(jī)也是復(fù)雜指令集,和復(fù)雜指令集對應(yīng)的,就是精簡指令集,常見的有AVR和430單片機(jī)。 這兩種指令集的區(qū)別是啥?最明顯的就是一條指令執(zhí)行的時間,舉個例子:51單片機(jī)和AVR單片機(jī)都外接一個12M的晶體,一個時鐘周期是1/12M=1/12US,執(zhí)行一條單周期指令(多周期指令不考慮)需要多少時間? 51單片機(jī)用的時間是 (1/12M)*12=1US. AVR單片機(jī)用的時間是 1/12M = 1/12US 同理,如果接8M的晶體,那么時間就是 51: (1/8M)*12 = 1.5US AVR: 1/8M = 0.125US 由上可見,精簡指令集比復(fù)雜指令集快了12倍。 既然外接晶體速度越高,指令周期時間就越短,是不是晶體頻率越大越好?當(dāng)然不是!一個人的心跳速率越快,自然泵血越多,能提供更多的能量,但是如果超出極限,自然就崩潰了。 51單片機(jī)能外接多大的晶體?這個值要看器件手冊了,像ATMEL的,最大可以到24M,STC的STC89C52能到35M,如下圖: 那么常說的1T,4T,6T,12T是什么意思?因為很多單片機(jī)以MCS-51內(nèi)核為核心,隨著工藝的提高,指令周期的速度也會有所提升。12T就是12個時鐘周期為一個指令周期,也就是最原始的,維持不變。同理,1T就是一個時鐘周期為一個指令周期,4T就是四個時鐘周期為一個指令周期。 好了,說了那么多廢話,開始說LED閃爍的事,今天說的是軟件延時,軟件延時就是單片機(jī)在主程序里面計時,當(dāng)時間到了,打開或者關(guān)閉LED,計時的過程中不能做別的事。 示例程序如下: 程序已經(jīng)上傳到這里:
LED延時閃爍.zip
(20.83 KB, 下載次數(shù): 33)
2015-3-20 22:54 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
好了,今天就這樣,給大家留個思考題,程序中的delay(3000) 延時0.85S是如何算出來的。 感謝浪豆兄弟的指正,這一篇確實有些錯誤,已經(jīng)改正。
|