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: 51261, Oldal olvasási idő: kb. 1 perc
Lapozás: OK   11 / 19

Először itt is az assembly kódot érdemes érteni, és ha már minden világos, akkor lehet égetni, kipróbálni, és esetleg megvizsgálni a C kódot.

  1. LIST P=16F877
  2.  #INCLUDE "P16F877.INC"
  3.  ERRORLEVEL 0, -302  ; suppress bank selection messages
  4.  __CONFIG _XT_OSC&_CP_OFF&_WDT_OFF&_LVP_OFF
  5.  CBLOCK 0x70   ;A Minden BANK-ból látható GPR kezdőcím
  6.   W_SAVE
  7.   STATUS_SAVE
  8.  ENDC
  9.  
  10.  
  11. #include "m_bank.asm"
  12.  
  13.  
  14.  ORG 0
  15.  GOTO MAIN   ;Beugrunk a MAIN loopba
  16.  
  17.  
  18.  ORG 4
  19.  ; Elmentjük a Work és Status regisztereket
  20.  MOVWF W_SAVE   ;Először a Work regisztert
  21.  MOVFW STATUS   ;STATUS-t bele a már lementett Workbe
  22.  MOVWF STATUS_SAVE  ;Status_save-be beletölti a Worköt
  23.  
  24.  
  25.  BCF  INTCON,T0IF  ;Töröljük az RBIF flag bitet (Jelezzük, kezeltük a megszakítást)
  26.  MOVLW B'11111111'
  27.  XORWF PORTD,F   ;XOR PORTD bitjeit
  28.  
  29.  
  30.  ; Visszatöltjük a Work és Status regisztereket
  31.  MOVFW STATUS_SAVE
  32.  MOVWF STATUS
  33.  MOVFW W_SAVE
  34.  
  35.  
  36.  RETFIE     ;Visszajövünk az interruptból
  37.  
  38.  
  39.  
  40. MAIN
  41.  BANK1     ;Unit az m_bank.asm-ben
  42.  MOVLW B'00000000'  ;Betöltjük az akksiba a TRISD-be valót
  43.  MOVWF TRISD   ;Beletöltjük (mind kimenet a nulla miatt)
  44.  
  45.  
  46.  MOVLW B'00000111'  ;Betöltjük az akksiba az OPTION_REG-be valót
  47.  MOVWF OPTION_REG  ;Beletöltjük... Előosztó: 1:256
  48.  BANK0     ;BANK0-ba visszalépünk
  49.  
  50.  
  51.  MOVLW B'01010101'  ;Betöltjük az akksiba a PORTD-be valót
  52.  MOVWF PORTD   ;Beletöltjük a PORTD-be
  53.  
  54.  
  55.  ;Beállítjuk a interruptot
  56.  BSF  INTCON,T0IE   ;Engedélyezzük az interruptot a Timer0-ra
  57.  BSF  INTCON,GIE   ;General Interrupt Enable bitet 1-re állítva bekapcsolunk mindent
  58.  
  59.  
  60. LOOP
  61.  NOP
  62.  GOTO LOOP     ;Vissza a végtelen ciklusba
  63.  
  64.  
  65.   END       ;Teljes program végét jelentő END

Ha végeztünk, akkor annyit kell látnunk, hogy fix időközönként "invertálódnak" a ledek. Hasonló effekt mint előzőekben, annyi különbséggel, hogy most az időzítőnk vezérel mindent!

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

Nézzük a C kódot...


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

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.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