Bonjour à tous,
Voila, je suis en train de construire une horloge à persistence rétinienne à l'aide d'un PIC16f877 en C.
Afin de détecter une rotation de mon système j'utilise un photodétecteur (sfh9301) branché sur le port RB0.
J'aimerais détecter par interruption un front montant sur RB0 mais je n'y arrive décidemment pas!!
Voici mon petit programme pour l'instant:
// Fichier test.c
//
// Programme de test de certaines fonctionnalités du pic16F877
//
#include <16f877.h>
#include <lib_clock.h> // ma librairie
// Horloge à 4Mhz sur le kit picdemplus
#use delay(clock=4000000)
void petite_aiguille(int); // fonctions sans importance pour l'instant
void grande_aiguille(int);
void tempo();
void interruption_sur_b0();// ma fonction d'interruption
// Mon interrupt*************
#INT_EXT
void interruption_sur_b0(){
output_low(PIN_B1);
output_high(PIN_B2);
tempo();
input(PIN_B0); // RAZ du flag???
}
/****************************** ****************************** **
* Programme principal *
****************************** ****************************** **/
void main()
{
// config des ports
set_tris_a(0x00); // Tout le port A en sortie
set_tris_b(0x01); // Tout le port B en sortie, sauf RB0 en entrée
set_tris_c(0x00); // Tout le port C en sortie
set_tris_d(0x00); // Tout le port D en sortie
// Validation d'une IT externe sur le bit RB0
EXT_INT_EDGE(L_TO_H);
enable_interrupts(INT_EXT);
// Validation des IT
enable_interrupts(GLOBAL);
// Initialisation (sans interet)
grande_aiguille(0x00);
petite_aiguille(0x00);
output_low(led_bleue);
output_low(led_verte);
// DEBUT Boucle infinie
while(TRUE){
output_high(PIN_B1);
output_low(PIN_B2);
}
}
Je ne sais pas quelle est la syntaxe pour adresser directement les registres INTCON et OPTION_REG afin de programmer correctement les interruptions.
Merci d'avance pour toute l'aide que vous pourrez m'apporter! Bonne soirée!
-----