1. Trang chủ
  2. » Thể loại khác

Chapter9 TruyXuatBoNho GT V2q

30 140 1

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 30
Dung lượng 821,08 KB

Nội dung

Chương 9: truy xuất nhớ CHƯƠNG 9: TRUY XUẤT BỘ NHỚ Trong chương này, thảo luận cách thức truy xuất liệu lưu trữ cách thức ghi liệu nhớ Flash EEPROM PIC18F Mục tiêu chương cho người tham khảo:  Hiểu rõ cấu trúc nhớ ROM, RAM  Nhận dạng phân loại chip nhớ thông dụng  Biết cách tính dung lượng nhớ  Hiểu rõ chế đọc/ghi bảng nhớ chương trình  Có khả lập trình truy xuất nhớ chương trình, nhớ EEPROM vi điều khiển 9.1 BỘ NHỚ BÁN DẪN Trong phần giới thiệu loại nhớ bán dẫn đặc tính dung lượng, tổ chức thời gian truy xuất Các nhớ bán dẫn sử dụng để lưu trữ chủ yếu liệu mã chương trình Các nhớ bán dẫn sử dụng rộng rãi ROM RAM Dung lượng nhớ Số bit mà chip nhớ lưu trữ gọi dung lượng chip Đơn vị tính kb, Mb, … Tổ chức nhớ Các chip nhớ tổ chức thành số vị trí bên IC Mỗi vị trí xử lý bit, bits, bits, 16 bits, tuỳ thuộc vào thiết kế bên Số bit vị trí bên chip nhớ lưu giữ ln tương đương với số chân liệu chip Có vị trí tồn bên chip nhớ? Điều phụ thuộc vào số chân địa Số vị trí bên chip nhớ luôn luỹ thừa số chân địa Vì thế, tổng số bit mà chip nhớ lưu trữ tương đương với số lần vị trí số bit liệu vị trí Tổng quát cách tính: (1) Một chip nhớ chứa 2x vị trí, x chân địa (2) Mỗi vị trí lưu trữ y bits, với y số chân liệu chip (3) Toàn chip chứa 2x *y bits 371 Chương 9: truy xuất nhớ Bảng 9.1: tính dung lượng địa Số đường địa x 10 11 12 13 14 15 16 17 18 Dung lượng địa 2x kb kb kb kb 16 kb 32 kb 64 kb 128 kb 256 kb Số đường địa x 19 20 21 22 23 24 25 26 27 Dung lượng địa 2x 512 Mb Mb Mb Mb 16 Mb 32 Mb 64 Mb 128 Mb Tốc độ Một đặc tính quan trọng chip nhớ tốc độ để truy xuất liệu Thời gian truy xuất chip nhớ từ vài ns giây đến vài trăm ns, tuỳ thuộc kỹ thuật sử dụng để thiết kế quy trình chế tạo Ví dụ 9.1: cho chip nhớ có 12 chân địa chân liệu Tìm: (a) Sự tổ chức (b) Dung lượng Giải pháp: (a) Chip nhớ có 212 = 4096 vị trí, vị trí lưu bits liệu Điều cho tổ chức 4096 x 4, thường biểu diễn 4kx4 (b) Dung lượng chip nhớ 16k bits có tổng cộng 4k vị trí vị trí lưu giữ bits liệu Ví dụ 9.2: chip nhớ 512k có chân liệu Tìm số chân địa chỉ? Giải pháp: Số chân địa = 𝑙𝑜𝑔2 512 = 𝑙𝑜𝑔2 216 = 16 ROM ROM loại nhớ không liệu nguồn điện cung cấp Vì lý này, ROM gọi nhớ khơng bốc (nonvolatile memory) ROM có nhiều loại PROM, EPROM, EEPROM, flash EPROM, mask ROM PROM PROM nhớ lập trình người sử dụng để ghi thơng tin vào Đối với bit PROM tương ứng có cầu chì PROM lập trình cách đốt cháy cầu chì Nếu thơng tin đốt cháy bên PROM sai, PROM phải bị bỏ 372 Chương 9: truy xuất nhớ cầu chì bên bị thổi chảy khơng thể nối lại Vì lý này, PROM xem nhớ lập trình lần Để lập trình cho nó, cần thiết bị đặc biệt gọi đốt cháy (burner) ROM lập trình ROM EPROM EPROM sáng chế phép thay đổi nội dung PROM sau đốt cháy Với EPROM, người dùng lập trình chip nhớ xố hàng ngàn lần Để xố nội dung EPROM dùng thiết bị UV-EPROM, với UV (ultraviolet) ánh sáng cực tím, thời gian để xố liệu lên tới 20 phút Tất chip EPROM có cửa sổ lưng để người lập trình chiếu xạ cực tím để xố liệu xố thực xố tồn liệu Vì vậy, EPROM gọi UV-EPROM Hiện tại, độ tin cậy số chu kỳ ‘lập trình/xố’ nhớ EPROM 10,000 lần Để lập trình cho EPROM phải thực theo bước trình tự sau: (1) Các nội dung phải xố Để xố chip, đưa vào thực xố chiếu xạ UV qua cửa sổ khoảng 15-20 phút (2) Lập trình chip Để lập trình chip, đặt vào socket đốt cháy (bộ lập trình) Bộ đốt cháy ROM sử dụng điện áp 12.5 V cao hơn, tuỳ thuộc vào loại EPROM Điện áp gọi VPP ký hiệu thông số kỹ thuật EPROM (3) Sau lập trình xong, lấy EPROM gắn vào thiết bị thiết kế Bảng 9.2: số EPROM thực tế EPROM 2716 2732 2732A-20 27C32-1 2764-20 2764A-20 27C64-12 27128-25 27C128-12 27256-25 27C256-15 27512-25 27C512-15 27C010-15 27C020-15 27C040-15 Dung lượng địa 16K 32K 32K 32K 64K 64K 64K 128K 128K 256K 256K 512K 512K 1024K 2048K 4096K Dung lượng liệu 2Kx8 4Kx8 4Kx8 4Kx8 8Kx8 8Kx8 8Kx8 16Kx8 16Kx8 32Kx8 32Kx8 64Kx8 64Kx8 128Kx8 256Kx8 512Kx8 Thời gian truy xuất 450 ns 450 ns 200 ns 450 ns 200 ns 200 ns 120 ns 250 ns 120 ns 250 ns 150 ns 250 ns 150 ns 150 ns 150 ns 150 ns Số chân 24 24 24 24 28 28 28 28 28 28 28 28 28 32 32 32 VPP (V) 25 25 21 12.5; CMOS 21 12.5 12.5; CMOS 21 12.5; CMOS 12.5 12.5; CMOS 12.5 12.5; CMOS 12.5; CMOS 12.5; CMOS 12.5; CMOS 373 Chương 9: truy xuất nhớ Ví dụ 9.3: tìm số chân liệu địa ROM 27128 Giải pháp: ROM 27128 có dung lượng địa 128K bits có tổ chức 16Kx8 Vì vậy, ROM có chân liệu 214 = 16K, nên 14 chân địa Hình 9.1: cấu hình chân họ ROM 27xx EEPROM EEPROM có nhiều ưu điểm EPROM, việc xố liệu thực xung điện thời gian nhỏ Hơn nữa, lựa chọn byte để xố Ưu điểm EEPROM lập trình xố liệu board hệ thống mà hoạt động (khơng cần phải tháo rời EPROM) Để thực điều này, người thiết kế phải tổng hợp mạch cho phép lập trình vào board hệ thống Hiện tại, độ tin cậy số chu kỳ ‘lập trình/xố’ nhớ EEPROM 100,000 lần Bảng 9.3: số EEPROM thực tế EEPROM 2816A-25 2864A 28C64A-25 27C256-15 27C256-25 Dung lượng địa 16K 64K 64K 256K 256K Dung lượng liệu 2Kx8 8Kx8 8Kx8 32Kx8 32Kx8 Thời gian truy xuất 250 ns 250 ns 250 ns 150 ns 250 ns Số chân 24 28 28 28 28 VPP (V) 5 5; CMOS 5; CMOS Flash EPROM Từ đầu năm 1990, flash EPROM trở thành chip nhớ lập trình người dùng phổ biến mang nhiều ưu điểm Đầu tiên, việc xố tồn liệu s, 374 Chương 9: truy xuất nhớ nói diễn ánh sáng loé lên nên có tên flash gọi chung nhớ flash Sự khác chủ yếu EEPROM liệu nhớ flash xoá (hoặc ghi vào), tồn liệu xố Trong EEPROM, người lập trình xố phần byte chọn Sau này, nội dung nhớ flash phân chia thành khối, việc xoá (hoặc ghi) thực khối Hiện tại, độ tin cậy số chu kỳ ‘lập trình/xố’ nhớ flash 100,000 lần Bảng 9.4: số Flash EEPROM thực tế Flash EPROM 28F256-20 28F010-15 28F020-15 Dung lượng địa 256K 1024K 2018K Dung lượng liệu 32Kx8 128Kx8 256Kx8 Thời gian truy xuất 200 ns 150 ns 150 ns Số chân 32 32 32 VPP (V) 12; CMOS 12; CMOS 12; CMOS Mask ROM Mask ROM loại ROM mà nội dung lập trình nhà chế tạo IC Nói theo cách khác, khơng phải ROM lập trình người dùng ROM lập trình lần RAM RAM nhớ bị liệu (bộ nhớ bốc – volatile memory) nguồn điện cung cấp Có ba loại RAM: RAM tĩnh (SRAM), NV-RAM RAM động (DRAM) SRAM Các tế bào lưu trữ SRAM chế tạo từ flip-flop khơng cần làm tươi thích hợp để giữ liệu Do sử dụng flip-flop làm tế bào lưu trữ nên tế bào cần tối thiểu transistor để thực hiện, tế bào lưu giữ bit liệu Thời gian sau đó, tế bào chế tạo dùng transistor Cách sử dụng tế bào 4-transistor cộng thêm kỹ thuật CMOS tạo SRAM dung lượng cao, dung lượng thấp nhiều loại DRAM 375 Chương 9: truy xuất nhớ Hình 9.2: chân SRAM 2Kx8 ̅̅̅̅ cho phép ngõ cho ̅̅̅̅̅ chân cho phép ghi liệu Chân 𝑂𝐸 Trong hình 9.2, chân 𝑊𝐸 việc đọc ghi liệu tương ứng Bảng 9.5: số SRAM thực tế SRAM 6116P-1 6116P-2 6116P-3 6116LP-1 Dung lượng Dung lượng địa liệu 16K 2Kx8 16K 2Kx8 16K 2Kx8 16K 2Kx8 Thời gian truy xuất 100 ns 120 ns 150 ns 100 ns Số chân 24 24 24 24 6116LP-2 16K 2Kx8 120 ns 24 6116LP-3 16K 2Kx8 150 ns 24 6264P-10 6264LP-70 64K 64K 8Kx8 8Kx8 100 ns 70 ns 28 28 6264LP-12 64K 8Kx8 120 ns 28 62256LP-10 256K 32Kx8 100 ns 28 62256LP-12 256K 32Kx8 120 ns 28 VPP (V) CMOS CMOS CMOS CMOS công suất thấp CMOS công suất thấp CMOS công suất thấp CMOS CMOS công suất thấp CMOS công suất thấp CMOS công suất thấp CMOS công suất thấp NV-RAM Đây kiểu RAM khơng bốc Nó cho phép CPU thực đọc ghi liệu vào nó, nguồn điện bị cắt nội dung NVRAM không bị NV-RAM tổ hợp tốt RAM ROM: khả đọc ghi RAM, cộng thêm khả không 376 Chương 9: truy xuất nhớ liệu ROM Để không liệu, chip NV-RAM thiết kế bên có thành phần sau: (1) Nó sử dụng tế bào SRAM hiệu suất cực cao (tiêu thụ công suất thấp) chế tạo CMOS (2) Nó sử dụng pin li-ti bên để làm nguồn điện dự phòng (3) Nó sử dụng mạch điện điều khiển thơng minh Nhiệm vụ mạch điều khiển để giám sát chân VCC liên tục để phát nguồn điện cung cấp bên bị Nếu điện áp chân VCC rơi điều kiện ngưỡng, mạch điều khiển tự động đóng mạch để sử dụng nguồn điện bên chip Chính thế, NV-RAM đắc nhiều so với SRAM Khả lưu trữ liệu NVRAM khơng nguồn điện ngồi lên đến 10 năm Bảng 9.6: số NV-RAM thực tế NV-RAM DS1220Y-150 DS1225AB-150 DS1230Y-85 Dung lượng địa 16K 64K 256K Dung lượng liệu 2Kx8 8Kx8 32Kx8 Thời gian truy xuất 150 ns 150 ns 85 ns Số chân 24 28 28 VPP (V) DRAM Vào năm 1970, Intel giới thiệu DRAM có khả lưu trữ 1024 bits sử dụng tụ điện để ghi nhớ bit Tuy nhiên, tụ đòi hỏi làm tươi liên tục rĩ điện tụ Việc sử dụng tụ điện làm tế bào nhớ DRAM làm cho kích thước tế bào nhớ mạng nhỏ nhiều so với SRAM Ưu điểm DRAM: dung lượng cao, chi phí cho bit rẻ hơn, công suất cho bit thấp so với SRAM Nhược điểm DRAM: cần làm tươi định kỳ, thời gian làm tươi khơng thể truy xuất liệu Sau năm 1970, dung lượng lưu trữ DRAM bùng nổ: DRAM có 4K-bit (1973); 16K (1976); 64K, 256K, 1M 4M (trong năm 1980); chip theo tiêu chuẩn 2G-bit (vào năm 2000) Đóng gói DRAM DRAM có vấn đề đóng gói lượng lớn tế bào bên chip với số chân thông thường để định địa Ví dụ chip 64Kx1 phải có 16 đường địa đường liệu Vì vậy, cần 16 chân để định địa theo phương pháp truyền thống, hai chân nguồn VCC GND, chân điều khiển đọc/ghi Nên việc sử dụng phương pháp truyền thống để truy xuất liệu cần số lượng lớn chân Vì thế, để giảm bớt số chân cần thiết cho địa chỉ, 377 Chương 9: truy xuất nhớ người ta sử dụng phương pháp dồn kênh/phân kênh Phương pháp sử dụng để tách địa thành hai nửa gửi nửa địa chân địa Về cấu trúc bên DRAM, phân chia thành ma trận vuông hàng cột Nửa địa gọi hàng nửa thứ hai gọi cột Ví dụ tổ chức DRAM 64Kx1, nửa địa gửi thơng qua chân A0-A7 kích hoạt chân ̅̅̅̅̅̅ 𝑅𝐴𝑆 (Row Address Strobe), mạch chốt bên DRAM chốt nửa địa Sau đó, nửa thứ hai địa gửi qua A0-A7 kích hoạt chân ̅̅̅̅̅ 𝐶𝐴𝑆 (Column Address Strobe), tương tự mạch chốt bên chốt nửa thứ hai địa Điều dẫn đến sử dụng chân cho địa thêm hai chân ̅̅̅̅̅̅ 𝑅𝐴𝑆 ̅̅̅̅̅ 𝐶𝐴𝑆 , nên tổng số chân địa 10 (thay 16 chân) Hình 9.3: sơ đồ chân DRAM 256Kx1 Bảng 9.7: số DRAM sử dụng phổ biến DRAM Tốc độ 4164-15 41464-8 41256-15 41256-6 414256-10 511000P-8 514100-7 150 ns 80 ns 150 ns 60 ns 100 ns 80 ns 70 ns Dung lượng địa 64K 256K 256K 256K 1M 1M 4M Dung lượng liệu 64Kx1 256Kx1 256Kx1 256Kx1 1Mx1 1Mx1 4Mx1 Số chân 16 18 16 16 20 18 20 Sự tổ chức DRAM Đối với ROM, lưu ý tất chúng có chân liệu Nhưng điều thực cho tất chip DRAM, chúng có tổ chức x1, x4, x8 x16 Ví dụ 9.4: tìm số chân cấu hình riêng cho địa đối chip DRAM 16Kx4 SRAM 16Kx4 Giải pháp: Vì 214 = 64K 378 Chương 9: truy xuất nhớ Nên DRAM, ta có chân địa (A0 đến A6) thêm hai chân khác RAS CAS Đối với SRAM, ta có 14 chân địa (A0 đến A13) TRUY XUẤT BỘ NHỚ CHƯƠNG TRÌNH TRONG PIC18 9.2 PIC18F chứa loại nhớ: SRAM, flash EEPROM SRAM sử dụng cho mục đích tổng quát bao gồm ghi chức EEPROM để sử dụng lưu trữ liệu Trong nhớ flash sử dụng chủ yếu để lưu trữ chương trình (mã chương trình), lưu liệu cố định bảng tra Trong phần này, nghiên cứu cách ghi vào nhớ flash truy xuất EEPROM PIC18 Có hai cách để lưu thông tin (mã liệu) vào nhớ flash xố nội dung nó: sử dụng lập trình bên ngồi PICKIT2; sử dụng lệnh TBLWR Bộ nhớ chương trình Flash nhớ ghi, đọc xóa trình hoạt động bình thường VĐK Quá trình đọc nhớ chương trình thực thi byte lần, hoạt động ghi vào nhớ thực theo khối 32 byte lần Xóa nhớ chương trình thực theo khối 64 byte lần Việc ghi xóa nhớ chương trình dừng trình tìm lệnh q trình hồn tất Bộ nhớ chương trình khơng thể truy cập q trình ghi xóa, mã chương trình khơng thể thực thi Một timer chương trình bên làm nhiệm vụ giới hạn thời gian cho việc ghi xóa Các cấu trúc lệnh ghi vào nhớ chương trình khơng thiết phải đúng, q trình thực thi, thấy có lệnh khơng hợp lệ VĐK thay chúng lệnh NOP 9.2.1 Đọc bảng ghi bảng Để đọc ghi nhớ chương trình, có hai q trình cho phép vi xử lý di chuyển byte nhớ chương trình nhớ liệu RAM:  Bảng đọc (TBLRD)  Bảng ghi (TBLWT) Bộ nhớ chương trình có độ rộng 16 bit, nhớ RAM có độ rộng bit, bảng đọc bảng ghi di chuyển liệu hai nhớ thông qua ghi bit (TABLAT) Thanh ghi chốt bảng TABLAT nằm vùng SFR giữ data bit trình di chuyển liệu Bảng đọc lấy lại liệu khỏi nhớ chương trình đặt vào nhớ RAM Hoạt động mơ tả hình 9.4 379 Chương 9: truy xuất nhớ Hình 9.4: hoạt động bảng đọc Chú thích 1: ghi trỏ bảng tới byte nhớ chương trình Bảng ghi lưu liệu lấy từ RAM vào ghi giữ data nhớ chương trình thơng qua thủ tục ghi Hình 9.5 mơ tả q trình Hình 9.5: hoạt động bảng ghi 9.2.2 Các ghi điều khiển Các ghi điều khiển sử dụng để kết hợp với trình ghi bảng đọc bảng Các ghi bao gồm:  Thanh ghi EECON1  Thanh ghi EECON2  Thanh ghi TABLAT  Thanh ghi TBLPTR 380 Chương 9: truy xuất nhớ Bảng ghi ngầm lấy nội dung ghi giữ data cần để lập trình để đưa vào nhớ Có 32 ghi giữ data bảng ghi sử dụng Bởi TABLAT có byte nên q trình TBLWT thực thi 32 lần cho hoạt động lập trình Bộ timer EEPROM chip điều khiển thời gian ghi, điện áp ghi/xóa tạo từ truyền điện tích chip Hình 9.9: Hoạt động ghi vào nhớ chương trình Trình tự ghi nhớ chương trình sau: - Đọc 64 byte RAM - Cập nhật giá trị liệu RAM cần thiết - Lấy địa xóa ghi trỏ bảng - Thực thi thủ tục xóa hàng - Lấy địa byte cần ghi ghi trỏ bảng - Ghi 32 byte vào ghi giữ liệu - Thiết lập ghi EECON1 cho hoạt động ghi:  Set bit EEPGD để chọn nhớ chương trình  Clear bit CFGS để truy cập nhớ chương trình  Set bit WREN phép ghi Vô hiệu ngắt - Ghi nội dung 55h vào ghi EECON2 - Ghi nội dung 0AAh vào ghi EECON2 - Set bit WR, bắt đầu chu kỳ ghi - CPU ngừng chạy suốt chu kỳ xóa (khoảng ms dùng timer nội) 386 - Chương 9: truy xuất nhớ - Cho phép ngắt trở lại - Lập lại bước – 14 thêm lần để ghi 64 byte liệu - Kiểm tra nhớ (bảng đọc) Quá trình khoảng ms để cập nhật hàng 64 byte nhớ Ví dụ 9.7: viết đoạn chương trình để ghi liệu vàobộ nhớ flash Giải pháp: Chương trình ghi sau: MOVLW D'64’ MOVWF COUNTER MOVLW BUFFER_ADDR_HIGH ; trỏ đến đệm MOVWF FSR0H MOVLW BUFFER_ADDR_LOW MOVWF FSR0L MOVLW CODE_ADDR_UPPER ; lấy nội dung TBLPTR MOVWF TBLPTRU ; địa vùng nhớ MOVLW CODE_ADDR_HIGH MOVWF TBLPTRH MOVLW CODE_ADDR_LOW MOVWF TBLPTRL ; số byte xóa READ_BLOCK ; đọc TABLAT TBLRD*+ MOVF TABLAT, W ; lấy data MOVWF POSTINC0 ; lưu data DECFSZ COUNTER ; kiểm tra hết data chưa? BRA READ_BLOCK ; lặp lại MOVLW DATA_ADDR_HIGH ; trỏ đến đệm MOVWF FSR0H MOVLW DATA_ADDR_LOW MODIFY_WORD 387 Chương 9: truy xuất nhớ MOVWF FSR0L MOVLW NEW_DATA_LOW MOVWF POSTINC0 MOVLW NEW_DATA_HIGH MOVWF INDF0 ; cập nhật đệm ERASE_BLOCK MOVLW CODE_ADDR_UPPER ; lấy nội dung TBLPTR MOVWF TBLPTRU ; địa vùng nhớ MOVLW CODE_ADDR_HIGH MOVWF TBLPTRH MOVLW CODE_ADDR_LOW MOVWF TBLPTRL BSF EECON1, EEPGD ; trỏ đến nhớ chương trình BCF EECON1, CFGS ; truy cập nhớ chương trình BSF EECON1, WREN ; cho phép ghi BSF EECON1, FREE ; cho phép xóa theo hàng BCF INTCON, GIE ; vơ hiệu ngắt MOVLW 55h MOVWF EECON2 MOVLW 0AAh MOVWF EECON2 ; write 0AAh BSF EECON1, WR ; bắt đầu xóa (CPU ngừng chạy) BSF INTCON, GIE ; cho phép ngắt TBLRD*- 388 ; write 55h ; MOVLW BUFFER_ADDR_HIGH ; trỏ đến đệm MOVWF FSR0H MOVLW BUFFER_ADDR_LOW MOVWF FSR0L MOVLW D’2’ Chương 9: truy xuất nhớ MOVWF COUNTER1 WRITE_BUFFER_BACK MOVLW D’32’ MOVWF COUNTER ; số bytes ghi giữ data WRITE_BYTE_TO_HREGS MOVF POSTINC0, W ; lấy byte thấp đệm data MOVWF TABLAT ; data đưa đến TABLAT TBLWT+* ; ghi data ; đến ghi giữ TBLWT bên ; lặp đệm đầy DECFSZ COUNTER BRA WRITE_WORD_TO_HREGS PROGRAM_MEMORY BSF EECON1, EEPGD ; trỏ đến nhớ chương trình BCF EECON1, CFGS ; truy cập nhớ chương trình BSF EECON1, WREN ; cho phép ghi BCF INTCON, GIE ; vô hiệu ngắt MOVLW 55h MOVWF EECON2 MOVLW 0AAh MOVWF EECON2 ; write 0AAh BSF EECON1, WR ; bắt đầu chương trình ; write 55h ;(CPU ngừng chạy) 9.2.6 DECFSZ COUNTER1 BRA WRITE_BUFFER_BACK BSF INTCON, GIE ; cho phép ngắt BCF EECON1, WREN ; khơng cho phép ghi Xố ghi cho nhớ Flash C Ví dụ 9.8: sử dụng C để viết chương trình ghi thơng báo “GOOD BYE” vào nhớ flash bắt đầu địa 0x400 Sau đó, đọc liệu từ nhớ flash xuất PORTB byte lần 389 Chương 9: truy xuất nhớ Giải pháp: #include void Delay(unsigned int itime); void main() { unsigned char x; // Write to flash TBLPTR = (short long)0x0400; // Load TBLPTR TABLAT = 'G'; // Load in TABLAT _asm TBLWTPOSTINC _endasm // Short write TABLAT = 'O'; // - _asm TBLWTPOSTINC _endasm TABLAT = 'O'; _asm TBLWTPOSTINC _endasm TABLAT = 'D'; _asm TBLWTPOSTINC _endasm TABLAT = ' '; _asm TBLWTPOSTINC _endasm TABLAT = 'B'; _asm TBLWTPOSTINC _endasm TABLAT = 'Y'; _asm TBLWTPOSTINC _endasm TABLAT = 'E'; _asm TBLWTPOSTINC _endasm // - // Long write TBLPTR = (short long)0x0400; EECON1bits.EEPGD = 1; EECON1bits.CFGS = 0; EECON1bits.WREN = 1; 390 // Reload TBLPTR Chương 9: truy xuất nhớ INTCONbits.GIE = 0; EECON2 = 0x55; EECON2 = 0xAA; EECON1bits.WR = 1; _asm NOP _endasm INTCONbits.GIE = 1; EECON1bits.WREN = 0; // Read from flash memory and send it to PORTB TBLPTR = (short long)0x0400; For (x = 0; x < 8; x++){ _asm TBLRDPOSTINC _endasm PORTB = TABLAT; Delay(250); } } Ví dụ 9.9: sử dụng C để viết chương trình để cố nhớ flash vị trí 0x500 Giải pháp: #include #pragma romdata const_table = 0x500 const rom char my_const_array[10] = "GOOD BYE"; #pragma romdata void main() { TBLPTR = (short long)0x500; // Load TBLPTR EECON1bits.EEPGD = 1; EECON1bits.CFGS = 0; EECON1bits.WREN = 1; EECON1bits.FREE = 1; INTCONbits.GIE = 0; 391 Chương 9: truy xuất nhớ EECON2 = 0x55; EECON2 = 0xAA; EECON1bits.WR = 1; _asm NOP _endasm INTCONbits.GIE = 1; EECON1bits.WREN = 0; } 9.3 TRUY XUẤT EEPROM TRONG PIC18 Bộ nhớ EEPROM PIC18 vùng nhớ không bốc xếp theo mảng, tách biệt khỏi nhớ RAM nhớ chương trình EEPROM sử dụng để lưu trữ liệu chương trình cách lâu dài Nó khơng lập đồ vùng nhớ trực tiếp ghi hay nhớ chương trình, mà đánh địa gián tiếp thông qua ghi có chức đặc biệt SFR EEPROM ghi đọc trình VĐK hoạt động ghi SFR dùng để đọc ghi EEPROM nhớ chương trình là:  EECON1  EECON2  EEDATA  EEADR EEPROM cho phép đọc ghi theo byte Khi giao tếp với khối liệu, ghi EEDATA giữ liệu 8-bit cần ghi đọc, ghi EEADR lưu giữ địa EEPROM truy cập EEPROM PIC 18F4550 có khả chịu số lượng chu kỳ ghi/xóa cao lên đến triệu lần Hoạt dộng ghi byte liệu tự động xóa nội dung vị trí ghi nội dung vào (xóa trước ghi) Thời gian ghi điều khiển timer chip, timer thay đổi theo nhiệt độ, điện áp loại chip 9.3.1 Thanh ghi EECON1 EECON2 Việc truy cập vào EEPROM điều khiển hai ghi EECON1 EECON2 Thanh ghi EECON1 ghi dùng để điều khiển truy cập nhớ chương trình nhớ liệu Cấu trúc ghi EECON1 trình bày chương 392 Chương 9: truy xuất nhớ Các bit điều khiển RD WR bắt đầu hoạt động đọc, ghi/xóa tương ứng Các bit set firmware xóa phần cứng q trình kết thúc Bit RD khơng thể set truy cập vào nhớ chương trình (EEPGD = 1) Thanh ghi EECON2 khơng phải ghi vật lý, dùng riêng cho hoạt động ghi xóa nhớ Khi đọc ghi EECON2 trả giá trị 9.3.2 Đọc nhớ EEPROM Để đọc nhớ EEPROM, người lập trình phải ghi địa vào ghi EEADR, xóa bit điều khiển EEPGD (EECON1), sau set bit điều khiển RD (EECON1) Dữ liệu sẵn sàng chu kỳ lệnh kế tiếp, ghi EEDATA đọc lệnh Thanh ghi EEDATA giữ giá trị lần đọc sau ghi nội dung Ví dụ 9.10: viết đoạn chương trình để đọc liệu từ EEPROM Giải pháp: Chương trình đọc liệu EEPROM sau MOVLW DATA_EE_ADDR ; MOVWF EEADR ; bit thấp địa nhớ data ; đọc 9.3.3 BCF EECON1, EEPGD ; trỏ đến nhớ data BCF EECON1, CFGS ; truy cập EEPROM BSF EECON1, RD ; đọc EEPROM MOVF EEDATA, W ; W = EEDATA Ghi nhớ EEPROM Để ghi nhớ EEPROM, người lập trình phải ghi địa vào ghi EEADR data ghi vào ghi EEDATA Ví dụ 9.11: viết đoạn chương trình để ghi liệu vào EEPROM Giải pháp: Cách ghi vào nhớ EEPROM sau: MOVLW DATA_EE_ADDR ; MOVWF EEADR ; bit thấp địa nhớ data ; ghi MOVLW DATA_EE_DATA ; 393 Chương 9: truy xuất nhớ MOVWF EEDATA ; Giá trị liệu ghi BCF EECON1, EPGD ; trỏ đến nhớ data BCF EECON1, CFGS ; truy cập EEPROM BSF EECON1, WREN ; cho phép ghi BCF INTCON, GIE ; vô hiệu ngắt MOVLW 55h ; MOVWF EECON2 ; Write 55h MOVLW 0AAh ; MOVWF EECON2 ; Write 0AAh BSF EECON1, WR ; Set bit WR để bắt đầu ghi BSF INTCON, GIE ; cho phép ngắt ; Thực thi chương trình BCF EECON1, WREN ; cấm ghi ki hoạt động ghi hoàn tất ; (set bit EEIF) Quá trình ghi khơng bắt đầu khơng thực theo trình tự nêu Trình tự ngăn q trình ghi bất ngờ thực EEPROM chương trình khơng mong muốn thực thi, đặc biệt chương trình bên ngồi Bit WREN nên ln giữ trừ cần cập nhật cho EEPROM Sau trình ghi bắt đầu, ghi EECON1, EEADR EEDATA thay đổi Khi chu ký ghi kết thúc, bit WR xóa phần cứng bit cờ ngắt EEPROM (EEIF) set 9.3.4 Kiểm tra lại việc ghi liệu Tùy theo ứng dụng, mà chương trình u cấu giá trị ghi vào nhớ phải kiểm tra lại so sánh với giá trị gốc Quá trình kiểm tra áp dụng ứng dụng mà việc ghi mức tạo bit thừa gần vị trí phân chia chức bit 9.3.5 Sử dụng nhớ EEPROM Bộ nhớ EEPROM nhớ xếp thành mảng, đánh địa byte, nhớ có độ bền cao thiết kế tối ưu việc lưu trữ thông tin thay đổi thường xuyên biến chương trình hay liệu ln cập nhật Các thông tin thay đổi thường xuyên thường cập nhật sau khoảng thời gian định, sau khoàng thời gian mà liệu không cập nhật nhớ EEPROM 394 Chương 9: truy xuất nhớ làm tươi Do đó, biến thay đổi thường xuyên không theo chu kỳ số, ID, mẫu… hay lưu nhớ Flash 9.3.6 Truy xuất EEPROM C Ví dụ 9.12: ghi thơng báo “YES” vào EEPROM Sau đó, gửi từ EEPROM PORTB lần byte Giải pháp: #include void EE_WRT(void); unsigned char EE_READ(void); void Delay(unsigned int itime); void main() { unsigned char x; TRISB = 0; EEADR = 0x0; // EEPROM location EEDATA = 'Y'; EE_WRT(); EEADR = 0x1; EEDATA = 'E'; EE_WRT(); EEADR = 0x2; EEDATA = 'S'; EE_WRT(); EECON1bits.WREN = 0; // Disable write // Read from EEPROM and place it on PORTB EECON1bits.RD = 1; // Enable read EEADR = 0x0; // EEPROM location x = EE_READ(); // Read data from EEPROM PORTB = x; // Place it on PORTB 395 Chương 9: truy xuất nhớ Delay(250); EEADR = 0x1; x=EE_READ(); PORTB = x; Delay(250); EEADR = 0x2; x = EE_READ(); PORTB = x; While(1); } void EE_WRT() { EECON1bits.EEPGD = 0; // Point to EEPROM EECON1bits.CFGS = 0; EECON1bits.WREN = 1; // Enable write INTCONbits.GIE = 0; // Disable interrupts EECON2 = 0x55; EECON2 = 0xAA; EECON1bits.WR = 1; INTCONbits.GIE = 1; while(!PIR2bits.EEIF); PIR2bits.EEIF = 0; } unsigned char EE_READ() { EECON1bits.EEPGD = 0; EECON1bits.CFGS = 0; EECON1bits.RD = 1; return(EEDATA); 396 // Enable interrupts Chương 9: truy xuất nhớ } Ví dụ 9.13: viết chương trình để gửi khối liệu từ flash tới RAM, ghi khối liệu vào EEPROM Sau đó, đọc liệu từ EEPROM gửi cổng truyền liệu nối tiếp lần byte Giải pháp: #include void EE_WRT(void); unsigned char EE_READ(void); void SerTx(unsigned char); void main(){ rom far char* RomPointer = "MOVE ME"; char RamString[7]; unsigned char x, ch, k = sizeof(RomPointer); TXSTA = 0x20; // low baud rate, 8-bit data SPBRG = 15; // 9600 baud, XTAL = 10 MHz TXSTAbits.TXEN = 1; RCSTAbits.SPEN = 1; // Move the string to EEPROM for (x = 0; x < 7; x++){ RamString[x] = RomPointer[x]; } for (x = 0; x < 7; x++){ EEADR = x; EEDATA = RamString[x]; EE_WRT(); } EECON1bits.WREN = 0; // Disable write // Read from EEPROM and send it serially for (x = 0; x < 7; x++){ EEADR = x; 397 Chương 9: truy xuất nhớ ch = EE_READ(); SerTx(ch); } while(1); } void EE_WRT() { EECON1bits.EEPGD = 0; // Point to EEPROM EECON1bits.CFGS = 0; EECON1bits.WREN = 1; // Enable write INTCONbits.GIE = 0; EECON2 = 0x55; EECON2 = 0xAA; EECON1bits.WR = 1; INTCONbits.GIE = 1; while(!PIR2bits.EEIF); PIR2bits.EEIF = 0; } unsigned char EE_READ() { EECON1bits.EEPGD = 0; // Point to EEPROM EECON1bits.CFGS = 0; EECON1bits.RD = 1; return (EEDATA); } void SerTx(unsigned char c) { while (PIR1bits.TXIF==0); // Wait until transmitted TXREG = c; 398 // Place character in buffer } Chương 9: truy xuất nhớ 9.4 CÂU HỎI VÀ BÀI TẬP 1) Bộ nhớ flash PIC18 sử dụng để lưu mã chương trình liệu? 2) Bộ nhớ SRAM PIC18 sử dụng để lưu mã chương trình liệu? 3) Bộ nhớ flash PIC18 có cho phép ghi? 4) Đối với PIC18, việc đọc từ flash theo byte ghi vào theo kích thước khối hay sai? 5) Đối với PIC 18F4550, nhớ flash xố khối có kích cỡ bao nhiêu? 6) Bộ nhớ EEPROM PIC18 sử dụng để lưu mã chương trình liệu? 7) Dung lượng EEPROM PIC 18F4550 bao nhiêu? 8) Bộ nhớ EEPROM PIC18 đọc ghi đồng thời? 9) Có phải kích thước tế bào nhớ SRAM lớn kích thước tế bào nhớ DRAM? 10) Các chân RAS CAS kết hợp với nhớ nào? 11) Cho biết dung lượng EEPROM có chân A0-A15 D0-D7 12) Cho biết ghi sử dụng để xoá nhớ flash? 13) Viết chương trình để thực xố nhớ chương trình từ địa 0x8000 tới 0xFFFF 14) Viết chương trình để đặt giá trị từ đến 10 vào nhớ chương trình có địa từ 0x8000 đến 0x800A 15) Viết chương trình để ghi giá trị từ đến 50 cho 50 byte nhớ EEPROM 18F4550 16) Viết chương trình để ghi thông báo “Is it connected?” vào EEPROM 17) Viết chương trình C để gửi thơng báo “Will send to PC” từ flash tới RAM, ghi thông báo từ flash vào EEPROM Sau đó, đọc liệu từ EEPROM gửi cổng truyền liệu nối tiếp lần byte 18) Viết chương trình C để xố thơng báo “GOOD BYE” từ nhớ flash địa 0x1200 thay “HELLO” 399 Chương 9: truy xuất nhớ 400

Ngày đăng: 21/12/2017, 12:20

TỪ KHÓA LIÊN QUAN

w