0% encontró este documento útil (0 votos)
136 vistas10 páginas

Ejemplos Codigo PIC16 F628 A

Este documento contiene varios ejemplos de código para controlar LEDs, semáforos y displays de 7 segmentos utilizando PIC. Incluye programas para encender y apagar LEDs, simular un semáforo, realizar juegos de luces parpadeantes y contadores, y controlar displays con pulsantes ascendente/descendente. Los ejemplos muestran diferentes formas de configurar y controlar puertos y realizar temporizaciones para lograr diferentes efectos visuales.

Cargado por

aligator99
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOC, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
136 vistas10 páginas

Ejemplos Codigo PIC16 F628 A

Este documento contiene varios ejemplos de código para controlar LEDs, semáforos y displays de 7 segmentos utilizando PIC. Incluye programas para encender y apagar LEDs, simular un semáforo, realizar juegos de luces parpadeantes y contadores, y controlar displays con pulsantes ascendente/descendente. Los ejemplos muestran diferentes formas de configurar y controlar puertos y realizar temporizaciones para lograr diferentes efectos visuales.

Cargado por

aligator99
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOC, PDF, TXT o lee en línea desde Scribd

' 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

También podría gustarte