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

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

الطالب99
:: مهندس متواجد ::
تاريخ التسجيل: Oct 2005
المشاركات: 73
نشاط [ الطالب99 ]
قوة السمعة:0
قديم 23-07-2012, 02:55 AM المشاركة 1   
x2 توضيح الكود بالمايكرو سي Twitter FaceBook Google+



بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته
اخوني الاعزاء ارجوا منكم ان تشرحوا لي هذا البرنامج وكيفية التعديل عليه لو سمحتم حيث هذا البرنامج هو لفك ترميز ال DTMF ويحتوي على 4 ارقام وهي ((#2486)) حيث عندما اضغط على رمز الشباك يقوم بمقارنة الارقام اذا كانت صحيحة يفتح الرلي واذا كانت خاطئه يصفر ويعيد استلام الرموز من جديد وانا اريد ان اعرف كيف اقوم بتغير هذه الارقام كم اريد انا (( اي من اين استطيع ان ابرمج ارقام جديدة على سبيل المثال #7513 او اوا ... الخ وامكانية زيادة عدد الارقام يعني اكثر من 4 ارقام ان امكن )). واجوا منكم ان كان لدى احد من الاخوة مثال على هذا مع الدائرة وشرح ارجوا منه ان لا يبخل علي به .
وجزاكم لله خير .
الكود
كود:
#define CODE1 2			/* 4 digits of correct code */
#define CODE2 4
#define CODE3 8
#define CODE4 6
#define VALID 0x10		/* mask for port A<4> */
#define IDLE_TENTHS 30	/* number of tenths of second before reset */

char data;
char data_read;
char digits;
char digit1;
char digit2;
char digit3;
char digit4;
char idle;

main()
{
#asm
	; Configure Ports A<4-0> as input
	movlw	0x1f
	tris	PORTA
	; Configure Port B<7-0> as output
	movlw	0
	tris	PORTB
	movlw	0x20
	movwf	PORTB
#endasm

	delay_sec(1);		/* wait a second before processing data */
	idle      = 0;
	digits    = 0;
	data_read = 0;
	while (1)
	{
		data = RdPortA();
		if (data & VALID)
		{					/* if valid line set */
			idle = 0;
			if (data_read == 0)
			{			/* if digit not processed yet */
				data &= 0xf;
				if (data == 12)
				{			/* if # key */
					if (digits == 4 &&		/* check code */
						digit1 == CODE1 &&
						digit2 == CODE2 &&
						digit3 == CODE3 &&
						digit4 == CODE4)
					{
						WrPortB(0x10);		/* set B<4> if correct code */
						delay_sec(2);
					}

					WrPortB(0x0);			/* reset */
					digits = 0;
					data_read = 0;
				}
				else
				{
					digits++;				/* save the digit */
					data_read = 1;
					if (digits == 1)
					{
						digit1 = data;
					}
					else if (digits == 2)
					{
						digit2 = data;
					}
					else if (digits == 3)
					{
						digit3 = data;
					}
					else if (digits == 4)
					{
						digit4 = data;
					}
				}
			}
		}
		else
		{
			data_read = 0;				/* prepare for next digit */
			idle++;
			if (idle > IDLE_TENTHS)
			{	/* reset if idle too long */
				digits = 0;
				WrPortB(0x0);
			}
		}
		delay_ms(100);
	}
}
/* read IO port value */

RdPortA()
{
#asm
	movfw	_portA
#endasm
}

WrPortB( value )
char value;
{
#asm
	movfw	_stackptr
;--	call _indr_
        movwf   _fr4
        movfw   _fr0
;
	movwf	_portB
#endasm
}

/**********************************************/
/*  The following function executes a delay based on
/*  the formula : 772*time + 12 usec
/**********************************************/
delay_ms(time)
	char time;
{
#asm
	movfw	_stackptr
	call _indr_
	movwf	_primary
_dly1ms0_
	clrf	_temp
_dly1ms_
	decfsz	_temp, f
	goto	_dly1ms_
	decfsz	_primary, f
	goto	_dly1ms_
#endasm
}

delay_sec(sec)
	char sec;
{
	int i;
	for (i = 0; i < sec; i++)
	{
		delay_ms(250);
		delay_ms(250);
		delay_ms(250);
		delay_ms(250);
	}
}

اعلانات

الطالب99
:: مهندس متواجد ::
تاريخ التسجيل: Oct 2005
المشاركات: 73
نشاط [ الطالب99 ]
قوة السمعة:0
قديم 23-07-2012, 04:02 PM المشاركة 2   
افتراضي


السلام عليكم
هل هذا البرنمج صعب الى هذه الدرجة ؟؟؟ 28 مشاهدة ولا رد واحد ؟؟؟؟؟!!!!!!!
ارجوا التعاون اخواني ولو بنصيحة.
وتقبل الله منا ومنكم صالح الاعمال.
وجزاكم الله خير ..............


التعديل الأخير تم بواسطة : الطالب99 بتاريخ 23-07-2012 الساعة 04:06 PM
اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )
  

الصورة الرمزية funky112233
funky112233
:: عضو ذهبي ::
تاريخ التسجيل: Aug 2009
المشاركات: 666
نشاط [ funky112233 ]
قوة السمعة:93
قديم 23-07-2012, 07:58 PM المشاركة 3   
افتراضي


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

نزل الكود والدائرة وكل شىء من هنا
http://www.4shared.com/rar/7h40c8HO/eltalb99.html?

ودى صورة الدائرة وعليها شرح بسيط ليها


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

__________________________________________________ _________

ودة الكود
كود:
char keydtmf[]={'D',1,2,3,4,5,6,7,8,9,0,83,35,'A','B','C'};
char number[16];
long int natg=0;
long int x2=100000;
char x;
char x3=0;

void interrupt() {
if(x3==4){x2=1;}
for(x=0;x<16;x++){if(PORTA==x){number[x]=keydtmf[x];natg=natg+number[x]*x2;x2=x2/10;}}
intcon.f2=0;
TMR0=255;
x3=x3+1;
if(number[11]==83){x3=0;natg=0;x2=100000;}
for(x=0;x<16;x++){number[x]=0;}
}


void main() {
CMCON=7;TRISA=255;TRISB=0;PORTB=0;
option_reg=56;intcon=160;TMR0=255;
while(1){
if(x3==5){
if(natg==123435){PORTB=~PORTB;natg=0;x2=100000;x3=0;}
else {natg=0;x2=100000;x3=0;}
}
        }
}

اعذرنى انا عارف ان الكود معقد بس انا بعملة باستعجال فاعذرنى

المهم الكود دة بيستقبل 4 ارقام وبعد ما بتدوس على شباك # بينفذ الاوامر
والارقام دة بترتيب معين
يعنى باسورد
يعنى لو انت كاتبلة 1234 لازم يكون بنفس الترتيب
1 الاول وبعد كدة 2 وبعد كدة 3 وبعد كدة 4 وبعد كدة شباك
يشتغل لكن لو غيرت اى رقم او بدلت حتى فى الترتيب مش هيشتغل

وفى المثال دة دى هى الارقام الى بيستقبلها

كود:
if(natg==123435){PORTB=~PORTB;natg=0;x2=100000;x3=0;}
زى مانت شايف 123435
35 دة رمز الشباك # فاملكش دعوة بية
كل الى تغير فية زى مانت عايز هما الاربع ارقام دول 1234
ممكن بقى تحطهم 5698 زى مانت عايز المهم يكونوا 4 ارقام واخيرهم 35 زى مانت شايف فى الكود

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

وبعد ما بيطابق الكود الارقام الى انت عايزة يعنى تم ادخال الباسورد صح
هيعكس حالة البورت B كلة يعنى لو بصفر هيخليه بواحد ولو ب 1 هيخلية بصفر
طبعا هنا تحت الاوامر بقى الى انت عايزة تتنفذ لما يتكتب الباسورد صح

اما الباقى الى هو دة
كود:
natg=0;x2=100000;x3=0;
فدة سيبة زى ما هو دة خاص بالعملية الحسابية فى الكود

وفى حاجة كمان
لو دوست على اكثر من زرار بشكل خاطء
يعنى بوظت الترتيب او بوظت اى شىء وكتبت ارقام غير صحيحة
لازم تدوس على الزرار الى بيخرج 11 او مكتوب فى الداتا شيت S
ودة بيعرف الميكرو انوا يعمل اعادة ترتيب للامور من الاول وجديد
علشان ميحصلش خطا
وبعد ما تدوس علية تبدء تكتب الارقام من الاول وجديد
__________________________________________________ _________
وتردد الكريستالة 4 ميجا هيرتز
وتوصيل ادائرة واضح زى ما شوفت فى الصورة
الاطراف فى الاى سى بنفس رقمها فى الميكرو قصاد بعض
والطرف OE هتوصلة على الطرف A4 فى الميكرو
__________________________________________________ _________
ملحوظة اخيرة
الكود الى انت هتحتاجة هتلاقى اسمة eltalb99
وهو فى اول فولدر ملكش دعوة بالى فى تانى فولدر لانوا خاص بالتجربة فقط
__________________________________________________ _________
كدة خلص الشرح اى حاجة مش فاهمها انا تحت امرك ان شاء الله


الطالب99
:: مهندس متواجد ::
تاريخ التسجيل: Oct 2005
المشاركات: 73
نشاط [ الطالب99 ]
قوة السمعة:0
قديم 23-07-2012, 09:25 PM المشاركة 4   
افتراضي


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

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


عبدالله زهير
:: مهندس جيد ::
تاريخ التسجيل: Sep 2012
المشاركات: 272
نشاط [ عبدالله زهير ]
قوة السمعة:0
قديم 17-12-2012, 09:01 PM المشاركة 5   
افتراضي


ماهي وظيفة الطرف OE(هل هو نفس الطرفstd )

أين طرف الخرج في المايكرو


التعديل الأخير تم بواسطة : عبدالله زهير بتاريخ 17-12-2012 الساعة 09:05 PM

عبدالله زهير
:: مهندس جيد ::
تاريخ التسجيل: Sep 2012
المشاركات: 272
نشاط [ عبدالله زهير ]
قوة السمعة:0
قديم 18-12-2012, 12:17 PM المشاركة 6   
افتراضي


أين أنتم يا أخوة


عبدالله زهير
:: مهندس جيد ::
تاريخ التسجيل: Sep 2012
المشاركات: 272
نشاط [ عبدالله زهير ]
قوة السمعة:0
قديم 19-12-2012, 12:20 PM المشاركة 7   
افتراضي


ماهي وظيفة الطرف OE(هل هو نفس الطرفstd )

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


عبدالله زهير
:: مهندس جيد ::
تاريخ التسجيل: Sep 2012
المشاركات: 272
نشاط [ عبدالله زهير ]
قوة السمعة:0
قديم 20-12-2012, 06:27 PM المشاركة 8   
افتراضي


أين أنتم ياشباب

إضافة رد

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

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

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


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

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