|
شكرا اخي وفقك الله لما يحب ويرضى
|
السلام عليكم
تفضل أخي هذه ملفات
http://up.top4top.net/downloadf-top4...e0351-rar.html
ملاحظه ليد مربوط على RB0_bit له عده مهام
1- عند بدايه التشغيل يضيئ لمده 1 ثانيه ثم ينطفئ لدلاله على لكتمال عمليه التهيئه بنجاح
2- عند الارسال البيانات او استقبالها يضي وينطفئ لدلاله على انتهاء من ارسال البيانات او انتهاء من قراءه البيانات
هذا ليد فقط لتحديد مشاكل ولايؤثر على عمل البرنامج
ملاحظه// لكي يتحكم اي slave بأخر يجب ان يرسل بيانات الى ماستر ومن ثم يقوم ماستر بأرسال البيانات الى slave يعني ماستر هو واسطه بين slave واخر
لذا تجد بالكود في slave1 انه اذا تم الضغط على سويج سوف يرسل البيانات طبعا أخبرته ارسل 0x11 الى ماستر ومن ثم يقوم ماستر بتفحص البيانات فاذا كانت = 0x11 يعني يريد slave1 مخاطبه slave2 فيقوم ماستر بأرسال شفره الى slave2 وطبعا شفره التحكم ب ليد هي 0x55
تحياتي الطيبه لكم
كود ماستر
كود:
sbit rs485_rxtx_pin at RA0_bit;
sbit rs485_rxtx_pin_direction at TRISA0_bit;
sbit sw1 at RA1_bit;
sbit sw1_dir at TRISA1_bit;
sbit led_init at RB0_bit;
sbit led_init_dir at TRISB0_bit;
char valeur_RS[10];
void interrupt()
{
RS485Master_Receive(valeur_RS);
}
//*******************************************************//
void main()
{
ADCON1=6;
sw1_dir=1;
led_init_dir=0;
led_init=0;
UART1_Init(19200);
Delay_ms(100) ;
RS485Master_Init();
Delay_ms(100) ;
valeur_RS[0] = 0;
valeur_RS[1] = 0;
valeur_RS[2] = 0;
valeur_RS[4] = 0;
valeur_RS[5] = 0;
valeur_RS[6] = 0;
valeur_RS[7] = 0;
RCIE_bit = 1;
TXIE_bit = 0;
PEIE_bit = 1;
Delay_ms(100) ;
led_init=1;
delay_ms(1000);
led_init=0;
GIE_bit = 1;
while(1){
if(sw1 ==0)
{
led_init=1;
valeur_RS[0] = 0x55; // this random code can be change
RS485Master_Send(valeur_RS,1,161);
Delay_ms(250) ;
led_init=0;
}
if(valeur_RS[4]==255)
{
led_init=1;
valeur_RS[4]=0;
if( valeur_RS[0]==0x11)
{
valeur_RS[0]=0x55;
RS485Master_Send(valeur_RS,1,161);
}
Delay_ms(250) ;
led_init=0;
}
}
}
كود slave1
كود:
sbit rs485_rxtx_pin at RA0_bit;
sbit rs485_rxtx_pin_direction at TRISA0_bit;
sbit sw1 at RA1_bit;
sbit sw1_dir at TRISA1_bit;
sbit led_init at RB0_bit;
sbit led_init_dir at TRISB0_bit;
char valeur_RS_2[9];
void interrupt() {
RS485Slave_Receive(valeur_RS_2);
}
void main() {
adcon1=6;
sw1_dir=1;
led_init_dir=0;
led_init=0;
UART1_Init(19200);
Delay_ms(100);
RS485Slave_Init(160);
valeur_RS_2[4] = 0;
valeur_RS_2[5] = 0;
valeur_RS_2[6] = 0;
RCIE_bit = 1;
TXIE_bit = 0;
PEIE_bit = 1;
GIE_bit = 1;
led_init=1;
delay_ms(1000);
led_init=0;
while(1)
{
if(sw1==0)
{
led_init=1;
valeur_RS_2[0]=0x11;
RS485Slave_Send( valeur_RS_2,1);
delay_ms(250);
led_init=0;
}
}
}
كود slave2
كود:
sbit rs485_rxtx_pin at RA0_bit;
sbit rs485_rxtx_pin_direction at TRISA0_bit;
sbit led1 at RB1_bit;
sbit led1_dir at TRISB1_bit;
sbit led_init at RB0_bit;
sbit led_init_dir at TRISB0_bit;
char valeur_RS_2[9] , data_flag=0;
//*******************************************************************//
void interrupt() {
RS485Slave_Receive(valeur_RS_2);
}
//********************************************************************//
void main()
{
adcon1=6;
led1_dir=0;
led_init_dir=0;
led1=0;
led_init=0;
UART1_Init(19200);
Delay_ms(100);
RS485Slave_Init(161);
valeur_RS_2[4] = 0;
valeur_RS_2[5] = 0;
valeur_RS_2[6] = 0;
RCIE_bit = 1;
TXIE_bit = 0;
PEIE_bit = 1;
led_init=1;
delay_ms(1000);
led_init=0;
GIE_bit = 1;
while(1)
{
if(valeur_RS_2[4]==255)
{
led_init=1;
valeur_RS_2[4]=0;
if(valeur_RS_2[0]==0x55)data_flag=1;
if (data_flag==1)
{
led1=~led1;
data_flag=0;
}
delay_ms(250);
led_init=0;
}
}
}