اطلاعیه

Collapse
No announcement yet.

89c51ed2

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    89c51ed2

    با سلام می خواستم اگر امکان دارد نحوه تعریف متغییر از حافظه eeprom در میکرو 89c51ed2 را توضیح دهید من این کار رو در کامپایلر keil انجام دادم ولی پس از قطع برق از میکرو اطلاعات پاک می شد
    به دیگران بیاموز تا بتو بیاموزند
    bioosun@gmail.com

    #2
    پاسخ : 89c51ed2

    با سلام
    من مطلب زیر رو از خود دیتاشیت این قطعه نقل قول میکنم:
    بلوک دو کیلو بایتیEEPROM داخلی در آدرسهای 0000H تا 07FFH از XRAM قرار گرفته است که از طریق تنظیم بیتهای ثبات EECON انتخاب می شود.
    عملیات خواندن/نوشتن از/روی این حافظه توسط دستور MOVX انجام می شود.

    برای نوشتن باید مراحل زیر را طی کنید:
    • [li]ابتدا پرچم EEBUSY را بررسی کنید. (این پرچم نشانگر مشغول بودن EEPROM است و اگر بالا بود نباید عملیات را ادامه دهیم.)[/li]
      [li]اگر در برنامه روالهای وقفه ای وجود دارند که از XRAM استفاده میکنند آنها را ذخیره و غیر فعال کنید.[/li]
      [li]آدرس خانه ای که قصد دارید روی آن بنویسید را در ثبات DPTR بریزید.[/li]
      [li]داده ای که قرار است نوشته شود را در ثبات A بریزید.[/li]
      [li]بیت EEE از ثبات EECON را "یک" کنید.[/li]
      [li]سپس با استفاده از دستور MOVX @DPTR,A ، داده را روی آدرس مورد نظر بنویسید.[/li]
      [li]بیت EEE از ثبات EECON را "صفر" کنید.[/li]
      [li]روالهای وقفه ای را که غیر فعال کرده بودید، مجدداً فعال کنید.[/li]
      [li]در این زمان پرچم EEBUSY توسط سخت افزار به نشانه مشغول بودن و غیر قابل دسترسی بودنِ قسمت EEPROM بالا می رود. (مثل پرچم کمک داور به نشانه آفساید!! :icon_razz: )[/li]
      [li]در نهایت و پس از انجام عملیات پرچم EEBUSY به نشانه آزاد بودن EEPROM پایین آورده می شود.[/li]


    برای خواندن نیز مراحلی نظیر مراحل نوشتن طی میشود با این تفاوت که در خواندن به جای دستور MOVX @DPTR,A آنرا به این صورت بکار میبریم: MOVX A,@DPTR

    ساختار ثبات EECON به این صورت است:
    | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
    _______________________________________________
    | EEE | EEBUSY | - | - | - | - | - | - |

    که در اینجا EEE بیت فعال ساز EEPROM و EEBUSY پرچم مشغول بودن EEPROM است.
    (توجه: ثبات EECON "بیت آدرس پذیر" (bit addressable) نیست یعنی قابلیت آدرس پذیری بیتی ندارد لذا برای فعال کردن EEPROM باید دستور را به این صورت بنویسیم: MOV EECON,#02H

    امیدوارم مفید بوده باشه. اگر باز هم سوالی داشتی خوشحال میشم بتونم جواب بدم .(اگه بتونم! :mrgreen: )
    موفق باشی

    دیدگاه


      #3
      پاسخ : 89c51ed2

      ممنون ولی پاک شدنش رو نمیدونم چکار کنم در کامپایلر keil در مسیر \Keil\C51\EXAMPLES\FarMemory\E2PROM for the 80C51RD2 مثالی برای این موضوع به زبان c موجود است و کار هم می کند ولی به محض اینکه شما برق رو از میکرو قطع می کنید اطاعات پاک میشه بد جوری سر کارم گذاشته :eek: :eek: :eek: :eek:
      به دیگران بیاموز تا بتو بیاموزند
      bioosun@gmail.com

      دیدگاه


        #4
        پاسخ : 89c51ed2

        چی بگم والا
        احتمالاً مشکل از جای دیگست و این جور مشکل ها رو هیچکس به جز خود صاحب پروژه نمیتونه حل کنه. ولی من پیشنهاد میکنم یه برنامه ای بنویسید که روی EEPROM بنویسه و از روش بخونه و نمایش بده.
        بعد از این که مطمئن شدین در موقع بودن برق مشکلی نیست برق رو قطع کنید و بعد از وصل برق دوباره همونجا ها رو بخونید.

        همچنین توصیه میکنم کدی که نوشتین رو اینجا بذارین . متاسفانه من C کار نکردم ولی شاید دوستان بتونن کمک کنن.

        موفق باشید

        دیدگاه


          #5
          پاسخ : 89c51ed2

          بلاخره مشکل حل شد روتین رو ایجا قرار میدم تا بقیه هم استفاده کنند
          unsigned char read_8bit_EEPROM (unsigned int adr)
          {

          unsigned char val;
          bit ea_save;
          while (EECON&1); //wait while busy

          ea_save=EA;
          EA=0;
          EECON |= 0x02;//Enable eeprom data;
          val=*(unsigned char xdata*)adr;
          EECON &= ~0x02;//Disable eeprom data;
          EA=ea_save;
          return val;
          }


          // Write EEPROM 8-bit 'val' at address 'adr'
          void write_8bit_EEPROM (unsigned int adr, unsigned char value)
          {
          bit ea_save;
          while(EECON & 0x01);
          ea_save=EA;
          EA=0;
          EECON |= 0x02;//Enable eeprom data
          *(unsigned char xdata*)adr=value;
          EECON &= ~0x02;//Disable eeprom data
          EA=ea_save;
          }
          به دیگران بیاموز تا بتو بیاموزند
          bioosun@gmail.com

          دیدگاه

          لطفا صبر کنید...
          X