www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

Prekinitve PIC12f683

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Osnove programiranja PIC-a v Assembler-ju
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
mucek4
Član
Član



Pridružen-a: Sob 18 Jun 2005 20:52
Prispevkov: 2952
Aktiv.: 12.46
Kraj: Tržič - Mesto med gorami

PrispevekObjavljeno: Pet Nov 02, 2007 10:35 am    Naslov sporočila:  Prekinitve PIC12f683 Odgovori s citatom

Prebrskal sem že forum, vendar nisem zasledil podatka.

Imam dokaj velik program pisan v ASM-ju. V simulatorju dela, na HW-ju pa noče skočiti v prekinitev.

Koda je sledeča, kaj bi bilo lahko narobe?
Koda:
   org 0x00
   goto MAIN
   org 0x05

   movwf WTMP                  ; Save W and status
   swapf STATUS,W               ;
   movwf STMP                  ;
   clrf STATUS                  ; Clear status


   movlw AND_LED               ; XOR LED
   xorwf GPIO, f               ;


END_INT

   swapf STMP,w               ;restore W and status
   movwf STATUS               ;
   swapf WTMP,f               ;
   swapf WTMP,w               ;
   retfie

   ; //interupt
   

MAIN   

   BANK1
   movlw b'01100000'            ;
   movwf OSCCON               ;
   BANK0                     ; Inicialization

   clrw                     ; clear w
   addlw 0                     ; clear Carry

   movlw b'00000111'            ; disable comparator module
   movwf CMCON0               ; to enable digital I/O


   clrf GPIO                  ; Clear all ports

   BANK1
   movlw b'00100100'            ; GP5 & GP2 input
   movwf TRISIO               ;
   clrf ANSEL                  ;
   BANK0

   bsf LED                     ; Light up led

   BANK1
   movlw b'10000000'            ; enable timer0
   movwf OPTION_REG
   BANK0

   movlw b'00110001'            ; enable timer1
   movwf T1CON                  ;

   movlw b'01111110'            ; enable timer2
   movwf T2CON                  ;
   
   clrf TMR0                  ; clear TMR0
   clrf TMR2                  ; clear TMR0

   bsf INTCON, PEIE            ; enable peripheral interupt
   bsf INTCON, GPIE            ; enable interrupt on change
   bsf INTCON, T0IE            ; enable timer0 interrupt
   BANK1
   bsf IOC, IOC5               ; enable interrupt on pin change
   bsf PIE1, TMR1IE            ; enable timer1 interupt bit
   BANK0
   bsf INTCON, GIE               ; enable global interupt

   clrf FLAGS                  ; clear flags
   bsf COMMERROR               ; set communication error
   movlw .16
   movwf KEYTIMER               ; set keytimer to defalut

   BANK1
   clrf EEADR                  ; clear eeprom address
   bsf EECON1, RD               ; read position 0
   movfw EEDAT                  ; read address
   BANK0
   movwf KEY_ADDRESS            ;

MAIN_LOOP

   btfsc KEYVALID               ; if key is pressed long enough
   call KEYPRESSED               ; call subroutine

   btfsc COMMERROR               ; if not commerror
   goto MAIN_NEXT               ;
   btfsc COMMRESET               ; and commreset is set
   call COMM_START               ; call communication start!
   

MAIN_NEXT

   goto MAIN_LOOP


Upam, da je razumljivo napisano.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
bungee
Član
Član



Pridružen-a: Pon 07 Mar 2005 18:49
Prispevkov: 1479
Aktiv.: 6.24
Kraj: Ljubljana

PrispevekObjavljeno: Pet Nov 02, 2007 10:56 am    Naslov sporočila:   Odgovori s citatom

Kako veš, da ne skoči v prekinitev? In ali imaš definirane nivoje na vhodnih pinih, kjer prožiš interrupt?

Na oko koda izgleda OK.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
Sokrat
Član
Član



Pridružen-a: Čet 25 Avg 2005 11:00
Prispevkov: 5584
Aktiv.: 23.58

PrispevekObjavljeno: Pet Nov 02, 2007 10:56 am    Naslov sporočila:   Odgovori s citatom

Zakaj pa org 0x05 ?!?!?!
_________________
Ka ti bo pa torba ce si kupu kolo ?
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
mucek4
Član
Član



Pridružen-a: Sob 18 Jun 2005 20:52
Prispevkov: 2952
Aktiv.: 12.46
Kraj: Tržič - Mesto med gorami

PrispevekObjavljeno: Pet Nov 02, 2007 11:03 am    Naslov sporočila:   Odgovori s citatom

Sokrat je napisal/a:
Zakaj pa org 0x05 ?!?!?!

Hm. Dobro vprašanje. Zakaj simulator dela dobro. Hw je pa vedno v W naložil 0xff.

Vem da ne skoči, ker gledam signale LED na osciloskopu. V prekinitev zdaj skoči, ko sem odstranil linker skripto. Ne vem zakaj je sploh prišla noter.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Sokrat
Član
Član



Pridružen-a: Čet 25 Avg 2005 11:00
Prispevkov: 5584
Aktiv.: 23.58

PrispevekObjavljeno: Pet Nov 02, 2007 11:52 am    Naslov sporočila:   Odgovori s citatom

Saj addlw 0xff ni nelegalen ukaz, samo nesmiseln je, ker spremeni zastavice in vrednost v W za 1 (ce je bil prej flash pobrisan seveda, sicer je lahko naredil MCU kaj drugega).

Res bizarno, da niso pri Microchipu dolocili pobrisane lokacije kot NOP ... najbrz je to poenostavilo ukazni dekoder.

_________________
Ka ti bo pa torba ce si kupu kolo ?
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Osnove programiranja PIC-a v Assembler-ju Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Stran 1 od 1

 
Pojdi na:  
Ne, ne moreš dodajati novih tem v tem forumu
Ne, ne moreš odgovarjati na teme v tem forumu
Ne, ne moreš urejati svojih prispevkov v tem forumu
Ne, ne moreš brisati svojih prispevkov v tem forumu
Ne ne moreš glasovati v anketi v tem forumu
Ne, ne moreš pripeti datotek v tem forumu
Ne, ne moreš povleči datotek v tem forumu

Uptime: 491 dni


Powered by phpBB © 2001, 2005 phpBB Group