Tổng quan về EEPROM !
Có thể nói EEPROM là công
nghệ mới nhất của ROM mà điều khác biệt cơ bản là chúng có
khả năng xoá được bằng phương pháp lập trình mà chúng không cần đến các thiết bị
chuyên dụng như các thế hệ trước của nó. Bằng cách sử dụng EEPROM (hoặc flash
ROM) người ta có thể dễ dàng xoá bỏ các chương trình được nạp trên nó của các bo mạch chủ trong máy tính cá nhân mà không cần thêm một thao tác cơ học
nào khác kể cả tháo vỏ máy
tính. EEPROM còn giúp các thiết bị khác (bo mạch mạng, bo mạch đồ hoạ, wireless
access points, bộ định tuyến...hoặc trong điện thoại, thiết bị giải trí số cá
nhân...) có thể nâng cấp firmware mà không cần thay đổi chip nhớ, việc mà trước
kia người ta thường thực hiện gắn chip trên các đế để có thể thay thế sau này bằng
cách gỡ bỏ chúng và thay bằng chip khác.
1. Giới thiệu
- EEPROM là bộ nhớcó khả năng ghi đọc trong quá trình PIC hoạt động bình thường.
- EEPROM không được thiết lập trực tiếp từ không gian bộ nhớ mà thông qua các thanh ghi có chức năng đặc biệt:
+EECON1+EECON2
+ EEDATA + EEADR
+ EEDATH+ EEADRH
- EEDATA sẽ lưu giá trị 8bit được Ghi -Đọc.
- EEADR sẽ chứa địa chỉ của ô nhớ c ần truy xuất.
- Khi giao tiếp với bộ nhớ chương trình: 2 thanh ghi
EEDATA : EEDATH được kết hợp để lưu14 bit mã lệnh ghi và đọc.
Và 2 thanh ghi EEADR : EEADRH kết hợp để lưu địa chỉ 13bit của ô nhớ đang truy xuất.
- Bộ nhớEEPROM chỉ cho phép đọc và ghi1Byte.
- Bộn hớEEPROM sẽ tự động xóa trước khi Ghi.
2. Các thanh ghi
a. Thanh ghi EEADR và EEADRH
- Cặp thanh ghi này có thể định địa chỉ tối đa 256 Byte hay tối đa 8K word của bộ nhớ EEPROM.
- Khi truy xuất bộ nhớ dữ liệu: chỉ dùng EEADR để lưu Byte địa chỉ thấp.
- Khi truy xuất bộ nhớ chương trình: dùng EEADR để lưu byte địa chỉ thấp và EEADRH lưu Byte địa chỉ cao.
b. Thanh ghi EECON1 và EECON2
- Thanh gh iEECON1chứa các bit điều khiển.
- Thanh ghiEECON2chỉlà thanh ghiảo, chỉ được dùng riêng cho hoạt động Ghi vào EEPROM.
- EEPROM là bộ nhớcó khả năng ghi đọc trong quá trình PIC hoạt động bình thường.
- EEPROM không được thiết lập trực tiếp từ không gian bộ nhớ mà thông qua các thanh ghi có chức năng đặc biệt:
+EECON1+EECON2
+ EEDATA + EEADR
+ EEDATH+ EEADRH
- EEDATA sẽ lưu giá trị 8bit được Ghi -Đọc.
- EEADR sẽ chứa địa chỉ của ô nhớ c ần truy xuất.
- Khi giao tiếp với bộ nhớ chương trình: 2 thanh ghi
EEDATA : EEDATH được kết hợp để lưu14 bit mã lệnh ghi và đọc.
Và 2 thanh ghi EEADR : EEADRH kết hợp để lưu địa chỉ 13bit của ô nhớ đang truy xuất.
- Bộ nhớEEPROM chỉ cho phép đọc và ghi1Byte.
- Bộn hớEEPROM sẽ tự động xóa trước khi Ghi.
2. Các thanh ghi
a. Thanh ghi EEADR và EEADRH
- Cặp thanh ghi này có thể định địa chỉ tối đa 256 Byte hay tối đa 8K word của bộ nhớ EEPROM.
- Khi truy xuất bộ nhớ dữ liệu: chỉ dùng EEADR để lưu Byte địa chỉ thấp.
- Khi truy xuất bộ nhớ chương trình: dùng EEADR để lưu byte địa chỉ thấp và EEADRH lưu Byte địa chỉ cao.
b. Thanh ghi EECON1 và EECON2
- Thanh gh iEECON1chứa các bit điều khiển.
- Thanh ghiEECON2chỉlà thanh ghiảo, chỉ được dùng riêng cho hoạt động Ghi vào EEPROM.
Mình chỉ nói sơ về EEPROM trong bài đăng này thôi nha các bạn download tài liệu về EEPROM tại đây nha !
- Đây là ảnh mô phỏng protues.
- Đây là code chương trình.
#include <xc.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define _XTAL_FREQ 20000000
void EEPROM_Write();
void EEPROM_Write_String(unsigned char [],unsigned char address);
unsigned char EEPROM_Read();
unsigned int len,i;
void main()
{
unsigned char x;
TRISB = 0x00;
//Writing Operation
EEPROM_Write_String("Programming XC8",0); //Message String and Starting Address
EECON1bits.WREN = 0; //EEPROM Write Disable
//Reading the Data at 0x0 EEPROM Address
EEADR = 0x0;
x = EEPROM_Read();
PORTB = x;
while(1)
{
}
}
void EEPROM_Write()
{
EECON1bits.EEPGD = 0; //Point to EEPROM
EECON1bits.WREN = 1; //EEPROM Write Enable Bit
INTCONbits.GIE = 0; //Disable all Interrupts
EECON2 = 0x55;
EECON2 = 0xAA;
EECON1bits.WR = 1;
INTCONbits.GIE = 1;
while(!PIR2bits.EEIF);
PIR2bits.EEIF = 0;
}
void EEPROM_Write_String(unsigned char msg[],unsigned char address)
{
len = strlen(msg);
for(i=0;i<len;i++)
{
EEADR = address + i;
EEDATA = msg[i];
EEPROM_Write(msg[i]);
}
}
unsigned char EEPROM_Read()
{
EECON1bits.EEPGD = 0; //Point to EEPROM
EECON1bits.RD = 1; //EEPROM Read Enable Bit
return(EEDATA);
}
EmoticonEmoticon