Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Palabras Clavessiete
controlador, cristal
I.
segmento,
hardware,
micro
INTRODUCCION
III. P ROYECTO
A. Descripcin del software
Figura.1
Main
Primero se configuran los puertos para que el puerto D
quede como salidas, al igual que 4 bits del puerto B,
tambin se configuran los bits de habilitacin de la
interrupcin por timer1. En la siguiente instruccin se
pregunta en que estado se lleg por medio de las
interrupciones, ya que van a haber tres estados: 00 = reloj,
01= ajuste, 10 = cdigo, si el bit 1 del registro posicin es
igual a 1 el software saltar a ejecutar el cdigo, si es 0
seguir en visualizacin del reloj. En la siguiente
instruccin se ejecutar la visualizacin dinmica, donde
por medio de una tabla se mandaran los bits que en el
display 7 segmentos representaran las cifras del reloj, se
llamar a un retardo de para lograr una frecuencia de
actualizacin de 80 Hz, y por medio de la interrupcin del
timer1 se prendera o apagara el led de punto cada 500 ms.
Cuando el programa salta a cdigo, se usa una tabla
donde aparecen los dgitos de los cdigos de los
estudiantes.
Interrupcin por timer1
En esta interrupcin primero se pregunta si el pulsador en
el puerto RB0 fue presionado, por medio del registro
habilitar_rbo, si este es uno, en el caso cuando no se
2
presiona, se ir a la subrutina de reloj, donde se
conmutar el punto y se irn aumentando las variables de
segundos, minutos y horas cada que se d la interrupcin,
siguiendo la lgica de que si los segundos llegaron a 60 se
aumentan en una unidad la variable de minutos y si esta
llega a 60 se aumenta la de horas en una unidad, hasta
llegar a 23 donde se reinicia a ceros. Si habilitar_rbo es
cero, donde se presion el pulsador, se pondr un 1 en la
variable rbo, y se ir a verificar si se solt el pulsador, en
el caso contrario se ir sumando la variable rbo y cuando
se suelte se verificar si es mayor a 10, si duro presionado
mas de 5 segundos, o si es menor que 10, si dur menos
de 5 segundos. Si se da el primer caso se salta a la
subrutina menor que, donde si posicin es 01 se ir a la
subrutina donde se da el ajuste del reloj, en esta subrutina
se incrementar la variable de unidades de minuto para
cambiar la hora del reloj. Al salir de esta subrutina se
limpiar la variable rbo, al momento de presionar de
nuevo el pulsador se volver a verificar, si el tiempo que
dur presionado fue de nuevo menor a 10, volver a
ajustar el reloj, de lo contrario ir a reloj. En el caso en
que este en reloj y se presione ms de cinco segundos, a la
variable posicin se le asignar un 2 hexadecimal, 10 en
binario, con lo cual ser ir en el main a mostrar los
cdigos de los estudiantes. Cada verificacin de RB0 se
har cada que se de una interrupcin en el timer1 ya que
al presionar el pulsador de RB0 es poco probable que las
interrupciones se crucen.
Materiales
Pulsadores
Display 7 segmentos de nodo comn
PIC16F877A
Transistor PNP 3906
Cristal de 10 Mhz
Cristal de 37,6Khz
Tarjeta de prototipos
Resistencias
Condensadores
Interrupcin en RB0
En esta interrupcin es donde se asigna un 1 a la variable
habilitar_rb0 con el fin de cuando entre la interrupcin del
timer 1 se le diga al programa que se dio una pulsacin a
RB0.
D.
Clculos
oscilador
interno
del
Ciclo de reloj:
0.1s
Ciclo de instruccin:
Para limitar la corriente que circula por el LED se propone
una resistencia de 330:
Programa principal
Entonces:
E.
Diagrama de flujo
Interrupcin por TMR0
6
F.
simulaciones
IV. CONCLUSIN
Esquema de la simulacin
APNDICE
Simulacin en progreso
CODIGO FUENTE
;***** VARIABLE DEFINITIONS
w_temp EQU 0x7D
; variable used for context
saving
status_temp
EQU 0x7E
; variable used for
context saving
pclath_temp
EQU 0x7F
; variable used for
context saving
punto EQU 0x70
segundo EQU 0x71
Unidad_min
EQU 0x72
Decena_min
EQU 0x73
Unidad_hora
EQU 0x74
Decena_hora
EQU 0x75
digi1
EQU 0x76
digi2
EQU 0x77
digi3
EQU 0x78
digi4
EQU 0x79
contador EQU 0x6F
habilitar_rbo
EQU 0x7A
rbo
EQU 0x7B
posicion EQU 0x7C
PDel0 EQU 0x6E
PDel1 EQU 0x6D
;*************************************************
ORG 0x000
; processorreset vector
nop
goto
ORG
main
0x004
movwf w_temp
Se observa en la simulacin que hace correctamente la visualizacin
dinmica
contents
movf
W register
STATUS,w
7
movwf status_temp
STATUS register
movf PCLATH,w
w register
movwf pclath_temp
PCLATH register
goto reloj
mayorq
btfssposicion, .0
gotoma_est
clrfhabilitar_rbo
movlw 0x10
movwfposicion
goto reloj
ma_est
btfssposicion, .1
goto ma_est1
clrfhabilitar_rbo
goto reloj
ma_est1
movlw 0x01
movwfposicion
clrfhabilitar_rbo
goto reloj
reloj
btfss INTCON, .1
gototimmer
;____ INTERRUPCION RB0
movlw 0x01
movwfhabilitar_rbo
clrfrbo
goto salir
;____ INTERRUPCION TIMMER 1
timmer
btfsshabilitar_rbo, .0
goto reloj
incfrbo, f
btfss PORTB, .0
goto salto
movlw 0x0A
subwfrbo, w
btfss STATUS, C
gotomenorq
gotomayorq
salto
btfssposicion, .0
goto reloj
goto salir
menorq
btfssposicion, .0
gotome_est
clrfhabilitar_rbo
goto aumenta
me_est
btfssposicion, .1
goto cambio
clrfhabilitar_rbo
clrfposicion
goto reloj
cambio
clrfhabilitar_rbo
movlw 0x02
movwfposicion
movlw 0x01
xorwf punto, f
btfsc punto, .0
goto salir
;conmuto el pto
incfseg, f
movlw 0x3b
subwfseg, w
btfss STATUS, C
gotosalir
clrfseg
; conteo de segundos
; real = 3b
aumenta
incf Unidad_min, f;conteo de unidades de minutos
movlw 0x0A
subwfUnidad_min, w
btfss STATUS, C
goto salir
clrf Unidad_min ; conteo de decenas de minutos
incfDecena_min, f
movlw 0x06
subwfDecena_min, w
btfss STATUS, C
goto salir
clrf Decena_min ;conteo de unidades de hora
incf Unidad_hora, f
movlw 0x0A
subwf Unidad_hora, w
btfsc STATUS, C
gotodecimalh
movlw 0x04; Preguntar si han transcurrido 24 horas
xorwf Unidad_hora, w
btfss STATUS, Z
goto salir
movlw 0x02
xorwf Decena_hora, w
btfss STATUS, Z
goto salir
clrf Unidad_hora
clrf Decena_hora
;_____________
salir
8
bcf PIR1, .0
; borrar bandera de
interrupcion TMR1
bcf INTCON, .1 ; borrar bandera de interrupcion RB0
movf pclath_temp,w
; retrieve copy of PCLATH
register
movwf PCLAT ; restore pre-isr PCLATH register contents
movfstatus_temp,w ; retrieve copy of STATUS register
movwf STATUS ; restore pre-isr STATUS register contents
swapfw_temp,f
swapfw_temp,w
; restore pre-isr W register contents
retfie
; returnfrominterrupt
;___________
decimalh
clrf Unidad_hora
incf Decena_hora, f
goto salir
TBL_BCD
addwf PCL,F ; se incrementa PCL y se produce un
salto
retlw B'11000000'
;0
retlw B'11111001'
;1
retlw B'10100100'
;2
retlw B'10110000'
;3
retlw B'10011001'
;4
retlw B'10010010'
;5
retlw B'10000010'
;6
retlw B'11111000'
;7
retlw B'10000000'
;8
retlw B'10010000'
;9
main
TBL_COD
addwf PCL,F ; se incrementa PCL y se produce un
salto
retlw B'11111111'
;espacio
retlw B'11111111'
;espacio
retlw B'11111111'
;espacio
retlw B'10100100'
;2
retlw B'11000000'
;0
retlw B'11000000'
;0
retlw B'10000000'
;8
retlw B'10100100'
;2
retlw B'11000000'
;0
retlw B'11000000'
;0
retlw B'10010010'
;5
retlw B'11111001'
;1
retlw B'11000000'
;0
retlw B'11111001'
;1
retlw B'11111111'
;espacio
retlw B'11111111'
;espacio
retlw B'10100100'
;2
retlw B'11000000'
;0
retlw B'11000000'
;0
retlw B'10000000'
;8
retlw B'10100100'
;2
retlw B'11000000'
;0
retlw B'11000000'
;0
retlw B'10010010'
;5
retlw B'11000000'
;0
retlw B'10011001'
;4
retlw B'10000000'
;8
preg
9
bcf PORTB, .1
call retardo
bsf PORTB, .1
gotopreg
codigo
clrf digi1
movlw 0x01
movwf digi2
movlw 0x02
movwf digi3
movlw 0x03
movwf digi4
bucle
movlw 0x04
movwf contador
visualizar1
movf digi1, w ;habilitar display 4 y mostrar Dig1
call TBL_COD
movwf PORTD
bcf PORTB, .1
call retardo
bsf PORTB, .1 ;habilitar display 3 y mostrar Dig2
movf digi2, w
call TBL_COD
movwf PORTD
bcf PORTB, .2
call retardo
bsf PORTB, .2 ;habilitar display 2 y mostrar Dig3
movf digi3, w
call TBL_COD
movwf PORTD
bcf PORTB, .3
call retardo
bsf PORTB, .3 ;habilitar display 1 y mostrar Dig4
movf digi4, w
call TBL_COD
movwf PORTD
bcf PORTB, .4
call retardo
bsf PORTB, .4
decfsz contador, f
goto visualizar1
incf digi1,f
; incrementar posicion de la tabla
incf digi2,f
incf digi3,f
incf digi4,f
movlw .26; Preguntar si se mostro todo el codigo
xorwf digi4, w
btfsc STATUS, Z
gotopreg
goto bucle
;------------------------------------------------------------; Retardo de 3ms para generar la visualizaciondinamica de f=
80Hz
; Description: Waits 7500 cycles
;------------------------------------------------------------retardomovlw .6
; 1 set number of repetitions (B)
movwf PDel0 ; 1 |
PLoop1 movlw .50
; 1 set number of repetitions (A)
movwf PDel1 ; 1 |
PLoop2 clrwdt
; 1 clear watchdog
clrwdt
; 1 cycle delay
decfsz PDel1, f ; 1 + (1) is the time over? (A)
goto
PLoop2 ; 2 no, loop
decfsz PDel0, f ; 1 + (1) is the time over? (B)
goto
PLoop1 ; 2 no, loop
clrwdt
; 1 cycle delay
return
; 2+2 Done
;------------------------------------------------------------END
; directive 'end of program'REFERENCIAS
[1]
http://www.slideshare.net/gustavo276/como-usar-displayanodo-comn
[2]
descripcion_proyecto_2