Implementacion de un contador de 0 a 99 con dos display de 7 segmentos y microcontrolador usando la tecnica de multiplexacion para solo usar un puerto del pic.
MOSTRAR MOVF UNIDADES,W ;cargo el valor de las unidades
CALL TABLA
BSF PORTC,5 ;activo el display unidad
BCF PORTC,4 ;desactivo el display decena
MOVWF PORTB
CALL RET_10MS
MOVF DECENAS,W ;cargo el valor de las decenas
CALL TABLA
BCF PORTC,5 ;desactivo el display unidad
BSF PORTC,4 ;activo el display decena
MOVWF PORTB
CALL RET_10MS
RETURN
VER 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 ;Configura el porta como digital
CLRF ANSELH ;Configura el portb como digital
BANKSEL TRISB ;paso al banco 1
CLRF ANSEL
MOVLW 0X00
MOVWF TRISA
MOVLW 0X00
MOVWF TRISB
MOVLW 0X00
MOVWF TRISC
BANKSEL PORTB ;paso al banco 0
CLRF PORTB
CLRF DECENAS
CLRF UNIDADES
CICLO CALL VER ;Esta rutina me sirve como un
;retarde de 20ms aprox
INCF UNIDADES,F
MOVLW .10
XORWF UNIDADES,W
BTFSC STATUS,Z
GOTO INC_DECENAS
CALL VER
GOTO CICLO
Varias personas me han preguntado como poner un tope a la cuenta, es decir, como hacer que solo cuente hasta 12 o hasta 20 o hasta cualquier número entre 0 y 99, la explicación la deje en uno de los comentarios y el código con las modificaciones lo publique en GitHub:
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".
Plantilla para un PIC que solo tiene 8 pines de los cuales podemos usar 6 pines, entre las diferencias con los pics que estamos acostumbrados a manejar es que el puerto es llamado GPIO y el para entradas o salidas digitales es el TRISIO. Como tiene comparadores, hay que configurar sl CMCON para que los pines finciones como digitales. Solo tiene dos bancos de memoria, es un PIC relativamente muy facil de usar.
Esta es una plantilla para trabajar con el PIC 16F883 (y toda su familia), tiene diferencias con los viejos P16F873A (y su familia) en los bits de configuración, y que ya los pines digitales y análogos no se configuran en el ADCON1, ya se configuran en el ANSEL (para el porta) y ANSELH (para el portb), y se diferencia del P16F88 en que el ANSEL esta en el banco 1 de memoria, mientras que en el P16F883 están en el banco 3 de memoria.
Hay que tener en cuenta que tienes mas diferencias, como que el P16F883 tiene oscilador interno, entre otras, pero como siempre digo, "Hay que leer el manual".
;LUGAR PARA SUBRRUTINAS
CONFIGURANOP BANKSELANSEL;paso al banco 3 CLRFANSEL;Configura el porta como digital CLRFANSELH;Configura el portb como digital BANKSELTRISB;paso al banco 1 CLRFANSEL MOVLW0X00 MOVWFTRISA MOVLW0X00 MOVWFTRISB
MOVLW 0X00
MOVWF TRISC BANKSELPORTB;paso al banco 0
;PROGRAMA PRINCIPAL
CICLO