Letrero 4 display

13
INTRODUCCION En este código se manipularon algunos registros nuevos: *INTCON: Este registro contiene varios bits de selección de fuentes de interrupción, el bit de activación global de interrupciones y varias banderas que indican la causa de una interrupción. Sirve para el control global de las interrupciones y para indicar la procedencia de algunas de ellas, gracias a los bits de estado. Se dispone de cuatro potenciales recursos de interrupción: Una fuente externa a través del pin RB0/INT. El desbordamiento del temporizador 0 (TMR0). Un cambio de estado en los pines RB4 a RB7. Programación de la EEPROM de datos Cada bandera o bandera individual debe ponerse a cero por software. Solamente hay un vector de interrupción en la memoria de programa (dirección 0004h), por lo que se deben comprobar los bits de INTCON en la subrutina de interrupción para saber cuál es la fuente de la misma. Cuando llega una interrupción, el PIC pone el bit GIE a cero, de forma que no se perturbe el tratamiento de la interrupción en curso, debido a otras interrupciones eventuales. Este bit se pone automáticamente a uno al terminar la subrutina de interrupción, con la ejecución de la instrucción RETFIE. *OPTION: El registro OPTION (o registro de opciones) se emplea para programar las opciones del temporizador TMR0, el tipo de flanco con el que se detecta una interrupción y la activación de las resistencias de polarización del puerto B. Ocupa la posición 81h de la página 1 del banco de registros. Debe escribirse usando la instrucción especial OPTION. Esta instrucción carga el contenido de W en el registro OPTION. *TMR0: El registro TMR0 (Timer 0) almacena el valor del contador TMR0, que como ya sabemos, está funcionando continuamente e incrementando el valor que tiene almacenado. Las opciones que controlan este contador residen en el registro OPTION. El registro TMR0 se incrementa en una unidad con cada impulso de reloj seleccionado mediante el registro OPTION. Cada vez que llega al valor FF, vuelve a 00 generando una interrupción, si se ha autorizado, y continúa su ciclo indefinidamente. El registro TMR0 se puede leer o escribir directamente con cualquier instrucción, con el fin de conocer su posición actual, o para inicializarlo en un estado determinado. Es importante saber que después de cualquier escritura en este registro, es necesario un retardo de dos ciclos de instrucción para que se retome la incrementación. Este retraso es independiente de la fuente de reloj usada. Las instrucciones concernidas son MOVF TMR0 o CLRF TMR0. Para comprobar el paso por cero sin inferir en el desarrollo regular del recuento, es

description

display 7 segmentos anodo comun con pic 16f877a

Transcript of Letrero 4 display

Page 1: Letrero 4 display

INTRODUCCION

En este código se manipularon algunos registros nuevos:

*INTCON: Este registro contiene varios bits de selección de fuentes de interrupción, el bit de activación global de interrupciones y varias banderas que indican la causa de una interrupción. Sirve para el control global de las interrupciones y para indicar la procedencia de algunas de ellas, gracias a los bits de estado. Se dispone de cuatro potenciales recursos de interrupción:

• Una fuente externa a través del pin RB0/INT. • El desbordamiento del temporizador 0 (TMR0). • Un cambio de estado en los pines RB4 a RB7. • Programación de la EEPROM de datos

Cada bandera o bandera individual debe ponerse a cero por software. Solamente hay un vector de interrupción en la memoria de programa (dirección 0004h), por lo que se deben comprobar los bits de INTCON en la subrutina de interrupción para saber cuál es la fuente de la misma. Cuando llega una interrupción, el PIC pone el bit GIE a cero, de forma que no se perturbe el tratamiento de la interrupción en curso, debido a otras interrupciones eventuales. Este bit se pone automáticamente a uno al terminar la subrutina de interrupción, con la ejecución de la instrucción RETFIE.

*OPTION: El registro OPTION (o registro de opciones) se emplea para programar las opciones del temporizador TMR0, el tipo de flanco con el que se detecta una interrupción y la activación de las resistencias de polarización del puerto B. Ocupa la posición 81h de la página 1 del banco de registros. Debe escribirse usando la instrucción especial OPTION. Esta instrucción carga el contenido de W en el registro OPTION.

