CHƯƠNG 9
EEPROM Module
CHƯƠNG 9: BỘ NHỚ GHI ĐỌC EEPROM
1. Giới thiệu
- EEPROM là bộ nhớ có khả năng ghi đọc trong
q 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
CHƯƠNG 9: BỘ NHỚ GHI ĐỌC EEPROM
- 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ưu 14 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à ghi 1Byte.
- Bộ nhớ EEPROM sẽ tự động xóa trước khi Ghi.
CHƯƠNG 9: BỘ NHỚ GHI ĐỌC EEPROM
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
256Byte 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.
CHƯƠNG 9: BỘ NHỚ GHI ĐỌC EEPROM
b. Thanh ghi EECON1 và EECON2
- Thanh ghi EECON1 chứa các bit điều khiển.
- Thanh ghi EECON2 chỉ là thanh ghi ảo, chỉ được
dùng riêng cho hoạt động Ghi vào EEPROM.
EECON1
EEPGD dd
CHS2
Bit 6, 5,4: chưa cấu hình
WRERR
WREN
WR
RD
CHƯƠNG 9: BỘ NHỚ GHI ĐỌC EEPROM
Bit
EEPGD
Chức năng
Bit chọn bộ nhớ Dữ liệu / Chương trình EEPROM
1= chọn bộ nhớ chương trình
0= chọn bộ nhớ dữ liệu
WRERR
Cờ báo quá trình Ghi EEPROM bị lỗi
1= quá trình Ghi kết thúc sớm hơn yêu cầu ( lỗi )
0= quá trình Ghi hoàn chỉnh.
WREN
Bit cho phép hoạt động Ghi vào EEPROM
1= Cho phép Ghi.
0= không cho phép Ghi.
WR
Bit điều khiển quá trình Ghi
Set 1= bắt đầu Ghi EEPROM ( được xóa bằng phần cứng)
0= Khi quá trình ghi hoàn tất.
RD
Bit điều khiển quá trình Đọc
Set 1= bắt đầu Đọc EEPROM ( được xóa bằng phần cứng)
0 = Quá trình đọc chưa bắt đầu
CHƯƠNG 9: BỘ NHỚ GHI ĐỌC EEPROM
3. Đọc dữ liệu từ EEPROM
- Để đọc dữ liệu từ EEPROM:
+Trước tiên phải ghi địa chỉ vào thanh ghi EEADR.
+ Clear bit EEPGD = 0.
+ Set bit RD lên 1.
- Kết quả đọc được sẽ lưu vào thanh ghi EEDATA
và ta có thể đọc giá trị này ở chu kỳ tiếp theo.
- Kết quả trong EEDATA sẽ không đổi cho đến khi
1 chu kỳ đọc kế tiếp được thực hiện.
CHƯƠNG 9: BỘ NHỚ GHI ĐỌC EEPROM
Chương trình Đọc dữ liệu từ EEPROM
BSF
STATUS, RP1
BCF
STATUS, RP0
MOVLW
CONFIG_ADDRESS
MOVWF
EEADR
;Ghi địa chỉ cần đđọc vào
BSF
STATUS, RP0
; Chọn Bank3
BCF
EECON1, EEPGD; Chọn Bộ nhớ dữ liệu
BSF
EECON1, RD
;Bắt đầu quá trình đọc
BCF
STATUS, RP0
; Chọn Bank0
MOVF
EEDATA, W ; Lưu kết quả đọc được vào W.
; Chọn Bank2
CHƯƠNG 9: BỘ NHỚ GHI ĐỌC EEPROM
4. Ghi dữ liệu vào EEPROM
- Để ghi dữ liệu vào EEPROM:
+ Trước tiên phải ghi địa chỉ vào thanh ghi
EEADR và đặt dữ liệu cần ghi vào EEDATA.
+ EEPGD = 0: Data EEPROM ( và Cấm các Ngắt).
+ WREN = 1 : cho phép Ghi
+ Sau đó lần lượt ghi 2 giá trị 55H và AAH theo
trình tự vào thanh ghi EECON2.
+ WR = 1 : bắt đầu hoạt động Ghi
CHƯƠNG 9: BỘ NHỚ GHI ĐỌC EEPROM
Chương trình Ghi dữ liệu vào EEPROM
BSF
STATUS, RP0 ; Bank1
BCF
INTCON, GIE
; Disable INTs.
BSF
STATUS, RP1 ; Bank3
BSF
EECON1, WREN ; Enable Write
;Đây là đoạn chương trình bắt buộc.
MOVLW 55h
MOVWF
EECON2
MOVLW AAh
MOVWF EECON2
; Bit WR được bật lên để bắt đầu quá trình ghi
BSF
EECON1,WR
;Q trình ghi hồn tất thì cờ EEIF = 1
BSF
INTCON, GIE
;Cho phép các Ngắt
CHƯƠNG 9: BỘ NHỚ GHI ĐỌC EEPROM
5. Đọc dữ liệu từ bộ nhớ chương trình
+Trước tiên phải ghi địa chỉ vào 2 thanh ghi
EEADR : EEADRH.
+ Clear bit EEPGD = 1.
+ Set bit RD lên 1.
- Kết quả đọc được sẽ lưu vào 2 thanh ghi
EEDATA: EEDATAH , giá trị này sẽ được đọc sau
2 chu kỳ tiếp theo khi Set bit RD=1.
CHƯƠNG 9: BỘ NHỚ GHI ĐỌC EEPROM
Chương trình Đọc dữ liệu từ Bộ nhớ chương trình
BSF
STATUS, RP1
BCF
STATUS, RP0
MOVLW
CONFIG_ADDRESS_L
MOVWF
EEADR
MOVLW
CONFIG_ADDRESS_H
MOVWF
EEADRH
;Ghi địa chỉ Byte cần đđọc
BSF
STATUS, RP0
;Chọn Bank3
BSF
EECON1, EEPGD ;Bộ nhớ chương trình
; Chọn Bank2
;Ghi địa chỉ cần đọc vào
CHƯƠNG 9: BỘ NHỚ GHI ĐỌC EEPROM
EECON1, RD
;Bắt đầu quá trình đọc
BCF
STATUS, RP0
; Chọn Bank2
MOVF
EEDATA, W ; Lưu kết quả đọc vào W.
MOVWF
DATA_L
MOVF
EEDATAH, W ; Lưu kết quả đọc vào W.
MOVWF
DATA_H
BSF
NOP
NOP
CHƯƠNG 9: BỘ NHỚ GHI ĐỌC EEPROM
6. Ghi dữ liệu vào Bộ nhớ chương trình
+ Trước tiên phải ghi địa chỉ vào 2 thanh ghi EEADR:
EEADR và đặt dữ liệu vào EEDATA:EEDATAH.
+ EEPGD = 1. ( và Cấm các Ngắt).
+ WREN = 1 : cho phép Ghi
+Ghi 2 giá trị 55H và AAH thanh ghi EECON2.
+ WR = 1 : bắt đầu hoạt động Ghi. Sau lệnh này
CPU cần 2Tcy để thực thi việc Ghi/Xóa .
Lưu ý: Cứ mỗi lần Ghi là một khối = 4 Word
CHƯƠNG 9: BỘ NHỚ GHI ĐỌC EEPROM
Chương trình Ghi dữ liệu vào Bộ nhớ chương trình
ADDRH, ADDRL và DATADDR thuộc Ram chung 70h-7Fh
BSF
STATUS, RP1
;
BCF
STATUS, RP0
; Bank2
MOVF
MOVWF
ADDRH, W
EEADRH
MOVF
MOVWF
ADDRL, W
EEADR
MOVF
MOVWF
LOOP
MOVF
MOVWF
DATAADDR, W
FSR
INDF, W
EEDATA
; khởi tạo địa chỉ
; khởi tạo địa chỉ dữ liệu
; đưa byte đầu tiên vào phần thấp
CHƯƠNG 9: BỘ NHỚ GHI ĐỌC EEPROM
INCF
MOVF
MOVWF
INCF
FSR, F
INDF, W
EEDATH
FSR, F
;lấy byte kế tiếp
BSF
BSF
BSF
STATUS, RP0 ; Bank 3
EECON1, EEPGD; chọn bộ nhớ chương tr
EECON1, WREN; cho phép Ghi
BCF
INTCON, GIE
MOVLW
MOVWF
55H
EECON2
; đưa byte 2 vào phần cao
;cấm ngắt
CHƯƠNG 9: BỘ NHỚ GHI ĐỌC EEPROM
MOVLW
MOVWF
AAH
EECON2
BSF
NOP
NOP
EECON1, WR ; bắt đầu ghi
BCF
BCF
BCF
INCF
MOVF
ANDLW
XORLW
BTFSC
GOTO
EECON1, WREND
INTCON, GIE
STATUS, RP0
;chọn Bank 2
EEADR, F
; tăng địa chỉ kế
EEADR, W
03H
;kiểm tra 2 bit thấp của địa chỉ=‘00’
03H ; thì 4 words đã được ghi xong
STATUS, Z ; nếu chưa đủ 4 words thì quay lại ..
LOOP