Translate, Traductor

sábado, 30 de junio de 2012

Interrupciones en los Microcontroladores PIC

Interrupciones en los microcontroladores

Una interrupcion es un evento que hace que el micro deje lo que esta haciendo (ejecutando el programa
principal) y atienda el evento o interrupcion.

Vamos a suponer que ud esta en su trabajo(programa principal) y su jefe le hace una llamada(fuente de
interrupcion) y le pide que por favor se dirija a la sucursal de la zona sur a resolver un problema, ud
imediatamente detiene lo que esta haciendo y se dirige a la sucursal a solucionar el problema(rutina de
interrupcion), cuando termina vuelve a su oficina(programa principal).
mirando el ejemplo anterior la fuente de interrupcion es su jefe y la rutina de atencion es ir a la
sucursal y solucionar el problema.


Dependiendo del microcontrolador hay diferentes fuentes de interrupcion, veamos algunas de ellas:

- por cambio en los pines RB4, RB5, RB6 y RB7
- por desborde del TMR0
- por el modulo USART
- por la memoria EEPROM
- por cambio en el pin RB0  interrupcion externa
- por el comparador

entre otras fuentes de interrupcion.

Cuando ocurre una interrupcion el microcontrolador se dirige a la posicion de memoria 0X04H  tambien
llamada "VECTOR DE INTERRUPCION" y es este lugar que debemos colocar la rutina de atencion a la
interrupcion.

    org    00        ;Vector de reset
    goto    configura

    org    0x04        ;Vector de interrupcion
    ; es en este lugar que escribimos la rutina de atencion a la interrupcion
    goto    RUTINAdeINTERRUPCION    ;Nos envia a la rutina donde atenderemos la interrupcion


RUTINAdeINTERRUPCION
    ; Esto es lo que debe hacer segun la interrupcion que ocurra
    .
    .
    .
    .
    RETFIE            ;Retorna de Interrupcion


Notemos como en el ejemplo anterior cuando se termina la rutina escribimos RETFIE para salir de la
interrupcion y volver al lugar donde estaba antes de que la interrupcion se diera.

Como los microcontroladores tienen varias fuentes de interrupcion, pero un solo vector de interrupcion,
cuando estas se presenten, nosotros por programa debemos identificar el tipo de interrupcion, para esto
cada fuente de interrupcion tiene su propia bandera (Bit asociado a la fuente de interrupcion).


Copyright 2012  edwtron
       
Este DOCUMENTO es un DOCUMENTO LIBRE, usted puede redistribuirlo y/o modificarlo bajo los terminos de la GNU FDL tal y como es publicada por la fundacion de software libre; bajo la version 1.3 de la licencia, o  una version superior.
     Leer la licencia GNU gpl para mas detalles. 

    Permission is granted to copy, distribute and/or modify this document
    under the terms of the GNU Free Documentation License, Version 1.3
    or any later version published by the Free Software Foundation;
    with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
    A copy of the license is included in the section entitled "GNU
    Free Documentation License".

jueves, 14 de junio de 2012

Conversor Analogo Adigital con PIC 16F886

