Vai al contenuto
PLC Forum


Programmino Per Pic16f84a - non capisco


Agamennone_Ares

Messaggi consigliati

Qui dice che il program counter parte da 0

The Reset Vector

There are two positions in the Program Memory that you need to know. The first one is the reset vector. The reset vector is the position where the program counter will go to after a reset (or a power on). This position is as expected at position 0x00, at the very beginning of the program memory.

ho paura che devi rileggere di nuovo.... roflmao.gif

Modificato: da dott.cicala
Link al commento
Condividi su altri siti


Allora ho simulato velocemente il tuo nuovo codice e siamo punto a capo, dato che non credi guarda tu stesso...

user posted image

Ho notato che hai tirato fuori certe istruzione dal bank1 e le hai messe correttamente in bank0, ma per il resto sei rimasto al punto di ieri, il buzzer pernacchia, la PORT_A deve essere settata con 11000 quindi 18H, la PORT_B non avendo pubblicato uno schema io non la uso quindi 00000000 o 00H...

Lascia stare per ora le ORG che comunque cominciano con 00H (messe in ordine risparmi l'ORG 050H), io so che se non aggiustavo il prescaler il mio codice produceva suoni sgradevoli simili al tuo, non so come puoi affermare che funzioni, probabilmente è una semplice casualità dovuta ai continui overflow del timer...

TRIS PORT_A e TRIS PORT_B sono istruzioni non consigliate, sono state rimpiazzate da:

TRISA  EQU  H'0085'
TRISB  EQU  H'0086'

    MOVLW 018H
    MOVWF TRISA & 07H 
    MOVLW 00H
    MOVWF TRISB & 07H 

Stai solamente correndo troppo, alcune cose in assembler sono un tantino dure da assimilare, lo stesso programma in mikroC risulterebbe molto più semplice, inoltre contiene la routine suona (frequenza, durata) senza scrivere altro...

P.S. Senza un simulatore non ne esci più in questi casi rolleyes.gif...

Link al commento
Condividi su altri siti

Manuale Microchip (che credo sia l'unico documento incontenstabile)

PICmicro™ Mid-Range MCU Family Reference Manual

DS31003A-page 3-11

Tabella Table 3-3: Initialization Condition for Special Registers

Condition Program Counter

Power-on Reset 000h

MCLR reset during normal operation 000h

MCLR reset during SLEEP 000h

WDT reset 000h

WDT Wake-up PC + 1

Brown-out Reset 000h

Interrupt Wake-up from SLEEP PC + 1(1)

Se escludiamo le condizioni di "risveglio" dove, giustamente il PC deve puntare all'istruzione successiva a quella a cui è andato in sleep, il PC parte sempre da zero!

Se vai a vedere la tabella dell'organizzazione della memoria trovi che alla locazione 0 00h c'èscritto RESET VECTOR e la locazione 0004h è indicata come Peripheral Interrupt Vector.

La loicazione 3ffh è l'ultima cella di memoria disponibile, quindi il tuo programma se funziona lo fa perchè somma due errori. Trova tutto a zero fino a 50h, quindi esegue come NOP, poi a 50h parte.

I manuali non basta leggerli, vanno anche capiti! smile.gif

Link al commento
Condividi su altri siti

  • 2 weeks later...
Agamennone_Ares

Buonasera,

ho seguito tutti i vs consigli e così ho riletto tutto.

Non essendo però molto bravo con l'inglese, non è detto che abbia capito, mentre i manuali in italiano, quelli non lì ho capiti sicuramente....

Sono riuscito a fare il generatore di nota con i 2 pulsanti in ASM e funziona veramente. Se vi interessa vi faccio vedere il sorgente: non ho usato il TMR0...

Adesso sono alle prese con MikroC, apparentemente, avendo molte librerie belle e pronte, sembra più facile, ma in realtà non è così.

Ho trovato vari manuali anche in italiano. Sono riuscito a realizzare quanto avevo fatto in ASM molto più semplicemente usando la funzione SOUND.

Ho anche recuperato un simulatore (real pic simulator) ed è tutta un'altra vita.

Ora sono qui per chiedervi gentilmente e pazientemente:

1) Un consiglio per un simulatore gratuito.

2) Qualche esempio semplice semplice.

3) Mi sapete spiegare quanto segue:

Sulla mia demoboard ho:

2 pulsanti su ra3,ra4 attivi bassi

1 buzzer piezo su ra0.

2 relè su ra1,ra2.

8 led su portb

Se uso

Button(&PORTA, 3, 1, 0) non funziona,

se invece uso

Button(&PORTA, 3, 1, 1) funziona, però avendo ra3,ra4 sempre a 1 a riposo, mi funziona al contrario e cioè i relè sono sempre eccitati fino a che premo i pulsanti.

Se invece non uso BUTTON e faccio così:

if (PORTA.b3==0) PORTA.b1= 1;

else PORTA.b1= 0;

va tutto bene.

Ho bisogno anche di capire la AND a bit. Perchè quanto sopra potrebbe esser fatto anche leggendo PORTA e mascherando ra0,ra1,ra2....

Considerando che ra3,ra4 sono attivi bassi...o no?

grazie1000

Link al commento
Condividi su altri siti

clap.gif Questa volta ti attacchi al tram dopo la risposta che hai dato l'ultima volta, ormai i vari Forum pullulano di pivelli che si sentono onnipotenti solo perche programmano un PIC, studia, e vedrai che magari tra qualche anno capirai tutto...

Il REAL PIC SIMULATOR tra un mese scade e non ci sono cr**k in giro...

Simulatori validi gratuiti non esistono dato la complessità nel realizzarli...

P.S. Io parlo per me naturalmente, gli altri sono sempre liberi di darti ancora retta...

Modificato: da GiRock
Link al commento
Condividi su altri siti

Girok clap.gif ( non male mi avete riportato indietro al mio vecchio Z80 ... quante discussione e incazzature).

Comunque qualche anno fa, quando è nato il pic una rivista di Elettronica ha trattato il prodotto in modo abbastanza aprofondito .. quella può essere una partenza saggia.

Questa volta un finale perfetto !!!

P.S.

i cr...k non si usano !!!! mad.gif

salvo se necessario biggrin.gif

Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...