Sie sind auf Seite 1von 8

UNIVERSIDAD NACIONAL AUTONOMA DE MXICO

LAB. DE MICROCONTROLADORES

PRCTICA 6

CONVERTIDOR ANALGICO / DIGITAL

Amado Esparza Martn del Campo

30/10/2017
PRCTICA #6

USO DE CONVERTIDOR ANALGICO/DIGITAL

Objetivo.

Familiarizar al alumno con el uso y aplicacin del Convertidor Analgico/Digital de un microcontrolador.

Introduccin

El microcontrolador PIC16F877 tiene 8 posibles canales de entrada por los cuales se pueden procesar
seales analgicas, de 8 o 10 bits de resolucin. Los registros involucrados para este perifrico son los
mostrados a continuacin, la direccin y banco donde estn ubicados se pueden consultar en la
informacin dada en la prctica uno.
Un algoritmo a emplear para el uso del convertidor A/D, con resolucin de 8 bits:
1. Estando en el banco cero, limpiar el puerto A, usando CLRF PORTA.
2. Cambiar al banco uno.
3. Configurar el puerto A como entradas analgicas, escribir 00H al registro ADCON1.
4. Realizar la configuracin de la fuente de reloj, el canal de entrada y prender al convertidor A/D, en el
registro ADCON0.
5. Iniciar la conversin colocando un 1 a la bandera GO/DONE#.
6. Generar un tiempo de retardo de 20 microsegundos.
7. Esperar a que GO/DONE# sea igual a cero, lo que indica que ha concluido el proceso de conversin.
8. Lee el resultado de la conversin del registro ADRESH.

Desarrollo.
Realizar los programas solicitados y comprobar su funcionamiento.

1.- Empleando el canal de su eleccin del convertido A/D, realizar un programa en el cul, de acuerdo a
una entrada analgica que se ingrese por este canal, se represente el resultado de la conversin en un
puerto paralelo utilizar el arreglo de leds para ver la salida.

processor 16f877
include <p16f877.inc>
J EQU 0X20; localidades para subrutina de retraso
K EQU 0X21;
org 0H; carga el vector de RESET LA DIRECCION DE INICIO
goto inicio
ORG 05H;Direccin de inicio del programa del usuario
inicio: CLRF PORTA
BSF STATUS,RP0;Cambia al banco 1
BCF STATUS,RP1;
MOVLW 00H; pone un 0 en el registro w
MOVWF ADCON1; lo pone en ADCON1
MOVLW 00H:mueve un 0 en el registro W
MOVWF TRISB; lo pone en el registro TRISB
BCF STATUS,RP0; Regresa al banco cero
MOVLW b'11001001'; Establecemos frecuencia de reloj, cnal, el convertidor a/d
MOVWF ADCON0;movemos los bits de conf. A ADCON0
CLRF PORTB; limpiamos el REGISTRO PORTB

INICIO
BSF ADCON0,2; INICIAMOS LA CONVERSIN A/D
CALL retardo; Damos tiempo para que realice la conversin
BCF ADCON0,2; Damos fin a la conversin
MOVFW ADRESH; Leemos el resultado de la conversion
MOVWF PORTB; Lo cargamos en el puerto B
GOTO INICIO; Volvemos al inicio
;rutina de retraso de 25 milisegundos

retardo:MOVLW D'25'; W=25 DECIMAL


MOVWF J; J=W
iloop: MOVWF K; K=W
kloop: DECFSZ K,f; K=K-1, OMITE SI ES CERO
GOTO kloop
DECFSZ J,f; j=j-1, OMITE SI ES CERO
GOTO iloop
RETURN

END; FIN DEL PROGRAMA

processor 16f877; indica al ide que micro se va a usar


include <p16f877.inc>; incluye las librerias que utiliza este micro
J EQU 0X20; localidades para subrutina de retraso
K EQU 0X21;
org 0H;carga vector reset a la direccin de inicio
goto inicio; va a la etiqueta inicio
ORG 05H;Direccin de inicio del programa del usuario
inicio: CLRF PORTA; limpia el puerto A
BSF STATUS,RP0;Cambia al banco 1
BCF STATUS,RP1;
MOVLW 00H; mueve un 0 al registro W
MOVWF ADCON1; lo pone en el registro ADCON1
MOVLW 00H; mueve un 0 al registro W
MOVWF TRISB; lo mueve al registro TRISB
BCF STATUS,RP0; Regresa al banco cero
MOVLW b'11001001'; Establecemos frecuencia de reloj, canal, el convertidor a/d
MOVWF ADCON0; pone la configuracin de los bits en ADCON0 para configurar el C. A/D
CLRF PORTB; limpia el registro PORTB

CONVERS
BSF ADCON0,2; INICIAMOS LA CONVERSIN A/D
CALL retardo; Damos tiempo para que realice la conversin
BCF ADCON0,2; Damos fin a la conversin
MOVFW ADRESH; Leemos el resultado de la conversin
SUBLW D'85; restamos el contenido de ADRESH con un 85
BTFSC STATUS, C; revisamos la bandera de CARRY y si es 1 brinca
GOTO OPC1; va a la etiqueta opc1
MOVFW ADRESH; Leemos el resultado de la conversin
SUBLW D'170'; restamos 170 al contenido de ADRESH
BTFSC STATUS,C; revisamos la bandera de CARRY y si es 1 brinca
GOTO OPC2; vamos a la opc2
MOVLW H'07'; mueve un 7 al registro W
MOVWF PORTB ; lo pasa a registro PORTB
GOTO CONVERS; va a la etiqueta CONVERS
;rutina de retraso de 20 milisegundos

OPC1: MOVFW 01H; PONE UN 1 en el registro W


MOVWF PORTB; lo mueve a PORTB
GOTO CONVERS; regresa a la etiqueta CONVERS
OPC2: MOVFW 03H; pone un 3H en el registro W
MOVWF PORTB; lo mueve a portb
GOTO CONVERS; regresa a la etiqueta CONVERS
;SUBRUTINA DE RETRASO
retardo: MOVLW D'25'; W=25 DECIMAL
MOVWF J; J=W
iloop: MOVWF K; K=W
kloop: DECFSZ K,f; K=K-1, OMITE SI ES CERO
GOTO kloop
DECFSZ J,f; j=j-1, OMITE SI ES CERO
GOTO iloop
RETURN

END; FIN DEL PROGRAMA


PROGRAMA:

processor 16f877
include <p16f877.inc>
J EQU 0X20; localidades para subrutina de retraso
K EQU 0X21; carga el vector de RESET LA DIRECCION DE INICIO
canal0 EQU 0x22; declara 3 variables que sern para guardar el contenido de
canal1 EQU 0x23; cada uno de los canales del convertidor analgico digital.
canal2 EQU 0x24
org 0H; vector reset
goto inicio; va a la etiqueta inicio
ORG 05H;Direccin de inicio del programa del usuario
inicio: CLRF PORTA; limpia el contenido de PORTA
BSF STATUS,RP0;Cambia al banco 1
BCF STATUS,RP1;
MOVLW 00H; pone un 0 en el registro W
MOVWF ADCON1; lo mueve al registro ADCON1
MOVLW 00H; pone un 0 en el registro W
MOVWF TRISB; lo mueve a TRISB
BCF STATUS,RP0; Regresa al banco cero
MOVLW b'11000001'; Establecemos frecuencia de reloj, cnal, el convertidor a/d
MOVWF ADCON0; vamos a escoger en esta ocasin el canal 0
CLRF PORTB; limpiamos PORTB

LEER: BSF ADCON0,2; INICIAMOS LA CONVERSIN A/D


CALL retardo; Damos tiempo para que realice la conversin
CONVER: BTFSC ADCON0,2; INICIAMOS LA CONVERSIN A/D
GOTO CONVER; va a la etiqueta CONVER
MOVF ADRESH,0; Leemos el resultado de la conversion
MOVWF canal0; lo mueve a la variable canal0
MOVLW b'11001001'; escoge el canal1
MOVWF ADCON0; mueve la configuracin a ADCON0
BSF ADCON0,2; pone uun bit en GO/DONE
CALL retardo; llama la subrutina de retraso
CONVER2: BTFSC ADCON0,2; INICIAMOS LA CONVERSIN A/D
GOTO CONVER2; va a la etiqueta conver2
MOVF ADRESH,W; Leemos el resultado de la conversion
MOVWF canal1; movemos el resultado de la conversin a la variable canal1
MOVLW b'11010001'; escogemos el canal2
MOVWF ADCON0; movemos la configuracin a ADCON0
BSF ADCON0,2; ponemos el bit de GO/DONE
CONVER3: BTFSC ADCON0,2; INICIAMOS LA CONVERSIN A/D
GOTO CONVER3; vamos a la etiqueta CONVER3
MOVF ADRESH,W; Leemos el resultado de la conversion
MOVWF canal2; movemos el resultado a la variable canal2
COMPAR: MOVF canal0,W; movemos el contenido de canal0 a W
SUBWF canal1,W; le restamos el contenido de canal 1 a W
BTFSC STATUS,1; revisa el estatus de la bandera carry y si es 1 brinca
GOTO canaluno; va a la etiqueta canaluno
GOTO canalcero; va a la etiqueta canalcero

canalcero: MOVF canal0,W; mueve la variable canal0 al registro W


SUBWF canal2,W; hace la resta de canal2 con W
BTFSS STATUS,1; revisa el estatus de la bandera carry, si es uno brinca
GOTO canaluno; va a la etiqueta canaluno
GOTO mandouno; va a la etiqueta mandouno
canaluno: MOVF canal0,W; mueve la variable canal0 a W
SUBWF canal2,W; hace la resta de canal2 con W
BTFSS STATUS,1; revisa el estado de la bandera carry, si es uno brinca
GOTO canaldos; va a la etiqueta canaldos
GOTO mandotres; va a la etiqueta mandotres
canaldos: MOVLW H'07'; Mueve un 7h al registro W
MOVWF PORTB; lo mueve al puerto B
GOTO LEER; va a la etiqueta LEER

mandouno: MOVFW H'01'; mueve un 1 va al registro W


MOVWF PORTB; lo pone en el registro PORTB
GOTO LEER; va a la etiqueta LEER
mandotres: MOVFW H'03'; mueve un 3h al registro W
MOVWF PORTB; lo pone en el registro PORTB
GOTO LEER; va a la etiqueta LEER

;rutina de retraso de 20 milisegundos

retardo:MOVLW D'25'; W=25 DECIMAL


MOVWF J; J=W
iloop: MOVWF K; K=W
kloop: DECFSZ K,f; K=K-1, OMITE SI ES CERO
GOTO kloop
DECFSZ J,f; j=j-1, OMITE SI ES CERO
GOTO iloop
RETURN

END; fin del programa

Conclusiones:

En esta prctica aprendimos a iniciar el convertidor analgico digital configurando el registro ADCON0
que nos permite elegir entre un oscilador externo o el interno del micro (bits 6 y 7), adems nos permite
elegir un y solo un canal con el que se va a trabajar (bits 3-5) a la vez, guardando su resultado en el
registro ADRESH y mostrando su salida en LEDS o en cualquier dispositivo digital.

Das könnte Ihnen auch gefallen