aaaa ya, bien MLO_,
ahora pasando la idea de MLO_ al assembler, hice esto
MOVLW 'T' ;CARGO EL CARACTER N
CALL TX_DATO ;ENVIO N
MOVF TEMPERATURA,W ;CARGO W CON LA VARIABLE TEMPERATURA
CALL TX_DATO ;ENVIO LA VARIABLE TEMPERATURA
MOVLW 'T' ;CARGO W CON T
CALL TX_DATO ;ENVIO T, ES DECIR ENTRE T y T VA EL DATO
CALL DEMORA
MOVLW 'N' ;CARGO EL CARACTER N
CALL TX_DATO ;ENVIO N
MOVF NIVEL,W ;CARGO W CON LA VARIABLE NIVEL
CALL TX_DATO ;ENVIO LA VARIABLE NIVEL
MOVLW 'N' ;CARGO W CON N
CALL TX_DATO ;ENVIO N, ES DECIR ENTRE N y N VA EL DATO
a modo de prueba cargué nivel con 0x1 y temperatura con 0x50 y el hiperterminal me muestra entre las N una carita que supongo corresponde al 0x01 y entre la T me muestra una P que corresponderia al 0x50, en labview pasa lo mismo con lo que envio entre las T y entre las N muestra un cuadrado que será porque no reconoce ese caracter, pero en ultimas supongo que con esa prueba podria asumir que estoy enviando bien el dato?
adjunto la captura de la prueba en hiperterminal
por otro lado, empecé a hacer esta rutina para alternar las conversiones A/D del canal0 y el canal1, entonces pongo el codigo y luego la duda
LIST P=16F877A
#INCLUDE "P16F877A.INC"
CBLOCK 0X20
PDel0
PDel1
PDel2
_INT_SAVE_W
_INT_SAVE_STATUS
_INT_SAVE_FSR
_INT_SAVE_PCLATH
ENDC
ORG 0
GOTO INICIO
ORG 4
GOTO INTER
;@@@@@@@@@@@@@@@@@ SELECCION DE CANALES ANALOGOS @@@@@@@@@@@@@@@@@@@@@@@
CANAL0 BCF STATUS,RP0
MOVLW B'01000001' ; Fosc/8, CANAL0 ACTIVO, CONVERSION OFF, CONVERSOR ON
MOVWF ADCON0
RETURN ; PARA EMPEZAR CONVERSION SETEAR ADCON0,2 = GO_DONE
CANAL1 BCF STATUS,RP0
MOVLW B'01001001' ;Fosc/8, CANAL1 ACTIVO, CONVERSION OFF, CONVERSOR ON
MOVWF ADCON0
RETURN
CONVERSION BSF ADCON0,GO_DONE
ESPERE CALL DEMORA
BTFSC ADCON0,GO_DONE
GOTO ESPERE
MOVF ADRESH,W
MOVWF PORTB
RETURN
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
;@@@@@@@@@@@@ RUTINA CONTROL DEL TX @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
TX_DATO BCF PIR1,TXIF ;RESTAURA FLAG DEL TRANSMISOR
MOVWF TXREG ;ALMACENA EL DATO A ENVIAR Y ENVIA
BSF STATUS,RP0 ; BANCO1
TX_DATO_WAIT
BTFSS TXSTA,TRMT ; BYTE TRANSMITIDO?
GOTO TX_DATO_WAIT ;NO
BCF STATUS,RP0 ;SI, BANCO0
RETURN
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
;@@@@@@@@@@@@@@@@@@@@@@@@ MANEJO DE INTERRUPCION @@@@@@@@@@@@@@@@@@@@@@@@@@
INTER
PUSH MOVWF _INT_SAVE_W ;GUARDAR W
SWAPF STATUS,W ;GUARDAR STATUS
MOVWF _INT_SAVE_STATUS
SWAPF FSR,W ;GUARDAR FSR
MOVWF _INT_SAVE_FSR
SWAPF PCLATH,W ;GUARDAR PCLATH (PAGINA DE PROGRAMA)
MOVWF _INT_SAVE_PCLATH
SWAPF OPTION_REG,W ;GUARDAR OPTION_REG (BANCOS)
MOVWF _INT_SAVE_OPTION_REG
;>>>>>>>AQUI RUTINAS DE INTERRUPCION POR RECEPCION DE LA USART<<<<<<<<<<<<<<<<
POP SWAPF _INT_SAVE_PCLATH,W ;RESTAURAR VALOR DE PCLATH
MOVWF PCLATH
SWAPF _INT_SAVE_FSR,W ;RESTAURAR VALOR DE FSR
MOVWF FSR
SWAPF _INT_SAVE_STATUS,W ;RESTAURAR VALOR DE STATUS
MOVWF STATUS
SWAPF _INT_SAVE_W,W
RETFIE
;@@@@@@@@@@@@@@@@@@@@@@@@@@ FIN DE INTERRUPCION @@@@@@@@@@@@@@@@@@@@@@@@@@@@@
INICIO BSF STATUS,RP0
BCF STATUS,RP1 ;BANCO1
MOVLW 0XFF
MOVWF TRISA ;PORTA COMO ENTRADA
MOVLW B'00000001'
MOVWF ADCON1 ;TODAS ENTRADAS ANALOGAS, +VREF=RA3 -VREF=GND
;8 bits mas significativo=ADRESH
;Los 2 BIT memos significativos se quedan en ADRESL.
CLRF TRISB
CLRF TRISE
BCF STATUS,RP0 ; BANCO0
BSF ADCON0,ADCS0
BCF ADCON0,ADCS1 ;RELOJ PARA EL CONVERSOR AD = Fosc/8
BSF ADCON0,ADON
;@@@@@@@@@@@@@@@ CONFIG USART @@@@@@@@@@@@@@
BSF STATUS,RP0 ;BANCO1
MOVLW B'10111111' ;RC6 SALIDA(TX), RC7 ENTRADA(RX)
MOVWF TRISC
MOVLW B'00100100'
MOVWF TXSTA ;TX en On, modo asíncrono con 8 bits y alta velocidad
MOVLW .25
MOVWF SPBRG ;9600 baudios con Fosc=4MHz
BSF PIE1,RCIE ;Habilita interrupción en la recepción
BCF STATUS,RP0 ; BANCO0
MOVLW B'10010000'
MOVWF RCSTA ;USART en On, recepción contínua
BSF INTCON,PEIE ;Activa interrupción de periféricos
BSF INTCON,GIE ;Activa interrupciones
CLRF RCREG
CLRF PORTB
;@@@@@@@@@@@@@@ FIN CONFIG USART @@@@@@@@@@@@@
;########## PROGRAMA PRINCIPAL ####################
ALT CALL CANAL0
CALL CONVERSION
CALL CANAL1
CALL CONVERSION
GOTO ALT
;########################## RUTINA 1 SEGUNDO ###############################
DEMORA movlw .14 ; 1 set numero de repeticion (C)
movwf PDel0 ; 1 |
PLoop0 movlw .72 ; 1 set numero de repeticion (B)
movwf PDel1 ; 1 |
PLoop1 movlw .247 ; 1 set numero de repeticion (A)
movwf PDel2 ; 1 |
PLoop2 clrwdt ; 1 clear watchdog
decfsz PDel2, 1 ; 1 + (1) es el tiempo 0 ? (A)
goto PLoop2 ; 2 no, loop
decfsz PDel1, 1 ; 1 + (1) es el tiempo 0 ? (B)
goto PLoop1 ; 2 no, loop
decfsz PDel0, 1 ; 1 + (1) es el tiempo 0 ? (C)
goto PLoop0 ; 2 no, loop
PDelL1 goto PDelL2 ; 2 ciclos delay
PDelL2 clrwdt ; 1 ciclo delay
return ; 2+2 Fin.
end ;Fin del programa fuente
simulando el proteus me tira " ADC conversion started before 'wait' time has expired following previous conversion or channnel change", igual funciona bien pero me sale este error multiples veces, entonces no si es por el tiempo de espera ( 1 SEGUNDO!!!!! ) q doy al preguntar si ya se termino la conversion o es por la configuracion de los bits ADCS1, ADCS0 que son los que determinan la Fosc del conversor. cualquier sugerencia es bienvenida