表中,93C46 n=6;93C56n=7; 93C66n=8
2 指令及時(shí)序
AT93C46/56/66的指令如表1所列,各指令的具體含義如下:
(1)擦/寫允許指令(EWEN)
由于在上電復(fù)位后AT93C46/56/66首先將處于擦/寫不允許狀態(tài)。故該指令必須在所有編程模式前執(zhí)行,一旦該指令執(zhí)行后,只要外部沒有斷電就可以對(duì)芯片進(jìn)行編程。
(2)地址擦指令(ERASE)
該指令用于強(qiáng)迫指定地址中所有數(shù)據(jù)位都為“1”。一旦信息在DI端上被譯碼,就需使CS信號(hào)保持至少250ns的低電平,然后將CS置為高電平,這時(shí),DO端就會(huì)指示“忙”標(biāo)志。DO為“0”,表示編程正在進(jìn)行;DO為“1”,表示該指定地址的寄存器單元已擦完,可以執(zhí)行下一條指令。
(3)地址寫指令(WRITE)
寫指令時(shí),先寫地址,然后將16位的或8位數(shù)據(jù)寫入到指定地址中。當(dāng)DI端輸出最后一個(gè)數(shù)據(jù)位后,在CLK時(shí)鐘的下一個(gè)上升沿以前,CS必須為低,且需至少保持250ns,然后將CS置為高電平。需要說明的是:寫周期時(shí),每寫一個(gè)字節(jié)需耗時(shí)4ms。
(4)地址讀指令(READ)
讀指令用于從指定的單元中把數(shù)據(jù)從高位到低位輸出至DO端,但邏輯“0”位先于數(shù)據(jù)位輸出。讀指令在CLK的上升沿觸發(fā),且需經(jīng)過一段時(shí)間方可穩(wěn)定。為防止出錯(cuò),建議在讀指令結(jié)束后,再輸出2~3個(gè)CLK脈沖。
(5)芯片擦指令(ERAL)
該指令可將整個(gè)存貯器陣列置為1,其它功能與地址擦指令相同。
(6)芯片寫指令WRAL
該指令可將命令中指定的數(shù)據(jù)寫入整個(gè)存貯器陣列,其它功能與地址寫指令相同。該指令周期所花費(fèi)時(shí)間的最大值為30ms。
(7)擦/寫禁止指令(EWDS)
使用該指令可對(duì)寫入的數(shù)據(jù)進(jìn)行保護(hù),操作步驟與擦/寫允許指令相同。
3。粒裕梗常茫担兜膽(yīng)用
3.1 AT93C56與80C196KB的連接
串行EEPROM芯片AT93C56同80C196單片機(jī)接口的硬件電路連接方法如圖2所示。圖中,由于MCS-96系列16位單片機(jī)的P1口為準(zhǔn)雙向口,因此,為了防止數(shù)據(jù)錯(cuò)位,在向其P1口寫數(shù)據(jù)時(shí),必須先將P1口置“1”。
3.2 軟件編程
該讀/寫程序采用PL/M語(yǔ)言編寫,由于PL/M語(yǔ)言介于高級(jí)語(yǔ)言與匯編語(yǔ)言之間,故其對(duì)數(shù)據(jù)、地址位的處理比較繁瑣。其中ADDR為指定的地址單元,DATA為寫入的數(shù)據(jù),在寫數(shù)據(jù)、地址時(shí)均從高位開始。本程序已在仿真器上調(diào)試通過。且已被應(yīng)用于電量測(cè)試儀中(如接觸電阻測(cè)試儀)。
DECLARE SETCS LITERALLY ‘CALL BITSET. IO-PORT2,0′;
DECLARE CLRCS LITERALLY ‘CALL BITCLR. IOPORT2,0′;
DECLARE SETCLK LITERALLY ‘CALL BITSET. IOPORT2,5′;
DECLARE CLRCLK LITERALLY ‘CALL BITCLR. IOPORT2,5′;
DECLARE SETDI LITERALLY ‘CALL BITSET. IO-PORT1,5′;
DECLARE CLRDI LITERALLY ‘CALL BITCLR. IOPORT1,5′;
EWEN:PROCEDURE PUBLIC;
DECLARE I BYTE;
CLRCS; CLRDI; CLRCLK;
SETCS; SETDI; SETCLK;
DO I=1 TO 2;
CLRCLK; CLRDI; SETCLK;
END;
DO I=1 TO 2;
CLRCLK; SETDI; SETCLK;
END;
DO I = 0 TO 6;
CLRCLK; SETDI; SETCLK;
END;
CLRCLK; CLRCS; SETCS;
SETCLK; CLRCLK;
END EWEN;
READ:PROCEDURE(ADDR) PUBLIC;
DECLARE (ADDR,I,COUNT) BYTE;
CLRCS; CLRDI;
CLRCLK; SETCS;
DO I= 1 TO 2;
CLRCLK; SETDI; SETCLK;
END;
DO I =1 TO 2;
CLRCLK; CLRDI; SETCLK;
DO COUNT=1 TO 7;
BITOUT(COUNT)=SHR(BITOUT(COUNT),1);
END;
CLRCS; CLRDI; CLRCLK;
CALL TIME(100);
SETCS; CLRC;
END READ;
WRITE: PROCEDURE(ADDR,DATA) PUBLIC;
DECLARE (ADDR,DATA) BYTE;
CLRCS; CLRDI; CLRCLK;
SETCS; SETDI; SETCLK;
CLRDI; CLRCLK; SETCLK;
SETDI; CLRCLK; SETCLK;
END;
DO I =-1 TO 8;
X=ROL(ADDR,1);
ADDR=X; CLRCLK;
IF ((X AND 01H)=01H)THEN SETDI;
ELSE CLRDI;
SETCLK;
END;
DO I =1 TO 7;
CLRCLK; SETCLK;
END;
DO I =1 TO 8
CALL BITSET(.IOPORT1,7);
COUNT=COUNT-1;
CLRCLK; SETCLK;
BITOUT(COUNT)=IOPORT1;
END;
CLRCLK; SETCLK;
J=0;
AA: DO I= 1 TO 8;
J=J+1;
X=ROL(ADDR,1;
ADDR=X; CLRCLK;
IF((X AND 01H)=01H) THEN SETDI
ELSE CLRDI;
SETCLK;
END;
IF J<>16 THEN DO;
ADDR =DATA;
GOTO AA;
END;
CLRCS;SETCS;
CALL TIME(100);
END;





