Programar con Proton Compiler (4º parte)
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
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.-
Powered by MightyAdsense
8 Comentarios...
Dejar un comentario
SEÑOR AUTOR, TENGO UNA PREGUNTA. ¿QUÉ PROCEDIMIENTO HAY QUE SEGUIR PARA INTRODUCIR ESTAS INSTRUCCIONES EN EL MICROCONTROLADOR? ¿CON QUÉ SE QUEMA?
Por ANDERSON el 05/02/2009 6:16 pm
Hola Anderson, para quemar el pic necesitas tener un programador, un ejemplo de ello es el GTP plus que trabaja por puerto USB.- ya pondré algún ejemplo cuando pueda conseguir un poquitin de tiempo, saludos y gracias por tu consulta
Por admin el 08/02/2009 9:59 pm
puedo utizar cualquier quemador usb?
Por Enrique el 22/07/2009 10:47 pm
Hola Enrique, si puedes utilizar el programador que quieras siempre y cuando el software que uses para quemar los pics lo tenga en su lista de permitidos, por ejemplo yo uso el Winpic800, que soporta muchisimos programadores de todo tipo.-
Por admin el 22/07/2009 10:52 pm
MIRA TENGO UN PROGRAMITA ES UN CIONTADOR QUE HISE EN PROTON
LO QUE PASA ES QUE NO SE COMO UTILIZAR LO DE LA MEMORIA EEPROMN OSEA
QUE ME QUEDE GUARDADO TANTO LA PALABRA RO_YALL COMO EL ULTIMO DIGITO CONTADO AHI DEJO MI CODIGO PARA VER SI ALGUIEN PUEDE AYUDARME EL PIC COM QUE TRABAJO ES EL 16F628 Y LO QUE QUIERO ES QUE LOS DATOS QUE MUESTRO POR PANTALLA SIGA MOSTRANDOMELOS AUNQUE SE HAYA IDO LA ENERGIA OSEA LA ALIMENTACION AL CIRCUITO OSEA QUE ME MUESTRE EL ULTIMO DATO CONTADO JUNTO CON LA PALABRA ESCRITA AHI QUE ES ROYALL SI ALGUIEN PUEDE AYUDARME ESTA ECHO EN PPROTON
CMCON=7
TRISB=0
DefineLCD_DREGPORTB
DefineLCD_DBIT4
DefineLCD_RSREGPORTB
DefineLCD_RSBIT3
DefineLCD_EREGPORTB
DefineLCD_EBIT2
Dim BOTON As PORTA.4
Dim sonido As PORTA.3
Dim DATOS As DWord
DATOS=0
Print $fe,1,”RO_YALL=”,Dec DATOS
GoTo PULSAR
PULSAR:
If BOTON=1 Then ENCEN
GoTo PULSAR
ENCEN:
Inc DATOS
High sonido
DelayMS 1000
Low sonido
Print $fe,1,”RO_YALL=”,Dec DATOS
GoTo PULSAR
End
Por SERGIO el 20/08/2009 6:32 pm
hola, sabes que programe un 16f628a con este programa y pasa que cuando apreto el pulsador, salta a la rutina “alternar” pero luego salta a “titilar” solo y se queda en ese loop, porque sera? gracias
Por Martin el 30/08/2009 1:07 am
Hola Sergio, algunos dias sin internet me impidieron responderte antes, para grabar en la eprom debes usar la instrucción ewrite y para leerlos eread, mirate el la ayuda que viene en el programa y podrás implementarlo facilmente ya que vienen algunos ejemplos-
Por admin el 31/08/2009 11:02 am
Hola Martin, si es que copiaste el código a mano fijate que no hayas invertido el orden de las lineas de codigo, y si hiciste un copy, paste mucho cuidado por que pueden moverse a veces las lineas, de todas formas postea el codigo tal cual lo tienes y lo miramos.- revisa muy bien las etiquetas de salto que esten bien posicionadas, saludos.-
Por admin el 31/08/2009 11:04 am
Dejar un comentario
Los saltos de linea son automaticos, las direcciones de e-mail nunca seran mostradas, HTML esta permitido:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="">