2016-09-02 3 views
0

J'essaie d'écrire une fonction de délai personnalisé dans MikroC pour le microcontrôleur PIC16F882.MikroC: Passage de la broche en tant que paramètre pour fonctionner

Je veux continuer à vérifier une broche particulière de MCU pour voir si elle a changé, tout au long de la fonction de retard.

Mais le problème est, je ne peux pas passer une broche en tant que paramètre à une fonction. Y a-t-il une autre façon de faire la même chose?

Le but de l'indicateur est de déterminer combien de temps le retard devrait être. Il serait automatiquement mis à 0 après le débordement de Timer0. Je n'ai pas inclus cette partie dans le code pour rendre les choses plus simples à comprendre.

Ma fonction est:

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); 
} 

L'erreur de compilation que je reçois est:

Parameter 'pin_to_check' must not be of bit or sbit type 

Répondre

0

Puisque vous ne pouvez pas passer le bit ou sbit comme paramètre, vous pouvez soit:.

  1. Évitez d'utiliser la fonction tout à fait (évidemment),
  2. Utilisez un préprocesseur macro au lieu d'une fonction,
  3. passer le registre entier avec le numéro de bit à la fonction.

Cas 3 est expliqué dans this thread, et serait quelque chose comme:

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)