Você está na página 1de 36

ELT3822 MICROCONTROLADORES

M.Sc.Ing. Juan Jos Castelo Oporto

PROGRAMAS EJEMPLO DE CONTADORES


;***********************************************************
; Programa simple que testea el estado del bit 0 del porta
; e incrementa el contador si sta entrada CAMBIA a nivel alto
;
; no usa interrupcion pero espera que esta entrada genere un pulso
; (subida y luego bajada) para el incremento del contador
; ojo que esto constituye un contador asincrnico de FLANCOS DE SUBIDA
; se corrige el error de la versin 1
; EL conteo se saca por el PORTB en binario
; para esto se usa una subrutina llamada VISUALIZAR
; ***********************************************************
org 0
goto inicio
contador equ 12
org 5
inicio: bsf status,rp0
clrf portb
movlw d'1'
movwf porta
bcf status,rp0
call visualizar
ciclo:

btfsc porta,0
goto subio_de_nivel
goto ciclo

subio_de_nivel:
incf contador,1
call visualizar
espero_que_baje:
btfsc porta,0
goto espero_que_baje
bajo_de_nivel:
goto ciclo
visualizar: movf contador,0
movwf portb
return

PROGRAMAS DE EJEMPLO DE CONTADORES

ELT3822 MICROCONTROLADORES

M.Sc.Ing. Juan Jos Castelo Oporto

;***********************************************************
; Programa simple que testea el estado del bit 0 del porta
; e incrementa el contador si sta entrada CAMBIA a nivel alto
;
; no usa interrupcion pero espera que esta entrada genere un pulso
; (subida y luego bajada) para el incremento del contador
; ojo que esto constituye un contador asincrnico de FLANCOS DE SUBIDA
; se corrige el error de la versin 1
; EL conteo se saca por el PORTB en 7SEGMENTOS
; para esto se usa una subrutina llamada VISUALIZAR y otra
; subrutina BCD_A_7SEG que hace la conversion
; ***********************************************************
org 0
goto inicio
contador equ 12
copia equ 13
org 5
inicio: bsf status,rp0
clrf portb
movlw d'1'
movwf porta
bcf status,rp0
call visualizar
ciclo:

btfsc porta,0
goto subio_de_nivel
goto ciclo

subio_de_nivel:
incf contador,1
call visualizar
espero_que_baje:
btfsc porta,0
goto espero_que_baje
bajo_de_nivel:
goto ciclo
visualizar: movf contador,0
call BCD_A_7SEG
movwf portb
return
BCD_A_7SEG:

PROGRAMAS DE EJEMPLO DE CONTADORES

ELT3822 MICROCONTROLADORES

M.Sc.Ing. Juan Jos Castelo Oporto

movf contador,w
movwf copia
movlw d'1'
subwf copia,f
incfsz copia,f
goto versiesuno
movlw b'0111111'
return
versiesuno:
movf contador,w
movwf copia
movlw d'2'
subwf copia,f
incfsz copia,f
goto versiesdos
movlw b'0000110'
return
versiesdos:
movf contador,w
movwf copia
movlw d'3'
subwf copia,1
incfsz copia,1
goto versiestres
movlw b'01011011'
return
versiestres:
movf contador,w
movwf copia
movlw d'4'
subwf copia,1
incfsz copia,1
goto versiescuatro
movlw b'01001111'
return
versiescuatro:
movf contador,w
movwf copia
movlw d'5'
subwf copia,1
incfsz copia,1
goto versiescinco
movlw b'01100110'

PROGRAMAS DE EJEMPLO DE CONTADORES

ELT3822 MICROCONTROLADORES

M.Sc.Ing. Juan Jos Castelo Oporto

return
versiescinco:
movf contador,w
movwf copia
movlw d'6'
subwf copia,1
incfsz copia,1
goto versiesseis
movlw b'01101101'
return
versiesseis:
movf contador,w
movwf copia
movlw d'7'
subwf copia,1
incfsz copia,1
goto versiessiete
movlw b'01111101'
return
versiessiete:
movf contador,w
movwf copia
movlw d'8'
subwf copia,1
incfsz copia,1
goto versiesocho
movlw b'00000111'
return
versiesocho:
movf contador,w
movwf copia
movlw d'9'
subwf copia,1
incfsz copia,1
goto versiesnueve
movlw b'01111111'
return
versiesnueve:
movf contador,w
movwf copia
movlw d'10'
subwf copia,1

PROGRAMAS DE EJEMPLO DE CONTADORES

