Atmel C Pin Manipulation宏

所以我已经在Atmel C编程了一段时间,我已经习惯了所有的C位操作,所以现在我想隐藏它。 我想隐藏位操作不仅是为了使我的代码更具可读性,而且还使我们的硬件更改或创建新硬件时更容易维护和修改。

所以我问你Atmel C基本引脚操作的最佳宏是什么。

我正在寻找的function是:

  1. 将引脚设置为输入或输出
  2. 将输出引脚设置为高电平或低电平
  3. 读取输入引脚的值

所以我找到了一些我可以使用的宏,但没有一个真正适合我的账单。

链接:

http://www.piconomic.co.za/fwlib/group___a_v_r___p_i_o.html (仍需要为每个引脚保留多个定义)

http://www.starlino.com/port_macro.html (不编译,AVR Studio 6.2)

在C中更改全局变量 (最好的一个,在“/ * LCD DEFINES * /”下的问题顶部附近)

我真正想要的是这样的:

#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 } 

有关最干净方法的任何想法吗?

我可以处理每个引脚保留更多的定义,但我觉得不应该这样做。 PA1和PB0不应该告诉我们所有内容,还是将它们定义为单个值?

编辑:在Windows上使用Atmel Studio 6.2

谢谢,Rob R.

没关系,这确实编译

http://www.starlino.com/port_macro.html

 // 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); ———————————————– */ 

我修复了一个错字