Atmel C引脚操作宏
我已经用Atmel C编程了一段时间,我已经习惯了所有的C位操作,所以现在我想隐藏它。我想隐藏位操作,不仅是为了让代码更具可读性,还为了在硬件发生变化或制造新硬件时更易于维护和修改 所以我想问你什么是Atmel C用于基本引脚操作的最佳宏 我正在寻找的功能包括:Atmel C引脚操作宏,c,macros,atmel,C,Macros,Atmel,我已经用Atmel C编程了一段时间,我已经习惯了所有的C位操作,所以现在我想隐藏它。我想隐藏位操作,不仅是为了让代码更具可读性,还为了在硬件发生变化或制造新硬件时更易于维护和修改 所以我想问你什么是Atmel C用于基本引脚操作的最佳宏 我正在寻找的功能包括: 将引脚设置为输入或输出 将输出引脚设置为高或低 读取输入引脚的值 因此,我找到了一些我可以使用的宏,但没有一个真正符合我的要求 链接: (每个引脚仍必须保留多个定义) (不编译,AVR Studio 6.2) (最佳答案,在“/*LCD
#define LED1 PA1
#define BUTTON1 PB0
set_output(LED1);
output_high(LED1);
delay_ms(100);
output_low(LED1);
set_input(BUTTON1);
uint8_t tmpVal = get_input(BUTTON1);
if( tmpVal == 1 )
{
// assuming button IS pressed here
}
else
{
// assuming button IS NOT pressed here
}
有没有关于最干净的方法的想法
我可以为每个pin多定义几个定义,但我觉得不需要这样做。PA1和PB0不应该告诉我们所有的事情吗?或者它们是被定义为一个值吗
编辑:在Windows上使用Atmel Studio 6.2
谢谢,
Rob R.别担心这会编译
//用于ATMEL GCC-AVR的易于管脚处理的宏
//这些宏被其他宏间接使用,主要用于字符串压缩
#定义_集合(类型、名称、位)类型##名称|=_BV(位)
#定义_CLEAR(类型、名称、位)类型##名称&=~_BV(位)
#定义_切换(类型、名称、位)类型##名称^=_BV(位)
#定义_GET(类型、名称、位)((类型##名称>>位)&1)
#定义(类型,名称,位,值)类型##名称=(类型###名称&(~u BV(位)))|((1&(无符号字符)值)有人能给出一个在代码中使用"PUT宏的例子吗?
// MACROS FOR EASY PIN HANDLING FOR ATMEL GCC-AVR
//these macros are used indirectly by other macros , mainly for string concatination
#define _SET(type,name,bit) type ## name |= _BV(bit)
#define _CLEAR(type,name,bit) type ## name &= ~ _BV(bit)
#define _TOGGLE(type,name,bit) type ## name ^= _BV(bit)
#define _GET(type,name,bit) ((type ## name >> bit) & 1)
#define _PUT(type,name,bit,value) type ## name = ( type ## name & ( ~ _BV(bit)) ) | ( ( 1 & (unsigned char)value ) << bit )
//these macros are used by end user
#define OUTPUT(pin) _SET(DDR,pin)
#define INPUT(pin) _CLEAR(DDR,pin)
#define HIGH(pin) _SET(PORT,pin)
#define LOW(pin) _CLEAR(PORT,pin)
#define TOGGLE(pin) _TOGGLE(PORT,pin)
#define READ(pin) _GET(PIN,pin)
/*
BASIC STAMPS STYLE COMMANDS FOR ATMEL GCC-AVR
Usage Example:
———————————————–
#define pinLed B,5 //define pins like this
OUTPUT(pinLed); //typo fixed
//OUTPUT(pinLED); //compiles as DDRB |= (1<<5);
HIGH(pinLed); //compiles as PORTB |= (1<<5);
———————————————–
*/