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

它说位不能用于参数列表。需要传入注册名。

由于您不能将 bitsbit 作为参数传递,您可以:

  1. 完全避免使用该函数(显然),
  2. 使用预处理器宏而不是函数,
  3. 将整个寄存器连同位数传递给函数。

案例 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)