bonjour,
voila j'expose mon problème.
je doit effectué plusieurs palier d'alarme et envoyé le code( Nmsb et Nlsb) correspondant. sa c pas un soucis sa marche mon gros souci ces que a ma pré alarme 16 mA je doit attendre 2s puis envoyé un nouveau code correspondant a 20 mA et la sa ne marche pas car sous simulation avec proteus sa passe directement au 20 mA.
mon explication est peut être pas très précise veuille m'en excusé.
voici mon programme a leur actuel
en espérant que vous puissiez m'aide

cordialement.

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
 
//*******************************************************************************
// liaison SPI 
//
// rôle : écrire dans une mémoire EEPROM extérieure au PIC par la liaison SPI
//*******************************************************************************
 
#include <p18f452.h>
#include <stdio.h>
#include <spi.h>
#include <delays.h>
#define SPI_CS PORTAbits.RA5
 
void Delay10KTCYx( unsigned char unit);	
void main (void)
{
	char E,x;
	char Nmsb;
	char Nlsb;
	char T;
	E = (PORTB&0x1F);
	T = 0;
 
	DDRAbits.RA5=0;		
	PORTAbits.RA5=1;
	DDRCbits.RC3=0;		 
	PORTCbits.RC3=0;
	DDRCbits.RC5=0;		 
	PORTCbits.RC5=0;
	DDRBbits.RB0=1;
	DDRBbits.RB1=1;
	DDRBbits.RB2=1;
	DDRBbits.RB3=1;
	DDRBbits.RB4=1;
	DDRBbits.RB5=1;
	DDRBbits.RB6=1;
	DDRBbits.RB7=1;
	while(1)
	{	
	switch (E)
	{
 
	case 0x00:		// Normal 4mA
		 Nmsb=0x01;
		 Nlsb=0x91;
	   	T=0;
		break;
	case 0x01:		// défault materiel 2mA
		 Nmsb=0x00;
		 Nlsb=0xC9;
		T=0;
		break;
	case 0x02:		// défault capteur UV ou IR 2,6mA
		 Nmsb=0x01;
		 Nlsb=0x05;
		T=0;
		break;
	case 0x04:		// Inhibition 3,4mA
		 Nmsb=0x01;
		 Nlsb=0x55;
		T=0;
		break;
	case 0x08:		// IR² 8mA
		 Nmsb=0x03;
		 Nlsb=0x22;
		T=0;
		break;
	case 0x10:		// UV 12mA
		 Nmsb=0x04;
		 Nlsb=0xB0;
		T=0;
		break;
	case 0x18:		// UV+IR² 16mA   préalarme
 
 
	if (T==0) 
			{	Nmsb=0x06;
		 		Nlsb=0x40;
				T=1;
			}
 
 
 
 
 
 
	if (T==1) {	Nmsb=0x07;
		 	   		Nlsb=0xDA;
			}
}
 
 OpenSPI(SPI_FOSC_64, MODE_00, SMPMID);
 
		SPI_CS = 0; 		//Sélection du CNA
		WriteSPI(Nmsb);	//envoie donnée poids fort
		while(!PIR1bits.SSPIF);
		PIR1bits.SSPIF=0;
		WriteSPI(Nlsb);	//envoie donnée poids faible
		while(!PIR1bits.SSPIF);
		PIR1bits.SSPIF=0;
		SPI_CS = 1; 	
 
	CloseSPI();
 
if (T=1) {Delay10KTCYx(170);
}
}
 
 
}