Practica 2 Microcontroladores

ESCUELA SUPERIOR POLITÉCNICA DEL LITORAL FIEC Laboratorio de Microcontroladores Práctica Encendido de LEDs Alumnos José

Views 118 Downloads 65 File size 908KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

ESCUELA SUPERIOR POLITÉCNICA DEL LITORAL FIEC Laboratorio de Microcontroladores Práctica Encendido de LEDs Alumnos José Daniel Plúas Maritza Chávez T

Paralelo: 8 Grupo: 2

Fecha de presentación: 07 - 11 - 2014

2014 – 2° TÉRMINO

1. Enunciado del proyecto Realizar un proyecto donde mediante el uso de retardos, un PIC16F887, resistencias y varios LEDs se pueda encender y apagar los LEDs de manera intermitente manipulando el tiempo de pausa 2. Diagrama de Bloques

Fuente

PIC16F887

LEDs

3. Diagrama de Flujo funcional del Programa principal y de las subrutinas.

Inicio

Counter=Counter-1

no Counter=0

si FIN

Seteo de Puertos

Inicialización de variables

El número binario 01010101 se lo mueve a PORTB

El número hFF se lo mueve a counter

Se ejecuta el retardo

El número binario 10101010 se lo mueve a PORTB

Number hFF is moved to counter

Se ejecuta el retardo

4. Descripción del algoritmo o estrategia utilizada. a. Se selecciona oscilador interno LFINTOSC con frecuencia de 31Khz. b. Se realiza el seteo de los puertos donde se selecciona el banco que contiene TRISB, luego todos los pines del Puerto B se configuran como salido y finalmente se escoge el banco que contiene el registro PORTB c. Se definen la variable con valor h“00” que vamos a utilizar llamada counter. d. El número binario ”01010101” es movido a PORTB e. El número h”FF” es movido a la variable counter f. Se ejecuta la subrutina RETARDO g. Con la instrucción decfsz counter la variable "counter" es decrementada en 1 y si llega a 0 salta la instrucción return que lo manda a la siguiente instrucción del programa principal. h. El número binario “10101010” es movido a PORTB i. El número h“FF” es movida a la variable counter j. Se ejecuta la subrutina RETARDO k. Con la instrucción decfsz counter la variable "counter" es decrementada en 1 y si llega a 0 salta la instrucción return que lo manda a la siguiente instrucción del programa principal. l. Y se vuelve a ejecutar desde d. 5. Listado del programa fuente en lenguaje ensamblador con comentarios en las líneas de código que considere fundamentales

;********************************************************************* ; ENCENDIDO Y APAGADO DE LEDS EN PORTB USANDO RETARDOS ;********************************************************************* ; ; ; ;

NOMBRE: FECHA: VERSION: PROGRAMADOR:

p2_ret.asm 31/05/2010 1.00 Carlos Valdivieso

;********************************************************************* ; DESCRIPCION: ; Este es similar al p1_led.asm con la novedad que ahora no se usa el ; interruptor en RA0 sino que se crean retardos de tiempo con la ; instrucción "decfsz counter" (decremente la variable counter y salte ; si es cero). Dicha instrucción decrementa el file counter, previamente ; cargado con FFh hasta 00h. Cuando counter alcanza el valor de cero ; se salta la próxima instrucción y continúa el programa, esto permite

; que se genere un retardo que depende del reloj y del valor cargado en ; counter. El mismo retardo se usará para mantener los LEDs ; encendidos o apagados . ; En este ejercicio el reloj parte a una velocidad de 4MHz porque ; se usa un oscilador externo, para luego por software seleccionar ; el reloj interno a 32KHz mediante el registro OSCON. ;********************************************************************* LIST INCLUDE

p=16F887 P16F887.INC

;Tipo de microcontrolador ;Define los SFRs y bits del ;P16F887

__CONFIG _CONFIG1, _CP_OFF&_WDT_OFF&_XT_OSC ;Setea parámetros de ;configuración errorlevel

-302

;Deshabilita mensajes de ;advertencia por cambio ;bancos

;********************************************************************* ;DEFINICION DE VARIABLES ; las variables en el 16F887 pueden escribirse a partir de la ;posición de memoria de datos 0x20 cblock 0x20 ; Block of variables starts at address 20h counter ; Variable "counter" at address 20h endc ;************************************************************************ ;INICIO DEL PROGRAMA org 0x00 ; Address of the first program instruction banksel OSCCON bcf bcf bcf bsf

OSCCON,6 OSCCON,5 OSCCON,4 OSCCON,0

; Selects memory bank containing ; register OSCCON ; Selects internal oscillator LFINTOSC with ; the frequency of 31KHz ; Microcontroller uses internal oscillator

;SETEO DE PUERTOS banksel TRISB ; Selects bank containing register TRISB clrf TRISB ; All port B pins are configured as outputs banksel ANSEL clrf ANSEL

clrf banksel

ANSELH PORTB ; Selects bank containing register PORTB

;INICIALIZACION DE VARIABLES clrf PORTB clrf counter ;DESARROLLO DEL PROGRAMA ;se cargan patrones alternados de unos y ceros en el puerto B ;entre cada patrón de números se llama a un retardo. inicio movlw movwf movlw movwf call

B'01010101' ; Binary number 01010101 is written to W PORTB ; Number is moved to PORTB h'FF' ; Number hFF is moved to W counter ; Number is moved to variable "counter1" retardo

movlw movwf movlw movwf call goto

B'10101010' ; Binary number 10101010 is moved to W PORTB ; Number is moved to PORTB h'FF' ; Number hFF is moved to W counter ; Number is moved to variable "counter1" retardo inicio

retardo decfsz counter ; Variable "counter1" is decremented by 1 goto retardo ; remains in loop retardo return end ; End of program; ************************************************************************

6. Copia impresa del circuito armado en PROTEUS para la simulación en el momento de su ejecución

7. Conclusiones 

Se pudo notar como es que funciona la instrucción DECFSZ, se comprendió el uso de la directiva CBLOCK y se entendió el funcionamiento del sistema de reloj y su registro de control OSCON.



Con el uso del breakpoint y el stopwatch se realizó el conteo de los ciclos de instrucción y los tiempos de reloj que demoraba en ejecutarla, pero a su vez mediante un cálculo rápido pudimos comprobar que el resultado que daba era correcto



Al entrar al lazo que en nuestro programa se lo llamó RETARDO, hacía uso de la instrucción DECFSZ y una variable a la cual llamamos “Counter” la cual era inicializada con el valor de “FF”. “Counter” iba decrementando de uno en uno hasta llagar a “0” y con esto se lograba el parpadeo de los LEDs en el circuito simulado en PROTEUS un cierto intervalo de tiempo.

8. Recomendaciones 

Se recomienda hacer nuevamente el armado del circuito en PROTEUS y no tomar el anterior ya que esto nos puede traer errores y no permitiría que se realice correctamente la simulación



Se debe tomar en cuenta la frecuencia con la cual uno desea realizar el proyecto y realizar la respectiva configuración en PROTEUS porque si se quema el PIC y este no tuvo la frecuencia con la que quisimos trabajar no tendremos el resultados que queremos



Al momento de realizar el control sobre el tiempo en MPLAB que lleva cada subrutina con el menú STOPWATCH debemos recordar colocarlos siempre en cero además de colocar primero los breakpoints (iniciales y finales) donde uno quiera medir el tiempo y luego la “Flecha” en el lugar correcto el cual es en la línea donde se llama a las respectiva subrutina y está el comienzo del breakpoint.

ANEXO DE RESPUESTAS A PRÁCTICA 2 INTEGRANTE 1: José Daniel Plúas INTEGRANTE 2: Maritza Chávez T PARALELO: 8 GRUPO: 2 1) Usando un breakpoint (ìcono breakpoint color rojo ) mida con el STOPWATCH (Debugger->StopWatch) el tiempo que demora la subrutina de retardo

2) ¿Qué es CBLOCK y cómo funciona? La directiva CBLOCK te permite crear una lista de variables que se posicionaran en memoria a partir de la dirección asignada a la primer variable (la dirección después del comando Cblock), incrementando en una. Asigna un nombre a la dirección de memoria que se proporciona después de la instrucción “CBLOCK” con la finalidad de poder entender mejor el programa en lenguaje esamblador. cblock 0x20 ;Bloque de variables empieza en la dirección 20h counter1 ; Variable "counter1" en dirección 20h\ endc 3) Revise la hoja de datos del P16F887 y explique el uso de OSCCON Osccon: es el registro que se encarga de controlar la frecuencia entre ellas está: La IRCF2, IRCF1 Y IRCF0 que sirve para la selección de frecuencia, bit de estado de frecuencia como: HTS LTS. 4) Explique lo que significan cada uno de los siguientes modos de reloj LP, XT, HS, EC y RC. LP: modo de baja potencia y se utiliza para los cristales de cuarzos de baja frecuencias. XT: Se utiliza para los cristales de cuarzos de frecuencias intermedia hasta 8MHz. HS: Se utiliza para los cristales de cuarzos de frecuencias altas mayores a 8MHz. RC: Cuando el oscilador externo se configura a funcionar en modo RC, el pin OSC1 debe estar conectado al circuito RC. La señal de frecuencia del oscilador Rc dividida por 4 está disponible en el pin OSC2. Esta señal se puede utilizar para la calibración, sincronización o para otros propósitos. EC: External clock with I/o on OSC2/CLKOUT.