Grazie ancora
Andrew
Moderatore:
Paolino
main:
BANKSEL TRISD
CLRF TRISD
BANKSEL TRISB
CLRF TRISB
BANKSEL ADCON1
MOVLW B'10000000'
MOVWF ADCON1
BANKSEL TRISA
BSF TRISA,0
BANKSEL ANSEL
BSF ANSEL,0
BANKSEL ADCON0
MOVLW B'01000001'
MOVWF ADCON0
BANKSEL 30H
MOVLW 0FH
MOVWF 30H
DECFSZ 30H
GOTO $-1
BSF ADCON0,GO
BTFSC ADCON0,GO
GOTO $-1
BANKSEL ADRESH
MOVF ADRESH,W
MOVWF PORTD
BANKSEL ADRESL
MOVF ADRESL,W
MOVWF PORTB
END ; directive 'end of program' BANKSEL PORTE
CLRF PORTE ; inizializzazione porte
BANKSEL ANSEL
CLRF ANSEL
BANKSEL TRISE
CLRF TRISE ; portE uscita
BSF TRISE,RE2 ; RE2 impostato come ingresso
BANKSEL ANSELH
CLRF ANSELH ; canali analogici da 8 a 14 come digitali
BANKSEL ANSEL
CLRF ANSEL ; canali analogici da 0 a 7 come digitali
BSF ANSEL,ANS7 ; ingresso analogico= ANS7
BANKSEL ADCON0
MOVLW B'00011100' ; selezione canale ANS7
MOVWF ADCON0
BANKSEL ADCON0
BSF ADCON0,ADCS0 ; selezione divisore di frequenza: Fosc/8
BANKSEL ADCON0
BSF ADCON0,ADON ; abilitazione ADC
BANKSEL ADCON1
BSF ADCON1,ADFM ; risultato giustificato a destra
BANKSEL 20H
MOVLW 15H
MOVWF 20H
DECFSZ 20H,F
GOTO $-1 ; loop di ritardo per acquisizione 20uS
BANKSEL ADCON0
BSF ADCON0,GO ; avvia la conversione
BANKSEL ADCON0
BTFSC ADCON0,GO ; attendi la fine della conversione
GOTO $-1
BANKSEL ADRESH
MOVF ADRESH,W
MOVWF 110H ; sposta la parte alta della conversione in 110h
BANKSEL ADRESL
MOVF ADRESL,W
MOVWF 190H ; sposta la parte bessa della conversione in 190h
comp
BANKSEL 110H
MOVLW 00H
SUBWF 110H ; confronto tra il risultato dell'ADC e la parte alta della soglia
BANKSEL STATUS
BTFSS STATUS,C ; test C: se 0 vai a sopra, se 1 vai a sotto
GOTO sopra
GOTO sotto
sotto
BANKSEL 190H
MOVLW 1FH
SUBWF 190H ; confronto tra risultato ADC e parte bassa soglia
BANKSEL STATUS
BTFSS STATUS,C ; test C: se 0 vai a sopra1, se 1 vai a sotto1
GOTO sopra
GOTO sotto1
sotto1
BANKSEL PORTD
CLRF PORTD
BANKSEL TRISD
CLRF TRISD ; portd impostato come uscita
BANKSEL PORTD
BCF PORTD,RD4 ; uscita bassa
BSF PORTD,RD2 ; uscita alta
BSF PORTD,RD6 ; uscita alta
CALL ritardo
BANKSEL PORTD
CLRF PORTD
BANKSEL PORTD
BCF PORTD,RD2 ; uscita bassa
BSF PORTD,RD0 ; uscita alta
BSF PORTD,RD6 ; uscita alta
CALL ritardo
BANKSEL PORTD
CLRF PORTD
BANKSEL PORTD
BCF PORTD,RD6 ; uscita bassa
BSF PORTD,RD0 ; uscita alta
BSF PORTD,RD4 ; uscita alta
CALL ritardo
BANKSEL PORTD
CLRF PORTD
BANKSEL PORTD
BCF PORTD,RD0 ; uscita bassa
BSF PORTD,RD2 ; uscita alta
BSF PORTD,RD4 ; uscita alta
CALL ritardo
BANKSEL 40H
INCF 40H,F ; incrementa registro 40h
MOVLW 64H
XORWF 40H,W ; confronto tra registro 40h e accumulatore
BTFSS STATUS,Z ; test Z: se 0 vai a sotto1, se 1 vai a main
GOTO sotto1
GOTO main
sopra
BANKSEL 190H
MOVLW 1FH
SUBWF 190H ; confronto tra parte bassa risultato ADC e soglia
BANKSEL STATUS
BTFSS STATUS,C ; test C: se 0 vai a sotto, se 1 vai a sotto1
GOTO sotto
GOTO sopra1
sopra1
BANKSEL PORTD
CLRF PORTD
BANKSEL TRISD
CLRF TRISD ; portd impostato come uscita
BANKSEL PORTD
BCF PORTD,RD6 ; uscita bassa
BSF PORTD,RD2 ; uscita alta
BSF PORTD,RD4 ; uscita alta
CALL ritardo1
BANKSEL PORTD
CLRF PORTD
BANKSEL PORTD
BCF PORTD,RD2 ; uscita bassa
BSF PORTD,RD0 ; uscita alta
BSF PORTD,RD4 ; uscita alta
CALL ritardo1
BANKSEL PORTD
CLRF PORTD
BANKSEL PORTD
BCF PORTD,RD4 ; uscita bassa
BSF PORTD,RD0 ; uscita alta
BSF PORTD,RD6 ; uscita alta
CALL ritardo1
BANKSEL PORTD
CLRF PORTD
BANKSEL PORTD
BCF PORTD,RD0 ; uscita bassa
BSF PORTD,RD2 ; uscita alta
BSF PORTD,RD6 ; uscita alta
CALL ritardo1
BANKSEL 50H
INCF 50H,F ; incemente registro 50h
MOVLW 64H
XORWF 50H,W ; confronto tra registro 50h e accumulatore
BTFSS STATUS,Z ; test Z: se 0 vai a a sopra1, se 1 vai a main
GOTO sopra1
GOTO main
ritardo ; subroutine di ritardo per visualizzare la combinazione d'uscita
BANKSEL 30H
MOVLW 0FFH
MOVWF 31H
rit1 MOVWF 30H
DECFSZ 30H,F
GOTO $-1
DECFSZ 31H,F
GOTO rit1
RETURN
ritardo ; subroutine di ritardo per visualizzare la combinazione d'uscita
BANKSEL 60H
MOVLW 0FFH
MOVWF 61H
rit2 MOVWF 60H
DECFSZ 60H,F
GOTO $-1
DECFSZ 61H,F
GOTO rit2
RETURN
END ; fine programma 





Torna a Firmware e programmazione
Visitano il forum: Nessuno e 13 ospiti