[Hỏi] cách sử dụng EEPROM atmega16 trong codevisionavr

Collapse
X
 
  • Giờ
  • Show
Clear All
new posts
  • xuan08dv
    Thành viên mới
    • Aug 2010
    • 9

    #1

    [Hỏi] cách sử dụng EEPROM atmega16 trong codevisionavr

    chào các bác!!!
    e đang gặp vấn đề về eeprom của thằng mega16. tình trạng là sau khi gán giá trị cho 1 biến eeprom và reset là nó lại =0. tuy nhiên nếu ở đầu chương trình nếu gán biến 1 giá trị nào đó thì khi reset lại ko =0. VD: r1[1]=5;
    e nạp bằng BurnE, đã set fuse cho eeprom ko bị xóa khi ngắt nguồn.
    thêm 1 điều ko hiểu nữa là sau khi biên dịch thì %Eeprom = 0 cho dù có khai báo biến eeprom.

    Khai báo biến:
    #include <eeprom.h>
    #define un unsigned;
    // Declare your global variables here
    eeprom un char r1[24];

    Ghi eeprom:
    #asm("cli");
    r1[1]++;
    #asm("sei");

    thanks các bác
  • queduong
    Moderator
    • Jul 2005
    • 6781

    #2
    void EEPROM_Write(unsigned int dchi, unsigned char dlieu)
    {
    while(EECR.1==1);
    EEAR = dchi;
    EEDR = dlieu;
    EECR.2 = 1;
    EECR.1 = 1;
    }

    //doc 1 byte du lieu tu dia chi cua eeprom//////////////////////////
    unsigned char EEPROM_Read(unsigned int dchi)
    {
    while(EECR.1);
    EEAR = dchi;
    EECR.0 = 1;
    return EEDR;
    }

    Module RF chuyên dụng điều khiển, truyền dữ liệu, thiết kế đề tài, dự án điện tử - chuyển giao công nghệ... ĐT: 0904964977 - email: dientuqueduong@yahoo.com

    Comment

    • xuan08dv
      Thành viên mới
      • Aug 2010
      • 9

      #3
      thanks bác nhiều!!!
      e đã làm đc rồi.
      tuy nhiên e vẫn có thắc mắc là tại sao khi biên dịch thì thằng EEPROM Usage vẫn là 0%.
      Và trong phần Help của codevision (và có nhiều người nói) là cách sử dụng biến EEPROM giống như 1 biến bình thường

      Comment

      • hahai1507
        Thành viên chính thức
        • May 2009
        • 38

        #4
        các bác cho em hỏi tại sao em viết chương trình ghi chuỗi vào eeprom , đã gán địa chỉ cho bít mà khi lưu chuỗi vô nó cứ gán vô bit đầu tiên. gửi lên máy tính thì chỉ hiển thị chuỗi đầu tiên. đây là code của em nhờ các bác mổ sẻ giùm coi lỗi ở đâu:

        #include <mega8.h>
        #include <alcd.h>
        #include <delay.h>
        #include <string.h>
        #include <stdio.h>
        #include <stdlib.h>
        #include <stdarg.h>

        unsigned char *a="01634709835";
        unsigned char *b="09179472770";
        unsigned char *c="09741413050";
        unsigned char *d="abcdefnhyk0";
        unsigned char a1[12],a2[12],a3[12],a4[12];

        /////////xu ly luu eeprom\\\\\\\\\\\\

        unsigned char Data[12];
        unsigned int uuu=0;
        //////ghi vao eeprom\\\\\\\\\\
        void ghi_eeprom(unsigned int Address, unsigned char Data[12])
        {
        unsigned int nnn=0;
        nnn=Address;
        while(nnn<=(Address+12))
        {
        /* Wait for completion of previous write */
        while(EECR & (1<<EEWE))
        ;
        /* Set up address and data registers */
        EEAR = nnn;
        EEDR = Data[nnn];
        /* Write logical one to EEMWE */
        EECR |= (1<<EEMWE);
        /* Start eeprom write by setting EEWE */
        EECR |= (1<<EEWE);
        nnn++;
        }
        while(uuu<=12)
        {
        Data[uuu]=' ';
        uuu++;
        }
        }
        //////////doc tu eeprom\\\\\\\\\\\\\\\\

        unsigned char doc_eeprom(unsigned int Address)
        {
        unsigned int aaa=0;
        aaa=Address;
        while(aaa<=(Address+12))
        {
        /* Wait for completion of previous write */
        while(EECR & (1<<EEWE))
        ;
        /* Set up address register */
        EEAR = aaa;
        /* Start eeprom read by writing EERE */
        EECR |= (1<<EERE);
        /* Return data from data register */
        Data[aaa]=EEDR;
        aaa++;
        }
        return aaa;
        }

        void main(void)
        {

        PORTB=0x00;
        DDRB=0x00;
        PORTC=0x00;
        DDRC=0x00;
        PORTD=0x00;
        DDRD=0x00;

        UCSRA=0x00;
        UCSRB=0x98;
        UCSRC=0x86;
        UBRRH=0x00;
        UBRRL=0x33;


        lcd_init(16);

        #asm("sei")
        ghi_eeprom(0,a);
        doc_eeprom(0);
        strcpy(a1,Data);
        ghi_eeprom(12,b);
        doc_eeprom(12);
        strcpy(a2,Data);
        ghi_eeprom(24,c);
        doc_eeprom(24);
        strcpy(a3,Data);
        ghi_eeprom(36,d);
        doc_eeprom(36);
        strcpy(a4,Data);


        while (1)
        {

        printf("%s",a1);
        printf("\r\n");
        delay_ms(1000);

        printf("%s",a2);
        printf("\r\n");
        delay_ms(1000);

        printf("%s",a3);
        printf("\r\n");
        delay_ms(1000);

        printf("%s",a4);
        printf("\r\n");
        delay_ms(1000);
        }
        }

        Comment

        • hahai1507
          Thành viên chính thức
          • May 2009
          • 38

          #5
          đây là hình ảnh tren mô phong

          Comment

          Về tác giả

          Collapse

          xuan08dv Tìm hiểu thêm về xuan08dv

          Bài viết mới nhất

          Collapse

          Đang tải...