ELT3822 MICROCONTROLADORES

M.Sc.Ing. Juan Jos Castelo Oporto

incfsz copia,1
goto versiesdiez
movlw b'01101111'
return
versiesdiez:
movlw d'0'
movwf contador
movlw b'0111111'
return

PROGRAMAS DE EJEMPLO DE CONTADORES

ELT3822 MICROCONTROLADORES

M.Sc.Ing. Juan Jos Castelo Oporto

;***********************************************************
; CONTADOR NUMEROS DEL 0 AL 1000 (CONTADOR ASCENDENTE)
; Programa simple que testea el estado del bit 4 del porta
; E incrementa el contador si sta entrada CAMBIA a nivel alto
;
; no usa interrupcion pero espera que esta entrada genere un pulso
; (subida y luego bajada) para el incremento del contador
; ojo que esto constituye un contador asincrnico de FLANCOS DE SUBIDA
; EL conteo se saca por el PORTB en 7SEGMENTOS en paralelo a cada display
; para esto se usa una subrutina llamada VISUALIZAR y otra
; subrutina BCD_A_7SEG que hace la conversion
; NO UTILIZA DECODIFICADOR 7449
; UTILIZA BARRIDO DE CATODOS
; ***********************************************************
org 0
goto inicio
;reservar espacios de memoria
contador equ 12
copia equ 13
unid equ 14
dece equ 15
cent equ 16
mile equ 17
org 5
inicio: bsf status,rp0
clrf portb
movlw b'10000'
movwf porta
bcf status,rp0
; cargar datos iniciales
clrf
unid
clrf
dece
clrf
cent
clrf
mile
ciclo: call visualizar
btfss porta,4
goto ciclo
subio_de_nivel:
call incre_unid

PROGRAMAS DE EJEMPLO DE CONTADORES

ELT3822 MICROCONTROLADORES

M.Sc.Ing. Juan Jos Castelo Oporto

espero_que_baje: call visualizar


btfsc porta,4
goto espero_que_baje
bajo_de_nivel:
goto ciclo
incre_unid:

incf unid,f

verif_unid:

movf unid,w
movwf copia
movlw d'11'
subwf copia,f
incfsz copia,f
return
clrf unid

incre_dece:

incf

verif_dece:

movf dece,w
movwf copia
movlw d'11'
subwf copia,f
incfsz copia,f
return
clrf
dece

incre_cent:

incf

verif_cent:

movf cent,w
movwf copia
movlw d'11'
subwf copia,f
incfsz copia,f
return
clrf cent

decre_mile:

incf

verif_mile:

movf mile,w
movlw d'11'
subwf copia,f
movwf copia
incfsz copia,f
return
clrf mile

dece,f

cent,f

mile,f

PROGRAMAS DE EJEMPLO DE CONTADORES

ELT3822 MICROCONTROLADORES

M.Sc.Ing. Juan Jos Castelo Oporto

return
visualizar: movf unid,w
movwf
contador
call visualizar_digito
movlw
b'0001'
movwf
porta
movf dece,w
movwf
contador
call visualizar_digito
movlw
b'0010'
movwf
porta
movf cent,w
movwf
contador
call visualizar_digito
movlw
b'0100'
movwf
porta
movf
mile,w
movwf
contador
call visualizar_digito
movlw
b'1000'
movwf
porta
return
visualizar_digito:
movlw
b'0000'
movwf
porta
movf contador,0
call BCD_A_7SEG
movwf portb
return
BCD_A_7SEG:
movf contador,w
movwf copia
movlw d'1'
subwf copia,f
incfsz copia,f
goto versiesuno
movlw b'0111111'
return
versiesuno:

PROGRAMAS DE EJEMPLO DE CONTADORES

ELT3822 MICROCONTROLADORES

M.Sc.Ing. Juan Jos Castelo Oporto

movf contador,w
movwf copia
movlw d'2'
subwf copia,f
incfsz copia,f
goto versiesdos
movlw b'0000110'
return
versiesdos:
movf contador,w
movwf copia
movlw d'3'
subwf copia,1
incfsz copia,1
goto versiestres
movlw b'01011011'
return
versiestres:
movf contador,w
movwf copia
movlw d'4'
subwf copia,1
incfsz copia,1
goto versiescuatro
movlw b'01001111'
return
versiescuatro:
movf contador,w
movwf copia
movlw d'5'
subwf copia,1
incfsz copia,1
goto versiescinco
movlw b'01100110'
return
versiescinco:
movf contador,w
movwf copia
movlw d'6'
subwf copia,1
incfsz copia,1
goto versiesseis
movlw b'01101101'

