đọc và ghi eprom

Collapse
X
 
  • Giờ
  • Show
Clear All
new posts
  • vuliemtd
    Nhập môn đệ tử
    • Mar 2010
    • 3

    #16
    Nguyên văn bởi Mr.Bi View Post
    Tại e k chịu tìm hỉu , cứ đụng tới cái j là lên diễn đàn hỏi , có ng trả lời liền nên k chịu động não search google. Dễ òm chứ có j đâu . Chỉ có 2 hàm : write_eeprom(address,value) và read_eeprom(address) . Cu thể như sau :
    Code:
    int8 a;
    main()
    { write_eeprom(0x01, 0xCA); // ghi 0xCA vào vị trí địa chỉ 0x01 trong eeprom
       a= read_eeprom(0x01) ; // đọc eeprom tại địa chỉ 0x01 , gán vào biến a
       while(1);
    }
    h biến a của e đã có giá trị 0xCA, đọc ghi eeprom lun đó , ok chứ ?
    em viết một đoạn code như sau:

    lần đầu tiên em ghi dữ liệu 200 vào địa chỉ 0x01 của EEPROM , sau đó hiên thị lên terminal kết quả ra là 200, đúng như giá trị mình ghi



    #include <16F877a.h>
    #include <def_877a.h>
    #device *=16// ADC=10
    #use delay(clock = 20000000)
    #fuses HS,NOWDT,PUT,NOPROTECT,NOLVP

    #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7)) //Khai bao su dung rs232, baudbit = 9600, truyen la cong RC6, nhan la cong RC7

    int8 i;

    void main(){



    while(true)

    {


    write_eeprom(0x01,200);
    delay_ms(100);
    i=read_eeprom(0x01);
    delay_ms(200);
    printf("bo nho : %u \r",i);
    delay_ms(1000);
    }
    }

    Sau đó em comment đoạn code // write_eeprom(0x01,200); rồi hiển thị dữ liệu ở địa chỉ 0x01 của EEPROM để kiểm tra kết quả đã được
    lưu vào địa chỉ 0x01 của EEPROM chưa thì kết quả hiện ra là 255 , không phải là giá trị 200 đã ghi như trước đó .cho em hỏi chương trình em như
    vậy có chỗ nào thiếu xót không, nhờ anh giúp đỡ với


    #include <16F877a.h>
    #include <def_877a.h>
    #device *=16// ADC=10
    #use delay(clock = 20000000)
    #fuses HS,NOWDT,PUT,NOPROTECT,NOLVP
    #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7)) //Khai bao su dung rs232, baudbit = 9600, truyen la cong RC6, nhan la cong RC7
    int8 i;
    void main()
    {

    while(true)

    {

    // write_eeprom(0x01,200);
    delay_ms(100);
    i=read_eeprom(0x01);
    delay_ms(200);
    printf("gia tri : %u \r",i);
    delay_ms(1000);
    }
    }

    Comment

    • vuliemtd
      Nhập môn đệ tử
      • Mar 2010
      • 3

      #17
      nhờ mấy bác giúp đỡ em với, vấn đề này em làm mấy hôm rồi vẫn chưa ra, đã thử ở mấy con PIC 16f877a khác kết quả vẫn không có như mong muốn, nhờ các bác giúp với

      Comment

      • bbld
        Nhập môn đệ tử
        • Jun 2010
        • 5

        #18
        Chào mọi người,mọi người cho mình hỏi mình dùng lệnh write_eeprom(add,data) và read_eeprom(add) trong ccs thì lại báo lỗi là function used but not defined...read_eeprom SCR3681
        mình không biết bị lỗi gì mong mọi người chỉ giúp
        [CODE]void Read_e2prom(void){
        fprintf(HOSTPC,">** Read eeprom program**\n\r");
        A=read_eeprom(A_eeprom);//trình dịch báo lỗi hàm chưa được định nghĩa
        B=read_eeprom(B_eeprom);
        C=read_eeprom(C_eeprom);
        D=read_eeprom(D_eeprom);
        E=read_eeprom(E_eeprom);
        F=read_eeprom(F_eeprom);
        G=read_eeprom(G_eeprom);
        H=read_eeprom(H_eeprom);
        fprintf(HOSTPC,">A=%d\n\r",A); delay_ms(10);
        fprintf(HOSTPC,">B=%d\n\r",B); delay_ms(10);
        fprintf(HOSTPC,">C=%d\n\r",C); delay_ms(10);
        fprintf(HOSTPC,">D=%d\n\r",D); delay_ms(10);
        fprintf(HOSTPC,">E=%d\n\r",E); delay_ms(10);
        fprintf(HOSTPC,">F=%d\n\r",F); delay_ms(10);
        fprintf(HOSTPC,">G=%d\n\r",G); delay_ms(10);
        fprintf(HOSTPC,">H=%d\n\r",H); delay_ms(10);
        }
        [CODE]
        Cám ơn mọi người

        Comment

        • romantics892005
          Nhập môn đệ tử
          • Jan 2011
          • 10

          #19
          Nếu dữ liệu là kiểu float thì sao các bác nhỉ ? có cách nào nhanh hơn là chuyển 32bit thành 4 lần 8bit rồi gửi từng cái không nhỉ ? em thấy cái này chỉ cho gửi dữ liệu 8bit mà em đang cần lưu kiểu float , em dùng ccs và pic877a. thanks ^^

          Comment

          • lenphat123
            Nhập môn đệ tử
            • Nov 2011
            • 8

            #20
            co ban nao biet cach ghi doc prom roi xuat ra cong com giao tiep voi may tinh k chi mh voi
            thay mh yeu cau sau khi nhan nut doc eeprom thi truyen ve may tinh va dung chuong trinh vb6 de tong hop xem co ban=o nhieu y kien chon nut do,AI GIUP MH VOI HUHUHUHU

            Comment

            • dongpeco80
              Nhập môn đệ tử
              • Dec 2011
              • 2

              #21
              có ai biết địa chỉ mua eprom 27c512 moi mà rẻ tại hà nội chủ rùm em với. cám ơn trước nhe.
              Last edited by dongpeco80; 22-12-2011, 12:45 PM. Lý do: thêm

              Comment

              • thuong_123
                Nhập môn đệ tử
                • Apr 2012
                • 5

                #22
                #include <16f877a.h>
                #FUSES HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
                //#use i2c(Master,slow,sda=PIN_C4,scl=PIN_C3)//toc do 100kb slow
                #use Delay(clock=20000000)
                //#include "lcd 8bit.h"


                //#define Mode PIN_A3
                //#define Up PIN_A2
                //#define Down PIN_A1
                //#define Setup PIN_A0


                /*
                int8 value=0,value_display=1,value_VC_front=7,value_VC_ rear=7,
                value_Tr=5,value_Md=3,value_Bas=1,
                value_Ce=7,value_Sub=8,

                value_Mt,value_1db,value_10db,
                value_B=158,value_M=172,value_T=186,
                value_FL=24,value_FR=40,value_RR=88,value_RL=72,
                value_C=56,value_SW=104;//
                */
                int8 value, value_display, value_VC_front, value_VC_rear,
                value_Tr,value_Md,value_Bas,
                value_Ce,value_Sub,
                value_Mt,value_1db,value_10db,
                value_B,value_M,value_T,
                value_FL,value_FR,value_RR,value_RL,
                value_C,value_SW;//


                void Write_EE()
                {
                Write_EEPROM(0x00,40); //value_Mt=40
                Write_EEPROM(0x01,217); //value_1db=217
                Write_EEPROM(0x02,227); //value_10db=227

                Write_EEPROM(0x03,158); //value_B=158
                Write_EEPROM(0x04,1); //value_Bas=1,
                Write_EEPROM(0x05,172); //value_M=172
                Write_EEPROM(0x06,3); //value_Md=3
                Write_EEPROM(0x07,186); //value_T=186
                Write_EEPROM(0x08,5); //value_Tr=5

                Write_EEPROM(0x09,7); //value_VC_front=7
                Write_EEPROM(0x10,24); //value_FL=24
                Write_EEPROM(0x11,40); //value_FR=40

                Write_EEPROM(0x12,7); //value_VC_rear=7
                Write_EEPROM(0x13,72); //value_RL=72
                Write_EEPROM(0x14,88); //value_RR=88

                Write_EEPROM(0x15,7); //value_Ce=7
                Write_EEPROM(0x16,56); //value_C=56
                Write_EEPROM(0x17,104); //value_SW=104
                Write_EEPROM(0x18,8); //value_Sub=8

                }


                void Read_EE()
                {
                value_Mt= Read_EEPROM(0x00);
                value_1db= Read_EEPROM(0x01);
                value_10db= Read_EEPROM(0x02);

                value_B= Read_EEPROM(0x03);
                value_Bas= Read_EEPROM(0x04);
                value_M= Read_EEPROM(0x05);
                value_Md= Read_EEPROM(0x06);
                value_T= Read_EEPROM(0x07);
                value_Tr= Read_EEPROM(0x08);

                value_VC_front= Read_EEPROM(0x09);
                value_FL= Read_EEPROM(0x10);
                value_FR= Read_EEPROM(0x11);

                value_VC_rear= Read_EEPROM(0x12);
                value_RL= Read_EEPROM(0x13);
                value_RR= Read_EEPROM(0x14);

                value_Ce= Read_EEPROM(0x15);
                value_C= Read_EEPROM(0x16);
                value_SW= Read_EEPROM(0x17);
                value_sub= Read_EEPROM(0x18);
                }
                //////////////////////////////////////////////////////////////////////
                //////////////////////////////////////////////////////////////////////
                void main()
                {

                Write_EE();
                //Read_EE();


                while(1)
                {/*
                if(!input(Mode))
                {while(!input(Mode));
                value_Mt= Read_EEPROM(0x00);
                Lcd_gotoxy(0x80);
                printf(lcd_putchar,"%u",value_Mt);
                }

                if(!input(Up))
                {while(!input(Up));
                value_VC_front= Read_EEPROM(0x02);
                Lcd_gotoxy(0x40);
                printf(lcd_putchar,"%u",value_10db);
                }
                */
                }
                }

                Chào các bạn. Mình có đoạn code ghi các giá trị vào eeprom. Sau khi nạp xong mình đọc lại bằng pickit2 thì tại địa chỉ 0x00 nó không ghi đúng giá trị mình đặt, mình có thử ghi lại tại địa chỉ khác cũng không được. Mong các bạn giúp đỡ. Thanks.

                Comment

                Working...