*TMR0: El registro TMR0 (Timer 0) almacena el valor del contador TMR0, que como ya sabemos, está funcionando continuamente e incrementando el valor que tiene almacenado. Las opciones que controlan este contador residen en el registro OPTION. El registro TMR0 se incrementa en una unidad con cada impulso de reloj seleccionado mediante el registro OPTION. Cada vez que llega al valor FF, vuelve a 00 generando una interrupción, si se ha autorizado, y continúa su ciclo indefinidamente. El registro TMR0 se puede leer o escribir directamente con cualquier instrucción, con el fin de conocer su posición actual, o para inicializarlo en un estado determinado. Es importante saber que después de cualquier escritura en este registro, es necesario un retardo de dos ciclos de instrucción para que se retome la incrementación. Este retraso es independiente de la fuente de reloj usada. Las instrucciones concernidas son MOVF TMR0 o CLRF TMR0. Para comprobar el paso por cero sin inferir en el desarrollo regular del recuento, es

Page 2: Letrero 4 display

aconsejable utilizar, por ejemplo, una instrucción MOVF TMR0,W, que no hace más que una lectura.

El reloj interno deja de funcionar en el modo SLEEP, por lo que no se puede contar con sus interrupciones en este modo ni por consiguiente, que salga de este modo de funcionamiento por medio de dicha interrupción.

También en el desarrollo de la práctica, fue necesario utilizar una tabla de codificación hexadecimal (mostrada a continuación), para el despliegue de las letras en los Displays.

-Tabla de codificación a hexadecimal:

RB7 G

RB6 F

RB5 E

RB4 D

RB3 C

RB2 B

RB1 A

RB0 DP

CODIGO HEX

B 0 0 0 0 0 0 0 1 01 U 1 0 0 0 0 0 1 1 83 A 0 0 0 1 0 0 0 1 11 P 0 0 0 1 1 0 0 1 19 F 0 0 0 1 1 1 0 1 1D C 1 0 0 0 1 1 0 1 8D E 0 0 0 0 1 1 0 1 0D 1 1 1 1 1 1 1 1 FF

P 0 0 0 1 1 0 0 1 19 I 1 0 0 1 1 1 1 1 9F C 1 0 0 0 1 1 0 1 8D 1 1 1 1 1 1 1 1 FF

1 1 1 1 1 0 0 1 1 F3 7 1 1 1 1 0 0 0 1 F1 C 1 0 0 0 1 1 0 1 8D 1 1 1 1 1 1 1 1 FF

7 1 1 1 1 0 0 0 1 F1 6 0 0 0 0 0 1 0 1 05 6 0 0 0 0 0 1 0 1 05 1 1 1 1 1 1 1 1 FF

OBJETIVO

Familiarizar al alumno con la manipulación de los puertos del Microcontrolador PIC16f877A mediante la manipulación de los registros TMR0, INTCON y ADCON0, de tal manera que estos interactúen con elementos externos a dicho Microcontrolador, configurando varios puertos en modo salida de señales digitales (1-0).

Page 3: Letrero 4 display

DIAGRAMAS DE FLUJO

Si

Si

TMR0  x  100  

Letrero 5

TMR0  x  100  

Letrero 2

TMR0  x  100  

Letrero 3

TMR0  x  100  

Letrero 4

Inicio

Letrero 1

TMR0  x  100  

NO Si

NO

Si

Si

NO

NO

Diagrama  1  

SI

SI

Letrero 1

Contador = 100

RA0 = 1

W = 01

W

RA0=0, RA1= 1

W = 83

W

RA1=0, RA2= 1

W = 11

W

RA2=0, RA3= 1

W = 19

W

RA3 = 1

INTCON,2=1

Contador = Contador - 1

Contador= 0

Letrero 2

NO  

NO  

Diagrama  2  

Page 4: Letrero 4 display

SI

 

