Bạn nào đã và đang làm về thiết kế bộ nhớ ngoài cho 89c51 có thể giúp mình được không? share cho mình tài liệu và kinh nghiệm thì tốt quá.
Thông báo
Collapse
No announcement yet.
thiết kế bộ nhớ ngoài cho vdk 89c51
Collapse
X
-
Chào các Bạn.
Mình cũng đang phải làm bài tập mở rộng bộ nhớ ngoài cho con 89c51. mình chọn EEPROM ATt28c64B, truyền song song, mình gặp một số vấn đề chưa giải quyết được mong các bạn giúp đỡ:
-Mình viết chương trình bằng Keil, mình không muốn khai báo một biến theo kiểu xdata mà mình muốn nối các đường dữ liệu và địa chỉ riêng, sau đó đọc viết trực tiếp vào những địa chỉ đó. Có một vấn đề nảy sinh ở đây là giản đồ thời gian trong các chu kỳ đọc và viết phải tính toán làm sao cho chính xác. Mình thấy trong các sách thường hay dùng kiểu thiết kế tối thiểu: dữ liệu và địa chỉ đi chung một đường, mình không rõ lúc ấy phải đọc ghi nhw thế nào trong Keil.
-À mà mình dùng Protelus để mô phỏng con EEPROM ATt28c64B mà không được dù trong thư viện device vẫn có nó.
Các bạn có cao kiến gì giúp mình với.
Comment
-
nick này trông quen quenNguyên văn bởi giangvtdtChào các Bạn.
Có một vấn đề nảy sinh ở đây là giản đồ thời gian trong các chu kỳ đọc và viết phải tính toán làm sao cho chính xác. Mình thấy trong các sách thường hay dùng kiểu thiết kế tối thiểu: dữ liệu và địa chỉ đi chung một đường, mình không rõ lúc ấy phải đọc ghi nhw thế nào trong Keil.
Tính khỉ gì, cứ đặt địa chỉ, đặt dữ liệu rồi phát xung read,write thứ tự trước sau như trong data sheet của con 28C64 là được. Còn cách ghép nối kia là cách ghép truy cập không gian bộ nhớ ngoài sử dụng chân ALE để tách 8 bit địa chỉ thấp. Phần cứng sẽ chịu trách nhiệm về chu kỳ bus data, address, ALE, RD,WR phần mềm chỉ cần phát lệnh truy cập bộ nhớ ngoài thôi.
Có thể không cần dùng khai báo biến kiểu xdata mà dùng con trỏ để truy cập trực tiếp.
Code:unsigned char data , *pData = 0x7000; *pData = 0xAA; // viết ra AA data = *pData; // đọc về từ địa chỉ 0x7000;
Comment
-
Em xin chao`!
em lại phải hỏi thêm cái
em vẫn chưa hiểu...truyền dữ liệu cho eeprom lúc nạp ... hay là nạp chip xong roi cắm vô mạch thì dữ liệu mới được truyền đến eeprom
Ma``` nếu khi nạp và đồng thời truyền dữ liệu vào eeprom thì mạch nạp phải ghép thêm Dip cho eeprom đúng không????
Comment
-
Nếu dùng bộ nhớ EEPROM kiểu giao tiếp // thì chỉ chon 1 trong 2 mục đích:Nguyên văn bởi tienvnuEm xin chao`!
em lại phải hỏi thêm cái
em vẫn chưa hiểu...truyền dữ liệu cho eeprom lúc nạp ... hay là nạp chip xong roi cắm vô mạch thì dữ liệu mới được truyền đến eeprom
Ma``` nếu khi nạp và đồng thời truyền dữ liệu vào eeprom thì mạch nạp phải ghép thêm Dip cho eeprom đúng không????
1-Lưu thông tin.
Thì việc đọc thì viết lệnh và rất nhanh, và đọc như đọc RAM ngoài thôi. Lệnh này phần cứng suport như các chân: R,ALE. như bác CQ có nói.
Việc ghi thong tin thì chậm nên ko dùng cách 1 lệnh như trên đc, vì việc ghi vào EEPROM khá mất thời gian. Vây việc ghi vào EEPROM có thể cho tự 89 làm.
2-Bộ nhớ chương trình(đặt chân chọn bộ nhớ của 89 =0), và đương nhiên thì phải dùng mạch nạp ngoài nạp cho EEPROM rồi cắm vào đế.
Và khi nạp chương trình cho 89, phải nạp vào EEPROM chứ ko nạp vào 89.
Lâu rồi, ko đụng, nên các bác check thông tin lại-------------------
Comment
-
Các bác cứu em với.
Chương trình này em viết các số từ 0->9 vào AT28C64, rồi đọc từ AT28C64 ra và hiển thị trên LED. Em nạp và chạy thử nhưng tất cả các led ở PORT2 đều sáng suốt, chẳng nhấp nháy gì cả. Các bác xem ct của em sai ở chỗ nào vậy. Cứu em với
/*Using AT28C64 to make an external memory of MicroController AT89C52
This application is configured as follow:
PORT0 and PORT1 are connected to Address pins of AT28C64
PORT2 is connnect to I/O pins of AT28C64
PORT3 is used to control AT28C64
P3.0-------->CE
P3.1-------->OE
P3.2-------->WE*/
#include<reg51.h>
#include<stdio.h>
sbit CE=P3^0;
sbit OE=P3^1;
sbit WE=P3^2;
void delay(unsigned int ms)
{
unsigned char i,j;
for(i=1;i<=ms;i++)
{
for(j=1;j<=125;j++)
{
}
}
}
void StartWrite()
{
unsigned int time;
WE=0;
for(
{
}
CE=0;
for(
{
}
OE=1;
for(
{
}
}
void LatchAddr()
{
WE=1;
for(
{
}
WE=0;
for(
{
}
}
void LatchData()
{
WE=0;
for(
{
}
WE=1;
for(
{
}
}
void StartRead()
{
CE=0;
OE=0;
WE=1;
}
//Main Program lies here
void main()
{
unsigned int i;
//Set up configure of Application
P0=0x0; //Set PORT0 to be the Output
P1=0x0; //Set PROT1 to be the Output
P2=0x0; //Set PORT2 to be the the Output
for(i=0;i<=9;i++)
{
StartWrite();
LatchAddr();
P0=i;
P1=0x0;
LatchData();
P2=i; //Writting Data to AT28C64
}
P2=0;
delay(1000);
P2=0x0; //PORT2 displays data read from AT28C64
for(i=0;i<=9;i++)
{
StartRead();
P0=i;
P1=0;
delay(1000);
}
}
Comment
Bài viết mới nhất
Collapse
-
Trả lời cho Đấu tắt điện cho máy tính bảngbởi bqvietBqv cáo lỗi vì chưa đủ khả năng diễn giải để người đọc hiểu. Người làm kỹ thuật sâu đôi khi như thế đó. Về việc nạp pin không vào dù cell mới, khả năng cái mạch quản lý đó đã hỏng - cũng chính là nguyên nhân đám cell cũ hỏng từ đầu.
-
Channel: Thiết bị điện tử cá nhân
Hôm qua, 17:17 -
-
Trả lời cho Xin hỏi về mạch thu FM/AM trong catsettebởi nguyendinhvanTheo tôi, nó chỉ là cái Tuy- ê - nơ, hoặc là khối Trung Văn Tần, nó một phần trong cái Da đì ô thôi. Vì có thấy một chỗ có ba chân hàn, giiống như chân Cờ rít sờ tăng 455 ki nô hẹc. Còn khối Tuy ê nơ thì không nhìn thây cái Di ốt Va di cáp...
-
Channel: Điện thanh
05-12-2025, 19:59 -
-
Trả lời cho Đấu tắt điện cho máy tính bảngbởi afrendlyCó vẻ ngoài hiểu biết của mình rồi. Cuối cùng mình quyết định tìm mua 2 pin trên Shopee, giá 200K thay vào. Tuy nhận pin được 1%, sạc mãi không vào nhưng cũng mở được máy lên. Vậy cũng tạm. Cảm ơn bạn đã hỗ trợ nhé....
-
Channel: Thiết bị điện tử cá nhân
04-12-2025, 01:27 -
-
Trả lời cho Máy điện châm ?bởi nick22Đúng như bạn nói, máy điện châm hiện nay trên thị trường đã khá đa dạng về mẫu mã, chức năng và giá thành.
-
Channel: Điện tử y sinh
01-12-2025, 13:23 -
-
Trả lời cho Làm thế nào để check IC LM358bởi thetungĐể check IC sống hay chết thì đơn giản : bạn lắp cái mạch ( khuếch đại hoặc dao động ) chạy bằng con IC đó ,nhưng vị trí IC thì lắp cái đế .... thế là cứ cắm rút thì biết . Còn không thì kiếm cái này : https://shopee.vn/Xu-M%C3%A1y-ki%E1%...di-%C4%91%E1%B...
-
Channel: Hướng dẫn tìm thông tin linh kiện
28-11-2025, 14:34 -
-
bởi ngochung90Tình hình là em có mua mạch 3s về để hàn vào khối pin 12v, hàn xong em đo tại các chân từ B-, B1, B2, B+ thì điện áp pin vẫn đủ 12,6v, nhưng tại 2 chân ra P- P+ thì đo chỉ được 6,3v là bị sao các bác, và chân P- P + này đồng thời là chân sạc xả thì mình cắm sạc xả cùng lúc được ko ạ
...-
Channel: Điện tử dành cho người mới bắt đầu
28-11-2025, 10:32 -
-
Trả lời cho Làm thế nào để check IC LM358bởi nguyendinhvanViệc đó tùy thuộc trình độ khoa học kỹ thuật công nghệ ứng dụng hiện tại thôi.
Trong datasheet,họ đưa ra nhiều thông số. Tùy theo khả năng , và những thông số họ cần, họ sẽ kiểm tra casc số đo có khớp với số liệu trong datasheet...-
Channel: Hướng dẫn tìm thông tin linh kiện
27-11-2025, 18:00 -
-
bởi kqbn9091Em có mạch AT89s8253 đang cần sửa số serial no của CHIP mà giờ lâu quá rồi không dùng keil nên không biết phải làm sao, trong khi chỉ còn file hex. Mạch nạp thì progris khi viết không sửa được số serial của IC. Rất cần bác nào còn làm về 89...
-
Channel: Vi điều khiển họ 8051
27-11-2025, 11:13 -

Comment