Bonsoir a tous,dans le cadre d'un project,je dois absolument utiliser le pic 16f876a pour qu'il me fournisse un signal rectangulaire au l'alentour de 40KHz,(j'aurai preferé l'utilisation d'un astable ce qui m'aurait semblé plus simple,mais mon professeur me l'a imposé ),
Et j'ai un deuxieme soucis.
je communique entre 2 pic (16f876a) par voie hertzienne en utilisant un emetteur rt4-433 et un recepteur,et suivant ce qu'envoie le premier pic(la lettre 'A' ou 'B'),le second pic ecrit sur le LCD(hd44780).Donc le probleme est qu'il ne marche pas,je l'ai pourtant testé avec hyper terminal et IAR Embedded et cela fonctionne tres bien. Cela provient t'il peut etre de la connexion du lcd au PIC?
Je vous laisse le 1er programme(celui du premier pic):
///////////////////////////////////////////////////////////////////
#include<io16f876a.h> // Prototype
#pragma vector=0x04 //set a Interrupt vector
void serial_intial_trans(void);
void serial_intial_rec(void);
void serial_putchar(unsigned char cD);
void Small_Delay(void);
unsigned char words[]={"AB"};
int i,j,cD,m;
void main(void)
{
serial_intial_trans(); //Initialisation of transmission
serial_intial_rec(); // Iniatilisation of reception
TRISB=0xC0;
PORTB=0x00;
while(1)
{
if(RB7)
{
Small_Delay(); // eviter les anti-rebounds
while(RB7);
serial_putchar(0x41); // A en hexa
}
if(RB6)
{
Small_Delay();
while(RB6);
serial_putchar(words[1]);// B en hexa
}
}
}
//Config for the Transmission TXSTA and RXSTA //
void serial_intial_trans(void)
{
SYNC=0;
BRGH=1;
SPEN=1; //serial port enabled
SPBRG=20; //9600 baud
TXIE=0; //Disable interruption
TX9=0; //8-bit transmission
TXEN=1; //set baud rate to high BRGH=1 and TXEN=1
}
void serial_putchar(unsigned char cD)
{
while(TXIF!=1); // If 1,emission register is empty,so we go out the loop
TXREG=cD; //We place the character cD to send in the TXREG register
RCIE=1; //Enabling Reciever interrupt
the data cD
TXIF=0; // Disabling Transmission flag
}
void serial_intial_rec(void)
{
SYNC=0;
RX9=0;
SPEN=1;
BRGH=1;
SPBRG=20;
RCIE=1; //Enable interupt.
CREN=1; //continuous recieve enable bit.
}
void Small_Delay(void)
{
unsigned int j;
for(j=0;j<32000;j=j+1); // do it until J reach 32000
return;
}
//////////////////////////////////////////////////////////////////
Voici le programme du second PICreception et ecriture sur LCD)
#include<io16f876a.h> // Prototype
#include"LCDdrive.h"
void delay(unsigned char t);
unsigned char mymodule[]={"In Living Room"};
unsigned char mymodule1[]={"You'Re Outside"};
unsigned char mymodule2[]={"Be careful!"};
int m,cst,i,t,j;
void main(void)
{
OPTION=0x07; /*set prescaler to 256*/
TRISA=0x00;
TRISB=0x00;
PORTA=0;
PORTB=0;
TRISC=0x80;
SPBRG=20;
TXSTA=0x04;
RCSTA=0x90;
LCD_initialise();
for(;
{
if(RCIF==1) // when the octet is sent RCIF goes to 1,PORTB take the value of RCREG
{
PORTA=RCREG;
if(RCREG==0x41) // = A
{
LCD_clear();
LCD_cursor(i,0); /*move the cursor to the 1st line*/
LCD_puts(mymodule);
}
if(RCREG==0x42) // = B
{
LCD_clear();
LCD_cursor(i,0); /*move the cursor to the 1st line*/
LCD_puts(mymodule1);
delay(5);
LCD_clear();
LCD_cursor(i,0); /*move the cursor to the 1st line*/
LCD_puts(mymodule2);
for (j=0;j<5;j++) // une DEL s'allume pour l'alerte
{
PORTA=0x01;
delay(1);
PORTA=0x00;
delay(1);
}
}
}
RCIF=0;
}
}
void delay(unsigned char t) /*delay function*/
{
int a,b;
for(a=0;a<t;a++)
{
for(b=0;b<8;b++)
{
TMR0=0; //clear TMRO
while(TMR0-200); //wait for a while
}
}
}
Es ce que quelqu'un pourrait m'aider svp?
-----