begin process at 2012 05 29 03:29:27
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Algorithme

 > 

Compression, Split & Cryptage

 > 

gestion de 2 liaisons séries avec PIC16F877


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

gestion de 2 liaisons séries avec PIC16F877

lundi 3 mai 2010 à 12:49:22 | gestion de 2 liaisons séries avec PIC16F877

eminem2010

Salut à tous!
je voudrais gérer 2 liaisons séries du PIC16F877 avec interruptions.
Mon code source ci-dessous fonctionne de la manière suivante:
Le pic regarde l'état de ses ports d'entrée(pinD0 et pinD1),si pinD0 est à 1 le port de sortie pinB1 passe à 1 et s'il est 0 pinB1 passe à 0. Simultanément les messages (pinB1 est à 1 ou pinB1 est à 0 ) selon l'état des ports d'entrée doit être envoyer sur 2 liaisons séries (xmit=PIN_B6,rcv=PIN_B0 reçu par une siemens C35 et xmit=PIN_C6,rcv=PIN_C7 reçu par un ORDINATEUR)
De même si pinD1 est à 1 le port de sortie pinB2 passe à 1 et s'il est 0 pinB2 passe à 0.
jusqu'ici ça fonctionne très bien, mais mon véritable problème se pause quand la siemens C35 veux envoyer un caractère au pic,le pic ne reçoit rien, mais quand j'envoie ce caractère par l'ordinateur le pic reçoit bien et exécute l'instruction que je lui demande.
Pour moi, je pense que le problème se pause au niveau de la gestion des deux liaisons séries que j'utilise et les interruptions.
S'il vous plaît aidez moi

voici mon code.C

#include "C:\Documents and Settings\Bernard The Gamorax\Bureau\BON\main.h"
#include <stdio.h>
#include <string.h>
#ZERO_RAM
#int_RDA
void RDA_isr(void)
{
gets(string);

}


void main()
{

setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
enable_interrupts(INT_RDA);
enable_interrupts(GLOBAL);

// TODO: USER CODE!!

initGSm();
AT();


CONFIGSMS(); //Indication automatique SMS

P:
do{

if(niveau1==0 )

{



if( input(PIN_D0)==1 )
{
output_high(PIN_B1);
if(r0==1)
{printf("pinB1 à 1\r\n");r0--;}
if(m0==0)
{ENVOIESMSR0();m0++;}
}

else
{output_low(PIN_B1);
if(r0==0)
{printf("pinB1 à 0\r\n");r0++;}
if(m0==1){m0--;}
}



if( input(PIN_D1)==1 )
{
output_high(PIN_B2);
if(r1==1)
{printf("PIN_B2 à 1\r\n");r1--;}
if(m1==1)
{ENVOIESMSR1();m1--;}
}
else
{output_low(PIN_B2);
if(r1==0)
{printf("PIN_B2 à 0\r\n");r1++;}
if(m1==0){m1++;}
}




}

}

}while(!string[0]);



if( string[0]=='O' )
{
output_high(PIN_B1);
niveau1=1;
if(r0==1)
{printf("PinB1 à 1\r\n");r0--;}
if(m0==0)
{ENVOIESMSR0();m0++;}
}



if( string[0]=='1' )
{
output_high(PIN_B2);
niveau1=1;
if(r1==1)
{printf("PIN_B2 à 1\r\n");r1--;}
if(m1==1)
{ENVOIESMSR1();m1--;}
}



#use rs232(baud=9600,parity=N,xmit=PIN_B6,rcv=PIN_B0,bits=8)

if( string[0]=='0' )
{
#use rs232(baud=9600,parity=N,xmit=PIN_B6,rcv=PIN_B0,bits=8)
output_high(PIN_C5);

ATD1();
delay_ms(3000);
ATH ();
#use rs232(baud=9600,parity=N,xmit=PIN_B6,rcv=PIN_B0,bits=8)
//goto P;
}
#use rs232(baud=9600,parity=N,xmit=PIN_B6,rcv=PIN_B0,bits=8)
else //MODEM NON CONNECTE
{
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
LEDCMD();

}

goto p;


}

voici mon code.C

#include <16F877.h>
#device adc=8

#FUSES NOWDT //No Watch Dog Timer
#FUSES HS //High speed Osc (> 4mhz)
#FUSES NOPUT //No Power Up Timer
#FUSES PROTECT //Code protected from reads
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD //No EE protection
#FUSES NOWRT //Program memory not write protected
#FUSES NODEBUG //No Debug mode for ICD

#use delay(clock=20000000)
#use rs232(baud=9600,parity=N,xmit=PIN_B6,rcv=PIN_B0,bits=8)

char string[1];
int m0=0;
int m1=1;
int r0=1;
int r1=1;
int niveau1=0;
char buffer [16] ;


char appel []="ATD74580411;\r";
int i;

//CLIGNOTER LA DIODE


void LEDCMD()
{
output_high(PIN_C5);
delay_ms( 300 );
output_low(PIN_C5);
delay_ms( 300 );
}

