Sie sind auf Seite 1von 14

Instrucción SELECT CASE ENDSELECT

Sintaxis: Puede ser cualquier variable válida, constante,


expresión o comando en línea que será
Select Expresión
comparada con la condición
Case Condición
Instrucciones
Case Condición Es una instrucción que puede ser
Instrucciones evaluada como verdadera o falsa
Case else
Instrucciones
Endselect
Pueden ser cualquier comando
válido en el PROTON BASIC
Ejemplo Instrucción SELECT CASE ENDSELECT

Diseñar un juego de luces controlado por tres interruptores conectaos a los


tres pines menos significativos del Puerto A

R9 R11R10
10k 10k 10k

U1
16 17
RA7/OSC1/CLKIN RA0/AN0
15 18
RA6/OSC2/CLKOUT RA1/AN1
1
RA2/AN2/VREF
4 2
RA5/MCLR RA3/AN3/CMP1
3
RA4/T0CKI/CMP2
R1
6 R2
RB0/INT
7 R3
220R
RB1/RX/DT
8 R4
220R
RB2/TX/CK
9 R5
220R
RB3/CCP1
10 R6
220R
RB4
11 R7
220R
RB5
12 R8
220R
RB6/T1OSO/T1CKI
13 220R
RB7/T1OSI
220R
PIC16F628A
D1 D2 D3 D4 D5 D6 D7 D8
LED-YELLOW
LED-YELLOW
LED-YELLOW
LED-YELLOW
LED-YELLOW
LED-YELLOW
LED-YELLOW
LED-YELLOW
Ejemplo Instrucción SELECT CASE ENDSELECT

Device=16F628A
Declare Xtal 4

Dim VARIABLES As Byte ;Define la variable VARIABLES de un Byte de longitud


Dim LEDS As PORTB ;Asigna el nombre de LEDs a las salidas del puerto B
TRISB=0 ;Configura el puerto B como salidas
TRISA=%00000111 ;Configura los tres bits menos significativos del puerto A como entradas
BUCLE:
VARIABLES=PORTA & 7 ;En la variable VARIABLES se filtran los tres bits menos significativos del puerto A
Select VARIABLES ;Asigna la variable VARIABLES como dato de selección
Case 7 ;En caso que el contenido de la variable VARIABLES sea igual a 7
LEDS=129 ;enciende los leds 0 y 7 del puerto B
GoTo BUCLE ;Retorna a verificar algún cambio en los bits de entrada del puerto A
Case 2 ;En caso que el contenido de la variable VARIABLES sea igual a 7
PORTB=60 ;enciende los leds del2 al 5 del puerto B
GoTo BUCLE ;Retorna a verificar algún cambio en los bits de entrada del puerto A
Case 3 ;En caso que el contenido de la variable VARIABLES sea igual a 3
PORTB=63 ;enciende los 5 bits menos significativos del puerto B
GoTo BUCLE ;Retorna a verificar algún cambio en los bits de entrada del puerto A
Case 1 ;En caso que el contenido de la variable VARIABLES sea igual a 1
PORTB=%10101010 ;enciende los bits "10101010" del puerto B
GoTo BUCLE ;Retorna a verificar algún cambio en los bits de entrada del puerto A
Ejemplo Instrucción SELECT CASE ENDSELECT

Case 0 ;En caso que el contenido de la variable VARIABLES sea igual a 0


PORTB=%11110000 ;enciende los 4 bits más significativos del puerto B
GoTo BUCLE ;Retorna a verificar algún cambio en los bits de entrada del puerto A
Case 4 ;En caso que el contenido de la variable VARIABLES sea igual a 4
PORTB=%00001111 ;enciende los 4 bits menos significativos del puerto B
GoTo BUCLE ;Retorna a verificar algún cambio en los bits de entrada del puerto A
Case 5 ;En caso que el contenido de la variable VARIABLES sea igual a 5
PORTB=%00110011 ;enciende los bits "00110011" del puerto B
GoTo BUCLE ;Retorna a verificar algún cambio en los bits de entrada del puerto A
Case Else ;En caso que el contenido de la variable VARIABLES no sea igual a ninguna de las
anteriores
PORTB=%11001100 ;enciende los bits "11001100" del puerto B
GoTo BUCLE ;Retorna a verificar algún cambio en los bits de entrada del puerto A
EndSelect ;Concluye la rutina de selección
End
Ejemplo Instrucción SELECT CASE ENDSELECT
Diseñar un indicador de alarmas en una pantalla LCD

