Thông báo

Collapse
No announcement yet.

Lưu dữ liệu vaò EEPROM của AVR

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

  • Lưu dữ liệu vaò EEPROM của AVR

    chào. Các bạn ai biết chỉ mình tí. Mình làm mạch đếm sản phẩm rồi lưu giá trị vào EEPROM của AVR để phòng khi mất điện. Nhưng khi đọc dữ liệu ra nó lại bị thiếu mất hàng đơn vị , hàng đơn vị nó chỉ hiển thị số "0". mình lưu số "125" khi rút điện ra cắm vào thì nó hiển thị số "120" thui. Mình làm đếm 3 tầng. Tầng 1 và 3 hiển thỉ bình thường. Tầng 2 (dèm ) bị lỗi. bạn nào biết cách khằc phục chỉ cho mình biết nha. cám ơn nhiều.

    /////////// WRITE //////////

    void vrite_dem1()
    { char x;
    x= dem1/1000;
    EEPROM_Write(0x0007,x);
    x= dem1/100;
    EEPROM_Write(0x0008,x%10);
    x= dem1/10;
    EEPROM_Write(0x0009,x%10);
    EEPROM_Write(0x0010,dem1%10);
    }


    /*xxxxxxxxxxxxxxxxxxxxxxx */
    void vrite_dem2()
    { char x;
    x= dem2/1000;
    EEPROM_Write(0x100,x);
    x= dem2/100;
    EEPROM_Write(0x101,x%10);
    x= dem2/10;
    EEPROM_Write(0x102,x%10);
    EEPROM_Write(0x103,dem2%10);

    }
    /*hhhhhhhhhhhhhhhhhhhhhhhh*/
    void vrite_dem3()
    { char x;


    EEPROM_Write(0x0000,dem3/100);
    x= dem3/10;
    EEPROM_Write(0x0001,x%10);
    EEPROM_Write(0x0002,dem3%10);
    }

    ///////////// READ ////
    dem2 = 0;
    for(j=0;j<4;j++)
    {dem2 = dem2*10 + EEPROM_Read(0x100+j); }
    dem1 = 0;
    for(j=0;j<4;j++)
    {dem1 = dem1*10 + EEPROM_Read(0x0007+j); }


    dem3 = 0;
    for(j=0;j<3;j++)
    {dem3 = dem3*10 + EEPROM_Read(0x0000+j); }
    dk = 1;

  • #2
    Nguyên văn bởi hongsonspk Xem bài viết
    chào. Các bạn ai biết chỉ mình tí. Mình làm mạch đếm sản phẩm rồi lưu giá trị vào EEPROM của AVR để phòng khi mất điện. Nhưng khi đọc dữ liệu ra nó lại bị thiếu mất hàng đơn vị , hàng đơn vị nó chỉ hiển thị số "0". mình lưu số "125" khi rút điện ra cắm vào thì nó hiển thị số "120" thui. Mình làm đếm 3 tầng. Tầng 1 và 3 hiển thỉ bình thường. Tầng 2 (dèm ) bị lỗi. bạn nào biết cách khằc phục chỉ cho mình biết nha. cám ơn nhiều.

    /////////// WRITE //////////

    void vrite_dem1()
    { char x;
    x= dem1/1000;
    EEPROM_Write(0x0007,x);
    x= dem1/100;
    EEPROM_Write(0x0008,x%10);
    x= dem1/10;
    EEPROM_Write(0x0009,x%10);
    EEPROM_Write(0x0010,dem1%10);
    }


    /*xxxxxxxxxxxxxxxxxxxxxxx */
    void vrite_dem2()
    { char x;
    x= dem2/1000;
    EEPROM_Write(0x100,x);
    x= dem2/100;
    EEPROM_Write(0x101,x%10);
    x= dem2/10;
    EEPROM_Write(0x102,x%10);
    EEPROM_Write(0x103,dem2%10);

    }
    /*hhhhhhhhhhhhhhhhhhhhhhhh*/
    void vrite_dem3()
    { char x;


    EEPROM_Write(0x0000,dem3/100);
    x= dem3/10;
    EEPROM_Write(0x0001,x%10);
    EEPROM_Write(0x0002,dem3%10);
    }

    ///////////// READ ////
    dem2 = 0;
    for(j=0;j<4;j++)
    {dem2 = dem2*10 + EEPROM_Read(0x100+j); }
    dem1 = 0;
    for(j=0;j<4;j++)
    {dem1 = dem1*10 + EEPROM_Read(0x0007+j); }


    dem3 = 0;
    for(j=0;j<3;j++)
    {dem3 = dem3*10 + EEPROM_Read(0x0000+j); }
    dk = 1;
    Mình không rành về C, đọc code của bạn ở phần lưu đầu 0x0009 phải tời 0x000a thì tới lúc vòng lặp đọc dữ liệu của bạn mới đọc đúng được giá trị đã lưu.
    Công ty TNHH Tự Động Hóa Đạt Lân
    32/36, Ông Ích Khiêm, F14, Q11
    ĐT: 08.3974 7308 - 0937.197.001
    email:
    Webite:

    Comment

    Về tác giả

    Collapse

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

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

    Collapse

    Đang tải...
    X