/*INITIALISATION DU MODEM GSM*/
void initGSm()
{
#use rs232(baud=9600,parity=N,xmit=PIN_B6,rcv=PIN_B0,bits=8)
PUTS("ATZ\r"); // ATZ RESET MODEM
PUTS ("ATE0\r"); //ATE0
PUTS ("ATV\r");
#use rs232(baud=9600,parity=N,xmit=PIN_B6,rcv=PIN_B0,bits=8)
}


//TEST DE LA PRESENCE DU MODEM
void AT()
{
#use rs232(baud=9600,parity=N,xmit=PIN_B6,rcv=PIN_B0,bits=8)
PUTS ("AT\r");
//#use rs232(baud=9600,parity=N,xmit=PIN_B6,rcv=PIN_B7,bits=8)
}
//RACROCHAGE AUTOMATIQUE
void ATH ()
{
#use rs232(baud=9600,parity=N,xmit=PIN_B6,rcv=PIN_B0,bits=8)
PUTS ("ATH\r");
//#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
}


//CONFIGURATION DU MODEM POUR LES SMS
void CONFIGSMS ()
{
#use rs232(baud=9600,parity=N,xmit=PIN_B6,rcv=PIN_B0,bits=8)
PUTS("AT+CMGF=0\r"); //MODE PDU ACTIF
PUTS ("AT+CNMI=1,1\r"); //Detection nouveau SMS
//#use rs232(baud=9600,parity=N,xmit=PIN_B6,rcv=PIN_B7,bits=8)
}

//CONFIRMATION PAR APPEL: Numero unique: 74 58 04 11
void ATD1 () //OK
{
#use rs232(baud=9600,parity=N,xmit=PIN_B6,rcv=PIN_B0,bits=8)
PUTS (appel);
//#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
}

//envoie SMS
void ENVOIESMSR0()
{
#use rs232(baud=9600,parity=N,xmit=PIN_B6,rcv=PIN_B0,bits=8)
printf("AT+CMGF=0\r\n");
delay_ms(500);
printf("AT+CSMS=0\r\n");
delay_ms(500);
printf("AT+CMGS=31\r\n");
delay_ms(500);
printf("0011000891478540110000AA15D2E2B008A516AB52100C5474829A41E9105904\r\n");
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
}

void ENVOIESMSR1()
{
#use rs232(baud=9600,parity=N,xmit=PIN_B6,rcv=PIN_B0,bits=8)
printf("AT+CMGF=0\r\n");
delay_ms(500);
printf("AT+CSMS=0\r\n");
delay_ms(500);
printf("AT+CMGS=31\r\n");
delay_ms(500);
printf("0011000891478540110000AA15D2E2B008A516AB52500C5474829A41E9105904\r\n");
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
}

NB:je rappelle que j'ai simuler le fonctionnement avec ISIS PROTEUS donc l'ordinateur et la siemens étaient représentés des virtual terminal


Cette discussion est classée dans : use, rs232, pin, rcv, xmit


Répondre à ce message

Sujets en rapport avec ce message

Visual C++ 6.0 [ par acsx ] Salut,Comment déterminer quel type de use run-time library il faut utiliser dans un projet visual C++? (Project/Settings/C/C++/Code Generation/Use run net use * /delete EN C++ [ par LeBobo ] Salut. J'ai un petit programme qui utilise la fonction : system(''net use * /delete'') ; Le problème est que mon programme à une interface graphique w bug sur rs232 [ par yo972 ] salut !j'ai réalisé un programme sur la rs232 sur C++Builder,je dois envoyer un chiffre sur la ligne rs232.j'ai réussi à l'exécuter une fois mais aprè Liaison série RS232 [ par NerOcrO ] Je cherche des programmes pour m'aider à programmer sur la liaison série RS232 en DOS. RS232 [ par bryg ] Salut,Comment mettre en place une liaison RS232 entre 2 PC.Merci de l'aide voici mon E-Mail: nofrifr@yahoo.fra+. com serie RS232 [ par hotrod1 ] Y'a t il quelqu'un qui saurait programmer la lecture / écriture d'un port serie rs232 sous visual c++ 6 , et sous win 2000 ???Sinon, si c'est possible com serie rs232 [ par hotrod1 ] Y'a t il quelqu'un qui saurait programmer la lecture / écriture d'un port serie rs232 sous visual c++ 6 , et sous win 2000 ???Sinon, si c'est possible com serie rs232 . [ par hotrod1 ] Y'a t il quelqu'un qui saurait programmer la lecture / écriture d'un port serie rs232 sous visual c++ 6 , et sous win 2000 ???Sinon, si c'est possible thread et RS232 [ par icarus13 ] Quelqu'un peut m'aider ? Je dois lancer plusieurs thread à la fois dont qui envoie un tableau par la liaison série !Merci !Yan thread et RS232 [ par icarus13 ] Quelqu'un peut m'aider ? Je dois lancer plusieurs thread à la fois dont un qui envoie un tableau par la liaison série !Merci !Yan


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,187 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales