Contador Interrup TMR0 INT
Contador Interrup TMR0 INT
Contador Interrup TMR0 INT
DISP1
R9 R8
2k2 2k2
BOTON1
U1
13 14 1 OSC1/CLKIN OSC2/CLKOUT MCLR/Vpp/THV RB0/INT RB1 RB2 RB3/PGM RB4 RB5 RB6/PGC RB7/PGD 33 34 35 36 37 38 39 40 15 16 17 18 23 24 25 26 19 20 21 22 27 28 29 30
RESET
2 3 4 5 6 7 8 9 10
RA0/AN0 RA1/AN1 RA2/AN2/VREFRA3/AN3/VREF+ RA4/T0CKI RA5/AN4/SS RC0/T1OSO/T1CKI RC1/T1OSI/CCP2 RE0/AN5/RD RC2/CCP1 RE1/AN6/WR RC3/SCK/SCL RE2/AN7/CS RC4/SDI/SDA RC5/SDO RC6/TX/CK RC7/RX/DT RD0/PSP0 RD1/PSP1 RD2/PSP2 RD3/PSP3 RD4/PSP4 RD5/PSP5 RD6/PSP6 RD7/PSP7 PIC16F877
;Contador de 4 digitos 0000 a 9999 con interrupciones TMR0 e INT ; ******** DEFINICION DE REGISTROS UTILIZADOS pcl equ status equ ptoa equ ptob equ ptoc equ ptod equ ptoe equ trisa equ trisb equ trisc equ trisd equ trise equ txsta equ adcon1 opcion intconequ 02h 03 05 06 07 08 09 85h 86h 87h 88h 89h 98h equ 9fh equ 81h 08bh
;Variables del usuario loops equ 30h loops2 equ 31h loops3 equ 36h dig0 equ 32h dig1 equ 33h dig2 equ 34h dig3 equ 35h ; ************ Configuracion para el simulador Proteus list p=16f877
_CP_ALL _CP_HALF _CP_UPPER_256 _CP_OFF _DEBUG_ON _DEBUG_OFF _WRT_ENABLE_ON _WRT_ENABLE_OFF _CPD_ON _CPD_OFF _LVP_ON _LVP_OFF _BODEN_ON _BODEN_OFF _PWRTE_OFF _PWRTE_ON _WDT_ON _WDT_OFF _LP_OSC _XT_OSC _HS_OSC _RC_OSC
EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU
H'0FCF' H'1FDF' H'2FEF' H'3FFF' H'37FF' H'3FFF' H'3FFF' H'3DFF' H'3EFF' H'3FFF' H'3FFF' H'3F7F' H'3FFF' H'3FBF' H'3FFF' H'3FF7' H'3FFF' H'3FFB' H'3FFC' H'3FFD' H'3FFE' H'3FFF'
__CONFIG _CP_OFF & _WDT_OFF & _XT_OSC & _PWRTE_ON org goto org 04h 00 inicio ; ******* Atiende la interrupcin ;copia de seguridad de W antes de atender ;copia de seguridad de status antes de la interrupcin ;prueba si fue la interrupcin TMR0 ;si no es TMR0 va a preguntar si es de INT ;rutina que carga cada dato en su respectivo display ;activando el transistor correspondiente en cada caso
interrup movwf 40h interrupcion movf status,0 movwf 41h btfss intcon,2 goto otraint display movf call movwf bsf movlw call bcf movf call movwf bsf movlw call bcf movf call movwf bsf clrf
ptod dig0,0 tabla ptoc ptod,3 d'2' retarms ptod,3 dig1,0 tabla ptoc ptod,2 d'2' retarms ptod,2 dig2,0 tabla ptoc ptod,1
movlw call bcf movf call movwf bsf movlw call bcf
d'2' retarms ptod,1 dig3,0 tabla ptoc ptod,0 d'2' retarms ptod,0 ;al terminar pone en cero el bit bandera de TMR0 ; **** Prueba si es interrupcin de botn INT
bcf intcon,2 goto sale otraint btfss intcon,1 goto sale2 incf movf xorlw btfss goto clrf incf movf xorlw btfss goto clrf incf movf xorlw btfss goto clrf incf movf xorlw btfss goto clrf sale2 sale bcf
; ****** Inicia incremento de displays dig0,1 ;incrementa digito 0 dig0,0 ;pasa digito 0 a W d'10' ;prueba si el contador llego a 10 status,2 ;pregunta si es cierto sale2 ;si no ha llegado a diez vuelve a ciclo1 dig0 ;si llego a diez lo pone en cero e incrementa al otro dig1,1 dig1,0 d'10' status,2 sale2 dig1 dig2,1 dig2,0 d'10' status,2 sale2 dig2 dig3,1 dig3,0 d'10' status,2 sale2 dig3 intcon,1 ;incrementa digito 1 ;pasa digito 1 a W ;prueba si el contador llego a 10 ;pregunta si es cierto ;si no ha llegado a diez vuelve a ciclo1 ;si llego a diez lo pone en cero e incrementa al otro ;incrementa digito 2 ;pasa digito 2 a W ;prueba si el contador llego a 10 ;pregunta si es cierto ;si no ha llegado a diez vuelve a ciclo1 ;si llego a diez lo pone en cero e incrementa al otro ;incrementa digito 3 ;pasa digito 3 a W ;prueba si el contador llego a 10 ;pregunta si es cierto ;si no ha llegado a diez vuelve a ciclo1 ;si llego a diez lo pone en cero e incrementa al otro
movf 41h,0 ;recupera copia de seguridad del status movwf status movf 40h,0 ;recupera valor de W antes de la interrupcin retfie movwf movlw movwf nop nop d'110' loops2 loops ;retardo de milisegundos cargado desde afuera
nop nop nop nop decfsz goto decfsz goto return tabla addwf retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw
loops2,1 otro loops,1 otro2 pcl,1 ;leds a encender en orden -gfedcba b'00111111' b'00000110' b'01011011' b'01001111' b'01100110' b'01101101' b'01111101' b'00000111' b'01111111' b'01101111' status,6 status,5 b'1111111' trisa b'11111111' trisb b'00000000' trisc b'11110000' trisd b'11101111' trise b'11110111' ;bit 4 del TRISE habilita puerto D como entrada salida digital adcon1 b'11000100' ;Selecciono pulsos internos para TMR0 y opcion b'10110000' ;Habilita bit GIE para tener interrupciones intcon ;Habilita interrupcin del temporizador TMR0 y status,5 puertos dig0 dig1 dig2 dig3 ptoc ptod ciclo
puertos
bcf bsf movlw movwf movlw movwf movlw movwf movlw movwf movlw movwf movlw movwf movlw preescala 32 movwf movlw movwf la de INT bcf return ; ****** Programa Principal inicio call clrf clrf clrf clrf clrf clrf ciclo nop goto end