WebElektronika

Portműveletek a PIC32MX130F064B mikrovezérlőnél

person access_time 2015.02,19.
Megnézzük most azt, hogy hogyan készíthetünk makrókat, definíciókat a PIC mikrovezérlőkhöz. A korábban bemutatott, PIC32MX130F064B-t tartalmazó tesztpanelt használjuk fel, ahhoz készítünk egy header file-t.


Most azt nézzük meg, hogy hogyan tudunk készíteni header file-t, illetve makrókat. A beágyazott rendszerek világában a makróknak fontos szerep jut(hat), hiszen a használatuk során a stack műveletek elmaradnak, ezáltal gyorsabb működés érhető el, mintha függvényeket alkalmaznánk.

A korábban ismertetett tesztpanelhez (1. ábra) készítsünk el egy konfigurációs file-t. Ennek a segítségével a tesztpaneltől független kódokat tudunk készíteni, hiszen például nem LATBbits.LATB1 = 1; kell a LED bekapcsolásához, hanem elég a LED1 = 1; is. Sőt, ha írunk makrót erre, akkor elég meghívni ezt a makrót is : LED0ON().

kep1
1. ábra   A tesztpanel blokkvázlata
 

Ehhez definíciókat kell készítenünk.

 

1. példa

Most olyan definíciókat (és makrókat) írunk, amelyek abban a file-ban helyezkednek el, ahol a main() függvényünk is. Ez egyébként nem szerencsés. A példánkban a nyolc LED helyett csak kettőt használunk fel.

#include <p32xxxx.h>
#include <plib.h>

#define    LED0    LATBbits.LATB0
#define    LED1    LATBbits.LATB1
#define    BTN        PORTBbits.RB7

#define    LED0ON()    {LED0 = 1;}
#define    LED1ON()    {LED1 = 1;}
#define    LED0OFF()    {LED0 = 0;}
#define    LED1OFF()    {LED1 = 0;}

main()
{
    TRISB = 0x80;   // 0B10000000,  B port 7. bitje bemenet
    while(1)
    {
        if(BTN)
        {
            LED0ON();
            LED1OFF();
        }
        else
        {
            LED1ON();
            LED0OFF();
        }
    }
}

 

2. példa

Most azt a lehetőséget nézzük meg, ahol a definíciók és a makrók megadása külön file-ban történik, ezáltal ezek különböző forrásfile-okban is meghívhatók, felhasználhatók.

Ezeket a definíciókat a "panel.h" file-ban adjuk meg. Tehát, ha más tesztpanelt akarunk használni, akkor elég csak lecserélni a panel.h-t arra a header file-ra, amelyik a másik board-ot írja le.

 

2.1 "panel.h" file

//definíciók
#define    LED0    LATBbits.LATB0
#define    LED1    LATBbits.LATB1
#define    LED2    LATBbits.LATB2
#define    LED3    LATBbits.LATB3
#define    LED4    LATBbits.LATB4
#define    LED5    LATBbits.LATB5
#define    LED6    LATBbits.LATB6
#define    LED7    LATBbits.LATB7

#define    BTN        PORTBbits.RB7
#define    AN0        PORTAbits.RA0
#define    AN1        PORTAbits.RA1
#define    AN4        PORTAbits.RA4

// makrók
#define    LED0ON()    {LED0 = 1;}
#define    LED1ON()    {LED1 = 1;}
#define    LED2ON()    {LED2 = 1;}
#define    LED3ON()    {LED3 = 1;}
#define    LED4ON()    {LED4 = 1;}
#define    LED5ON()    {LED5 = 1;}
#define    LED6ON()    {LED6 = 1;}
#define    LED7ON()    {LED7 = 1;}

#define    LED0OFF()    {LED0 = 0;}
#define    LED1OFF()    {LED1 = 0;}
#define    LED2OFF()    {LED2 = 0;}
#define    LED3OFF()    {LED3 = 0;}
#define    LED4OFF()    {LED4 = 0;}
#define    LED5OFF()    {LED5 = 0;}
#define    LED6OFF()    {LED6 = 0;}
#define    LED7OFF()    {LED7 = 0;}

 

2.2 A "panel.h" használata

Az előbb ismertetett file-t nekünk be kell "tenni" abba a forrásfile-ba, ahol a definíciókat/makrókat szeretnénk meghívni. 

#include <p32xxxx.h>
#include <plib.h>
#include "panel.h"

main()
{
    TRISB = 0x80;
    while(1)
    {
        if(BTN)
        {
            LED0ON();
            LED1OFF();
        }
        else
        {
            LED1ON();
            LED0OFF();
        }
    }    
}