bon soir,
j'ai ecrivé ce programme en picc.je doit entrer a ce programme un nombre de largeur max 32 bit (en binaire).mon programme faire la conversion en decimale du nombre entrer "T";le resultat de la conversion est enregistrer dans la variable "S".
le circuit est realisé sur isis et le programme est ecrit en picc,la simulation fonctionne bien si le nombre entrer (T) est <255 c'est a dire que la sortie B1 du port B reste jusqu'a la fin du boucle S (jusqu'a S=0).le problème apparaît si le nombre entrer dépasse la valeur 255malgré que ce dernier est déclarer sur INT 32 (4 octets).
programme:
#include <16F877.h>
#include <stdlib.h>
#use delay(clock=20000000)
#use rs232(baud=9600,parity=N,xmit= PIN_C6, rcv=PIN_C7,bits=8)
#FUSES WDT, XT, NOPUT, NOPROTECT, NOBROWNOUT, LVP, NOCPD, NOWRT, NODEBUG
char T[5];
int32 S,cmpt=0;
int sortie=1,L;
#int_CCP1
void CCP1_isr()
{
CCP_1=CCP_1+2500; // CCP=1/(2*F*4*PR*1/FH)
sortie^=1;
output_bit(PIN_B0,sortie);
output_bit(PIN_B1,0);
if (S!=0)
{
s--;
output_bit(PIN_B1,1);
}
}
void main()
{
setup_timer_1(T1_INTERNAL|T1_D IV_BY_2);
setup_ccp1(CCP_COMPARE_INT);
enable_interrupts(INT_CCP1);
enable_interrupts(GLOBAL);
while(1)
{
printf(" \n\r donne nb de toure");
gets(T);
PUTS(T);
L=strlen(T);
if(L==1)
S=(T[L-1]-0x30);
else
if(L==2)
S=(T[L-1]-0x30)+((T[L-2]-0x30)*10);
else
if(L==3)
S=(T[L-1]-0x30)+((T[L-2]-0x30)*10)+((T[L-3]-0x30)*100);
else
if(L==4)
S=(T[L-1]-0x30)+((T[L-2]-0x30)*10)+((T[L-3]-0x30)*100)+((T[L-4]-0x30)*1000);
}
}
s'il vous plait si quelqu'un peut m'aider a resoudre ce probleme.
je veux que la sortie B1 reste activé durant la periode que j'ai entre (entre 0x00000000 et 0xffffffff (int 32).
Merci d'avance.![]()
-----