11/13/2007 PRÁCTICA 0 CIRCUITO BASE SISTEMA MÍNIMO BASADO EN EL PIC16F84 1 11/13/2007 PRÁCTICA 1_1 COMPUERTA “AND” DE TRES ENTRADAS Hardware X0 X1 Y X2 2 11/13/2007 Comportamiento esperado INICIO Configurar Puerto A como entradas y Puerto B como salidas NO RA0 = 1 SI RB0 0 NO RB0 1 RA1 = 1 SI NO RA2 = 1 SI Instrucciones • movlw k – Mueve la constante k al registro W • movwf f – Mueve el contenido del registro W a la localidad f de RAM Interna • bsf f, n – Pone en alto (1 lógico) el bit n de la localidad f (f es de 8 bits) • bcf f, n – Pone en bajo (0 lógico) el bit n de la localidad f (f es de 8 bits) • btfss f, n – Evalúa al bit n de la localidad f, si esta en alto brinca a la siguiente instrucción • goto <etiqueta> – Salto incondicional 3 11/13/2007 Programa (Parte 1) ; AND3.ASM – Programa que hace que el PIC se comporte como una compuerta ; AND de 3 entradas include <p16f84.inc> ; Se incluyen definiciones ; Primer programa utilizando el PIC16F84 LIST P = 16F84 ORG 0 ; Indica al ensamblador el dispositivo a utilizar ; Indica la dirección de inicio del programa ; Configuración del Puerto A como entrada y el puerto B como salida bsf movlw movwf movlw movwf bcf STATUS, 5 0xFF PORTA 0x00 PORTB STATUS, 5 ; Pone en alto el bit 5 del registro ESTADO ; en el registro W se coloca FF (hex) ; El puerto A se configura como entrada ; en el registro W se coloca 00 (hex) ; El puerto B se configura como salida Programa (Parte 2) ; Inicia el Lazo lazo: alto btfss PORTA, 0 ; Evalúa el bit 0 del puerto A, salta si esta en goto btfss bajo PORTA, 1 ; Evalúa el bit 1 del puerto A, salta si esta en goto btfss bajo PORTA, 2 ; Evalúa el bit 2 del puerto A, salta si esta en goto bsf goto bajo PORTB, 0 lazo bcf goto PORTB, 0 lazo alto alto bajo: ; Si alguno de los tres bits está en bajo, este ; segmento de código es alcanzado end 4 11/13/2007 PRÁCTICA 1_2 Suma 2 a un puerto de entrada Hardware PIC16F84 Dato PORTA PORTB Dato + 2 5 11/13/2007 Comportamiento esperado Inicio Configurar al puerto A como Entradas y al Puerto B como Salidas W Puerto A W W+2 Puerto B W Mas Instrucciones • movf f, d – Mueve el contenido de f a donde indique d, si d = 0, el destino es W y si d = 1 el destino será el mismo f • addlw k – Suma el valor de la constante k con el registro W, dejando el resultado en W • movwf f – Mueve el contenido de W a la localidad f de RAM 6 11/13/2007 Programa (Parte 1) ; SUMA2.ASM – Programa que suma 2 al puerto A y muestra el resultado en el ; puerto B include <p16f84.inc> ; Se incluyen definiciones ; Segundo programa utilizando el PIC16F84 LIST P = 16F84 ORG 0 ; Indica al ensamblador el dispositivo a utilizar ; Indica la dirección de inicio del programa ; Configuración del Puerto A como entrada y el puerto B como salida bsf movlw movwf movlw movwf bcf STATUS, 5 0xFF PORTA 0x00 PORTB STATUS, 5 ; Pone en alto el bit 5 del registro ESTADO ; en el registro W se coloca FF (hex) ; El puerto A se configura como entrada ; en el registro W se coloca 00 (hex) ; El puerto B se configura como salida Programa (Parte 2) ; Lazo infinito LAZO: MOVF PORTA, W ADDLW 2 MOVWF PORTB GOTO LAZO END 7 11/13/2007 PRÁCTICA 2_1 COMPARADOR DE 4 BITS HARDWARE A>B Número A Comparador A=B Número B 4 bits A<B ENTRADA/SALIDA REFERENCIA UBICACIÓN NUMERO A NUMA PUERTO B [0 – 3] NUMERO B NUMB PUERTO B [4 – 7] A> B AMAYB PUERTO A [0] A= B AIGB PUERTO A [1] A< B AMENB PUERTO A [2] 8 11/13/2007 Comportamiento INICIO Configurar: Puerto B : entradas Puerto A : Salidas NumA > NumB AmayB <- 1 AigB <- 0 AmenB <- 0 NumA = NumB AmayB <- 0 AigB <- 1 AmenB <- 0 NumA <- PortB[0-3] NumB <- PortB[4-7] AmayB <- 0 AigB <- 0 AmenB <- 1 include NUMA NUMB AMAYB AIGB AMENB EQU EQU EQU EQU EQU <p16f84.inc> 0x0C 0x0D 0 1 2 ; Se incluyen definiciones ; Referencia a memoria ; Comparador de 4 bits LIST P = 16F84 ; Indica al ensamblador el dispositivo a utilizar ORG 0 ; Indica la dirección de inicio del programa ; Configuración del Puerto B como entradas y el puerto A como salidas bsf movlw movwf movlw movwf bcf STATUS, 5 0x00 PORTA 0xFF PORTB STATUS, 5 ; Pone en alto el bit 5 del registro ESTADO ; El puerto A se configura como salidas ; El puerto B se configura como entradas 9 11/13/2007 LAZO: MOVF ANDLW MOVWF MOVF ANDLW MOVWF SWAPF PORTB, W 0X0F NUMA PORTB, W 0XF0 NUMB NUMB, F ; Separa los números de 4 bits MOVF SUBWF BTFSC GOTO BTFSC GOTO NUMB, W NUMA, W STATUS, Z IGUAL STATUS, C MAYOR ; Resta para comparar BCF BCF BSF GOTO PORTA, AMAYB PORTA, AIGB PORTA, AMENB LAZO BSF BCF BCF GOTO PORTA, AMAYB PORTA, AIGB PORTA, AMENB LAZO ; Bandera Z en alto, si son iguales ; Acarreo en alto si A es mayor MENOR: MAYOR: IGUAL: BCF BSF BCF GOTO PORTA, AMAYB PORTA, AIGB PORTA, AMENB LAZO end PRÁCTICA 2_2 DECODIFICADOR DE BINARIO A 7 SEGEMENTOS 10 11/13/2007 HARDWARE PIC16F84 PIC16F84 Entrada Binaria RA0 RA1 RA2 RA3 RB0 RB1 ... RB6 COMPORTAMIENTO ENTRADA SALIDA ENTRADA 0000 0011 0001 0100 0010 0101 SALIDA 11 11/13/2007 COMPORTAMIENTO ENTRADA SALIDA ENTRADA 0110 1001 0111 1010 1000 1011 SALIDA COMPORTAMIENTO ENTRADA 1100 SALIDA ENTRADA SALIDA 1111 1101 1110 12 11/13/2007 Relación de salidas Num dp g f e d c b a HEX 0 1 1 0 0 0 0 0 0 C0 1 1 1 1 1 1 1 0 0 FC 2 1 0 1 0 0 1 0 0 A4 3 1 0 1 1 0 0 0 0 B0 4 1 0 0 1 1 0 0 1 99 5 1 0 0 1 0 0 1 0 92 6 1 0 0 0 0 0 1 0 82 7 1 1 1 1 1 0 0 0 F8 8 1 0 0 0 0 0 0 0 80 9 1 0 0 1 1 0 0 0 98 A 1 0 0 0 1 0 0 0 88 B 1 0 0 0 0 0 1 1 83 C 1 1 0 0 0 1 1 0 C6 E 1 0 0 0 0 1 1 0 86 F 1 0 0 0 1 1 1 0 8E a b f g e c d dp dp g f e d C b a RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0 Programa El lazo principal : Lazo: MOVF CALL MOVWF GOTO PORTA, W DECODIFICA PORTB Lazo 13 11/13/2007 Función de Decodificación DECODIFICA: ADDWF PCL, F RETLW 0xC0 RETLW 0xFC RETLW 0xA4 RETLW 0xB0 RETLW 0x99 RETLW 0x92 RETLW 0x82 RETLW 0xF8 RETLW 0x80 RETLW 0x98 RETLW 0x88 RETLW 0x83 RETLW 0xC6 RETLW 0x86 RETLW 0x8E PRÁCTICA 3 MANEJO DINAMICO DE DESPLEGADORES 14 11/13/2007 HARDWARE PIC16F84 RB0 ... RB3 UP RA0 DOWN RST BCD a 7 seg. RA1 RA2 RB4 ... RB7 Arreglo de transistores PNP • Desplegar 0 1 2 3 , en los desplegadores de 7 segmentos. • Los segmentos de los 4 desplegadores comparten un bus. • Sólo el desplegador habilitado mostrará la información. Uso de transistores . . Vcc . . 470 Del micro 820 La habilitación se realiza colocando un 0 lógico en la terminal del puerto A F G E B C D 15 11/13/2007 Comportamiento PUERTO B ACCIÓN 1110 0000 Despliega 0 en el primer visualizador 1101 0001 Despliega 1 en el segundo visualizador 1011 0010 Despliega 2 en el tercer visualizador 0111 0011 Despliega 3 en el cuarto visualizador Al recorrer los visualizadores a una frecuencia rápida, da la apariencia de que todos están encendidos al mismo tiempo. PRÁCTICA 4 CONTADOR 0 – 9999 ASCENDENTE - DESCENDENTE 16 11/13/2007 HARDWARE PIC16F84 UP DOWN RST RB0 ... RB3 BCD a 7 seg. RA0 RA1 RA2 RB4 ... RB7 Arreglo de transistores PNP Se agregan botones al Hardware anterior PERIFERICOS Los botones proporcionan un 1 lógico si no se han presionado 17 11/13/2007 COMPORTAMIENTO • Al principio se desplegará el número 0000 • Al presionar el botón UP el número debe incrementarse en 1 • Al presionar el botón DOWN el número debe decrementarse en 1 • Deben meterse retardos para evitar crecimientos abruptos • Al presionar RST la cuenta se va a 0000 PRÁCTICA 5 PRUEBA DE INTERRUPCIONES 18 11/13/2007 COMPORTAMIENTO • Mismo Hardware que el anterior • Que la cuenta se incremente automáticamente cada segundo, se sugiere usar la interrupción por Timer PROYECTO FINAL RELOJ DE TIEMPO REAL 19 11/13/2007 COMPORTAMIENTO • Mismo Hardware que en la práctica anterior. • La cuenta de segundos se lleva en forma interna. • Externamente se muestra Hora y Minutos. • Los botones permiten configurar la hora. 20