PROGRAMAS DE EJEMPLO DE CONTADORES

ELT3822 MICROCONTROLADORES

M.Sc.Ing. Juan Jos Castelo Oporto

return
versiesseis:
movf contador,w
movwf copia
movlw d'7'
subwf copia,1
incfsz copia,1
goto versiessiete
movlw b'01111101'
return
versiessiete:
movf contador,w
movwf copia
movlw d'8'
subwf copia,1
incfsz copia,1
goto versiesocho
movlw b'00000111'
return
versiesocho:
movf contador,w
movwf copia
movlw d'9'
subwf copia,1
incfsz copia,1
goto versiesnueve
movlw b'01111111'
return
versiesnueve:
movf contador,w
movwf copia
movlw d'10'
subwf copia,1
incfsz copia,1
goto versiesdiez
movlw b'01101111'
return
versiesdiez:
movlw d'0'
movwf contador
movlw b'0111111'
return

PROGRAMAS DE EJEMPLO DE CONTADORES

10

ELT3822 MICROCONTROLADORES

M.Sc.Ing. Juan Jos Castelo Oporto

;***********************************************************
; CONTADOR DESCENDENTE DE 7000 A 0
; Programa simple que testea el estado del bit 0 del porta
; Y decrementa el contador si sta entrada CAMBIA a nivel alto
;
; no usa interrupcion pero espera que esta entrada genere un pulso
; (subida y luego bajada) para el decremento del contador
; ojo que esto constituye un contador asincrnico de FLANCOS DE SUBIDA
; EL conteo se saca por el PORTB en 7SEGMENTOS en paralelo a cada display
; para esto se usa una subrutina llamada VISUALIZAR y otra
; subrutina BCD_A_7SEG que hace la conversion
; ***********************************************************
org 0
goto inicio
;reservar espacios de memoria
contador equ 12
copia equ 13
unid equ 14
dece equ 15
cent equ 16
mile equ 17
; cargar datos iniciales
movlw d'0'
movwf unid
movwf dece
movwf cent
org 5
inicio: bsf status,rp0
clrf portb
movlw b'10000'
movwf porta
bcf status,rp0
movlw d'7'
movwf mile
ciclo: call visualizar
btfss porta,4
goto ciclo
subio_de_nivel:
call decre_unid
call visualizar

PROGRAMAS DE EJEMPLO DE CONTADORES

11

ELT3822 MICROCONTROLADORES

M.Sc.Ing. Juan Jos Castelo Oporto

espero_que_baje: call visualizar


btfsc porta,4
goto espero_que_baje
bajo_de_nivel:
goto ciclo
decre_unid:

decf unid,f
call verif_unid
return

verif_unid:

movf unid,w
movwf copia
incfsz copia,f
return
movlw d'9'
movwf unid

decre_dece:

decf

verif_dece:

movf dece,w
movwf copia
incfsz copia,f
return
movlw d'9'
movwf dece

decre_cent:

decf

verif_cent:

movf cent,w
movwf copia
incfsz copia,f
return
movlw d'9'
movwf cent

decre_mile:

decf

verif_mile:

movf mile,w
movwf copia
incfsz copia,f
return
movlw d'9'
movwf mile

dece,f

cent,f

mile,f

return

PROGRAMAS DE EJEMPLO DE CONTADORES

12

ELT3822 MICROCONTROLADORES

M.Sc.Ing. Juan Jos Castelo Oporto

visualizar: movf mile,w


movwf
contador
call visualizar_digito
movlw
b'1000'
movwf
porta
movf cent,w
movwf
contador
call visualizar_digito
movlw
b'0100'
movwf
porta
movf dece,w
movwf
contador
call visualizar_digito
movlw
b'0010'
movwf
porta
movf
unid,w
movwf
contador
call visualizar_digito
movlw
b'0001'
movwf
porta
return
visualizar_digito:
movf contador,0
call BCD_A_7SEG
movwf portb
return
BCD_A_7SEG:
movf contador,w
movwf copia
movlw d'1'
subwf copia,f
incfsz copia,f
goto versiesuno
movlw b'0111111'
return
versiesuno:
movf contador,w
movwf copia
movlw d'2'

PROGRAMAS DE EJEMPLO DE CONTADORES

13

ELT3822 MICROCONTROLADORES

M.Sc.Ing. Juan Jos Castelo Oporto

subwf copia,f
incfsz copia,f
goto versiesdos
movlw b'0000110'
return
versiesdos:
movf contador,w
movwf copia
movlw d'3'
subwf copia,1
incfsz copia,1
goto versiestres
movlw b'01011011'
return
versiestres:
movf contador,w
movwf copia
movlw d'4'
subwf copia,1
incfsz copia,1
goto versiescuatro
movlw b'01001111'
return
versiescuatro:
movf contador,w
movwf copia
movlw d'5'
subwf copia,1
incfsz copia,1
goto versiescinco
movlw b'01100110'
return
versiescinco:
movf contador,w
movwf copia
movlw d'6'
subwf copia,1
incfsz copia,1
goto versiesseis
movlw b'01101101'
return
versiesseis:

PROGRAMAS DE EJEMPLO DE CONTADORES

14

ELT3822 MICROCONTROLADORES

M.Sc.Ing. Juan Jos Castelo Oporto

movf contador,w
movwf copia
movlw d'7'
subwf copia,1
incfsz copia,1
goto versiessiete
movlw b'01111101'
return
versiessiete:
movf contador,w
movwf copia
movlw d'8'
subwf copia,1
incfsz copia,1
goto versiesocho
movlw b'00000111'
return
versiesocho:
movf contador,w
movwf copia
movlw d'9'
subwf copia,1
incfsz copia,1
goto versiesnueve
movlw b'01111111'
return
versiesnueve:
movf contador,w
movwf copia
movlw d'10'
subwf copia,1
incfsz copia,1
goto versiesdiez
movlw b'01101111'
return
versiesdiez:
movlw d'0'
movwf contador
movlw b'0111111'
return

PROGRAMAS DE EJEMPLO DE CONTADORES

15

ELT3822 MICROCONTROLADORES

M.Sc.Ing. Juan Jos Castelo Oporto

;***********************************************************
; CONTADOR NUM PARES 0 AL 1000 (CONTADOR ASCENDENTE)
; Programa simple que testea el estado del bit 4 del porta
; E incrementa el contador si sta entrada CAMBIA a nivel alto
;
; no usa interrupcion pero espera que esta entrada genere un pulso
; (subida y luego bajada) para el decremento del contador
; ojo que esto constituye un contador asincrnico de FLANCOS DE SUBIDA
; EL conteo se saca por el PORTB en 7SEGMENTOS en paralelo a cada display
; para esto se usa una subrutina llamada VISUALIZAR y otra
; subrutina BCD_A_7SEG que hace la conversion
; NO UTILIZA DECODIFICADOR 7449
; UTILIZA BARRIDO DE CATODOS
; ***********************************************************
org 0
goto inicio
;reservar espacios de memoria
contador equ 12
copia equ 13
unid equ 14
dece equ 15
cent equ 16
mile equ 17
org 5
inicio: bsf status,rp0
clrf portb
movlw b'10000'
movwf porta
bcf status,rp0
; cargar datos iniciales
clrf
unid
clrf
dece
clrf
cent
clrf
mile
ciclo: call visualizar
btfss porta,4
goto ciclo
subio_de_nivel:
call incre_unid
call incre_unid

PROGRAMAS DE EJEMPLO DE CONTADORES

16

ELT3822 MICROCONTROLADORES

M.Sc.Ing. Juan Jos Castelo Oporto

call incre_unid
call incre_unid
call incre_unid
call incre_unid
call incre_unid
call incre_unid
call incre_unid
call incre_unid
CALL INCRE_UNID ; PARA CONTAR PARES ********
espero_que_baje: call visualizar
btfsc porta,4
goto espero_que_baje
bajo_de_nivel:
goto ciclo
incre_unid:

incf unid,f

verif_unid:

movf unid,w
movwf copia
movlw d'11'
subwf copia,f
incfsz copia,f
return
clrf unid

incre_dece:

incf

verif_dece:

movf dece,w
movwf copia
movlw d'11'
subwf copia,f
incfsz copia,f
return
clrf
dece

incre_cent:

incf

verif_cent:

movf cent,w
movwf copia
movlw d'11'
subwf copia,f
incfsz copia,f
return
clrf cent

dece,f

cent,f

PROGRAMAS DE EJEMPLO DE CONTADORES

17

ELT3822 MICROCONTROLADORES

incre_mile:

incf

verif_mile:

movf mile,w
movlw d'11'
subwf copia,f
movwf copia
incfsz copia,f
return
clrf mile

M.Sc.Ing. Juan Jos Castelo Oporto

mile,f

return
visualizar: movf unid,w
movwf
contador
call visualizar_digito
movlw
b'0001'
movwf
porta
movf dece,w
movwf
contador
call visualizar_digito
movlw
b'0010'
movwf
porta
movf cent,w
movwf
contador
call visualizar_digito
movlw
b'0100'
movwf
porta
movf
mile,w
movwf
contador
call visualizar_digito
movlw
b'1000'
movwf
porta
return
visualizar_digito:
movlw
b'0000'
movwf
porta
movf contador,0
call BCD_A_7SEG
movwf portb
return

PROGRAMAS DE EJEMPLO DE CONTADORES

18

ELT3822 MICROCONTROLADORES

M.Sc.Ing. Juan Jos Castelo Oporto

BCD_A_7SEG:
movf contador,w
movwf copia
movlw d'1'
subwf copia,f
incfsz copia,f
goto versiesuno
movlw b'0111111'
return
versiesuno:
movf contador,w
movwf copia
movlw d'2'
subwf copia,f
incfsz copia,f
goto versiesdos
movlw b'0000110'
return
versiesdos:
movf contador,w
movwf copia
movlw d'3'
subwf copia,1
incfsz copia,1
goto versiestres
movlw b'01011011'
return
versiestres:
movf contador,w
movwf copia
movlw d'4'
subwf copia,1
incfsz copia,1
goto versiescuatro
movlw b'01001111'
return
versiescuatro:
movf contador,w
movwf copia
movlw d'5'
subwf copia,1
incfsz copia,1
goto versiescinco

PROGRAMAS DE EJEMPLO DE CONTADORES

19

ELT3822 MICROCONTROLADORES

M.Sc.Ing. Juan Jos Castelo Oporto

movlw b'01100110'
return
versiescinco:
movf contador,w
movwf copia
movlw d'6'
subwf copia,1
incfsz copia,1
goto versiesseis
movlw b'01101101'
return
versiesseis:
movf contador,w
movwf copia
movlw d'7'
subwf copia,1
incfsz copia,1
goto versiessiete
movlw b'01111101'
return
versiessiete:
movf contador,w
movwf copia
movlw d'8'
subwf copia,1
incfsz copia,1
goto versiesocho
movlw b'00000111'
return
versiesocho:
movf contador,w
movwf copia
movlw d'9'
subwf copia,1
incfsz copia,1
goto versiesnueve
movlw b'01111111'
return
versiesnueve:
movf contador,w
movwf copia
movlw d'10'

PROGRAMAS DE EJEMPLO DE CONTADORES

20

ELT3822 MICROCONTROLADORES

M.Sc.Ing. Juan Jos Castelo Oporto

subwf copia,1
incfsz copia,1
goto versiesdiez
movlw b'01101111'
return
versiesdiez:
movlw d'0'
movwf contador
movlw b'0111111'
return

PROGRAMAS DE EJEMPLO DE CONTADORES

21

ELT3822 MICROCONTROLADORES

M.Sc.Ing. Juan Jos Castelo Oporto

;***********************************************************
; CONTADOR AUTOMATICO DEL 0 AL 1000 (CONTADOR ASCENDENTE)
; EL conteo se saca por los 13 hilos los valores para el
; conteo del 0 al 1000 (3 digitos y medio)
; para esto se usa una subrutina llamada VISUALIZAR
; UTILIZA DECODIFICADOR 7449 (3 integrados)
;
; UTILIZA 13 HILOS (12 PARA 3 DIGITOS Y 1 PARA EL MILLAR)
; no hay ningun control del conteo, es automtico, pues faltan hilos
; de acuerdo a la estructura planteada para el circuito
; ***********************************************************
org 0
goto inicio
;reservar espacios de memoria
contador equ 12
copia equ 13
unid equ 14
dece equ 15
cent equ 16
mile equ 17
org 5
inicio: bsf status,rp0
clrf portb ; puerto b como salida
clrf porta ; puerto a como salida
bcf status,rp0
; cargar datos iniciales
clrf
unid
clrf
dece
clrf
cent
clrf
mile
ciclo: call visualizar
call incre_unid
goto ciclo
incre_unid:

incf unid,f

verif_unid:

movf unid,w
movwf copia
movlw d'11'
subwf copia,f
incfsz copia,f
return

PROGRAMAS DE EJEMPLO DE CONTADORES

