Thông báo

Collapse
No announcement yet.

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

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • [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

  • #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


    • #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


      • #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


        • #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...
          X