Fórum témák

» Több friss téma
Cikkek » Nulláról a robotokig - PIC Mikrovezérlők III rész
Nulláról a robotokig - PIC Mikrovezérlők III rész
Szerző: Topi, idő: Júl 13, 2007, Olvasva: 51317, Oldal olvasási idő: kb. 1 perc
Lapozás: OK   14 / 19

Először is, a konfig biteket kell beállítanunk, hogy bekapcsolódjon a WDT modul:

  1. __CONFIG _XT_OSC&_CP_OFF&_WDT_ON&_LVP_OFF

Ezután már sok dolgunk nincs, csak a program. Ha beállítjuk a regisztereket, de a konfig biteknél nem kapcsoljuk be a WDT-t a _WDT_ON paranccsal, akkor nem fog működni a programunk helyesen!

  1. LIST P=16F877
  2.  #INCLUDE "P16F877.INC"
  3.  ERRORLEVEL 0, -302  ; suppress bank selection messages
  4.  __CONFIG _XT_OSC&_CP_OFF&_WDT_ON&_LVP_OFF
  5.  
  6. #include "m_bank.asm"
  7.  
  8.  
  9.  ORG 0
  10.  GOTO MAIN   ;Beugrunk a MAIN loopba
  11.  
  12.  
  13. MAIN
  14.  BANK1     ;Unit az m_bank.asm-ben
  15.  ;PORTA Digitális I/O-vá tétel
  16.  MOVLW 0x06  
  17.  MOVWF ADCON1   ;Mindegyik PORTA digitális
  18.  
  19.  
  20.  MOVLW B'00011111'  ;Betöltjük az akksiba a TRISA-ba irandót
  21.  MOVWF TRISA   ;Beállítjuk a PORTA-t bemenetre (beírjuk a TRISA-ba)
  22.  MOVLW B'00000000'  ;Betöltjük az akksiba a TRISD-be valót
  23.  MOVWF TRISD   ;Beletöltjük (mind kimenet a nulla miatt)
  24.  
  25.  
  26.  MOVLW B'00001111'  ;Betöltjük az akksiba az OPTION_REG-be valót
  27.  MOVWF OPTION_REG  ;Beletöltjük... WDT Előosztó: 1:128
  28.  BANK0     ;BANK0-ba visszalépünk
  29.  
  30.  
  31.  MOVLW B'01010101'  ;Betöltjük az akksiba a PORTD-be valót
  32.  MOVWF PORTD   ;Beletöltjük a PORTD-be
  33.  
  34.  
  35. LOOP
  36.  BTFSS PORTA,1   ;Skip ha fel van engedve a gombic
  37.  CALL PORTD_BE  ;Meghívjuk a LEDváltóst
  38.  
  39.  
  40.  BTFSS PORTA,0   ;Skip ha fel van engedve a gombic
  41.  GOTO $-1    ;Gombnyomással végtelen ciklust indítunk
  42.  CLRWDT     ;Töröljük a WDT-t
  43.  GOTO LOOP    ;Vissza a végtelen ciklusba
  44.  
  45.  
  46. PORTD_BE
  47.  MOVLW B'11111111'
  48.  MOVWF PORTD
  49.  RETURN
  50.  
  51.  
  52.   END       ;Teljes program végét jelentő END

Az egész program forráskód, segéd rutinok és a lefordított hex: wdt_asm.zip

Lényegében nem csinálunk semmi bonyolultat. Indulásnál bekapcsolunk minden második LED-et. Ha Gomb1-et megnyomjuk, akkor bekapcsol minden LED, és úgy marad. Ha ezután megnyomjuk a Gomb0-át, akkor míg nyomjuk "végtelen" ciklust generálunk és nem engedjük lefutni a CLRWDT parancsot, ami ugye a Clear WDT. Előosztás miatt circa 2,3 másodperc múlva, újra csak minden második LED fog világítani, mivel a program újraindult, WatchDog timer törlés hiánya miatt.

Nézzük C-nyelven is ezt a csodát...


A cikk még nem ért véget, lapozz!
Következő: »»   14 / 19
Értékeléshez bejelentkezés szükséges!
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem