Bonjours;
j'ai un mini projet à faire avec un PIC16f877A et un quartz 4Mhz, et j'ai besoin d'un signal numérique de période T=10us (5us état haut et 5us état bas) qui se répété 100 fois (1ms) ,je programme pour la première avec MIKROC, le problème est lorsque j'écrit le programme:
int J ;
void main ()
{
TRISA=0x00;
for(J=0 ; J<100 ; J++)
{
PORTA.B2=1;
delay_us(4);
PORTA.B2=0;
}
}
sans faire un delay_us(5) de l'état bas, après simulation avec proteus, j'ai eu un état bas d'une durée de 17 us et un état haut d'une durée de 5us, je pense que le problème est dans le nombre de cycles non connus dans MIKROC pour la boucle for, par contre lors de la programmation avec l'assembleur on peut connaitre le nombre du cycles exacte.
j'ai augmenté la fréquence du quartz, ça me donne pas ce que je cherche.
j'utilise pas la programmation avec l'assembleur parce que j'aurai un problème dans la taille du programme , j'ai plusieurs signaux à programmer.
et lorsque j'ai utilisé dans MIKROC:
void ENVOI_UNms ()
{
asm{
BSF STATUS,RP0
BCF TRISA,2
asm BCF STATUS,RP0
l_cp:
BSF PORTA,2
NOP
NOP
NOP
NOP
BCF PORTA,2
NOP
DECFSZ _I,f
goto l_cp
};
}
et lorsque j'appel plusieurs fois cette fonction (ENVOI_UNms () ) ça donne un autre signal qui a une durée plus que 1ms (100 fois 10us) .
et maintenant je ne sais pas s' il y a d'autre instructions dans le MIKROC pour réaliser ce genre de signaux (100KHZ)????
Merci d'avance.
-----