Hola foristas, me estoy entrenando en assembler y trato de realizar un contador binario que vaya hasta 0xFF, la cosa es, ya tengo uno que va hasta 0x0F.
El problema es que este que va hasta 0xFF, se me pone loco. Bueno ya le he puesto retardos anidados desde ms hasta segundos completos y en simulación siempre esté presente el rebote, además al grabar el pic real, me da igual.
No sé si 40ms sean apropiados, en C lo he hecho y simula bien, o quizá tenga alguna otra cosa mal que no conozco porque después de los retardos, entre uno y otro, pasa lo mismo, rebote.
Ah, y gracias por su valiosa ayuda.
El problema es que este que va hasta 0xFF, se me pone loco. Bueno ya le he puesto retardos anidados desde ms hasta segundos completos y en simulación siempre esté presente el rebote, además al grabar el pic real, me da igual.
No sé si 40ms sean apropiados, en C lo he hecho y simula bien, o quizá tenga alguna otra cosa mal que no conozco porque después de los retardos, entre uno y otro, pasa lo mismo, rebote.
Código:
list p=16F84A ; list directive to define processor
#include <p16F84A.inc> ; processor specific variable definitions
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
;***** VARIABLE DEFINITIONS
BIN EQU 0x0C ; variable used for context saving
CONT EQU 0X0D
CONT2 EQU 0X0E
;*************CÓDIGO ASSEMBLER **********************************
ORG 0x000 ; processor reset vector
INICIO
BCF STATUS,5 ;VAMOS AL BANCO 0 A
CLRF PORTB ;A LIMPIAR PORTB PARA EVITAR RESIDUOS INESPERADOS
BSF STATUS,5 ;AHORA VAMOS AL BANCO 1 PARA CONFIGURAR E/S
CLRF TRISB ;PORTB ES SALIDA
BSF TRISA,0 ;RA0 ES ENTRADA
BCF STATUS,RP0 ;IR A BANCO 0
ESPERA
BTFSS PORTA,0 ; SI RA0 = 1:
GOTO ESPERA ;
BCF PORTA,0 ;OLVIDA QUE SE PULSÓ A0 PARA QUE NO CUENTE el mismo pulso
RETARDO
MOVLW 0X78 ;PROVEE
MOVWF CONT2 ;[3(CONT)+1](CONT2)+3(CONT2)+1 CICLOS (4MHz, CICLO= 1us)
CICLO2 MOVLW 0X6E ;YO PREFIERO, 40ms= 40.000us
MOVWF CONT ;YO ME PASO UN POCO CON: CONT= 110 Y CONT2 = 120 QUE ME
CICLO DECFSZ CONT,1 ;DA: 40.081 CICLOS/ 40,08ms
GOTO CICLO ;
DECFSZ CONT2,1 ;
GOTO CICLO2 ;
;
INCF BIN,1 ;INCREMENTA EL DATO BINARIO
GOTO SALIDA ;SACA A PORTB EL CONTEO:
SALIDA
MOVF BIN,0 ;MUEVE BIN A PORTB A TRAVÉS DE W
MOVWF PORTB ;PARA VISUALIZARCE
GOTO ESPERA ;VUELVE A REVISAR SI HAY PULSO EN RA0
END ; directive 'end of program'
Ah, y gracias por su valiosa ayuda.
Última edición por un moderador: