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

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

الصورة الرمزية ابو عبدالله77
ابو عبدالله77
:: مهندس متواجد ::
تاريخ التسجيل: Mar 2009
المشاركات: 69
نشاط [ ابو عبدالله77 ]
قوة السمعة:0
قديم 17-05-2011, 03:42 AM المشاركة 1   
افتراضي مساعده في هذه المقاطعة Twitter FaceBook Google+



السلام عليكم لماذا لاتحدث مقاطعة في هذا الكود ماهو الخطاء







كود:
void interrupt()

{ if(porta.f0==0){  portb=0b11111111;delay_ms(100);}



Intcon.f1=0; }


void main ()
{  TRISA=0B11111111;  TRISB=0b00000001; PORTB=0b00000000;
      while (1)  { PORTB=0b00000000;delay_ms(500);
    PORTB=0b11111111;delay_ms(500);  }


Intcon=0b10011000;
Option_reg=0b11000000; }

اعلانات

الصورة الرمزية moi12
moi12
:: مهندس متواجد ::
تاريخ التسجيل: Sep 2008
الدولة: المغرب
المشاركات: 65
نشاط [ moi12 ]
قوة السمعة:0
قديم 17-05-2011, 05:25 AM المشاركة 2   
angry


بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله

اخي الكريم المقاطعة تحدث على الرجل pin لB0 وليس pin A0

الخطا الذي ارتكبته هو كتابة if(porta.f0==0 عوض كتابة if(portb.f0==0)

في كود المقاطعة التالي
void interrupt()

{ if(porta.f0==0){ portb=0b11111111;delay_ms(100);}



Intcon.f1=0; }

كما لا اري داع لتفعيل المقاطعات على ال pin B4, B5, B6, B7
ان لم تكن بحاجة لها Intcon=0b10010000

كما يفضل ترتيب الكود بكتابةالامرين
Intcon=0b10011000;
Option_reg=0b11000000;
بعد TRISA,TRISb...

وبخصوص باقي الكود

سيحدث عندك تداخل لان استخدمت الpin b0 كمقاطعة و كخرخ يجب الانتباه لذلك


--------------------------
هذا موضوع مهم عن المقاطعات ارجو مراجعته
http://www.qariya.com/vb/showthread.php?t=46338

والسلام عليكم ورحمة الله

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

الصورة الرمزية ابو عبدالله77
ابو عبدالله77
:: مهندس متواجد ::
تاريخ التسجيل: Mar 2009
المشاركات: 69
نشاط [ ابو عبدالله77 ]
قوة السمعة:0
قديم 17-05-2011, 06:29 PM المشاركة 3   
افتراضي


السلام عليكم شكرا يااخي وبارك الله فيك تم تعديل الكود ادناه
ولاكن عند انتهاء المقاطعة لايعود الى البرنامج الرئيسي وتبقى
الليدات مطفاءه في برنامج البترونس



كود:
     char n;
void interrupt()
{ if(portb.f0==0){for(n=0;n<5;n++)
{ portb=0xff;delay_ms(300);
 portb=0; delay_ms(300); }  }


Intcon.f0=0; }


    void main ()
    { Intcon=0b10010000;
    Option_reg=0b10000000;
  TRISA=0xff;  TRISB=0b00000001; PORTB=0;

  while (1)  { PORTB=0;delay_ms(500);
  PORTB=0xff;delay_ms(500);  } }


الصورة الرمزية wleed antar
wleed antar
:: عضو ماسي ::
تاريخ التسجيل: May 2006
الدولة: القاهرة - مصر
المشاركات: 1,524
نشاط [ wleed antar ]
قوة السمعة:146
قديم 17-05-2011, 07:42 PM المشاركة 4   
افتراضي


السلام عليكم شكرا يااخي وبارك الله فيك تم تعديل الكود ادناه
ولاكن عند انتهاء المقاطعة لايعود الى البرنامج الرئيسي وتبقى
الليدات مطفاءه في برنامج البترونس



كود:
     char n;
void interrupt()
{ if(portb.f0==0){for(n=0;n<5;n++)
{ portb=0xff;delay_ms(300);
 portb=0; delay_ms(300); }  }
 
 
Intcon.f1=0; }
 
 
    void main ()
    { Intcon=0b10010000;
    Option_reg=0b10000000;
  TRISA=0xff;  TRISB=0b00000001; PORTB=0;
 
  while (1)  { PORTB=0;delay_ms(500);
  PORTB=0xff;delay_ms(500);  } }
تم اصلاح الخطأ وهو بمسح بت الإعلام الخاص بالمقاطعة
RB0

وسيعمل إن شاء الله


الصورة الرمزية ابو عبدالله77
ابو عبدالله77
:: مهندس متواجد ::
تاريخ التسجيل: Mar 2009
المشاركات: 69
نشاط [ ابو عبدالله77 ]
قوة السمعة:0
قديم 18-05-2011, 12:27 PM المشاركة 5   
افتراضي


شكرا اخي وليد وبارك الله فيك هل يمكن ان تكون المقاطعة على porta

إضافة رد

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

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

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


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

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