Bonjour,
voici mon problème:
je suis avec un pic18f1220
j'ai réussi a envoyer depuis le pic un message en uart sur un arduino nano
j'ai réussi a faire fonctionner un lcd i2c sur le pic qui affiche un message
mais si je veux envoyer un message par uart ou si j'inscrit le pic en esclave il je réagit pas
sur le datasheet je vois que interrupt existe pour les pic18f1220
j'ai tenté avec version payante chat gpt et claude ai malheureusement pas de résultat
Est il possible de faire du rx tx avec un pic18f1220 ou déclarer une pin en input et qui fonctionne?
Voici le code qui a été injecté dans le pic
voici mon problème:
je suis avec un pic18f1220
j'ai réussi a envoyer depuis le pic un message en uart sur un arduino nano
j'ai réussi a faire fonctionner un lcd i2c sur le pic qui affiche un message
mais si je veux envoyer un message par uart ou si j'inscrit le pic en esclave il je réagit pas
sur le datasheet je vois que interrupt existe pour les pic18f1220
j'ai tenté avec version payante chat gpt et claude ai malheureusement pas de résultat
Est il possible de faire du rx tx avec un pic18f1220 ou déclarer une pin en input et qui fonctionne?
Voici le code qui a été injecté dans le pic
Code Sélectionner
#include <xc.h>
// Configuration des bits
#pragma config OSC = INTIO2 // Oscillateur interne
#pragma config WDT = OFF // Watchdog timer désactivé
#pragma config LVP = OFF // Low Voltage Programming désactivé
#pragma config PWRT = ON // Power-up timer activé
#pragma config BOR = OFF // Brown-out reset désactivé
#define _XTAL_FREQ 4000000 // Fréquence de l'oscillateur interne (4MHz)
#define LED_PIN LATAbits.LATA0 // LED sur RA0
// Variable globale pour compter les impulsions
volatile unsigned char pulseCount = 0;
// Routine d'interruption
void __interrupt() ISR(void)
{
// Vérifier l'interruption INT0
if(INTCONbits.INT0IF)
{
// Incrémenter le compteur d'impulsions
pulseCount++;
// Effacer le drapeau d'interruption
INTCONbits.INT0IF = 0;
}
}
void main(void)
{
unsigned char i, count;
// Configuration de l'oscillateur interne
OSCCON = 0x60; // 4MHz
// Configuration des ports
TRISA = 0x00; // PORTA tout en sortie
TRISB = 0x01; // RB0 en entrée
// Désactiver les fonctions analogiques
ADCON1 = 0x0F; // Toutes les broches en mode numérique
// Pour le PIC18F1220, utiliser une résistance externe de pull-up
// ou configurer le front descendant sans pull-up interne
// Initialisation des sorties
LATA = 0x00;
LATB = 0x00;
// Configuration de l'interruption externe INT0
INTCONbits.INT0IF = 0; // Effacer le drapeau d'interruption
INTCON2bits.INTEDG0 = 0; // Front descendant pour INT0
INTCONbits.INT0IE = 1; // Activer l'interruption INT0
// Activer les interruptions globales
INTCONbits.GIE = 1;
// Boucle principale
while(1)
{
// Si des impulsions ont été reçues
if(pulseCount > 0)
{
// Désactiver temporairement les interruptions
INTCONbits.GIE = 0;
// Copier le nombre d'impulsions
count = pulseCount;
pulseCount = 0;
// Réactiver les interruptions
INTCONbits.GIE = 1;
// Faire clignoter la LED le nombre de fois correspondant
for(i = 0; i < count; i++)
{
LED_PIN = 1; // Allumer la LED
__delay_ms(300); // Attendre
LED_PIN = 0; // Éteindre la LED
__delay_ms(300); // Attendre
}
}
// Petit délai dans la boucle principale
__delay_ms(10);
}
}