(۱۲-مهر-۱۳۹۱, ۰۱:۴۷:۴۴)baharbahari نوشته است: [ -> ]سلام
خیلی ممنون از پاسخ شما
بخشیدشما می تونید تیکه تیکه برنامه رو بهم توضیح بدید مثلا مثل همین که گفتید باافزایش متغیر I در هر مرحله یه قسمتی کنترل می شود .
مثلا تایمرهابرای چی تعریف شدن و چرا از چند تایمر و کانتر استفاده کرده وبعد از سرریز شدن تایمرها،تایمرهابه زیربرنامه ها میرن که چه کاری انجام بدن .یه جورایی تو برنامه گیج شدم ولی دارم سعی میکنم بفهممش بیشترم به خاطر اینه که با زبان بیسیک کار نکردم . چون میدونم شما تو این زمینه مهارت دارین خواستم تو تحلیلی که میکنم مطمئن بشم .
منظورم از تیکه تیکه اینه که مثلا توهمون IF اول ، pind.7 چک میشه اگه صفر بود 40میلی ثانیه منتظر میمونه بعد میره سراغ IF بعدی خب چراچک میکنه این پایه صفر هست یانه ؟ و40 میلی ثانیه منتظر میمونه وهمین طور الی آخر
خیلی ممنون میشم ازتون خیلی به کمک احتیاج دارم ممنون .
بازم خیلی ممنون از پاسخ شما
سلام
40 میلی ثانیه برای حذف لرزش ویا نویز قطع و وصل کلیدهای مکانیکی است Bitwait PIND.7 ,SET بعدی هم برای همین است
با دستورCONFIG تایمرها وLCD بیکر بندی شده اند مثلا در C برای LCD
به این ترتیب است
asm#
eqe__lcd_port=0x18;PORTD.
endasm#
در بسکام تایمر با تایمر خوانده می شود مثلا myt=TIMER0 ودر C
با TCNT مثلا myt=TCNT0 (البته در بسکام از هر دو دستور میتوان استفاده
کرد)
DIM در بسکام همان int در C است یعنی تعریف متغیر
تایمر1 با ورودی INT1(بایه 5 میکرو)بالسهای ورودی را میشمارد در
CONFIG این تایمر به صورت counter تعریف شده با Edge=falling
یعنی با لبه بایین رونده بالس ورودی میشمارد این تایمر تا 65536
میتواند بشمارد و بعد از ان سر ریز میشود در سر ریز (interrupt)
این تایمر (رویه Tim1_isr) یک متغیر بنام Tc1 یک واحد افزایش میابد
یعنی Incr Tc1(در بسکام Incr یعنی یک واحد افزایش) ---
در نهایت تعداد کل بالسها توسط ضرب Tc1 در عدد 65535 بدست میاید البته
در یک دوره زمانی مشخص تا Tc1 دوباره صفر شود این دوره زمانی را تایمر2
بعهده دارد
در CONFIG این تایمر بصورت تایمر با prescale=64 است یعنی بالس ساعت اصلی که در اینجا 8Mhz است بر 64 تقسیم میشود وچون مقدار اولیه این تایمر
برابر با 131 است(TCNT2=&H83) وخود تایمر تا 256 میشمارد وسر ریز میشود نتیجه میشود
125=256-131 که 125 مقدار سرریز است نتیجه interrupt این تایمر میشود
(T2interrupt=8000000/(125*64 که میشود یکهزارم ثانیه
در رویه سر ریز این تایمر (Tim2_isr) متغیر Tc یک واحد افزایش میابد
تا 250 وبعد ازان LCD مقدار را نمایش میدهد وتایمرها ریست میشوند
بس کل زمان اندازه گیری مساوی است با Tk=250*.001 که میشود یک چهارم ثانیه
تایمر 0 (TIMER0) برای مد سنجش خازنهای با ظرفیت بالا است ودر این مد بجای
شمارش بالسها بالسهای ورودی به تایمر0 بر 8 تقسیم وبعنوان زمان اندازه گیری استفاده میشود
درباره رویه های دیگر برنامه مشخص است و کنترل ان با متغیر I است
موفق باشید