الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

ٍسؤال في المسح الرقمي

مغلقرائج
بدأه tell me في 5 أكتوبر 2004 · 56 رد · 11,787 مشاهدة · في الأرشيف
مشاركة: واتساب X فيسبوك تيليجرام
#26

يبدو أنك وضعت تأخيراً زمنياً كبيراًبين الإظهار والآخر

حيث مهما زاد التردد تبقى سرعة الإظهار ثابتة بين الأرقام

أي ممكن أن يأتي 10 نبضات أو 30 ويبقى الرقم ثابت على الشاشة

إضافة لوجود تقطيع في الإظهار

ويوجد مشكلة في تسلسل الأرقام حيث يبدأ من 0 1 2 3 4 8 5 7 8 9 0

الإظهاريتم على الشاشة اليسرى يجب أن يكون على اليمنى

ولا يوجد إظهار للعشرات.

وفي النهاية أخ عماد أشكرك جزيل الشكر على اهتمامك وجعله الله في ميزان حسناتك

إن شاء الله

tell me

{وقل ربي زدني علماً}

#27

تعديل طفيف ماذا الان؟

#include <16f84.h>
#use delay(clock=4000000)
#fuses XT,NOWDT,NOPROTECT,NOPUT
setup_counters(RTCC_INTERNAL,RTCC_DIV_1);

char x=0,z=0;

#INT_EXT
void ext_isr(void)
{
char d1,d10,dx;
z++;
d1= x%10;
d10= (x-x%10)/10;
if (z%2)
{
output_low(PIN_A0);
output_high(PIN_A1);
dx=d1;
}
else
{
output_high(PIN_A0);
output_low(PIN_A1);
dx=d10;
}
switch (dx)
{
case 0:
output_high(PIN_B1);
output_high(PIN_B2);
output_high(PIN_B3);
output_high(PIN_B4);
output_high(PIN_B5);
output_high(PIN_B6);
output_low(PIN_B7);
break;
case 1:
output_low(PIN_B1);
output_high(PIN_B2);
output_high(PIN_B3);
output_low(PIN_B4);
output_low(PIN_B5);
output_low(PIN_B6);
output_low(PIN_B7);
break;
case 2:
output_high(PIN_B1);
output_high(PIN_B2);
output_low(PIN_B3);
output_high(PIN_B4);
output_high(PIN_B5);
output_low(PIN_B6);
output_high(PIN_B7);
break;
case 3:
output_high(PIN_B1);
output_high(PIN_B2);
output_high(PIN_B3);
output_high(PIN_B4);
output_low(PIN_B5);
output_low(PIN_B6);
output_high(PIN_B7);
break;
case 4:
output_low(PIN_B1);
output_high(PIN_B2);
output_high(PIN_B3);
output_low(PIN_B4);
output_low(PIN_B5);
output_high(PIN_B6);
output_high(PIN_B7);
break;
case 5:
output_high(PIN_B1);
output_low(PIN_B2);
output_high(PIN_B3);
output_high(PIN_B4);
output_low(PIN_B5);
output_high(PIN_B6);
output_high(PIN_B7);
break;
case 6:
output_high(PIN_B1);
output_low(PIN_B2);
output_high(PIN_B3);
output_high(PIN_B4);
output_high(PIN_B5);
output_high(PIN_B6);
output_high(PIN_B7);
break;
case 7:
output_high(PIN_B1);
output_high(PIN_B2);
output_high(PIN_B3);
output_low(PIN_B4);
output_low(PIN_B5);
output_low(PIN_B6);
output_low(PIN_B7);
break;
case 8:
output_high(PIN_B1);
output_high(PIN_B2);
output_high(PIN_B3);
output_high(PIN_B4);
output_high(PIN_B5);
output_high(PIN_B6);
output_high(PIN_B7);
break;
case 9:
output_high(PIN_B1);
output_high(PIN_B2);
output_high(PIN_B3);
output_high(PIN_B4);
output_low(PIN_B5);
output_high(PIN_B6);
output_high(PIN_B7);
break;
}
return;
}

void main(void)
{
enable_interrupts(INT_EXT);
enable_interrupts(global);
while (1)
{
x++;
if (x>99) x=0;
delay_ms(300);
}
}

test.HEX

39_22.gif

تزود من التقوى فإنك لا تدري *** إذا جن ليل هل تعيش إلى الفجر

فكم من فتى أمسى وأصبح ضاحكاً *** وقد نسجت أكفانه وهو لا يدري

لقراءة القرآن الكريم و سماعه و تفسيره ........

ماذا يعني انني مسلم سني؟

قصة غريبة

ConflictResolution.gif

#28

أصبح تسلسل الأرقام صحيحاً ولكن مازال يتجاهل عدد من النبضات

أخ عماد المشكلة لدي تكمن في خانة العشرات فقط لاغير

ببساطة أريد الآلية البرمجية للأنتقال إلى برنامج إظهار العشرات إن صح التعبير وشكراً

{وقل ربي زدني علماً}

#29

اين تعرض الارقام في خانة الاحاد فقط الم تضيئ و لو مرة خانة العشرات؟ و هل اختلفت السرعة في العرض؟ على كل ارسل لي رسالة توضح بريدك حتى نتحاور على مسنجر hotmail اذا كنت مستعجل لحل المشكلة. تذكرت شيئا اريد ان اتاكد من شيئ و هو ان تقوم بعكس الاشارتين port a0,a1 عندها يجب ان تعمل خانة العشرات بدل الاحاد اذا لم تعمل فان معني ذلك ان خانة العشرات لديها مشكلة.

39_22.gif

تزود من التقوى فإنك لا تدري *** إذا جن ليل هل تعيش إلى الفجر

فكم من فتى أمسى وأصبح ضاحكاً *** وقد نسجت أكفانه وهو لا يدري

لقراءة القرآن الكريم و سماعه و تفسيره ........

ماذا يعني انني مسلم سني؟

قصة غريبة

ConflictResolution.gif

#30

tell me اين وصل موضوعك؟ هل حلت المشكلة؟

39_22.gif

تزود من التقوى فإنك لا تدري *** إذا جن ليل هل تعيش إلى الفجر

فكم من فتى أمسى وأصبح ضاحكاً *** وقد نسجت أكفانه وهو لا يدري

لقراءة القرآن الكريم و سماعه و تفسيره ........

ماذا يعني انني مسلم سني؟

قصة غريبة

ConflictResolution.gif

#31

أنا آسف لتأخري في الرد عليك وشكراً على متابعتك للموضوع

المهم

بالنسبة للبرنامج الأخير تضيئ خانة العشرات عند الإقلاع فقط بالرقم واحد ثم تطفئ

سرعة الإظهار بقيت ثابتة بين الرقم والآخر إضافة لوجود تقطيع في الإظهار

هذا شرح بسيط للمراحل الرئيسية التي يجب أن يكون عليها البرنامج :

 LIST  P=16F84    
 #include p16f84.inc        
     __CONFIG 0x3FF9 



#define    bank0 bcf 3,5
#define    bank1 bsf 3,5

porta      equ h'5'
portb      equ h'6'
trisa       equ h'5'
trisb       equ h'6'
status     equ h'3'
pcl         equ h'2'
intcon     equ h'0b'
option_reg    equ h'81'

f            equ 1  
w           equ 0   
display    equ h'0d'  
counter    equ h'0c'
delay      equ h'0e'
CounterA  equ h'0f'
CounterB  equ h'10'
CounterC  equ h'11'
org 0
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
display1  macro
           bcf porta,0
           call timer
           endm 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;                
goto start

org  4
goto isr

menu
addwf pcl,f

nop
retlw b'00001100';1
retlw b'10110110';2
retlw b'10011110';3
retlw b'11001100';4
retlw b'11011010';5 
retlw b'11111010';6
retlw b'01001110';7
retlw b'11111110';8
nine
movlw b'11011110';9
movwf portb
display1              ;on display
call secand_0.5
bsf portb,0
clrf display
movlw b'11100010';F
movwf portb
display1               ;on display 
goto re

start    
 clrf  portb                        
 clrf  porta    
 clrf counter 
 clrf display  
                   
bank1                  
movlw b'00000001'  
movwf trisb                    
movlw b'00000'                  
movwf trisa                  
movlw  b'11000000'                  
movwf  option_reg     
movlw b'10010000'     
movwf intcon                     
 bank0
 goto zero 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 re
 bsf intcon,7
 scan
 nop
 goto scan
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
zero
 bsf intcon,7
 movlw b'01111110'
 movwf portb
