Zaslal: pá září 28 2007, 5:44 Předmět: Zacyklení přerušení u 16f630
Dobrý den,
jsem začátečník a učín se programovat PICY. Napsal jsem si program který po stisku tlačítka přičte 1 na displeji .Zkoušel jsem to pomocí přerušení, ale problém je v tom že nemužu vynulovat přiznakový bit INTCON,RAIF a tudíž se mi to vrací pořád na přerušení, zkoušel jsem to v MPLABU.Prosín poraĎte
kde dělám chybu?
TAdy je program
org 0x0000 ; zacatek programu
goto INIT ; skok na počáteční inicalizaci
org 0x0004 ; vektor přerušení
goto PRERUS
;**************************************************************************
;* Preruseni *
;**************************************************************************
PRERUS
movwf TMP_W ; (ulozeni hodnot registru W a STATUS)
swapf STATUS,W ; prohodi nibble STATUS a ulozi do W
movwf TMP_S ; ulozit STATUS
; ------------------------
; bcf INTCON,T0IF ; vynulovat priznak preruseni (pretekl casovac TMR0)
bcf INTCON,RAIF ; vynulovat priznak preruseni (zmena na portu RA0-RA5)
; bcf INTCON,INTF ; vynulovat priznak preruseni (vstup RA2)
;-------------------------------
bcf INTCON,RAIF
call PRICTI
; !!! zde napiste co ma preruseni vykonat !!!
;------------------------------- (obnovení hodnot registru W a STATUS)
PRERUS_KON
swapf TMP_S,W ; prohodí nibble TMP_S a uloží do W
movwf STATUS ; obnova STATUS
swapf TMP_W,F ; prohodi nibble TMP_W
swapf TMP_W,W ; obnova W
; ------------------------
retfie ; návrat z přerušení
;************************ Inicializace procesoru *************************
INIT
movlw b'00000000' ; prednastavit 0 na RA0 - RA5,
movwf PORTA
movlw b'00110000' ; prednastavit 0 na RC0 - RC3, 1 na RC4-RC5
movwf PORTC
Nechce se mi to moc studovat, ale před zrušením RAIF musíš nejprve zrušit příčinu přerušení přečtením nebo zápisem brány PORTA. Teprve potom lze provést Clear RAIF. To je ovšem základ popsaný v manuálu procesoru, tak předpokládám, že je to samozřejmé.
Nemůžete odesílat nové téma do tohoto fóra. Nemůžete odpovídat na témata v tomto fóru. Nemůžete upravovat své příspěvky v tomto fóru. Nemůžete mazat své příspěvky v tomto fóru. Nemůžete hlasovat v tomto fóru. Nemůžete připojovat soubory k příspěvkům Můžete stahovat a prohlížet přiložené soubory
Informace na portálu Elektro bastlírny jsou prezentovány za účelem vzdělání čtenářů a rozšíření zájmu o elektroniku. Autoři článků na serveru neberou žádnou zodpovědnost za škody vzniklé těmito zapojeními. Rovněž neberou žádnou odpovědnost za případnou újmu na zdraví vzniklou úrazem elektrickým proudem. Autoři a správci těchto stránek nepřejímají záruku za správnost zveřejněných materiálů. Předkládané informace a zapojení jsou zveřejněny bez ohledu na případné patenty třetích osob. Nároky na odškodnění na základě změn, chyb nebo vynechání jsou zásadně vyloučeny. Všechny registrované nebo jiné obchodní známky zde použité jsou majetkem jejich vlastníků. Uvedením nejsou zpochybněna z toho vyplývající vlastnická práva. Použití konstrukcí v rozporu se zákonem je přísně zakázáno. Vzhledem k tomu, že původ předkládaných materiálů nelze žádným způsobem dohledat, nelze je použít pro komerční účely! Tento nekomerční server nemá z uvedených zapojení či konstrukcí žádný zisk. Nezodpovídáme za pravost předkládaných materiálů třetími osobami a jejich původ. V případě, že zjistíte porušení autorského práva či jiné nesrovnalosti, kontaktujte administrátory na diskuzním fóru EB.