Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

errori in MPLAB

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[21] Re: errori in MPLAB

Messaggioda Foto UtentePaolino » 27 feb 2012, 21:53

Ok, attendiamo di leggere il codice ;-)

Ciao.

Paolo.
"Houston, Tranquillity Base here. The Eagle has landed." - Neil A.Armstrong

-------------------------------------------------------------

PIC Experience - http://www.picexperience.it
Avatar utente
Foto UtentePaolino
32,6k 8 12 13
G.Master EY
G.Master EY
 
Messaggi: 4226
Iscritto il: 20 gen 2006, 11:42
Località: Vigevano (PV)

0
voti

[22] Re: errori in MPLAB

Messaggioda Foto Utenteandrew93 » 29 feb 2012, 20:43

eccoti il listato, dagli un occhio con calma e se hai consigli sono sempre ben accetti. ;-)
Codice: Seleziona tutto
main:
      banksel      9Fh         
      movlw      80h   
      movwf      9Fh         ; giustificazione destra del risultato ADC, -Vrif=Vss, +Vrif=Vdd
      banksel      89h
      bsf         89h,0      ; RE0 impostato come ingresso
      banksel      188h
      bsf         188h,5      ; RE0 impostato come analogico
      banksel      1Fh
      movlw      55h         ; Fosc/8, CH=AN5, ADC ON
      movwf      1Fh
ritardo:
      banksel      20h
      movlw      0Ah         ; numero di istruzioni per ritardare il sistema di 12uS (12 istruzioni)
      movwf      20h
ritardoi:                  ; routine ritardo sistema per aquisizione valore analogico
      decf      20h,1      ; decrementa di 1 il registro 20h
      btfss      03h,2      ; test di Z (STATUS): se 0 ripeti processo, se 1 avvia sistema:
      goto      ritardoi   
convon:
      bsf         1Fh,1      ; inizio conversione
test:
      btfsc      1Fh,1      ; test di GO (ADCON0): se 0 è finita la conversione, se 1 la conversione è in corso
      goto       test
      banksel      1Eh
      movf      1Fh,W      ; sposta parte alta risultato nell'accumulatore
      movwf      110h      ; sposta contenuto dell'accumulatore nel registro 110h
      banksel      9Eh
      movf      9Eh,W      ; sposta parte bassa risultato nell'accumulatore
      movwf      190h      ; sposta contenuto dell'accumulatore nel registro 190h
confronto:
      movfw      110h      ; sposta contenuto del 110h nell'accumulatore
      sublw      parte alta soglia bassa; confronto tra 110h e parte alta soglia bassa
      bc         sottoinf
      movfw      110h      ; sposta contenuto del 110h nell'accumulatore
      sublw      parte alta soglia alta; confronto tra 110h e parte alta soglia alta
      bc         sottosup
soprasup:
      movfw      190h      ; sposta contenuto del 190h nell'accumulatore
      sublw      parte bassa soglia alta; confronto tra 190h e parte bassa soglia alta
      btfsc      03h,0       ; test C (STATUS): se 0 attiva motorino, se 1 è sotto la soglia
      goto      sottosup
motorino:
      banksel      05h
      clrf      05h         ; inizializzazione port A
      banksel      188h
      clrf      188h      ; port A impostato come digitale
      banksel      05h
      movlw      17h
      movwf      05h         ; RA<0,2-4> uscita alte, RA<3-5,7> uscite alte
ritardo2:      
      banksel      21h
      movlw      01h
      movwf      21h
ritardoi2
      decf      21h,1
      btfss      03h,2      ; test Z (STATUS): se 0 ripati processo se 1 proegui programma
      goto        ritardoi2   ; routine per ritardo per dare un impulso di clock per far fare un passo al motore
      banksel      05h
      clrf      05h         ; inizializzazione port   A
      banksel      188h
      clrf      188h      ; port A tutto digitale
      banksel    85h
      clrf      85h         ; port A tutto uscita
      banksel    05h
      movlw      1Fh         
      movwf      05h         ; RA<0;4> uscite alte, RA<5;7> uscite basse
      goto       main
sottosup:
      banksel      05h   
      clrf      05h         ; inizializzazione port A
      banksel    188h
      clrf      188h      ; port A impostato come digitale
      banksel      85h
      clrf      85h         ; port A impostato come uscita
      banksel      05h
      movlw      1Ch         
      movwf      05h         ; RA<4;2> impostate come uscite alte, RA<7;5,1,0> come uscite basse
      goto      main
sottoinf:
      movfw      190h      ; sposta contemuto del 190h nell'accumulatore
      sublw      parte bassa soglia bassa; confronto tra 190h e parte bassa soglia bassa
      btfss      03h,0      ; test C (STATUS): se 0 si è sopra la soglia bassa, se 1 attiva motore
      goto      sottosup
      goto      motorino



questo è quanto sono riuscito a produrre

andrew
Ultima modifica di Foto UtentePaolino il 29 feb 2012, 20:51, modificato 1 volta in totale.
Motivazione: Aggiunti i tag [code] e [/code] per inserire il codice
Avatar utente
Foto Utenteandrew93
5 1 5
Frequentatore
Frequentatore
 
Messaggi: 104
Iscritto il: 8 gen 2011, 18:58
Località: castelmarte

0
voti

[23] Re: errori in MPLAB

Messaggioda Foto UtentePaolino » 6 mar 2012, 8:57

Foto Utenteandrew93, non ho ancora letto il tuo codice. C'è una cosa però che mi lascia perplesso: perché utilizzi i valori numerici dei dati piuttosto che le label? Per esempio, al posto di scrivere:
Codice: Seleziona tutto
CLRF 06h


