Comment changer l'état d'une broche de sortie sur un AVR ?
Facile, ça se fait en une seule instruction assembleur.
Comment changer l'état d'une broche de sortie sur un PIC ?
Facile, ça se fait en changeant un bit dans le registre LATx.
Ah non mince, c'est un PIC16, donc y'a pas de registre LATx ; seulement un registre PORT qui n'est accessible qu'en écriture.
Bon, c'est pas grave, on va déclarer une variable pour mémoriser l'état et faire une petite macro qui gère ça.
Ah oui, mais si on s'en sert à la fois dans le programme principal et dans les interruptions, va y avoir une race condition.
Bon, c'est pas grave, on va rajouter un bout de code autour qui désactive les interruptions temporairement pour que ce soit atomique, et qui restaure l'état à la fin. D'ailleurs y'a sûrement ça dans la lib standard, non ?
Ah ben non, y'a pas. Juste deux fonctions pour activer et désactiver les interruptions.
Bon c'est pas grave, on va le faire à la main : on sauvegarde l'état, on désactive, on exécute le truc et on restaure.
Ah ben oui mais en fait, si y'a une interruption qui arrive pile poil au moment où on désactive,
ben ça désactive pas !