22

ELT3822 MICROCONTROLADORES

M.Sc.Ing. Juan Jos Castelo Oporto

clrf unid
incre_dece:

incf

dece,f

verif_dece:

movf dece,w
movwf copia
movlw d'11'
subwf copia,f
incfsz copia,f
return
clrf
dece

incre_cent:

incf

verif_cent:

movf cent,w
movwf copia
movlw d'11'
subwf copia,f
incfsz copia,f
return
clrf cent

incre_mile:

incf

verif_mile:

movf mile,w
movlw d'11'
subwf copia,f
movwf copia
incfsz copia,f
return
clrf mile

cent,f

mile,f

return
visualizar: movf dece,w
movwf
contador
swapf
contador,f
movf unid,w
addwf
contador,w
movwf
portb
movf mile,w
movwf
contador
swapf
contador,f
movf cent,w

PROGRAMAS DE EJEMPLO DE CONTADORES

23

ELT3822 MICROCONTROLADORES
addwf
movwf

M.Sc.Ing. Juan Jos Castelo Oporto

contador,w
porta

return

PROGRAMAS DE EJEMPLO DE CONTADORES

24

ELT3822 MICROCONTROLADORES

M.Sc.Ing. Juan Jos Castelo Oporto

;***********************************************************
; CONTADOR hexadecimal automatico
; DEL 0 AL FF (CONTADOR ASCENDENTE automatico)
; cuenta automaticamente a una frecuencia de dada *pseudotemporizador a 50 hz
; Programa simple que testea cuenta automaticamente
; no tiene control para empezar el conteno
; tampoco se controla cuando se para el conteo
; EL conteo se saca por el PORTB en 7SEGMENTOS *rb0 a rb6 *decodificados en paralelo a cada
display
; para esto se usa una subrutina llamada VISUALIZAR y otra
; subrutina BIN_A_7SEG que hace la conversion
; NO UTILIZA CIRCUITOS INTEGRADOS DECODIFICADORES EXTERNOS
; y por tanto debe UTILIZAr BARRIDO DE CATODOS
; NO UTILIZA interrupciones
; ***********************************************************
;equivalencias de direcciones de memoria
contador equ 12
copia equ 13
unid
equ 14
dece
equ 15
;empieza el progrma
org 0
goto inicio
org 5

; para saltar la direccion de las interrupciones -por si acaso

inicio: call inicializar


ciclo: call visualizar
call incre_unid
goto ciclo
inicializar
;------------------------------;configuracion de puertos
bsf status,rp0
clrf porta
clrf portb
bcf status,rp0
; cargar datos iniciales
clrf
unid
PROGRAMAS DE EJEMPLO DE CONTADORES

25

ELT3822 MICROCONTROLADORES

M.Sc.Ing. Juan Jos Castelo Oporto

movlw 8 ; para fines de control el contador parte en unid=8


movwf unid
clrf
dece
return
;-------fin de inicializar------------------------

incre_unid:

incf unid,f

verif_unid:

movf unid,w
movwf copia
movlw d'17'
subwf copia,f
incfsz copia,f
return
clrf unid

incre_dece:

incf

verif_dece:

movf dece,w
movwf copia
movlw d'17'
subwf copia,f
incfsz copia,f
return
clrf
dece

dece,f

return
visualizar: movf unid,w
movwf
contador
call visualizar_digito
movlw
b'0001'
movwf
porta
movf dece,w
movwf
contador
call visualizar_digito
movlw
b'0010'
movwf
porta
return
visualizar_digito:
movlw
b'0000'
movwf
porta
movf contador,0
PROGRAMAS DE EJEMPLO DE CONTADORES

26

ELT3822 MICROCONTROLADORES

M.Sc.Ing. Juan Jos Castelo Oporto

call BCD_A_7SEG
movwf portb
return
BCD_A_7SEG:
siescero:
movf contador,w
movwf copia
movlw d'1'
subwf copia,f
incfsz copia,f
goto versiesuno
movlw b'0111111'
return
versiesuno:
movf contador,w
movwf copia
movlw d'2'
subwf copia,f
incfsz copia,f
goto versiesdos
movlw b'0000110'
return
versiesdos:
movf contador,w
movwf copia
movlw d'3'
subwf copia,1
incfsz copia,1
goto versiestres
movlw b'01011011'
return
versiestres:
movf contador,w
movwf copia
movlw d'4'
subwf copia,1
incfsz copia,1
goto versiescuatro
movlw b'01001111'
return
versiescuatro:
movf contador,w
movwf copia
PROGRAMAS DE EJEMPLO DE CONTADORES