potresti scrivere

Codice: Seleziona tutto
CLRF PORTB


e sicuramente sarebbe tutto più chiaro e portabile, non trovi?

Ciao.

Paolo.
"Houston, Tranquillity Base here. The Eagle has landed." - Neil A.Armstrong

-------------------------------------------------------------

PIC Experience - http://www.picexperience.it
Avatar utente
Foto UtentePaolino
32,6k 8 12 13
G.Master EY
G.Master EY
 
Messaggi: 4226
Iscritto il: 20 gen 2006, 11:42
Località: Vigevano (PV)

0
voti

[24] Re: errori in MPLAB

Messaggioda Foto Utenteandrew93 » 7 mar 2012, 16:10

Sicuramente è più chiaro e portabile, sinceramente l'ho fatto perché credevo che se gli mettevo il nome il PIC non sapeva dove doveva andare, tutto qui. Quindi ho supposto male io.....
Grazie mille per il consiglio ;-)

Andrew
Avatar utente
Foto Utenteandrew93
5 1 5
Frequentatore
Frequentatore
 
Messaggi: 104
Iscritto il: 8 gen 2011, 18:58
Località: castelmarte

0
voti

[25] Re: errori in MPLAB

Messaggioda Foto UtenteRobert8 » 7 mar 2012, 16:26

Nella #include <p16f887.inc> ; vi sono tutti i nomi come questi:
Codice: Seleziona tutto
PORTA                        EQU     H'0005'
PORTB                        EQU     H'0006'
PORTC                        EQU     H'0007'

sono definiti come costanti ed equivale a scrivere l'indirizzo. Sarà il compilatore, prima del passo di compilazione vero e proprio, a fare un change dei nomi con i valori numerici.
Ultima modifica di Foto UtentePaolino il 8 mar 2012, 13:51, modificato 1 volta in totale.
Motivazione: Usare i tag [code] e [/code] per inserire il codice.
Avatar utente
Foto UtenteRobert8
3.449 2 8 13
Master EY
Master EY
 
Messaggi: 373
Iscritto il: 15 giu 2011, 16:30

0
voti

[26] Re: errori in MPLAB

Messaggioda Foto Utenteandrew93 » 7 mar 2012, 16:35

Quindi con quella direttiva cono già inglusi tutti gli idirizzi di tutti i registri??
Scusa la mia ignoranza in materia :oops: :oops: :oops:
Andrew
Avatar utente
Foto Utenteandrew93
5 1 5
Frequentatore
Frequentatore
 
Messaggi: 104
Iscritto il: 8 gen 2011, 18:58
Località: castelmarte

0
voti

[27] Re: errori in MPLAB

Messaggioda Foto UtenteRobert8 » 7 mar 2012, 17:01

Certo: tutti i registri e tutti i bit di ognuno.
Per esempio:

Codice: Seleziona tutto
;----- INTCON Bits --------------------------------------------------------
GIE                          EQU     H'0007'
PEIE                         EQU     H'0006'
T0IE                         EQU     H'0005'
TMR0IE                    EQU     H'0005'
INTE                         EQU     H'0004'
RBIE                         EQU     H'0003'
T0IF                         EQU     H'0002'
TMR0IF                    EQU     H'0002'
INTF                         EQU     H'0001'
RBIF                         EQU     H'0000'
Ultima modifica di Foto UtentePaolino il 8 mar 2012, 13:52, modificato 1 volta in totale.
Motivazione: Usare i tag [code] e [/code] per inserire il codice.
Avatar utente
Foto UtenteRobert8
3.449 2 8 13
Master EY
Master EY
 
Messaggi: 373
Iscritto il: 15 giu 2011, 16:30

0
voti

[28] Re: errori in MPLAB

Messaggioda Foto Utenteandrew93 » 7 mar 2012, 17:03

Grazie mille per la dritta ;-) ;-) ;-)

adnrew
Avatar utente
Foto Utenteandrew93
5 1 5
Frequentatore
Frequentatore
 
Messaggi: 104
Iscritto il: 8 gen 2011, 18:58
Località: castelmarte

0
voti

[29] Re: errori in MPLAB

Messaggioda Foto Utenteandrew93 » 26 mar 2012, 18:05

Un dubbio che mi ha assalito improvvisamente, mi hai detto che per fare un confronto ci vogliono le istruzioni (SUBLW, seguita da BC) ma se io lo facesso con òe istruzioni: XORWF seguita da BTFSC del bit di zero dello STATUS REGISTER, non è un po la stessa cosa??

Andrew
Avatar utente
Foto Utenteandrew93
5 1 5
Frequentatore
Frequentatore
 
Messaggi: 104
Iscritto il: 8 gen 2011, 18:58
Località: castelmarte

0
voti

[30] Re: errori in MPLAB

Messaggioda Foto UtenteRobert8 » 26 mar 2012, 18:54

Dipende da cosa devi fare.
La XORWF imposta Z = 1 se il tuo registro è uguale a W cioè se il risultato della XOR è zero.

Se, invece, devi stimare un minore, maggiore o uguale ti conviene la SUBWF o SUBLW col test su C e Z.

In entrambi i casi devi usare la BTFSC o BTFSS per test e salto, la BC non è presente nel PIC16F887.
Avatar utente
Foto UtenteRobert8
3.449 2 8 13
Master EY
Master EY
 
Messaggi: 373
Iscritto il: 15 giu 2011, 16:30

PrecedenteProssimo

Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 14 ospiti