میکروکنترلرهای AVR دارای سه نوع حافظه هستند. حافظه Flash ، حافظه EEPROM و حافظه SRAM که در ادامه به تشریح وظیفه و کاربرد انواع حافظه در میکروکنترلرهای AVR می پردازیم . با ما همراه باشید.
انواع حافظه در میکروکنترلرهای AVR
حافظه Flash
در این حافظه کدهای برنامه ، یعنی همان فایل hex.* که توسط پروگرامر بر روی تراشه load می شود قرار دارد. و CPU میکروکنترلر برنامه ای که اجرا می کند را از این حافظه برداشت می کند. این حافظه میکرو کنترلر های AVR از نسل جدید حافظه می باشد که دارای دو قسمت Application و Boot Loader هستند. در قسمت Application کدهای برنامه قرار می گیرد. اما ناحیه Boot Loader این امکان را فراهم می کند که میکروکنترلر بدون استفاده از ابزار پروگرامر ، برنامه حافظه Flash را تغییر دهد. برای تعیین ثابت ها و یا آرایه ها و … در این حافظه قبل از نام و اندیس کلمه flash قرار می گیرد.
مثلا تعریف یک آرایه در این حافظه به صورت زیر نوشته می شود.
;[] flash char row
حافظه EEPROM
این حافظه جزء حافظه های ماندگار می باشد. که میکروکنترلر می تواند اطلاعاتی را در این حافظه داخلی بنویسد و یا اطلاعاتی را از آن بخواند. همچنین لازم به یادآوری است که این حافظه در صورت قطع تغذیه میکروکنترلر پاک نمی شود. از این حافظه زمانی استفاده می شود که میکروکنترلر باید دیتایی را در خود ثبت کند و بعداً آن را به کاربر اعلام کند و در صورتی که میکروکنترلر Reset شد یا تغذیه آن قطع گردد داده ذخیره شده از بین نرود. یکی از نکات مهمی که باید توجه کنید . برای خواندن و یا نوشتن در حافظه eeprom باید یک زمان تاخیری (حدود 10 میلی ثانیه) در نظر گرفته شود. یعنی زمانی که از این حافظه در حین اجرای برنامه دیتایی فراخوانی و یا ثبت می شود باید بعد از یک تاخیر 10 میلی ثانیه به ادامه برنامه بپردازید. برای تعیین متغیرها ، ثابت ها و یا آرایه ها و … در این حافظه قبل از نام و اندیس کلمه eeprom قرار می گیرد.
مثال :
;eeprom unsigned int x
حافظه SRAM :
همانطور که ذکر کردیم کدهای برنامه در حافظه Flash قرار می گیرند. و CPU میکرو کنترلر کدهای دستورات برنامه را آشکار می کند . حال باید حاصل دستورات انجام شده در یک حافظه موقت ذخیره شود. این حافظه در میکرو کنترلر AVR از نوع Static RAM می باشد. رجیسترهای همه منظوره و رجیسترهای ورودی و خروجی جزء این حافظه می باشند. محتوای این حافظه با قطع تغذیه پاک می گردد و در صورتی که میکرو کنترلر را Reset کنیم محتوای رجیسترها صفر می شود. اما محتوای حافظه SRAM (همان مقدار دهی اولیه به متغیر هایی که در زمان برنامه نویسی ثبت شده اند) صفر نمی شود. برای تعیین متغیرها ، ثابت ها و یا آرایه ها و … در این حافظه قبل از نام و اندیس کلمه نوشته ای قرار نمی گیرد.
مثال :
;unsigned int x=0x16
نکته :
در مثال بالا مقدار 0x16 در متغیر x قرار داده شده و در هنگام Reset با همین مقدار بارگیری می شود. و در صورتی که مقدار دهی نشود. این مقدار برابر صفر در نظر گرفته می شود.
مطالب پیشنهادی :
عالییی