Closed. This question needs details or clarity。它当前不接受答案。
想改善这个问题吗?添加详细信息,并通过editing this post阐明问题。
6年前关闭。
Improve this question
我想在阵列中定义引脚和端口
例如这样的事情。
我知道此代码不正确,希望您的帮助编写正确的代码。
我的编译器是CodeVision。
谢谢。
您还可以定义一个宏
并称之为:
但是,如果您仍然希望将它们保存在数组中,则可以在数组中存储指向函数的指针,然后调用它们。
想改善这个问题吗?添加详细信息,并通过editing this post阐明问题。
6年前关闭。
Improve this question
我想在阵列中定义引脚和端口
例如这样的事情。
char a[3]={PINA.0,PINB.2,PORTC.4};
/***********************************/
if(a[0]==1) // equal to (PINA.0==1)
//do something
a[2]=1; // equal to PORTC.4=1;
我知道此代码不正确,希望您的帮助编写正确的代码。
我的编译器是CodeVision。
谢谢。
最佳答案
如果编译器允许您使用PINA.0访问引脚,则PINA可能是位域。位域没有地址。
使用以下语句:char a[3]={PINA.0,PINB.2,PORTC.4};
,您将pin 值存储在数组中。因此,稍后在写入a[2]=1
时,会将1写入复制的寄存器值,而不是实际寄存器。如果要获得正确的结果,则应直接使用寄存器或宏。
//setting PINA.2 = 1
PINA |= 1<< 2;
您还可以定义一个宏
#define SET_BIT(PORT_NR,BIT) (PORT_NR |= (1<<BIT))
#define CLEAR_BIT(PORT_NR,BIT) (PORT_NR &= ~(1<<BIT))
并称之为:
SET_BIT(PINA,2);
CLEAR_BIT(PINA,2);
但是,如果您仍然希望将它们保存在数组中,则可以在数组中存储指向函数的指针,然后调用它们。
void setBit(struct port_operation* a,unsigned char bit){
return a->_port |= (1<<bit);
}
void clearBit(struct port_operation* a,unsigned char bit){
return a->_port &= ~(1<<bit);
}
typedef struct _port_operation{
unsigned char _port;
void(*set)(struct _port_operation* ,unsigned char);
void(*clear)(struct _port_operation* ,unsigned char);
}port_operation;
port_operation port_op_a;
port_op_a._port = PORTA;
port_op_a.set = setBit;
port_op_a.clear = clearBit;
port_operation port_op_b = port_op_a;
port_op_b._port = PORTB;
port_operation[2] = {port_op_a,port_op_b};
//set 1 to PORTA bit 1
port_operation[0].set(port_operation[0],1);
10-07 23:23