mister999 Inserito: 18 agosto 2004 Segnala Inserito: 18 agosto 2004 Ciao!E' la prima volta che posto qui.Sono due anni che nel mio ristrettissimo tempo libero mi dedico a qualche stupidagine di eletronica e diciamo che le cose di base sembro averele imparate.Da poco ho iniziato la sperimentazione con qualche PIC e sono riuscito a costruirmi qualche bel circuito decorativo (Supercar....).Adesso vorrei passare a qualcosa di più serio... Vorrei costruirmi un timer che conti alla rovescia che abbia le seguenti caratteristiche:- visualizzi almeno i decimi di secondo (se è possiible anche i centesimi)- dato che visualizzo i decimi, mi basta che conti da 900 secondi...- date le precedenti caratteristiche, se non ci sono i minuti non me ne frega niente, ma se si possono implementare senza fatica sarebbe meglio...- abbia pulsanti di Start/Stop/Pause- Allo zero attivi un relè e soprattutto emani un suono, del tipo un cicalino per circa due secondi...- il tutto dovrebbe essere il + economico possibile- + piccolo possibile- funzionante anche con una pila da 9vIL TUTTO REALIZZABILE DOVREBBE ESSERE REALIZZABILE CON I PIC (anche + DI 1) SE E' IMPOSSIBILE VANNO BENE ANCHE ALTRI PROCESSORI L'IMPORTANTE E' CHE NON COSTINO TROPPO E CHE SIANO FACILMENTE PROGRAMMABILI...Grazie 10000000000000000000 a che vorrà darmi una mano, anche piccola... magari anche modificando un progetto esistente.
Livio Orsini Inserita: 18 agosto 2004 Segnala Inserita: 18 agosto 2004 Il lavoro è pittosto semplice....se le tue conoscenze HW & Sw sono discrete. In pratica ti basta usare un PIC con un quarzo, per avere una buona precisione, poi usando l'interrupt del timer 0 puoi programmare tutti i tempi che vuoi, sia in avanti che indietro. Non specifichi cosa vuoi usare come interfaccia Tastierino + display? pulsanti up-down più sette segmenti?
mister999 Inserita: 19 agosto 2004 Autore Segnala Inserita: 19 agosto 2004 Grazie 10000 per la disponibilità...Beh, come interfaccia vorrei la cosa più semplice possibile, non mi importa... più facile è meglio è.comunque intendo usare i display 7 segmenti... per me andrebbe bene 000:0 =(secondi:decimi)oppure se non comporta grosse complicazioni 000:00 =(secondi:centesimi)oppure ancora (ma credo che le grosse complicazioni le comporti) 00:00:0/0 =(minuti:secondi:decimi o centesimi).Se magari potessi dirmi qualcosa di più dettagliato te ne sarei grato... ad esempio ricordo che per pilotare i display c'era bisogno di un driver per ogni segmento...ma poi come dico di scrivere in ogni display una cifra diversa?Ciao!
dlgcom Inserita: 19 agosto 2004 Segnala Inserita: 19 agosto 2004 Da quello che ho capito , vuoi il progetto completo di schema e software o vuoi dei consigli?Con un pic puoi fare tutto , dipende dalla tua esperienza .In rete ci sono molti progetti con pic QUESTO e' un esempio.
walterword Inserita: 19 agosto 2004 Segnala Inserita: 19 agosto 2004 (modificato) modificalo in base al tuo PIC e impsta il prescaler in base al tuo quarzo Conta da 1 a 9,999 secondi , quindi anche con i millesimi I display sono multiplexati e pilotati da 4 transistor BC337 TITLE 'TEMPORIZZATORE CICLICO A 4 DISPLAY' LIST F=INHX8M, P=16C57 ;xt 3.2768mhz wdt=yes;------------------ definizione costanti per temporizzazioni ----------------MSEC5 equ .128 ;settaggio prescaler per ottenere 5msMSEC1 equ .50 ;conteggi da 20ms per un totale di 1sMAXIM equ .99 ;massimo valore ammesso per il displayINTER1 equ .40 ;tempo tra primi due incrementi basso (x 20ms)INTER2 equ .1 ;tempo tra due incrementi alto (x 20ms);--------------------- definizione costanti per display ---------------------ZER_O equ 003H ;associa label a 003HUNO equ 09FH ;associa label a 09FHDUE equ 025H ;associa label a 025HTRE equ 00DH ;associa label a 00DHQUATT equ 099H ;associa label a 099HCINQUE equ 049H ;associa label a 049HSEI equ 041H ;associa label a 041HSETTE equ 01FH ;associa label a 01FHOTTO equ 001H ;associa label a 001HNOVE equ 009H ;associa label a 009H;----------------------------------------------------------------------------FZERO equ 0 ;associa label a 0RTCC equ 1 ;associa label a 1F2 equ 2 ;associa label a 2F3 equ 3 ;associa label a 3FSR equ 4 ;associa label a 4F5 equ 5 ;associa label a 5F6 equ 6 ;associa label a 6F7 equ 7 ;associa label a 7F8 equ 8 ;conteggio bit 93F9 equ 9 ;byte 93F10 equ 0AH ;ritardo scrittura eepromF11 equ 0BH ;ritardo scrittura eepromF12 equ 0CH ;registro conteggio 1sF13 equ 0DH ;registro conteggio 00-99 dx tempo lavoroF14 equ 0EH ;registro conteggio 00-99 sx tempo lavoroF15 equ 0FH ;registro conteggio 00-99 dx tempo pausaF16 equ 10H ;registro conteggio 00-99 sx tempo pausaF17 equ 11H ;bit 0: 0--> pausa 1--> lavoro ;bit 1: 0--> prog pausa 1--> prog lavoro ;bit 2: 1--> memoria pulsante stop premuto ;bit 3: 1--> memoria puls. avanti premuto ;bit 4: 1--> memoria puls. indietro premuto ;bit 5: 1--> memoria ritorno da stop in timer ;bit 6: 1--> memoria stop premuto ;bit 7: Modificato: 19 agosto 2004 da walterword
walterword Inserita: 19 agosto 2004 Segnala Inserita: 19 agosto 2004 F18 equ 12H ;contatore per lampeggio led in programmazioneF19 equ 13H ;contatore per passo pulsanti indietro in prog.F20 equ 14H ;contatore per passo pulsanti avanti in prog.F21 equ 15H ;associa label a 15HF22 equ 16H ;associa label a 16HF23 equ 17H ;associa label a 17HF24 equ 18H ;associa label a 18HF25 equ 19H ;associa label a 19HF26 equ 1AH ;associa label a 1AHF27 equ 1BH ;registro visualizzazione decineF28 equ 1CH ;registro visualizzazione unitaF29 equ 1DH ;copia f13 per conversioneF30 equ 1EH ;copia f14 per conversioneF31 equ 1FH ;copia per controllo numero > 99;----------------------------------------------------------------------------CS equ 7 ;chip select f6,7CLK equ 6 ;clock f6,6DI equ 5 ;data input f6,5DO equ 4 ;data output f6,4RELE equ 0 ;rele f6,0LEDR equ 1 ;led rosso f6,1LEDV equ 2 ;led verde f6,2J1 equ 3 ;jumper per ciclico f6,3;---------------------------------------------------------------------------- ORG 0 ;pagina 0;---------------------- routine di attesa fine 5ms --------------------------WAI5MS clrwdt ;azzera watchdog movf RTCC,0 ;controllo se finiti 5ms SKPZ ;equivale a btfss 3,2 goto WAI5MS ;vai a WAI5MS movlw MSEC5 ;copia in W il numero MSEC5 movwf RTCC ;copia W nel registro RTCC retlw 0 ;ritorna da subroutine con W = 0; -------------------- subroutine tx stop 93 --------------------------------STO93 bcf F6,CLK ;azzera bit x del registro F6 bcf F6,DI ;azzera bit x del registro F6 bcf F6,CS ;azzera bit x del registro F6 retlw 0 ;ritorna da subroutine con W = 0; --------------- subroutine tx stop 93 in scrittura ------------------------STO93W bcf F6,DI ;azzera bit x del registro F6 bcf F6,CS ;azzera bit x del registro F6 bsf F6,CS ;setta bit x del registro F6 movlw .200 ;copia in W il numero .200 movwf F10 ;copia W nel registro F10DE0 movlw 0B1H ;copia in W il numero 0B1H movwf F11 ;copia W nel registro F11DE1 clrwdt ;azzera watchdog bcf F6,CLK ;azzera bit x del registro F6 btfsc F6,DO ;testa bit x del registro F6 e salta se = 0 goto SCRIT ;vai a SCRIT bsf F6,CLK ;setta bit x del registro F6 decfsz F11 ;decrementa registro F11 salta se = 0 -> F11 goto DE1 ;vai a DE1 decfsz F10 ;decrementa registro F10 salta se = 0 -> F10 goto DE0 ;vai a DE0SCRIT bcf F6,CS ;azzera bit x del registro F6 retlw 0 ;ritorna da subroutine con W = 0; -------------------- subroutine tx byte 93 --------------------------------; f8 = conteggio bit f9 = byte da tx; ---------------------------------------------------------------------------STA93 bsf F6,CS ;setta bit x del registro F6 bsf F6,DI ;setta bit x del registro F6 bsf F6,CLK ;setta bit x del registro F6TX93 movlw 08H ;copia in W il numero 08H movwf F8 ;copia W nel registro F8LPTX93 clrwdt ;azzera watchdog bcf F6,CLK ;azzera bit x del registro F6 rlf F9 ;shifta a sinistra il registro F9 -> F9 bcf F6,DI ;azzera bit x del registro F6 btfsc F3,0 ;testa bit 0 del registro F3 e salta se = 0 bsf F6,DI ;setta bit x del registro F6 bsf F6,CLK ;setta bit x del registro F6 decfsz F8 ;decrementa registro F8 salta se = 0 -> F8 goto LPTX93 ;vai a LPTX93 retlw 0 ;ritorna da subroutine con W = 0; -------------------- subroutine rx byte 93 --------------------------------; f8 = conteggio bit f9 = byte ricevuto
walterword Inserita: 19 agosto 2004 Segnala Inserita: 19 agosto 2004 ; ---------------------------------------------------------------------------RX93 movlw .8 ;copia in W il numero .8 movwf F8 ;copia W nel registro F8 clrf F9 ;azzera registro F9LP93 clrwdt ;azzera watchdog bcf F6,CLK ;azzera bit x del registro F6 bcf F3,0 ;azzera bit 0 del registro F3 rlf F9 ;shifta a sinistra il registro F9 -> F9 btfsc F6,DO ;testa bit x del registro F6 e salta se = 0 bsf F9,0 ;setta bit 0 del registro F9 bsf F6,CLK ;setta bit x del registro F6 decfsz F8 ;decrementa registro F8 salta se = 0 -> F8 goto LP93 ;vai a LP93 retlw 0 ;ritorna da subroutine con W = 0;---------------------- conversione bcd decimale ----------------------------; in w va passato il byte da convertireBINBCD movwf F29 ;ritorna unita movwf F31 ;copia per controllo > 99 clrf F30 ;ritorna decineGTENT movlw .10 ;copia in W il numero .10 subwf F29,0 ;sottrai W da registro F29 -> W btfss F3,0 ;testa bit 0 del registro F3 e salta se = 1 goto OVER ;vai a OVER movwf F29 ;copia W nel registro F29 incf F30 ;incrementa registro F30 -> F30 goto GTENT ;vai a GTENTOVER movlw MAXIM + 1 ;copia in W il numero MAXIM + 1 subwf F31 ;sottrai W da registro F31 -> F31 btfss F3,0 ;testa bit 0 del registro F3 e salta se = 1 retlw 0 ;ritorna da subroutine con W = 0 movlw .1 ;numero > 99 movwf F29 ;unita movwf F14 ;copia W nel registro F14 movwf F16 ;copia W nel registro F16 clrf F30 ;decine clrf F13 ;azzera registro F13 clrf F15 ;azzera registro F15 retlw 0 ;ritorna da subroutine con W = 0; ------------------- presentazione cifre su porta c ------------------------; in w la cifra da visualizzareDISPL addwf F2,1 ;somma W al registro F2 -> F2 retlw ZER_O ;numero 0 retlw UNO ;numero 1 retlw DUE ;numero 2 retlw TRE ;numero 3 retlw QUATT ;numero 4 retlw CINQUE ;numero 5 retlw SEI ;numero 6 retlw SETTE ;numero 7 retlw OTTO ;numero 8 retlw NOVE ;numero 9 retlw ZER_O ;non ammesso; ------------------ test pressione pulsante di stop ------------------------TSTSTP movlw 0EFH ;copia in W il numero 0EFH movwf F7 ;copia W nel registro F7 clrwdt ;azzera watchdog btfss F7,3 ;testa bit 3 del registro F7 e salta se = 1 goto TESTAS ;pulsante stop premuto bcf F17,6 ;clear memoria stop premuto retlw 0 ;ritorna da subroutine con W = 0TESTAS btfsc F17,6 ;testo se riconferma stop premuto goto STOP ;vai a STOP bsf F17,6 ;setto memoria stop premuto retlw 0 ;ritorna da subroutine con W = 0;------------------------ leggi dati da eeprom ------------------------------READ93 clrwdt ;azzera watchdog movlw 080H ;leggi da memoria 0 movwf F9 ;copia W nel registro F9 call STA93 ;salta alla subroutine STA93 bcf F6,CLK ;dummy load bsf F6,CLK ;setta bit x del registro F6 call RX93 ;salta alla subroutine RX93 movf F9,0 ;copia registro F9 -> W movwf F13 ;primo byte call RX93 ;salta alla subroutine RX93 movf F9,0 ;copia registro F9 -> W movwf F14 ;secondo byte call STO93 ;salta alla subroutine STO93 movlw 081H ;leggi da memoria 1 movwf F9 ;copia W nel registro F9 call STA93 ;salta alla subroutine STA93 bcf F6,CLK ;dummy load bsf F6,CLK ;setta bit x del registro F6 call RX93 ;salta alla subroutine RX93 movf F9,0 ;copia registro F9 -> W movwf F15 ;primo byte call RX93 ;salta alla subroutine RX93 movf F9,0 ;copia registro F9 -> W movwf F16 ;secondo byte call STO93 ;salta alla subroutine STO93 retlw 0 ;ritorna da subroutine con W = 0;------------------------ visualizzazione numero ----------------------------VISUAL btfsc F17,0 ;testo se in lavoro o in pausa goto STATLA ;vai a STATLA movf F15,0 ;copia registro F15 -> W movwf F27 ;copia W nel registro F27 movf F16,0 ;copia registro F16 -> W movwf F28 ;copia W nel registro F28 goto VISU ;vai a VISUSTATLA movf F13,0 ;copia registro F13 -> W movwf F27 ;copia W nel registro F27 movf F14,0 ;copia registro F14 -> W movwf F28 ;copia W nel registro F28VISU clrw ;azzera W TRIS F7 ;porta c out movf F27,0 ;copia registro F27 -> W call BINBCD ;salta alla subroutine BINBCD movf F30,0 ;copia registro F30 -> W call DISPL ;salta alla subroutine DISPL movwf F7 ;copia W nel registro F7 bcf F5,0 ;azzera bit 0 del registro F5 call WAI5MS ;salta alla subroutine WAI5MS bsf F5,0 ;setta bit 0 del registro F5 movf F29,0 ;copia registro F29 -> W call DISPL ;salta alla subroutine DISPL movwf F7 ;copia W nel registro F7 bcf F5,1 ;azzera bit 1 del registro F5 call WAI5MS ;salta alla subroutine WAI5MS bsf F5,1 ;setta bit 1 del registro F5 movf F28,0 ;copia registro F28 -> W call BINBCD ;salta alla subroutine BINBCD movf F30,0 ;copia registro F30 -> W call DISPL ;salta alla subroutine DISPL movwf F7 ;copia W nel registro F7 bcf F5,2 ;azzera bit 2 del registro F5 call WAI5MS ;salta alla subroutine WAI5MS bsf F5,2 ;setta bit 2 del registro F5 movf F29,0 ;copia registro F29 -> W call DISPL ;salta alla subroutine DISPL movwf F7 ;copia W nel registro F7 bcf F5,3 ;azzera bit 3 del registro F5 call WAI5MS ;salta alla subroutine WAI5MS bsf F5,3 ;setta bit 3 del registro F5 movlw 00FH ;copia in W il numero 00FH TRIS F7 ;porta c0..c3 in altre out movlw 0FFH ;copia in W il numero 0FFH movwf F7 ;copia W nel registro F7 retlw 0 ;ritorna da subroutine con W = 0;----------------------------------------------------------------------------START movlw B'0000' ;porta a out TRIS F5 ;copia W nel registro TRIS movlw B'1111' ;copia in W il numero B'1111' movwf F5 ;copia W nel registro F5 movlw 018H ;copia in W il numero 018H TRIS F6 ;porta b0..b2,b5..b7 out b3,b4 in movlw 01EH ;copia in W il numero 01EH movwf F6 ;copia W nel registro F6 clrw ;azzera W TRIS F7 ;porta c out movlw 0FFH ;copia in W il numero 0FFH movwf F7 ;copia W nel registro F7 movlw B'00000100' ;rtcc interno con prescaler 1:32 OPTION ;copia W nel registro option movlw MSEC5 ;copia in W il numero MSEC5 movwf RTCC ;copia W nel registro RTCC clrf FSR ;azzera registro FSR bcf F17,5 ;memoria ritorno start non da timerINI call READ93 ;leggi tempi in eepromMAIN movlw MSEC1 ;inizializzo contatore ad 1s movwf F12 ;copia W nel registro F12 bsf F17,0 ;memoria ciclo lavoro bcf F17,6 ;clear memoria stop premuto btfss F6,J1 ;testo se ciclico o timer goto CICLIC ;vai a CICLIC goto TIMER ;vai a TIMER;----------------------------------------------------------------------------TIMER clrwdt ;azzera watchdog bcf F6,RELE ;rele off bsf F6,LEDR ;led rosso off bcf F6,LEDV ;led verde on btfsc F17,5 ;vedo se ritorno da timer goto LPTIM ;vai a LPTIMRILSTA call VISUAL ;salta alla subroutine VISUAL bcf F7,4 ;attesa eventuale rilascio clrwdt ;azzera watchdog btfss F7,0 ;aspetto pulsante start-timer goto RILSTA ;vai a RILSTA call WAI5MS ;salta alla subroutine WAI5MSLPTIM call VISUAL ;salta alla subroutine VISUAL bcf F7,4 ;azzera bit 4 del registro F7 clrwdt ;azzera watchdog btfss F7,0 ;aspetto pulsante start-timer goto CICLIC ;vai a CICLIC bcf F7,4 ;azzera bit 4 del registro F7 clrwdt ;azzera watchdog btfsc F7,3 ;aspetto stop x programmazione goto LPTIM ;vai a LPTIM goto ATTESA ;vai a ATTESA;----------------------------------------------------------------------------CICLIC bcf F6,LEDR ;led rosso on bsf F6,RELE ;rele on bsf F6,LEDV ;led verde off bsf F17,0 ;memoria ciclo lavoro bcf F17,5 ;memoria ritorno start non in timerLPCIC1 call VISUAL ;salta alla subroutine VISUAL call TSTSTP ;controllo se premuto pulsante stop decfsz F12 ;controllo se scaduto 1s goto LPCIC1 ;vai a LPCIC1 movlw MSEC1 ;ripristino conteggio 1s movwf F12 ;copia W nel registro F12 decfsz F14,1 ;sottraggo unita goto NO_ZE ;vai a NO_ZE movf F13,0 ;unita < 0 SKPNZ ;equivale a btfsc 3,2 goto LPCIC2 ;decine = 0 goto LPCIC1 ;vai a LPCIC1NO_ZE movlw MAXIM ;copia in W il numero MAXIM subwf F14,0 ;sottrai W da registro F14 -> W btfss F3,0 ;testa bit 0 del registro F3 e salta se = 1 goto LPCIC1 ;vai a LPCIC1 decf F13,1 ;decrementa registro F13 -> F13 movlw MAXIM ;decine >= 0 movwf F14 ;copia W nel registro F14 movlw MAXIM ;copia in W il numero MAXIM subwf F13,0 ;sottrai W da registro F13 -> W btfss F3,0 ;testa bit 0 del registro F3 e salta se = 1 goto LPCIC1 ;vai a LPCIC1 goto LPCIC2 ;vai a LPCIC2 ;LPCIC2 bsf F6,LEDR ;led rosso off bcf F6,RELE ;rele off bcf F17,0 ;memoria ciclo pausa btfsc F6,J1 ;testo se ciclico o timer goto INI ;vai a INI bcf F6,LEDV ;led verde on call VISUAL ;salta alla subroutine VISUAL call TSTSTP ;controllo se premuto pulsante stop decfsz F12 ;controllo se scaduto 1s goto LPCIC2 ;vai a LPCIC2 movlw MSEC1 ; ripristino conteggio 1s movwf F12 ;copia W nel registro F12 ; decfsz F16,1 ;sottraggo unita goto NO_ZER ;vai a NO_ZER movf F15,0 ;unita < 0 SKPNZ ;equivale a btfsc 3,2 goto ENDCIC ;decine = 0 goto LPCIC2 ;vai a LPCIC2NO_ZER movlw MAXIM ;copia in W il numero MAXIM subwf F16,0 ;sottrai W da registro F16 -> W btfss F3,0 ;testa bit 0 del registro F3 e salta se = 1 goto LPCIC2 ;vai a LPCIC2 decf F15,1 ;decrementa registro F15 -> F15 movlw MAXIM ;decine >= 0 movwf F16 ;copia W nel registro F16 movlw MAXIM ;copia in W il numero MAXIM subwf F15,0 ;sottrai W da registro F15 -> W btfss F3,0 ;testa bit 0 del registro F3 e salta se = 1 goto LPCIC2 ;vai a LPCIC2 goto ENDCIC ;vai a ENDCIC ;ENDCIC bsf F6,LEDV ;led verde off goto INI ;vai a INI;--------------------------------------------------STOP bcf F6,RELE ;rele off bsf F6,LEDR ;led rosso off bcf F6,LEDV ;led verde onLPSTP call VISUAL ;salta alla subroutine VISUAL bcf F7,4 ;azzera bit 4 del registro F7 clrwdt ;azzera watchdog btfss F7,3 ;aspetto rilascio goto LPSTP ;vai a LPSTP goto ATTESA ;vai a ATTESA;----------------------------------------------------------------------------ATTESA clrwdt ;azzera watchdog call VISUAL ;salta alla subroutine VISUAL bcf F7,4 ;azzera bit 4 del registro F7 clrwdt ;azzera watchdog btfsc F6,J1 ;vedo se in timer per saltare pulsante start goto SI_TIM ;vai a SI_TIM btfsc F7,0 ;aspetto start goto ATT1 ;vai a ATT1 call WAI5MS ;salta alla subroutine WAI5MS btfsc F7,0 ;controllo se falsa partenza goto ATT1 ;vai a ATT1 goto START ;vai a STARTSI_TIM bcf F7,4 ;azzera bit 4 del registro F7 clrwdt ;azzera watchdog btfss F7,0 ;aspetto pulsante start-timer goto ENDATT ;vai a ENDATTNOSTAR bcf F7,4 ;azzera bit 4 del registro F7 clrwdt ;azzera watchdogATT1 btfsc F7,3 ;aspetto stop x programmazione goto ATTESA ;vai a ATTESA bsf F17,1 ;programmazione lavoro (fase) bsf F17,0 ;programmazione lavoro (tempi) bsf F17,2 ;memoria pulsante stop premuto call READ93 ;salta alla subroutine READ93 goto PROGR ;vai a PROGRENDATT call WAI5MS ;salta alla subroutine WAI5MS btfsc F7,0 ;controllo se falsa partenza goto NOSTAR ;vai a NOSTAR bsf F17,5 ;memoria ritorno start in timer goto INI ;vai a INI
walterword Inserita: 19 agosto 2004 Segnala Inserita: 19 agosto 2004 ;----------------------------------------------------------------------------PROGR bsf F6,LEDV ;led verde off bsf F6,LEDR ;led rosso off bcf F6,RELE ;rele off bcf F17,3 ;clear memoria pulsante avanti premuto bcf F17,4 ;clear memoria pulsante indietro premuto movlw INTER1 ;copia in W il numero INTER1 movwf F19 ;tempo di step con pressione pulsanti continua movlw INTER1 ;copia in W il numero INTER1 movwf F20 ;tempo di step con pressione pulsanti continua movlw .10 ;copia in W il numero .10 movwf F18 ;contatore per lampeggio ledLPPRG call VISUAL ;salta alla subroutine VISUAL bcf F7,4 ;azzera bit 4 del registro F7 clrwdt ;azzera watchdog btfsc F7,2 ;aspetto pulsante indietro goto NOIND ;vai a NOIND btfss F17,4 ;testa bit 4 del registro F17 e salta se = 1 goto INDIE ;vai a INDIE decfsz F19 ;decrementa registro F19 salta se = 0 -> F19 goto GIRO ;vai a GIRO movlw INTER2 ;copia in W il numero INTER2 movwf F19 ;copia W nel registro F19 goto INDIE ;vai a INDIENOIND btfsc F7,1 ;aspetto pulsante avanti goto NOAVA ;vai a NOAVA btfss F17,3 ;testa bit 3 del registro F17 e salta se = 1 goto AVANT ;vai a AVANT decfsz F20 ;decrementa registro F20 salta se = 0 -> F20 goto GIRO ;vai a GIRO movlw INTER2 ;copia in W il numero INTER2 movwf F20 ;copia W nel registro F20 goto AVANT ;vai a AVANTNOAVA bcf F17,3 ;clear memoria pulsante avanti premuto bcf F17,4 ;clear memoria pulsante indietro premuto movlw INTER1 ;copia in W il numero INTER1 movwf F19 ;tempo di step con pressione pulsanti continua movlw INTER1 ;copia in W il numero INTER1 movwf F20 ;tempo di step con pressione pulsanti continua btfsc F7,3 ;aspetto stop x passaggio a programmazione pausa goto RILST ;vai a RILST btfsc F17,2 ;aspetto rilascio goto GIRO ;vai a GIRO btfss F17,1 ;testo se programmazione pausa o lavoro goto ENDPRG ;fine programmazione btfsc F6,J1 ;vedo se in timer (pausa non settabile) goto ENDPRG ;vai a ENDPRG bcf F17,1 ;setto programmazione pausa (fase) bcf F17,0 ;setto programmazione pausa (tempi) bsf F17,2 ;setto memoria pulsante stop premuto goto GIRO ;vai a GIRO ;INDIE bsf F17,4 ;setto memoria puls. indietro premuto btfss F17,1 ;testa bit 1 del registro F17 e salta se = 1 goto INDPAU ;vai a INDPAU decf F14,1 ;decrementa registro F14 -> F14 movlw MAXIM + 1; ;copia in W il numero MAXIM + 1; subwf F14,0 ;sottrai W da registro F14 -> W btfss F3,0 ;testa bit 0 del registro F3 e salta se = 1 goto GIRO ;vai a GIRO movlw MAXIM ;copia in W il numero MAXIM movwf F14 ;copia W nel registro F14 decf F13,1 ;decrementa registro F13 -> F13 movlw MAXIM + 1; ;copia in W il numero MAXIM + 1; subwf F13,0 ;sottrai W da registro F13 -> W btfss F3,0 ;testa bit 0 del registro F3 e salta se = 1 goto GIRO ;vai a GIRO movlw MAXIM ;copia in W il numero MAXIM movwf F13 ;copia W nel registro F13 goto GIRO ;vai a GIRO ;INDPAU decf F16,1 ;decrementa registro F16 -> F16 movlw MAXIM + 1; ;copia in W il numero MAXIM + 1; subwf F16,0 ;sottrai W da registro F16 -> W btfss F3,0 ;testa bit 0 del registro F3 e salta se = 1 goto GIRO ;vai a GIRO movlw MAXIM ;copia in W il numero MAXIM movwf F16 ;copia W nel registro F16 decf F15,1 ;decrementa registro F15 -> F15 movlw MAXIM + 1; ;copia in W il numero MAXIM + 1; subwf F15,0 ;sottrai W da registro F15 -> W btfss F3,0 ;testa bit 0 del registro F3 e salta se = 1 goto GIRO ;vai a GIRO movlw MAXIM ;copia in W il numero MAXIM movwf F15 ;copia W nel registro F15 goto GIRO ;vai a GIRO ;AVANT bsf F17,3 ;setto memoria puls. avanti premuto btfss F17,1 ;controllo se programmazione pausa o lavoro goto AVAPAU ;vai a AVAPAU incf F14,1 ;incrementa registro F14 -> F14 movlw MAXIM + 1; ;copia in W il numero MAXIM + 1; subwf F14,0 ;sottrai W da registro F14 -> W btfss F3,0 ;testa bit 0 del registro F3 e salta se = 1 goto GIRO ;vai a GIRO clrf F14 ;azzera registro F14 incf F13,1 ;incrementa registro F13 -> F13 movlw MAXIM + 1; ;copia in W il numero MAXIM + 1; subwf F13,0 ;sottrai W da registro F13 -> W btfsc F3,0 ;testa bit 0 del registro F3 e salta se = 0 clrf F13 ;azzera registro F13 goto GIRO ;vai a GIRO ;AVAPAU incf F16,1 ;incrementa registro F16 -> F16 movlw MAXIM + 1; ;copia in W il numero MAXIM + 1; subwf F16,0 ;sottrai W da registro F16 -> W btfss F3,0 ;testa bit 0 del registro F3 e salta se = 1 goto GIRO ;vai a GIRO clrf F16 ;azzera registro F16 incf F15,1 ;incrementa registro F15 -> F15 movlw MAXIM + 1; ;copia in W il numero MAXIM + 1; subwf F15,0 ;sottrai W da registro F15 -> W btfsc F3,0 ;testa bit 0 del registro F3 e salta se = 0 clrf F15 ;azzera registro F15 goto GIRO ;vai a GIRO ;GIRO btfss F17,3 ;testa bit 3 del registro F17 e salta se = 1 goto NOPRES ;vai a NOPRES decfsz F19 ;decrementa registro F19 salta se = 0 -> F19 goto NOPRES ;vai a NOPRES bcf F17,3 ;clear memoria pulsante avanti indietro premuto movlw INTER2 ;copia in W il numero INTER2 movwf F19 ;tempo di step con pressione pulsanti continuaNOPRES decfsz F18 ;decrementa registro F18 salta se = 0 -> F18 goto LPPRG ;vai a LPPRG btfss F17,1 ;testa bit 1 del registro F17 e salta se = 1 goto TOGV ;vai a TOGV movlw B'00000010' ;copia in W il numero B'00000010' xorwf F6 ;togglo led rosso bsf F6,LEDV ;led verde off goto TOGR ;vai a TOGRTOGV movlw B'00000100' ;copia in W il numero B'00000100' xorwf F6 ;togglo led verde bsf F6,LEDR ;led rosso offTOGR movlw .10 ;copia in W il numero .10 movwf F18 ;contatore per lampeggio led goto LPPRG ;vai a LPPRG ;RILST bcf F17,2 ;azzera bit 2 del registro F17 goto GIRO ;vai a GIROENDPRG goto MEMO93 ;vai a MEMO93;------------------ memorizza nuovo numero su eeprom ------------------------MEMO93 movf F13,0 ;copia registro F13 -> W addwf F14,0 ;somma W al registro F14 -> W btfsc F3,2 ;testa bit 2 del registro F3 e salta se = 0 incf F14,1 ;incrementa registro F14 -> F14 movf F15,0 ;copia registro F15 -> W addwf F16,0 ;somma W al registro F16 -> W btfsc F3,2 ;testa bit 2 del registro F3 e salta se = 0 incf F16,1 ;incrementa registro F16 -> F16 movlw 030H ;abilitazione scrittura movwf F9 ;copia W nel registro F9 call STA93 ;salta alla subroutine STA93 call STO93 ;fine comando abilitazione scrittura clrwdt ;azzera watchdog movlw 040H ;scrivi a partire dalla memoria 0 movwf F9 ;copia W nel registro F9 call STA93 ;salta alla subroutine STA93 movf F13,0 ;copia registro F13 -> W movwf F9 ;copia W nel registro F9 call TX93 ;primo byte movf F14,0 ;copia registro F14 -> W movwf F9 ;copia W nel registro F9 call TX93 ;secondo byte call STO93W ;salta alla subroutine STO93W movlw 041H ;scrivi a partire dalla memoria 1 movwf F9 ;copia W nel registro F9 call STA93 ;salta alla subroutine STA93 movf F15,0 ;copia registro F15 -> W movwf F9 ;copia W nel registro F9 call TX93 ;primo byte movf F16,0 ;copia registro F16 -> W movwf F9 ;copia W nel registro F9 call TX93 ;secondo byte call STO93W ;salta alla subroutine STO93W clrf F9 ;disabilitazione scrittura call STA93 ;salta alla subroutine STA93 call STO93 ;fine comando disabilitazione scrittura goto STOP ;vai a STOP;---------------------------------------------------------------------------- ORG 07FFH ;istruzione successiva a indirizzo 07FFH goto START ;vai a START END ;fine del programma
mister999 Inserita: 20 agosto 2004 Autore Segnala Inserita: 20 agosto 2004 Grazie dell'aiuto Walterword, ma 9 secondi sono troppo pochi... come dicevo me ne servono almeno 900 secondi... poi se non ci sono i millesimi o neanche i centesimi poco importa...Per DLGCOMsi, effettivamente vorrei + di un consiglio... come dicevo magari andrebbero bene anche le modifiche da apportare a un progetto esistente...quello che mi hai segnalato tu lo conoscevo gia, ma non sapevo come modificarlo perche non visualizza nemmeno i decimi di secondo...Se avete pazeinza per potermi dare altre dritte ve ne sarei grato...Grazie 1000 comunque per l'aiuto parziale!Ciao!
walterword Inserita: 20 agosto 2004 Segnala Inserita: 20 agosto 2004 se studi bene il codice vedrai che potrai fare quello che vuoi tutto sta a decidere il decremento , e poi puoi aggiungere anche altri display , il cui valore e' un registro che si incrementa con quello minoreper esempio , mi basta avare un clock di 10 ms per incrementare quello dei secondi , dei minuti e delle orepurtroppo in questo momento non riesco a dirti di piu , ho delle cose urgenti da consegnare oltre al progetto on line del rabbit ciao walter
Messaggi consigliati
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 accountAccedi
Hai già un account? Accedi qui.
Accedi ora