Bonsoir, je voudrais être sûr de pouvoir faire ce programme pour un PIC16F84A (je sais, il date mais je n'avais pas besoin de plus pour çà).
C'est pour une télécommande RF; le tout alimenté par une petite pile 12 V mais qui doit consommer le moins possible.
Donc, le portB est en entrée avec interruption qui réveille le mode SLEEP qui lui-même à été activé avec le timer0 en prescaler le plus haut possible X 256 passages dans son interruption pour le mettre en service.
Le débordement du timer0 fois 256 (inactivité de l'utilisateur sur le PIC) entraîne le PIC en mode SLEEP et, je le réveille avec interruption sur changement d'état sur les PORTB[4;7] pour pouvoir envoyer au module RF une trame correspondant à la touche appuyée.
J'utilise le format NRZ à 9600 bauds (2400 ici) avec bit de parité pour m'assurer de la réception de Mr Bigonoff (ISO7816).
La question est: puisque j'utilise le timer0 en interruption pour activer le mode veille, est-ce que je peux utiliser ce même timer0 (utilisé par Bigonoff et unique sut le 16F84A) pour gérer les temporisations inhérentes à la transmission série asynchrone dans une autre interruption relative à l'appuie d'une touche sur RBx (pull-up interne activé); GIE sera à zéro pendant la routine d'interruption RBx d’émission du caractère.
Le débordement alors de timer0 ne pourra rien occasionner, n'est-il?
En gros, le timer0 tourne toujours, mais dans un cas, il "interrupte" à intervalles régulier et dans l'autre, il me sert à temporiser:
code de la source
Puis-je coder de la sorte?Code:temp_1bd movlw -38 ; en tenant compte des 2 cycles d’arrêt de Tmr0 movwf TMR0 ; initialiser tmr0 call temp_suite ; et attendre 1/2 bit temp_1b movlw -91 ; écart entre 2 bits + 2 cycles d’arrêt addwf TMR0 , f ; ajouter à la valeur actuelle temp_suite bcf INTCON , T0IF ; effacer flag temp_wait btfss INTCON , T0IF ; attendre débordement timer goto temp_wait ; pas fini, attendre return ; et sortir
-----