قسم الميكروكنترولر والروبوت ودوائر الاتصال بالحاسب الالي قسم المتحكمات الـ microcontroller و المعالجات microprocessor و التحكم الرقمي بالكمبيوتر CNC والانظمة الآلية والروبوت Robots

أدوات الموضوع

الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,688
نشاط [ حسن هادي محمود ]
قوة السمعة:135
قديم 23-05-2014, 08:58 AM المشاركة 1   
ha مشكله في انتربت عن طريق portb Twitter FaceBook Google+



السلام عليكم
ظهرت لي مشكله غريبه وهي اذا افعل تايمر 0 واجعل RB0 على انه دخل وضعت كود انتربت عن طريق RBO ولكن لم أقم بتفعيل هذه مقاطعه فعند محاكاه أجد الكود يعمل وعندما اتفحص ريجيسترات البيك اجد انه بت خاصه بمقاطعه عبر RB0 غير مفعل فأين مشكله
هذا هو كود بسيط جدا
كود:
//Timer0
//Prescaler 1:16; TMR0 Preload = 6; Actual Interrupt Time : 2 ms

//Place/Copy this part in declaration section
void InitTimer0(){
  OPTION_REG         = 0x83;
  TMR0                 = 6;
  INTCON         = 0xA0;
}

void Interrupt(){
 [ if(INTF_bit)
          {
           INTF_bit=0;
           portd++;
          
          }

  if (TMR0IF_bit){
    TMR0IF_bit         = 0;
    TMR0                 = 6;
    //Enter your code here
  }
}


void main() 
{
 trisd=0;
 trisb=1;
 portd=0;
 adcon1=6;
 InitTimer0();//enable only tmr0
 INTF_bit=0;
 while(1)
          {

          }
 
}
تلاحظون كود بلون احمر يخص مقاطعه خارجيه عبر RB0 ولكن كود يعمل بدون ان افعل بت مقاطعه ومن مفروض لايعمل

http://arabsh.com/files/0c32444964f4/انتربت-rar.html

اعلانات

الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,688
نشاط [ حسن هادي محمود ]
قوة السمعة:135
قديم 23-05-2014, 09:42 AM المشاركة 2   
افتراضي


طبعا لاحظت ان INTF_bit يصبح =1 حتى وان لم أفعل مقاطعه الانتربت طبعا بشروط وجود نبضه على RB0

طبعا ليست مشكله في الكود فيمكن حله بكتابه هذا الكود
كود:
if(INTF_bit==1 && INTE_bit==1)
          {
           INTF_bit=0;
           portd++;
          
          }
اعتقد ان هذا flag ليس له علاقه بأنتربت يعني عند أستخدام RB0 كدخل قيمه INTF_bit=1

لاني عندما جعلته خرج بقى INTF_bit=0

اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )
  

الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,688
نشاط [ حسن هادي محمود ]
قوة السمعة:135
قديم 23-05-2014, 10:05 AM المشاركة 3   
افتراضي


جربت وضعت pulse على RB4 لاحظت بدون تفعيل انتربت يصبح RBIF_bit=1

لاحظو هذا الكود طبعا موجود في امثله مايكروسي
كود:
void interrupt(){              // Interrupt rutine

  if(RBIF_bit == 1 ) {         // Checks for Receive Interrupt Flag bit
    flag  = 1;                 // Set local interrupt flag
    RBIF_bit = 0;              // Clear Interrupt Flag
    if (PORTB.F7 == 1){        // Checks if the RB7 is pressed
       pressedButton = 7;
    }
    if (PORTB.F6 == 1){        // Checks if the RB6 is pressed
       pressedButton = 6;
    }
    if (PORTB.F5 == 1){        // Checks if the RB5 is pressed
       pressedButton = 5;
    }
    if (PORTB.F4 == 1){        // Checks if the RB4 is pressed
       pressedButton = 4;
    }
  }
}


hamzazayyad
:: مهندس متميز ::
تاريخ التسجيل: Aug 2005
الدولة: موزنبيق
المشاركات: 701
نشاط [ hamzazayyad ]
قوة السمعة:0
قديم 23-05-2014, 11:00 AM المشاركة 4   
افتراضي


جربت وضعت pulse على RB4 لاحظت بدون تفعيل انتربت يصبح RBIF_bit=1

لاحظو هذا الكود طبعا موجود في امثله مايكروسي
كود:
void interrupt(){              // Interrupt rutine

  if(RBIF_bit == 1 ) {         // Checks for Receive Interrupt Flag bit
    flag  = 1;                 // Set local interrupt flag
    RBIF_bit = 0;              // Clear Interrupt Flag
    if (PORTB.F7 == 1){        // Checks if the RB7 is pressed
       pressedButton = 7;
    }
    if (PORTB.F6 == 1){        // Checks if the RB6 is pressed
       pressedButton = 6;
    }
    if (PORTB.F5 == 1){        // Checks if the RB5 is pressed
       pressedButton = 5;
    }
    if (PORTB.F4 == 1){        // Checks if the RB4 is pressed
       pressedButton = 4;
    }
  }
}
اخ حسن كما تعلم للانتربت اي المقاطعه يوجد بت تفعيل وبت مؤشر enable bit and flag bit
فوظيفه enable bit هي تنفيد امر المقاطعه عند حدوثها اما flag bit فوظيفته هي الدلاله على حدوت الشي المراد مراقبته وليس له علاقه بتفعيل بت المقاطعه
فمتلا لو كنا نريد التعامل مع تايمر زيرو يجب اولا مسح flage bit ومن تم نبدا بادخال النبضات على تايمر زيرو وتم وصول العد الى 255 +1 فستصبح قيمه المؤشرflag bit تساوي واحد

بالتوفيق اخي


التعديل الأخير تم بواسطة : hamzazayyad بتاريخ 23-05-2014 الساعة 11:05 AM

الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,688
نشاط [ حسن هادي محمود ]
قوة السمعة:135
قديم 23-05-2014, 11:20 AM المشاركة 5   
افتراضي


اخ حسن كما تعلم للانتربت اي المقاطعه يوجد بت تفعيل وبت مؤشر enable bit and flag bit
فوظيفه enable bit هي تنفيد امر المقاطعه عند حدوثها اما flag bit فوظيفته هي الدلاله على حدوت الشي المراد مراقبته وليس له علاقه بتفعيل بت المقاطعه
فمتلا لو كنا نريد التعامل مع تايمر زيرو يجب اولا مسح flage bit ومن تم نبدا بادخال النبضات على تايمر زيرو وتم وصول العد الى 255 +1 فستصبح قيمه المؤشرflag bit تساوي واحد

بالتوفيق اخي
السلام عليكم
كلامك صحيح

شكرا جزيلا على توضيح معلومه

إضافة رد

العلامات المرجعية

«     الموضوع السابق       الموضوع التالي    »
أدوات الموضوع

الانتقال السريع إلى


الساعة معتمدة بتوقيت جرينتش +3 الساعة الآن: 02:39 PM
موقع القرية الالكترونية غير مسؤول عن أي اتفاق تجاري أو تعاوني بين الأعضاء
فعلى كل شخص تحمل مسئولية نفسه إتجاه مايقوم به من بيع وشراء وإتفاق وأعطاء معلومات موقعه
التعليقات المنشورة لا تعبر عن رأي موقع القرية الالكترونية ولايتحمل الموقع أي مسؤولية قانونية حيال ذلك (ويتحمل كاتبها مسؤولية النشر)

Powered by vBulletin® Version 3.8.6, Copyright ©2000 - 2025