Você está na página 1de 12

Departamento de Ingeniera Elctrica/Electrnica, Universidad San Francisco de Quito

Laboratorio de Sistemas Digitales

PRCTICA No. 8 Arquitectura de Microcontroladores PIC 16F877A Elaborador por: Alejandro Zambrano Diego Vela Fecha de entrega del informe: 26 noviembre 13 Fecha de elaboracin de la prctica: 20 noviembre 2013

Contenido
1 2 Objetivo ....................................................................................................................... 1 Informe ........................................................................................................................ 1 2.1 Introduccin ......................................................................................................... 1 2.2 Prelaboratorio ....................................................................................................... 7 2.3 Laboratorio ........................................................................................................... 7 Conclusiones .............................................................................................................. 11 Recomendaciones ...................................................................................................... 12 Referencias y Bibliografa ......................................................................................... 12 Anexos ....................................................................................................................... 12

3 4 5 6

1 Objetivo
Introducir la arquitectura de los microcontroladores PIC16F877A. Aprender a utilizar el entorno de desarrollo MPLAB X IDE para el desarrollo de aplicaciones del PIC16F877A. Familiarizar al estudiante con la programacin de microcontroladores a nivel ensamblador. Introducir el manejo de puertos digitales del microcontrolador

2 Informe
2.1 Introduccin
Los microcontroladores son dispositivos programables que adems de realizar procesamiento de datos, proveen de interfaces integradas para interactuar con otros dispositivos o con hardware externo. Algunos ejemplos son de estas

Departamento de Ingeniera Elctrica/Electrnica, Universidad San Francisco de Quito

interfaces son: puertos de comunicacin serial, puertos de comunicacin inalmbrica, conversores A/D, puertos digitales, contadores, relojes y generadores de PWM. En esta prctica se introduce la arquitectura del microcontrolador PIC 16F877A, el cual es un dispositivo de 40 pines. La Figura 1 muestra un diagrama de bloques del micro-arquitectura de este dispositivo. La arquitectura del dispositivo est conformada de 35 instrucciones que se ejecutan en un solo ciclo, 3 modos de direccionamiento (directo, indirecto y relativo) y un stock de 8 niveles para almacenamiento temporal de informacin.

Departamento de Ingeniera Elctrica/Electrnica, Universidad San Francisco de Quito

El set de instrucciones puede clasificarse en tres categoras: 1. Operaciones orientadas a bytes 2. Operaciones orientadas a bits 3. Operaciones de literales y control. Cada instruccin est codificada en 14 bits de acuerdo al formato que se muestra en la Figura 2. Para las instrucciones tipo byte, f denota un registro del file register y d denota donde debe ser almacenado el resultado de la operacin. Si d=0 el resultado es almacenado en el registro W y si es igual a 1 es almacenado en el registro f. Para las instrucciones tipo bit, b representa el bit a ser operado y f el registro que contiene a ese bit. Finalmente para las instrucciones de literales o control k representa un valor de 8 u 11 bits. Cada ciclo de instruccin requiere de 4 ciclos de reloj para ser ejecutada. Por ejemplo si se utiliza un oscilador de 4 MHz, cada instruccin requiere de 1 us para ser ejecutada por el hardware. La Figura 3 resume el set de instrucciones completo de este dispositivo. Toda instruccin ejecuta una secuencia ReadModify-Write (RMW) sobre un registro. Esto significa que cada vez que una instruccin opere sobre un registro, el procesador leer el registro, luego modificar el registro colocando ceros en todos sus bits y luego almacenar el resultado de la operacin. Esto se realiza an en operaciones de lectura.

Departamento de Ingeniera Elctrica/Electrnica, Universidad San Francisco de Quito

El PIC 16F877A divide su memoria en dos segmentos. El primer segmento contiene la memoria de programa y al stack. La memoria de programa de 8Kx14 que va desde la direccin 0000h hasta la 1FFFh y el stack se implementa como un bloque de memoria independiente, como se muestra en la Error! Reference source not found.. A su vez la memoria de programa esta dividida en tres espacios de memoria: El segundo segmento de memoria corresponde a la memoria de datos, la cual est divida en 4 bancos con un total de 368x8 registros. Estos bancos contienen Registros de Propsito General (GPR) y registros de funciones especiales (SFR). Los primeros 32 registros de cada banco estn ocupados por el SFR y a continuacin los GPR. La Figura 5 muestra el mapa de memoria de datos. Los bits RP<1:0> del registro de estado (STATUS REGISTER SR) permiten seleccionar en que banco se est trabajando.

