如何在 C 语言中为微控制器创建 Setpin 和 Clearpin?
How to create Setpin and Clearpin in C for microcontroller?
我在用 C 编写 µC 方面比较陌生,之前一直使用 arduino IDE。我想创建一个设置和清除引脚的函数。我试过了
#include <avr/io.h>
#include <util/delay.h>
#define F_CPU 16000000UL
void set_led(int poort,int pin){
poort |= (1<<pin);
//PORTB |= (1<<pin); <-- this works
}
void clear_led(int poort,int pin){
poort &= ~(1<<pin);
}
int main(void)
{
DDRD = 0xff;
PORTD = 0x00;
while(1)
{
set_led(PORTD,PD7);
_delay_ms(500);
clear_led(PORTD,PD7);
_delay_ms(500);
}
}
pin 变量正常工作,但是当我实现 poort 变量时,led 不再闪烁。有人知道如何解决这个问题吗?
我在 manjaro 上使用 eclipse(AVR),控制器是 arduino nano。
因为 C 是按值传递的,所以只改变了局部变量。
您可以使用宏:
#define SET_LED(POORT, PIN) ((POORT) |= (1<<(PIN)))
或将变量作为指针传递:
void set_led(volatile uint8_t *poort, int pin)
{
*poort |= (1<<pin);
}
并用 set_led(&port, pin);
来调用它。
类型int
可能是错误的,应该是volatile uint8_t
。
我在用 C 编写 µC 方面比较陌生,之前一直使用 arduino IDE。我想创建一个设置和清除引脚的函数。我试过了
#include <avr/io.h>
#include <util/delay.h>
#define F_CPU 16000000UL
void set_led(int poort,int pin){
poort |= (1<<pin);
//PORTB |= (1<<pin); <-- this works
}
void clear_led(int poort,int pin){
poort &= ~(1<<pin);
}
int main(void)
{
DDRD = 0xff;
PORTD = 0x00;
while(1)
{
set_led(PORTD,PD7);
_delay_ms(500);
clear_led(PORTD,PD7);
_delay_ms(500);
}
}
pin 变量正常工作,但是当我实现 poort 变量时,led 不再闪烁。有人知道如何解决这个问题吗? 我在 manjaro 上使用 eclipse(AVR),控制器是 arduino nano。
因为 C 是按值传递的,所以只改变了局部变量。
您可以使用宏:
#define SET_LED(POORT, PIN) ((POORT) |= (1<<(PIN)))
或将变量作为指针传递:
void set_led(volatile uint8_t *poort, int pin)
{
*poort |= (1<<pin);
}
并用 set_led(&port, pin);
来调用它。
类型int
可能是错误的,应该是volatile uint8_t
。