Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
563 connectés 

  FORUM HardWare.fr
  Programmation
  C

  aide pour modifier un petit programme avant le 21/12, 9h

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

aide pour modifier un petit programme avant le 21/12, 9h

n°2117566
gneko
Posté le 20-12-2011 à 21:17:17  profilanswer
 

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);
}
}

mood
Publicité
Posté le 20-12-2011 à 21:17:17  profilanswer
 

n°2117569
Pc_eXPert
Posté le 20-12-2011 à 21:37:44  profilanswer
 

Peut-on savoir ce que fait la fonction stop() ?
Je suis pas sûr d'avoir compris ta question. De ce que j'en ai compris, il suffirait de remplacer la ligne
while((compteur_stop<=1000) && (donnee[0]!='?'))
par
while((compteur_stop<=1000) && (donnee[0]!='g0?'))
 
Ça me paraît trop facile pour être ça. Tu peux préciser s'il te plaît ?

n°2117570
gneko
Posté le 20-12-2011 à 21:44:25  profilanswer
 

je ne sais pas ce que fait le programme exactement.
Ce que je sais c'est quand un laser s'allume il envoi "?" et le programme le lance en mesure!
et quand je branche un nouveau laser ça plante car le nouveau quand on l'allume envoi "g0?" et du coup la mise en mesure ne se fait qu'une fois sur 5.
je n'ai pas fait le programme et faut que je trouve la solution le plus vite possible

n°2117571
gneko
Posté le 20-12-2011 à 21:45:50  profilanswer
 

mais c peut etre ça la solution; je ne pourais faire le teste que demain

n°2117573
Pc_eXPert
Posté le 20-12-2011 à 21:50:43  profilanswer
 

Ouais sauf que la fonction stop() est appelée un peu partout. De toute façon, la seule ligne qui attend un '?' est celle que je t'ai donnée. J'en ai déduit que si tu attendais 'g0?', ça fonctionnerait. Y'a des chances que ce soit la bonne solution dans ce cas. Mais je ne peux pas te le garantir si ne je sais pas ce que fait stop() (ça reset des valeurs ?).

n°2117574
gneko
Posté le 20-12-2011 à 21:52:48  profilanswer
 

merci d'avoir mi le doigt la dessus; je cherchais en debut de prog!
de toute facon je je donne des news asap

n°2117577
Modération
Posté le 20-12-2011 à 21:57:43  answer
 

gneko a écrit :


je n'ai pas fait le programme et faut que je trouve la solution le plus vite possible


alors tu auras tout le temps de chercher, ban pour avoir un grand poil dans la main et pour faire faire son boulot à la place des autres.
PC Expert > merci de lire les règles qui interdisent de répondre à un topic dans lequel on demande la réalisation d'un devoir.


Aller à :
  FORUM HardWare.fr
  Programmation
  C

  aide pour modifier un petit programme avant le 21/12, 9h

 

Sujets relatifs
AIDE script bash avec en sortie, arborescence navigableaide pour 1er partie c++
Petit problème de regexpecrire un programme (pascal) qui calcule X puissance n ?!!!
[MySQL] Urgent, PB export dans la BDD !Help besoin d'aide pour un exercie logique
Besoin d'aide svpSélectionner, récuérer, modifier des notes de bas de pages
programme de suite en javaAide pour un noob
Plus de sujets relatifs à : aide pour modifier un petit programme avant le 21/12, 9h


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR