Codigo:
Cont var byte
TRISB=%00000001
cont=0
PORTB=0
read 0,cont
loop:
if PORTB.0=0 then
cont=cont+1
write 0,cont
pause 200
if cont = 10 then
high 7
cont=10
endif
endif
goto loop
end
, pues como decia ese ejemplo ya almacena los datos en la eeprom, en que quieres aplicar este ejemplo o para que.... 
.... el que te pongo a continuacion es el que te va a servir y por si las dudas este hoy lo probe y lo reprobe y dunciona ok, ahora si no hay pretextos.... ji ji ji
, una disculpa nuevamente...
Codigo:
define OSC 4
Cont var byte
temp var byte
TRISB=%00000001
PORTB=0
eeprom 0,[0]
read 0,temp
if temp=0 then grabar
read 1,cont
if cont >= 9 then
gosub EncenderLED
endif
loop:
if PORTB.0=0 then
cont=cont+1
write 1,cont
pause 200
if cont >= 9 then
gosub EncenderLED
endif
endif
goto loop
grabar:
write 0,1
write 1,0
goto loop
EncenderLED:
high 7
cont=9
return
end
Codigo:
DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 0
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 5
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 4
TRISC=%00001111
pause 250
LCDOUT $FE,1," LCD INICIADO"
inicio:
if PORTC.0=0 then
high PORTC.4
else
low PORTC.4
endif
if PORTC.1=0 then
high PORTC.5
else
low PORTC.5
endif
if PORTC.2=0 then
high PORTC.6
else
low PORTC.6
endif
if PORTC.3=0 then
high PORTC.7
else
low PORTC.7
endif
goto inicio
end
Codigo:
EncenderLED2:
high PORTC.5
cont1=30
return
Codigo:
EncenderLED2:
high PORTC.5
cont2=30
return
Codigo:
EncenderLED3:
high PORTC.4
Cont4=30
return
Codigo:
EncenderLED3:
high PORTC.4
Cont4=40
return
Codigo:
"Contador de 10,20,30,40 pulsos con señalizacion en
"LCD y leds
"Codigo realizado por:
"MORFEUS - Colombia
"Giovanni Lafebre (LordLafebre) - Cuenca - Ecuador
"-----CONFIGURACION DEL LCD
DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 0
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 5
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 4
"----DEFINICION DEL VALOR DE OSCILADOR A UTILIZAR
define OSC 4
"---------VARIABLES UTILIZADAS
Cont var byte "VARIABLE PARA EL 1º CONTEO
Cont1 var byte"VARIABLE PARA EL 2º CONTEO
Cont2 var byte "VARIABLE PARA EL 3º CONTEO
Cont4 var byte "VARIABLE PARA EL 4º CONTEO
temp var byte "VARIABLE PARA ALMACENAR DATO EN LA EEPROM Y SABER SI EL
"PROGRAMA SE ESTA EJECUTANDO LA PRIMERA VES
"----CONFIGURACION DEL PUERTO C 4 PRIMEROS BITS COMO ENTRADA LOS 4
"ULTIMOS COMO SALIDA
TRISC=%00001111
"TIEMPO DE ESPERA PARA EL LCD
pause 250
"mensaje para mostrar el estado de los 4 pulsadores
LCDOUT $FE,1,"#01 #02 #03 #04"
LCDOUT $FE,$C0,"000 000 000 000"
"se asigna 0 a la primera posicion de la eeprom(0) sirve para indicar que nunca
"se ha ejecutado este programa
eeprom 0,[0]
"carga el valor de la eeprom de la direccion 0 en la variable temp
read 0,temp
"si el programa nunca ha sido ejecutado salta a la subrutina grabar
if temp=0 then grabar
"lee los estados de la posicion de memoria para saber los valores
"de los contadores
read 1,cont
read 2,cont1
read 3,cont2
read 4,Cont4
"muestra en el lcd los valores de las variables
lcdout $FE,$C0,dec3 cont
lcdout $FE,$C4,dec3 cont1
lcdout $FE,$C8,dec3 cont2
lcdout $FE,$CC,dec3 Cont4
"condicional para saber si ha contado 10 veces
if cont >= 10 then
gosub EncenderLED
endif
"condicional para saber si ha contado 20 veces
if cont1 >= 20 then
gosub EncenderLED1
endif
"condicional para saber si ha contado 30 veces
if cont2 >= 30 then
gosub EncenderLED2
endif
"condicional para saber si ha contado 40 veces
if Cont4 >= 40 then
gosub EncenderLED3
endif
"si estas condiciones se cumplen salta a cada subrutina descrita
"programa principal
loop:
"todos los siguientes condicionales funcionan de la misma manera
"pero con diferentes pines y variables, pero el concepto es el mismo
"--------------------------------------------------------------------
"si el pulsante en C0 ha sido presionado
if PORTC.0=0 then
"incrementa al contador en 1
cont=cont+1
"almacema en la posicion de memoria el valor actual de cont
write 1,cont
"si cont iguala o supera a 10(que indicaria que el conteo se ha cumplido)
"entonces salta a la subrrutina que enciende el led para mostrar que el
"conteo se ha cumplido
if cont >= 10 then
gosub EncenderLED
endif
"muestra en el display el valor actual de cont, permitiendo ver el conteo
"exacto, es decir el numero de veces que se a pulsado el boton
lcdout $FE,$C0,dec3 cont
"tiempo de antirrebote de tecla, para que el conteo no se haga de una manera
"muy rapida
pause 200
endif
"--------------------------------------------------------------------
"todos los demas condicionales hacen la misma funcion
"--------------------------------------------------------------------
if PORTC.1=0 then
cont1=cont1+1
write 2,cont1
if cont1 >= 20 then
gosub EncenderLED1
endif
lcdout $FE,$C4,dec3 cont1
pause 200
endif
if PORTC.2=0 then
cont2=cont2+1
write 3,cont2
if cont2 >= 30 then
gosub EncenderLED2
endif
lcdout $FE,$C8,dec3 cont2
pause 200
endif
if PORTC.3=0 then
Cont4=Cont4+1
write 4,Cont4
if Cont4 >= 40 then
gosub EncenderLED3
endif
lcdout $FE,$CC,dec3 Cont4
pause 200
endif
goto loop
"-------------------------------------------------------
"subrutina para asignar el valor inicial a la eeprom(en este caso se
"inicia desde 0)
grabar:
"enceramos todos los contadores
cont=0:cont1=0:cont2=0:Cont4=0
write 0,1
write 1,0
write 2,0
write 3,0
write 4,0
goto loop
"estas subrrutinas son para encender los leds y dejarlos encendidos en caso
"de que el conteo ha llegado a su final para cada caso
"asi mismo se asigna el valor maximo de conteo por ejemplo 10 para que en los
"condicionales donde se pregunta if cont1 >= 10 then salten a la subrutina
"adecuada y mantenga encendido el led
EncenderLED:
high PORTC.7
cont=10
lcdout $FE,$C0,dec3 cont
return
EncenderLED1:
high PORTC.6
cont1=20
lcdout $FE,$C4,dec3 cont1
return
EncenderLED2:
high PORTC.5
cont2=30
lcdout $FE,$C8,dec3 cont2
return
EncenderLED3:
high PORTC.4
Cont4=40
lcdout $FE,$CC,dec3 cont4
return
end





