c1b8 ha scritto:Noto che Paolino mi ha anticipato, ma posto lo stesso il mio messaggio per le considerazioni diverse dallo sleep.
Benissimo, hai integrato con altre info.

Ciao.
Paolo.
Moderatore: Paolino
c1b8 ha scritto:Noto che Paolino mi ha anticipato, ma posto lo stesso il mio messaggio per le considerazioni diverse dallo sleep.
#include P12F509.INC
__CONFIG B'000000001010'
ORG 10H
TIMER_1 RES 1
TIMER_2 RES 1
TIMER_3 RES 1
CONTEGGIO RES 1
CONTEGGIO_ACC RES 1
CONTEGGIO_LAMP RES 1
#DEFINE LED_GIALLO GPIO,0
#DEFINE LED_ROSSO GPIO,1
INIT MOVWF OSCCAL
MOVLW B'00001000' ;DEFINISCE GP3 COME INGRESSO, GLI ALTRI COME USCITE
TRIS GPIO
MOVLW B'00000000' ;PORTA A LIVELLO LOGICO BASSO TUTTE LE USCITE
MOVWF GPIO
MOVLW B'01000000'
OPTION
MOVLW D'255'
MOVWF TIMER_1
MOVLW D'255'
MOVWF TIMER_2
MOVLW D'8'
MOVWF TIMER_3
MOVLW D'10'
MOVWF CONTEGGIO
MOVLW D'100'
MOVWF CONTEGGIO_ACC
MOVLW D'10'
MOVWF CONTEGGIO_LAMP
MAIN ucr GPIO,3
GOTO MAIN
SEGNALE_FISSO BSF LED_GIALLO
CALL RITARDO
CALL RITARDO
CALL RITARDO
CALL RITARDO
CALL RITARDO
CALL RITARDO
CALL RITARDO
CALL RITARDO
SEGNALE_LAMP BCF LED_GIALLO
CALL RITARDO
BSF LED_GIALLO
CALL RITARDO
DECFSZ CONTEGGIO
GOTO SEGNALE_LAMP
MOVLW D'10'
MOVWF CONTEGGIO
BCF LED_GIALLO
ACCENSIONE BSF LED_ROSSO
CALL RITARDO
DECFSZ CONTEGGIO_ACC
GOTO ACCENSIONE
MOVLW D'100'
MOVWF CONTEGGIO_ACC
BCF LED_ROSSO
ACCENSIONE_LAMP BCF LED_ROSSO
CALL RITARDO_LENTO
BSF LED_ROSSO
CALL RITARDO
DECFSZ CONTEGGIO_LAMP
GOTO ACCENSIONE_LAMP
MOVLW D'10'
MOVWF CONTEGGIO_LAMP
BCF LED_ROSSO
LUCE_RECUPERO BSF LED_GIALLO
ucr GPIO,3
GOTO LUCE_RECUPERO
BCF LED_GIALLO
CALL RITARDO
CALL RITARDO
CALL RITARDO
CALL RITARDO
CALL RITARDO
CALL RITARDO
CALL RITARDO
CALL RITARDO
CALL RITARDO
CALL RITARDO
CALL RITARDO
CALL RITARDO
CALL RITARDO
CALL RITARDO
CALL RITARDO
SLEEP
GOTO MAIN
RITARDO DECFSZ TIMER_1
GOTO RITARDO
MOVLW D'255'
MOVWF TIMER_1
DECFSZ TIMER_2
GOTO RITARDO
MOVLW D'255'
MOVWF TIMER_2
RETURN
RITARDO_LENTO DECFSZ TIMER_1
GOTO RITARDO_LENTO
MOVLW D'255'
MOVWF TIMER_1
DECFSZ TIMER_2
GOTO RITARDO_LENTO
MOVLW D'255'
MOVWF TIMER_2
DECFSZ TIMER_3
GOTO RITARDO_LENTO
MOVLW D'8'
MOVWF TIMER_3
RETURN
END
#include P12F509.INC
__CONFIG B'000000001010'
ORG 0H
TIMER_1 RES 1
TIMER_2 RES 1
TIMER_3 RES 1
CONTEGGIO RES 1
CONTEGGIO_ACC RES 1
CONTEGGIO_LAMP RES 1
#DEFINE LED_GIALLO GPIO,0
#DEFINE LED_ROSSO GPIO,1
INIT MOVWF OSCCAL
MOVLW B'00001000' ;DEFINISCE GP3 COME INGRESSO, GLI ALTRI COME USCITE
xxxxxxx TRIS GPIO
MOVLW B'00000000' ;PORTA A LIVELLO LOGICO BASSO TUTTE LE USCITE
MOVWF GPIO
MOVLW B'01000000'
OPTION
MOVLW D'255'
MOVWF TIMER_1
MOVLW D'255'
MOVWF TIMER_2
MOVLW D'8'
xxxxxxx MOVWF TIMER_3
MOVLW D'10'
MOVWF CONTEGGIO
°
°
davidde ha scritto:L' unico dubbio che mi rimane è legato alla ORG 10H iniziale. Mi spiego, se al posto dell indirizzo iniziale 10H provo a partire dall' indirizzo 0H il programma non viene eseguito e simulandolo si vede che entra in un loop che va dalla riga TRIS GPIO alla riga MOVWF TIMER_3 (i punti esatti sono indicati nel codice qui sotto con una fila di x)... non riesco proprio a capire il perché:
ORG 0H
TIMER_1 RES 1
TIMER_2 RES 1
TIMER_3 RES 1
CONTEGGIO RES 1
CONTEGGIO_ACC RES 1
CONTEGGIO_LAMP RES 1
ORG 10H ; è sufficnete indicare un numero maggiore o uguale a 07h
TIMER_1 RES 1
TIMER_2 RES 1
TIMER_3 RES 1
CONTEGGIO RES 1
CONTEGGIO_ACC RES 1
CONTEGGIO_LAMP RES 1
ORG 07H
; definisci qui le tue variabili
c1b8 ha scritto:Solo una osservazione sul flow-chart: i blocchi di test (i rombi), come tutti i blocchi, hanno un solo input, nel primo controllo "pulsante premuto" hai disegnato 2 input, si capisce lo stesso ma secondo me non è sintatticamente corretto.
PROCESSOR P12F509
RADIX DEC
INCLUDE P12F509.INC
__CONFIG 000000001010B
ORG 7H
TIMER_1 RES 1
TIMER_2 RES 1
TIMER_3 RES 1
CONTEGGIO RES 1
CONTEGGIO_ACC RES 1
CONTEGGIO_LAMP RES 1
#DEFINE LED_GIALLO GPIO,0
#DEFINE LED_ROSSO GPIO,1
#DEFINE INTERRUTTORE GPIO,3
ORG 0H
MOVWF OSCCAL
MOVLW 00001000B ;DEFINISCE GP3 COME INGRESSO, GLI ALTRI COME USCITE
TRIS GPIO
MOVLW 00000000B ;PORTA A LIVELLO LOGICO BASSO TUTTE LE USCITE
MOVWF GPIO
MOVLW 01000000B
OPTION
x MOVLW 255
MOVWF TIMER_1
MOVLW 255
MOVWF TIMER_2
MOVLW 8
x MOVWF TIMER_3
MOVLW 10
MOVWF CONTEGGIO
MOVLW 100
°
°
CBLOCK 07H
TIMER_1 : 1
TIMER_2 : 1
TIMER_3 : 1
CONTEGGIO : 1
CONTEGGIO_ACC : 1
ESEMPIO : 2
ENDC
Non escludo che il problema che hai avuto con OSCCAL sia dovuto a qualche errore di indirizzo.
PROCESSOR P=P12F509 ; indica al compilatore per quale PIC deve compilare il programma
RADIX DEC ; indica che i valori numerici non specificati sono in radice 10
INCLUDE P12F509.INC ; include il file specificato nel codice sorgente
__CONFIG 000000001010B ; definisce il valore da memorizzare nella word di configurazione
CBLOCK 7H ; definisce le variabili del programma indicando al compilatore di iniziare a riservare le locazioni di memoria dall' indirizzo 7H
TIMER_1 : 1 ; riserva un byte (l'indirizzo è scelto automaticamente dal compilatore)
TIMER_2 : 1 ; riserva un byte (l'indirizzo è scelto automaticamente dal compilatore)
TIMER_3 : 1 ; riserva un byte (l'indirizzo è scelto automaticamente dal compilatore)
CONTEGGIO : 1 ; riserva un byte (l'indirizzo è scelto automaticamente dal compilatore)
CONTEGGIO_ACC : 1 ; riserva un byte (l'indirizzo è scelto automaticamente dal compilatore)
CONTEGGIO_LAMP : 1 ; riserva un byte (l'indirizzo è scelto automaticamente dal compilatore)
ENDC ; termina la CBLOCK
#DEFINE LED_GIALLO GPIO,0 ; definisce come led_giallo il pin GPIO,0
#DEFINE LED_ROSSO GPIO,1 ; definisce come led_rosso il pin GPIO,1
#DEFINE INTERRUTTORE GPIO,3 ; definisce come interruttore il pin GPIO,3
ORG 0H ; informa il compilatore di cominciare a scrivere i dati che seguono dall'
; indirizzo 0H della memoria programma
MOVWF OSCCAL ; carica il registro OSCCAL con il valore contenuto all' indirizzo 3FF per calibrare l' oscillatore interno
MOVLW 00001000B
TRIS GPIO ; definisce il pin GP3 come ingresso e tutti gli altri come uscite
MOVLW 00000000B
MOVWF GPIO ; porta a livello logico basso tutte le uscite
MOVLW 01000000B
OPTION ; configura il registro OPTION abilitando il risveglio (dalla sleep) per il cambio di stato logico dei pin e disabilitando le resistenze di pull-up
MOVLW 255
MOVWF TIMER_1
MOVLW 255
MOVWF TIMER_2
MOVLW 8
MOVWF TIMER_3
MOVLW 10
MOVWF CONTEGGIO
MOVLW 100
MOVWF CONTEGGIO_ACC
MOVLW 10
MOVWF CONTEGGIO_LAMP
MAIN ucr INTERRUTTORE
GOTO MAIN
SEGNALE_FISSO BSF LED_GIALLO
CALL RITARDO
CALL RITARDO
CALL RITARDO
CALL RITARDO
CALL RITARDO
CALL RITARDO
CALL RITARDO
CALL RITARDO
SEGNALE_LAMP BCF LED_GIALLO
CALL RITARDO
BSF LED_GIALLO
CALL RITARDO
DECFSZ CONTEGGIO
GOTO SEGNALE_LAMP
MOVLW 10
MOVWF CONTEGGIO
BCF LED_GIALLO
ACCENSIONE BSF LED_ROSSO
CALL RITARDO
DECFSZ CONTEGGIO_ACC
GOTO ACCENSIONE
MOVLW 100
MOVWF CONTEGGIO_ACC
BCF LED_ROSSO
ACCENSIONE_LAMP BCF LED_ROSSO
CALL RITARDO_LENTO
BSF LED_ROSSO
CALL RITARDO
DECFSZ CONTEGGIO_LAMP
GOTO ACCENSIONE_LAMP
MOVLW 10
MOVWF CONTEGGIO_LAMP
BCF LED_ROSSO
LUCE_RECUPERO BSF LED_GIALLO
ucr INTERRUTTORE
GOTO LUCE_RECUPERO
BCF LED_GIALLO
CALL RITARDO
CALL RITARDO
CALL RITARDO
CALL RITARDO
CALL RITARDO
CALL RITARDO
CALL RITARDO
CALL RITARDO
CALL RITARDO
CALL RITARDO
CALL RITARDO
CALL RITARDO
CALL RITARDO
CALL RITARDO
CALL RITARDO
SLEEP
GOTO MAIN
RITARDO DECFSZ TIMER_1
GOTO RITARDO
MOVLW 255
MOVWF TIMER_1
DECFSZ TIMER_2
GOTO RITARDO
MOVLW 255
MOVWF TIMER_2
RETURN
RITARDO_LENTO DECFSZ TIMER_1
GOTO RITARDO_LENTO
MOVLW 255
MOVWF TIMER_1
DECFSZ TIMER_2
GOTO RITARDO_LENTO
MOVLW 255
MOVWF TIMER_2
DECFSZ TIMER_3
GOTO RITARDO_LENTO
MOVLW 8
MOVWF TIMER_3
RETURN
END
Torna a Realizzazioni, interfacciamento e nozioni generali.
Visitano il forum: Nessuno e 14 ospiti