You are on page 1of 8

LABORATORIO N3 EL MICROCONTROLADOR PIC 16F877 1) OBJETIVOS a. Entender el funcionamiento de los PIC 16f877 b.

Comprender y configurar los puertos tanto como entradas como salidas c. Detectar corregir y mejorar los programas con este microcontrolador d. Aplicar y entender el set de instrucciones 2) MARCO PRACTICO a. EJERCICIO 1. Realizar un programa q configure el puerto B como entradas en el primer nible y el nible superior del puerto B como salidas, luego debe controlar una lmpara que debe ser prendida o apagada desde tres puntos. Disee un programa que la encienda si y solo si hay dos interruptores activados. list p=16f877 radix hex status equ 0x03 porta equ 0x05 portb equ 0x06 portc equ 0x07 portd equ 0x08 porte equ 0x09 trisa equ 0x85 trisb equ 0x86 trisc equ 0x87 trisd equ 0x88 trise equ 0x89 adcon1 equ 0x1f CONF_ADCON1 equ b'00000110' M_PORTB equ 20 org h'00' nop nop bsf status,5 bcf status,6 movlw CONF_ADCON1 movwf adcon1 movlw b'00000111' movwf trisb bcf status,5

bcf status,6 bucle: clrf status movwf portb movwf M_PORTB bcf M_PORTB,3 movlw 0x03 subwf M_PORTB,W btfsc status,3 goto on movlw 0x05 btfsc status,3 goto on movlw 0x06 subwf M_PORTB,W btfsc status,3 goto on bcf portb,3 goto bucle on: bsf portb,3 nop goto bucle end b. EJERCICIO 2. Disear un programa que simule un comparador de 4 lneas, considerando las lneas de entrada: DATO B DATO A RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0 B3 B2 B1 B0 A3 A2 A1 A0 Y las lneas de salida: condicin RA2 RA1 RA0 A<B 0 0 1 A=B 0 1 0 A>B 1 0 0 list p=16f877 radix hex status equ 0x03 porta equ 0x05 portb equ 0x06 portc equ 0x07

portd equ 0x08 porte equ 0x09 trisa equ 0x85 trisb equ 0x86 trisc equ 0x87 trisd equ 0x88 trise equ 0x89 adcon1 equ 0x1f CONF_ADCON1 equ 0x22 CONF_ADCON EQU b'00000110' DATO_A EQU 0x20 DATO_B EQU 0x21 org h'00' nop nop bsf status,5 bcf status,6 movlw CONF_ADCON1 movwf adcon1 movlw 0xff movwf trisb movlw 0x00 movwf trisa bcf status,5 bcf status,6 bucle: movf portb,w movwf DATO_A movwf DATO_B swapf DATO_B,0 movlw 0x0f andwf DATO_A,0 andwf DATO_B,0 movf DATO_A,1 subwf DATO_B,1 btfsc status,0 goto evalua1 movlw b'00000100' goto escribe evalua1: btfsc status,2 goto evalua2

movlw b'00000001' goto escribe evalua2: movlw b'00000010' escribe: movwf porta goto bucle end c. EJERCICIO 3. Realizar un programa en lenguaje assembler que configure el puerto A como entradas, el puerto B como salidas, luego debe controlar una lmpara que debe ser encendida desde tres puntos. Disee un programa que la encienda si y solo si hay dos interruptores activados. list p=16f877 radix hex status equ 0x03 porta equ 0x05 portb equ 0x06 portc equ 0x07 portd equ 0x08 porte equ 0x09 trisa equ 0x85 trisb equ 0x86 trisc equ 0x87 trisd equ 0x88 trise equ 0x89 adcon1 equ 0x1f CONF_ADCON1 equ b'00000110' M_PORTA equ 20 org h'00' nop nop bsf status,5 bcf status,6 movlw CONF_ADCON1 movwf adcon1 movlw b'00000111' movwf trisb bcf status,5 bcf status,6 bucle:

clrf status movwf porta movwf M_PORTA bcf M_PORTA,3 movlw 0x03 subwf M_PORTA,1 btfsc status,3 goto on movlw 0x05 btfsc status,3 goto on movlw 0x06 subwf M_PORTA,1 btfsc status,3 goto on bcf porta,3 goto bucle on: bsf porta,3 nop goto bucle end d. EJERCICIO 4a. Lo mismo que en el ejercicio 3, la salid es el bit RC0 del puerto C y las entras el puerto B (RB0, RB1 y RB2). list p=16f877 radix hex status equ 0x03 porta equ 0x05 portb equ 0x06 portc equ 0x07 portd equ 0x08 porte equ 0x09 trisa equ 0x85 trisb equ 0x86 trisc equ 0x87 trisd equ 0x88 trise equ 0x89 adcon1 equ 0x1f CONF_ADCON1 equ b'00000110' M_PORTD equ 20

org h'00' nop nop bsf status,5 bcf status,6 movlw CONF_ADCON1 movwf adcon1 movlw b'00000111' movwf trisb bcf status,5 bcf status,6 bucle: clrf status movwf portd movwf M_PORTD bcf M_PORTD,3 movlw 0x03 subwf M_PORTD,1 btfsc status,3 goto on movlw 0x05 btfsc status,3 goto on movlw 0x06 subwf M_PORTD,1 btfsc status,3 goto on bcf portd,3 goto bucle on: bsf portd,0 nop goto bucle end e. EJERCICIO 4b. lo mismo que en el ejercicio 3, la salida es el bit RE0 del puerto E y las entradas el puerto D (RD0, RD1 y RD2) list p=16f877 radix hex status equ 0x03 porta equ 0x05

portb equ 0x06 portc equ 0x07 portd equ 0x08 porte equ 0x09 trisa equ 0x85 trisb equ 0x86 trisc equ 0x87 trisd equ 0x88 trise equ 0x89 adcon1 equ 0x1f CONF_ADCON1 equ b'00000110' M_PORTE equ 20 org h'00' nop nop bsf status,5 bcf status,6 movlw CONF_ADCON1 movwf adcon1 movlw b'00000111' movwf trisb bcf status,5 bcf status,6 bucle: clrf status movwf porte movwf M_PORTE bcf M_PORTE,3 movlw 0x03 subwf M_PORTE,1 btfsc status,3 goto on movlw 0x05 btfsc status,3 goto on movlw 0x06 subwf M_PORTE,1 btfsc status,3 goto on bcf porte,3 goto bucle on:

bsf porte,0 nop goto bucle end 3) CONCLUSIONES Y RECOMENDACIONES a. Se puede concluir que el set de instrucciones del pic 16f877 es muy similar al 16f84 en la mayora de sus instrucciones b. El MPLAB resulta ser una herramienta til para la verficacion del funcionamiento del programa