WebElektronika

Portműveletek a PIC18F családban makrók segítségével

person access_time 2013.12.23.
Ebben a cikkben Microchip által gyártott tesztpanelt vesszük szemügyre, ennek segítségével ismerjük meg a PIC18F mikrovezérlők portkezelését.


Bekapcsoljuk először a 0. és a 2. LED-et (C0 és a C2 portbitek). Ezután a C1 és a C3-as portbiteket állítottuk logikai 1-re.

#include <p18f14k50.h>
#pragma config LVP = OFF
#pragma config WDTEN = OFF

main()
{
    int b, c = 5;
    TRISC = 0x00;

    while(1)
    {
        //LATC = 0B00000101;
        LATC = 0B00001010;
    }
}

Most az "A" port 3. bitjének az állapotát figyeljük. Ha logikai 1-ben van (nem nyomtuk meg a kapcsolót), akkor a "C" port páratlan, ha bekapcsoljuk a kapcsolót (logikai 0), akkor a páros kimeneteire kötött LED-ek világítanak.


#include <p18f14k50.h>
#pragma config LVP = OFF
#pragma config WDTEN = OFF
#pragma config MCLRE = OFF

main()
{
    int b, c = 5;
    TRISC = 0x00;

    while(1)
    {
        if(PORTAbits.RA3)
            LATC = 0B00001010;
        else
            LATC = 0B00000101;
    }
}

Nevezzük el az "A" port 3. bitjét "KAPCSOLO"-nak.


#include <p18f14k50.h>
#define KAPCSOLO        PORTAbits.RA3
#pragma config LVP = OFF
#pragma config WDTEN = OFF
#pragma config MCLRE = OFF

main()
{
    TRISC = 0B00000000;

    while(1)
    {
        if (KAPCSOLO)
            LATC = 0B00001010;
        else
            LATC = 0B00000101;
    }
?
}

Használjunk most makro-kat a feladat megoldásához. A makrókat és az egyéb definíciókat a panel.h file-ban adjuk meg.

Főprogram panel.h

#include <p18f14k50.h>
#include "panel2.h"

#pragma config WDTEN = OFF
#pragma config LVP = OFF
#pragma config MCLRE = OFF

main()
{
    TRISC = 0B00000000;
    LATC = 0x00;
    while(1)
    {
//        if(KAPCSOLO)
//            LED0 = 1;
//        else
//            LED0 = 0;

        if(KAPCSOLO)
            LED0_ON();
        else
            LED0_OFF();
    }
}

#define KAPCSOLO    PORTAbits.RA3

#define LED0    LATCbits.LATC0
#define LED1    LATCbits.LATC1
#define LED2    LATCbits.LATC2
#define LED3    LATCbits.LATC3

//makrók a LED0 vezérléséhez
#define LED0_ON()        LED0 = 1
#define LED0_OFF()       LED0 = 0