gpt4 book ai didi

c - Atmel C 引脚操作宏

转载 作者:太空宇宙 更新时间:2023-11-04 02:47:16 25 4
gpt4 key购买 nike

所以我用 Atmel C 编程已经有一段时间了,我已经习惯了所有 C 位操作,所以现在我想隐藏它。我想隐藏位操作,不仅是为了让我的代码更具可读性,也是为了在我们的硬件发生变化或我们制造新硬件时更容易维护和修改。

所以我想问您,用于基本引脚操作的 Atmel C 的最佳宏是什么。

我正在寻找的功能是:

  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)

Changing a global variable in 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

谢谢,罗布·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);
———————————————–
*/

我只修改了一个错字

关于c - Atmel C 引脚操作宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25984587/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com