با سلام
همون طور که می دونید مقدار متغیر ها به صورت پیش فرض در بیسکام صفره. در کدویژن هم همین طور. تو کدوژن که یه فایل اسمبلی تو خروجی ارائه میده من دقت کردم دیدم خود کامپایلر داره رم رو کلا پاک میکنه. یعنی مقدار دهی پیش فرض ، نرم افزاریه نه سخت افزاری.
حالا سوال: آیا میشه کاری کرد که وقتی میکرو رو ریست می کنیم یا با واچداگ ریست میشه و بعدش که برنامه در حال لود هستش مقدار متغیر ها به حالت پیش فرض (صفر) تغییر نکنه ؟ در کدویژن فکر میکنم با تغییر در فایل اسمبلی این کار ممکن باشه ولی در بیکام که فایل اسمبلی نداره نمی دونم چه باید کرد. آیا جایی رو باید تنظیم کرد یا کاری دیگر؟
ممنون
فکر می کنم تو تنظیمات خود کمپایلر (کدویژن فکر کنم داشت) یه جایی داشت که می شد بهش بگی داده ها رو صفر نکنه فکر کنم اسمش اینشیال واریابل یا یه همچین چیزی بود
کلا متغیر ها در هر زبان برنامه نویسی صفر در نظر گرفته میشوند به غیر از بعضی زبانها که منطقه ای را برای متغیر ها به صورت مشترک با برنامه های دیگر استفاده میکنند مثل سی که تا 500 کیلو می تونه طول متغیرش باشه البته به صورت ارایه این همون فضایی که لیست پیوندی پشته و توابع از اون استفاده میکنند شما بهتره داده هاتون رو تو eeprom که به همین منظور است بنویسید که محدودیت تعداد نوشتن رو باید در نظر بگیرید ویا برای چه میکرو ریست شه میشه با یک goto از خط اول برنامه شروع کنید تا متغیرها هم حفظ بشه
با تشکر از دوستان
باید بگم که بنده این کار رو برای حفظ شدن مقادیر real_time_clock داخلی ، در نظر داشتم. و همون طور که مشخص هستش از eeprom نمی شه استفاده کرد.
آقا پیداش کردم دستور
NORAMCLEAR $ این کار و میکنه
دستور جالبی بود اگه برای ساعت میخوای 1307 ای سی خوبیه
عزیزان سلام
حالا که پاک نشدن رم رو بکار بردم مشکل جدیدی بوجود اومده و اون هم اینه که مقدار پیش فرض متغیر ها وقتی میکرو رو روشن میکنیم (نه موقعی که ریست میکنیم) چیه؟ والا من یه امتحان تو عمل کردم . موقع روشن شدن مقادیر برابر صفر یا هر عدد دیگه ای نیست. یکی 7،یکی 133 و.. . البته تقریبا همیشه مقدار یه متغیر موقع روشن شدن ثابته. یعنی اگه یه متغیر یه بار 140 اومد تقریبا همیشه 140 میاد . من که گیج شدم چون این مقدار به آدرسی که اون متغیر در اون قرار داده شده بود هم بی ارتباط بود. (مکان متغیر در بیسکام با at مشخص میشه).
من اون متغیر هایی رو که باید پیش فرض صفر میداشتن رو صفر کردم . ولی مسئله این جاست که متغیر هایی که توی اون ها ساعت قرار داره فقط موقعی که میکرو روشن میشه باید مقدار دهی بشن نه هیج موقع دیگه ای . من برای این کار یه متغیر در رم گذاشتم که برنامه با اون بفهمه که الان که داره از اول شروع به کار میکنه به خاطره روشن شدنه یا ریست شدن. اسمش frs هستش و date_clk آرایه ساعت. نگاه کنید. (ساعت 12:00 24/04/1386)
If Frs = 7 Then
Date_clk(1) = 12
Date_clk(2) = 0
Date_clk(3) = 13
Date_clk(4) = 86
Date_clk(5) = 4
Date_clk(6) = 24
Frs = 1
End If
همون طور که میبینید این جا مقدار پیش فرض 7 هستش. این در حالی که تو پروتئوس همه متغیر ها صفر هستن. این عدد 7 متاسفانه قابل اعتماد نیست.
اگه من از ds 1307 استفاده نمی کنم به خاطره کمبود پایه است.
اصلا اون کسایی که RTC داخلی استفاده میکنن، چی کار میکنن؟یعنی میکروشون ریست نمی شه؟ یا واچداگ استفاده نمی کنن؟
دوستان اگه اطلاعاتی دارن لطف کنن بگن.
خود میکرو یه رجیستر داخلی داره که می تونی بفهمی ریست سرد بوده یا ریست گرم و یا اینکه با واچ داگ ریست شده
شما می تونی چک کنی اگه با وصل برق ریست شده بود متغیر ها رو مقدار دهی کنی
جالبه اگه میشه بیشتر توضیح بدین
با سلام خدمت دوستان
آقای new design خواسته بودن که بیشتر توضیح داده بشه.
یه ثبات هست به نام MCUCSR که تو اون مشخص میکنه منبع ریست چی بوده.
کلا منابع ریست اینا هستن:
JTAG , WATCHDOG , BROWN-OUT , EXTERNAL , POWER-ON
که برای هر کدوم یه بیت هست که با یک شدن مشخص میکنه که کدوم باعث ریست شده. این بیت یک می مونه و باید خودمون صفرش کنیم.