27

ELT3822 MICROCONTROLADORES

M.Sc.Ing. Juan Jos Castelo Oporto

movlw d'5'
subwf copia,1
incfsz copia,1
goto versiescinco
movlw b'01100110'
return
versiescinco:
movf contador,w
movwf copia
movlw d'6'
subwf copia,1
incfsz copia,1
goto versiesseis
movlw b'01101101'
return
versiesseis:
movf contador,w
movwf copia
movlw d'7'
subwf copia,1
incfsz copia,1
goto versiessiete
movlw b'01111101'
return
versiessiete:
movf contador,w
movwf copia
movlw d'8'
subwf copia,1
incfsz copia,1
goto versiesocho
movlw b'00000111'
return
versiesocho:
movf contador,w
movwf copia
movlw d'9'
subwf copia,1
incfsz copia,1
goto versiesnueve
movlw b'01111111'
return

PROGRAMAS DE EJEMPLO DE CONTADORES

28

ELT3822 MICROCONTROLADORES

M.Sc.Ing. Juan Jos Castelo Oporto

versiesnueve:
movf contador,w
movwf copia
movlw d'10'
subwf copia,1
incfsz copia,1
goto versiesdiez
movlw b'01101111'
return
versiesdiez:
movf contador,w
movwf copia
movlw d'11'
subwf copia,1
incfsz copia,1
goto versiesonce
movlw b'01110111'
return
versiesonce:
movf contador,w
movwf copia
movlw d'12'
subwf copia,1
incfsz copia,1
goto versiesdoce
movlw b'01111100'
return
versiesdoce:
movf contador,w
movwf copia
movlw d'13'
subwf copia,1
incfsz copia,1
goto versiestrece
movlw b'00111001'
return
versiestrece:
movf contador,w
movwf copia
movlw d'14'
subwf copia,1
incfsz copia,1
goto versiescatorce
PROGRAMAS DE EJEMPLO DE CONTADORES

29

ELT3822 MICROCONTROLADORES

M.Sc.Ing. Juan Jos Castelo Oporto

movlw b'01011110'
return
versiescatorce:
movf contador,w
movwf copia
movlw d'15'
subwf copia,1
incfsz copia,1
goto versiesquince
movlw b'01111001'
return
versiesquince:
movf contador,w
movwf copia
movlw d'16'
subwf copia,1
incfsz copia,1
goto versiesdieciseis
movlw b'001110001'
return
versiesdieciseis:
return

PROGRAMAS DE EJEMPLO DE CONTADORES

30

ELT3822 MICROCONTROLADORES

M.Sc.Ing. Juan Jos Castelo Oporto

;***********************************************************
; CONTADOR hexadecimal DEL 0 AL FFF (CONTADOR ASCENDENTE)
; Programa simple que testea el estado del bit 4 del porta
; E incrementa el contador si sta entrada CAMBIA a nivel alto
;
; no usa interrupcion pero espera que esta entrada genere un pulso
; (subida y luego bajada) para el incremento del contador
; ojo que esto constituye un contador asincrnico de FLANCOS DE SUBIDA
; EL conteo se saca por el PORTB en 7SEGMENTOS decodificados en paralelo a cada display
; para esto se usa una subrutina llamada VISUALIZAR y otra
; subrutina BIN_A_7SEG que hace la conversion
; NO UTILIZA CIRCUITOS INTEGRADOS DECODIFICADORES EXTERNOS
; UTILIZA BARRIDO DE CATODOS
; ***********************************************************
org 0
goto inicio
;reservar espacios de memoria
contador equ 12
copia equ 13
unid equ 14
dece equ 15
cent equ 16
org 5
inicio: bsf status,rp0
clrf portb
movlw b'10000'
movwf porta
bcf status,rp0
; cargar datos iniciales
clrf
unid
movlw 8
movwf unid
clrf
dece
clrf
cent
ciclo: call visualizar
btfss porta,4
goto ciclo
subio_de_nivel:
call incre_unid

PROGRAMAS DE EJEMPLO DE CONTADORES

31

ELT3822 MICROCONTROLADORES

M.Sc.Ing. Juan Jos Castelo Oporto

espero_que_baje: call visualizar


btfsc porta,4
goto espero_que_baje
bajo_de_nivel:
goto ciclo
incre_unid:

incf unid,f

verif_unid:

