bonjour a tous,

J'essaie de programmer mon PIC18f452, j'utilise mplab 8.00 et winpic pour le programateur.

J'essai de maitriser les timers du PIC, mais j'ai un souci d'execution, je pense qu'il se situe dans la definition du timer, voici mon programme qui devrait faire clignoter une led grace a ce timer, mais ca marche pas.

J'ai un quartz 10 MHz, et j'utilise le PLL.

voci la source:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
//**********************************************
//**   PIC 18F452 quartz 10Mhz + PLL = 40Mhz  **
//**     pilotage d'une LED  avec un timer    ** 
//**********************************************
 
//includes
//========
#include <p18f452.h>   /* déclarations pour le PIC18F252 */
#include <timers.h>    /* fonctions pour les timers */
 
 
// configurations des bits fusibles :
//===================================
#pragma config OSC = HSPLL     // oscilateur à quartz 10 Mhz + PLL=40 MHZ
#pragma config PWRT = ON       // power up timer
#pragma config BOR = OFF       //brown out reset
#pragma config WDT = OFF       // watchdog timer
#pragma config CCP2MUX = OFF
#pragma config LVP = OFF       //low voltage
 
// definitions des entrees sorties 
//=================================
#define LED1     PORTAbits.RA0
 
//  variables globales
//=====================
#define ON   1    // pour stocker l'etat de la led 
#define OFF  0
 
int led_status;
int temporisation;
 
//Prototype des fonctions et interruptions
//========================================
 
void it_pulse (void);
 
 
// declaration de l'interruption pulse
//++++++++++++++++++++++++++++++++++++
//void it_pulse(void);
 
#pragma code adresse_it=0x08        // Adresse prioritaire pour utiliser l'interruption 
void it_pulse (void)
     { _asm GOTO it_pulse _endasm }   //on execute le code de it_pulse 
#pragma code // retour à la zone de code
 
 
// ++++++++++++++++++++++++++++++
//  sous programme d'interruption
// ++++++++++++++++++++++++++++++
 
#pragma interrupt it_pulse
 
{// traitement de l'interuption  pulse
    unsigned char sauv1;
	unsigned char sauv2;
 
	// on sauvegarde le contenu des registres de calcul
	sauv1 = PRODL;
	sauv2 = PRODH;	
 
	// c'est le Timer1 qui a levé l'interruption
	if (PIR1bits.TMR1IF) 
	 {
		// on va réautoriser l'interruption
		PIR1bits.TMR1IF = 0; 
 
		// ca y est on a attendu 2 500 000 cycles (0,25s)
		if (temporisation >= 38) 
		  {
			// on remet à 0 pour le prochain timer
			temporisation = 0;  
 
			// si la LED était allumée
			if (led_status == 1) 
			  {
				// on l'éteint 
				LED1 = 0;
				// stock le nouvel état de la LED
				led_status = 0; 
			  }
			else // sinon la LED était éteinte
			  {
				// on l'allume
				LED1 = 1;
				// stock le nouvel état de la LED
				led_status = 1;
		      }
	       }
		else // on n'a pas encore attendu 2 500 000 cycles
		  {
			// on incrémente notre variable compteur
			temporisation++;
		  }	
	}// fin du if
 
	// on restaure les registres de calcul
	PRODL = sauv1;
	PRODH = sauv2;		
 
}// fin de l'interuption
 
 
 
// fonction principale 
//====================
void main (void)
 
{// debut main
 
    temporisation=0;       // RAZ tempo
    TRISAbits.TRISA0=0;    // On configutre le port RA0 en sortie    
    LED1=0;              // On verifie led eteinte
    led_status=0;
 
	 // on créer le timer
     OpenTimer1(TIMER_INT_ON 
               & T1_16BIT_RW  
               & T1_SOURCE_INT
	       & T1_PS_1_1 
               & T1_OSC1EN_OFF 
               & T1_SYNC_EXT_OFF);
 
 
	INTCONbits.GIE = 1;// On autorise toutes les interruptions
	INTCONbits.PEIE = 1;
 
 
     while (1) //boucle infinie
       {}
 
 
}//fin main
merci de votre aide ....