ejemploscodigopic16f628a
TRANSCRIPT
-
8/8/2019 EjemplosCodigoPIC16F628A
1/10
' Prender y apagar un led conectado al port-b=====================================
inicio:High PORTB.0pause 1000
low PORTB.0pause 1000goto inicio
end
________________________otra forma de hacer lo mismo:
TRISB.0=0
inicio:PORTB.0 = 1
pause 1000PORTB.0 = 0pause 1000goto inicio
end________________________Otra forma de hacer lo mismo:
led var PORTB.0
inicio:high led
pause 1000low ledpause 1000goto inicio
end
' Semaforo====================================
inicio:High 0:LOW 1:low 2:low 3:low 4: high 5
pause 1000High 0:high 1:low 2:low 3:low 4: high 5pause 1000low 0:LOW 1:high 2:high 3:low 4: low 5pause 1000low 0:LOW 1:high 2:high 3:high 4: low 5pause 1000goto inicio
end
________________________otra forma de hacer lo mismo:
-
8/8/2019 EjemplosCodigoPIC16F628A
2/10
TRISB=%00000000
inicio:PORTB = %00100001pause 1000PORTB = %00100011
pause 1000PORTB = %00001100pause 1000PORTB = %00011100pause 1000goto 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=ipause 50
next Igoto inicio
end
Juego de luces al estilo AUTO FANTASTICO:
-
8/8/2019 EjemplosCodigoPIC16F628A
3/10
I var bytecont var word
TRISB=0
inicio:cont=1for i=1 to 7
PORTB=contpause 100cont=cont*2
next Ifor i=1 to 7
PORTB=contpause 100cont=cont/2
next I
goto inicioend
Otra manera de hacerlo:
I var byteleds var PORTB
TRISB=0
Leds=1inicio:
for i=1 to 7leds=leds1pause 100
next Igoto inicio
end
Otro juego de luces, estas se cierran desde los extremos al centro y luego se abrendesde el centro hacia los extremos
-
8/8/2019 EjemplosCodigoPIC16F628A
4/10
I var byteleds var byte[5]
TRISB=0
leds[1]=%10000001leds[2]=%01000010leds[3]=%00100100leds[4]=%00011000
Leds=1inicio:
for i=1 to 4PORTB=ledspause 100
next Ifor i=4 to 1 step-1
PORTB=ledspause 100
next igoto inicio
end
' Boton y Led====================================
En este ejemplo se enciende el led cuando se presiona el boton:
-
8/8/2019 EjemplosCodigoPIC16F628A
5/10
TRISB.0=1
inicio:if PORTB.0 = 0 then
high 1else
low 1endifgoto inicio
end
El mismo ejemplo pero esta ves con una resistencia de pull down:
TRISB.0=1
inicio:if PORTB.0 = 1 then
high 1else
low 1
endifgoto inicioend
' Botones y Leds====================================
-
8/8/2019 EjemplosCodigoPIC16F628A
6/10
Este tiene dos botones el uno sirve para subir y el otro para bajar:
i var bytecont var word
cmcon=7
TRISB=0
TRISA=%00000011cont=1PORTB=continicio:
if PORTA.0=0 thencont=cont*2PORTB=contif cont>=256 then
cont=1PORTB=cont
endifpause 200
elsecont=contendifif PORTA.1=0 then
cont=cont/2PORTB=contif cont
-
8/8/2019 EjemplosCodigoPIC16F628A
7/10
COMENTARIO u OBSERVACION RELACIONADA O NO
Se puede usar LDATA CON LREAD pero en el pbp pro 2.46 esas instrucciones noexisten, creo que las que se usan son READCODE no se, por cierto que compiladorusas, en el que uso pasa algo extrao cuando usas la instruccion PWM en lospines RC2 Y RC1del micro 16f876a que son las respectivas salidas de los registroCCP1 y CCP2
por ejemplo:si uso este programa
SYMBOL LED1 = PORTC.2SYMBOL LED2 = PORTC.1SYMBOL LED3 = PORTB.7
repite
FOR B0= 0 TO 100 //ciclo 1PWM LED1,B0,30HIGH LED1NEXT
FOR B0= 0 TO 100 //ciclo2PWM LED2,B0,30HIGH LED2NEXTgoto 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 embargosi cambio cualquiera de los dos (LED1 o LED2) POR LED3 (PORTB.7) elprograma funciona bien curioso no? y cuando uso el mismo programa perocon la instruccion HPWM FUNCIONA BIEN con los pines RC2 Y RC1.
Cuando se quiera cambiar/conmutar el estado de una linea que est configuradacomo salida es ms facil usar instruccin TOGGLE.
led intermitente en RB0
inicioTOGGLE PORTB.0PAUSE 1000goto inicio
' Display====================================
En este ejemplo se va a utilizar un display de 7 segmentos y aremos un contadorde 0-9 con la fuincion Look Up
-
8/8/2019 EjemplosCodigoPIC16F628A
8/10
vec var bytenum VAR BYTETRISB = 0
prog:for vec=0 to 9
lookup vec,[191,134,219,207,230,237,253,135,255,239],numportb=numpause 500next vec
goto progend
El mismo contador con un display pero ahora con un vector en el cualalmacenaremos los valores correspondientes a cada numero (Para los dos ejemplosel Display es de Anodo Comun)
vec var byte [10]
pos var bytevec[0]=191vec[1]=134vec[2]=219vec[3]=207vec[4]=230vec[5]=237vec[6]=253vec[7]=135vec[8]=255vec[9]=239
TRISB=%00000000
loop:
-
8/8/2019 EjemplosCodigoPIC16F628A
9/10
for pos=0 to 9PORTB=vec[pos]pause 500
nextgoto loop
end
_______________________________________Un contador ascendente y descendente
vec var bytenum VAR BYTETRISB = 0
prog:for vec=0 to 9
lookup vec,[191,134,219,207,230,237,253,135,255,239],num
portb=numpause 500next vecfor vec=9 to 0 step -1
lookup vec,[191,134,219,207,230,237,253,135,255,239],numportb=numpause 500
next vecgoto progend
' Contador con pulsantes====================================
Este es un contador ascendente y descendente....posee dos pulsantes que sirvenpara subir y bajar el conteo:
vec var byte
num VAR BYTE
TRISA = %00000011
-
8/8/2019 EjemplosCodigoPIC16F628A
10/10
TRISB = 0
cmcon=7vec=0PORTB=64
inicio:if PORTA.0=0 then
vec=vec+1lookup vec,[0,191,134,219,207,230,237,253,135,255,239],numportb=numif vec>=10 then
vec=0endifpause 200
endifif PORTA.1=0 then
vec=vec-1
lookup vec,[0,191,134,219,207,230,237,253,135,255,239],numportb=numif vec