SI

 

Letrero 2

Contador = 100

RA0 = 1

W = 1D

W

RA0=0, RA1= 1

W = 8D

W

RA1=0, RA2= 1

W = 0D

W

RA2=0, RA3= 1

W = FF

W

RA3 = 1

INTCON,2=1

Contador = Contador - 1

Contador= 0

Letrero 3

NO  

NO  

SI

 

SI

 

Letrero 3

Contador = 100

RA0 = 1

W = 19

W

RA0=0, RA1= 1

W = 9F

W

RA1=0, RA2= 1

W = 8D

W

RA2=0, RA3= 1

W = FF

W

RA3 = 1

INTCON,2=1

Contador = Contador - 1

Contador= 0

Letrero 4

NO  

NO  

Diagrama  4  Diagrama  3  

Page 5: Letrero 4 display

SI

 

SI

 

Letrero 4

Contador = 100

RA0 = 1

W = F3

W

RA0=0, RA1= 1

W = F1

W

RA1=0, RA2= 1

W = 8D

W

RA2=0, RA3= 1

W = FF

W

RA3 = 1

INTCON,2=1

Contador = Contador - 1

Contador= 0

Letrero 5

NO  

NO  

SI

 

SI

 

Letrero 5

Contador = 100

RA0 = 1

W = F1

W

RA0=0, RA1= 1

W = 05

W

RA1=0, RA2= 1

W = 05

W

RA2=0, RA3= 1

W = FF

W

RA3 = 1

INTCON,2=1

Contador = Contador - 1

Contador= 0

Letrero 1

NO  

NO  

Diagrama  6  Diagrama  5  

Page 6: Letrero 4 display

En el Diagrama 1 podemos ver que se imprime el Letrero 1 mientras el temporizador no se haya desbordado 100 veces (TMR0 x 100). Una vez que el temporizador se haya desbordado 100 veces el programa pasa a desplegar el Letrero 2; de igual forma si el temporizador no se ha desbordado 100 veces, se sigue desplegando el letrero 2, cuando el temporizador se desborde 100 veces, el código pasara a la siguiente parte, donde despliega el Letrero 3. Así continua hasta llegar al letrero 5; una vez que, estando en el Letrero 5, el temporizador se haya desbordado 100 veces el código regresará a desplegar el Letrero 1.

Los diagramas del 2 al 5 explican cómo es que se despliega cada letrero, pondremos como ejemplo el Diagrama 2: -Primero asignamos a la variable (o registro) Contador el valor de 100. -Después hacemos RA0 = 1: con esta acción encendemos el primero de los cuatro Displays. -Luego asignamos a W un valor, dicho valor corresponde a una letra (de acuerdo con la tabla de codificación hexadecimal). En este caso el valor de 01 corresponde a la letra B. -Mandamos imprimir W, es decir, desplegamos 01 o B en el Display 1. -Hacemos RA0= 0 y RA1= 1, con esta acción apagamos el Display que habíamos encendido (el primero) y encendemos el segundo Display. -Ahora asignamos a W otro valor, correspondiente a otra letra, en este caso la letra U (83). -Imprimimos W, es decir, el segundo Display va a desplegar la letra U. -Ahora hacemos RA1= 0 y RA2 = 1, con este apagamos el segundo Display y encendemos el tercero. -Asignamos a W un nuevo valor (este vez el valor 11, correspondiente a la letra A). Imprimimos ese valor (lo desplegamos en el tercer Display). -Después apagamos el tercer Display y encendemos el ultimo (RA2 = 0, RA3 = 1). -Asignamos a W el valor 19 (letra P), lo imprimimos (desplegamos en el cuarto Display) y apagamos el cuarto Display (RA3 = 1). -Después preguntamos si el temporizador se desbordo; esto preguntando si la bandera de desbordamiento se activó (INTCON,2 = 1). Si la respuesta es No, entonces el código regresa al principio, es decir comienza a desplegar el letrero nuevamente; si la respuesta es Si entonces el código procede a decrementar el contador (Contador = Contador -1). -Ahora, preguntamos si el contador vale 0, es decir, si al decrementarle uno quedo en 0. Si la respuesta es no entonces, al igual que en el paso anterior, el código regresa al inicio (volviendo a desplegar el letrero). Si la respuesta fue si, esto quiere decir que el tiempo de este letrero ha terminado, por lo que debemos proceder a desplegar el segundo letrero. -Este segundo letrero (al igual que el tercer, cuarto y quinto) vienen explicados en los siguientes diagramas de flujo; el funcionamiento es el mismo que con el Letrero 1, lo único que cambia son las letras a desplegar y, por lo tanto los valores que se le asignan a W.