En una entrada anterior usamos el conversor análogo a digital del microcontrolador PIC 12f675 ( http://xorwf.blogspot.com/2012/06/conversor-analogo-digital-con-pic.html ), esta es para usar el conversor del microcontrolador PIC 16F886.
El programa mide el voltaje entregado por el potenciometro, si es menor a un voltio, activa el pin RC0 y desactiva el pin RC7, si es mayor a un voltio activa el RC7 y desactiva el RC0.


Circuito



En el caso de querer trabajar con algún sensor análogo, como una fotoresistencia, un fotodiodo(infrarojo), entre otros, simplemente cambiamos el potenciometro por el sensor que elegimos y cambiamos el valor de la comparación, que para este caso es .51 (decimal) que equivale a un voltio medido por el AD.


QR para el celular


Código fuente


LIST P=16F886

    INCLUDE P16F886.INC
ERRORLEVEL -302

    __CONFIG _CONFIG1, _INTOSCIO & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _CPD_OFF & _BOREN_ON & _IESO_OFF & _FCMEN_OFF & _LVP_OFF & _DEBUG_OFF
    __CONFIG _CONFIG2, _BOR40V & _WRT_OFF

CBLOCK 0X20
PDel0, VALORAD
ENDC


      ORG 00
      GOTO CONFIGURA
   
RETAD  movlw     .123      ; 1 set number of repetitions
        movwf     PDel0     ; 1 |
PLoop0  clrwdt              ; 1 clear watchdog
        decfsz    PDel0, 1  ; 1 + (1) is the time over?
        goto      PLoop0    ; 2 no, loop
PDelL1  goto PDelL2         ; 2 cycles delay
PDelL2  clrwdt              ; 1 cycle delay
        return              ; 2+2 Done
   
   
CONFIGURA CLRF     PORTB
BANKSEL OSCCON
      MOVLW B'01101100'
      MOVWF OSCCON
BANKSEL ADCON1
MOVLW B'00000000' ; 7 justifica a la izq, 5 Vss ref, 4 Vdd ref
MOVWF ADCON1
BANKSEL TRISA
      MOVLW B'00000001'
      MOVWF TRISA
      MOVLW B'00000000'
      MOVWF TRISB
      MOVLW B'00000000'
      MOVWF TRISC
BANKSEL ANSEL
MOVLW B'00000001'
      MOVWF ANSEL
CLRF     ANSELH
      BANKSEL ADCON0
      MOVLW B'11000001' ;7:6 FCR clock, 5:2 canal, 1 go, 0 AD ON
      MOVWF ADCON0
      CLRF PORTC
       

INICIO   BSF ADCON0,GO
CALL RETAD
END_AD BTFSC ADCON0,GO
GOTO END_AD
MOVF ADRESH,W
MOVWF VALORAD

MOVLW .51 ;Pregunto si el valor medido por el AD es menor a 1 V
SUBWF VALORAD,W
BTFSS STATUS,C
GOTO MENOR
GOTO MAYOR

       

MAYOR BCF PORTC,0
BSF PORTC,7
GOTO INICIO


MENOR BCF PORTC,7
BSF PORTC,0  
        GOTO     INICIO
        END


Copyright 2012  edwtron
       
Este DOCUMENTO es un DOCUMENTO LIBRE, usted puede redistribuirlo y/o modificarlo bajo los terminos de la GNU FDL tal y como es publicada por la fundacion de software libre; bajo la version 1.3 de la licencia, o  una version superior.
     Leer la licencia GNU gpl para mas detalles. 

    Permission is granted to copy, distribute and/or modify this document
    under the terms of the GNU Free Documentation License, Version 1.3
    or any later version published by the Free Software Foundation;
    with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
    A copy of the license is included in the section entitled "GNU
    Free Documentation License".  


martes, 12 de junio de 2012

Conversor Análogo a Digital con PIC 12F675

El conversor análogo a digital es un dispositivo que me permite digitalizar señales, en este caso vamos a medir el voltaje por el pin AN1 y si es mayor a 2.5 voltios activamos el LED conectado en GP2.

Circuito



QR para el celular


Código fuente



LIST P=12F675
INCLUDE P12F675.INC

ERRORLEVEL -302

; Trabajamos con un oscilador interno a 4Mhz
__CONFIG _CPD_OFF & _CP_OFF & _BODEN_ON & _MCLRE_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT

CBLOCK 0X20
d1, d2, VALOR
ENDC


ORG 00

GOTO INICIO

RET10MS ;9998 cycles
movlw 0xCF
movwf d1
movlw 0x08
movwf d2
Delay_0
decfsz d1, f
goto $+2
decfsz d2, f
goto Delay_0

;2 cycles
goto $+1
RETURN


INICIO NOP
CLRF GPIO
MOVLW B'00000111' ; 07H Configuro GP1, GP2, GP3 como pines
MOVWF CMCON ; digitales y no del comparador del micro
BANKSEL OSCCAL
CALL 3FFH ; Obtengo el valor de calibracion del oscilador
MOVWF OSCCAL ; y lo calibro con el OSCCAL
BANKSEL ADCON0 ; Configuro el AD
MOVLW B'00000101' ;          7          6        5      4     3 2       1    0
MOVWF ADCON0 ; justifico derecha, no uso, no uso, Vdd, canal AN1, GO, ad ON
BANKSEL ANSEL
MOVLW .2
MOVWF ANSEL ;CONFIGURO GP1/AN1 COMO ENTRADA ANALOGA
MOVLW .2
MOVWF TRISIO
BANKSEL GPIO


CICLO CALL RET10MS
BSF ADCON0,GO ; Inicio conversion
BTFSS ADCON0,GO ; Espero a que finalice la conversion
GOTO $-1
; Conversion finalizada
BANKSEL ADRESH
MOVF ADRESH,W ; Paso el dato tomado por el conversor a W
BANKSEL VALOR
MOVWF VALOR ; Almaceno el dato
MOVLW .128 ; pregunto si el dato es mayor a .128
SUBWF VALOR,W
BTFSS STATUS,C
GOTO MENOR ; Si el dato es Menor
GOTO MAYOR ; Si el dato es Mayor

MENOR BCF GPIO,2
BSF GPIO,0
GOTO CICLO
MAYOR BSF GPIO,2
BCF GPIO,0
GOTO CICLO

END


Copyright 2012  edwtron
       
Este DOCUMENTO es un DOCUMENTO LIBRE, usted puede redistribuirlo y/o modificarlo bajo los terminos de la GNU FDL tal y como es publicada por la fundacion de software libre; bajo la version 1.3 de la licencia, o  una version superior.
     Leer la licencia GNU gpl para mas detalles. 

    Permission is granted to copy, distribute and/or modify this document
    under the terms of the GNU Free Documentation License, Version 1.3
    or any later version published by the Free Software Foundation;
    with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
    A copy of the license is included in the section entitled "GNU
    Free Documentation License". 



jueves, 7 de junio de 2012

Plantilla PIC 12F675

Plantilla para el microcontrolador 12F675
Un microcontrolador de 8 pines, 6 de ellos disponibles para entrada y salida, 1024 palabras de 14 bit's cada una, frecuencia máxima del oscilador igual a 20 MHz, oscilador interno de 4 MHz, característica interesante ya que no necesitaremos cristal, lo que nos ahorra dos pines, 128 Bytes de EEPROM, 64 Bytes de RAM.


Importante:

Estamos acostumbrados a que los puertos de los PIC's son llamados PORTx, en los micros de 8 pines son llamados GPIO y los pines GP0, GP1, GP2, GP3, GP4 y GP5



Plantilla



LIST P=12F675
INCLUDE P12F675.INC

ERRORLEVEL -302

; Trabajamos con un oscilador interno a 4Mhz

__CONFIG _CPD_OFF & _CP_OFF & _BODEN_ON & _MCLRE_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT


CBLOCK 0X20

ENDC



ORG 00

GOTO CONFIGURA



CONFIGURA  NOP
CLRF GPIO
MOVLW B'00000111' ; 07H Configuro GP1, GP2, GP3 como pines, no uso el comparador
MOVWF CMCON ; digitales
BANKSEL OSCCAL
CALL 3FFH ; Obtengo el valor de calibracion del oscilador
MOVWF OSCCAL
CLRF TRISIO
BANKSEL GPIO


INICIO


GOTO INICIO

END



; *    
; *      Copyright 2012 EDWTRON
; *    
; *      Este rpograma es software libre; usted puede redistribuirlo y/o modificarlo
; *      bajo los terminos de la GNU licencia publica general tal y como es publicada
; *      por la fundacion de software libre; bajo la version 2 de la licencia, o
; *      una version superior.
; *      Leer la licencia GNU gpl para mas detalles.

; *      This program is free software; you can redistribute it and/or modify
; *      it under the terms of the GNU General Public License as published by
; *      the Free Software Foundation; either version 2 of the License, or
; *      (at your option) any later version.
; *    
; *      This program is distributed in the hope that it will be useful,
; *      but WITHOUT ANY WARRANTY; without even the implied warranty of
; *      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
; *      GNU General Public License for more details.
; *    
; *      You should have received a copy of the GNU General Public License
; *      along with this program; if not, write to the Free Software
; *      Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
; *      MA 02110-1301, USA.
; *


Copyright 2012  edwtron
       
Este DOCUMENTO es un DOCUMENTO LIBRE, usted puede redistribuirlo y/o modificarlo bajo los terminos de la GNU FDL tal y como es publicada por la fundacion de software libre; bajo la version 1.3 de la licencia, o  una version superior.
     Leer la licencia GNU gpl para mas detalles. 

    Permission is granted to copy, distribute and/or modify this document
    under the terms of the GNU Free Documentation License, Version 1.3
    or any later version published by the Free Software Foundation;
    with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
    A copy of the license is included in the section entitled "GNU
    Free Documentation License".

sábado, 2 de junio de 2012

Sobre la Multiplexion

Para entender la multiplexion que hemos usado en los anteriores proyectos y entradas de este blog

http://taller-electronica.blogspot.com/2012/06/es-una-tecnica-que-se-usa-para.html

Contador ascendente y descendente con pulsadores

El circuito tiene dos pulsadores, ascendente y descendente

Circuito esquemático



Código fuente



    LIST P=16F886
    INCLUDE P16F886.INC
    ERRORLEVEL -302

; hay que cacharrear  

    __CONFIG _CONFIG1, _INTOSCIO & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _CPD_OFF & _BOR_ON & _IESO_OFF & _FCMEN_OFF & _LVP_OFF & _DEBUG_OFF
    __CONFIG _CONFIG2, _BOR40V & _WRT_OFF
 
    CBLOCK    0X20
    PDel0, PDel1, DECENAS, UNIDADES, CENTENAS, UMIL
    ENDC



ORG 00
GOTO CONFIGURA


RET_10MS  movlw     .8        ; 1 set number of repetitions (B)
        movwf     PDel0     ; 1 |
PLoop1  movlw     .120      ; 1 set number of repetitions (A)
        movwf     PDel1     ; 1 |
PLoop2  clrwdt              ; 1 clear watchdog
        clrwdt              ; 1 cycle delay
        decfsz    PDel1, 1  ; 1 + (1) is the time over? (A)
        goto      PLoop2    ; 2 no, loop
        decfsz    PDel0,  1 ; 1 + (1) is the time over? (B)
        goto      PLoop1    ; 2 no, loop
PDelL1  goto PDelL2         ; 2 cycles delay
PDelL2  clrwdt              ; 1 cycle delay
        return              ; 2+2 Done
     
TABLA ADDWF PCL,F
RETLW B'00111111'
RETLW B'00000110'
RETLW B'01011011'
RETLW B'01001111'
RETLW B'01100110'
RETLW B'01101101'
RETLW B'01111100'
RETLW B'00000111'
RETLW B'01111111'
RETLW B'01101111'

MOSTRAR CLRF PORTC
MOVF UNIDADES,W ;cargo el valor de las unidades
CALL TABLA
BSF PORTC,5 ;activo el display unidad
MOVWF PORTB
CALL RET_10MS
BCF PORTC,5
MOVF DECENAS,W
CALL TABLA
BSF PORTC,4
MOVWF PORTB
CALL RET_10MS
BCF PORTC,4
MOVF CENTENAS,W
CALL TABLA
BSF PORTC,3
MOVWF PORTB
CALL RET_10MS
BCF PORTC,3
MOVF UMIL,W
CALL TABLA
MOVWF PORTB
BSF PORTC,2
CALL RET_10MS
BCF PORTC,2

RETURN

VER CALL MOSTRAR
CALL MOSTRAR
CALL MOSTRAR
CALL MOSTRAR
CALL MOSTRAR
CALL MOSTRAR
CALL MOSTRAR
CALL MOSTRAR
CALL MOSTRAR
CALL MOSTRAR
CALL MOSTRAR
CALL MOSTRAR
CALL MOSTRAR ;LOGRO UN RETARDO DE 160ms
RETURN

CONFIGURA     NOP
BANKSEL    ANSEL    ;paso al banco 3
CLRF    ANSEL
CLRF    ANSELH
BANKSEL TRISB
MOVLW    B'01101100'
MOVWF    OSCCON
MOVLW    B'00000011'
MOVWF    TRISA
MOVLW    B'00000000'
MOVWF    TRISB
MOVLW    B'00000000'
MOVWF    TRISC
BANKSEL    PORTB    ;paso al banco 0

CLRF    PORTB
CLRF    UMIL
CLRF    CENTENAS
CLRF    DECENAS
CLRF    UNIDADES

INICIO CALL MOSTRAR
BTFSC PORTA,0
GOTO UP
BTFSC PORTA,1
GOTO DOWN
GOTO INICIO


UP CALL VER

INCF UNIDADES,F
MOVLW .10
XORWF UNIDADES,W
BTFSS STATUS,Z
GOTO INICIO



CLRF UNIDADES
INCF DECENAS,F
MOVLW .10
XORWF DECENAS,W
BTFSS STATUS,Z
GOTO INICIO

CLRF DECENAS
INCF CENTENAS,F
MOVLW .10
XORWF CENTENAS,W
BTFSS STATUS,Z
GOTO INICIO

; hay que cacharrear

CLRF CENTENAS
INCF UMIL,F
MOVLW .10
XORWF UMIL,W
BTFSS STATUS,Z
GOTO INICIO
CLRF UMIL
GOTO INICIO

DOWN CALL VER

DECF UNIDADES,F
MOVLW .255
XORWF UNIDADES,W
BTFSS STATUS,Z
GOTO INICIO


MOVLW .9
MOVWF UNIDADES

DECF DECENAS,F
MOVLW .255
XORWF DECENAS,W
BTFSS STATUS,Z
GOTO INICIO

MOVLW .9
MOVWF DECENAS
DECF CENTENAS,F
MOVLW .255
XORWF CENTENAS,W
BTFSS STATUS,Z
GOTO INICIO

MOVLW .9
MOVWF CENTENAS
DECF UMIL,F
MOVLW .255
XORWF UMIL,W
BTFSS STATUS,Z
GOTO INICIO
MOVLW .9
MOVWF UMIL
GOTO INICIO
; hay que cacharrear

END



Copyright 2012  edwtron
       
Este DOCUMENTO es un DOCUMENTO LIBRE, usted puede redistribuirlo y/o modificarlo bajo los terminos de la GNU FDL tal y como es publicada por la fundacion de software libre; bajo la version 1.3 de la licencia, o  una version superior.
     Leer la licencia GNU gpl para mas detalles. 

    Permission is granted to copy, distribute and/or modify this document
    under the terms of the GNU Free Documentation License, Version 1.3
    or any later version published by the Free Software Foundation;
    with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
    A copy of the license is included in the section entitled "GNU
    Free Documentation License".

Contador de 0 a 9999 con pulsador

Cada vez que se pulse se incrementa una unidad y se muestra en los displays

Circuito esquematico


Código fuente




    LIST P=16F886
    INCLUDE P16F886.INC
    ERRORLEVEL -302
 ; hay que cacharrear
    __CONFIG _CONFIG1, _INTOSCIO & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _CPD_OFF & _BOR_ON & _IESO_OFF & _FCMEN_OFF & _LVP_OFF & _DEBUG_OFF
    __CONFIG _CONFIG2, _BOR40V & _WRT_OFF
 
    CBLOCK    0X20
    PDel0, PDel1, DECENAS, UNIDADES, CENTENAS, UMIL
    ENDC



ORG 00
GOTO CONFIGURA
; hay que cacharrear
;-------------------------------------------------------------
; Code generated by PDEL  ver 1.0  on 10/13/2010 at 10:24:44 PM
; Description: Waits 10000 cycles
;-------------------------------------------------------------
RET_10MS  movlw     .8        ; 1 set number of repetitions (B)
        movwf     PDel0     ; 1 |
PLoop1  movlw     .249      ; 1 set number of repetitions (A)
        movwf     PDel1     ; 1 |
PLoop2  clrwdt              ; 1 clear watchdog
        clrwdt              ; 1 cycle delay
        decfsz    PDel1, 1  ; 1 + (1) is the time over? (A)
        goto      PLoop2    ; 2 no, loop
        decfsz    PDel0,  1 ; 1 + (1) is the time over? (B)
        goto      PLoop1    ; 2 no, loop
PDelL1  goto PDelL2         ; 2 cycles delay
PDelL2  clrwdt              ; 1 cycle delay
        return              ; 2+2 Done
     
TABLA ADDWF PCL,F
RETLW B'00111111'
RETLW B'00000110'
RETLW B'01011011'
RETLW B'01001111'
RETLW B'01100110'
RETLW B'01101101'
RETLW B'01111100'
RETLW B'00000111'
RETLW B'01111111'
RETLW B'01101111'

MOSTRAR CLRF PORTC
MOVF UNIDADES,W ;cargo el valor de las unidades
CALL TABLA
BSF PORTC,5 ;activo el display unidad
MOVWF PORTB
CALL RET_10MS
BCF PORTC,5
MOVF DECENAS,W
CALL TABLA
BSF PORTC,4
MOVWF PORTB
CALL RET_10MS
BCF PORTC,4
MOVF CENTENAS,W
CALL TABLA
BSF PORTC,3
MOVWF PORTB
CALL RET_10MS
BCF PORTC,3
MOVF UMIL,W
CALL TABLA
MOVWF PORTB
BSF PORTC,2
CALL RET_10MS
BCF PORTC,2

RETURN

VER CALL MOSTRAR
CALL MOSTRAR
CALL MOSTRAR
CALL MOSTRAR
CALL MOSTRAR
CALL MOSTRAR
CALL MOSTRAR
CALL MOSTRAR
CALL MOSTRAR
CALL MOSTRAR
CALL MOSTRAR
CALL MOSTRAR
CALL MOSTRAR ;LOGRO UN RETARDO DE 160ms
RETURN

CONFIGURA     NOP
BANKSEL    ANSEL    ;paso al banco 3
CLRF    ANSEL
CLRF    ANSELH
BANKSEL TRISB
MOVLW    B'01101100'
MOVWF    OSCCON
MOVLW    B'00000011'
MOVWF    TRISA
MOVLW    B'00000000'
MOVWF    TRISB
MOVLW    B'00000000'
MOVWF    TRISC
BANKSEL    PORTB    ;paso al banco 0
; hay que cacharrear
CLRF    PORTB
CLRF    UMIL
CLRF    CENTENAS
CLRF    DECENAS
CLRF    UNIDADES

INICIO CALL MOSTRAR
BTFSS PORTA,0
GOTO INICIO

; hay que cacharrear
CALL VER

INCF UNIDADES,F
MOVLW .10
XORWF UNIDADES,W
BTFSS STATUS,Z
GOTO INICIO


CLRF UNIDADES
INCF DECENAS,F
MOVLW .10
XORWF DECENAS,W
BTFSS STATUS,Z
GOTO INICIO

CLRF DECENAS
INCF CENTENAS,F
MOVLW .10
XORWF CENTENAS,W
BTFSS STATUS,Z
GOTO INICIO

CLRF CENTENAS
INCF UMIL,F
MOVLW .10
XORWF UMIL,W
BTFSS STATUS,Z
GOTO INICIO
CLRF UMIL
GOTO INICIO


END


Copyright 2012  edwtron
       
Este DOCUMENTO es un DOCUMENTO LIBRE, usted puede redistribuirlo y/o modificarlo bajo los terminos de la GNU FDL tal y como es publicada por la fundacion de software libre; bajo la version 1.3 de la licencia, o  una version superior.
     Leer la licencia GNU gpl para mas detalles. 

    Permission is granted to copy, distribute and/or modify this document
    under the terms of the GNU Free Documentation License, Version 1.3
    or any later version published by the Free Software Foundation;
    with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
    A copy of the license is included in the section entitled "GNU
    Free Documentation License".

Contador de 0 a 9999 con PIC 16f886

Contador ascendente hasta 9999, cuando la cuenta llega a 9999 pasa a 0.

Seria una buena practica que se le implementara un pulsador para contar, y despues de eso implementarlo con dos pulsadores para que cuente de forma ascendente y descendente.

Video de la implementacion


Enlace para la descarga del video http://www.youtube.com/watch?v=8qTBIZgpTLU

Diagrama esquemático

Codigo fuente para el PIC


   LIST P=16F886
    INCLUDE P16F886.INC
    ERRORLEVEL -302
 
    __CONFIG _CONFIG1, _INTOSCIO & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _CPD_OFF & _BOR_ON & _IESO_OFF & _FCMEN_OFF & _LVP_OFF & _DEBUG_OFF
    __CONFIG _CONFIG2, _BOR40V & _WRT_OFF
 
    CBLOCK    0X20
    PDel0, PDel1, DECENAS, UNIDADES, CENTENAS, UMIL
    ENDC

;hay que caharriar

ORG 00
GOTO CONFIGURA

;-------------------------------------------------------------
; Code generated by PDEL  ver 1.0  on 10/13/2010 at 10:24:44 PM
; Description: Waits 10000 cycles
;-------------------------------------------------------------
RET_10MS  movlw     .8        ; 1 set number of repetitions (B)
        movwf     PDel0     ; 1 |
PLoop1  movlw     .249      ; 1 set number of repetitions (A)
        movwf     PDel1     ; 1 |
PLoop2  clrwdt              ; 1 clear watchdog
        clrwdt              ; 1 cycle delay
        decfsz    PDel1, 1  ; 1 + (1) is the time over? (A)
        goto      PLoop2    ; 2 no, loop
        decfsz    PDel0,  1 ; 1 + (1) is the time over? (B)
        goto      PLoop1    ; 2 no, loop
PDelL1  goto PDelL2         ; 2 cycles delay
PDelL2  clrwdt              ; 1 cycle delay
        return              ; 2+2 Done
     
TABLA ADDWF PCL,F
RETLW B'00111111'
RETLW B'00000110'
RETLW B'01011011'
RETLW B'01001111'
RETLW B'01100110'
RETLW B'01101101'
RETLW B'01111100'
RETLW B'00000111'
RETLW B'01111111'
RETLW B'01101111'


;hay que caharriar


MOSTRAR CLRF PORTC
MOVF UNIDADES,W ;cargo el valor de las unidades
CALL TABLA
BSF PORTC,5 ;activo el display unidad
MOVWF PORTB
CALL RET_10MS
BCF PORTC,5 ;activo el display unidad
MOVF DECENAS,W ;cargo el valor de las decenas
CALL TABLA
BSF PORTC,4
MOVWF PORTB
CALL RET_10MS
BCF PORTC,4
MOVF CENTENAS,W
CALL TABLA
BSF PORTC,3
MOVWF PORTB
CALL RET_10MS
BCF PORTC,3
MOVF UMIL,W
CALL TABLA
MOVWF PORTB
BSF PORTC,2
CALL RET_10MS
BCF PORTC,2

RETURN

VER CALL MOSTRAR
CALL MOSTRAR
CALL MOSTRAR
CALL MOSTRAR
CALL MOSTRAR
CALL MOSTRAR
CALL MOSTRAR
CALL MOSTRAR
CALL MOSTRAR
CALL MOSTRAR
CALL MOSTRAR
CALL MOSTRAR
CALL MOSTRAR ;LOGRO UN RETARDO DE 160ms
RETURN


;hay que caharriar

CONFIGURA     NOP
BANKSEL    ANSEL    ;paso al banco 3
CLRF    ANSEL
CLRF    ANSELH
BANKSEL TRISB
MOVLW    B'01101100'
MOVWF    OSCCON
MOVLW    B'00000011'
MOVWF    TRISA
MOVLW    B'00000000'
MOVWF    TRISB
MOVLW    B'00000000'
MOVWF    TRISC
BANKSEL    PORTB    ;paso al banco 0

CLRF    PORTB
  CLRF    PORTC
CLRF    UMIL
CLRF    CENTENAS
CLRF    DECENAS
CLRF    UNIDADES

;hay que caharriar

INICIO CALL VER

INCF UNIDADES,F
MOVLW .10
XORWF UNIDADES,W
BTFSS STATUS,Z
GOTO INICIO
;hay que caharriar

CLRF UNIDADES
INCF DECENAS,F
MOVLW .10
XORWF DECENAS,W
BTFSS STATUS,Z
GOTO INICIO
;hay que caharriar
CLRF DECENAS
INCF CENTENAS,F
MOVLW .10
XORWF CENTENAS,W
BTFSS STATUS,Z
GOTO INICIO
;hay que caharriar
CLRF CENTENAS
INCF UMIL,F
MOVLW .10
XORWF UMIL,W
BTFSS STATUS,Z
GOTO INICIO
CLRF UMIL
GOTO INICIO

;hay que caharriar

END



Copyright 2012 edwtron
       
Este DOCUMENTO es un DOCUMENTO LIBRE, usted puede redistribuirlo y/o modificarlo bajo los terminos de la GNU FDL tal y como es publicada por la fundacion de software libre; bajo la version 1.3 de la licencia, o  una version superior.
     Leer la licencia GNU gpl para mas detalles. 

    Permission is granted to copy, distribute and/or modify this document
    under the terms of the GNU Free Documentation License, Version 1.3
    or any later version published by the Free Software Foundation;
    with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
    A copy of the license is included in the section entitled "GNU
    Free Documentation License".