movf unid,w
movwf copia
movlw d'17'
subwf copia,f
incfsz copia,f
return
clrf unid

incre_dece:

incf

verif_dece:

movf dece,w
movwf copia
movlw d'17'
subwf copia,f
incfsz copia,f
return
clrf
dece

incre_cent:

incf

verif_cent:

movf cent,w
movwf copia
movlw d'11'
subwf copia,f
incfsz copia,f
return
clrf cent

dece,f

cent,f

return
visualizar: movf unid,w
movwf
contador
call visualizar_digito
movlw
b'0001'
movwf
porta
movf dece,w
movwf
contador

PROGRAMAS DE EJEMPLO DE CONTADORES

32

ELT3822 MICROCONTROLADORES

M.Sc.Ing. Juan Jos Castelo Oporto

call visualizar_digito
movlw
b'0010'
movwf
porta
movf cent,w
movwf
contador
call visualizar_digito
movlw
b'0100'
movwf
porta
return
visualizar_digito:
movlw
b'0000'
movwf
porta
movf contador,0
call BCD_A_7SEG
movwf portb
return
BCD_A_7SEG:
siescero:
movf contador,w
movwf copia
movlw d'1'
subwf copia,f
incfsz copia,f
goto versiesuno
movlw b'0111111'
return
versiesuno:
movf contador,w
movwf copia
movlw d'2'
subwf copia,f
incfsz copia,f
goto versiesdos
movlw b'0000110'
return
versiesdos:
movf contador,w
movwf copia
movlw d'3'
subwf copia,1
incfsz copia,1
goto versiestres

PROGRAMAS DE EJEMPLO DE CONTADORES

33

ELT3822 MICROCONTROLADORES

M.Sc.Ing. Juan Jos Castelo Oporto

movlw b'01011011'
return
versiestres:
movf contador,w
movwf copia
movlw d'4'
subwf copia,1
incfsz copia,1
goto versiescuatro
movlw b'01001111'
return
versiescuatro:
movf contador,w
movwf copia
movlw d'5'
subwf copia,1
incfsz copia,1
goto versiescinco
movlw b'01100110'
return
versiescinco:
movf contador,w
movwf copia
movlw d'6'
subwf copia,1
incfsz copia,1
goto versiesseis
movlw b'01101101'
return
versiesseis:
movf contador,w
movwf copia
movlw d'7'
subwf copia,1
incfsz copia,1
goto versiessiete
movlw b'01111101'
return
versiessiete:
movf contador,w
movwf copia
movlw d'8'

PROGRAMAS DE EJEMPLO DE CONTADORES

34

ELT3822 MICROCONTROLADORES

M.Sc.Ing. Juan Jos Castelo Oporto

subwf copia,1
incfsz copia,1
goto versiesocho
movlw b'00000111'
return
versiesocho:
movf contador,w
movwf copia
movlw d'9'
subwf copia,1
incfsz copia,1
goto versiesnueve
movlw b'01111111'
return
versiesnueve:
movf contador,w
movwf copia
movlw d'10'
subwf copia,1
incfsz copia,1
goto versiesdiez
movlw b'01101111'
return
versiesdiez:
movf contador,w
movwf copia
movlw d'11'
subwf copia,1
incfsz copia,1
goto versiesonce
movlw b'01110111'
return
versiesonce:
movf contador,w
movwf copia
movlw d'12'
subwf copia,1
incfsz copia,1
goto versiesdoce
movlw b'01111100'
return
versiesdoce:

PROGRAMAS DE EJEMPLO DE CONTADORES

35

ELT3822 MICROCONTROLADORES

M.Sc.Ing. Juan Jos Castelo Oporto

movf contador,w
movwf copia
movlw d'13'
subwf copia,1
incfsz copia,1
goto versiestrece
movlw b'00111001'
return
versiestrece:
movf contador,w
movwf copia
movlw d'14'
subwf copia,1
incfsz copia,1
goto versiescatorce
movlw b'01011110'
return
versiescatorce:
movf contador,w
movwf copia
movlw d'15'
subwf copia,1
incfsz copia,1
goto versiesquince
movlw b'01111001'
return
versiesquince:
movf contador,w
movwf copia
movlw d'16'
subwf copia,1
incfsz copia,1
goto versiesdieciseis
movlw b'001110001'
return
versiesdieciseis:
return

2013 J. J. Castelo O.

PROGRAMAS DE EJEMPLO DE CONTADORES

36

Você também pode gostar