کد زدن در بسکام

irpersian20

عضو جدید
سلام

من یک کد نوشتم . میخواهم یک قسمت از کدام برای 5 ثانیه متوالی اجرا شود.
یعنی یک بلوک از کد برای 5 ثانیه خط به خط پشت سر هم اجرا شود
چطور این کار کن م
 

سعید گروسی

عضو جدید
کاربر ممتاز
سلام

من یک کد نوشتم . میخواهم یک قسمت از کدام برای 5 ثانیه متوالی اجرا شود.
یعنی یک بلوک از کد برای 5 ثانیه خط به خط پشت سر هم اجرا شود
چطور این کار کن م
زمان 5 ثانیه روباتایمردرست کن
بلوک موردنظرروتوی یک حلقه توی یک تابع یابرچسب قراربده(میتونی ازتابع وبرچسب هم استفاده نکنی واین ساب روتین روتوی روتین اصلی بنویسی)
زمانی که نوبت به کامپایل بلوک موردنظررسیدپرش کنه به تابع یابرچسب درهمین زمان تایمرstart بشه تازمان 5 ثانیه .برای این کارشرط خروج حلقه رومقدار5 ثانیه بذار.برای این کارازمدمقایسه ای تایمراستفاه کن.
بعدازمقایسه ازحلقه ودرنهایت تابع خارج شده به روتین اصلی برمیگیرددکل روتین نیزبایددرحلقه ی بی نهایت باشدتاهمیشه تکرارشود.
ازوقفه هاهم میتونی استفاده کنی.اگه تعداداجرابرایت مهم نباشدیعنی اگرفقط یکباردرمدت 5 ثانیه اجراشودمیتونی ازتاخیراستفاده کنی ونیازبه تایمرنیست.
 

irpersian20

عضو جدید
زمان 5 ثانیه روباتایمردرست کن
بلوک موردنظرروتوی یک حلقه توی یک تابع یابرچسب قراربده(میتونی ازتابع وبرچسب هم استفاده نکنی واین ساب روتین روتوی روتین اصلی بنویسی)
زمانی که نوبت به کامپایل بلوک موردنظررسیدپرش کنه به تابع یابرچسب درهمین زمان تایمرstart بشه تازمان 5 ثانیه .برای این کارشرط خروج حلقه رومقدار5 ثانیه بذار.برای این کارازمدمقایسه ای تایمراستفاه کن.
بعدازمقایسه ازحلقه ودرنهایت تابع خارج شده به روتین اصلی برمیگیرددکل روتین نیزبایددرحلقه ی بی نهایت باشدتاهمیشه تکرارشود.
ازوقفه هاهم میتونی استفاده کنی.اگه تعداداجرابرایت مهم نباشدیعنی اگرفقط یکباردرمدت 5 ثانیه اجراشودمیتونی ازتاخیراستفاده کنی ونیازبه تایمرنیست.

سلام
آقا ممنون از لطفت.
امکان هست یک تکه مثال بزنید؟ اگر زحمت بکشید...
 

سعید گروسی

عضو جدید
کاربر ممتاز
سلام
آقا ممنون از لطفت.
امکان هست یک تکه مثال بزنید؟ اگر زحمت بکشید...

سلام
من براتون ابتداتایمروراه اندازیش روتوضیح میدم.
تايمر یک با دستور زير پيکر بندی ميشود:
CONFIG TIMER1 = TIMER ,PREACALE =1|8|64|256|1024
PREACALE فرکانس (دقت ) تايمر را معيين ميکند .فرکانس و زمانی که تايمر ميشمارد از فرمولهای زير محاسبه عددميشوند:

زمان =تايمر بيت *PREACALE،کل عبارت تقسیم برمقدار کريستال

مقدار کريستال/PREACALE =فرکانس

تايمر با دستور START TIMER شروع به شمارش ميکند
STOP TIMER با این دستور متوقف می شود.
ENABLE INTRRUPTS يا ENABLE OVF تايمر پس از شمردن تا 2^16 سر ريز میشود.
توسط دستور var=timer1 مقدارتایمررومیشه خوند.var یک متغیرمیباشد
بادستور timer1=value تایمرمقداردهی میشود.
ساخت 1 ثانیه روحالامحاسبه میکنیم .........عدد preacaler رو64 میدهیم وچون تایمریک 16بیتی است تایمربیت رو2^16 میذاریم
مقدارکریستال هم 4000000میگذاریم ازضرب عددپریسکالروتایمربیت ودرنتیجه تقسیم برمقدارکریستال زمان 1 ثانیه بدست میاید
شمامیتوانیدهمین 1 ثانیه رو5 بارتوی یک حلقه بچرخانیدتا5 ثانیه تولیدشود.
بقیه رودرتاپیک های بعدی توضیح خواهم داد.موفق باشیید.
 
آخرین ویرایش:

سعید گروسی

عضو جدید
کاربر ممتاز
دوست عزیزاگه تاپیک طولانی میشه میخوام هم شماازریشه متوجه بشین که چی شده وهم اینکه دوستان دیگری که این تاپیک رومیبینن استفاده کنن.
الان میخوام یکی ازمدهای تایمریک که دربرنامه ماوجودداردراتوضیح بدم .
راه اندازی تايمر 1 در مد مقايسه ای(Compare):

در اين مد شما ميتوانيد مقدار تايمر 1 را با دو عدد دلخواه مقايسه کنيد و درصورت برابری يا نابرابری مقدار تايمر بامقدار دلخواه وضعيت پايه هایoc1aوoc1bرا تغيير دهيد. راه اندازی تايمر يک در مد مقايسه ای با دستورات زير
انجام ميشود:
CONFIG TIMER1= TIMER,COMPARE A = CLEAR
|SET|TOGGLE|DISCONNECT,COMPARE B = CLEAR
|SET|TOGGLE|DISCONNECT, PRESCALE=1|8|64|256|1024,CLEAR TIMER=1|0

COMPARE A = CLEAR |SET|TOGGLE|DISCONNECT:زمانی که مقدار شمرده شده توسط تايمر 1 با مقدارCOMPARE Aکه بعدا معرفی ميشود ، برابر شد ،پايه خروجی ،OC1A
می تواندSET( يک), (صفر )CLEAR ,(برعکس)TOGGLEو يا ارتباط پايه با مد مقايسه ای قطع شود.
COMPARE B = CLEAR |SET|TOGGLE|DISCONNECT:این هم دقیقاشبیه بالایی.
PRESCALE=1|8|64|256|1024:عددPREACALEفرکانس (دقت ) تايمر را معيين ميکند.
CLEAR TIMER = 1|0:با انتخاب گزينه 1 ،محتوای تايمر/کانتر در زمان تطابق مقايسه ای($0000 ) RESET میشود و در صورت انتخاب 0 مقدار شمرده شده تغييری نميکند.
با دستورات زير ميتوان عددی را که محتوای تايمر بايد با ان مقايسه شود را تعيين کرد:

Compare1a = x
Compare1b =x
به جای xيک عدد ثابت يا يک متغيير قرار ميگيرد ، هنگامی که عدد شمرده شده توسط تايمر يک با اعداد گذاشته شده
برابر شد ميکرو وضعيت پايه های مربوطه را همانگونه که در پيکربندی مشخص کرديد تغيير ميدهد.
 

سعید گروسی

عضو جدید
کاربر ممتاز
چون یک ثانیه روازقبل ساختیم وازمتغییرهااستفاده کردم وهمچنین برای اینکه برنامه پیچیده نشوددیگرازمدمقایسه ای استفاده نکردم. خب اینم برنامه، توضیح خواستین میدم.موفق باشین.

 
بالا