Folytatjuk az Atmel AVR-ek megismerését, most a makróhasználatot tekintjük át. A korábbi cikkünkben a közvetlen regiszterírással állítottuk be a portregiszterek értékeit, most inkább makrókkal fogjuk ugyanazt a feladatot megoldani.
A példákat a hamarosan megnyíló webáruházunkban is elérhető AVR tesztpanel segítségével teszteltük (1. ábra).
1. ábra A felhasznált AVR tesztpanel az összekötő vezetékekkel
Az első példában definiáltuk a BTN0-t és a BTN1-et, noha nem használtuk fel, a nyomógomb (C port, 5, bit) figyelését nem ezzel valósítottuk meg.
A D port 0. bitje a LED0, amelyet makrókkal kapcsoljuk be (LED0On()), illetve ki (LED0Off()).
#include <avr/io.h>
#define BTN0 PORTC4
#define BTN1 PORTC5#define LED0 PORTD0
#define LED1 PORTD1
#define LED2 PORTD2
#define LED3 PORTD3#define LED0On() {PORTD |= 1 << LED0;}
#define LED0Off() {PORTD &= 0 << LED0;}
#define LED1On() {PORTD |= 1 << LED1;}
#define LED1Off() {PORTD &= 0 << LED1;}
int main(void)
{
DDRC = 0xDF; // 0b1101 1111
DDRD = 0xFF; // 0b1111 1111
PORTD = 0x00;while(1)
{
if (PINC & 0x20)
{
LED0On();
LED1Off();
}
else
{
LED0Off();
LED1On();
}
}
}
A nyomógomb (C port, 5. bit) megnyomásával a két LED állapotot vált.
Ebben a példában makrókkal szorzást, illetve négyzetreemelést valósítjuk meg. A nyomógomb állapotának a figyelését most a "BTN" definiálásával oldottuk meg.
#include <avr/io.h>
#define negyzet(n) ((n) * (n))
#define szoroz(n,m) (n * m)
#define LEDEK PORTD
#define BTN PINC & 0x20int main(void)
{
DDRC = 0xDF; // 0b1101 1111
DDRD = 0xFF; // 0b1111 1111
PORTD = 0x00;
while(1)
{
if (BTN)
{
LEDEK = negyzet(2);
}
else
{
LEDEK = szoroz(2,4);
}
}
}
Amikor megnyomjuk a BTN-t, akkor a LED-eken a bináris 8 jelenik meg, egyébként a 4-est láthatjuk.
Végül nézzük meg azokat a makrókat, amelyeknek a segítségével akár egy bitnek az állapotát tudjuk megváltoztatni, vagy logikai egybe / nullába írni.
#include <avr/io.h>
#include <avr/delay.h>#define bitEgy(cim,bit) (cim |= (1 << bit))
#define bitNulla(cim,bit) (cim &= ~(1 << bit))
#define bitValt(cim,bit) (cim ^= (1 << bit))int main(void)
{
bitEgy(DDRD,0);
bitEgy(DDRD,1);
bitNulla(DDRC,5);
while(1)
{
bitValt(PORTD,1);
_delay_ms(1000);
}
}
Október közepén elindítjuk az Atmel 8 bites mikrovezérlőkről szóló sorozatunkat. Ehhez használnunk kell természetesen egy fejlesztőkörnyezetet is. Több ilyen is létezik, például a WinAVR, vagy az Atmel Studio. Mi az Atmel Studio-t fogjuk használni, e. . . .
A PIC18F mikrovezérlők ma is népszerű a fejlesztők körében. Noha 8 bites architektúráról beszélünk, számos érdekes és hasznos alkalmazás megvalósítható vele. Elég csak az USB-re, vagy akár az Ethernetre gondolnunk. Ezért a Szerkesztőség egy sorozat k. . . .
A Microchip által javasolt fejlesztőkörnyezet az MPLABX, amely felváltja az MPlab-ot. Használata nehézkesnek tűnhet, ezért megnézzük ennek az IDE környezetnek a használatát, készítünk egy egyszerű projektet, amely egy PIC32 mikrovezérlőre épül.. . . .