Sunteți pe pagina 1din 4

Contador de 0 a 9 con interrupcin externa INT para los pulsos

10k
10k

Reset

Pulsos

U1
13
14
1
2
3
4
5
6
7
8
9
10

OSC1/CLKIN
OSC2/CLKOUT
MCLR/Vpp/THV

RB0/INT
RB1
RB2
RB3/PGM
RB4
RB5
RB6/PGC
RB7/PGD

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

33
34
35
36
37
38
39
40
15
16
17
18
23
24
25
26
19
20
21
22
27
28
29
30

PIC16F877

;Contador de 0 a 9 en un display con PIC877 sin decodificador Manejando Interrupciones


; ******** DEFINICION DE REGISTROS UTILIZADOS
pcl
equ
status equ
ptoa equ
ptob equ
ptoc equ
ptod equ
ptoe equ
pclath equ
pir1
equ
rcsta equ
txreg equ
rcreg equ
adresh equ
adcon0
trisa equ
trisb equ
trisc equ
trisd equ
trise equ
txsta equ
spbrg equ
adresl equ
adcon1
opcion
intconequ

02h
03
05
06
07
08
09
0ah
0ch
18h
19h
1ah
1eh
equ
1fh
85h
86h
87h
88h
89h
98h
99h
9eh
equ
9fh
equ 81h
08bh

;Para interrupciones
;Para interrupciones

;Definicion de bits utilizados


rp0
rp1
irp
z
c
txif
go

equ
equ
equ
equ
equ
equ
equ

5
6
7
2
0
4
2

;Variables del usuario


loops equ
loops2 equ
loops3 equ
dig0 equ
dig1 equ
dig2 equ
dig3 equ
contador equ

30h
31h
36h
32h
33h
34h
35h
37h

; ************ 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

00
inicio

org
interrup

04h

; ******* Atiende la interrupcin

btfss intcon,1
goto sale

;confirma si fue la interrupcin INT

incf contador,1
movlw
d'10'
xorwf contador,0
btfss status,2
goto sale
clrf
contador

;incrementa numero del display


;pregunta si paso de 9 para enviarlo a cero
;compara con xor
;pregunta si es igual con bit de cero
;diferente a diez entonces muestra el dgito
;igual a diez entonces empieza en cero otra vez

sale

bcf
intcon,1
retfie

;al terminar pone en cero el bit bandera de INT

tabla

addwf
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw

retarms
otro2

movwf loops
movlw d'110'
movwf loops2
nop
nop
nop
nop
nop
nop
decfsz loops2,1
goto otro
decfsz loops,1
goto otro2
return

;leds a encender en orden -gfedcba

otro

puertos

bsf
movlw
movwf
movlw
movwf
movlw
movwf
movlw
movwf
movlw
movwf
movlw
movwf

pcl,1
b'00111111'
b'00000110'
b'01011011'
b'01001111'
b'01100110'
b'01101101'
b'01111101'
b'00000111'
b'01111111'
b'01101111'

bcf

;retardo de milisegundos cargado desde afuera

status,6
status,5
b'1111111'
trisa
b'11111111'
trisb
b'10000000'
trisc
b'11111111'
trisd
b'11111111'
trise
b'11110111'
adcon1

bit 6

movlw

b'10000000' ;Selecciono flanco de subida interrupcin INT en

movwf
movlw
movwf

opcion
b'10010000' ;Habilita bit GIE para tener interrupciones
intcon
;Habilita interrupcin externa INT

bcf
return

status,5

; ******** Programa Principal


inicio

ciclo

call

puertos

clrf

contador

movf contador,0
call
tabla
movwf ptoc
goto

end

ciclo

;borra contador
;mueve contador a W
;llama la tabla para obtener lista de LED's
;pasa al puerto B la orden de LED's a encender

S-ar putea să vă placă și