Departamento de Ingeniera Elctrica/Electrnica, Universidad San Francisco de Quito

Departamento de Ingeniera Elctrica/Electrnica, Universidad San Francisco de Quito

El banco de registros muestra las direcciones de la memoria expuestas en el siguiente grfico:

Departamento de Ingeniera Elctrica/Electrnica, Universidad San Francisco de Quito

2.2 Prelaboratorio
Como trabajo previo se realiz un documento describiendo los bits de registro del SFR, adjunto como Anexo. Tambien se realizo un cdigo en assembler para ser implementado en MPLAB X IDE, el cual establece que pines del pic van a ser usados como entrada y cuales con salidas: START BANKSEL PORTC CLRF PORTC BANKSEL TRISC CLRF TRISC

; ; ; ;

SELECCIONAR PORT C DE BANCO LIMPIAR PORT C A CEROS SELECCIONAR BANCO TRISC PONER TRISC EN 0 (OUTPUT)

BANKSEL PORTB ; SELEC PORT B DE BANCO CLRF PORTB ; LIMPIAR PORT B BANKSEL TRISB ; SELEC TRIS B DE BANCO MOVLW B'00001111' MOVWF TRISB ; MOVER LITERAL ANTERIOR A TRISB BANKSEL OPTION_REG BCF OPTION_REG,7 ; HABILITO PULL-UPS END

2.3 Laboratorio
En el laboratorio se realizo un cdigo para implementar un decodificador de BCD a un led 7 segmentos. El cdigo realizado fue: #include p16f877a.inc ; TODO INSERT CONFIG CODE HERE USING CONFIG BITS GENERATOR __CONFIG _FOSC_XT & _WDTE_OFF & _PWRTE_OFF & _BOREN_ON & _LVP_OFF & _CPD_OFF & _WRT_OFF & _CP_OFF RES_VECT GOTO CODE 0x0000 START ; processor reset vector ; go to beginning of program

; TODO ADD INTERRUPTS HERE IF USED MAIN_PROG CODE program START BANKSEL PORTC CLRF PORTC ; let linker place main

; SELECCIONAR PORT C DE BANCO ; LIMPIAR PORT C A CEROS

Departamento de Ingeniera Elctrica/Electrnica, Universidad San Francisco de Quito

BANKSEL TRISC CLRF TRISC

; SELECCIONAR BANCO TRISC ; PONER TRISC EN 0 (OUTPUT)

BANKSEL PORTB ; SELEC PORT B DE BANCO CLRF PORTB ; LIMPIAR PORT B BANKSEL TRISB ; SELEC TRIS B DE BANCO MOVLW B'00001111' MOVWF TRISB ; MOVER LITERAL ANTERIOR A TRISB BANKSEL OPTION_REG BCF OPTION_REG,7 ; HABILITO PULL-UPS BCF STATUS, RP0 ; SELECCIONAR BANCO 0 BCF STATUS, RP1 ; SELECCIONAR BANCO 0 MOVLW 0x20 MOVWF FSR ; CAMBIAR DIRECC FSR A 0x20 MOVLW 0x01 MOVWF INDF

; MOVIENDO DATO REGISTRO W

INCF FSR,1 ; SUMADNO UNO AL FSR APUNTA OTRA DIRECCION ; T #0 MOVLW 0x4F MOVWF INDF INCF FSR,1 ; T #1 MOVLW 0x12 MOVWF INDF INCF FSR,1 ; T #2 MOVLW 0x06 MOVWF INDF INCF FSR,1 ; T #3 MOVLW 0x4C MOVWF INDF INCF FSR,1 ; T #4 MOVLW 0x24 MOVWF INDF INCF FSR,1 ; T #5 MOVLW 0x20 MOVWF INDF INCF FSR,1 ; T #6 8

Departamento de Ingeniera Elctrica/Electrnica, Universidad San Francisco de Quito

MOVLW 0x0F MOVWF INDF INCF FSR,1 ; T #7 ; MOVLW 0x30 ; MOVWF FSR ; T # 7 MOVLW 0x00 ; T #8 MOVWF INDF INCF FSR,1 MOVLW 0x0C ; T #9 MOVWF INDF LAZO MOVLW 0x20 MOVWF FSR

; REGRESAR FSR DIRECCION 20 ; LEO PORTB Y ALMACENO EN W SUMA W CON FSR LEE LO QUE APUNTA FSR Y ALMACENA EN W MUEVE W A PORT C