Page 7: Letrero 4 display

ESQUEMÁTICOS

Material Utilizado

1 PIC16F877A 8 Resistencias de 220 Ohms 1 Resistencia de 10 KOhms 1 Resistencia de 100 Ohms 1 Switch 1 Cristal 4 MHz 2 Capacitores 33pF 4 Displays 7 segmentos, ánodo común (DA05) 4 Transistores BC548 Protoboard Alambre Pulsera antiestática

Page 8: Letrero 4 display

CÓDIGO

list p=16f877a ; list directive to define processor #include <p16f877a.inc> ; processor specific variable definitions __CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFF

CONT equ 20 ; constante DELAY equ 21 ; constante FLAG equ 22 org 0 Goto INICIO org 4 Goto ISR ; rutina de servicio org 5

INICIO bsf STATUS, RP0 ; banco 1 MOVLW 0X07 MOVWF ADCON0 ; Puerto A, E/S digitales CLRF TRISA CLRF TRISB ; Puerto B: salidas MOVLW 0X87 MOVWF OPTION_REG ; 1:256 MOVLW 0XA0 MOVWF INTCON ; interrupción TMR0 BCF STATUS, RP0 ; Banco 0 MOVLW -D'117' MOVWF TMR0 ; temporización 0.3 seg MOVLW D'100' MOVWF CONT ; CONT = 100 MOVLW B'00000000' MOVWF FLAG MOVLW B'00000001' ; Pone bit 0 de Flag a 1 MOVWF FLAG Goto BUAP ; Manda a la 1a palabra

LETRERO1 bsf FLAG, 0 ; activa bandera BUAP btfss FLAG, 0 ; pregunta si la bandera es cero Goto LETRERO2 ; si es cero se va a Letrero2 bsf PORTA,0 ; habilita Display1 MOVLW 0X01 MOVWF PORTB ; B CALL RETARDO bcf PORTA,0 ; inhabilita Display 1 bsf PORTA,1 ; Habilita Display 2

MOVLW 0X83 MOVWF PORTB ; U CALL RETARDO bcf PORTA,1 ; inhabilita Display 2 bsf PORTA,2 ; habilita Display 3 MOVLW 0X11

Page 9: Letrero 4 display

MOVWF PORTB ; A CALL RETARDO bcf PORTA,2 ; inhabilita Display 3 bsf PORTA,3 ; habilita Display 4 MOVLW 0X19 MOVWF PORTB ; P CALL RETARDO bcf PORTA,3 ; inhabilita Display 4 GOTO BUAP LETRERO2 bsf FLAG, 0 ; activa bandera FCE btfss FLAG, 0 ; pregunta si la bandera es cero goto LETRERO3 ; si es cero despliega el letrero 3 bsf PORTA,0 ; habilita Display 1 MOVLW 0X1D MOVWF PORTB ; F CALL RETARDO bcf PORTA,0 ; inhabilita Display 1 bsf PORTA,1 ; habilita Display 2 MOVLW 0X8D MOVWF PORTB ; C CALL RETARDO bcf PORTA,1 ; inhabilita Display 2 bsf PORTA,2 ; habilita Display 3 MOVLW 0X0D MOVWF PORTB ; E CALL RETARDO bcf PORTA,2 ; inhabilita Display 3 bsf PORTA,3 ; habilita Display 4 MOVLW 0XFF MOVWF PORTB ; <Espacio>” CALL RETARDO bcf PORTA,3 ; inhabilita Display 4 GOTO FCE

