URGENT repondre avant 9h le 21/12; recherche aide en programmation basic, pour remplacer l'attente d'un " ? " en attente d'un " g0? "Qui pour m'aider?
En grs on allume un laser, il envoi " ? " sur la liaison, notre programme envoi en suite plein de " C " puis un " H ".
Il faut modifier cette partie du programme pour attendre un "g0?" (lire G zero point d'interrogation) sur la liaison, notre programme envoi en suite plein de " C " puis un " H ".
Voici le programme:
/*test de lecture laser*/
#include <ioh83048.h>
#include <stdio.h>
#include <inh8.h>
#include "interruption.h"
#include "lase.h"
#include "port_ser.h"
#include "in_out.h"
#include "I2C_dist.h"
#include "aff_dist.h"
//#define DEV
/*variable globale*/
int index=0,flag=0,flag1=0, /*variable pour l'interruption de reception des caractere */
ecran,mode,modes,type,digit,ana,pos,relais, /*variable pour la gestion des menu*/
inc,drapeau;
int password,password_u,pass;
int compt_def,drap; /*compteur de retry*/
long ech_min,ech_max; /*echelle pour la conversion des la sortie ana*/
long sl_r0,sl_r1,sl_r2; /*seuil des differents relais*/
char donnee[50]; /*tableau de recuperation des donnees sur la RS232*/
float time_out,t_out;
int etalon;
float droite_a,droite_b;
float cal_20,cal_4;
long var_a,var_b;
unsigned char esclave;
unsigned long time;
int time1;
interrupt[SCI_ERI0] void erreur_recept0(void)
{
SCI0_SSR &= 0x87;
}
/*interuption de reception de caracteres du laser*/
interrupt[SCI_RXI0] void recept(void)
{
donnee[index]=SCI0_RDR;
/*renvoie le caractere recu sur le port espion*/
port_trans(1,donnee[index]);
/*pour ne pas depasser la taille du tableau*/
if (index>=40) index=0;
if (donnee[index]==0x0A)
{
donnee[index-1]='\0';
flag=flag1=1;
index=0;
/*RAZ du time_out*/
/*si on est en mode ponctulle ou on n'est plus dans l'ecran
d'affichage des valeurs on arrete pas le timer*/
if ((mode==0) || (ecran>=2) || (modes==1))
{
ITU_TSTR&=0xfe;
}
else ITU_TSTR|=0x01;
/*RAZ des differents drapeaux ou compteurs*/
inc=0;
t_out=0;
drap=0;
}
else index++;
SCI0_SSR &= 0xBF;
}
interrupt[SCI_ERI1] void erreur_recept1(void)
{
SCI1_SSR &= 0x87;
}
/*reception des caractere PC et envoie vers le laser*/
interrupt[SCI_RXI1] void recept1(void)
{
char carac;
carac=SCI1_RDR;
port_trans(0,carac);
SCI1_SSR &= 0xBF;
}
/*interuption de defaut communication*/
/*elle s'execute tout les 0.025 s*/
interrupt[ITU_IMIA0] void communication(void)
{
inc++;
if (inc>=4)
{
inc=0;
t_out=t_out+0.1;
}
ITU_TSR0&=0xfe;
}
/*timer de fonctionnement*/
interrupt[ITU_IMIA1] void timer(void)
{
time1++;
if (time1>=2400)
{
time1=0;
time++;
write_ulong(esclave,time,36);
}
ITU_TSR1&=0xfe;
}
/*fonction qui permet de modifier la valeur de type int par unite*/
void vale(int posi,int signe,int *val)
{
int inter;
switch(posi)
{
case 0:
*val=*val+signe*1000;
if (*val>9999) *val=*val-10000;
if (*val<0) *val=*val+10000;
break;
case 1:
inter=*val/1000;
inter=inter*1000;
*val=*val+signe*100;
if ((*val-inter)>999) *val=*val-1000;
if ((*val-inter)<0) *val=*val+1000;
break;
case 2:
inter=*val/100;
inter=inter*100;
*val=*val+signe*10;
if ((*val-inter)>99) *val=*val-100;
if ((*val-inter)<0) *val=*val+100;
break;
case 3:
inter=*val/10;
inter=inter*10;
*val=*val+signe*1;
if ((*val-inter)>9) *val=*val-10;
if ((*val-inter)<0) *val=*val+10;
break;
}
}
/*fonction qui permet de modifier la valeur de type long par unite*/
void valeur(int posi,int signe,long *val)
{
long inter;
switch(posi)
{
case 0:
*val=*val+signe*100000;
if (*val>999999) *val=*val-1000000;
if (*val<0) *val=*val+1000000;
break;
case 1:
inter=*val/100000;
inter=inter*100000;
*val=*val+signe*10000;
if ((*val-inter)>99999) *val=*val-100000;
if ((*val-inter)<0) *val=*val+100000;
break;
case 2:
inter=*val/10000;
inter=inter*10000;
*val=*val+signe*1000;
if ((*val-inter)>9999) *val=*val-10000;
if ((*val-inter)<0) *val=*val+10000;
break;
case 3:
inter=*val/1000;
inter=inter*1000;
*val=*val+signe*100;
if ((*val-inter)>999) *val=*val-1000;
if ((*val-inter)<0) *val=*val+1000;
break;
case 4:
inter=*val/100;
inter=inter*100;
*val=*val+signe*10;
if ((*val-inter)>99) *val=*val-100;
if ((*val-inter)<0) *val=*val+100;
break;
case 5:
inter=*val/10;
inter=inter*10;
*val=*val+signe*1;
if ((*val-inter)>9) *val=*val-10;
if ((*val-inter)<0) *val=*val+10;
break;
}
}
/*fonction de la gestion des seuils*/
void seuil(long val)
{
/*test du seuil 0*/
if (val>sl_r0)
{
sortie_tor(0,1);
}
else
{
sortie_tor(0,0);
}
/*test du seuil 1*/
if (val>sl_r1)
{
sortie_tor(1,1);
}
else
{
sortie_tor(1,0);
}
/*test du seuil 2*/
if (val>sl_r2)
{
sortie_tor(2,1);
}
else
{
sortie_tor(2,0);
}
}
/*front montant sur les entrees tor*/
void front(void)
{
if (drapeau==1)
{
if ((entre_tor(0)==1) || (entre_tor(1)==1))
{
drapeau=1;
}
else drapeau=0;
}
}
/*fonction qui calcul la sortie ANA en fonction de la mesure du laser*/
void calcul_ana(long valeur)
{
float sortie;
float sortie_cor;
/*calcul en V*/
sortie=(float)(valeur-ech_min)*65535;
sortie=sortie/(float)(ech_max-ech_min);
sortie=sortie*5;
sortie=sortie/65535;
/*ajout de l'offset*/
sortie_cor=sortie*droite_a+droite_b;
if (ecran!=9) cna_max(sortie_cor);
}
/*fonction qui affiche le mesure du laser*/
void aff_lase(int volet)
{
long val;
char q[128];
float val1;
val=0;
if (flag==1)
{
flag=0;
val=distance(donnee);
val=(long)val*0.1;
calcul_ana(val);
seuil(val);
/*affichage des valeurs si ecran=0*/
if (volet==0)
{
/*affichage des valeurs selon l'echelles*/
if (digit==3) sprintf(q,"%ld mm",val);
if (digit==2)
{
val1=(float)val*0.1;
sprintf(q,"%.1f cm",(float)val1);
}
if (digit==1)
{
val1=(float)val*0.01;
sprintf(q,"%.2f dm",(float)val1);
}
if (digit==0)
{
val1=(float)val*0.001;
sprintf(q,"%.3f m",(float)val1);
}
print_2l(1,0," " );
print_2l(1,0,q);
}
}
}
void def_com(void)
{
int i,flg;
char tab[16];
/*drapeau de synchro avec la reception*/
flg=0;
/*verifie si la trame n'est pas une trame d'erreur*/
if ((donnee[1]=='E') && (drap==0) && (ecran!=10))
{
/*si on est en fin de trame alors on gere l'erreur*/
if (flag1==1)
{
flag1=0;
flg=1;
compt_def++;
}
/*empeche la gestion de la trame par aff_lase*/
flag=0;
/*on essai X retry avant de se mettre en defaut*/
if (compt_def>=300)
{
/*precise que c'est une erreur du laser*/
drap=1;
/*affigage de l'erreur*/
tab[0]='E';
tab[1]=donnee[2];
tab[2]=donnee[3];
tab[3]=donnee[4];
for(i=4;i<=14;i++)
{
tab[i]=' ';
}
tab[15]='\0';
}
else
{
/*en fonction du mode on renvoi le bon type de commande*/
if ((mode==0) && (flg==1))
{
flg=0;
ponctuelle();
ITU_TSTR|=0x01;
}
if ((mode==1) && (flg==1))
{
flg=0;
repetitive();
ITU_TSTR|=0x01;
}
}
}
else
{
compt_def=0;
flg=0;
flag1=0;
}
if ((t_out>=time_out) || (drap==1))
{
/*arrete le timer*/
ITU_TSTR&=0xfe;
/*init le converiseur*/
if (ecran!=9) cna_max(0);
/*affichage selon le type d'erreur*/
if (drap==1)
{
t_out=0;
/*erreur laser*/
if (ecran==0) print_2l(1,0,tab);
}
else
{
/*erreur com*/
if (ecran==0) print_2l(1,0,"ERREUR COM " );
}
SCI0_SSR = 0x00;
/*mettre la sortie defaut a 1*/
sortie_tor(3,1);
}
else
{
sortie_tor(3,0);
}
}
/*fonction de la gestion des menu*/
void affichage(int touche)
{
char q[64];
float val1;
switch(ecran)
{
case 0:
/*va au menu password*/
if (touche==5)
{
clear_2l();
pass=0;
ecran=1;
pos=0;
print_2l(0,0,"_" );
break;
}
/*changement par les touches du type de mode*/
if (touche==1)
{
mode++;
}
if (touche==2)
{
mode--;
}
/*mode doit etre compris entre 0 et 1*/
if (mode<0) mode=1;
if (mode>1) mode=0;
if ((entre_tor(1)==1) && (drapeau==0))
{
modes=1;
drapeau=1;
stop();
ITU_TSTR&=0x01;
}
if ((entre_tor(0)==1) && (drapeau==0))
{
modes=1;
mode=1;
drapeau=1;
repetitive();
ITU_TSTR|=0x01;
}
/*affichage selon le mode choisit*/
if (mode==0)
{
print_2l(0,0,"Dist ponctuelle " );
if (touche==4)
{
modes=0;
mode=0;
ponctuelle();
ITU_TSTR|=0x01;
}
}
if (mode==1)
{
print_2l(0,0,"Dist repetitive " );
if (touche==4)
{
modes=0;
mode=1;
repetitive();
ITU_TSTR|=0x01;
}
}
/*fonction du front montant*/
front();
break;
case 1 :
print_2l(0,7,"PASSWORD" );
sprintf(q,"%04.4i",pass);
print_2l(1,0,q);
/*deplacement du curseur vers la droite*/
if (touche==3)
{
pos++;
if (pos>3) pos=0;
if (pos==0)
{
print_2l(0,3," " );
print_2l(0,0,"_" );
}
else
{
print_2l(0,pos-1," " );
print_2l(0,pos,"_" );
}
}
/*decrementation de 1 selon la position*/
if (touche==1)
{
vale(pos,1,&pass);
}
/*incrementation de 1 selon la position*/
if (touche==2)
{
vale(pos,-1,&pass);
}
/*retour a l'ecran principal*/
if (touche==5)
{
clear_2l();
ecran=0;
break;
}
/*aller a ecran config seuil relais*/
if ((touche==4) && ((pass==password) || (pass==password_u)))
{
clear_2l();
ecran=2;
stop();
ITU_TSTR&=0xfe;
break;
}
/*mauvais mot de passe*/
if ((touche==4) && ((pass!=password) || (pass!=password_u)))
{
clear_2l();
ecran=0;
}
break;
case 2 :
print_2l(0,0,"SETUP" );
if (touche==1)
type++;
if (touche==2)
type--;
/*pour que type soit compris entre 0 et 9*/
if (type<0) type=9;
if (type>9) type=0;
/*retour a l'ecran setup*/
if (touche==5)
{
clear_2l();
ecran=0;
/*si on etait en mode 1 on relance le laser*/
if (mode==1)
{
repetitive();
ITU_TSTR|=0x01;
}
break;
}
/*aller a l'ecran selon le choix du menu*/
if ((touche==4) && (type!=9))
{
clear_2l();
ecran=3+type;
if ((ecran==4) || (ecran==9))
{
pos=0;
print_2l(0,0,"_" );
}
break;
}
/*affichage du menu*/
switch(type)
{
case 0:
print_2l(1,0,"TYPE de LASER" );
break;
case 1:
print_2l(1,0,"MOT de PASSE " );
break;
case 2:
print_2l(1,0,"PORT SERIE " );
break;
case 3:
print_2l(1,0,"NBRE de DIGIT" );
break;
case 4:
print_2l(1,0,"ECHELLE CNA " );
break;
case 5:
print_2l(1,0,"SEUIL RELAIS " );
break;
case 6:
print_2l(1,0,"ETALONNAGE " );
break;
case 7:
print_2l(1,0,"COM PC " );
break;
case 8:
print_2l(1,0,"Tps de fonct " );
break;
case 9:
print_2l(1,0,"Version 3.0" );
break;
}
break;
case 3:
/*MENU type de laser*/
print_2l(0,0,"PROXILASE" );
print_2l(1,0,"1500" );
if (touche==2)
{
clear_2l();
ecran=31;
break;
}
if (touche==5)
{
clear_2l();
ecran=2;
}
break;
case 31:
/*menu type de laser selection du time_out*/
print_2l(0,0,"TIME OUT" );
sprintf(q,"%.1f",time_out);
print_2l(1,0,q);
if (touche==1)
time_out=time_out+0.1;
if (touche==2)
time_out=time_out-0.1;
/*verifie pour time_out soit compris entre 0 et 9.9*/
if (time_out<=0) time_out=9.9;
if (time_out>9.9) time_out=0.1;
if (touche==4)
{
write_float(esclave,time_out,20);
clear_2l();
ecran=2;
}
break;
case 4:
print_2l(0,7,"PASSWORD" );
sprintf(q,"%04.4i",password);
print_2l(1,0,q);
/*deplacement du curseur vers la droite*/
if (touche==3)
{
pos++;
if (pos>3) pos=0;
if (pos==0)
{
print_2l(0,3," " );
print_2l(0,0,"_" );
}
else
{
print_2l(0,pos-1," " );
print_2l(0,pos,"_" );
}
}
if (touche==1)
{
vale(pos,1,&password);
}
if (touche==2)
{
vale(pos,-1,&password);
}
/*aller a ecran config */
if (touche==4)
{
write_int(esclave,password,26);
clear_2l();
ecran=2;
break;
}
break;
case 5:
/*menu config du port serie*/
print_2l(0,0,"Port serie" );
print_2l(1,0,"96.E.7.1" );
if (touche==5)
{
clear_2l();
ecran=2;
}
break;
case 6:
/*choix de l'unite a afficher*/
print_2l(0,0,"Digits" );
if (touche==1)
digit--;
if (touche==2)
digit++;
/*verifie digit pour qu'il soit compris entre 0 et 3*/
if (digit<0) digit=3;
if (digit>3) digit=0;
if (touche==4)
{
write_int(esclave,digit,24);
clear_2l();
ecran=2;
break;
}
/*affichage du menu*/
switch(digit)
{
case 0:
print_2l(1,0,"DEC3" );
break;
case 1:
print_2l(1,0,"DEC2" );
break;
case 2:
print_2l(1,0,"DEC1" );
break;
case 3:
print_2l(1,0,"DEC0" );
break;
}
break;
case 7:
/*menu de la config des echelles*/
print_2l(0,0,"Sortie ANA" );
if (touche==1)
ana++;
if (touche==2)
ana--;
/*pour que ana reste entre 0 et 1*/
if (ana<0) ana=1;
if (ana>1) ana=0;
/*aller au menu des echelles selon la selection*/
if (touche==4)
{
clear_2l();
ecran=71+ana;
pos=0;
print_2l(0,0,"_" );
break;
}
/*retour a l'ecran cost*/
if (touche==5)
{
clear_2l();
ecran=2;
break;
}
/*affichage du menu*/
switch(ana)
{
case 0:
print_2l(1,0,"BAS " );
break;
case 1:
print_2l(1,0,"HAUT" );
break;
}
break;
case 71:
/*reglage de l'echelle min*/
print_2l(0,12,"BAS" );
/*conversion est affichage*/
val1=(float)ech_min*0.001;
sprintf(q,"%07.3f m",(float)val1);
print_2l(1,0,q);
/*deplacement du curseur vers la droite*/
if (touche==3)
{
pos++;
if (pos>5) pos=0;
if (pos==0)
{
print_2l(0,6," " );
print_2l(0,0,"_" );
}
if (pos>=3)
{
print_2l(0,pos-1," " );
print_2l(0,pos+1,"_" );
}
else
{
print_2l(0,pos-1," " );
print_2l(0,pos,"_" );
}
}
/*incrementation ou decrementation de la valeur*/
if (touche==1)
{
valeur(pos,1,&ech_min);
}
if (touche==2)
{
valeur(pos,-1,&ech_min);
}
/*retour a l'ecran sortie ana*/
if (touche==4)
{
write_long(esclave,ech_min,4);
clear_2l();
ecran=7;
}
break;
case 72:
/*reglage de l'echelle max*/
print_2l(0,11,"HAUT" );
/*conversion est affichage*/
val1=(float)ech_max*0.001;
sprintf(q,"%07.3f m",(float)val1);
print_2l(1,0,q);
/*deplacement du curseur vers la droite*/
if (touche==3)
{
pos++;
if (pos>5) pos=0;
if (pos==0)
{
print_2l(0,6," " );
print_2l(0,0,"_" );
}
if (pos>=3)
{
print_2l(0,pos-1," " );
print_2l(0,pos+1,"_" );
}
else
{
print_2l(0,pos-1," " );
print_2l(0,pos,"_" );
}
}
/*incrementation ou decrementation de la valeur*/
if (touche==1)
{
valeur(pos,1,&ech_max);
}
if (touche==2)
{
valeur(pos,-1,&ech_max);
}
/*retour a l'ecran sortie ana*/
if (touche==4)
{
write_long(esclave,ech_max,0);
clear_2l();
ecran=7;
}
break;
case 8:
/*menu des seuils relais*/
print_2l(0,0,"Seuil des RELAIS" );
/*incrementation selon la touche appuyé*/
if (touche==1) relais++;
if (touche==2) relais--;
/*verification de relais*/
if (relais>2) relais=0;
if (relais<0) relais=2;
/*aller au menu selon la variable relais*/
if (touche==4)
{
clear_2l();
ecran=81+relais;
pos=0;
print_2l(0,0,"_" );
break;
}
/*retour a l'ecran setup*/
if (touche==5)
{
clear_2l();
ecran=2;
break;
}
/*affichage du menu*/
switch(relais)
{
case 0:
print_2l(1,0,"RELAIS 0" );
break;
case 1:
print_2l(1,0,"RELAIS 1" );
break;
case 2:
print_2l(1,0,"RELAIS 2" );
break;
}
break;
case 81:
print_2l(0,10,"Rel 0" );
/*conversion est affichage*/
val1=(float)sl_r0*0.001;
sprintf(q,"%07.3f m",(float)val1);
print_2l(1,0,q);
/*deplacement du curseur vers la droite*/
if (touche==3)
{
pos++;
if (pos>5) pos=0;
if (pos==0)
{
print_2l(0,6," " );
print_2l(0,0,"_" );
}
if (pos>=3)
{
print_2l(0,pos-1," " );
print_2l(0,pos+1,"_" );
}
else
{
print_2l(0,pos-1," " );
print_2l(0,pos,"_" );
}
}
/*incrementation ou decrementation de la valeur*/
if (touche==1)
{
valeur(pos,1,&sl_r0);
}
if (touche==2)
{
valeur(pos,-1,&sl_r0);
}
/*retour a ecran*/
if (touche==4)
{
write_long(esclave,sl_r0,8);
clear_2l();
ecran=8;
break;
}
break;
case 82:
print_2l(0,10,"Rel 1" );
/*conversion est affichage*/
val1=(float)sl_r1*0.001;
sprintf(q,"%07.3f m",(float)val1);
print_2l(1,0,q);
/*deplacement du curseur vers la droite*/
if (touche==3)
{
pos++;
if (pos>5) pos=0;
if (pos==0)
{
print_2l(0,6," " );
print_2l(0,0,"_" );
}
if (pos>=3)
{
print_2l(0,pos-1," " );
print_2l(0,pos+1,"_" );
}
else
{
print_2l(0,pos-1," " );
print_2l(0,pos,"_" );
}
}
/*incrementation ou decrementation de la valeur*/
if (touche==1)
{
valeur(pos,1,&sl_r1);
}
if (touche==2)
{
valeur(pos,-1,&sl_r1);
}
/*retour a l'ecran*/
if (touche==4)
{
write_long(esclave,sl_r1,12);
clear_2l();
ecran=8;
break;
}
break;
case 83:
print_2l(0,10,"Rel 2" );
/*conversion est affichage*/
val1=(float)sl_r2*0.001;
sprintf(q,"%07.3f m",(float)val1);
print_2l(1,0,q);
/*deplacement du curseur vers la droite*/
if (touche==3)
{
pos++;
if (pos>5) pos=0;
if (pos==0)
{
print_2l(0,6," " );
print_2l(0,0,"_" );
}
if (pos>=3)
{
print_2l(0,pos-1," " );
print_2l(0,pos+1,"_" );
}
else
{
print_2l(0,pos-1," " );
print_2l(0,pos,"_" );
}
}
/*incrementation ou decrementation de la valeur*/
if (touche==1)
{
valeur(pos,1,&sl_r2);
}
if (touche==2)
{
valeur(pos,-1,&sl_r2);
}
/*retour a ecran*/
if (touche==4)
{
/*ecriture dans la RTC*/
write_long(esclave,sl_r2,16);
clear_2l();
ecran=8;
break;
}
break;
case 9:
switch(etalon)
{
case 0:
print_2l(0,14,"0V" );
cna_max(0);
/*conversion est affichage*/
val1=(float)var_b*0.001;
sprintf(q,"%07.3f mA",(float)val1);
print_2l(1,0,q);
/*deplacement du curseur vers la droite*/
if (touche==3)
{
pos++;
if (pos>5) pos=0;
if (pos==0)
{
print_2l(0,6," " );
print_2l(0,0,"_" );
}
if (pos>=3)
{
print_2l(0,pos-1," " );
print_2l(0,pos+1,"_" );
}
else
{
print_2l(0,pos-1," " );
print_2l(0,pos,"_" );
}
}
/*incrementation ou decrementation de la valeur*/
if (touche==1)
{
valeur(pos,1,&var_b);
}
if (touche==2)
{
valeur(pos,-1,&var_b);
}
/*etalonnage du 5V*/
if (touche==4)
{
clear_2l();
pos=0;
etalon=1;
print_2l(0,0,"_" );
}
break;
case 1:
print_2l(0,14,"5V" );
cna_max(5);
/*conversion est affichage*/
val1=(float)var_a*0.001;
sprintf(q,"%07.3f mA",(float)val1);
print_2l(1,0,q);
/*deplacement du curseur vers la droite*/
if (touche==3)
{
pos++;
if (pos>5) pos=0;
if (pos==0)
{
print_2l(0,6," " );
print_2l(0,0,"_" );
}
if (pos>=3)
{
print_2l(0,pos-1," " );
print_2l(0,pos+1,"_" );
}
else
{
print_2l(0,pos-1," " );
print_2l(0,pos,"_" );
}
}
/*incrementation ou decrementation de la valeur*/
if (touche==1)
{
valeur(pos,1,&var_a);
}
if (touche==2)
{
valeur(pos,-1,&var_a);
}
/*etalonnage du 5V*/
if (touche==4)
{
clear_2l();
pos=0;
etalon=2;
}
break;
case 2:
droite_b=(float)var_b*0.001;
droite_a=((float)var_a*0.001-droite_b)/5;
cal_20=(20-droite_b)/droite_a;
cal_4=(4-droite_b)/droite_a;
droite_b=cal_4;
droite_a=(cal_20-droite_b)/5;
write_float(esclave,droite_a,28);
write_float(esclave,droite_b,32);
etalon=0;
ecran=2;
break;
}
break;
case 10:
print_2l(0,0,"COM PC" );
autoris(1,1,1);
/*retour a l'ecran cost*/
if (touche==5)
{
autoris(1,1,0);
clear_2l();
ecran=2;
break;
}
break;
case 11:
print_2l(0,0,"Temps de marche" );
read_ulong(esclave,&time,36);
sprintf(q,"%lu mn",time);
print_2l(1,0,q);
/*init a zero*/
if ((touche==4) && (pass==password_u))
{
time=0;
write_ulong(esclave,time,36);
}
/*retour a l'ecran cost*/
if (touche==5)
{
clear_2l();
ecran=2;
break;
}
break;
}
}
void main(void)
{
int t; /*variable des touches*/
int compteur_stop;
#ifdef DEV
init_it(IRQ_3);
init_it(SCI_RXI0);
init_it(SCI_ERI0);
init_it(SCI_RXI1);
init_it(SCI_ERI1);
init_it(ITU_IMIA0);
init_it(ITU_IMIA1);
#endif
/*configure en 16 bits et sur 3 états*/
ABWCR=0xf9;
WCR=0xf0;
ASTCR=0x03;
/*configure le timer 0*/
ITU_TCR0=0xA3;
ITU_TIOR0=0x88;
ITU_TIER0=0xf9;
ITU_GRA0=50000;
/*configure le timer 0*/
ITU_TCR1=0xA3;
ITU_TIOR1=0x88;
ITU_TIER1=0xf9;
ITU_GRA1=50000;
/*config RTC*/
PADDR |= 0x03; // Etat repos ( SDA = 1, SCL = 1)
PADR |= 0x03;
esclave=0x68;
/*lecture*/
read_long(esclave,&ech_max,0);
read_long(esclave,&ech_min,4);
read_long(esclave,&sl_r0,8);
read_long(esclave,&sl_r1,12);
read_long(esclave,&sl_r2,16);
read_float(esclave,&time_out,20);
read_int(esclave,&digit,24);
read_int(esclave,&password,26);
read_float(esclave,&droite_a,28);
read_float(esclave,&droite_b,32);
read_ulong(esclave,&time,36);
/*test des valeurs recupere*/
if ((password<0) || (password>9999)) password=0;
if ((digit<0) || (digit>3)) digit=0;
if ((time_out<=0) || (time_out>10)) time_out=2;
if ((ech_max<0) || (ech_max>=1000000)) ech_max=4000;
if ((ech_min<0) || (ech_min>=1000000)) ech_min=0;
if ((sl_r0<0) || (sl_r0>=1000000)) sl_r0=0;
if ((sl_r1<0) || (sl_r1>=1000000)) sl_r1=0;
if ((sl_r2<0) || (sl_r2>=1000000)) sl_r2=0;
tempo(1000);
/*init afficheur*/
/*configure l'afficheur en 2 lignes*/
config_2l(2,1);
/*efface l'ecran*/
clear_2l();
/*permet l'affichage des caractere
n'affiche pas le cursor
et ne le fait pas clignoter*/
cursor_2l(1,0,0);
/*configuration de IT reception de caractere*/
init_port(0,9600,0,1,1,0,0,0);
init_port(1,9600,0,1,1,0,0,0);
autoris(0,1,1);
autoris(1,1,0);
init_itport(0,0,1,0,0,0);
init_itport(1,0,1,0,0,0);
SCI0_SSR = 0x00;
SCI1_SSR = 0x00;
/*init des variables*/
drap=0;
compt_def=0;
etalon=0;
/*affichage ecran 0*/
ecran=0;
/*mode ponctuelle*/
mode=1;
/*mode de passe usine*/
password_u=2153;
time1=0;
/*mode pour les entrees TOR*/
modes=0;
/*init de IRQ3*/
config_touc();
set_interrupt_mask (0); //autorise les interruptions
stop();
compteur_stop=0;
donnee[0]=0;
while((compteur_stop<=1000) && (donnee[0]!='?'))
{
stop();
compteur_stop++;
}
repetitive();
ITU_TSTR|=0x03;
while(1)
{
t=touches();
def_com();
affichage(t);
aff_lase(ecran);
}
}