Calerasso Inserito: 16 gennaio 2004 Segnala Share Inserito: 16 gennaio 2004 Salve! Da qualche tempo lavoro dietro ad un progetto per l'automatizzazione di due serre gestite via pc (sono uno studente di un itis). Il mio problema è che non riesco ad ottenere alcuna risposta dal micro uno voolta programmato e collegato. Il pic è montato su una basetta che implementa il max232. Il quarzo è da 20 mega e la connessione pc>pic avviene tramite sessione di hyper terminal di windows (com1). Aiuto! Dato che programmo da poco tempo e da autodidatta non riesco a trovare l'errore nel prog. Ve lo allego, è ridotto all'osso e mi serve da prototipo solo per vedere se il pic risponde. Non fate caso ai nomi delle etichette che si riferiscono ai vari trasduttori delle serre... Grazie , federico (consiglio di ricopiare il prog in notepad per una facile lettura) PROCESSOR 16F876 ;PIC usato 16F876 RADIX DEC ;sistema numerico decimale INCLUDE "P16F876.INC" ;importa libreria del PIC 16F876 __CONFIG 3FF1H ;configurazione 3FF1H;-------------------------------------------------------------------------------------------------------------;-------------- ASSEGNAZIONE REGISTRI ------------------------------------------------------------------------;-------------------------------------------------------------------------------------------------------------lett_a equ 'A' ;registro per la lettera A (ascii)lett_t equ 'T' ;registro per la lettera T (ascii)lett_u equ 'U' ;registro per la lettera U (ascii)lett_l equ 'L' ;registro per la lettera L (ascii) org 20H ;partenza lettura EEPROM registro 20Hreg_a res 1 ;registro per salvataggio dati seriale 2°bytereg_b res 1 ;registro per salvataggio dati seriale 1°byte org 00H ;partenza lettura EEPROM registro 00H bsf RCSTA,7 ;Abilitazione porta seriale bsf RCSTA,4 ;Abilitazione della ricezione goto start ;vai a start;-------------------------------------------------------------------------------------------------------------;-------------- INTERRUPT SERIALE ----------------------------------------------------------------------------;------------------------------------------------------------------------------------------------------------- org 04H ;partenza lettura EEPROM registro 04H goto ricezione ;se RCIF=1 vai a ricezionefine retfie ;se RCIF=0 esci dall'interrupt;-------------- RICEZIONE ------------------------------------------------------------------------------------ricezione movf RCREG,reg_a ;sposta il contenuto di RCREG in reg_a nop movf RCREG,reg_b ;sposta il contenuto di RCREG in reg_b goto confronto ;vai a confronto;-------------- CONFRONTO ------------------------------------------------------------------------------------confronto movf lett_a,W ;copia il contenuto del registro lett_a in W xorwf reg_a,W ;confronta se "lett_a" è uguale alla lettera A btfsc STATUS,Z ;controlla il flag di ZERO goto tx_all ;se ZERO=1 (i registri sono uguali) vai a tx_all ;se ZERO=0 (i registri sono diversi) movf lett_t,W ;copia il contenuto del registro lett_t in W xorwf reg_a,W ;confronta se "lett_t" è uguale alla lettera T btfsc STATUS,Z ;controlla il flag di ZERO goto rx_temp ;se ZERO=1 (i registri sono uguali) vai a check_1 ;se ZERO=0 (i registri sono diversi) movf lett_u,W ;copia il contenuto del registro lett_u in W xorwf reg_a,W ;confronta se "lett_u" è uguale alla lettera U btfsc STATUS,Z ;controlla il flag di ZERO goto rx_umid ;se ZERO=1 (i registri sono uguali) vai a check_2 ;se ZERO=0 (i registri sono diversi) movf lett_l,W ;copia il contenuto del registro lett_l in W xorwf reg_a,W ;confronta se "lett_l" è uguale alla lettera L btfsc STATUS,Z ;controlla il flag di ZERO goto rx_lumi ;se ZERO=1 (i registri sono uguali) vai a check_3 ;se ZERO=0 (i registri sono diversi);-------------- TRASMETTI TUTTO ------------------------------------------------------------------------------tx_all movlw 01010101B movwf PORTB goto fine;-------------- RICEVI ISTRUZIONI TEMPERATURA ----------------------------------------------------------------rx_temp movlw 11111111B movwf PORTB goto fine;-------------- RICEVI ISTRUZIONI UMIDITA' -------------------------------------------------------------------rx_umid movlw 11110000B movwf PORTB goto fine;-------------- RICEVI ISTRUZIONI LUMINOSITA' ----------------------------------------------------------------rx_lumi movlw 00001111B movwf PORTB goto fine;-------------------------------------------------------------------------------------------------------------;-------------- CONFIGURAZIONE PIC ---------------------------------------------------------------------------;-------------------------------------------------------------------------------------------------------------start bsf STATUS,RP0 ;RP0=1 (passa al 2° banco di memoria) bcf STATUS,RP1 ;RP1=0 (passa al 2° banco di memoria) movlw 00010111B ;carica 00010111B in W movwf TRISA ;USCITA=RA0,RA1,RA2,RA4/INGRESSO=RA3,RA5,RA6,RA7 movlw 00000000B ;carica 00000000B in W movwf TRISB ;USCITA=RB0,RB1,RB2,RB3,RB4,RB5,RB6,RB7 movlw 10000001B ;carica 10000001B in W movwf TRISC ;USCITA=RC1,RC2,RC3,RC4,RC5,RC6/INGRESSO=RC0,RC7 movlw 11000000B ;carica 11000000B in W movwf INTCON ;GIE=1 (int.attivo),PEIE=interrupt evento esterno att movlw 10000001B ;carica 10000001B in W (129) movwf SPBRG ;FOSC/[16(129+1)]=9615 bps movlw 00100000B ;carica 00100000B in W movwf PIE1 ;attivo interrupt su ricezione BIT5 di RCIE clrf RCREG bcf STATUS,RP0 ;RP1=0 (passa al 2° banco di memoria) bcf STATUS,RP1 ;RP0=0 (passa al 2° banco di memoria);-------------------------------------------------------------------------------------------------------------;-------------- MAINLOOP -------------------------------------------------------------------------------------;------------------------------------------------------------------------------------------------------------- mainloop movlw 10101010b ;Esecuzione programma movwf PORTB goto mainloopend Link al commento Condividi su altri siti More sharing options...
Pablo78 Inserita: 28 gennaio 2004 Segnala Share Inserita: 28 gennaio 2004 Ciao Ho dato uno sguardo veloce al codice che hai scritto...per quel che riguarda la comunicazione hai settato solo L'SPBRG....ti mando un esempio di un codice che ho utilizzato io, ci sarà qualche banksel di troppo...comunque per settare correttamente il modulo di comunicazione seriale del PIC t consiglio di consultare i datasheets. Vai sul sito della microchip.... www.microchip.com banksel SPBRG movlw 25 ;velocità 9600 BAUD movwf SPBRG bsf TXSTA,BRGH ;High Speed bcf TXSTA,SYNC ;Modo Asincrono banksel RCSTA ;abilitazione porta seriale bsf RCSTA,SPEN ;Porta Seriale abilitata banksel TXSTA bsf TXSTA,TXEN ;abilitazione trasmissione ;qui carichi il valore su W da trasmettere banksel TXREG movwf TXREG;passando il valore al TXREG si da inizio alla trasmissione banksel TXSTA loop_tx btfss TXSTA,TRMT ;attesa trasmissione dato goto loop_tx dovresti visualizzare il carattere trasmesso sull'hyperterminalciaoPablo Link al commento Condividi su altri siti More sharing options...
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