pic 16f84a contador automatico y paso a paso

#1
Hola amigos soy nuevo en este foro y en el mundo de los PIC,

mi primer proyecto es hacer un contador de 0 a 9 con un display 7 segmentos y un PIC 16F84A el cual consta de dos pulsadores...,

-el primer pulsador funciona asi: cada vez que active el pulsador debe ir mostrandome cada numero el conteo de 0 a 9. y cuando llegue a 9 comience de nuevo en cero y asi sucesivamente... es decir (cuando pulse me muestra el 1, cuando pulse otra vez me muestra el 2, cuando pulse otra vez me muestra el 3, etc etc etc)

-el segundo pulsador: cuando active el segundo pulsador , debe mostrar el mismo conteo de 0 a 9 pero de forma automatica.

ya hice la programacion y la simulacion en el proteus para el funcionamiento del primer pulsador, pero ahora como hago para añadir la funcion del segundo pulsador???

si no me entienden me preguntan...

gracias y espero su ayuda

PD: LES ADJUNTO EL ASM Y LA SIMULACION EN PROTEUS DE LO QUE HICE. EN ESTE CASO LOS NUMEROS QUE SE MUESTRAN EN EL DISPLAY LOS DEFINI YO.
 

Adjuntos

#2
Usa algun tipo de flag es decir asigna la posicion de memoria digamos BOTON donde el bit 0 es para el boton 1 y el bit 1 para el boton 2, de manera que cuando se oprime alguno de ellos cambies el estado de las flags, asi una cancela a la otra y sabras cual es la que esta activa, de esta manera tomaras la decision de cual rutina ejecutar
 
#3
hola a todos soy nuevo en esto de la programacion ,para hacerlo en c como se podria hacer??? e intentando varias formas pero ninguna ha funcionado les dejo lo mas ke he podido hacer.
lo unico ke hace es que con un pulsador inicia la cuenta,si pudieran darme un tip o como empezar lo agradeceria mucho.


#include <16f876.h>
# use delay(clock=4000000)
# fuses XT,NOWDT
#use fast_io(B)
#use fast_io(c)
#use fast_io(A)


void main() {

int entrada,x,inc,z;
port_b_pullups(TRUE);

set_tris_c(0X00); //salidas
set_tris_b(0xff); //entradas
set_tris_a(0x00); //salidas
output_c (0); //inicializo todos los bits de la puerta B a cero

while(TRUE){

if(input(PIN_B0)==0){
inc=0;

for(inc=0;inc<7;inc++){


output_c(0x3f);
delay_ms(1000);

output_c(0x06);
delay_ms(1000);


output_c(0x5b);
delay_ms(1000);
output_c(0x4f);
delay_ms(1000);
output_c(0x66);
delay_ms(1000);
output_c(0x6d);
delay_ms(1000);
output_c(0x7d);
delay_ms(1000);
output_c(0x07);
delay_ms(1000);}



}
}
}
 
#4
#include <16f84a.h>
#use delay (clock=4000000)
#byte puerto_a=0x05
#byte puerto_b=0x06
#bit ra0=0x05.0
#bit ra1=0x05.1
#bit ra2=0x05.2
#bit ra3=0x05.3
void main()
{
int i=0,j=0,m=0,k=0;
set_tris_a(0);
set_tris_b(0);
puerto_b=0;

while(1)
{
puerto_a=0;

for(i=0;i<10;i++)
{
for(j=0;j<10;j++)
{
for(k=0;k<10;k++)
{
for(m=0;m<10;m++)
{
ra0=1;
puerto_b=i;
delay_ms(100);
ra0=0;

ra1=1;
puerto_b=j;
delay_ms(100);
ra1=0;

ra2=1;
puerto_b=k;
delay_ms(100);
ra2=0;

ra3=1;
puerto_b=m;
delay_ms(100);
ra3=0;
}
}
}
}
puerto_b=0;
puerto_a=255;
delay_ms(10);
}
}
yo hise este pero me parese que lo mejor es usar interrupciones externas para que funcione bien
 
#5
Bien pues en primera esta mal porqe tu al pulsar el push, debes programar que al soltarlo cambie porqe como sabras el pic es muy rapido y al presionar tu , el pic ya detectara que presionaste mas de 1 vez y por eso te muestra los numeros aleatorios, en un momento si tengo tiempo libre me pongo en tu proyecto :)
 
Arriba