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

Một phần của tài liệu tóm tắt luận văn thạc sĩ kỹ thuật nghiên cứu thiết kế thiết bị huấn luyện báo vụ trên công nghệ DSPIC (Trang 100)

Hình 5-1 Lưu đồ thuật toán chương trình MONITOR cho PIC MASTER

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

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

Để đọc dữ liệu trong EPROM, trước tiên phải biết được địa chỉ chứa dữ liệu

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)

{ int16 diachi1,ka;

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)

{ 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.

} (adsbygoogle = window.adsbygoogle || []).push({});

+ 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();

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;

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 tóm tắt luận văn thạc sĩ kỹ thuật nghiên cứu thiết kế thiết bị huấn luyện báo vụ trên công nghệ DSPIC (Trang 100)