Codigo:
if borra=0 then " SI PULSADOR ES PRESIONADO BORRA LA MEMORIA
write 1,0
write 2,0
write 3,0
write 4,0
high led " LED = ON
pause 1000 "
low led " LED=OFF
endif
Codigo:
grabar:
"enceramos todos los contadores
cont=0:cont1=0:cont2=0:Cont4=0
write 0,1
write 1,0
write 2,0
write 3,0
write 4,0
goto loop
Codigo:
"rutina para el LCD
"-----CONFIGURACION DEL LCD
DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 0
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 5
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 4
"-------OSCILADOR-----------
Define OSC 4
Loop:
lcdout $FE,1," LCD FUNCIONA"
lcdout $FE,$C0," MUY BIEN"
pause 300
goto loop
end
Codigo:
"rutina para probar los leds y pulsantes
"-----CONFIGURACION DEL LCD
DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 0
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 5
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 4
i var byte
"-------OSCILADOR-----------
Define OSC 4
TRISC=%00001111
Inicio:
lcdout $FE,1," Probando LEDS"
for i=0 to 5
PORTC=%11110000
pause 150
PORTC=%00000000
pause 150
next i
lcdout $FE,1," LEDS OK"
pause 1000
gosub mensaje
loop
if PORTC.0=0 then
lcdout $FE,1," Pulsante RC0"
High PORTC.7
pause 500
low PORTC.7
gosub mensaje
endif
if PORTC.1=0 then
lcdout $FE,1," Pulsante RC1"
High PORTC.6
pause 500
low PORTC.6
gosub mensaje
endif
if PORTC.2=0 then
lcdout $FE,1," Pulsante RC2"
High PORTC.5
pause 500
low PORTC.5
gosub mensaje
endif
if PORTC.3=0 then
lcdout $FE,1," Pulsante RC3"
High PORTC.4
pause 500
low PORTC.4
gosub mensaje
endif
goto loop
end
mensaje:
lcdout $FE,1,"Probar Pulsantes"
lcdout $FE,$C0," Pulsa Alguno"
return
Codigo:
DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 0
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 5
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 4
A VAR PORTD.0 ;nombres para los pines de las filas
B VAR PORTD.1
C VAR PORTD.2
D VAR PORTD.3
UNO VAR PORTD.4 ;nombres para los pines de las columnas
DOS VAR PORTD.5
TRES VAR PORTD.6
CUATRO VAR PORTD.7
Lcdout $FE,1,"Probando Teclado"
BARRIDO:
LOW A
IF UNO = 0 THEN lcdout $FE,$C0," 7"
IF DOS = 0 THEN lcdout $FE,$C0," 8"
IF TRES = 0 THEN lcdout $FE,$C0," 9"
IF CUATRO = 0 THEN lcdout $FE,$C0,"10"
HIGH A
LOW B
IF UNO = 0 THEN lcdout $FE,$C0," 4"
IF DOS = 0 THEN lcdout $FE,$C0," 5"
IF TRES = 0 THEN lcdout $FE,$C0," 6"
IF CUATRO = 0 THEN lcdout $FE,$C0,"11"
HIGH B
LOW C
IF UNO = 0 THEN lcdout $FE,$C0," 1"
IF DOS = 0 THEN lcdout $FE,$C0," 2"
IF TRES = 0 THEN lcdout $FE,$C0," 3"
IF CUATRO = 0 THEN lcdout $FE,$C0,"12"
HIGH C
LOW D
IF UNO = 0 THEN lcdout $FE,$C0,"14"
IF DOS = 0 THEN lcdout $FE,$C0," 0"
IF TRES = 0 THEN lcdout $FE,$C0,"15"
IF CUATRO = 0 THEN lcdout $FE,$C0,"13"
HIGH D
pause 10
GOTO BARRIDO
END
Codigo:
DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 0
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 5
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 4
define OSC 4
Cont var byte
Cont1 var byte
Cont2 var byte
Cont4 var byte
temp var byte
E1 var byte
TRISC=%00001111
pause 250
LCDOUT $FE,1,"#01 #02 #03 #04"
LCDOUT $FE,$C0,"000 000 000 000"
eeprom 0,[0]
read 0,temp
if temp=0 then grabar
read 1,cont
read 2,cont1
read 3,cont2
read 4,Cont4
lcdout $FE,$C0,dec3 cont
lcdout $FE,$C4,dec3 cont1
lcdout $FE,$C8,dec3 cont2
lcdout $FE,$CC,dec3 Cont4
read 5,E1
if cont >= E1 then
gosub EncenderLED
endif
loop:
"--------------------------------------------------------------------
if PORTC.0=0 then
cont=cont+1
write 1,cont
if cont >= E1 then
gosub EncenderLED
endif
lcdout $FE,$C0,dec3 cont
pause 200
endif
goto loop
"-------------------------------------------------------
grabar:
cont=0
write 0,1
write 1,0
write 5,10
goto loop
EncenderLED:
high PORTC.7
read 5,E1
cont=E1
lcdout $FE,$C0,dec3 cont
return
end
Codigo:
DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 0
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 5
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 4
define OSC 4
Cont var byte
Cont1 var byte
Cont2 var byte
Cont4 var byte
temp var byte
E1 var byte
TRISC=%00001111
pause 250
LCDOUT $FE,1,"#01 #02 #03 #04"
LCDOUT $FE,$C0,"000 000 000 000"
eeprom 0,[0]
read 0,temp
if temp=0 then grabar
read 1,cont
read 2,cont1
read 3,cont2
read 4,Cont4
lcdout $FE,$C0,dec3 cont
read 2,E1
if cont >= E1 then
gosub EncenderLED
endif
loop:
"Aqui puedes generar el codigo para que incremente la variable E1
"y luego manda a guardar el dato en la eeprom
if PORTC.1=0 then
pause 250
repeat
lcdout $FE,1,"CODIGO AQUI"
pause 500
until PORTC.1=0
pause 500
LCDOUT $FE,1,"#01 #02 #03 #04"
lcdout $FE,$C0,dec3 cont
endif
"--------------------------------------------------------------------
if PORTC.0=0 then
cont=cont+1
write 1,cont
if cont >= E1 then
gosub EncenderLED
endif
lcdout $FE,$C0,dec3 cont
pause 200
endif
goto loop
"-------------------------------------------------------
grabar:
E1=10
cont=0
write 0,1
write 1,0
write 2,E1
goto loop
EncenderLED:
high PORTC.7
read 5,E1
cont=E1
lcdout $FE,$C0,dec3 cont
return
end
Codigo:
DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 0
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 5
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 4
define OSC 4
Cont var byte
Cont1 var byte
Cont2 var byte
Cont4 var byte
temp var byte
aux var byte
E1 var byte
TRISC=%00001111
pause 250
gosub text_LCD
eeprom 0,[0]
read 0,temp
if temp=0 then grabarE1
read 2,cont
read 1,aux
lcdout $FE,$C0,dec3 cont
if cont >= aux then
gosub EncenderLED
endif
loop:
"Aqui puedes generar el codigo para que incremente la variable E1
"y luego manda a guardar el dato en la eeprom
if PORTC.1=0 then
pause 250
E1=0
repeat
config:
lcdout $FE,1,"Config. Pulsos"
lcdout $FE,$C0,#E1
if PORTC.2=0 then
e1=e1+1
if E1>= 25 then
lcdout $FE,1,"Valor Superior"
lcdout $FE,$C0,"Se asignara 10"
E1=10
pause 2000
endif
pause 50
endif
pause 150
low PORTC.7
until PORTC.1=0
aux=E1
gosub grabar
pause 500
gosub text_LCD
lcdout $FE,$C0,dec3 cont
endif
"--------------------------------------------------------------------
if PORTC.0=0 then
cont=cont+1
write 2,cont
if cont >= aux then
cont=aux
gosub EncenderLED
endif
lcdout $FE,$C0,dec3 cont
pause 200
endif
goto loop
"-------------------------------------------------------
grabar:
cont=0
write 0,1
write 1,aux
write 2,cont
return
grabarE1:
e1=10 "valor por defecto
goto config
EncenderLED:
high PORTC.7
read 1,E1
cont=aux
lcdout $FE,$C0,dec3 E1
return
text_LCD:
LCDOUT $FE,1,"#01 #02 #03 #04"
LCDOUT $FE,$C0,"000 000 000 000"
return
end

