• 歡迎光臨東莞市飛江電子科技有限公司官網!
    全國咨詢熱線

    13926563901

    18925580829

    飛江淘寶店鋪

    首頁>技術資料>PIC單片機

    PIC單片機16F84的內部硬件資源(五)

    發布時間:2018-04-07   瀏覽量:

    PIC單片機16F84的內部硬件資源(五)

     飛江科技  www.syhtzly.com

        7   延時和定時
      在設計單片機應用系統時,經常會遇到需要使某一過程(如加溫、加壓等)持續一段時間的情況,如連續加壓1分鐘,通電2分鐘等。單片機如何正確確定這段時間呢?這里可通過兩種方式,即延時和定時來實現。試看下例。
      在應用系統中要求PIC16F84單片機的RAO端控制一個發光二極管按一定頻率閃亮,可通過右圖的電路來實現。同時還必須為16F84單片機編制一個程序。由電路圖可知,要使發光二極管LED按一定的頻率閃亮,只要使RAO端輸出一個變化的高→低→高……電平即可。由此設計出如下的源程序(清單1):
      list P=16F84,F=INHX8M
     ??;……
         ORG   0
         MOVLW 0 ;主程序開始
         TRIS  5   ;置RA口為輸出
         BCF   5,0   ;RA口0位清零
      LOOP:CALL  DELAY;閃動延時
         COMF 5   ;RA口求反,亮—滅交替
         GOTO LOOP   ;循環
     ??;……
      DELAY      ;以下為延時子程序
          MOVLW  D′50
          MOVWF   8
      LOOP1:MOVWF   9
      LOOP2:DECFSZ   9,F
          GOTO   LOOP2
         DECFSZ   8,F
         GOTO    LOOP1
      RETLW       0
      由清單1可知,當主程序開始時,首先將工作寄存器W清零,然后將W寄存器的內容送TRISA寄存器,使其清零,以設置RA口為輸出。接著又將RA口的第5位清零,使LED開始時處于熄滅狀態。隨之持續一段時間,即執行延時子程序,再將RA口取反,變為高電平輸出,LED發光,再延時,又使RA口取反,LED熄滅……。這樣,LED就一暗一亮,持續交替進行。
      在這里,使LED亮、暗持續一段時間是通過單片機執行延時子程序DELAY來實現的。此延時程序的核心就是讓單片機的CPU反復執行使寄存器內容減1的指令DECFSZ。即將十進制數50分別裝入通用寄存器F8、F9,以進行50×50=2500次的減1操作。如果執行一次DECFSZ指令需1個指令周期(跳轉時需2個周期),若設振蕩頻率為100kHz,即指令周期為40μs,則延時時間為2500×40=100000μs=100ms,即01秒。實際上還略為大些。此延時時間已超過人眼的視覺保留時間。因而能看清LED的明、暗交替變化。
      如果我們需要更長的延時時間,可仿照上例,裝入更大的數或引入多重循環。因此,在原則上,延時時間可根據需要任意延長。
      不過,采用延時程序來持續某一過程的方式有缺陷。延時就是使CPU在某幾條指令上“轉圈”,延時越長,“轉圈”數越多,這時,CPU不能再去執行其它操作,如監視溫度、濕度等。這在某些實時控制系統中,不允許這樣做。為此,在單片機16F84單片機中,專門設置了一個“鬧鐘”——定時器TMR0。需要某過程延續多長時間,可將其“撥入”TMR0,到時它會發生“中斷”,告訴CPU定時時間到。要CPU暫停其它工作,轉過來執行“中斷子程序”,完成輸出開、關信號之類的任務后,再回去執行其中斷的工作。這樣,就使CPU的工作效率提高。因而,延時的使用有局限性,采用定時器TMR0則可用于各種場合中。

      成都 衛東

      知識競賽試題:
      22以本版上文電路為準,在A1口上接一LED,要使該LED閃亮的延時間隔約為04秒,請寫出其源程序清單。

    黑人粗大无码AV人妻一区