LCD1
LM016L

VDD
VSS

VEE

RW
RS

D0
D1
D2
D3
D4
D5
D6
D7
E
R1R2

1
2
3

4
5
6

7
8
9
10
11
12
13
14
10k10k

ALARMA 1
U1
16 17
RA7/OSC1/CLKIN RA0/AN0
15 18
RA6/OSC2/CLKOUT RA1/AN1
1
4
RA2/AN2/VREF
2 ALARMA 2
RA5/MCLR RA3/AN3/CMP1
3
RA4/T0CKI/CMP2
6
RB0/INT
7
RB1/RX/DT
8
RB2/TX/CK
9
RB3/CCP1
10
RB4
11
RB5
12
RB6/T1OSO/T1CKI
13
RB7/T1OSI
PIC16F628A
Ejemplo Instrucción SELECT CASE ENDSELECT

Device=16F628A
Declare Xtal 4
Dim Sensores As Byte ;Declara la variable sensores
TRISA=%00000011 ;configura los dos bits menos significativos del puerto A como entradas
bucle:
Sensores=PORTA & 3 ;filtra los dos bits menos significativos del puerto A
Select Sensores ;Asinga a la variable sensores como dato de selección
Case > 2 ;En caso de que ambs sensores se activen
GoTo general ;Salta a general
Case 1 ;En caso de activarse el sensor 1
GoTo alarma1 ;Salta a alarma1
Case 2 ;En caso de activarse el sensor 2
Print $FE,1 ;limpia la pantalla
Print $FE,$80,"Alarma sector 2" ;Muestra alarma en el sector 2
DelayMS 100
GoTo bucle ;retorna al programa
Ejemplo Instrucción SELECT CASE ENDSELECT

Case Else
Print $FE,1 ;limpia la pantalla
Print $FE,$80,"Sin alarmas" ;Muestra sin alarmas
DelayMS 100
GoTo bucle ;retorna al programa
general:
Print $FE,1 ;limpia la pantalla
Print $FE,$80,"Alarma General" ;Muestra alarma General
Print $FE,$C0,"Sálbese si puede"
DelayMS 100
GoTo bucle
alarma1:
Print $FE,1 'limpia la pantalla
Print $FE,$80,"Alarma sector 1" ;Muestra alarma en el sector 1
DelayMS 100
GoTo bucle
EndSelect
End
Manejo de teclado en PROTON BASIC
Una forma de optimizar el uso de las patillas del microcontrolador es configurando
la entrada de datos en forma matricial, como el caso típico de los teclados.
Por ejemplo, diseñaremos y programaremos el siguiente teclado decimal:
Manejo de teclado en PROTON BASIC
Diseño y programación de teclado hexadecimal:

U2 R11
7 13 R10
A QA
1 12 R9
B QB 330R
2 11 R8
C QC 330R
6 10 R7
D QD 330R
4 9 R6
BI/RBO QE 330R
5 15 R5
RBI QF 330R
3 14
U1 LT QG 330R
330R
16 17 7447
RA7/OSC1/CLKIN RA0/AN0
15 18
RA6/OSC2/CLKOUT RA1/AN1
1
RA2/AN2/VREF
4 2
RA5/MCLR RA3/AN3/CMP1
RA4/T0CKI/CMP2
3 1 2 3 A
6
R12
RB0/INT
7
RB1/RX/DT
RB2/TX/CK
8
330R 4 5 6 B
9 R13
RB3/CCP1
10
RB4
11
RB5
RB6/T1OSO/T1CKI
12
330R 7 8 9 C
13 R14
RB7/T1OSI
PIC16F628A
D 0 E F
R15
330R
330R

