Este documento presenta diferentes comandos de bucle y condicionales en Basic como INC, DEC, FOR, WHILE, REPEAT-UNTIL y SELECT-CASE. Explica su sintaxis y provee ejemplos de código para parpadear un LED usando estos comandos y dependiendo del valor de una variable, cambiar el tiempo de retardo. También propone ejercicios prácticos para implementar estos conceptos.
2. Los temas a tratar en esta
clase son:
Dec
Inc
Comandos repetitivos
-Ciclo for-next ( ya lo conocemos)
-Ciclo while-wend
-Ciclo repeat – ultil
Select –case
3. Comando inc
Este comando sirve para incrementar una variable
inc dato es igual a dato=dato + 1
Son de ayuda en comandos cíclicos como el repeat
,el while
Ejemplo:
Dim dato as byte
Symbol led=porta.0
Led=1
Delayms 500
Inicio:
While dato<100
toggle led
Delayms 500
Inc dato
wend
4. Comando dec
Este comando sirve para el decremento una variable
dec dato es igual a dato=dato - 1
Son de ayuda en comandos cíclicos como el repeat ,el
while
Ejemplo:
Dim dato as byte
Symbol led=porta.0
Dato=50
Led=1
Delayms 500
Inicio:
While dato>0
toggle led
Delayms 500
dec dato
wend
5. Ciclo for
Este comando ya lo hemos usado con
anterioridad su sintaxis es
Variable = inicio TO final [ STEP { pasos
pueden ser negativos } ]
{ cuerpo del programa }
6. Comando while
Mientras que no llegue a ser verdadera la
operación lógica se repite lo que contiene
en el cuerpo del comando
se pueden usar comparadores lógicos
and, ,or , not (o construir el comparador
deseado)
Sintaxis:
WHILE Condición
Instrucciones
Instrucciones
WEND delimita el ciclo
7. Ejemplo:
Hacer que un led parpadee con 500ms
de retardo. Mientras se mantiene en uno
lógico el porta.0
8. código
Device 18F2550
Declare PROTON_START_ADDRESS = $1000
Xtal 20
All_Digital= true
PORTC=%00000100
PORTB=0
Symbol led=PORTC.1
Symbol bot=PORTC.2
inicio:
Low led
While bot=0
Toggle led
DelayMS 500
Wend
GoTo inicio.
9. Ciclo repeat-ultil
Como su nombre lo dice en repirte
-hasta
Esto quiere decir que mientras no se cumpla
la prueba lógica va estar en un ciclo infinito
Su diferencia es que siempre se repite una
ves ya que la prueba lógica se encuentra
al final del ciclo
Al igual que el while se pueden usar
comparadores lógicos and, xor ,or , not
10. Sintaxis de repeat ultil
REPEAT Condición
Instrucciones
Instrucciones
UNTIL Condición fijarse hasta lo
ultimo esta el condicional
11. Select-case
Esta función puede ser un sustituto para
el if-endif anidado.
Se empieza con una variable y depende
su valor ejecuta una acción
Desventaja en el micro 16f628a te gasta
mucho la memoria(en el bootloader no
es relevante gracias a su gran cantidad
de memoria)
12. sintaxis
SELECT Expression
CASE Condition(s)
Instructions
{
CASE Condition(s)
Instructions
CASE ELSE
Statement(s)
}
ENDSELECT
13. Ejercicio select case
Hacer un programa para que dependa del
valor de una variable(0-9) el tiempo de
retardo en el parpadeo de un led( de 100
en 100).
0=100
1=200
9=1000
en este programa se manejan 2 botones
uno para incrementar el valor de la variable
y otro para reiniciarla(puede utilizar para
esto el mclr externo de micro)
14. Device =18f2550 t=300
Declare PROTON_START_ADDRESS = $1000 Case 3
Xtal 20 t=400
All_Digital= true Case 4
PORTC=%00000100 t=500
PORTB=0 Case 5
Symbol led=PORTC.1 t=600
Symbol alarma=PORTC.0 Case 6
Symbol bot=PORTC.2 t=700
Dim t As Word Case 7
Dim n As Byte t=800
Dim bando As Bit Case 8
n=0 t=900
alarma=0 Case 9
t=100 t=1000
bando=0 EndSelect
inicio: High led
Repeat DelayMS t
While n<=9 Low led
If bot=0 Then DelayMS t
Inc n Wend
GoSub antirebote High alarma
EndIf
Select n Until bando=1
Case 0
t=100 antirebote:
Case 1 While bot=0
t=200 High alarma
Case 2 Wend
Low alarma
Return
15. problemas
Con inc hacer un contador binario (que se
muestre en el portb) de 0-69 con un ciclo while
Hacer el ejercicio del led, que incremente y
disminuya su velocidad con ayuda de botones
y cuando llegue a mínima prender la alarma y
lo mismo cuando llegue a máxima. pueden
usar cualquier otro comando para facilitar el
programa.
recomendación: limitar con un if –endif el
decremento de la variable por que cuando le
restas a 0 una unidad el IDE lo convierte en
255.