LETRERO3 bsf FLAG, 0 ; activa bandera PIC btfss FLAG, 0 ; pregunta si la bandera es cero goto LETRERO4 ; si es cero despliega el Letrero 4 bsf PORTA,0 ; habilita display 1 MOVLW 0X19 MOVWF PORTB ; P CAll RETARDO bcf PORTA,0 ; inhabilita Display 1 bsf PORTA,1 ; habilita Display 2 MOVLW 0X9F MOVWF PORTB ; I CALL RETARDO bcf PORTA,1 ; inhabilita Display 2 bsf PORTA,2 ; habilita Display 3

Page 10: Letrero 4 display

MOVLW 0X8D MOVWF PORTB ; C CALL RETARDO bcf PORTA,2 ; inhabilita Display 3 bsf PORTA,3 ; habilita Display 4 MOVLW 0XFF MOVWF PORTB ; <Espacio> CALL RETARDO bcf PORTA,3 ; inhabilita Display 4 Goto PIC LETRERO4 bsf FLAG, 0 ; activa bandera CLAVE1 btfss FLAG, 0 ; pregunta si la bandera es cero goto LETRERO5 ; si es cero, despliega el Letrero 5 bsf PORTA,0 ; habilita Display 1 MOVLW 0XF3 MOVWF PORTB ; 1 CALL RETARDO bcf PORTA,0 ; inhabilita Display 1 bsf PORTA,1 ; habilita Display 2 MOVLW 0XF1 MOVWF PORTB ; 7 CALL RETARDO bcf PORTA,1 ; inhabilita Display 2 bsf PORTA,2 ; habilita Display 3 MOVLW 0X8D MOVWF PORTB ; C CALL RETARDO bcf PORTA,2 ; inhabilita Display 3 bsf PORTA,3 ; Habilita Display 4 MOVLW 0XFF MOVWF PORTB ; <Espacio> CALL RETARDO bcf PORTA,3 ; inhabilita Display 4 goto CLAVE1 LETRERO5 bsf FLAG, 0 ; activa bandera CLAVE2 btfss FLAG, 0 ; pregunta si la bandera es cero goto LETRERO1 ; si es cero, despliega el Letrero 1 bsf PORTA,0 ; habilita Display 1 MOVLW 0XF1 MOVWF PORTB ; 7 CALL RETARDO bcf PORTA,0 ; inhabilita Display 1 bsf PORTA,1 ; habilita Display 2 MOVLW 0X05 MOVWF PORTB ; 6 CALL RETARDO bcf PORTA,1 ; inhabilita Display 2 bsf PORTA,2 ; habilita Display 3 MOVLW 0X05

Page 11: Letrero 4 display

MOVWF PORTB ; 6 CALL RETARDO bcf PORTA,2 ; inhabilita Display 3 bsf PORTA,3 ; Habilita Display 4 MOVLW 0XFF MOVWF PORTB ; <Espacio> CALL RETARDO bcf PORTA,3 ; inhabilita Display 4 goto CLAVE2 ISR bcf INTCON, 2 MOVLW -D'117' MOVWF TMR0 DECFSZ CONT, 1 retfie btfss FLAG,0 goto OK bcf FLAG,0 goto START OK bsf FLAG, 0 START MOVLW D'100' MOVWF CONT retfie RETARDO MOVLW 0X0F MOVWF DELAY RESTA DECFSZ DELAY, 1 goto RESTA return END

Page 12: Letrero 4 display

RESULTADOS

Para la elaboración de esta práctica, el circuito se dividió en dos partes: una parte incluye al PIC, configuración del cristal y del MCLEAR y se elaboró con diseño PCB en una placa fenólica; la otra parte incluye los 4 Displays y los transistores y se elaboró en una baquelita perforada.

*Diseño PCB real (izquierda) y Artwork (derecha)

*Circuito finalizado (ambas partes)

Page 13: Letrero 4 display

*Circuito funcionando