' Prender y apagar un led conectado al port-b
=====================================
inicio:
High PORTB.0
pause 1000
low PORTB.0
pause 1000
goto inicio
end
________________________
otra forma de hacer lo mismo:
TRISB.0=0
inicio:
PORTB.0 = 1
pause 1000
PORTB.0 = 0
pause 1000
goto inicio
end
________________________
Otra forma de hacer lo mismo:
led var PORTB.0
inicio:
high led
pause 1000
low led
pause 1000
goto inicio
end
' Semaforo
====================================
inicio:
High 0:LOW 1:low 2:low 3:low 4: high 5
pause 1000
High 0:high 1:low 2:low 3:low 4: high 5
pause 1000
low 0:LOW 1:high 2:high 3:low 4: low 5
pause 1000
low 0:LOW 1:high 2:high 3:high 4: low 5
pause 1000
goto inicio
end
________________________
otra forma de hacer lo mismo:
TRISB=%00000000
inicio:
PORTB = %00100001
pause 1000
PORTB = %00100011
pause 1000
PORTB = %00001100
pause 1000
PORTB = %00011100
pause 1000
goto inicio
end
' Juego de luces
====================================
Juego de luces que cuenta en forma binaria de 0 a 255:
I var byte
TRISB=0
inicio:
for i=0 to 255
PORTB=i
pause 50
next I
goto inicio
end
Juego de luces al estilo AUTO FANTASTICO:
I var byte
cont var word
TRISB=0
inicio:
cont=1
for i=1 to 7
PORTB=cont
pause 100
cont=cont*2
next I
for i=1 to 7
PORTB=cont
pause 100
cont=cont/2
next I
goto inicio
end
Otra manera de hacerlo:
I var byte
leds var PORTB
TRISB=0
Leds=1
inicio:
for i=1 to 7
leds=leds<<1
pause 100
next I
for i=1 to 7
leds=leds>>1
pause 100
next I
goto inicio
end
Otro juego de luces, estas se cierran desde los extremos al centro y luego se abren
desde el centro hacia los extremos
I var byte
leds var byte[5]
TRISB=0
leds[1]=%10000001
leds[2]=%01000010
leds[3]=%00100100
leds[4]=%00011000
Leds=1
inicio:
for i=1 to 4
PORTB=leds
pause 100
next I
for i=4 to 1 step-1
PORTB=leds
pause 100
next i
goto inicio
end
' Boton y Led
====================================
En este ejemplo se enciende el led cuando se presiona el boton:
TRISB.0=1
inicio:
if PORTB.0 = 0 then
high 1
else
low 1
endif
goto inicio
end
El mismo ejemplo pero esta ves con una resistencia de pull down:
TRISB.0=1
inicio:
if PORTB.0 = 1 then
high 1
else
low 1
endif
goto inicio
end
' Botones y Leds
====================================
Este tiene dos botones el uno sirve para subir y el otro para bajar:
i var byte
cont var word
cmcon=7
TRISB=0
TRISA=%00000011
cont=1
PORTB=cont
inicio:
if PORTA.0=0 then
cont=cont*2
PORTB=cont
if cont>=256 then
cont=1
PORTB=cont
endif
pause 200
else
cont=cont
endif
if PORTA.1=0 then
cont=cont/2
PORTB=cont
if cont<=1 then
cont=256
endif
pause 200
else
cont=cont
endif
goto inicio
end
COMENTARIO u OBSERVACION RELACIONADA O NO
Se puede usar LDATA CON LREAD pero en el pbp pro 2.46 esas instrucciones no
existen, creo que las que se usan son READCODE no se, por cierto que compilador
usas, en el que uso pasa algo extraño cuando usas la instruccion PWM en los
pines RC2 Y RC1 del micro 16f876a que son las respectivas salidas de los registro
CCP1 y CCP2
por ejemplo:
si uso este programa
SYMBOL LED1 = PORTC.2
SYMBOL LED2 = PORTC.1
SYMBOL LED3 = PORTB.7
repite
FOR B0= 0 TO 100 //ciclo 1
PWM LED1,B0,30
HIGH LED1
NEXT
FOR B0= 0 TO 100 //ciclo2
PWM LED2,B0,30
HIGH LED2
NEXT
goto repite
uno esperaria que despues de ejecutarse el ciclo1 el LED1 deberia de estar
encendido pero no es asi y lo mismo pasa al salir de CICLO2, sin embargo
si cambio cualquiera de los dos (LED1 o LED2) POR LED3 (PORTB.7) el
programa funciona bien ¿curioso no? y cuando uso el mismo programa pero
con la instruccion HPWM FUNCIONA BIEN con los pines RC2 Y RC1.
Cuando se quiera cambiar/conmutar el estado de una linea que esté configurada
como salida es más facil usar instrucción TOGGLE.
led intermitente en RB0
inicio
TOGGLE PORTB.0
PAUSE 1000
goto inicio
' Display
====================================
En este ejemplo se va a utilizar un display de 7 segmentos y aremos un contador
de 0-9 con la fuincion Look Up
vec var byte
num VAR BYTE
TRISB = 0
prog:
for vec=0 to 9
lookup vec,[191,134,219,207,230,237,253,135,255,239],num
portb=num
pause 500
next vec
goto prog
end
El mismo contador con un display pero ahora con un vector en el cual
almacenaremos los valores correspondientes a cada numero (Para los dos ejemplos
el Display es de Anodo Comun)
vec var byte [10]
pos var byte
vec[0]=191
vec[1]=134
vec[2]=219
vec[3]=207
vec[4]=230
vec[5]=237
vec[6]=253
vec[7]=135
vec[8]=255
vec[9]=239
TRISB=%00000000
loop:
for pos=0 to 9
PORTB=vec[pos]
pause 500
next
goto loop
end
_______________________________________
Un contador ascendente y descendente
vec var byte
num VAR BYTE
TRISB = 0
prog:
for vec=0 to 9
lookup vec,[191,134,219,207,230,237,253,135,255,239],num
portb=num
pause 500
next vec
for vec=9 to 0 step -1
lookup vec,[191,134,219,207,230,237,253,135,255,239],num
portb=num
pause 500
next vec
goto prog
end
' Contador con pulsantes
====================================
Este es un contador ascendente y descendente....posee dos pulsantes que sirven
para subir y bajar el conteo:
vec var byte
num VAR BYTE
TRISA = %00000011
TRISB = 0
cmcon=7
vec=0
PORTB=64
inicio:
if PORTA.0=0 then
vec=vec+1
lookup vec,[0,191,134,219,207,230,237,253,135,255,239],num
portb=num
if vec>=10 then
vec=0
endif
pause 200
endif
if PORTA.1=0 then
vec=vec-1
lookup vec,[0,191,134,219,207,230,237,253,135,255,239],num
portb=num
if vec<=1 then
vec=11
endif
pause 200
endif
goto inicio
end