R4
R1 R2 R3 10k
10k 10k 10k
Manejo de teclado en PROTON BASIC
Programa de teclado hexadecimal:
CMCON=7
DECLARE XTAL 4
TRISA=0
DIM A AS PORTB.0
DIM B AS PORTB.1
DIM C AS PORTB.2
DIM D AS PORTB.3
DIM UNO AS PORTB.4
DIM DOS AS PORTB.5
DIM TRES AS PORTB.6
DIM CUATRO AS PORTB.7
BUCLE:
LOW A
IF UNO =0 THEN PORTA=1
IF DOS =0 THEN PORTA=2
IF TRES=0 THEN PORTA=3
IF CUATRO=0 THEN PORTA=10
HIGH A
LOW B
IF UNO =0 THEN PORTA=4
IF DOS =0 THEN PORTA=5
IF TRES=0 THEN PORTA=6
IF CUATRO=0 THEN PORTA=11
Manejo de teclado en PROTON BASIC
HIGH B
LOW C
IF UNO =0 THEN PORTA=7
IF DOS =0 THEN PORTA=8
IF TRES=0 THEN PORTA=9
IF CUATRO=0 THEN PORTA=12
HIGH C
LOW D
IF UNO =0 THEN PORTA=13
IF DOS =0 THEN PORTA=0
IF TRES=0 THEN PORTA=14
IF CUATRO=0 THEN PORTA=15
HIGH D
DELAYMS 10
GOTO BUCLE
END
Teclado y Display LCD en PROTON BASIC
Uso de la instrucción INKEY en PROTON BASIC
Sintaxis: Variable = INKEY
Ejemplo:
DIM Variable AS BYTE
Variable = INKEY Rastrea el teclado
DELAYMS 50 Evita los rebotes mecánicos retardando 50 ms
PRINT DEC Variable,” “ Muestra el resultado en el display LCD
La instrucción INKEY dará como resultado de 0 al 16.
Si no se presiona ninguna tecla el resultado es 16.
Para asignarle valores a cada tecla se utiliza la instrucción LOOKUP
Ejemplo:
Variable = INKEY
Tecla = LOOKUP Variable, ["D","0","E","F","7","8","9","C","4","5","6","B","1","2","3","A"]

Por defecto, la instrucción INKEY utiliza el puertoB que ya está equipado con
resistencias de anclaje internas, pero se puede utilizar cualquier otro puerto con la
Instrucción: DECLARE KEYPAD_PORT PORTx
Teclado y Display LCD en PROTON BASIC

U1
13 33 LCD1
OSC1/CLKIN RB0/INT LM016L
14 34
OSC2/CLKOUT RB1
35
RB2
2 36
RA0/AN0 RB3/PGM
3 37
RA1/AN1 RB4
4 38
RA2/AN2/VREF-/CVREF RB5
5 39
RA3/AN3/VREF+ RB6/PGC
6 40
RA4/T0CKI/C1OUT RB7/PGD
7
RA5/AN4/SS/C2OUT

VDD
VSS

VEE

RW
15

RS

D0
D1
D2
D3
D4
D5
D6
D7
RC0/T1OSO/T1CKI

E
8 16
RE0/AN5/RD RC1/T1OSI/CCP2
9 17
RE1/AN6/WR RC2/CCP1

1
2
3

4
5
6

7
8
9
10
11
12
13
14
10 18
RE2/AN7/CS RC3/SCK/SCL
23
RC4/SDI/SDA
1 24
MCLR/Vpp/THV RC5/SDO
25
RC6/TX/CK
26
RC7/RX/DT
19
RD0/PSP0
20
RD1/PSP1
21
RD2/PSP2
22
RD3/PSP3
27
RD4/PSP4
28
RD5/PSP5
29
RD6/PSP6
30
RD7/PSP7
PIC16F877A

1 2 3 A
R12
330R 4 5 6 B
R13
330R 7 8 9 C
R14
D 0 E F
R15
330R
330R

R4
R1 R2 R3 10k
10k 10k 10k
Teclado y Display LCD en PROTON BASIC
Device=16F877A
CMCON=7
Declare Xtal 4
TRISA=0
Dim VAR1 As Byte
Dim VAR2 As Byte
Declare Keypad_Port PORTC
Declare LCD_DTPin PORTB.4
Declare LCD_RSPin PORTB.3
Declare LCD_ENPin PORTB.2
DelayMS 200

BUCLE:
VAR1=InKey
If VAR1=16 Then BUCLE
VAR2=LookUpL VAR1, ["D","0","E","F","7","8","9","C","4","5","6","B","1","2","3","A"]
Print $fe,1
Print VAR2
DelayMS 100
GoTo BUCLE
End

Das könnte Ihnen auch gefallen