TE CUENTO QUE TENGO LISTO EL CODIGO......
BUENO COMO NO HAY NADA PERFECTO TE CUENTO QUE COMO EL PROTEUS NO SIMULA EL 877 ME TOCO HACER EL CODIGO PARA UN 16F84A PERO ESTA FUNCIONANDO PERFECTO CLARO QUE SOLO PUEDO PONER A ESCANEAR DOS PUERTOS OSEA E1 Y E2 Y POR UNA MISMA SALIDA [color=6A5ACD]EL LED[/color] QUE SE ACTIVA CUANDO LA PRIMERA DE LAS DOS VARIABLES LLEGE AL TOPE PRIMERO Y TAMBIEN RENICIA TODO EL CONTADOR PORQUE NESECITAVA MAS CODIGO PERO LA MEMORIA ME QUEDO FULL 1020 BYTES.

Author : BATMAN123

LordLafebre
aqui tienes el esquema para los dos proyectos
mira realizo el mismo plano para el pic 16f628 pero no enciende el led que pasara
dame tu correo para enviartelo porque no pude subir el esquema me dice que no hay espacio...

ESTE ES EL LINK`PARA EL ESQUEMA LORDLAFEBRE.



Escrito originalmente por LordLafebre
Hola:
Pues ya he acabado, funciona de la siguiente manera:
Con el pulsante en C0 se hace el conteo de pulsos.
Con el pulsante en C1 se ingresa al menu donde se puede seleccionar la cantidad de pulsos, los incrementos son de 1 en 1, para hacer estos incrementos se utiliza el pulsante en C2 y si supera los 25 se asignara siempre 10... una ves que se ha elegido la cantidad de pulsos se debe preionar nuevamente C1 para aceptar...Codigo:
DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 0
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 5
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 4
define OSC 4
Cont var byte
Cont1 var byte
Cont2 var byte
Cont4 var byte
temp var byte
aux var byte
E1 var byte
TRISC=%00001111
pause 250
gosub text_LCD
eeprom 0,[0]
read 0,temp
if temp=0 then grabarE1
read 2,cont
read 1,aux
lcdout $FE,$C0,dec3 cont
if cont >= aux then
gosub EncenderLED
endif
loop:
"Aqui puedes generar el codigo para que incremente la variable E1
"y luego manda a guardar el dato en la eeprom
if PORTC.1=0 then
pause 250
E1=0
repeat
config:
lcdout $FE,1,"Config. Pulsos"
lcdout $FE,$C0,#E1
if PORTC.2=0 then
e1=e1+1
if E1>= 25 then
lcdout $FE,1,"Valor Superior"
lcdout $FE,$C0,"Se asignara 10"
E1=10
pause 2000
endif
pause 50
endif
pause 150
low PORTC.7
until PORTC.1=0
aux=E1
gosub grabar
pause 500
gosub text_LCD
lcdout $FE,$C0,dec3 cont
endif
"--------------------------------------------------------------------
if PORTC.0=0 then
cont=cont+1
write 2,cont
if cont >= aux then
cont=aux
gosub EncenderLED
endif
lcdout $FE,$C0,dec3 cont
pause 200
endif
goto loop
"-------------------------------------------------------
grabar:
cont=0
write 0,1
write 1,aux
write 2,cont
return
grabarE1:
e1=10 "valor por defecto
goto config
EncenderLED:
high PORTC.7
read 1,E1
cont=aux
lcdout $FE,$C0,dec3 E1
return
text_LCD:
LCDOUT $FE,1,"#01 #02 #03 #04"
LCDOUT $FE,$C0,"000 000 000 000"
return
end


Codigo:
;Programa para grabar y leer una memoria serial 24LCxx
Define I2C_SCLOUT 1 ;No es necesario resistencia pull-up en SCL
contro CON %10100000 ;contro contiene valor constante %10100000
PinSCL Var Portb.7 ;pin señal de reloj I2C
PinSDA Var Portb.6 ;pin de datos I2C
dato VAR BYTE ;variable para almacenar dato leído
Inicio:
LCDOUT $fe,1," Grabando..." ;limpiar y sacar el texto
PAUSE 1000
I2CWRITE PinSDA,PinSCL,contro,0,["H"] ;guarda la H en posición 0
PAUSE 10 ;pause para la grabación
I2CWRITE PinSDA,PinSCL,contro,1,["O"] ;guarda la O en posición 1
PAUSE 10 ;pause para la grabación
I2CWRITE PinSDA,PinSCL,contro,2,["L"] ;guarda la L en posición 2
PAUSE 10 ;pause para la grabación
I2CWRITE PinSDA,PinSCL,contro,3,["A"] ;guarda la A en posición 3
PAUSE 10 ;pause para la grabación
LCDOUT $fe,1,"Leer memoria" ;limpiar y sacar el texto
PAUSE 1000
LCDOUT $FE,1 ;limpiar pantalla del LCD
leer: ;programa para leer memoria s.
I2CREAD PinSDA,PinSCL,contro,0,[dato] ;leer la mem. 0 y guardar en dato
LCDOUT ,dato ;mostrar dato en el LCD
PAUSE 1000 ;esperar 1 seg.
I2CREAD PinSDA,PinSCL,contro,1,[dato] ;leer la mem. 1 y guardar en dato
LCDOUT ,dato ;mostrar dato en el LCD
PAUSE 1000 ;esperar 1 seg.
I2CREAD PinSDA,PinSCL,contro,2,[dato] ;leer la mem. 2 y guardar en dato
LCDOUT ,dato ;mostrar dato en el LCD
PAUSE 1000 ;esperar 1 seg.
I2CREAD PinSDA,PinSCL,contro,3,[dato] ;leer la mem. 3 y guardar en dato
LCDOUT ,dato ;mostrar dato en el LCD
End






COMO DIJO EL COMAPEÑERO LORD BIENVENIDO PICRAUL



FANTASTICO AVER SI ME PONGO AL DIA CON ESO DE LAS MEMORIAS Y APARTE UNA PREGUNTILLA TENGO UNA DE ATMEL CREO Q