Follow along with the video below to see how to install our site as a web app on your home screen.
Nota: This feature currently requires accessing the site using the built-in Safari browser.
Saludos.lo que pasa es que quiero hacer un contador de 00 a 99 pero no me sale me guie en una practica que ya habia hecho de 0 a 9 pero no me funciona este es mi programa espero y alguien me pueda ayudar thanks
list p=16F628A
#include P16F628A.inc
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON &_INTOSC_OSC_NOCLKOUT& _MCLRE_OFF & _LVP_OFF
;**** Definicion de variables ****
CBLOCK 0X20
Unidad ;Guardamos conteo unidad
Decena ;Guardamos conteo DECENA
Centena ;Guardamos conteo CENTENA
Contador1 ;Registro utilizado en demora.-
Contador2 ;Registro utilizado en demora.-
Contador ;registro contador
ENDC ;
#DEFINE VNIDADES PORTA,2
#DEFINE DECENAS PORTA,1
#DEFINE CENTENAS PORTA,0
;**** Inicio del Micro ****
org 0x00 ; Aquí comienza el micro.-
goto Inicio
;**** Tabla de conversion BCD a 7 Segmentos ****
BCD7SEG
addwf PCL,1 ; Se incrementa el contador del programa.-
DT 0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0xFF, 0x6F
;**** Programa principal ****
;**** Configuracion de puertos ****
Inicio
bsf STATUS,RP0 ; Pasamos de Banco 0 a Banco 1.-
clrf TRISA ; PORTA como salida
clrf TRISB ; PORTB como salida.-
bcf STATUS,RP0 ; Paso del Banco 1 al Banco 0
movlw 07h ;pines digitales
movwf CMCON ;
clrf PORTA ; Desactivo todos los Displays
clrf Unidad ; Comienza en cero --> 0 0 0.-
clrf Decena
clrf Centena
goto Actualizo_Display ; Esta rutina multiplexa los displays.-
;**** Testeo de Pulsador ****
Bucle
incf Unidad,1 ; Incremeto Unidad.
movlw d\'10\' ; Si es 10 reseteo e incremento Decena
subwf Unidad,0 ;
btfss STATUS,Z ;
goto Actualizo_Display ; no es 10
clrf Unidad ; Si, reseteo.-
incf Decena,1 ; Incremento Decena.-
movlw d\'10\' ; Si Decena = 10, reseteo e incremento Centena
subwf Decena,0
btfss STATUS,Z
goto Actualizo_Display ; No es 10.-
clrf Decena ; Si, reseteo.-
incf Centena,1 ; Incremento Centena.-
movlw d\'10\' ; Si es 10 Reseteo.-
subwf Centena,0
btfss STATUS,Z
goto Actualizo_Display ; No es 10.-
clrf Centena ; Si, reseto
;**** Se multiplexan los Display ****
Actualizo_Display
movlw d\'10\' ; Cargo Contador = 20
movwf Contador ; Para repeticiones de visualizacion del mismo valor
Refresco
movf Unidad,W ;Obtengo codigo de 7 Segmentos para Unidad.-
call BCD7SEG ;
movwf PORTB ;y se mvestra por el PVERTOB
bsf VNIDADES ; prendemos vnidades
call Demora_5ms ;
movf Decena,W ;
call BCD7SEG ;Obtengo codigo de 7 Segmentos para DECENAS.-
movwf PORTB ; y se mvestra por el PVERTOB
bsf DECENAS ;prendemos dencas
bcf VNIDADES ; Apago Display de Unidad.-
call Demora_5ms
movf Centena,W ;
call BCD7SEG ;Obtengo codigo de 7 Segmentos para Centena.
movwf PORTB ;y se mvestra por el PVERTOB
bcf DECENAS ;apagamos decenas
bsf CENTENAS ;prendemos centenas
call Demora_5ms ;tiempo
decfsz Contador,1 ;decrementamos contador para k se repita el nvmero
goto Refresco ; no es 0,por lo tanto sigve el ciclo
goto Bucle ;si es 0 sigve incrementado
;**** Demora ****
Demora_5ms
movlw 0xFF ;
movwf Contador1 ; Iniciamos contador1.-
Repeticion1
movlw 0x05 ;
movwf Contador2 ; Iniciamos contador2
Repeticion2
decfsz Contador2,1 ; Decrementa Contador2 y si es 0 sale.-
goto Repeticion2 ; Si no es 0 repetimos ciclo.-
decfsz Contador1,1 ; Decrementa Contador1.-
goto Repeticion1 ; Si no es cero repetimos ciclo.-
return ; Regresa de la subrutina.-
end
list p=16F628A
#include P16F628A.inc
;__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON &_INTOSC_OSC_NOCLKOUT& _MCLRE_OFF & _LVP_OFF
__CONFIG _FOSC_INTOSCIO & _WDTE_OFF & _PWRTE_ON & _MCLRE_OFF & _BOREN_OFF & _LVP_OFF & _CPD_OFF & _CP_OFF
;***********************************************************************
;Definicion de variables
;***********************************************************************
CBLOCK 0X20
Unidad ;Guardamos conteo unidad
Decena ;Guardamos conteo DECENA
Centena ;Guardamos conteo CENTENA
Contador1 ;Registro utilizado en demora.-
Contador2 ;Registro utilizado en demora.-
Contador ;registro contador
ENDC
#DEFINE VNIDADES PORTA,2
#DEFINE DECENAS PORTA,1
#DEFINE CENTENAS PORTA,0
;***********************************************************************
;Inicio del Micro
;***********************************************************************
org 0x00 ; Aquí comienza el micro.-
goto Inicio
;***********************************************************************
;Tabla de conversion BCD a 7 Segmentos
;***********************************************************************
BCD7SEG
addwf PCL,1 ; Se incrementa el contador del programa.-
DT 0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0xFF, 0x6F
;***********************************************************************
;Programa principal
;Configuracion de puertos
;***********************************************************************
Inicio
bsf STATUS,RP0 ; Pasamos de Banco 0 a Banco 1.-
clrf TRISA ; PORTA como salida
clrf TRISB ; PORTB como salida.-
bcf STATUS,RP0 ; Paso del Banco 1 al Banco 0
movlw 0x07 ;pines digitales
movwf CMCON ;
clrf PORTA ; Desactivo todos los Displays
clrf Unidad ; Comienza en cero --> 0 0 0.-
clrf Decena
clrf Centena
goto Actualizo_Display ; Esta rutina multiplexa los displays.-
;**** Testeo de Pulsador ****
Bucle
incf Unidad,1 ; Incremeto Unidad.
movlw .10 ; Si es 10 reseteo e incremento Decena
subwf Unidad,0 ;
btfss STATUS,Z ;
goto Actualizo_Display ; no es 10
clrf Unidad ; Si, reseteo.-
incf Decena,1 ; Incremento Decena.-
movlw .10 ; Si Decena = 10, reseteo e incremento Centena
subwf Decena,0
btfss STATUS,Z
goto Actualizo_Display ; No es 10.-
clrf Decena ; Si, reseteo.-
incf Centena,1 ; Incremento Centena.-
movlw .10 ; Si es 10 Reseteo.-
subwf Centena,0
btfss STATUS,Z
goto Actualizo_Display ; No es 10.-
clrf Centena ; Si, reseto
;**** Se multiplexan los Display ****
Actualizo_Display
movlw .10 ; Cargo Contador = 20
movwf Contador ; Para repeticiones de visualizacion del mismo valor
Refresco
movf Unidad,W ;Obtengo codigo de 7 Segmentos para Unidad.-
call BCD7SEG ;
movwf PORTB ;y se mvestra por el PVERTOB
bcf VNIDADES ; prendemos vnidades
call Demora_5ms ;
bsf VNIDADES
movf Decena,W ;
call BCD7SEG ;Obtengo codigo de 7 Segmentos para DECENAS.-
movwf PORTB ; y se mvestra por el PVERTOB
bcf DECENAS ;prendemos dencas
call Demora_5ms
bsf DECENAS
movf Centena,W ;
call BCD7SEG ;Obtengo codigo de 7 Segmentos para Centena.
movwf PORTB ;y se mvestra por el PVERTOB
bcf CENTENAS ;prendemos centenas
call Demora_5ms ;tiempo
bsf CENTENAS
decfsz Contador,1 ;decrementamos contador para k se repita el nvmero
goto Refresco ; no es 0,por lo tanto sigve el ciclo
goto Bucle ;si es 0 sigve incrementado
;***********************************************************************
;Demora
;***********************************************************************
Demora_5ms
movlw 0xFF ;
movwf Contador1 ; Iniciamos contador1.-
Repeticion1
movlw 0x05 ;
movwf Contador2 ; Iniciamos contador2
Repeticion2
decfsz Contador2,1 ; Decrementa Contador2 y si es 0 sale.-
goto Repeticion2 ; Si no es 0 repetimos ciclo.-
decfsz Contador1,1 ; Decrementa Contador1.-
goto Repeticion1 ; Si no es cero repetimos ciclo.-
return ; Regresa de la subrutina.-
;**********************************************************************
end
//////////////////////////////////////////////////////////////////////
// NOMBRE DEL PIC //
//////////////////////////////////////////////////////////////////////
#include <16f84a.h>
#include <stdlib.h> //Libreria que contiene la funcion random
#RAND_MAX 9 // Numero máximo al que llegara random
//////////////////////////////////////////////////////////////////////
// CONFIGURACION DEL PIC //
//////////////////////////////////////////////////////////////////////
#FUSES XT // Oscilador de Cristal
#FUSES NOPUT // No Tiempo de espera de Encendido
#FUSES NOPROTECT // No proteger el codigo
#FUSES NOWDT // No Watch Dog Timer
#USE delay(clock=4000000) // Frecuencia de 4Mhz
#BYTE PORTB = 0x06 // Configuramos el PORTB
#use fast_io(A) //Configuracion para optimizar código
#use fast_io(B)
void main(){
set_tris_a(0x02);
set_tris_b(0x00);
int Numero[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F};
int i=0;
while(1)
{
for(i=0; i<10; i++)
{
PORTB = Numero[i];
delay_ms(100);
}
for (i=10; i>0; i--)
{
PORTB = Numero[i];
delay_ms(100);
}
for(i=0; i<10; i++)
{
PORTB = Numero[rand()];
delay_ms(100);
}
}
}
#define RAND_MAX 9 // Número máximo al que llegará random
int aleatorio(int limite) {
return rand() % limite; // devuelve un valor entre 0 y limite-1
}