Giao tiếp giữa bộ nhớ EEPROM với vi điều khiển 8051

Giao tiếp giữa bộ nhớ EEPROM với vi điều khiển 8051

 

Giao tiếp I2C giữa EEPROM (24C04) với Vi điều khiển 8051

Trong bài viết này, chúng ta sẽ biết được cách giao tiếp giữa vi điều khiển 8051 và EEPROM. Có nhiều loại IC EEPROM khác nhau trên thị trường. EEPROM được sử dụng phổ biến nhất là họ 24CXX như 24C02, 24C04, 24C08, v.v … Trong bài hướng dẫn này chúng tôi sử dụng IC EEPROM 24C04 và nó rất phổ biến, mô-đun LCD và vi điều khiển AT89S52 (biến thể từ 8051). AT89S52 là một vi điều khiển 8051 điển hình và được sản xuất bởi Atmel. Việc kết nối EEPROM với vi điều khiển khá đơn giản. Bạn chỉ cần thực hiện 2 đường kết nối giữa IC 24C04 và vi điều khiển 8051.Chúng ta cùng bắt đầu nào!

 EEPROM (Electrically Erasable Programmable Read Only Memory – tạm dịch: Bộ nhớ có thể lập trình và xóa bằng điện) – là bộ nhớ không bay hơi có khả năng giữ lại dữ liệu ngay cả khi ngừng cung cấp điện.

 

Ghi chú về giao tiếp I2C của IC EEPROM 24C04

Trong hướng dẫn này để EEPROM giao tiếp với 8051, chúng tôi sử dụng IC EEPROM dựa trên giao thức I2C (Giao thức hai dây). IC có dung lượng bộ nhớ 4 kilobits. Bộ nhớ được chia thành 32 trang, với mỗi trang chứa 16 byte. 24C04 là một IC 8 chân. Mô-đun giao tiếp với vi điều khiển bằng Giao thức giao tiếp nối tiếp gọi là I2C.

Giao tiếp I2C về thực tế là bao gồm 2 dây được gọi là SDA và SCL, hoạt động cả hai chiều. SDA là chân truyền dữ liệu và SCL là chân xung đồng hồ (clock). Mỗi thiết bị được kết nối đều có địa chỉ của riêng nó, bất kể đó là MCU hay IC EEPROM. Mỗi chip này có thể hoạt động như một máy thu hoặc máy phát, tùy thuộc vào chức năng.

24C04 sẽ có nhiệm vụ như một nô lệ (slave) trong quá trình giao tiếp và bộ điều khiển chỉ có thể truy cập nô lệ bằng cách khởi tạo một điều kiện bắt đầu cùng với địa chỉ của thiết bị và số trang mà dữ liệu sẽ được đọc. Sau đó chúng ta cần gửi số byte để truy cập giá trị bên trong.

Để ghi vào một vị trí bất kỳ của bộ nhớ khi đã được chỉ định, chúng ta cần truy cập vào nô lệ bằng cách khởi tạo một điều kiện bắt đầu cùng với địa chỉ của thiết bị và số trang mà từ đó dữ liệu sẽ được ghi. Sau đó, chúng ta cần đặt số byte và dữ liệu. Và một điều kiện dừng cần phải được tạo để dừng hoạt động đọc hoặc viết.

Giao thức giao tiếp với 8051 là I2C với các chân SDA và SCL được kết nối với hai chân bất kỳ của 8051. Ở phía phần mềm, chúng tôi đang sử dụng thư viện do người dùng xác định có tên I2C  cho giao tiếp I2C. Thư viện này cho phép bạn giao tiếp với các thiết bị I2C / TWI.

Module điện tử 932*50

Tôi hy vọng bạn đã hiểu cho đến đây. Và dưới đây là sơ đồ mạch để kết nối bộ nhớ ngoài EEPROM với 8051.

 

Chương trình / Giải thích mã (code)

Link tải code:

http://www.circuitstoday.com/wp-content/uploads/files/8051/8051_eeprom.rar

Chúng tôi đính kèm thư viện của LCD 8 bit vào trong chương trình. Đây là một thư viện do người dùng định nghĩa để kết nối vi điều khiển với mô-đun LCD ở chế độ 8 bit. Trong thư viện này đã bao gồm một vài câu lệnh để khởi tạo LCD, để gửi lệnh và gửi dữ liệu sẽ được hiển thị. Cổng được kết nối với các chân dữ liệu của LCD và các chân được kết nối với các chân lệnh có thể được cấu hình trong chính thư viện. Ở đây chúng tôi đã định nghĩa port0 cho các chân dữ liệu và P2.5, P2.6, P2.7 cho các chân lệnh.

Một định nghĩa trong thư viện được sử dụng ở đây là độ trễ (delay) bao gồm các hàm có tên Delay_ms()Delay_us(). Delay_ms (1000) sẽ tạm dừng chương trình trong 1000 mili giây (tức là một giây) và chức năng Delay_us (_) được sử dụng khi chúng ta cần tạm dừng chương trình trong vài micro giây.

Ở đây chúng tôi tập trung chủ yếu vào việc giao tiếp 24C04. Như đã đề cập trước đó, một thư viện có tên I2C được sử dụng ở đây để giao tiếp I2C. Hàm I2CStart() là sẽ bắt đầu giao tiếp. I2CSend() có chức năng là gửi dữ liệu và I2Cread() là để đọc dữ liệu từ một vị trí cụ thể của bộ nhớ.

Một hàm có tên EepromReadByte() được định nghĩa tại chương trình chính để đọc dữ liệu từ IC EEPROM. Địa chỉ của vị trí bộ nhớ mà dữ liệu sẽ được đọc phải được cung cấp cho hàm dưới dạng tham số. EepromWriteByte() là hàm được sử dụng để ghi dữ liệu. Ở đây cùng với địa chỉ của vị trí bộ nhớ, dữ liệu sẽ được ghi cũng phải được cung cấp dưới dạng tham số.

EepromReadNBytes()EepromWriteNBytes() là các hàm được sử dụng để đọc hoặc ghi byte liên tục từ một trang cụ thể. EepromEraseALL() là hàm được dùng để xóa nội dung trong EEPROM.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *