كود:
char x=0;
void interrupt (){
if(intcon.b1==1) {
while(portb.f0==1){}
x++;
if (x==4) { x=1; }
intcon.b1=0; }
}
void main() {
intcon=0b10010000;
trisb.f1= trisb.f2= trisb.f5=0;
trisb.f0=1;
portb.f1=0;
portb.f2=0;
portb.f5=0;
while(1){
if (x==1) { portb.f1=1; delay_ms(50); portb.f1=0; delay_ms(50); }
if (x==2) { portb.f2=1; delay_ms(500); portb.f2=0; delay_ms(500); }
if (x==3) { portb.f5=1; delay_ms(2000); portb.f5=0; delay_ms(2000); }
} }
شكرا لكم احبتي في الله لكل من شارك وساهم في هذا الموضوع
الاخ الفاضل ياسين
انا جربت الكود الذي تشاهده في الاعلى وساجرب الكود الثاني لاحقا
وكانت النتيجه انه عمل معي ولكن ليس على الوجه المطلوب ( به تاخير )
كي اختبر الانتربت
قمت بزياده الزمن الفلاش على النحو الاتي
الفلاش الاول يعمل بزمن 50 ملي سكند
الثاني 500 ملي سكند
الثالث وهنا الاختبار الحقيقي وهو 2000 ثانيتين
حيث عند الزمن الصغير يتنقل بشكل عادي
ولكن عند الزمن 2000 لايتنتقل بشكل سريع بل لابد من انتظار حتى ينتهي اليد من اداء عمله
انا اريد عمل مقاطعه ( اي اترك ماتعمله فورا ) وتنقل الى الوظيفه الاخرى
الكود شغال ولكن لابد من انتظار
صورت فيديو للتجربة
https://www.youtube.com/watch?v=YrfvqYbHAI8
----------------------------
التعديل على الكود كان فقط في الزمن الفلاش
وايضا استخدمت port 1,2 5 out put
ولكن مافهمت لماذا كتبت هذا السطر بهذا الشكل
|
trisb.f1= trisb.f2= trisb.f5=0
|
حيث انني حاولت على سبيل القضول كتابته بهذا الشكل واعطاني خطا
trisb.f1=0;
trisb.f2=0;
trisb.f5=0