Thông báo

Collapse
No announcement yet.

cần giúp đỡ eeprom atmega8 (lưu chuỗi vào bộ nhớ eeprom)

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

  • cần giúp đỡ eeprom atmega8 (lưu chuỗi vào bộ nhớ eeprom)

    xin chào cả nhà. em dang tập viết lập trình. em sử dụng atmega8 viết trên CodeVisionAVR. em muốn lưu chuỗi vào bộ nhớ eeprom. vấn đề của em là lưu nhiều chuỗi vào eeprom với dịa chỉ xác định. em đang gặp chục chặc là vị trí lưu ko đúng. chuôi lưu sau lại chở về vị trí ban đâu mà ko tiếp tục lưu ở vị trí dịnh sẵn. phần đọc eeprom chỉ dọc được ở vị trí lưu chuỗi đầu các chuỗi sau ở vị trí khác ko odcjd được.
    đây là code của em . mong ae mổ sẻ giùm.


    #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);
    }
    }

  • #2
    Nguyên văn bởi hahai1507 Xem bài viết
    xin chào cả nhà. em dang tập viết lập trình. em sử dụng atmega8 viết trên CodeVisionAVR. em muốn lưu chuỗi vào bộ nhớ eeprom. vấn đề của em là lưu nhiều chuỗi vào eeprom với dịa chỉ xác định. em đang gặp chục chặc là vị trí lưu ko đúng. chuôi lưu sau lại chở về vị trí ban đâu mà ko tiếp tục lưu ở vị trí dịnh sẵn. phần đọc eeprom chỉ dọc được ở vị trí lưu chuỗi đầu các chuỗi sau ở vị trí khác ko odcjd được.
    đây là code của em . mong ae mổ sẻ giùm.


    #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;
    unsigned char chiso =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[chiso]; ////////////// bạn chú ý đoạn này nha chỉ số của mảng Data[nnn] là sai
    /* Write logical one to EEMWE */
    EECR |= (1<<EEMWE);
    /* Start eeprom write by setting EEWE */
    EECR |= (1<<EEWE);
    nnn++;
    chiso++; ///////////// bạn chú ý đoạn này nữa nha
    }
    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);
    }
    }
    Chào bạn !

    mình cũng mới học vi điều khiển và lập trình thôi , nhưng mình thấy vấn đề của bạn nằm ở chỗ hàm ghi va đọc epprom.
    cụ thể là ở hàm ghi epprom bạn lấy chỉ số (nnn) làm chỉ số để truy cập từng phần tử mảng là sai.
    Mình đã sửa lại rồi đấy.bạn nhìn ở hàm ghi epprom ấy. nhưng mình sửa là để bạn thấy được cái sai thôi . chứ chưa sửa lại hoàn chỉnh đâu. Bạn tự làm lấy nhé.
    Chúc vui!

    Comment

    Về tác giả

    Collapse

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

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

    Collapse

    • canh4433
      Trả lời cho Hỏi xoáy đáp xoay trong lĩnh vực điện tử
      canh4433
      Bạn dùng dataman làm việc với con tms320f2812 chưa? Mình muốn lấy chương trình từ con chip đó ra. Bạn biết bộ nào dùng tốt ko. chỉ cho mình với....
      hôm nay, 13:55
    • Bao Anh
      Trả lời cho Tìm mua điện trở công suất 50w hoặc 30w
      Bao Anh
      Bạn cân mua linh kiện theo yêu cầu tất cả về LK dán (0201 trở lên,IC,công suất), tất cả về LK cắm ,PCB,SMT,giải pháp thì mọi người liên hệ mình sẽ hỗ trợ nhé !
      Email: trvquan789@gmail.com
      Contact :0982.095.966...
      hôm nay, 12:32
    • bqviet
      Trả lời cho Cho hỏi về mạch phản hồi UC3842
      bqviet
      Tụ C8 quá bé, đôi khi UC sẽ cắt nhầm vì tưởng cái gai áp là quá dòng FET.
      Zener D2 để làm cái quái gì ?

      Chân Comp và Vfb bản chất là đầu vào/ra của op-amp. Khi mắc với opto kết hợp thành mạch khuếch đại đảo. Nếu không...
      hôm nay, 12:32
    • trgiap
      Trả lời cho Hỏi về cách điều khiển nhiều led đơn
      trgiap
      Bạn nối chân + 8 Led vào 8 chân của 1 Port, chân - Led nối chung với nhau và nối vào Gnd. Để sáng dần bạn cấp vào Port đó lần lượt các giá trị 10000000; 1100000; 11100000; 11110000; 11111000; 11111100; 11111110; 1111111 (bạn đổi sang số Hex cho gọn).
      hôm nay, 12:28
    • bqviet
      Trả lời cho Tụ lọc nguồn có quan tâm đến giá trị dòng điện.
      bqviet
      Nếu thiết kế nguồn băm xung, thông số này rất quan trọng, ảnh hưởng tới chất lượng đầu ra và tuổi thọ tụ. Nếu làm nguồn chỉnh lưu với biến áp sắt từ hoặc mạch analog, trong đa số trường hợp thông số này ít ý nghĩa.
      hôm nay, 12:27
    • Bao Anh
      Trả lời cho Cần mua IC dán
      Bao Anh
      Chào bạn htanbao nếu bạn muốn mua linh kiện dán với số lượng it hay nhiêu mình sẽ hỗ trợ bạn mua bạn có thể gởi email :trvquan789@gmail.com nội dung( part number,số lượng bao ) mình sẽ báo giá bạn xem nếu hợp lý thì mình sẽ mua cho bạn nhé!Cần...
      hôm nay, 11:53
    • caylua
      Công tắc nhận diện người đứng im
      caylua
      Chào các bác,
      Hiện mình tìm công tắc tự động nhận diện người mở đèn, không có thì tắt. Trên thị trường hiện này mình chỉ thấy công tắc cảm biến chuyển động, khi đứng yên thì không hoạt động (đèn tắt, phải cử động liên...
      17-10-2018, 18:42
    • Thangbpvn
      Trả lời cho Công tắc nhận diện người đứng im
      Thangbpvn
      Hi chính xác bác ạ. Trừ khi làm thương mại hay quảng bá mới cần làm hiện đại. K thì cứ cảm biến bt thôi. Ổn định an toàn và chắc chắn.
      Hi ở nhà em làm 1 bộ đèn tự động cho nhà tắm và nhà vs sài năng lượng mặt trời với 2cell...
      hôm nay, 11:29
    • nguyendinhvan
      Trả lời cho Công tắc nhận diện người đứng im
      nguyendinhvan
      Lắp cái công tắc vào cửa thôi . Khi tắm thì đóng chặt cài then ( công tắc đóng ). Khi không tắm thì mở hé cửa cho khô nhà tắm ( công tắc mở ). Với cả để chắc chắn là then cửa nhà tắm không bi ... kẹt ....
      Công tắc tác động...
      hôm nay, 10:43
    • nguyendinhvan
      Trả lời cho Analog IC design
      nguyendinhvan
      Hi !
      Bạn muốn khẳng định mình trong xã hội . Bạn phair làm được nhiều thứ , làm được những thứ quan trọng , nhiều người cần .
      Trong khi đó nghề thiết kế IC thì ngược lại .
      XH cần nhiều loại IC thật .
      Nhưng người...
      hôm nay, 10:30
    Đang tải...
    X