Armaron el circuito? probaron el código? ...Muy bien! seguimos con los ejemplos de Protón y que mejor para seguir conociendo a este fabuloso compilador que ver mas ejemplos, con esto aprenderemos más instrucciones y nos acostumbramos a la estructura de programación.-
Ampliando un poco el tema de definición de puertos para utilizarlos como entrada ó salida podemos utilizar la siguiente sintaxis usando TRIS
TRISB = %00000001
Podemos observar que esto difiere de la definición que hicimos en el primer ejemplo, por que?
hay 8 números entre “0” y “1” que corresponden a los bit’s del puerto, en este caso el puerto B, y se leen de derecha a izquierda, el “1” que se ve arriba corresponde al BIT0 del puerto B y significa que ese bit será ENTRADA si por el contrario tuvieramos
TRISB = %00001100
Vemos que el BIT0 y el BIT1 son SALIDAS, el BIT2, BIT3 son ENTRADAS y finalmente los BIT5, 6, 7 y 8 son SALIDAS
repasando: “0” significa SALIDA y “1” significa ENTRADA.-
También podemos referirnos a un BIT en particular de la siguiente forma
TRISB.2 = 0 ’ BIT2 del PORTB como salida
otro ejemplo:
TRISB.7 = 1 ’ BIT7 del PORTB como entrada
Si bien no está el ejemplo existe TRISA y se utiliza de la misma forma y es para el puerto A
Después del ejemplo más básico y primordial, vamos a agregarle un pulsador y un led más al programa anterior para que al presionar el pulsador poder elegir entre dos “efectos” por llamarle de alguna manera, que serían: titilar y alternar.
El circuito es muy sencillo, se han omitido la etapa del cristal y del reset para simplificar el dibujo pero recuerden que si lo van a probar en la realidad tendrán que agregarlos.-
‘*********************************************************
‘* Name : titilar y alternar *
‘* Author : [DOPPELBLOG] www.cirware.com.ar/blog *
‘* Notice : Copyright© 2008 *
‘* : All Rights Reserved *
‘* Date : 30/07/2008 *
‘* Version : 1.0 *
‘* Notes : un pulsador y dos led’s, se elije entre la*
‘* : función titilar y alternar *
‘*********************************************************
Device = 16F84A
XTAL = 4
‘*******************definiciones***************************
Dim btn As Byte ‘defino btn como variable del tipo byte
Symbol LED1 PORTB.1 ’ portb.1 ahora se llama LED1
Symbol LED2 PORTB.2 ’ portb.1 ahora se llama LED2
Symbol pulsador PORTB.3 ‘portb3 ahora se llama pulsador PORTB = 0 ’ apago todo el puerto B
TRISB = %00000100 ’ DEFINO ENTRADAS Y SALIDAS
‘**************************aqui comienza el program********
titilar: DelayMS 10 ‘delay de 10 ms
High LED1 ‘enciendo el led1
High LED2 ‘enciendo el led2
DelayMS 250 ‘pausa de 1/4 de seg
Low LED1 ‘apago el led1
Low LED2 ‘apago el led2
DelayMS 250 ‘pausa de 1/4 de seg
Button pulsador,0,10,5,btn,1,alternar ‘ver texto
GoTo titilar ‘vuelvo a la rutina titilar
alternar: DelayMS 10 ‘delay de 10 ms
High LED1 ‘enciendo el led1
Low LED2 ‘apago el led2
DelayMS 250 ‘pausa de 1/4 de seg
Low LED1 ‘apago el LED1
High LED2 ‘enciendo el led2
DelayMS 250 ‘pausa de 1/4 de seg
Button pulsador,0,10,5,btn,1,titilar
GoTo alternar ‘vuelvo a la rutina alternar
End ‘fin del programa
veamos que hace este sencillo código, primero definimos el pic a usar y el cristal como ya lo habiamos visto recuerdan?
Bien aqui explicaremos algo nuevo y es la instrucción BUTTON, según la sintaxis del manual sería de la siguiente forma
BUTTON Pin , DownState , Delay , Rate , Workspace , TargetState , Label
Esa sería la estructura básica del BUTTON
Pin – a PORT.BIT, constant, or variable (0 – 15), that specifies the I/O pin to use. This pin will automatically be set to input. DownState – a variable, constant, or expression (0 or 1) that specifies which logical state occurs when the button is pressed. Delay – a variable, constant, or expression (0 – 255) that specifies how long the button must be pressed before auto-repeat starts. The delay is measured in cycles of the Button routine. Delay has two special settings: 0 and 255. If Delay is 0, Button performs no debounce or auto-repeat. If Delay is 255, Button performs debounce, but no auto-repeat. Rate – a variable, constant, or expression (0 – 255) that specifies the number of cycles between auto-repeats. The rate is expressed in cycles of the Button routine. Workspace – a byte variable used by Button for workspace. It must be cleared to 0 before being used by Button for the first time and should not be adjusted outside of the Button command. TargetState – a variable, constant, or expression (0 or 1) that specifies which state the button should be in for a branch to occur. (0 = not pressed, 1 = pressed). Label – a label that specifies where to branch if the button is in the target state. Button pulsador,0,10,5,btn,1,alternar
Pin = sería en nuestro caso “pulsador” el puerto de entrada a usar, automáticamente también coloca este pin como entrada.-
Downstate = en nuestro ejemplo es “0”, es el estado que queremos cuando presionamos el pulsador puede ser 0 ó 1.-
Delay = sería 10 en el ejemplo y es el tiempo que tiene que pasar antes que suceda la auto-repetición.-
Rate = 5 en nuestro ejemplo, es el número de ciclos que tienen que pasar entre las auto-repeticiones.-
Workspace = es un buffer que usa el comando para funcionar (btn)
Target state = especifica el estado del button en el que debe estar BUTTON para que suceda la acción, “0”sin presionar (sería al soltar el pulsador) y “1” al presionar.- (nuestro caso es 1).-
Label = etiqueta que especifica donde salta la instrucción al producirse la acción (ejemplo: alternar)
Explicado lo anterior se habrán dado cuenta que btn es la variable que usa la instrucción button para funcionar y a la cual le podemos poner cualquier nombre.-
*******************definiciones***************************
Dim btn As Byte ‘defino btn como variable del tipo byte
Luego sigue la definicion de ALIAS y la definición de puertos
Symbol LED1 PORTB.1 ’ portb.1 ahora se llama LED1
Symbol LED2 PORTB.2 ’ portb.1 ahora se llama LED2
Symbol pulsador PORTB.3 ‘portb3 ahora se llama pulsador
PORTB = 0 ’ apago todo el puerto B
TRISB = %00000100 ’ defino las entradas y salidas a utilizar
Y nos encontramos ahora con las rutinas (NOTA: los asteriscos y números son para seguir el curso del programa pero no forman parte del mismo)
titilar: ****(901)**** DelayMS 10 ‘delay de 10 ms
High LED1 ‘enciendo el led1
High LED2 ‘enciendo el led2
DelayMS 250 ‘pausa de 1/4 de seg
Low LED1 ‘apago el led1
Low LED2 ‘apago el led2
DelayMS 250 ‘pausa de 1/4 de seg
Button pulsador,0,10,5,btn,1,alternar ‘****(123)****
GoTo titilar ‘vuelvo a la rutina titilar
alternar: ‘*****(456)*****DelayMS 10 ‘delay de 10 ms
High LED1 ‘enciendo el led1
Low LED2 ‘apago el led2
DelayMS 250 ‘pausa de 1/4 de seg
Low LED1 ‘apago el LED1
High LED2 ‘enciendo el led2
DelayMS 250 ‘pausa de 1/4 de seg
Button pulsador,0,10,5,btn,1,titilar ****(678)****
GoTo alternar ‘vuelvo a la rutina alternar
End ‘fin del programa
Como verán está todo el código explicado y si estudiaron lo anterior lo único que les llamará la atención el la instrucción BUTTON que para resumir podemos decir que el programa al llegar a esta instrucción verifica si está presionado el pulsador, si se encuentra presionado salta a la etiqueta “alternar“****(123)**** que es la que se encuentra en primer lugar, sale de esa rutina y comienza alternar****(456)****, de lo contrario se queda realizando la tarea de la rutina “titilar” hasta detectar que se ha presionado el pulsador.-
Una vez dentro de la rutina “alternar” ****(456)**** verán que los led’s encienden alternadamente, hasta que nuevamente se presione el pulsador****(678)**** y nuevamente retorna a la rutina titilar ****(901)**** realizando esto infinitamente hasta que presionen nuevamente y se vuelve a repetir todo.-
Si tienen dudas por el funcionamiento de este programa pueden dejar sus comentarios y serán respondidos en la medida que sea posible.-