« Utiliser les PIC 16F et 18F/Exercices/Interruption timer0 en langage C » : différence entre les versions

m
Robot : Remplacement de texte automatisé (-qu'il +qu’il)
m (Robot : Remplacement de texte automatisé (-\s+FPGA\s+ + {{Abréviation|FPGA|Field Programmable Gate Array|en}} ))
m (Robot : Remplacement de texte automatisé (-qu'il +qu’il))
Remarquez comment est écrit une interruption avec ce compilateur.
 
1°) Repérer et modifier les lignes de ce programmes pour qu'ilqu’il fonctionne avec le compilateur MikroC.
 
2°) Calculer si le chenillard réalisé par ce programme est visible à l'œil humain (fréquence de changement de position des LEDs inférieure à {{Unité|20|{{abréviation|Hz|hertz}}}}).
<u>Calcul précis</u> : {{Unité|50|{{abréviation|Mhz|mégahertz}}}} / 4*(256*256*16) = {{Unité|11.92|{{abréviation|Hz|hertz}}}} (la division par 4 a toujours lieu).
 
3°) "if (!(nb % 16))" est une façon pas très efficace de calculer le reste de la division par 16. J'ignore la technique utilisé par le compilateur, mais ce calcul est forcément long puisqu'ilpuisqu’il n'y a pas d'instruction de division sur le 16F84.
 
Comme la division se fait par 16 qui est une puissance de deux, on peut utiliser un masque pour faire ce calcul bien plus rapidement :
if ((((nb &0xF0) > 0x90) nb = 0;
</source>
Les compilateurs C compilent cela certainement de manière peu optimisée. Il faut savoir qu'ilqu’il existe un bit "half carry" dans le registre '''Status''' qui permet certainement d'optimiser, mais nous laissons tomber ce genre de détail.
 
Pour la période de l'interruption, on part de la fréquence quartz divisée par 4 soit : {{Unité|1|{{abréviation|Mhz|mégahertz}}}} qu'ilqu’il faut diviser par {{formatnum:10000}} pour avoir une période d'overflow de 10 ms. Le timer gère une division par 256 qu'on peut ramener à 250 en l'initialisant à 6 mais il nous reste à réaliser une division par 40 qui n'est pas une puissance de 2. On va prendre une division par 64 et 10000 / 64 = 156,25 donc notre timer0 sera initialisé à 256-156 = 100.
<source lang="c">
//****** Mikro C ********
143 371

modifications