Autor Tema: contador ascendente 0-9999 con 16f628a en assembler  (Leído 782 veces)

johenrod

  • PIC16F
  • ***
  • Mensajes: 535
  • El que paga lo que debe .....a pedir se enseña.
contador ascendente 0-9999 con 16f628a en assembler
« en: Octubre 31, 2015, 01:27:26 pm »
cordial saludo, he aqui un contador ascendente que he realizado con el pic 16f628a, lo pude hacer con el 16f84 pero aqui en loCombia es 3 veces mas costoso, ademas este tiene los 2 puertos completos.
se trata de un contador controlado por el bit 4 del puerto A y se incremanta por cada pulso negativo en su entrada (obviamente se puede cambiar esta condicion modificando la resistencia pull up por pull down y cambiar en el codigo el BTSSS ).
dejo el codigo correspondiente y el diagrama en proteus, al simularlo en proteus no trabaja , me han dicho que es problemas de compatibilidad de frecuencia con el reloj del pic y el del pc, en realidad no se si esto sea cierto pero lo tengo armado en la tarjeta de pruebas y trabaja perfecto.
anexos; ic 74ls48 bcd 7 segmentos
2 palabras de configuracion con oscilador interno y xt.
espero le sirva a alguien.

Código: [Seleccionar]
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

; contador 0 - 9999 ascendente

; diseño jorge henao 20/08-2015
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

LIST P=16F628A ;Tipo de procesador
INCLUDE "P16F628A.INC" ;Definiciones de registros internos


__CONFIG   _CP_OFF & _DATA_CP_OFF & _LVP_OFF & _BOREN_OFF & _MCLRE_OFF & _WDT_OFF & _PWRTE_ON & _INTOSC_OSC_NOCLKOUT
;__CONFIG   _CP_OFF & _DATA_CP_OFF & _LVP_OFF & _BOREN_OFF & _MCLRE_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
   
CBLOCK 0X20
   LOOP,LOOP1,CONT,COUNT,R0,R1,TEMP,UNIDADES,DECENAS,CENTENAS,UDEMIL
ENDC

ORG 0X000
       GOTO MAIN    
     ORG 0X005

RETMS
MOVWF  LOOP
DOS
MOVLW .110
MOVWF  LOOP1


UNO
NOP
NOP
NOP
NOP
NOP
NOP
DECFSZ LOOP1
GOTO        UNO
DECFSZ LOOP
GOTO   DOS
RETURN
MOSTRAR
MOVF   UNIDADES,W
MOVWF   PORTB
BCF PORTA,0
BCF   PORTA,1
BCF   PORTA,2
BSF   PORTA,3

MOVLW .1
CALL   RETMS
MOVF DECENAS,W
MOVWF   PORTB
BCF   PORTA,0
BCF PORTA,1
BSF   PORTA,2
BCF   PORTA,3

MOVLW .1
CALL RETMS
MOVF   CENTENAS,W
MOVWF PORTB
BCF PORTA,0
BSF   PORTA,1
BCF PORTA,2
BCF   PORTA,3

MOVLW .1
CALL RETMS
MOVF   UDEMIL,W
MOVWF PORTB
BSF PORTA,0
BCF   PORTA,1
BCF PORTA,2
BCF   PORTA,3

MOVLW   .1
CALL RETMS

RETURN

MAIN
MOVLW B'10000000' ; entrada pulsador como  i/o digital anulo el TOCKI
OPTION
BANKSEL   CMCON
MOVLW B'00000111' ; desactiva el comparador analogico
MOVWF CMCON


BANKSEL      TRISB ; al banco 1
;CLRF ANSELA   no tiene canales analogos solo comparadores
CLRF   TRISB ; salidas
MOVLW B'10000' ; 0/1/2/3 salidas  4 entrada pulsador
MOVWF   TRISA


BANKSEL     PORTA ; al banco 0
LIMPIAR
CLRF UNIDADES ; limpio registros
CLRF     DECENAS
CLRF CENTENAS
CLRF UDEMIL
CALL   MOSTRAR ; muestro en el display

CICLO
BTFSS PORTA,4 ; chequeo cambio en pulsador
GOTO PREG ; detecto cambio en pulsador
CALL   MOSTRAR
GOTO        CICLO
PREG
MOVLW .1 ; antirrebote
CALL RETMS
BTFSC PORTA,4 ; chequeo que se libera el pulsador
GOTO INC ; voy a rutina para incremento del contador
GOTO SALIR ; voy a mostrar mientras se libera pulsador


INC ; rutina de incremento del contador


INCF   UNIDADES
CALL MOSTRAR
MOVLW .10
XORWF UNIDADES,0
BTFSS STATUS,2
GOTO CICLO

CLRF     UNIDADES
INCF DECENAS
CALL MOSTRAR
MOVLW     .10
XORWF   DECENAS,0
BTFSS     STATUS,2
GOTO   CICLO

CLRF   UNIDADES
CLRF   DECENAS
INCF CENTENAS

CALL MOSTRAR
MOVLW .10
XORWF CENTENAS,0
BTFSS STATUS,2
GOTO CICLO


CLRF   UNIDADES
CLRF   DECENAS
CLRF   CENTENAS
INCF UDEMIL

CALL MOSTRAR
MOVLW .10
XORWF UDEMIL,0
BTFSS STATUS,2
GOTO CICLO
GOTO   LIMPIAR

SALIR
CALL MOSTRAR ;muestro en el display y vuelvo a preguntar por pulsador...
GOTO   PREG ; que haya sido liberado




END








« Última modificación: Octubre 31, 2015, 02:14:44 pm por johenrod »

 

anything