السلام عليكم
اخى محمد ياريت تكتب الكود بدل الصورة او حتى تحتها حتى تسهل عليا عمل كوبى بست بدل ما اكتبه
وشكرا
|
وعليك السلام ورجمة الله وبركاته.
معذرة أخي... فأنا أراسلكم من أندرويد والكمبيوتر ليس عليه نت للأسف.
فلا يمكنني لصق الكود هنا للأسف...
السلام عليكم ورحمه وبركاته
على مااعتقد يوجد خطأين
1- عند الضغط على سويج لابد من وجود زمن تاخيري حتى نتخلص من debouncing
2- خطأ واضح انك تركت مصفوفه مفتوحه عبر زياده قيمه y اي من محتمل ان تزيد y عن 96 وبتالي هذه زياده تسبب overflow هذه مشكله تغير من قيم ريجيسترات موجوده في البيك وبتالي من طبيعي ان ترى نتائج لم تضعها في كود
كود:
if(y>=95){x[94]=0;
y=0;}
اي ان قيم هذه مصفوفه من محتمل تخزن في اماكن بالذاكره تشغلها ريجيسترات حساسه
|
وعليك السلام ورحمة الله وبركاته.
أما عن الخطأ الثاني فأنا لست مقتنعا به لأني بالفعل كتبت أمر بالخروج من الحلقة عندما تصل y إلى 96 وهو الأمر اللي في المربع الأحمر في الصورة التي سأضعها.
أما الخطأ الأول فالمفروض لا يؤثر على المحاكاة وإنما يؤثر في العملي فقط.
وبالنسبة للخطأ الثاني المفروض تحدث هذه المشاكل عندما تصل قيمة y إلى 96 ولكن الذي يحدث أنها عندما تصل إلى 18 ثم أضغط على الزر تصبح بواحد!!
الصورة التالية لكود طبقته عملي فكانت النتيجة وهي أنه عندما تصل y إلى 18 ثم أضغط على الزر الضغطة التالية تصبح y بواحد... وجعلت زمن الارتداد ألف ملي ثانية كما في المربع الأزرق حتى أطمئن أثناء التجربة العملية.
أعيد وأقول أنني جربت هذا الكود عملي فكان يحدث ذلك كما يحدث نفس الشيء على المحاكاة لكن بشرط عدم وجود السطر:
Y=7;portd=y;
أما مع وجود هذا السطر في تجربة المحاكاة تحدث اضطرابات غريبة في بورت c و d مع أول ضغطة.
والآن إليكم الكود الذي طبقته عملي:
ومعذرة على تأخر الرد حيث كنت مشغولا بتجارب هذا الكود.
سأحاول كتابة الكود على الأندرويد.. قد يصلح:
كود:
Char x[96],y;
Void main()
{
Ansel=0;
Anselh=0;
C1on_bit=0;
C2on_bit=0;
Option_reg.f7=0;
Trisa=0;
Trisb=128;
Trisc=0;
Trisd=0;
Porta=0;
Portb=0;
Portc=0;
Portd=0;
Porta.f0=1;
Delay_ms(200);
Porta.f0=0;
Delay_ms(200);
Porta.f0=1;
Delay_ms(200);
Porta.f0=0;
Delay_ms(200);
Porta.f0=1;
Delay_ms(200);
Porta=2;
Y=7;
Portd=y;
Do
{
While(portb.f7==1){}
Delay_ms(1000);
X[y]=tmr0;
Tmr0=0;
Y++;
Portd=y;
While(portb.f7==0){}
Delay_ms(1000);
X[y]=tmr0;
Tmr0=0;
Y++;
Portd=y;
}while(y<95);
Porta=7;
}
لقد فعلتها وكتبته على الأندرويد... استغرق وقتا طويلا جدا.