Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: DKHKSH en 23 de Julio de 2020, 18:25:36
Título: Modulo ADC en PIC16F887
Publicado por: DKHKSH en 23 de Julio de 2020, 18:25:36
Buenas a todos, he tratado de usar el modulo ADC del PIC16F887 en MPLAB XC8 5.40 en ASM. Mi duda ha sido que al verificar con la simulación he obtenido que me arroja los mismos resultados en los 2 Ports de salida pero en Watch Windows de Proteus mi ADRESL es distinto al mostrado en el PORTD pero ADRESH si es correcto mostrado en PORTB. Soy totalmente nuevo y no entiendo mucho del ASM, si pudiesen indicarme mi error, gracias.
PROCESSOR 16F887 #include <xc.inc> /////////////////////////////////////////////////////////////////////////////// CONFIG FOSC = EXTRC_NOCLKOUT CONFIG WDTE = OFF CONFIG PWRTE = OFF CONFIG MCLRE = ON CONFIG BOREN = ON CONFIG LVP = OFF CONFIG CPD = OFF CONFIG CP = OFF CONFIG IESO = OFF CONFIG FCMEN = OFF CONFIG BOR4V = BOR40V CONFIG WRT = OFF /////////////////////////////////////////////////////////////////////////////// X EQU 20H Y EQU 21H Z EQU 22H /////////////////////////////////////////////////////////////////////////////// resetVector: org 0 goto CONF /////////////////////////////////////////////////////////////////////////////// CONF: ;Configurar Pines de E/S como analogica RA0 y salidas digitales RC BANKSEL TRISA BSF TRISA,0 BANKSEL ANSEL CLRF ANSEL MOVLW 11111111B MOVWF ANSEL BANKSEL TRISC CLRF TRISC BANKSEL TRISD CLRF TRISD ///////////////////// BANKSEL PSTRCON CLRF PSTRCON ;Justificar a la Izquierda BANKSEL ADCON1 MOVLW 10000000B MOVWF ADCON1 ;Seleccionar reloj, Ch de entrada AN/0 y activar modulo ADC BANKSEL ADCON0 MOVLW 01000001B MOVWF ADCON0 /////////////////////////////////////////////////////////////////////////////// MAIN: CALL DELAY BSF ADCON0,1 BTFSC ADCON0,1 GOTO $-1 MOVF ADRESH,w MOVWF PORTC MOVF ADRESL,w MOVWF PORTD GOTO CONF /////////////////////////////////////////////////////////////////////////////// DELAY: MOVLW 5 MOVWF Z TRES: MOVLW 80 MOVWF X DOS: MOVLW 250 MOVWF Y UNO: NOP NOP DECFSZ Y,1 GOTO UNO DECFSZ X,1 GOTO DOS DECFSZ Z,1 GOTO TRES CLRF X CLRF Y CLRF Z RETURN /////////////////////////////////////////////////////////////////////////////// end resetVector
- Tienes que ingresar para ver archivos adjuntos -
Título: Re:Modulo ADC en PIC16F887
Publicado por: KILLERJC en 23 de Julio de 2020, 19:05:57
El PORTB es manejado por ANSELH. Por lo que tenes que poner a 0 ANSELH
Tu setup un poco mas resumido:
Código: ASM
resetVector:
org 0
CONF:
; Banco 1
BANKSEL TRISC
CLRF TRISC
CLRF TRISD
CLRF PSTRCON
MOVLW 10000000B
MOVWF ADCON1
;Banco 3
BANKSEL ANSEL
CLRF ANSELH
;Banco 0
BANKSEL ADCON0
MOVLW 01000001B
MOVWF ADCON0
ADRESH y ADRESL estan en distintos bancos
Código: ASM
MOVF ADRESH,w
MOVWF PORTC
BANKSEL ADRESL ;Banco 1
MOVF ADRESL,w
BANKSEL PORTD ; Banco 0
MOVWF PORTD
Título: Re:Modulo ADC en PIC16F887
Publicado por: DKHKSH en 23 de Julio de 2020, 19:08:33
Así es, me veo obligado a hacerlo en ASM debido al plan de estudios de mi carrera, a la vez me preguntaba lo mismo, ya que hay muchisimos tutoriales y ayuda en C, pero en ASM muy poco, pero sí, debo hacerlo en ASM.
Título: Re:Modulo ADC en PIC16F887
Publicado por: KILLERJC en 23 de Julio de 2020, 19:32:05
EDIT: Edite mi respuesta anterior
ASM permite un poco mas la mirada dentro del micro como funciona y llegar a conocerlo, pero pierde sentido rapidamente. XC8 es como un ASM con mayor simplicidad... por ejemplo hacer lo mismo que hicimos antes con ASM es hacerlo asi (en XC8):
Código: C
TRISC =0;
TRISD =0;
ADCON1 =0;
ADCON1 =0x80;(lo podes poner en binario)
ANSELH =0;
ADCON0 =0x41;
Lo unico que no te preocupas es por los bancos, pero eso te hace perder el conocimiento de como funciona el PIC por dentro.
Como consejo... Cuando necesites usar algun modulo/puerto/etc.
Anda al datasheet y al final te indica todos los registros que se usan con ese puerto. Por ejemplo el PORTB
http://ww1.microchip.com/downloads/en/devicedoc/41291d.pdf pagina 52 Dice:
SUMMARY OF REGISTERS ASSOCIATED WITH PORTB
Entonces sabes cual necesitas mirar para que todo este en orden con el PORTB
Título: Re:Modulo ADC en PIC16F887
Publicado por: DKHKSH en 23 de Julio de 2020, 19:44:14
MUCHAS GRACIAS BRO, DE HECHO SI TENIA ESO PERO NUNCA CAMBIABA A BANCO DE LOS PUERTOS PARA MOVER A W A LOS PUERTOS Y POR ESO NO FUNCIONABA, MUCHISIMAS GRACIAS.