display1               ;on display
goto scan

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 isr
 bsf porta,0;display1 off
 bcf intcon,1
 goto load
;;;;;;;;;;;;;;;;;;;;;;;;;;
disp
 movf   display,w
 addlw h'01'
 movwf  display    
  call menu
 movwf portb
display1                ;on display
goto re
;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
load
  movlw d'9'
 incf counter,f
 xorwf counter,w
 btfss status,2
 goto disp
 clrf counter
 goto nine
;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
 timer
 clrf delay
 inc
 incf delay
 btfss delay,4
 goto inc
 clrf delay
 return
 secand_0.5
    movlw	D'3'
	movwf	CounterC
	movlw	D'140'
	movwf	CounterB
	movlw	D'83'
	movwf	CounterA
loop	decfsz	CounterA,1
	goto	loop
	decfsz	CounterB,1
	goto	loop
	decfsz	CounterC,1
	goto	loop
	return
  end

1- كما تلاحظون أن البرنامج ينطلق مباشرة إلى كود إظهار الرقم صفر

الكود (Zero ) ومنه إلى قطعة برمجية macro تتضمن تشغيل الشاشة

وتأخير زمني بضعة ميكروثانية ( لثبات الإظهار)

2- بعدها ينتقل إلى الكود scan ليدخل ضمن حلقة مغلقة منتظراً ورود نبضة

لينتقل إلى برنامج خدمة المقاطعة isr ليطفئ الشاشة والعلمintf

3- ثم ينتقل إلى الكود load لكي لا يتجاوز الرقم 9 (لأنني لم أستطيع إظهار الرقم 10 )

4- ثم ينتقل إلى الكود disp الذي يحقق زيادة متتالية 1+1 ليتم إضافتها إلى

عداد البرنامج وينتقل بدوره إلى الرقم المناسب لينقل شيفرته إلى port b

ثم يذهب إلى القطعة البرمجية macro يليها الكودRe لتفعيل الخانة Gie

وهكذا- - - - -

على فكرة البرنامج السابق تمت محاكاته على برنامج Proteus ويعمل بشكل جيد

أخ عماد أردت بهذا الشرح المبسط أن أوحد فكرة البرنامج

وخاصة بيني وبينك كونك تكتب بالسي وأنا أكتب بالإسمبلي وأرجو أن أكون

قد وفقت في ذلك

في النهاية أرجو أن لا يبخل أحد بأفكاره لتحسين البرنامج

وأرحب بأي تصحيح تجدونه مناسب.

tell me

{وقل ربي زدني علماً}

#32

أنا في الإ نتظار.

tell me

{وقل ربي زدني علماً}

#33

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

أولاً أحب أن أحيي الأخ عماد على رحابة صدره وكثير جهده

كما أحيي جميع القائميين و المهتمين بهذا الموقع الجميل حقاً

وهذه هي مشاركتي الأولى فهل من مرحب بي ؟!!!

أما بعد :

لقد عانيت من نفس المشكلة التي ذكرها الأخ tel me

ومن هنا أطرح هذا السؤال:

هل بالإمكان أخي عماد خاصة وبقية الأخوة عامة كتابة كود بإمكاننا من خلاله العد من

( واحد الى خمس وعشرين ) مثلاً

وذلك لإظهار هذا الرقم على شاشة إظهار مؤلفة من خانتين

بغض النظر بأننا نستعمل مقاطعة خارجية ( للإختصار فقط )

أي أن يبدأ العد من الرقم صفر الى خمس وعشرين مثلا ويعود البرنامج للعد من جديد

أرجو أنا أيضاً ( كما طلب الأخ tel me ) أن يكون الكود مكتوبا بالسامبلي وليس بلغة C

لأني بصراحة لا أعرفها

لا تجعل الله أهون الناظرين اليك موقعي الشخصي www.hindawi-sy.com

#34

اهلا بالاخ ابو احمد الموضوع سهل و ليس معقد و لكني للاسف تارك الاسمبلي ولن استطيع الكتابة بها الان ولكني ساوضح الطريقة.

اولا برنامجك الاساسي عداد يعد الى 25 مثلا وهذا امر سهل و هو يشبه هذا الاسلوب

CLRF MYBYTE
LOOP:
IF MYBYTE>25 THEN MYBYTE=0
DELAY S
INCF MYBYTE
GOTO LOOP

الان تحتاج الى برنامج لعمل انتربت، الاخ tell me عمله خارجي في حالتك سيكون داخلى حيث ستفعل timero مثلا بحيث يعمل انتربت كل 0.01 ثانية مثلا. في هذا الانتربت ستقوم باظهار احدى الخانات الاحاد او العشرات بالتناوب.

الان لنجزء الموضوع

  • تفعيل التايمر لعمل انتربت
  • تحويل الرقم (العداد 0 - 25) من بايناري الى BCD (عشري) حتى نتمكن من معرفة قيمة كل خانة من الاحاد و العشرات.
  • كيفية التغيير من خانة الاحاد الى العشرات و بالعكس و هذه تتم ببساطة بحفظ متغير يتم زيادته في كل مرة ونستطيع مثلا اظهار الاحاد اذا كان العد فردى و عشرات اذا كان الرقم زوجي او العكس يتم زيادة هذا العداد واحد في نهاية الانتربت روتين (خدمة المقاطعة).

الان ممكن ان تسال هل الانتربت ضرورى و الجواب نعم ضروري لانه مهما كان برنامجك سيقوم المتحكم بمغادرة البرنامج و القيام باظهار الرقم بتوقيت ثابت بغض النظر عن تعقيد برنامجك. و لناخذ مثال انك دخلت بدائرة DELAY لمدة ثانية بدون الانتربت هذا يعني انه لن تظهر الارقام على الشاشة لمدة ثانية على الاقل و هذا هو اهمية الانتربت حيث في الوقت المناسب يغادر للقيام بالمهام الضرورية.

الاخ tell me فقط اضفت tris و اريد ان ارى النتيجة لديك.

#include <16f84.h>
#use delay(clock=4000000)
#fuses XT,NOWDT,NOPROTECT,NOPUT
#use fast_io(A)
#use fast_io(B)
setup_counters(RTCC_INTERNAL,RTCC_DIV_1);

char x=0,z=0;

#INT_EXT
void ext_isr(void)
{
char d1,d10,dx;
z++;
d1= x%10;
d10= (x-x%10)/10;
if (z%2)
{
output_low(PIN_A0);
output_high(PIN_A1);
dx=d1;
}
else
{
output_high(PIN_A0);
output_low(PIN_A1);
dx=d10;
}
switch (dx)
{
case 0:
output_high(PIN_B1);
output_high(PIN_B2);
output_high(PIN_B3);
output_high(PIN_B4);
output_high(PIN_B5);
output_high(PIN_B6);
output_low(PIN_B7);
break;
case 1:
output_low(PIN_B1);
output_high(PIN_B2);
output_high(PIN_B3);
output_low(PIN_B4);
output_low(PIN_B5);
output_low(PIN_B6);
output_low(PIN_B7);
break;
case 2:
output_high(PIN_B1);
output_high(PIN_B2);
output_low(PIN_B3);
output_high(PIN_B4);
output_high(PIN_B5);
output_low(PIN_B6);
output_high(PIN_B7);
break;
case 3:
output_high(PIN_B1);
output_high(PIN_B2);
output_high(PIN_B3);
output_high(PIN_B4);
output_low(PIN_B5);
output_low(PIN_B6);
output_high(PIN_B7);
break;
case 4:
output_low(PIN_B1);
output_high(PIN_B2);
output_high(PIN_B3);
output_low(PIN_B4);
output_low(PIN_B5);
output_high(PIN_B6);
output_high(PIN_B7);
break;
case 5:
output_high(PIN_B1);
output_low(PIN_B2);
output_high(PIN_B3);
output_high(PIN_B4);
output_low(PIN_B5);
output_high(PIN_B6);
output_high(PIN_B7);
break;
case 6:
output_high(PIN_B1);
output_low(PIN_B2);
output_high(PIN_B3);
output_high(PIN_B4);
output_high(PIN_B5);
output_high(PIN_B6);
output_high(PIN_B7);
break;
case 7:
output_high(PIN_B1);
output_high(PIN_B2);
output_high(PIN_B3);
output_low(PIN_B4);
output_low(PIN_B5);
output_low(PIN_B6);
output_low(PIN_B7);
break;
case 8:
output_high(PIN_B1);
output_high(PIN_B2);
output_high(PIN_B3);
output_high(PIN_B4);
output_high(PIN_B5);
output_high(PIN_B6);
output_high(PIN_B7);
break;
case 9:
output_high(PIN_B1);
output_high(PIN_B2);
output_high(PIN_B3);
output_high(PIN_B4);
output_low(PIN_B5);
output_high(PIN_B6);
output_high(PIN_B7);
break;
}
return;
}

void main(void)
{
SET_TRIS_A (0XFC);
SET_TRIS_B (0X01);
enable_interrupts(INT_EXT);
enable_interrupts(global);
while (1)
{
x++;
if (x>99) x=0;
delay_ms(300);
}
}

test.HEX

39_22.gif

تزود من التقوى فإنك لا تدري *** إذا جن ليل هل تعيش إلى الفجر

فكم من فتى أمسى وأصبح ضاحكاً *** وقد نسجت أكفانه وهو لا يدري

لقراءة القرآن الكريم و سماعه و تفسيره ........

ماذا يعني انني مسلم سني؟

قصة غريبة

ConflictResolution.gif

#35

مشكور أخي عماد على هذا الرد

سأقوم بما قد شرحت لي و سأخبرك بالنتائج

سؤال آخر

أي لغة برمجة تنصحني أن أتعلمها بحيث تخدمني بكتابة البرامج على المتحكمات

و لأستطيع أيضاً ربط الكمبيوتر مع العالم الخارجي

علماً بأني حالياً لا أتقن أي لغة برمجة عالية المستوى

لا تجعل الله أهون الناظرين اليك موقعي الشخصي www.hindawi-sy.com

#36

اخى العزيز على حسب ما فهمت سؤالك اقترح عليك ان تقوم باستخدام BCD TO SEVEN SEGMENT DECODER حيث يتم التحكم به عن طريق 4 بت و يكون هناك 2 بت اخرى لتفعيل خانة الاحاد او خانة العشرات اى انك ستستخدم 6 بت . و تقوم بعمل متغير و ليكن اسمه" A" و يحتوى على القيمه الابتدائيه 11H حيث الواحد فى الاربع بت الولى لاخراج الرقم واحد اما الواحد فى الاربع بت الثانيه لتفعيل(Enable) خانة الاحاد ثم تقوم بزيادة Increment هذا المتغير وو ضع شرط فى بدايه البرنامج الخاص بالاحاد ليرى ما اذا كان المتغير A قد وصل للقيمه 19H ام لا فاذا كان قد وصل يتم الانتقال الى برنامج فرعى يقوم بوضع القيمه 11H فى المتغير A و اخراج المتغير B على ال port و زيادته بمقدار واحد حيث قيمة المتغير B هى 21H حيث 2 لعمل Enable لخانة العشرات و 1 لاظهار القيمه واحد عليها و هكذا عند الدخول فى برنامج الاحاد مره اخرى سيكون الشرط غير محقق و يتم عرض القيمه من 1-9 فى خانة الاحاد مع وجود القيمه 1 على خانة العشرات و عندما يصل الى القيمه 9 يتحقق الشرط و يتم زيادة B بمقدار واحد و هكذا . ارجو ان تكون الاجابه مفيده فقد اخذت منى وقت طويل جدا لانى بطىء جدا فى الكتابه باللغه العربيه .

تم تعديل هذه المشاركة بواسطة Ahmad Mohammad في 8 نوفمبر 2004 في 17:54

#37

مشكورين أخوتي على هذا الجهد

ولكن

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

ولكن في حالتنا هذه نستطيع استخدام جميع أرجل المتحكم

أخي telme

لقد جربت البرنامج الذي كتبه الأخ عماد ( مشكوراً ) ولكنه لم يعمل بالشكل المطلوب

فإن جربته أنت واشتغل معك أرجو أن تخبرني لأعلم أين الخطأ

أخي عماد

ليست لدي مشكلة إن تابعنا بنفس برنامج الأخ telme - أي بستخدام مقاطعة خارجية -

مشكلتي تكمن فقط في طريقة كتابة كود الإظهار

أي :

كيف نطلب من البرنامج أن يقوم بإخراج قيمة الى الشاشة الثانية ونحن نكون قد وضعناه

في حلقة تأخير أي كيف يقوم البرنامج بعملين بنفس الوقت

عذراً من كثرت أسئلتي ولكن ليس لدي أي طريقة للوصول لهدفي غيركم فماذا أفعل

لا تجعل الله أهون الناظرين اليك موقعي الشخصي www.hindawi-sy.com

#38

تشكر أخ أحمدعلى مداخلتك المفيدة ولكن كما قال الأخ أبو أحمد

وتشكر أخ عماد على اهتمامك والموضوع ليس معقد كما ذكرت ولكن نفتقر إلى الآلية لكتابة هذا الكود ( الطريقة )

أما بالنسبة للبرنامج فالإظهار مازال على شاشة واحدة من0 إلى 9 فقط

أرى أن المشكلة تكمن في عملية التبديل بين الشاشتين عند إخراج القيم إليها ألا توافقوني الرأي؟

{وقل ربي زدني علماً}

#39

اشكركم جزيل الشكر اخواني الكرام على اثارة هذا الموضوع المفيد بصراحة انا في السابق لم اكن اعرف التعامل مع شاشة العرض واظهار واستطعت ان اعرف الكثير عنها من خلال هذا الموضوع ولكن لدي تساؤلات كثيرى وهي تساؤلات بالطبع سوف تكون سخيفة الى حدا ما لاني مبتدا ولكن انا متاكد انكم سوف تفيدوني بها واول تساؤل لي

تعنون بالمقاطعة هي الاشارة التي سوف تدخل على احد اطراف الpic وهو كم عندكم الطرف 6 فيتغير الرقم الظاهر على الشاشة ويظهر الرقم الذي بعده هذا الامر قد فهمته ولكن لم افهم كيفيته فهل بمقدوركم شرحه لي ايضا امر اخر انت شبكت السبع اطراف للشاشةةمع سبع اطراف للمعالج اي لكل ضلع من اضلاع الشاشة طرف هنا السؤال كيف لي ان اضئ الرقم 7 على سبيل المثال هل سوف يكون على كل من الضلع abc

5فولت اما الباقي صفر فولت بمعنى اخر الكنترولر سو يفعل الاطراف الموصولة مع الاضلاع abc اذا كان هذا الفرض صحيح ارجوا ان توضحوه لي مع الشكر

او اعملوا على على اراحت رؤوسكمم من الاصل واعيددوا شرح ربط شاشة مع الكونترولر (هذا بالطبع ليس امر بل كما يقال العشم ) يارب تكونوا قد استطعتم فهم ما اعني اعلم ان استفساري هذا قد اوجع رؤوسكم لكن استحملوني ولكم من الله اجر فنحن مساكين والله يكافا من يساعدنا

اخوكم majde satar

thank you

#40

حسنا عملت تغيير غير كبير في البرنامج و لكن المفروض ان تظهر خانة العشرات بدل الاحاد و المشكلة حقيقة انه ليس لدي التصميم لدى للتاكد و لهذا انا اعتمد عليكم بتجريب البرنامج. على كل جربو هذا و اريد ان اعرف حقيقة اين الخلل لان الطريقة صحيحة 100%.

كشرح لطريقة الاضهار اليكم التالي:

لديك برنامجين واحد الاساسي و الاخر لخدمة المقاطعة. البرنامج الاساسي يعد من 0 الى 25 و يكرر و تضيف ماتشاء في هذا الجزء. الان هناك جزء آخر و هو برنامج (المقاطعة) الاظهار و الفرق بين البرنامج الاساسي و المقاطعة هو ان البرنامج الاساسي يكرر نفسه فما ان ينتهي من اخره حتى يعود لاوله تقريبا، اما برنامج المقاطعة فانه ينفذ مرة واحدة فقط عند كل انتربت ثم يعود البرنامج الى الاساسي و يكمل من حيث انتهى. فرق آخر هو ان برنامج المقاطعة لابد ان ينتهى بنوع من الامر RETURN. في المقاطعة اقوم بزيادة رقم في بداية البرنامج هذا الرقم كما تعلمون سيكون مرة فردى و المرة القادمة سيكون زوجي و بناء على ذلك اغير الاظهار من خانة الآحاد الى خانة العشرات. لا تقلقوا سننتهي قريبا من البرنامج لكن كما ذكرت لكم المشكلة في اني اعمل البرنامج و لا استطيع تجريبه.

المفروض من البرنامج الان ان يظهر خانة العشرات من 0 الى 2 و يكرر و لكن بسرعة ابطئ من السابق ارجو تجريبه و اخبارنا بالنتائج.

test.HEX

39_22.gif

تزود من التقوى فإنك لا تدري *** إذا جن ليل هل تعيش إلى الفجر

فكم من فتى أمسى وأصبح ضاحكاً *** وقد نسجت أكفانه وهو لا يدري

لقراءة القرآن الكريم و سماعه و تفسيره ........

ماذا يعني انني مسلم سني؟

قصة غريبة

ConflictResolution.gif

#41

هناك خطا ظننت ان العد حتى 25 علما انه حتى 99 و لهذا ساعيد كتابة البرنامج لاعتماد انتربت داخلى وسارفقه اليوم او غدا و ان شاء الله ساجربه على mplab قبل وضعه.

39_22.gif

تزود من التقوى فإنك لا تدري *** إذا جن ليل هل تعيش إلى الفجر

فكم من فتى أمسى وأصبح ضاحكاً *** وقد نسجت أكفانه وهو لا يدري

لقراءة القرآن الكريم و سماعه و تفسيره ........

ماذا يعني انني مسلم سني؟

قصة غريبة

ConflictResolution.gif

#42

جميل جداً

بالنسبة للبرنامج السابق فالمشكلة لم تتغير فالإظهار مازال على شاشة واحدة من0 إلى 9 فقط

أظنك قد نسيت تفعيل أحد المنفذين RA0-RA1

{وقل ربي زدني علماً}

#43

واجهت مشكلة مع mplab بسبب الانتربت و لهذا ارجو تجريب هذا البرنامج

test.HEX

39_22.gif

تزود من التقوى فإنك لا تدري *** إذا جن ليل هل تعيش إلى الفجر

فكم من فتى أمسى وأصبح ضاحكاً *** وقد نسجت أكفانه وهو لا يدري

لقراءة القرآن الكريم و سماعه و تفسيره ........

ماذا يعني انني مسلم سني؟

قصة غريبة

ConflictResolution.gif

#44

أصبح البرنامج عشوائياً تماماً !!

{وقل ربي زدني علماً}

#45

لم تذكر هل الاظهار يتم على الشاشتين؟؟

و ماذا عن هذا

test.HEX

39_22.gif

تزود من التقوى فإنك لا تدري *** إذا جن ليل هل تعيش إلى الفجر

فكم من فتى أمسى وأصبح ضاحكاً *** وقد نسجت أكفانه وهو لا يدري

لقراءة القرآن الكريم و سماعه و تفسيره ........

ماذا يعني انني مسلم سني؟

قصة غريبة

ConflictResolution.gif

#46

خانة العشرات تومض بالأرقام 0-1-2 ولفترات متفاوتة

والآحاد عشوائية تماماً

{وقل ربي زدني علماً}

#47

جيد لاني عملت العد حتى 25 لنميز العشرات من الاحاد هل انزلت البرنامج الاخير الذي وضعته الان؟

39_22.gif

تزود من التقوى فإنك لا تدري *** إذا جن ليل هل تعيش إلى الفجر

فكم من فتى أمسى وأصبح ضاحكاً *** وقد نسجت أكفانه وهو لا يدري

لقراءة القرآن الكريم و سماعه و تفسيره ........

ماذا يعني انني مسلم سني؟

قصة غريبة

ConflictResolution.gif

#48
abo ahmad كتب:
سؤال آخر

أي لغة برمجة تنصحني أن  أتعلمها بحيث تخدمني بكتابة البرامج على المتحكمات

و لأستطيع أيضاً ربط الكمبيوتر مع العالم الخارجي

علماً بأني حالياً لا أتقن أي لغة برمجة عالية المستوى

اعتقد ان عليك تعلم لغة السي او السي ++ حيث انها متوافقة مع السي و بهذا تستطيع ان تبرمج اي شيئ سواء ميكروكنترولر او بنتيوم او غيره. لو تعلمت لغة اخرى مثل VB او VB.NET او دلفي او C# فانها تصلح للحاسب و لن تنفع للميكروكنترولر. يعني اللغة المشتركة هي C و هناك ايضا بيسك لكنها ليست مرنة مرونة السي، علما ان السي اصعب. و بالنسبة للتعامل مع مخرج الطابعة او التسلسلي فكل اللغات تفعل ذلك.

و هذا البرنامج يعد حتى 59 و بزيادة التاخير لمدة ثانية يعني اصبح عداد ثواني، و اتمنى ان يعمل الان بصورة نهائية.

وهذا الاصل

#include <16F84.H>
#use Delay(clock=4000000)
#fuses XT,NOWDT,NOPROTECT,NOPUT
#use fast_io(A)
#use fast_io(B)

int8 x=0,z=0;
#INT_RTCC
clock_isr()
{
int8 d1,d10,dx;
set_timer0(200);
z++;
d1= x%10;
d10= (x-(x%10))/10;
if (z%2)
{
output_low(PIN_A0);
output_high(PIN_A1);
dx=d1;
}
else
{
output_high(PIN_A0);
output_low(PIN_A1);
dx=d10;
}
switch (dx)
{
case 0:
output_high(PIN_B1);
output_high(PIN_B2);
output_high(PIN_B3);
output_high(PIN_B4);
output_high(PIN_B5);
output_high(PIN_B6);
output_low(PIN_B7);
break;
case 1:
output_low(PIN_B1);
output_high(PIN_B2);
output_high(PIN_B3);
output_low(PIN_B4);
output_low(PIN_B5);
output_low(PIN_B6);
output_low(PIN_B7);
break;
case 2:
output_high(PIN_B1);
output_high(PIN_B2);
output_low(PIN_B3);
output_high(PIN_B4);
output_high(PIN_B5);
output_low(PIN_B6);
output_high(PIN_B7);
break;
case 3:
output_high(PIN_B1);
output_high(PIN_B2);
output_high(PIN_B3);
output_high(PIN_B4);
output_low(PIN_B5);
output_low(PIN_B6);
output_high(PIN_B7);
break;
case 4:
output_low(PIN_B1);
output_high(PIN_B2);
output_high(PIN_B3);
output_low(PIN_B4);
output_low(PIN_B5);
output_high(PIN_B6);
output_high(PIN_B7);
break;
case 5:
output_high(PIN_B1);
output_low(PIN_B2);
output_high(PIN_B3);
output_high(PIN_B4);
output_low(PIN_B5);
output_high(PIN_B6);
output_high(PIN_B7);
break;
case 6:
output_high(PIN_B1);
output_low(PIN_B2);
output_high(PIN_B3);
output_high(PIN_B4);
output_high(PIN_B5);
output_high(PIN_B6);
output_high(PIN_B7);
break;
case 7:
output_high(PIN_B1);
output_high(PIN_B2);
output_high(PIN_B3);
output_low(PIN_B4);
output_low(PIN_B5);
output_low(PIN_B6);
output_low(PIN_B7);
break;
case 8:
output_high(PIN_B1);
output_high(PIN_B2);
output_high(PIN_B3);
output_high(PIN_B4);
output_high(PIN_B5);
output_high(PIN_B6);
output_high(PIN_B7);
break;
case 9:
output_high(PIN_B1);
output_high(PIN_B2);
output_high(PIN_B3);
output_high(PIN_B4);
output_low(PIN_B5);
output_high(PIN_B6);
output_high(PIN_B7);
break;
}
return;
}
main()
{
   SET_TRIS_A (0XFC);
   SET_TRIS_B (0X01);
	setup_counters(RTCC_INTERNAL, RTCC_DIV_256);
	set_rtcc(0);
	enable_interrupts(INT_RTCC);
	enable_interrupts(GLOBAL);
	while(1)
 {
 x++;
 if (x>59) x=0;
 delay_ms(1000);
 }
}

test.HEX

تم تعديل هذه المشاركة بواسطة عماد الخليل في 12 نوفمبر 2004 في 20:46

39_22.gif

تزود من التقوى فإنك لا تدري *** إذا جن ليل هل تعيش إلى الفجر

فكم من فتى أمسى وأصبح ضاحكاً *** وقد نسجت أكفانه وهو لا يدري

لقراءة القرآن الكريم و سماعه و تفسيره ........

ماذا يعني انني مسلم سني؟

قصة غريبة

ConflictResolution.gif

#49

wait me in tomorrow

{وقل ربي زدني علماً}

#50

هذا البرنامج الكامل لعداد النبضات من 0 حتى99

وكل عام وفريق المسح الرقمي بخير وتحية خاصة لقائد الفريق الأخ عماد الخليل

سلامي للجميع

tell me

1.HEX

{وقل ربي زدني علماً}

هذا الموضوع مغلق.

مواضيع مشابهة