Thông báo

Collapse
No announcement yet.

thiết kế bộ nhớ ngoài cho vdk 89c51

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

  • #16
    Hi! sao em đọc sách không thấy set port là input và output nhi????
    Chương trình ở trên Bác bảo hiển thị lên led bằng port2...Nhưng mà em thấy viết như thế thì hiển thị ra led bởi dữ liệu xuất ra ở các chân I/O đấy chứ...theo em Bác nhận dữ liệu vào P2 rồi truyền sang p3 để hiển thị thì hơn.

    Comment


    • #17
      To bác Cường quay: Có lẽ for của em sai, sẽ sửa lại. Em định làm cái delay .
      Nhưng giả sử cái for đó đúng thì các hàm em viết có sai không bác?.
      To bác tienvnu: Đúng là hiển thị ra led bởi dữ liệu xuất ra các chân I/O còn gì. Chân P3 em để điều khiển AT28C64 mà bác, làm sao hiển thị led được. Hình như em sai ở chỗ vòng for, cả lúc đọc dữ liệu thì phải cấu hình lại port 2 thành lối vào, đằng này em vẫn để PORT2 là lối ra.
      Em sẽ sửa lại để hỏi các bác tiếp.
      Last edited by walldavist; 06-12-2005, 07:37.

      Comment


      • #18
        Nguyên văn bởi walldavist
        To bác Cường quay: Có lẽ for của em sai, sẽ sửa lại. Em định làm cái delay .
        Nhưng giả sử cái for đó đúng thì các hàm em viết có sai không bác?.
        To bác tienvnu: Đúng là hiển thị ra led bởi dữ liệu xuất ra các chân I/O còn gì. Chân P3 em để điều khiển AT28C64 mà bác, làm sao hiển thị led được. Hình như em sai ở chỗ vòng for, cả lúc đọc dữ liệu thì phải cấu hình lại port 2 thành lối vào, đằng này em vẫn để PORT2 là lối ra.
        Em sẽ sửa lại để hỏi các bác tiếp.
        Tôi thấy chương trình của bạn nhiều chỗ không hợp lý, ví như
        void StartWrite()
        {
        unsigned int time;
        WE=0;
        CE=0;
        OE=1;
        }
        CE và OE phải tích cực trước WE thì mới đảm bảo về đặc tính thời gian. Theo suy luận logic thông thường cũng vậy, chip phải được chọn trước khi muốn tác động lên nó. Bạn xem file đính kèm để biết chi tiết, chú ý thêm các đặc tính thời gian khác như Write Cycle Time >= 1ms, Data Valid Time >= 1000ns, Time To Device Busy = 50ns.

        http://batronix.com/pdf/28c64.pdf

        Comment


        • #19
          Tieu de khong hieu la` viec ghi du lieu len EEPROM tien' hanh` vao` luc' nao`? Co' can` bo nap ROM ko? Vi` neu chi nap chuong trinh` cho 89C51 thi` EEPROM được ghi vao` lúc nao`?

          Comment


          • #20
            help me!!! em đang cần con 28c16 nhưng không biết ở đâu bán, Hàng Trống không có!

            Comment


            • #21
              Chào bác Cuong Quay!
              may qua gap bac o day, em chán VC++ roi xương quá, dể sau học tiếp.
              Bác giúp em tí, em da thu làm:
              /* Chuong trinh doc ghi du lieu tren EEPROM
              So do chan:
              P0_0->P0_7<=>A0->A7(address)
              P2_0->P2_4<=>A_8->A_12(address)
              P2_4<=>CE
              P1_0->P1_7<=>I/O0->I/O7(data)
              P3_6<=>WE
              P3_7<=>OE
              */
              code:
              void write(unsigned char d, unsigned int addr)
              {
              P2=0x00;
              //P2_4=0;//chip select
              P3_7=1;//read disable
              P0=addr%0x100;//low byte address
              P2=addr/0x100;//hight byte address
              P2_4=0;//chip select
              P3_6=0;// write enable
              for(;0{}
              P1=d;// data in
              P3_6=1; //write disable
              }
              void read(unsigned int addr)
              {
              P3_6=1; //write disable
              P0=addr%0x100;//low byte address
              P2=addr/0x100;//hight byte address
              P2_4=0;//chip select
              P3_7=1;//read enable

              }


              void main(void)
              {
              unsigned int addr=0x0000;
              unsigned char temp=0x01,i;
              for(i=0;i<100;i++)
              {
              write(temp,addr);
              addr++;
              temp<<=1;
              }
              delay(1000);
              addr=0x0000;
              for(i=0;i<100;i++)
              {
              read(addr);
              addr++;
              delay(1000);
              }

              //end
              bac gop y chuong trinh cho em voi, no chang chay quai gi

              Comment


              • #22
                Cách ghi dữ liệu vào EEPROM tôi đã nói ở bài trước, bạn phải chịu khó đọc datasheet của nó trước khi bắt tay vào làm. Khi làm hãy viết chương trình test ghi 1 byte và đọc chỉ 1 byte ra trước xem thủ tục ghi đọc đã đúng chưa? Sau đó mới viết code ghi đọc nhiều byte. Cần phải có quy trình test từng bước như thế mới tìm ra lỗi được.

                void write(unsigned char data, unsigned int addr)
                {
                đưa_địa_chỉ(addr);
                đưa_dữ_liệu(data);
                delay_us(10); // trễ 1 khoảng thời gian = tAS, cái này luôn thỏa mãn

                OE = 1; // cấm dữ liệu ra
                delay_us(10); // trễ 1 khoảng thời gian = tOES
                CE = 0; // chọn chip
                delay_us(1);
                WR = 0; // bắt đầu ghi
                delay_ms(1); // thời gian ghi là 1ms
                /*nếu không dùng delay_ms(1) thì kiểm tra BUSY*/
                /*
                while (BUSY==1); // đợi BUSY xuống thấp
                while (BUSY==0); // đợi cho đến khi ghi xong
                */
                WR = 1; // ghi xong
                delay_us(10);
                CE = 1; // không chọn nữa
                delay_us(10);
                OE = 0; // lệnh này không có tác dụng vì CE không tích cực

                }
                Last edited by CuongQuay; 09-12-2005, 16:16.

                Comment


                • #23
                  Bạn nên xem lại datasheet của AT28C16 và AT28C64.Hình như mình nhớ Khi xóa con nầy phải có áp 12-13v đưa vào chân xóa,nếu dùng nguồn 5V thì chỉ ghi được 1 lần.Bạn nên dùng ram họ 6264 chỉ dùng nguồn 5V dể sử dụng hơn.

                  Comment


                  • #24
                    Các huynh ơi, Huynh nào có cái sơ đồ ghép nối giữa 89C51,52 với 28C64B cho đệ xin hoặc post lên cho đệ với. Mong các huynh chỉ bảo cách chuyển dữ liệu từ 89C51,52 tới 28C64B và ngược lại.

                    Mong tin các huynh

                    Comment


                    • #25
                      Giao tiếp bộ nhớ ngoài của 89C51

                      Thưa các huynh

                      Quả thật em mới động chạm vào bộ nhớ ngoài 89C51 cụ thể là 28C64B. Em mới ngiên cứu xong phần nối mạch điện. Em đang không rõ lắm về khoản : nếu dữ liệu từ 89C51 xuất sang 28C51 ( qua cổng P0 : D0 - D7) Thì chân nào của 28C64B sẽ Set lên cao và trong trong bao lâu?. Và khi 89C51 nhận dữ liệu từ 28C64B thì chân nao sẽ được Set lên cao và thời gian Set sẽ như thế nào. Xin các huynh có the Post lên cho em 1 vi dụ được không?. Em chỉ mới biết ASM thôi.

                      Rất mong các huynh chỉ giáo.

                      Comment


                      • #26
                        Tôi không rõ ý bạn là muốn nghiên cứu mở rộng bộ nhớ của họ 89 hay muốn nghiên cứu EEPROM để làm bộ nhớ ngoài?

                        Trước đây tôi cũng phải dùng bộ đến bộ nhớ ngoài. Nhưng do các bộ nhớ EEPROM còn rất hiếm nên tôi chỉ dùng EPROM và RAM thường. Cụ thể, dùng một EPROM ngoài để lưu chương trình điều hành, một bộ nhớ RAM thường để lưu các biến và kết quả tạm khi chạy chương trình và một bộ nhớ RAM khác được cấp nguồn bằng pin (kiểu pin CMOS của máy tính) để lưu các chương trình nạp từ máy tính sang (qua cổng RS232 trên Board) và cả các dữ liệu khác cần lưu khi tắt nguồn. Nếu bạn cần tìm hiểu thì tôi có thể gửi cho bạn sơ đồ (thiết kế bằng Protel).

                        Còn nếu bạn muốn dùng giao tiếp với 28 thì tôi không có.

                        Comment


                        • #27
                          Re Giao tiếp bộ nhớ ngoài của 89C51

                          Do đặc điểm của AT28C64 phải xóa trước khi ghi do đó khi thử bạn sẽ tốn nhiều thời gian để xóa ,nạp.Bạn nên dùng Ram họ 6264 tương đương về tốc độ truy cập,đọc,viết để thử,sau khi thử được mới đưa AT28c64 vào.Chú ý không nên viết vào 1 địa chì 2 lần(dử liệu sau sẽ and với dữ liệu trước).Mạch thử bạn dùng mạch xử dụng ram ngoài có trên diển đàn.
                          đoạn ct đọc ,viết bằng asm :
                          Read:
                          mov DPTR,#addr ;định dịa chỉ
                          movx A,@DPTR ;đọc
                          mov P2,A ;xuât ra P2
                          ret
                          Write:
                          mov DPTR,#addr ;định dịa chỉ
                          mov A,#data ;dữ liệu
                          movx @DPTR,A ;viết vào ram
                          ret
                          Do datasheet của AT28C64B lớn nên mình không thể gởi lên được.
                          Chúc thành công.

                          Comment


                          • #28
                            moi nguoi chi cho em cach nap va lay du lieu tu con AT28HC64 voi em moi hoc nen con chua

                            Comment


                            • #29
                              Dũng gửi file sch lên cho các bạn, mạch này có sự kết nối của 89 với 28C64 và 62256, chúc các bạn thành công,
                              Cho Dũng hỏi cách đọc file *.hex và tách dòng tách địa chỉ và dữ liệu của file hex .
                              Ví dụ :1001E100D291D290C29275807F209409D292D291FD
                              Cho mình hỏi với dòng trên thì đâu là địa chỉ, đâu là số byte dữ liệu, đâu là dữ liệu cần lấy, bit kiểm tra lỗi ở đâu, và khi đọc tổng thể mổ file hex thì làm sau biết được file hex đó đã được update trong chương trình. Trong một số chương trình nạp Dũng thấy mỗi khi mình biên dịch thay đổi nội dung của file thì có một mã được sinh ra và hiển thị, đó có phải là bit kiểm tra chẵn lẻ ko, và đọc tổng hợp các bít đó như thế nào.
                              Các bạn có biết được mà code ID, ví dụ của Atmel ID: 1EH, Device ID của các chíp như thế nào như dòng AT89xxxx, AVR, Atmega, PIC,... Bạn nào biết về mã Device ID thì cho mình và các bạn biết với nhé.
                              Cảm ơn các bạn.
                              Attached Files
                              Last edited by vandungevn; 17-11-2008, 08:32.

                              Comment


                              • #30
                                Nguyên văn bởi vandungevn Xem bài viết
                                Cho Dũng hỏi cách đọc file *.hex và tách dòng tách địa chỉ và dữ liệu của file hex .
                                Ví dụ :1001E100D291D290C29275807F209409D292D291FD
                                Cho mình hỏi với dòng trên thì đâu là địa chỉ, đâu là số byte dữ liệu, đâu là dữ liệu cần lấy, bit kiểm tra lỗi ở đâu, và khi đọc tổng thể mổ file hex thì làm sau biết được file hex đó đã được update trong chương trình. Trong một số chương trình nạp Dũng thấy mỗi khi mình biên dịch thay đổi nội dung của file thì có một mã được sinh ra và hiển thị, đó có phải là bit kiểm tra chẵn lẻ ko, và đọc tổng hợp các bít đó như thế nào.
                                Bạn tham khảo cái này:
                                http://www.kmitl.ac.th/~kswichit/illustrate/hex.htm
                                More friends more foods

                                Comment

                                Về tác giả

                                Collapse

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

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

                                Collapse

                                Đang tải...
                                X