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: