Newsgroup: it.hobby.elettronica.digitale
Titolo: 16f628,se routine troppo lunga interrupt sbaglia????

Ciao,
sto usando un 16f628,uso l'interrupt del timer0,ad ogni overflow del TMR0
faccio invertire un uscita ,se tutto va bene mi trovo 1khz
e lo deve fare sempre,dato che TMR0 impostato a timer incrementa ad ogni
ciclo istruzione
chiamo una subroutine e il khz c'è sempre
da questa subroutine ne chiamo un altra e il khz c'e'
se in questa subroutine aggiungo del codice,anche solo 8 nop(1 ciclo
istruzione) il khz si incasina
perchè?
grazie a chi vorrà svelarmi ciò

 perchč?
Controlla che l'aggiunta di istruzioni non porti parte del codice da pagina
0 a pagina 1.
Mirko


grazie,ma scusa...nel 16f628 il programma non e scritto in uno spazio
continuo indirizzabile senza pagine?


in ogni caso tutto il codice non arriva a 1B0H

 perchè?
Magari posta il codice "incriminato" così gli diamo una occhiata, è un 
po difficile risponderti così!
Ciao!
-- 
Stefano Martini
Sito WEB: 
http://www.lemming.it

blisca ha scritto:

Stai scrivendo in assembler?
prova a postare il codice....
Emanuele
-- 
*** YOUR ELECTRONICS OPEN SOURCE ***
http://dev.emcelettronica.com
;---------------------------------------------------------
Progetti Completi e Risorse (Full Projects and resources)

istruzione) il khz si incasina
ringraziando solennemente per la disponibilità  allego codice
evidentemente nella routine se venivo interruptato(ganzo sto neologismo)
mentre ero in bank1( e forse è questo che intendeva dirmi il primo che mi ha
postato) l'interrupt sopraggiungeva ma andavo a modificare TRISA anziche
PORTA con conseguente sconvolgimento....la lunghezza......boh non so cosa
c'entri... so che nell'uomo non dovrebbbe essere importante ma penso sia
meglio abbondare
ciao e grazie ancora
;************************************ gestione
interrupt******************************
ORG 04H
    movwf temp2;salva w in variabile temporanea
   bcf  INTCON,T0IF
   bsf T1CON,TMR1ON;abilito 1 conteggio di TMR1
   nop
   bcf T1CON,TMR1ON
;----------------------------------inversione pin per onda quadra
oscilloscopio------------------
   movf PORTA,w;leggo la PORTA per invertirla
  andlw 00001000B
  BTFSS STATUS, Z
 goto invert0
 goto invert1
invert0
bcf PORTA,3
 bsf  INTCON,GIE
 movf temp2,w
 RETFIE
invert1
 bsf PORTA,3
 bsf  INTCON,GIE
 movf temp2,w
 RETFIE
;---------------------------------------------------------------------------
--------------------
 movf temp2,w;riprendo variabile salvata
 RETFIE
;***************************************************************************
********
...
...
;************************************ subroutine
incriminata******************************
testbusy;testa se bit 7 dati indica LCD  pronto (0)
    bsf STATUS,RP0
    movlw 11111111B
     movwf TRISB
    bcf STATUS,RP0;imposto bit 7 come uscita
    cmdmode;MACRO
    readmode ;MACROdevo leggere il 7 bit quindi vado in letture
    qnop;MACRO
     enah;MACRO
    movf lcd_data,w
    enal;MACRO
    andlw 80H;testo ,se il flag di busy e a 0 ok
    BTFSS STATUS, Z
    goto testbusy;se bit 7 alto ritorna a testarlo
    writemode;MACRO
    bsf STATUS,RP0
    movlw 00000000B
    movwf TRISB
    bcf STATUS,RP0;rimetti come uscita bit 7
    return
;***************************************************

 bsf  INTCON,GIE
qui ripristini lo stato precedente all'interrupt, quindi dovresti mettere:
Exit_Interrupt:
 MOVF Saved_Fsr,W ; get saved fsr reg
 MOVWF FSR  ; restore
 MOVF Saved_Pclath,W ; get saved pclath
 MOVWF PCLATH  ; restore
 SWAPF Saved_Status,W ; get saved status in w
 MOVWF STATUS  ; restore status ( and bank )
 SWAPF Saved_W,F ; reload into self to set status bits
 SWAPF Saved_W,W ; and restore

Le variabili utilizzate per il salvataggio dello stato prima di svolgere la 
routine di interrupt è meglio se sono nella memoria accessibile da tutti i 
banchi, quindi:
  CBLOCK 0x070
  ; ram variables accesible from all banks mainly used for context saving
  ; ( ram area above 0x70 are mirrored in all banks )
  Saved_W:1     ; variable used for context saving
  Saved_Status:1  ; variable used for context saving
  Saved_Pclath:1 ;
  Saved_Fsr:1 ;
  ENDC
Tieni anche presente che tutte le istruzioni che lavorano sui bit non in 
realtà read-modify-write e possono essere influenzate da ciò che è collegato 
al pin settato come uscita.
Se trovi problemi, modifica la parte di pilotaggio uscita in modo che lavori 
sull'intera porta (settando o abbassando solo i bit interessati, 
ovviamente). 

 al pin settato come uscita
.
 puoi fare un esempio per favore?


 puoi fare un esempio per favore?
Le operazioni che lavorano sui bit (es. BSF, BCF) effettuano in realtŕ una 
lettura dello stato attuale, lo modificano e poi lo riscrivono.
Questo comporta che se il pin comanda un carico capacitivo con rapide 
variazioni dell'uscita, alcune istruzioni pur essendo eseguite a livello di 
codice,non porterebbero l'effetto desiderato in quanto il pin non ha avuto 
il tempo fisico di cambiare il proprio stato prima di essere letto 
dall'istruzione successiva (che ne deve in realtŕ comandare l'uscita).
Ad. es.
bsf PORTA,3
bcf PORTA,3
bsf PORTA,3
bcf PORTA,3
bsf PORTA,3
se eseguite in serie e con collegato un carico capacitivo, potrebbero non 
causare in realtŕ nessuna variazione del pin RA3.
Se invece esegui
movlw 0x08
movwf PORTA
clrw
movwf PORTA
movlw 0x08
movwf PORTA
clrw
movwf PORTA
movlw 0x08
movwf PORTA
ti ritrovi tutte le variazioni che ti aspetti.
Questa particolaritŕ l'hanno tutte le operazioni RMW che agiscono sui 
registri dei port di IO, come es.
xorwf PORTA,F
iorwf PORTA,F
andwf PORTA,F
mentre sono eseguite correttamente le istruzioni che lavorano sulla porta 
completa
iorwf PORTA,W
andwf PORTA,W

 Questa particolarità l'hanno tutte le operazioni RMW che agiscono sui


...
Ti sei accorto vero, che stai scrivendo dal passato ?
Il tuo datario del pc segna 28/01/2007 ;-)

Roberto P. <roberto...@LEVAMIrobertopedrazzoli.it> wrote in message
epoea6$1ce$1...@tdi.cu.mi.it...


 Il tuo datario del pc segna 28/01/2007 ;-)
si,grazie ,è che sono un nostalgico...c'è chi è nostalgico degli anni'80 o
'70 ..io sono nostalgico di due giorni fa
comunque si..sto bene attento a non leggere una pin che per motivi elettrici
non è ancora riuscito a cambiare stato...
con clock di 4096 KHz facevo commutare ogni ms una uscita aperta,c'erano
solo i 10pF della sonda a caricarla,
mi chiedo però...senza scartabellare il datasheet :a 20MHz di clock sapendo
che un ciclo interno dura  1(/Fosc/4)
c'è qualcosa più veloce a commutare un 'uscita di
loop
bcf PORTA,n
bsf PORTA,n
goto loop
?curiosità...
grazie ancora

 ha scritto nel messaggio 
news:45bfc8f2$0$26618$4faf...@reader1.news.tin.it...

Hai dato un'occhiata al modulo pwm ? 

 '70 ..io sono nostalgico di due giorni fa
...
[OT on]
quando dici anni '80 ti riferisci alla discomusic anni 80 (cosidetta 
italodisco) o altro ... ?
[OT offf]
Ciauz !
Luigi 


http://www.pagine70.com/
Mi ha fatto venire nostalgia di quegli anni mitici.
--
ciao
  Stefano

   Stefano
lo dicevo all'ottimo LuisFr15(tra l'altro disponibile all'inverosimile ogni
volta che gli chiedo 1/2 favore)dei rottami elettronici anni 70,oggi vai in
una discarica e trovi roba smd a 32 bit. vecchia di 3 anni...ai tempi(avevo
14  anni nel 77) ricordo che trovavi roba di 20 o 30 anni prima ,piena di
polvere e ragni morte,e magari recuperavi un bellissimo condensatore
variabile ad aria
apriamo un OT nostalgico?

apriamo un OT nostalgico?
No, in fondo la nostalgia per quegli anni è dovuta principalmente al fatto che
si trombava facile e non avevo la pancetta.
E c'è poco da fare, indietro non si torna.
--
ciao
  Stefano

 Ciauz !
mah..no....io ricordo con piů piacere gli anni'70,il dilagare delle radio
private ( e Luis ne sa qualcosa) ,le prime curiosate a riviste tipo Radio
Elettronica,Elettronica pratica,Sperimentare...
http://www.pagine70.com/

 si trombava facile
???????.......................allora io temo di essere nostalgico solo per
la musica.......

la musica.......
Non volevo fare il fenomeno, dipende anche dal fatto che col tempo si tende a
rimuovere tutti gli stop ricevuti e a ricordare solo le volte che si è andati in
buca.
Sono nostalgico anche per la musica, ma quella la posso riascoltare facilmente..
--
ciao
  Stefano