You are on page 1of 13

INTRODUCCION

En este cdigo se manipularon algunos registros nuevos:


*INTCON: Este registro contiene varios bits de seleccin de fuentes de
interrupcin, el bit de activacin global de interrupciones y varias banderas que
indican la causa de una interrupcin. 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 interrupcin:

Una fuente externa a travs del pin RB0/INT.


El desbordamiento del temporizador 0 (TMR0).
Un cambio de estado en los pines RB4 a RB7.
Programacin de la EEPROM de datos

Cada bandera o bandera individual debe ponerse a cero por software.


Solamente hay un vector de interrupcin en la memoria de programa
(direccin 0004h), por lo que se deben comprobar los bits de INTCON en la
subrutina de interrupcin para saber cul es la fuente de la misma.
Cuando llega una interrupcin, el PIC pone el bit GIE a cero, de forma que no
se perturbe el tratamiento de la interrupcin en curso, debido a otras
interrupciones eventuales. Este bit se pone automticamente a uno al terminar
la subrutina de interrupcin, con la ejecucin de la instruccin 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 interrupcin y la activacin de las resistencias de polarizacin del
puerto B. Ocupa la posicin 81h de la pgina 1 del banco de registros. Debe
escribirse usando la instruccin especial OPTION. Esta instruccin 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 interrupcin, si se ha autorizado, y
contina su ciclo indefinidamente.
El registro TMR0 se puede leer o escribir directamente con cualquier
instruccin, con el fin de conocer su posicin actual, o para inicializarlo en un
estado determinado. Es importante saber que despus de cualquier escritura
en este registro, es necesario un retardo de dos ciclos de instruccin para que
se retome la incrementacin. 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

aconsejable utilizar, por ejemplo, una instruccin MOVF TMR0,W, que no hace
ms 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 interrupcin.
Tambin en el desarrollo de la prctica, fue necesario utilizar una tabla de
codificacin hexadecimal (mostrada a continuacin), para el despliegue de las
letras en los Displays.
-Tabla de codificacin a hexadecimal:

B
U
A
P
F
C
E
P
I
C
1
7
C
7
6
6

RB7
G
0
1
0
0
0
1
0
1
0
1
1
1
1
1
1
1
1
0
0
1

RB6
F
0
0
0
0
0
0
0
1
0
0
0
1
1
1
0
1
1
0
0
1

RB5
E
0
0
0
0
0
0
0
1
0
0
0
1
1
1
0
1
1
0
0
1

RB4
D
0
0
1
1
1
0
0
1
1
1
0
1
1
1
0
1
1
0
0
1

RB3
C
0
0
0
1
1
1
1
1
1
1
1
1
0
0
1
1
0
0
0
1

RB2
B
0
0
0
0
1
1
1
1
0
1
1
1
0
0
1
1
0
1
1
1

RB1
A
0
1
0
0
0
0
0
1
0
1
0
1
1
0
0
1
0
0
0
1

RB0
DP
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1

CODIGO
HEX
01
83
11
19
1D
8D
0D
FF
19
9F
8D
FF
F3
F1
8D
FF
F1
05
05
FF

OBJETIVO
Familiarizar al alumno con la manipulacin de los puertos del Microcontrolador
PIC16f877A mediante la manipulacin de los registros TMR0, INTCON y
ADCON0, de tal manera que estos interacten con elementos externos a dicho
Microcontrolador, configurando varios puertos en modo salida de seales
digitales (1-0).

Letrero 1
DIAGRAMAS DE FLUJO

Contador = 100

Inicio

RA0 = 1

Letrero 1

W = 01

NO

Si

TMR0 x 100
RA0=0, RA1= 1
W = 83

Letrero 2
NO

W
TMR0 x 100

Si

RA1=0, RA2= 1
W = 11

Letrero 3

NO

Si

TMR0 x 100

RA2=0, RA3= 1
W = 19

Letrero 4

W
NO

TMR0 x 100

Si

RA3 = 1
NO
INTCON,2=1

Letrero 5

SI

TMR0 x 100

Diagrama 1

Si

Contador = Contador - 1
NO
Contador= 0
SI

Letrero 2
Diagrama 2

Letrero 2

Letrero 3

Contador = 100

Contador = 100

RA0 = 1

RA0 = 1

W = 1D

W = 19

RA0=0, RA1= 1

RA0=0, RA1= 1

W = 8D

W = 9F

RA1=0, RA2= 1

RA1=0, RA2= 1

W = 0D

W = 8D

RA2=0, RA3= 1

RA2=0, RA3= 1

W = FF

W = FF

RA3 = 1

RA3 = 1

NO

NO

INTCON,2=1

INTCON,2=1

SI

SI

- 1
Contador = Contador
NO
Contador= 0
SI

Letrero 3
Diagrama 3

- 1
Contador = Contador
NO
Contador= 0
SI

Letrero 4
Diagrama 4

Letrero 4

Letrero 5

Contador = 100

Contador = 100

RA0 = 1

RA0 = 1

W = F3

W = F1

RA0=0, RA1= 1

RA0=0, RA1= 1

W = F1

W = 05

RA1=0, RA2= 1

RA1=0, RA2= 1

W = 8D

W = 05

RA2=0, RA3= 1

RA2=0, RA3= 1

W = FF

W = FF

RA3 = 1

RA3 = 1

NO

NO
INTCON,2=1

INTCON,2=1

SI

SI

- 1
Contador = Contador
NO

- 1
Contador = Contador
NO

Contador= 0
SI

Letrero 5

Contador= 0
SI

Diagrama 5

Letrero 1

Diagrama 6

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 cdigo 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 cdigo regresar a desplegar
el Letrero 1.
Los diagramas del 2 al 5 explican cmo es que se despliega cada letrero, pondremos
como ejemplo el Diagrama 2:
-Primero asignamos a la variable (o registro) Contador el valor de 100.
-Despus hacemos RA0 = 1: con esta accin 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 codificacin 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 accin apagamos el Display que habamos
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).
-Despus 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).
-Despus 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 cdigo
regresa al principio, es decir comienza a desplegar el letrero nuevamente; si la respuesta
es Si entonces el cdigo 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 cdigo 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.

ESQUEMTICOS

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 comn (DA05)
4 Transistores BC548
Protoboard
Alambre
Pulsera antiesttica

CDIGO
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
DELAY
FLAG

INICIO

LETRERO1
BUAP

equ
equ
equ
org
Goto
org
Goto
org

20
21
22
0
INICIO
4
ISR
5

; constante
; constante

bsf
MOVLW
MOVWF
CLRF
CLRF
MOVLW
MOVWF
MOVLW
MOVWF
BCF
MOVLW
MOVWF
MOVLW
MOVWF
MOVLW
MOVWF
MOVLW
MOVWF
Goto

STATUS, RP0
0X07
ADCON0
TRISA
TRISB
0X87
OPTION_REG
0XA0
INTCON
STATUS, RP0
-D'117'
TMR0
D'100'
CONT
B'00000000'
FLAG
B'00000001'
FLAG
BUAP

; banco 1

bsf
btfss
Goto
bsf
MOVLW
MOVWF
CALL
bcf
bsf
MOVLW
MOVWF
CALL
bcf
bsf
MOVLW

FLAG, 0
FLAG, 0
LETRERO2
PORTA,0
0X01
PORTB
RETARDO
PORTA,0
PORTA,1
0X83
PORTB
RETARDO
PORTA,1
PORTA,2
0X11

;
;
;
;

; rutina de servicio

; Puerto A, E/S digitales


; Puerto B: salidas
; 1:256
; interrupcin TMR0
; Banco 0
; temporizacin 0.3 seg
; CONT = 100

; Pone bit 0 de Flag a 1


; Manda a la 1a palabra
activa bandera
pregunta si la bandera es cero
si es cero se va a Letrero2
habilita Display1

;B
; inhabilita Display 1
; Habilita Display 2
;U
; inhabilita Display 2
; habilita Display 3

LETRERO2
FCE

LETRERO3
PIC

MOVWF
CALL
bcf
bsf
MOVLW
MOVWF
CALL
bcf
GOTO

PORTB
RETARDO
PORTA,2
PORTA,3
0X19
PORTB
RETARDO
PORTA,3
BUAP

;A

bsf
btfss
goto
bsf
MOVLW
MOVWF
CALL
bcf
bsf
MOVLW
MOVWF
CALL
bcf
bsf
MOVLW
MOVWF
CALL
bcf
bsf
MOVLW
MOVWF
CALL
bcf
GOTO

FLAG, 0
FLAG, 0
LETRERO3
PORTA,0
0X1D
PORTB
RETARDO
PORTA,0
PORTA,1
0X8D
PORTB
RETARDO
PORTA,1
PORTA,2
0X0D
PORTB
RETARDO
PORTA,2
PORTA,3
0XFF
PORTB
RETARDO
PORTA,3
FCE

