Đọc/ghi dữ liệu với EPROM

Một phần của tài liệu nghiên cứu thiết kế thiết bị huấn luyện báo vụ trên công nghệ dspic (Trang 102 - 107)

Khởi tạo LCD, khởi tạo I2C, khởi tạo EPROM

5.1.3. Đọc/ghi dữ liệu với EPROM

+ Đọc dữ liệu từ EPROM

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

cần đọc. Sau đó sử dụng giao thức đọc dữ liệu của EPROM để đọc dữ liệu tại địa chỉ đã xác định, cụ thể nhƣ sau:

- Điều kiện START

- Truyền địa chỉ của EPROM - Truyền địa chỉ cần đọc dữ liệu - Điều kiện START

- Truyền địa chỉ EPROM + 1. - Nhận dữ liệu về.

- Điều kiện STOP.

Đoạn mã nguồn sau sẽ đọc nội dung một bản điện (610 BYTES) trong EPROM, gán vào một mảng.

//---Đọc 1 BYTE trong EPROM--- -

BYTE read_ext_eepROM(long int address) { BYTE data; i2c_START(); i2c_write(0xa0); i2c_write(address>>8); i2c_write(address); i2c_START(); i2c_write(0xa1); data=i2c_read(0); i2c_STOP(); return(data); }

//---Đọc 1 bản điện trong EPROM--- void doc_epROM(int8 kenhe)

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

int8 nhom_bd,bm,bz; int8 lso,lcai;

int8 s[4];

//---Tim SLAVE cần truyền nội dung bản điện--- for (bm=0;bm<=3;++bm)

{ s[bm]=kenhe%2; kenhe=kenhe/2; }

//---Tính địa chỉ đầu tiên của bản điện trong EPROM--- bien17=((bd-1)*610)+1; //dia chi dau cua ROM

//---Đọc số nhóm của bản điện --- ++bien17;//tang len 1

ke[0]=read_ext_eepROM(bien17)-48; ++bien17; //tang len1

ke[1]=read_ext_eepROM(bien17)-48; ++bien17; //tang len 1

ke[2]=read_ext_eepROM(bien17)-48; nhom_bd=(ke[0]*100)+(ke[1]*10)+ke[2];

//---Bắt đầu đọc nội dung bản điện--- xoathu(); index=0;

bien17=((bd-1)*610)+1; //dia chi ROM dau ban dien, diachi1=bien17 + 609; //dia chi ROM cuoi ban dien ++bien17;//toc do 1

++bien17;//toc do 2 ++bien17; //toc do 3

++bien17;//chu dau cua ban dien lcai=0; lso=0;

++index; thu[index]=' '; //them dc nhom de thoat ra for (ka=bien17;ka<=diachi1;++ka)

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

{ bm=read_ext_eepROM(ka); if (bm==',') {break;}

else {++index; thu[index]=bm;} if (bm>='0' && bm<='9') {lso=1;} if (bm>='a' && bm<='z') {lcai=1;} }

+index; thu[index]=' '; //them dc nhom de thoat ra

bien17=index-(int16)nhom_bd;//tong so chu cua ban dien. xuat=2; //xuat lai LCD da goi ch.trinh nay.

}

+ Ghi dữ liệu vào EPROM

Ghi dữ liệu vào EPROM đƣợc tiến hành dễ dàng hơn việc đọc dữ liệu ra, nhƣng mỗi khi truyền một BYTE đến EPROM thì PIC MASTER phải chờ một thời nào đó đủ để EPROM ghi xong BYTE đó rồi mới truyền BYTE tiếp theo.

Quá trình ghi một BYTE vào EPROM đƣợc tiến hành nhƣ sau: - Điều kiện START.

- Truyền địa chỉ của EPROM

- Truyền địa chỉ cần ghi BYTE vào. - Truyền nội dung BYTE cần ghi. - Chờ ACK

Đoạn mã nguồn CCS dƣới đây, PIC MASTER khi nhận đƣợc nội dung 1 bản điện 610 BYTES từ máy vi tính. PIC MASTER sẽ ghi nó vào vùng địa chỉ đã chọn trong EPROM. Mỗi khi ghi đƣợc 1 BYTE, PIC MASTER sẽ chờ 50 ms, sau đó đọc lại địa chỉ vừa ghi vào và hiện BYTE dữ liệu cùng địa chỉ tƣơng ứng lên LCD. //---Ghi 1 BYTE vào EPROM--- void write_ext_eepROM(long int address, BYTE data)

{

short int status; i2c_START();

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn i2c_write(0xa0); i2c_write(address>>8); i2c_write(address); i2c_write(data); i2c_STOP(); i2c_START(); status=i2c_write(0xa0); while(status==1) { i2c_START(); status=i2c_write(0xa0); } }

//---Ghi một bản điện 610 BYTES và EPROM--- -

if (thu[stt+1]=='G') {

stt=stt+1; //vi tri co chu G td=1; tdp=td+609; for (bien16=td;bien16<=tdp;++bien16) { ++stt; write_ext_eepROM(bien16, thu[stt]); delay_ms(5);

//---hiển thị địa chỉ trong quá trình ghi vào EPROM--- bd=bien16;

ke[0]=(bd/10000)+48; bd=bd%10000; ke[1]=(bd/1000)+48; bd=bd%1000; ke[2]=(bd/100)+48; bd=bd%100; ke[3]=(bd/10)+48; ke[4]=(bd%10)+48;

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

ke[5]='='; ke[6]=read_ext_eepROM(bien16);//doc lai lcd_gotoxy(1,3); lcd_putc(" Dia chi:");

for (kt=0;kt<=6;++kt) {lcd_putc(ke[kt]);} }

xoathu(); lcd_putc("\f Ket noi PC "); }

Một phần của tài liệu nghiên cứu thiết kế thiết bị huấn luyện báo vụ trên công nghệ dspic (Trang 102 - 107)