
Me han visto todos son mas de 1900 vista en mi proyecto y curioseando
josechu,captroya,montanez,xoant y demas compañero no se rinde y vengase por favor.......pero no te enoje.
Hellmult ahorita te mando el codigo mas sencillo.
Saludos!!!!
Código: Seleccionar todo
'Experimento-20'
'Micro a usar es atmega8
$regfile = "m8def.dat"
'Cristal interno de oscilacion
$crystal = 1000000
'PinD como salida y entrada
Config Portd.0 = Input
Config Portd.1 = Input
Config Portd.7 = Output
Portd.0 = 1
Portd.1 = 1
Portd.7 = 1
Dim Duracion As Byte
Declare Sub Blinqueo_led(byval Duracion As Byte)
Do
If Pind.0 = 0 And Pind.1 = 0 Then
Duracion = 5
Call Blinqueo_led(duracion)
Else
If Pind.0 = 0 And Pind.1 = 1 Then
Duracion = 250
Call Blinqueo_led(duracion)
Else
If Pind.0 = 1 And Pind.1 = 0 Then
Duracion = 125
Call Blinqueo_led(duracion)
Else
Duracion = 65
Call Blinqueo_led(duracion)
End If
End If
End If
Loop
Sub Blinqueo_led(duracion As Byte)
Toggle Portd.7
Wait Duracion
Toggle Portd.7
Wait Duracion
End Sub
End
Código: Seleccionar todo
'Experimento-20'
'Micro a usar es atmega8
$regfile = "m8def.dat"
'Cristal interno de oscilacion
$crystal = 1000000
'PinD como salida y entrada
Config Portd.0 = Input
Config Portd.1 = Input
Config Portd.7 = Output
Portd.0 = 1
Portd.1 = 1
Portd.7 = 1
Dim Duracion As Byte
Declare Sub Blinqueo_led(byval Duracion As Byte)
Do
Input "Entre duración de blinqueo (0-255): " , Duracion
Call Blinqueo_led(duracion)
Loop
Sub Blinqueo_led(duracion As Byte)
Toggle Portd.7
Wait Duracion
Toggle Portd.7
Wait Duracion
End Sub
End
Creo que ya entendi la duda completamente....Hellmut1956 escribió:Hola amigosCódigo: Seleccionar todo
'Experimento-20' 'Micro a usar es atmega8 $regfile = "m8def.dat" 'Cristal interno de oscilacion $crystal = 1000000 'PinD como salida y entrada Config Portd.0 = Input Config Portd.1 = Input Config Portd.7 = Output Portd.0 = 1 Portd.1 = 1 Portd.7 = 1 Dim Duracion As Byte Declare Sub Blinqueo_led(byval Duracion As Byte) Do If Pind.0 = 0 And Pind.1 = 0 Then Duracion = 5 Call Blinqueo_led(duracion) Else If Pind.0 = 0 And Pind.1 = 1 Then Duracion = 250 Call Blinqueo_led(duracion) Else If Pind.0 = 1 And Pind.1 = 0 Then Duracion = 125 Call Blinqueo_led(duracion) Else Duracion = 65 Call Blinqueo_led(duracion) End If End If End If Loop Sub Blinqueo_led(duracion As Byte) Toggle Portd.7 Wait Duracion Toggle Portd.7 Wait Duracion End Sub End
Aquí el programa que acaba de publicar el amigo Genaro, pero ahora usando la sentencia "Call"!
Ahora a los detalles del código.:
En cierto sentido la sentencia call es como crear una sentencia propia, en este caaso la sentencia Blinqueo_LED. Deje el código de Genaro casi que sin cambios, pero mas leible. Usando la sentencia "AND" hice el chequeo de los valores de los pines PIND.0 y PIND.1 de un golpe lo que asiste mucho en lo leible del programa. La sentencia "AND" usada aquí tiene la función de que la condición de la sentencia If ... then solo es verdadera (True) si ambos pines tienen el valor deseado.
Ahora a la sentencia Call:
El uso de esta sentencia empieza declarando la subrutina. Esto ocurre con la sentencia "Declare". La sentencia "Declare" tiene 2 posibles funciones. La primera es declarar una subrutina, lo que estamos haciendo en este programa. La segunda es declarando una función. Sea dicho que la función es una subrutina que al ser ejecutada resulta en un valor. Así este valor puede ser asignado a una variable. Pero sobre esto mas en otro momento.
Despues de declarar la subrutina Blinqueo_LED esta existe como nombre tal cual declarada y esta disponible para ser usada con la sentencia "Call".
Dentro de los paréntesis en la declaración de nuestra subrutina usé:
"byval Duracion As Byte"
Esto significa que el valor que pongo entre los paréntesis al llamar la subrutina con la sentencia "Call", es asignado a la variable "Duracion".
Lo simpático de esta forma de programar es que la sentencia:
"Call Blinqueo_led(duracion)", es que no cambia, es siempre la misma. Todo lo que hago es asignar un valor nuevo a "Duracion" y ya el resultado es otro. También sería posible usar la sentencia "Call" así:
"Call Blinqueo_led(5)"
Escribiendo el valor entre los paréntesis. El resultado sería identico a la forma anterior donde le asigno el valor a duración en el renglón anterior a la sentencia "Call". Ojalá que esto sea de utilidad para entender mejor este primer uso de la sentencia call.
Al final del código vemos la subrutina "Blinqueo_led". Como pueden ver es la subrutina de Genaro tal cual la escribio!
Subsumando lo dicho en este mensaje. Si comparan el código que publicó Genaro con el código modificado que publico ahora pueden ver lo siguiente:
1. El código es mucho mas facil de leer y entender.
2. Es mucho menos propenso a hacer errores durante el escribir del código.
3. Hemos creado un código reusable sensillísimamente.
Permítanme presentar el concepto, que acaba siendo clave para todo aquel que se decida en hacer el cursillo electrónico!
Siempre he recalcado que el objetivo del curso es capacitar el realizar cada cual sus propias soluciones, reusando los módulos que presenta el curso electrónico. esto no solo consiste en la hardware, que es lo que ya ha creado tantas emociones, sino que es ver todo como una caja de piezas de lego. Imagínense módulos de hardware y acompanando estos módulos de software como la subrutina "Blinqueo_LED". Tomen el caso de un variador electrónico. Junto con el o los módulos de hardware, en este caso un módulo de control y uno de potencia, acampanados por módulos de software. Estos módulos de software los escribiríamos de tal forma que le asignaríamos valores a los parámetros, así como lo hice con "Duracion" en este ejemplo, y ya seríamos capaces de adaptar la solución del variador a los más diversos variadores electrónicos. En cierto sentido encapsulamos los programas. Esto significa que el reusar de un módulo de software, solo tendríamos que declarar las subrutinas, copiar el código de las subrutinas a nuestro programa y asignar los valores deseados a los parámetros. El riesgo de cometer errores se, limita así a un mínimo.
Hellmut1956 escribió:![]()
![]()
8)
![]()
![]()
Bueno amigo, a expresar tus dudas. Pero no me imagino que el programa hace lo que deseas en tu versión, o me equivoco?
http://www.pollin.de/shop/dt/Njg2OTU3OT ... L416B.html
Aquí el enlace al decodificador rotativo. Conoces partes como esas en el control del radio en el carro, sie es de aquellos que tienen el control para girar y así sintonizar las emisoras o poner el volumen.
http://www.pollin.de/shop/downloads/D240313D.PDF" onclick="window.open(this.href);return false;
Aquí la hoja de datos.
En lo que a la pantalla se refiere, creo que hace ya bastante tiempo me habias mandado un hoja de datos de uno y lo que recuerdo es que es idéntico al que yo menciono en el curso en lo que a la interfaz se refiere. Vale intentarlo.