Раздел: Документация
0 ... 86 87 88 89 90 91 92 ... 105 Procedure Erase all; (Стирание всех ячеек памяти var i:byte; begin Start; load data(0) запись во все ячейки 1.*) (•Генерация условия начала.*) (•Загрузка первого бита кода операции 0. (•Загрузка второго бита кода операции 0. (•Загрузка 1 и 0. •) load data(0); load data(l); load data(0); for i;=1 to 6 do load data(0); write data port(P add ress,0+0+0); delay(l); write Jata port(P address, 0+2+0); delay(1); repeat until read status port(P address) and 1=1; («Ожидание состояния готовности.*) write data port(P address,0+0+0); (*Select=0 для прекращения выполнения операции.*) (•Загрузка шести холостых бит адреса.*) (•Select=0. •) (*Select=1 для проверки состояния.*) end; О (•Генерация условия начала.*) (•Загрузка первого бита кода операции 0. (♦Загрузка второго бита кода операции 0. (•Загрузка 0 и 1. •) Procedure write all(byte low, byte high:byte); (•Запись во все ячейки памяти byte high и byte low. var i:byte; begin Start; load data(0); load data(0); load data(0); load data(D; for i:=1 to 6 do load data(0); («Загрузка шести холостых бит адреса.*) (•Загрузка byte high, сначала старший бит.«) for i:=8 downto 1 do load data(round((byte high and bit weight(i))/bit weight(i))); («Загрузка byte low, сначала старший бит.*) for i;=8 downto 1 do load data(round((byte low and bit weight(i))/bit weight(i))) ; writeJata port(P address, 0+0+0); write data port(P address, 0+2+0); repeat until read status port(P address) and 1=1; write data port(P address, 0+0+0): end; Procedure WriteR0M(address,byte low, byte high:byte); («Запись byte high и bytelow в две восьмиразрядные ячейки памяти.*) var 1:byte; begin Start; load data(0); load data(1); (•Загрузка адреса.•) for i:=8 downto 1 do begin load data(round(address and bit weight(i)/bit weight(i))); end; («Загрузка адреса 0.*); («Загрузка byte high, сначала старший бит,*) for i:=8 downto 1 do load data(round((byte high and bit weight(i))/bit weight(i))); («Генерация условия начала.*) («Загрузка первого бита кода операции 0. («Загрузка второго бита кода операции 1. (•Загрузка byte low,сначала старший бит.*) for i:=8 downto 1 do load data(round((byte low and bit weight(i))/bit weight(i))); write data port(P address, 0+0+0); write data port(P address, 0+2+0); repeat until read status port(P address) and 1=1; write data port(P address, 0+0+0); end; Function readR0M(address,x:byte):byte; (•Считывание двух байтов из 128 ячеек памяти. х=0 считывает младший байт, х=1 - старший байт.*) var 1,high.byte,low byte,dummy:byte; begin start;(«Генерация условия начала.*) load data(l);(«Загрузка кода операции 1.*) load data(0);(«Загрузка кода операции 0.*) («Загрузка адреса.*) for i:=8 downto 1 do begin load data(round(address and bit weight(i)/bit weight(i))); end; («Загрузка адреса 0. *); dummy:=0;(«Начало считывания старшего байта.*) for i:=8 downto 1 do begin write data port(P address,0+2); delay(1); (*Clock=0.Selects.«) write data port(P address,1+2); delay(1); (*Clock=1.Select=1.*) dummy=dummy+read status port(P address) and 1*bit weight(i); (•Считывание бита данных, сначала старший бит.*) write data port(P address,0+2); end; high byte:=dummy; dummy:=0;(*Начало считывания младшего байта,*) for i:=8 downto 1 do begin wnte data port( P add ress, 0+2); delay(1); write data port(P address,1+2); delay(1); dummy:=dummy+read status port(P address) and 1*bit weight(i); write data port(P address,0+2); end; low byte:=dummy; («Установка значения данных.*) if x=0 then readR0M:=low byte; if x=1 then readROM:=high byte; end; Procedure Program R0M; («Тестовая программа.*) var strx;string[250]; i:byte; begin writeln(This is the message originally stored in the EPR0M); writeln; for i:=1 to 125 do begin write(chr(readR0M(i,O)),chr(readR0M(i,1))); end; writeln; write(Press RETURN to continue...); readln; for i:=1 to 250 do strx[i):= writeln(Input the message which will be programmed into the eeprom: ); readln(strx); for i:=1 to 125 do wnteR0M(i,ord(strx[2.i-1]),ord(strx[2«i])); writeln(The EEPROM has been programmed ); writeln(This is the message stored in the EPROM now); for i:=1 to 125 do begin write(chr(readROM(i,0)),chr(readROM(i. 1))); end; readln; end; («Главная программа.*) begin Centronic address; init; erase(true); program rom; end. 7.3.2. EEPROM с шиной l2C Микросхема 24LC16B (Microchip, аналог X24C16P, Xicor, RS125-1401) - это EEPROM объемом 16 Кбит с шиной 12С (см. главу 4). Микросхема выполняет функции ведомого устройства. Память организована как 2048 ячеек по 8 разрядов каждая; ячейки можно стирать и снова записывать в них информацию до 1 млн раз. Напряжение источника питания от 2,5 до 5 В, потребляемый ток 1 мА в активном режиме и 10 мкА в режиме ожидания. Выводы АО, А1 и А2 не используются. Вход WP обеспечивает защиту от записи (высоким уровнем). Обычно для разрешения записи он соединяется с «землей». SCL и SDA - это линии тактового сигнала и данных 12С (рис. 7.12). Данные записываются и считываются по шине 12С. Операция записи имеет два режима: побайтовой и постраничной записи. В первом случае в ячейку памяти записывается один байт, во втором - в модуль записывается 256 байт за одно обращение. При чтении доступны режим чтения текущего адреса и случайный режим чтения. После прохождения условия «СТАРТ» в микросхему заносится восьмиразрядный ведомый адрес от ведущего передатчика. Биты адреса (начиная со старшего) равны: 1, 0, 1, 0, В2, В1, ВО и R/W. Биты с 7 по 4 - это постоянный адрес микросхемы, биты В2, В1 и ВО определяют один из четырех блоков памяти, а бит R/W устанавливает, какая операция будет проводиться: для операции чтения R/W = 1, для операции записи R/W = 0. После передачи ведомого адреса в микросхему 0 ... 86 87 88 89 90 91 92 ... 105
|