ejemploscodigopic16f628a

Upload: aligator99

Post on 09-Apr-2018

218 views

Category:

Documents


0 download

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