Ejemplos de Contadores en lenguaje assembler

36
ELT3822 MICROCONTROLADORES M.Sc.Ing. Juan José Castelo Oporto PROGRAMAS DE EJEMPLO DE CONTADORES 1 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 asincrónico de FLANCOS DE SUBIDA ; se corrige el error de la versión 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

description

Ejercicios de contadores en lenguaje assembler,

Transcript of Ejemplos de Contadores en lenguaje assembler

ELT3822 MICROCONTROLADORES M.Sc.Ing. Juan José Castelo Oporto

PROGRAMAS DE EJEMPLO DE CONTADORES 1

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 asincrónico de FLANCOS DE SUBIDA ; se corrige el error de la versión 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

ELT3822 MICROCONTROLADORES M.Sc.Ing. Juan José Castelo Oporto

PROGRAMAS DE EJEMPLO DE CONTADORES 2

;*********************************************************** ; 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 asincrónico de FLANCOS DE SUBIDA ; se corrige el error de la versión 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:

ELT3822 MICROCONTROLADORES M.Sc.Ing. Juan José Castelo Oporto

PROGRAMAS DE EJEMPLO DE CONTADORES 3

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'

ELT3822 MICROCONTROLADORES M.Sc.Ing. Juan José Castelo Oporto

PROGRAMAS DE EJEMPLO DE CONTADORES 4

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

ELT3822 MICROCONTROLADORES M.Sc.Ing. Juan José Castelo Oporto

PROGRAMAS DE EJEMPLO DE CONTADORES 5

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

ELT3822 MICROCONTROLADORES M.Sc.Ing. Juan José Castelo Oporto

PROGRAMAS DE EJEMPLO DE CONTADORES 6

;*********************************************************** ; 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 asincrónico 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

ELT3822 MICROCONTROLADORES M.Sc.Ing. Juan José Castelo Oporto

PROGRAMAS DE EJEMPLO DE CONTADORES 7

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 dece,f verif_dece: movf dece,w movwf copia movlw d'11' subwf copia,f incfsz copia,f return clrf dece incre_cent: incf cent,f verif_cent: movf cent,w movwf copia movlw d'11' subwf copia,f incfsz copia,f return clrf cent decre_mile: incf mile,f verif_mile: movf mile,w movlw d'11' subwf copia,f movwf copia incfsz copia,f return clrf mile

ELT3822 MICROCONTROLADORES M.Sc.Ing. Juan José Castelo Oporto

PROGRAMAS DE EJEMPLO DE CONTADORES 8

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:

ELT3822 MICROCONTROLADORES M.Sc.Ing. Juan José Castelo Oporto

PROGRAMAS DE EJEMPLO DE CONTADORES 9

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'

ELT3822 MICROCONTROLADORES M.Sc.Ing. Juan José Castelo Oporto

PROGRAMAS DE EJEMPLO DE CONTADORES 10

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

ELT3822 MICROCONTROLADORES M.Sc.Ing. Juan José Castelo Oporto

PROGRAMAS DE EJEMPLO DE CONTADORES 11

;*********************************************************** ; 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 asincrónico 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

ELT3822 MICROCONTROLADORES M.Sc.Ing. Juan José Castelo Oporto

PROGRAMAS DE EJEMPLO DE CONTADORES 12

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 dece,f verif_dece: movf dece,w movwf copia incfsz copia,f return movlw d'9' movwf dece decre_cent: decf cent,f verif_cent: movf cent,w movwf copia incfsz copia,f return movlw d'9' movwf cent decre_mile: decf mile,f verif_mile: movf mile,w movwf copia incfsz copia,f return movlw d'9' movwf mile return

ELT3822 MICROCONTROLADORES M.Sc.Ing. Juan José Castelo Oporto

PROGRAMAS DE EJEMPLO DE CONTADORES 13

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'

ELT3822 MICROCONTROLADORES M.Sc.Ing. Juan José Castelo Oporto

PROGRAMAS DE EJEMPLO DE CONTADORES 14

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:

ELT3822 MICROCONTROLADORES M.Sc.Ing. Juan José Castelo Oporto

PROGRAMAS DE EJEMPLO DE CONTADORES 15

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

ELT3822 MICROCONTROLADORES M.Sc.Ing. Juan José Castelo Oporto

PROGRAMAS DE EJEMPLO DE CONTADORES 16

;*********************************************************** ; 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 asincrónico 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

ELT3822 MICROCONTROLADORES M.Sc.Ing. Juan José Castelo Oporto

PROGRAMAS DE EJEMPLO DE CONTADORES 17

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 dece,f verif_dece: movf dece,w movwf copia movlw d'11' subwf copia,f incfsz copia,f return clrf dece incre_cent: incf cent,f verif_cent: movf cent,w movwf copia movlw d'11' subwf copia,f incfsz copia,f return clrf cent

ELT3822 MICROCONTROLADORES M.Sc.Ing. Juan José Castelo Oporto

PROGRAMAS DE EJEMPLO DE CONTADORES 18

incre_mile: incf mile,f verif_mile: movf mile,w movlw d'11' subwf copia,f movwf copia incfsz copia,f return clrf mile 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

ELT3822 MICROCONTROLADORES M.Sc.Ing. Juan José Castelo Oporto

PROGRAMAS DE EJEMPLO DE CONTADORES 19

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

ELT3822 MICROCONTROLADORES M.Sc.Ing. Juan José Castelo Oporto

PROGRAMAS DE EJEMPLO DE CONTADORES 20

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'

ELT3822 MICROCONTROLADORES M.Sc.Ing. Juan José Castelo Oporto

PROGRAMAS DE EJEMPLO DE CONTADORES 21

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

ELT3822 MICROCONTROLADORES M.Sc.Ing. Juan José Castelo Oporto

PROGRAMAS DE EJEMPLO DE CONTADORES 22

;*********************************************************** ; 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 automático, 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

ELT3822 MICROCONTROLADORES M.Sc.Ing. Juan José Castelo Oporto

PROGRAMAS DE EJEMPLO DE CONTADORES 23

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 cent,f verif_cent: movf cent,w movwf copia movlw d'11' subwf copia,f incfsz copia,f return clrf cent incre_mile: incf mile,f verif_mile: movf mile,w movlw d'11' subwf copia,f movwf copia incfsz copia,f return clrf mile 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

ELT3822 MICROCONTROLADORES M.Sc.Ing. Juan José Castelo Oporto

PROGRAMAS DE EJEMPLO DE CONTADORES 24

addwf contador,w movwf porta return

ELT3822 MICROCONTROLADORES M.Sc.Ing. Juan José Castelo Oporto

PROGRAMAS DE EJEMPLO DE CONTADORES 25

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

ELT3822 MICROCONTROLADORES M.Sc.Ing. Juan José Castelo Oporto

PROGRAMAS DE EJEMPLO DE CONTADORES 26

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 dece,f verif_dece: movf dece,w movwf copia movlw d'17' subwf copia,f incfsz copia,f return clrf dece 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

ELT3822 MICROCONTROLADORES M.Sc.Ing. Juan José Castelo Oporto

PROGRAMAS DE EJEMPLO DE CONTADORES 27

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

ELT3822 MICROCONTROLADORES M.Sc.Ing. Juan José Castelo Oporto

PROGRAMAS DE EJEMPLO DE CONTADORES 28

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

ELT3822 MICROCONTROLADORES M.Sc.Ing. Juan José Castelo Oporto

PROGRAMAS DE EJEMPLO DE CONTADORES 29

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

ELT3822 MICROCONTROLADORES M.Sc.Ing. Juan José Castelo Oporto

PROGRAMAS DE EJEMPLO DE CONTADORES 30

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

ELT3822 MICROCONTROLADORES M.Sc.Ing. Juan José Castelo Oporto

PROGRAMAS DE EJEMPLO DE CONTADORES 31

;*********************************************************** ; 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 asincrónico 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

ELT3822 MICROCONTROLADORES M.Sc.Ing. Juan José Castelo Oporto

PROGRAMAS DE EJEMPLO DE CONTADORES 32

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 dece,f verif_dece: movf dece,w movwf copia movlw d'17' subwf copia,f incfsz copia,f return clrf dece incre_cent: incf cent,f verif_cent: movf cent,w movwf copia movlw d'11' subwf copia,f incfsz copia,f return clrf cent return visualizar: movf unid,w movwf contador call visualizar_digito movlw b'0001' movwf porta movf dece,w movwf contador

ELT3822 MICROCONTROLADORES M.Sc.Ing. Juan José Castelo Oporto

PROGRAMAS DE EJEMPLO DE CONTADORES 33

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

ELT3822 MICROCONTROLADORES M.Sc.Ing. Juan José Castelo Oporto

PROGRAMAS DE EJEMPLO DE CONTADORES 34

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'

ELT3822 MICROCONTROLADORES M.Sc.Ing. Juan José Castelo Oporto

PROGRAMAS DE EJEMPLO DE CONTADORES 35

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:

ELT3822 MICROCONTROLADORES M.Sc.Ing. Juan José Castelo Oporto

PROGRAMAS DE EJEMPLO DE CONTADORES 36

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.