|
استعملت MAX485 أخ حسن أنا متاكد أن هاردوير ليس فيه مشكل لان لو كان فيه مشكلة لا ضهرت من الأول مشكلة في كود SLAVE وهو 16F628A
أجرب مباشرةً فالواقع لن بروتوس في بعض الأحيان يعطي نتائج خاطة
|
اذن أخي جرب هذه الاكواد ثم أعطينا نتيجه
ملاحظه مهمه // تردد كرستاله 4 ميكا والبك هو 16f876A في حاله وجود مشكله في تردد ارجو اخباري للتعديل
كود ماستر
كود:
sbit rs485_rxtx_pin at RA0_bit;
sbit rs485_rxtx_pin_direction at TRISA0_bit;
char valeur_RS[10];
void interrupt()
{
RS485Master_Receive(valeur_RS);
}
//*******************************************************//
void main(){
TRISB5_bit=0;
TRISB4_bit=0;
RB5_bit=0;
RB4_bit=0;
ADCON1=0;
CMCON=7;
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;
GIE_bit = 1;
Delay_ms(100) ;
RB4_bit=1;
RB5_bit=1;
Delay_ms(300) ;
RB4_bit=0;
RB5_bit=0;
while(1){
//Delay_ms(1000);
RS485Master_Send(valeur_RS,1,160);
Delay_ms(500) ;
if(valeur_RS[4])
{
valeur_RS[4] = 0;
valeur_RS[5] = 0;
if(valeur_RS[0]==1)
{
RB5_bit=1;
Delay_ms(100) ;
RB5_bit=0;
}
}
//Delay_ms(10);
RS485Master_Send(valeur_RS,1,161);
Delay_ms(500) ;
if(valeur_RS[4])
{
valeur_RS[4] = 0;
valeur_RS[5] = 0;
if(valeur_RS[0]==2)
{
RB4_bit=1;
Delay_ms(100) ;
RB4_bit=0;
}
}
}
}
**************************************************
الكود slave1
كود:
sbit rs485_rxtx_pin at RA0_bit;
sbit rs485_rxtx_pin_direction at TRISA0_bit;
char valeur_RS_2[9];
void interrupt() {
RS485Slave_Receive(valeur_RS_2);
}
void main() {
TRISB0_bit=0;
RB0_bit=0;
CMCON=7;
T2CON = 0;
TMR2 = 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;
do
{
if(valeur_RS_2[4]==255)
{
valeur_RS_2[4] = 0;
valeur_RS_2[5] =0;
valeur_RS_2[0]=1;
valeur_RS_2[1]=5;
valeur_RS_2[2]=20;
RB0_bit=1;
Delay_ms(100);
RB0_bit=0;
RS485Slave_Send( valeur_RS_2,3);
}
}while(1);
}
************************************************** ****
الكود slave2
كود:
sbit rs485_rxtx_pin at RA0_bit;
sbit rs485_rxtx_pin_direction at TRISA0_bit;
char valeur_RS_2[9];
//*******************************************************************//
void interrupt() {
RS485Slave_Receive(valeur_RS_2);
}
void main() {
TRISB0_bit=0;
RB0_bit=0;
CMCON=7;
T2CON = 0;
TMR2 = 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;
GIE_bit = 1;
do {
if(valeur_RS_2[4]==255)
{
valeur_RS_2[4] = 0;
valeur_RS_2[5] =0;
valeur_RS_2[0]=2;
valeur_RS_2[1]=5;
valeur_RS_2[2]=20;
RB0_bit=1;
Delay_ms(100);
RB0_bit=0;
RS485Slave_Send( valeur_RS_2,3);
}
}while(1);
}
حيث زدت عناصر المصفوفه لانك لو تلاحظ مثال الموجود في مايكروسي برو للمكتبه RS485 مختار في ماستر عدد عناصر مصفوفه 10 وليست 8 وكذلك في slave عناصر مصفوفه 9 بدلا من 8 ولربما هذا هو سبب رئيسي في ظهور stack وللعلم stack تظهر عندما لم يجد مايكرو مكان لحجز العنصر مثلا مصفوفه 8 عناصر وانت وضعت لوب 10 عناصر فمايكرو ماراح يجد عنصر 9 و10 ابدا
جرب الكود واعطينا خبر وان شالله يعمل معاك