【问题标题】:MikroC: Passing pin as parameter to functionMikroC:将引脚作为参数传递给函数
【发布时间】:2016-09-02 12:09:02
【问题描述】:

我正在尝试在 MikroC 中为 PIC16F882 MCU 编写自定义延迟函数。

我想在整个延迟功能中不断检查 MCU 的特定引脚以查看它是否发生了变化。

但问题是,我不能将 pin 作为参数传递给函数。有没有其他方法可以做到这一点?

标志的目的是确定延迟应该多长时间。 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

【问题讨论】:

    标签: c mikroc


    【解决方案1】:

    看看http://download.mikroe.com/documents/compilers/mikroc/pic/help/accessing_individual_bits.htm#bit

    它说位不能用于参数列表。您需要将寄存器名称传入。

    【讨论】:

    • 我该怎么做?你能详细说明一下吗?寄存器名称数据类型是什么?
    【解决方案2】:

    由于您不能将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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-27
      • 2021-04-13
      • 1970-01-01
      • 2021-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多