Autor Tema: Contar 10 pulsos y encender led  (Leído 23063 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado morfeus

  • PIC12
  • **
  • Mensajes: 78
RE: Contar 10 pulsos y encender led
« Respuesta #75 en: 06 de Octubre de 2005, 12:36:00 »
Esto es lo que he logrado hasta ahora, lo que hace el @ es enviar directamente el valor por ejemplo 50 a la posisciòn 5 de la memoria, luego leo la posicion 5 y la envio a E1 y por ultimo almaceno este valor en la variable CONT.

Al compilarlo y ver la pagina de memoria en el programador podemos ver que efectivamente los valores se han depositado en dichas direcciones y al encender el circuito se van a mostrar estos valores por defecto, en la pruebas realizadas modifique los valores de la eeprom (desde el programador) para el conteo y al grabarlos en el pic estos se modifican.

No he logrado aun mostrar ni variar estos valores desde el LCD ni el teclado pero ahi vamos.


morfeus


E1 VAR BYTE   "variable para almacenar el numero de conteo
data @5, 50    "numero màximo permitido a contar y modificar
READ 5,E1
WRITE 5,CONT  "muevo el valor de conteo a la variable cont



E2 VAR BYTE   "variable para almacenar el numero de conteo
data @6, 70    "numero màximo permitido a contar y modificar
READ 6,E2
WRITE 6,CONT1  "muevo el valor de conteo a la variable cont1



E3 VAR BYTE   "variable para almacenar el numero de conteo
data @7, 100    "numero màximo permitido a contar y modificar
READ 7,E3
WRITE 7,CONT2  "muevo el valor de conteo a la variable cont2



E4 VAR BYTE   "variable para almacenar el numero de conteo
data @8, 120    "numero màximo permitido a contar y modificar
READ 8,E4
WRITE 8,CONT3  "muevo el valor de conteo a la variable cont3


"condicional para saber si ha contado 7 veces
if cont >= E1 then
gosub EncenderLED
endif
"condicional para saber si ha contado 20 veces
if cont1 >= E2 then
gosub EncenderLED1
endif
"condicional para saber si ha contado 30 veces
if cont2 >= E3 then
gosub EncenderLED2
endif
"condicional para saber si ha contado 40 veces
if Cont4 >= E4 then
gosub EncenderLED3
endif
"si estas condiciones se cumplen salta a cada subrutina descrita


"programa principal
loop:
       if borra1=0 then
       low PORTC.7
       GOSUB grabar
       endif
       
       if borra2=0 then
       LOW PORTC.6
       GOSUB grabar1
       endif
       
       if borra3=0 then
       LOW PORTC.5
       GOSUB grabar2
       endif
       
       if borra4=0 then
       LOW PORTC.4
       GOSUB grabar3
       endif
       
             
                           
"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 >= E1 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 >= E2 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 >= E3 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 >= E4 then
            gosub EncenderLED3
        endif
        lcdout $FE,$CC,dec3 Cont4
        pause 200
    endif
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=E1
    lcdout $FE,$C0,dec3 CONT    
    return

EncenderLED1:
    high PORTC.6
    cont1=E2
    lcdout $FE,$C4,dec3 cont1
    return

EncenderLED2:
    high PORTC.5
    cont2=E3
    lcdout $FE,$C8,dec3 cont2
    return

EncenderLED3:
    high PORTC.4
    Cont4=E4
    lcdout $FE,$CC,dec3 cont4
    return
end

Desconectado LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
RE: Contar 10 pulsos y encender led
« Respuesta #76 en: 07 de Octubre de 2005, 13:24:00 »
Hola:

aqui te pongo un ejemplo para que el numero de conteos sea en funcion de la variable E1

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

Desconectado LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
RE: Contar 10 pulsos y encender led
« Respuesta #77 en: 11 de Octubre de 2005, 14:10:00 »
Hola:

Ahora revisa este codigo para que intentes el incremento de la variable E1 hasta el valor que necesites, tendrias que hacer la parte del incremento y luego enviar a guardar el dato en la eeprom:

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

Desconectado morfeus

  • PIC12
  • **
  • Mensajes: 78
RE: Contar 10 pulsos y encender led
« Respuesta #78 en: 11 de Octubre de 2005, 17:00:00 »
Este codigo esta configurado para que trabaje con la entrada 01 pero seria igual
para las otras entradas, hay una resistencia en RA4 con comum a positivo, todos los
pulsadores van con resistencias de 4.7K conectadas a positivo.

El circuito hace lo siguiente:

Para cambiar el numero de pulsos a contar oprimimos el pulsador en RA4 alli nos muestra un
menu para aumentar o disminuir los pulsos, para disminuir oprimimos el pulsador en RA0 y para
aumentar oprimimos el pulsador en RA1 para confirmar oprimimos el pulsador ubicado en RB7 y listo
ya podemos contar la cantidad de pulsos que configuremos en la eeprom.  

Ya monte el circuito y funciona OK!.


Este es el 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

TECLA var PORTA.4
aumenta var PORTA.5
enter var PORTB.7
borra1 var PORTA.0

ADCON1=7
TRISA=%111111
TRISC=%00001111

pause 250

inicio:

LCDOUT $FE,1,"#01 #02 #03 #04"
LCDOUT $FE,$C0,"000 000 000 000"

eeprom 0,[0]

read 0,temp
read 5,E1

if temp=0 then grabar

read 1,cont
read 2,cont1
read 3,cont2
read 4,Cont4

lcdout $FE,$C0,dec3 cont



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 tecla=0 THEN
pause 200
gosub AJUSTE
endif

IF borra1=0 then
low PORTC.7
GOSUB grabar
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:
    "enceramos todos los contadores
    cont=0
    lcdout $FE,$C0,dec3 CONT
    write 0,1
    write 1,0
        lcdout  $FE,1, "  Memoria #01"
        LCDOUT $FE,$C0,"    Borrada"
        pause 1000
        gosub inicio

EncenderLED:
    high PORTC.7
    cont=E1
    lcdout $FE,$C0,dec3 CONT    
    return
    end
    RETURN
   
end

ajuste:
 "muestra en el lcd los valores de la variable E
lcdout $FE,$C0,dec3 E1
LCDOUT $FE,1,  " Pulsos"
LCDOUT $FE,$C0," Para #01: "
lcdout $FE,$CA,dec3 E1
PAUSE 100
if PORTA.1=0 then           "aumenta cifras
        E1=E1+1
        write 5,E1
        lcdout $FE,$CA,dec3 E1
        pause 200
        endif
       
if PORTA.0=0 then           "disminuye cifras
        E1=E1-1
        write 5,E1
        lcdout $FE,$CA,dec3 E1
        pause 200
        endif
if PORTB.7=0 then
pause 200
GOSUB INICIO
ENDIF    
goto AJUSTE
return

Desconectado LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
RE: Contar 10 pulsos y encender led
« Respuesta #79 en: 11 de Octubre de 2005, 17:01:00 »
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

Desconectado batman123

  • Colaborador
  • PIC10
  • *****
  • Mensajes: 46
RE: Contar 10 pulsos y encender led
« Respuesta #80 en: 14 de Octubre de 2005, 18:56:00 »
     

muy buen proyecto hermanos

me encantaria que pasaran el archivo en proteus para simularlo...Flash

claro si no es mucha molestia  miren este es mi correo edgar_santiagos2@yahoo.com
No hay cosas imposibles  si no hombres incapaces

Desconectado LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
RE: Contar 10 pulsos y encender led
« Respuesta #81 en: 14 de Octubre de 2005, 21:04:00 »
Hola:

Batman123 el problema es que no simula la EEPROM del pic por lo demas funciona muy bien, tengo proteus 6.7 SP3, igual si lo quieres lo puedo colgar aqui...! Sonrisa Gigante

Desconectado batman123

  • Colaborador
  • PIC10
  • *****
  • Mensajes: 46
RE: Contar 10 pulsos y encender led
« Respuesta #82 en: 15 de Octubre de 2005, 11:35:00 »

mira wetuve miando lo que quieren  hacer  me imagino que es lo siguiente:
con el teclado escribir un numero de 0  a 999 y que luego la  por determinado pin llegue a esta variable y cuando llege prenda un led para indicar que llego al tope

es esto cierto o si no me corrigen..

porque si es como yo digo mañana posteo un codigo que estoy haciendo basandome en esta idea. okey
No hay cosas imposibles  si no hombres incapaces

Desconectado LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
RE: Contar 10 pulsos y encender led
« Respuesta #83 en: 15 de Octubre de 2005, 12:42:00 »
Hola:

Pues esa es basicamente la idea de morfeus... el quiere algo asi para una maquinita pero no puedo ayudarle mucho por falta de tiempo, tengo que hacer muchas cosas que me han pedido para la U y estoy liado Helado... pero si lo tienes tu pues bienvenido....! Sonrisa Gigante

Desconectado morfeus

  • PIC12
  • **
  • Mensajes: 78
RE: Contar 10 pulsos y encender led
« Respuesta #84 en: 15 de Octubre de 2005, 16:58:00 »
Hola

Como estan?, na habia mirado el foro estos días porque he estado muy ocupado pero me alegra que batman123 se sume al grupo y aporte sus ideas. He realizado un bosquejo de codigo para el teclado 4x4 pero estoy tratando de hacerlo funcionar y cuando lo haga lo subo.

saludosGiño

Desconectado batman123

  • Colaborador
  • PIC10
  • *****
  • Mensajes: 46
RE: Contar 10 pulsos y encender led
« Respuesta #85 en: 15 de Octubre de 2005, 19:28:00 »
morfeus en hora buena....

RebotadoTE CUENTO QUE TENGO LISTO EL CODIGO......Rebotado
 
POR MEDIO DEL TECLADO INTRODUCES LOS VALORES TOPES DE E1, E2 Y E3

Y LUEGO EL PIC COMIENZA A ESCANEAR LOS PUERTOS PARA CONTAR LOS PULSOS.

Y  CUANDO LLEGA A ESTE SE ENCIENDE EL LED CREO QUE ES ESO LO QUE QUIERES NO.


 FlashBUENO 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.Flash

BUENO EL FUNCIONAMIENTO ES EL SIGUIENTE..

PRESIONAS
  ASTERISCO * Y LUEGO  COLOCAS LOS VALORES PARA E1 Y E2 SI TE EQUIVOCAS EN LOS VALORES PRECIONAS ASTERISCO PARA BORRAR LO ESCRITO.
ENTOCES PRESIONAS NUEVAMENTE ASTERISCO PARA DIGITAR LOS NUEVOS TOPES

Y PARA EMPEZAR A ESCANEAR LOS PUERTOS PRESIONA NUMERAL # Y LISTO
COMIENZA A CONTAR .

JEJEJEJE. QUE FACIL.........

BUENO LOS PUERTOS PARA COLOCAR LOS PULSADORES SON RA.1 Y RA2 Y EL PUERTO PARA EL LED ES RA.3 EL ESQUEMA ES EL MISMO QUE TE ENVIE A TU CORREO, SOLO COLOCALE A LOS PUERTOS RA.1 Y RA.2 UNAS RESISTENCIAS FULL-UP A POSITIVO Y EL PULSADOR A TIERRA.

BOY A MEJORARLO UN POCO MAS PARA UN 16F628 Y HAY SI SUBO EL CODIGO POR AHORA SUBO EL HEX..

PRUEBALO Y ME DICES QUE TAL.....

CUALQUIER COSA ME ESCRIBES O ME LLAMAS AL CELULAR....

SUERTE
No hay cosas imposibles  si no hombres incapaces

Desconectado LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
RE: Contar 10 pulsos y encender led
« Respuesta #86 en: 15 de Octubre de 2005, 23:36:00 »
Hola:

Si lo quisieran hacer con una memoria externa vendria bien una I2C como la 24LC04B... Sonrisa Gigante

Desconectado batman123

  • Colaborador
  • PIC10
  • *****
  • Mensajes: 46
RE: Contar 10 pulsos y encender led
« Respuesta #87 en: 18 de Octubre de 2005, 11:47:00 »
y este es el basRebotado

"****************************************************************
"*  
"* Flash Author  : BATMAN123   Flash                                                                          
"*  Notice  : Copyright (c) 2005 Tecnico Superior en Electronica
"*          : Todos los Deechos Reservados                      
"*  Date    : 14/OCTUBRE/2005                                  
"*  Version : 1.0                                            
"*  Notes   :  CONTADOR DE PULSOS CON PIC16F84A UTILIZANDO 1    
"*          :  TECLADO MATRICIAL 4X4 Y LCD                      
"****************************************************************
 
DEFINE LCD_DREG PORTB       " Setea el puertos de datos del LCD por el puerto B
DEFINE LCD_DBIT 0           " Setea el bit de comienzo de datos (0 o 4)
DEFINE LCD_RSREG PORTB      " Setea el port LCD Register Select
DEFINE LCD_RSBIT 4          " Setea el bit LCD Register Select
DEFINE LCD_EREG PORTA       " Setea el port LCD Enable
DEFINE LCD_EBIT 0           " Setea el bit LCD Enable
DEFINE LCD_BITS 4           " Setea el tamaño del bus LCD (4 o 8 bits)
DEFINE LCD_LINES 2          " Setea el numero de lineas en el LCD
         
 
   
    tecla   var byte        " definicion de variables
    n1      var byte
    n2      var byte
    n3      var byte
    n4      var byte
    n5      var byte
    n6      var byte
    unidad1   var byte
    decena1   var byte    
    centena1  var byte
    unidad2   var byte
    decena2   var byte
    centena2  var byte    
    E1        var byte
    E2        var byte
    numero1 var byte
    numero2 var byte
     
    n1=0                  " asigno valor a las variables
    n2=0                  " el valor es equivalente en asccII
    n3=0
    n4=0                  " asigno valor a las variables
    n5=0                  " el valor es equivalente en asccII
    n6=0
    numero1=0
    numero2=0
   
   
     read 10, numero1                      " Leo el ultimo numero guardado en E1
     READ 11, numero2                      " Leo el ultimo numero guardado en E2
     READ 6, E1                            " Leo el valor del tope en E1
     READ 7, E2                            " Leo el valor del tope en E2
     if numero1=0 and numero2=0 then goto inicio   "Comapra con 0 sino es salta
     pause 200                             " Pausa para estabilizar LCD
     LCDOUT $FE,1,dec3 numero1,dec3 numero2  " Muestra el numero en que va  E1
     LCDOUT $FE,$C0,dec3 E1                " Muestra el numero del tope   E1
     LCDOUT $FE,$C5,dec3 E2                " Muestra el numero del tope   E2
     
     goto mirar                            " Salta a la rutina mirar para esca
                                           " near los puertos de los pilsadores.
   
    inicio:                                " Inicia el progrma desde cero
    LCDOUT $FE,1,"#1  #2  #3  #4"          " Mensajes maricos
    LCDOUT $FE,$C0,"000 000 000 000"       " Mensaje para mostrar valores
    pause 1000                             " iniciales y pausa para verlos
   
   
    arrancar:                              " RUTINA PARA ACTIVAR EL CIRCUITO
    OPTION_REG=0                           " Activo resistencias full-up
    TRISB = %11111110                      " Declaro el puerto B como salida    
    IF portb= $7e  then goto clave         " SI PRESIONO * PUEDO INTRODUCIR LOS
                                         " VALORES PARA LOS TOPES #1, #2,#3,#4
    goto arrancar                          " Si no presiono asterisco el circu-
                                           " ito no deja hacer nada....jajaja
   
    clave:                  " RUTINA PARA INTRODUCIR LOS VALORES  DE E1, E2, E3
    pause 500                              " Pausa para estavilizar el sistema
    gosub teclado                          " Llamado de la rutina teclado
    SWAP  tecla, n1                  " Asigno a n1 el valor de la tecla pulsada
    LCDOUT $FE,$C0,dec n1                  " Muestra en el LCD la tecla pulsada
    pause 500                              " Pausa para ver la tecla pausada
    gosub teclado                    " Llamado para traer el siguiente  valor
    SWAP  tecla, n2                        " DE AQUI EN ADELANTE PARA CADA #
    LCDOUT $FE,$C1,dec n2                  " EL PROCEDIMIENTO ES EL MISMO....
    pause 500
    gosub teclado
    SWAP  tecla, n3
    LCDOUT $FE,$C2,dec n3
    pause 500
    gosub teclado
    SWAP  tecla, n4
    LCDOUT $FE,$C4,dec n4
    pause 500
    gosub teclado
    SWAP  tecla, n5
    LCDOUT $FE,$C5,dec n5
    pause 500
    gosub teclado
    SWAP  tecla, n6
    LCDOUT $FE,$C6,dec n6
    pause 500                      
     
     
    iniciar_conteo:
    OPTION_REG=0
    TRISB = %11111011                                  
    IF portb= $7B  then goto contar
    pause 20
    TRISB = %11111011                                  
    IF portb= $7e  then goto inicio
    pause 20
    goto iniciar_conteo
   
   
    contar
    unidad1= n3 * 1
    decena1= n2 * 10
    centena1= n1 * 100
   
    unidad2= n6 * 1
    decena2= n5 * 10
    centena2= n4 * 100
   
    E1=centena1 + decena1 + unidad1
    E2=centena2 + decena2 + unidad2
   
    write 6, E1
    write 7, E2
    pause 100
    LCDOUT $FE,1,"SCANEANDO PUERTO"
    pause 500
   
    mirar:
    IF porta.2= 0  then goto led1
    IF porta.1= 0  then goto led2
    goto mirar

    led1:
    numero1 = numero1 + 1
    write 10, numero1
    pause 50
    LCDOUT $FE,1,dec3 numero1," ", dec3 numero2
    LCDOUT $FE,$C0,dec3 E1," ",  dec3 E2          
   
    if numero1=>E1  then prender_led
    pause 20
    goto mirar
   
    led2:
    numero2 = numero2 + 1
    write 11, numero2
    pause 50
    LCDOUT $FE,1,dec3 numero1, dec3 numero2
    LCDOUT $FE,$C5,dec3 E1, dec3 E2        
   
    if numero2=>E2  then prender_led
    pause 10
    goto mirar
   
     
    prender_led
    high porta.3
    pause 3000
    low porta.3
    numero1=0
    numero2=0
    write 10, numero1
    write 11, numero2
    goto inicio



    "************************************************************************
    " RUTINA PARA LEER EL TECLADO: devuelve el valor de la tecla pulsada
    "en el teclado .
    "************    PUEDE SER USADA EN CUALQUIER PROGRAMA PBP  *************
    "                PARA LEER UN TECLADO MATRICIAL 4 X 4
    "************************************************************************
   
    teclado:
    OPTION_REG=0
    TRISB = %11111110
    low portb.0
    if portb = $EE  then uno
    if portb = $DE  then cuatro
    if portb = $BE  then ciete
    if portb = $7E  then asterisco
       
    TRISB = %11111101
    low portb.1
    if portb = $ED  then dos
    if portb = $DD  then cinco
    if portb = $BD  then ocho
    if portb = $7D  then cero
       
    TRISB = %11111011
    low portb.2
    if portb = $EB  then tres
    if portb = $DB  then seis
    if portb = $BB  then nueve
    if portb = $7B  then numeral
   
    goto teclado
   
    asterisco
    tecla="*"
    return
   
    ciete:
    tecla=7
    return
   
    cuatro:
    tecla=4
    return
   
    uno:
    tecla=1
    return
   
    dos:
    tecla=2
    return
   
    cinco:
    tecla=5
    return
   
    ocho:
    tecla=8
    return
   
    cero:
    tecla=0
    return
     
    tres:
    tecla=3
    return
     
    seis:
    tecla=6
    return
   
    nueve:
    tecla=9
    return
     
    numeral:
    tecla="#"
    return
   
    endRebotado

FALTA MEJORARLO UN POCO....PERO YA CASI
No hay cosas imposibles  si no hombres incapaces

Desconectado LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
RE: Contar 10 pulsos y encender led
« Respuesta #88 en: 18 de Octubre de 2005, 12:06:00 »
Hola:

Batman123.... puedes colgar el diseño para verlo...?

Desconectado batman123

  • Colaborador
  • PIC10
  • *****
  • Mensajes: 46
RE: Contar 10 pulsos y encender led
« Respuesta #89 en: 18 de Octubre de 2005, 18:55:00 »
bueno FlashLordLafebre Flash aqui tienes el esquema para los dos proyectos

es practicamente el mismo lo unico que cambia son los pulsadores

espero te sea de gran ayuda...Rebotado

Rebotadomira realizo el mismo plano para el pic 16f628 pero no enciende el led que pasara
sera que el puerto esta declarado como dijital y por eso no prende..

ESPERO ME SOLUCIONES ESTA INQUIETUD?...
 
   MUCHA SUERTE......Y ESPERO RESPUESTA..Rebotado

Fumadordame tu correo para enviartelo porque no pude subir el esquema me dice que no hay espacio...Fumador



No hay cosas imposibles  si no hombres incapaces


 

anything