MikroC:将引脚作为参数传递给函数
MikroC: Passing pin as parameter to function
我正在尝试在 MikroC 中为 PIC16F882 MCU 编写自定义延迟函数。
我想在整个延迟函数中不断检查 MCU 的特定引脚,看它是否发生了变化。
但问题是,我无法将引脚作为参数传递给函数。有没有其他方法可以做到这一点?
flag 的作用是决定延迟的时间。 Timer0 溢出后自动置0。为了让事情更容易理解,我没有将那部分包含在代码中。
我的函数是:
int flag = 0;
void delay(bit pin_to_check){
while(flag == 1){
if(flag == 0 || pin_to_check == 0) {
break;
}
}
}
void main(){
flag = 1;
delay(RA3_bit);
}
我得到的编译时错误是:
Parameter 'pin_to_check' must not be of bit or sbit type
看看http://download.mikroe.com/documents/compilers/mikroc/pic/help/accessing_individual_bits.htm#bit
它说位不能用于参数列表。需要传入注册名。
由于您不能将 bit
或 sbit
作为参数传递,您可以:
- 完全避免使用该函数(显然),
- 使用预处理器宏而不是函数,
- 将整个寄存器连同位数传递给函数。
案例 3. 在 this thread 中有解释,类似于:
void delay(unsigned char *PORT, unsigned char bitNo) {
unsigned char bitMask = 0x01 << bitNo;
while (flag == 1 && ((*PORT) & bitMask) != 0)
{ }
}
// delay until bit 3 is set
delay(&PORTA, 3)
我正在尝试在 MikroC 中为 PIC16F882 MCU 编写自定义延迟函数。
我想在整个延迟函数中不断检查 MCU 的特定引脚,看它是否发生了变化。
但问题是,我无法将引脚作为参数传递给函数。有没有其他方法可以做到这一点?
flag 的作用是决定延迟的时间。 Timer0 溢出后自动置0。为了让事情更容易理解,我没有将那部分包含在代码中。
我的函数是:
int flag = 0;
void delay(bit pin_to_check){
while(flag == 1){
if(flag == 0 || pin_to_check == 0) {
break;
}
}
}
void main(){
flag = 1;
delay(RA3_bit);
}
我得到的编译时错误是:
Parameter 'pin_to_check' must not be of bit or sbit type
看看http://download.mikroe.com/documents/compilers/mikroc/pic/help/accessing_individual_bits.htm#bit
它说位不能用于参数列表。需要传入注册名。
由于您不能将 bit
或 sbit
作为参数传递,您可以:
- 完全避免使用该函数(显然),
- 使用预处理器宏而不是函数,
- 将整个寄存器连同位数传递给函数。
案例 3. 在 this thread 中有解释,类似于:
void delay(unsigned char *PORT, unsigned char bitNo) {
unsigned char bitMask = 0x01 << bitNo;
while (flag == 1 && ((*PORT) & bitMask) != 0)
{ }
}
// delay until bit 3 is set
delay(&PORTA, 3)