用惯了51,51的I/O口控制比较容易,不需要进行大量的位位操作,而AVR因其I/O口与51相比具有强大的拉,推电流的能力,其端口操作亦较烦琐。故在程序中采用一定数量的宏定义,就会使代码编写量大大降低,下面我以一个跑马灯程序为例来介绍一下这样做的优点。
//环境:AVRSTUDIO+Winavr
//硬件:PB0、PB1、 PB2、 PB3连LED
#define F_CPU 1000000
#include <avr/io.h>
#include <avr/delay.h>
#define SET0 PORTB|=_BV(0)
#define CLR0 PORTB&=~_BV(0)
#define SET1 PORTB|=_BV(1)
#define CLR1 PORTB&=~_BV(1)
#define SET2 PORTB|=_BV(2)
#define CLR2 PORTB&=~_BV(2)
#define SET3 PORTB|=_BV(3)
#define CLR3 PORTB&=~_BV(3)
int main()
{
while(1)
{
CLR3;
SET0;
_delay_ms(500);
CLR0;
SET1;
_delay_ms(500);
CLR1;
SET2;
_delay_ms(500);
CLR2;
SET3;
_delay_ms(500);
}
}