oferta

sábado, 7 de mayo de 2011

CONTADOR CON PULSADOR

Bien esta vez haremos un contador de 0 a 9 mediante un pulsador en Ra0 que cada vez que es pulsado incrementara la cuenta en el contador en forma binaria y mostrado  por el puerto B, usando un decodificador 7447 convertiremos este conteo de binario a decimal, si la cuenta llega a 9 se reiniciara el conteo.
Esto mismo se puede hacer sin usar el 7447 usando las famosas tablas del pic, pero queria hacerlo de esta forma para entender el algoritmo de programacion, en una proxima publicacion haremos el contador sin 7447.




;EL PROGRAMA

list p=16f84

status    equ 0x03
trisb      equ 0x86
portb    equ 0x06
trisa      equ 0x85
porta    equ 0x05
reg1     equ 0x0C ; Estos 3 registros los utilizaré
reg2     equ 0x0D ; para hacer el retardo
reg3     equ 0x0E

org 0x00                                 ;inicio del programa
bsf status,5                              ;vamos al banco1
clrf trisb                                   ;portb es salida
movlw b'00000001'                ;Ra0 es entrada
movwf trisa
bcf status,5                             ;regresamos al banco0
inicio clrf portb
        repite btfss porta,0          ;presiono pulsador Rao?
       goto $-1                         ;si no regresa atras
       call rebote                       ;llama antirebote
       incf portb,1                     ;incrementa el conteo mas 1
;comparacion del conteo=9
   MOVF portb,0
   XORLW B'1010'               ;pregunta si conteo=9
   BTFSC status,2                 ;aqui ve la respuesta
   goto inicio                          ;si es asi vuelve a inicio
   btfsc porta,0                      ;solto el pulsador?
   goto $-1                            ;si no regresa atras
   goto repite

rebote  movlw 10              ; Aquí se cargan los registros
            movwf reg1           ; reg1, reg2 y reg3
            tres movlw 10        ; respectivamente
            movwf reg2
  dos    movlw 10
           movwf reg3
  uno   decfsz reg3,1            ; Aquí se comienza a decrementar
          goto uno                    ; Cuando reg3 llegue a 0
          decfsz reg2,1             ; le quitare 1 a reg2
          goto dos                    ; cuando reg2 llegue a 0
          reg1,1                       ; le quitare 1 a reg1
          goto tres                    ; cuando reg1 llegue a 0
          return                         ; regresare al lugar
          end
Aqui tienen el archivo HEX. comprobado y lo pueden bajar del siguiente link:
http://www.4shared.com/file/nCXiviU8/contador.html