MOVF PORTB,0 ADDWF FSR,1 ; MOVF INDF,0 ; MOVWF PORTC ;

GOTO LAZO ; GENERAR LOOP END

Para Realizar el manejo de 4 display de 7 segmentos se realiza lo siguiente: Como se deben encender 4 display para poder mostrar cualquier numero entre 0 9999. Para esto podemos usar un transistor PNP como switch de activacin y usamos tambin un CI 7447. El hardware a usarse ser el siguiente:

Departamento de Ingeniera Elctrica/Electrnica, Universidad San Francisco de Quito

Las entradas del dip switch sern las mismas que para el presente proyecto, el cdigo en basic para un numero es: #include p16f877a.inc ; TODO INSERT CONFIG CODE HERE USING CONFIG BITS GENERATOR __CONFIG _FOSC_XT & _WDTE_OFF & _PWRTE_OFF & _BOREN_ON & _LVP_OFF & _CPD_OFF & _WRT_OFF & _CP_OFF RES_VECT GOTO CODE 0x0000 START ; processor reset vector ; go to beginning of program

; TODO ADD INTERRUPTS HERE IF USED MAIN_PROG CODE program START BANKSEL PORTC CLRF PORTC BANKSEL TRISC CLRF TRISC ; let linker place main

; ; ; ;

SELECCIONAR PORT C DE BANCO LIMPIAR PORT C A CEROS SELECCIONAR BANCO TRISC PONER TRISC EN 0 (OUTPUT)

BANKSEL PORTB ; SELEC PORT B DE BANCO CLRF PORTB ; LIMPIAR PORT B BANKSEL TRISB ; SELEC TRIS B DE BANCO MOVLW B'00001111' MOVWF TRISB ; MOVER LITERAL ANTERIOR A TRISB BANKSEL OPTION_REG BCF OPTION_REG,7 ; HABILITO PULL-UPS BCF STATUS, RP0 ; SELECCIONAR BANCO 0 BCF STATUS, RP1 ; SELECCIONAR BANCO 0

10

Departamento de Ingeniera Elctrica/Electrnica, Universidad San Francisco de Quito

MOVLW 0x20 MOVWF FSR ; CAMBIAR DIRECC FSR A 0x20 MOVLW 0x01 MOVWF INDF

; MOVIENDO DATO REGISTRO W

INCF FSR,1 ; SUMADNO UNO AL FSR APUNTA OTRA DIRECCION ; T #0

LAZO MOVLW 0x20 MOVWF FSR

; REGRESAR FSR DIRECCION 20 ; LEO PORTB Y ALMACENO EN W SUMA W CON FSR LEE LO QUE APUNTA FSR Y ALMACENA EN W MUEVE W A PORT C

MOVF PORTB,0 ADDWF FSR,1 ; MOVF INDF,0 ; MOVWF PORTC ;

GOTO LAZO ; GENERAR LOOP END En el cdigo previo solo se tiene que instaurar el orden para que se enciencdan cada uno de los nmeros con su codificacin en Hexadecimal, es decir almacenamos los nmeros en el orden que deberan ser mostrados.

3 Conclusiones
Esta prctica consisti en la implementacin en un microcontrolador, el PIC 16F877A, de una codificacin de 4 bits a 7 segmentos. El laboratorio fue un xito, ya que se pudo realizar la implementacin. Primero se escribi el cdigo, y luego se lo implement. La implementacin tuvo un grado de dificultad moderado, por lo que con cierto esfuerzo se pudo realizar. Este laboratorio reforz nuestros conocimientos acerca del tema tratado, anteriormente estudiado en clase. Este laboratorio, se aprendi a configurar los puertos del PIC para realizar el trabajo deseado, y el cdigo necesario para implementarlo. Por ello con este laboratorio se aprendi a utilizar el entorno de desarrollo MPLAB X IDE para el desarrollo de aplicaciones para el desarrollo de aplicaciones del PIC16F877A, tambin se pudo familiarizar con la programacin de microcontroladores a nivel de ensamblador, por lo que est prctica cumpli con nuestros objetivos.

11

Departamento de Ingeniera Elctrica/Electrnica, Universidad San Francisco de Quito

4 Recomendaciones 5 Referencias y Bibliografa


Harris, David. Digital design and computer architecture. 2nd ed. Waltham: Morgan Kaufmann, 2013. Print.

6 Anexos

12

Você também pode gostar