Vítejte na Elektro Bastlírn?
Nuke - Elektro Bastlirna
  Vytvořit účet Hlavní · Fórum · DDump · Profil · Zprávy · Hledat na fóru · Příspěvky na provoz EB

Vlákno na téma KORONAVIRUS - nutná registrace


Nuke - Elektro Bastlirna: Diskuzní fórum

 FAQFAQ   HledatHledat   Uživatelské skupinyUživatelské skupiny   ProfilProfil   Soukromé zprávySoukromé zprávy   PřihlášeníPřihlášení 

Zacyklení přerušení u 16f630

 
Přidat nové téma   Zaslat odpověď       Obsah fóra Diskuzní fórum Elektro Bastlírny -> Programování PIC, ATMEL, EEPROM a dalších obvodů
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
beagle



Založen: Mar 14, 2007
Příspěvky: 30

PříspěvekZaslal: pá září 28 2007, 5:44    Předmět: Zacyklení přerušení u 16f630 Citovat

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

LIST P=16F630, R=DEC
INCLUDE "P16f630.inc"
;********************* definice proměnných *************************
#define ANODA1 PORTC,4 ;anoda 1LEDsegmentu
#define ANODA2 PORTC,5 ;anoda 2LEDsegmentu
#define INKREM PORTA,0 ;tlačítko +
#define DEKREM PORTA,1 ;tlačítko -
#define S_TART PORTA,2 ;tlačítko START
#define S_TOP PORTA,3 ;tlačítko STOP
#define LED PORTA,5 ;segment H2 bliká kažkou sekundu při spuštění
#define PIEZO PORTA,4 ;zvukový signál při skončení
TMP_W EQU 20h ; temp preruseni
TMP_S EQU 21h ; temp preruseni

TMP0 EQU 22h
TMP1 EQU 23h
TMP2 EQU 24h
TMP3 EQU 27h
TMP4 EQU 28h
TMP5 EQU 29h
FSR_sav EQU 30h
PCL_sav EQU 31h
W_save equ 32h
Sta_sav EQU 33h
CAS EQU 34h
JEDNOTKY EQU 25h
DESITKY EQU 26h

;--------------------------------------------------------------------------

org 0x2007 ; adresa konfigurace PIC16F630 a 675
dw _BODEN_OFF & _CP_OFF & _PWRTE_OFF & _WDT_OFF & _MCLRE_OFF & _CPD_OFF & _INTRC_OSC_NOCLKOUT

;************************ Reset procesoru *************************

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

movlw b'00000111' ; =07h, digitalni vstupy na RA0 - RA2 (comparator OFF)
movwf CMCON
; ------------------------
bsf STATUS,RP0 ; nastaveni BANKY 1

movlw b'001111'
movwf TRISA ; RA0 - RA3 vstup , RA4-RA5 výstup (0=vystup, 1=vstup)

movlw b'000000'
movwf TRISC ; RC0 – RC5vystup ( 0=vystup, 1=vstup)

movlw b'11000000' ; PULL-UPy OFF, preddelic=1:16 pripojen k TMR0
movwf OPTION_REG ; f:3,2768MHz :1 :16 = 204800Hz (4,882us)

; call 03FFh ; zapsat kalibraci vnitrniho oscilatoru
; movwf OSCCAL ; 00h min. f, 80h stred f, 0FFh pro max. f
; ------------------------
movlw b'00000000' ; nastaveni PULL-UP na vstupu RA0 - RA2, RA4-RA5
movwf WPUA ; (0 zakazan, 1 povolen)
movlw b'00000011' ; preruseni pri zmene na vstupu RC0 - RC5
movwf IOCA ; Povolit INT on CHANGE na GP0 (0 zakazano, 1 povoleno)
movlw b'10001000' ; Glob.prer. povoleno, povoleno změnou na RA0-RA5
movwf INTCON
bcf STATUS,RP0 ; nastaveni BANKY 0

clrf JEDNOTKY
clrf DESITKY

ZOBRAZ bcf ANODA1
movf DESITKY,0
movwf PORTC
call ZPOZDENI
bsf ANODA1
call ZPOZDENI

bcf ANODA2
movf JEDNOTKY,0
movwf PORTC
call ZPOZDENI
bsf ANODA2
call ZPOZDENI
btfss INTCON,GIE
return
call ZOBRAZ

;Variables: TMP2, TMP1, TMP0 (1000cyklu
; při 1MHz
ZPOZDENI
MOVLW 0x01 ;1 DEC
MOVWF TMP2
MOVLW 0x05 ;5 DEC
MOVWF TMP1
MOVLW 0x41 ;41 DEC
MOVWF TMP0
DECFSZ TMP0,F
GOTO $-1
DECFSZ TMP1,F
GOTO $-5
DECFSZ TMP2,F
GOTO $-9
RETURN
;End of Delay



PRICTI incf JEDNOTKY,1
movf JEDNOTKY,0
xorlw b'00001001'
btfss STATUS,Z
incf DESITKY,1
clrf JEDNOTKY
;movf DESITKY,0

RETURN



END
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
jankop



Založen: Apr 04, 2007
Příspěvky: 679

PříspěvekZaslal: pá září 28 2007, 19:45    Předmět: Citovat

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é.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail Zobrazit autorovy WWW stránky
beagle



Založen: Mar 14, 2007
Příspěvky: 30

PříspěvekZaslal: so září 29 2007, 5:18    Předmět: Citovat

Děkuji za odpověď.Máte pravdu. pomohlo to , nějak jsem si to neuvědonil.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
jankop



Založen: Apr 04, 2007
Příspěvky: 679

PříspěvekZaslal: so září 29 2007, 9:32    Předmět: Citovat

Rád jsem pomohl. Podstatné je, že se dovedeš zeptat a přesně specifikovat problém a výchozí podmínky.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail Zobrazit autorovy WWW stránky
Zobrazit příspěvky z předchozích:   
Přidat nové téma   Zaslat odpověď       Obsah fóra Diskuzní fórum Elektro Bastlírny -> Programování PIC, ATMEL, EEPROM a dalších obvodů Časy uváděny v GMT + 1 hodina
Strana 1 z 1

 
Přejdi na:  
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

Powered by phpBB © 2001, 2005 phpBB Group
Forums ©
Nuke - Elektro Bastlirna

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.


PHP-Nuke Copyright © 2005 by Francisco Burzi. This is free software, and you may redistribute it under the GPL. PHP-Nuke comes with absolutely no warranty, for details, see the license.
Čas potřebný ke zpracování stránky 0.19 sekund