;
;
;
;

bsf
btfss
goto
bsf
MOVLW
MOVWF
CAll
bcf
bsf
MOVLW
MOVWF
CALL
bcf
bsf

FLAG, 0
FLAG, 0
LETRERO4
PORTA,0
0X19
PORTB
RETARDO
PORTA,0
PORTA,1
0X9F
PORTB
RETARDO
PORTA,1
PORTA,2

;
;
;
;

; inhabilita Display 3
; habilita Display 4
;P
; inhabilita Display 4

activa bandera
pregunta si la bandera es cero
si es cero despliega el letrero 3
habilita Display 1

;F
; inhabilita Display 1
; habilita Display 2
;C
; inhabilita Display 2
; habilita Display 3
;E
; inhabilita Display 3
; habilita Display 4
; <Espacio>
; inhabilita Display 4

activa bandera
pregunta si la bandera es cero
si es cero despliega el Letrero 4
habilita display 1

;P
; inhabilita Display 1
; habilita Display 2
;I
; inhabilita Display 2
; habilita Display 3

LETRERO4
CLAVE1

LETRERO5
CLAVE2

MOVLW
MOVWF
CALL
bcf
bsf
MOVLW
MOVWF
CALL
bcf
Goto

0X8D
PORTB
RETARDO
PORTA,2
PORTA,3
0XFF
PORTB
RETARDO
PORTA,3
PIC

bsf
btfss
goto
bsf
MOVLW
MOVWF
CALL
bcf
bsf
MOVLW
MOVWF
CALL
bcf
bsf
MOVLW
MOVWF
CALL
bcf
bsf
MOVLW
MOVWF
CALL
bcf
goto

FLAG, 0
FLAG, 0
LETRERO5
PORTA,0
0XF3
PORTB
RETARDO
PORTA,0
PORTA,1
0XF1
PORTB
RETARDO
PORTA,1
PORTA,2
0X8D
PORTB
RETARDO
PORTA,2
PORTA,3
0XFF
PORTB
RETARDO
PORTA,3
CLAVE1

;
;
;
;

bsf
btfss
goto
bsf
MOVLW
MOVWF
CALL
bcf
bsf
MOVLW
MOVWF
CALL
bcf
bsf
MOVLW

FLAG, 0
FLAG, 0
LETRERO1
PORTA,0
0XF1
PORTB
RETARDO
PORTA,0
PORTA,1
0X05
PORTB
RETARDO
PORTA,1
PORTA,2
0X05

;
;
;
;

;C
; inhabilita Display 3
; habilita Display 4
; <Espacio>
; inhabilita Display 4

activa bandera
pregunta si la bandera es cero
si es cero, despliega el Letrero 5
habilita Display 1

;1
; inhabilita Display 1
; habilita Display 2
;7
; inhabilita Display 2
; habilita Display 3
;C
; inhabilita Display 3
; Habilita Display 4
; <Espacio>
; inhabilita Display 4

activa bandera
pregunta si la bandera es cero
si es cero, despliega el Letrero 1
habilita Display 1

;7
; inhabilita Display 1
; habilita Display 2
;6
; inhabilita Display 2
; habilita Display 3

ISR

OK
START

RETARDO
RESTA

MOVWF
CALL
bcf
bsf
MOVLW
MOVWF
CALL
bcf
goto

PORTB
RETARDO
PORTA,2
PORTA,3
0XFF
PORTB
RETARDO
PORTA,3
CLAVE2

bcf
MOVLW
MOVWF
DECFSZ
retfie
btfss
goto
bcf
goto
bsf
MOVLW
MOVWF
retfie

INTCON, 2
-D'117'
TMR0
CONT, 1

MOVLW
MOVWF
DECFSZ
goto
return
END

0X0F
DELAY
DELAY, 1
RESTA

FLAG,0
OK
FLAG,0
START
FLAG, 0
D'100'
CONT

;6
; inhabilita Display 3
; Habilita Display 4
; <Espacio>
; inhabilita Display 4

RESULTADOS
Para la elaboracin de esta prctica, el circuito se dividi en dos partes: una parte incluye
al PIC, configuracin del cristal y del MCLEAR y se elabor con diseo PCB en una placa
fenlica; la otra parte incluye los 4 Displays y los transistores y se elabor en una
baquelita perforada.

*Diseo PCB real (izquierda) y Artwork (derecha)

*Circuito finalizado (ambas partes)

*Circuito funcionando

You might also like