所以我已经用Atmel C编程了一段时间,我已经习惯了所有的C位操作,所以现在我想把它隐藏起来。我想隐藏位操作,这不仅使我的代码更具可读性,而且使维护和修改变得更容易,以防我们的硬件更改或者我们制造了新的硬件。
所以我想问你,对于基本的引脚操作,Atmel C最好的宏是什么。
我要寻找的特征是:
因此,我找到了一些宏,我可以使用,但没有一个真正适合我的议案。
链接:
o.html (每个引脚仍需保留多个定义)
macro.html (不编译,AVRStudio6.2)
Changing a global variable in C (最好的一个,在"/* 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
}对最干净的方法有什么想法吗?
我可以处理保持更多的定义每针,但我觉得这是不应该需要的。PA1和PB0不应该告诉我们所有的事情吗,或者它们是否被定义为一个值?
编辑:在上使用Atmel Studio6.2
谢谢你,罗伯。
发布于 2014-09-23 03:50:13
不过,这确实编译了
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);
———————————————–
*/只有一个错误是我修过的
https://stackoverflow.com/questions/25984587
复制相似问题