SCL BIT P3.2;EEPROM母片
SDA BIT P3.3
SCL1 BIT P1.2;寫入目標EEPROM
SDA1 BIT P1.3
ORG 0000H
LJMP A1
ORG 002BH
A1: MOV P0,#0FFH
MOV P1,#0FFH
MOV P2,#0FFH
MOV P3,#0FFH
A2: CLR P1.7;燒錄成功指示燈
SETB P3.7;燒錄失敗指示燈
JB P1.6,$;燒錄按鍵
LCALL M001
JNB P1.6,$
CLR P1.7;燒錄時同時亮
CLR P3.7;燒錄時同時亮
MOV 39H,#0A0H;寫第一頁
MOV 38H,#0A1H;讀第一頁
MOV 37H,#1;總頁數
A3: JB P1.5,A4;判斷外部選擇開關
JB P1.4,A01;00---24C02
MOV 37H,#1;1頁
JMP A02;01---24C04
A01: MOV 37H,#2;2頁
JMP A02
A4: JB P1.4,A5;10---24C08
MOV 37H,#4;4頁
JMP A02 ;11---24C16
A5: MOV 37H,#8;8頁
A02:
X24C021:MOV 40H,#0;位置
MOV 43H,#0FFH;一頁總數
X24C022:
LCALL R24C02;讀母片數據
MOV 41H,32H;存到目標板子片數據寄存器
CALL W24C02;將母片數據寫到
INC 40H;地址加1
DJNZ 43H,X24C022;判斷是否完成255個
LCALL R24C02;完成255個再寫1個公256個數
MOV 41H,32H;
CALL W24C02;
MOV 40H,#0;位置
MOV 43H,#0FFH;一頁總數
INC 39H;寫頁碼加1由于頁碼是在123位不是在0位所以要加2次1
INC 39H;
INC 38H;讀頁碼
INC 38H;
DJNZ 37H,X24C022;判斷是否完成所以頁碼
;********************************************************************
; 比較是否相等
;********************************************************************
MOV 39H,#0A0H;寫第一頁
MOV 38H,#0A1H;讀第一頁
MOV 37H,#1;總頁數
D24C021:MOV 40H,#0;位置
MOV 43H,#0FFH;一頁總數
D24C022:
LCALL R24C02;讀母片數據
MOV 41H,32H;保存母片數據
CALL R24C02_1;讀子片數據
MOV A,32H;
CJNE A,41H,D24C023;判斷子片數據是否=母片數據
INC 40H;數據位置加1
DJNZ 43H,D24C022;判斷是否完成255個數對比
LCALL R24C02;讀母片數據
MOV 41H,32H;保存母片數據
CALL R24C02_1;讀子片數據
MOV A,32H;
CJNE A,41H,D24C023;判斷子片數據是否=母片數據
MOV 40H,#0;位置
MOV 43H,#0FFH;一頁總數
INC 39H;
INC 39H;
INC 38H;
INC 38H;
DJNZ 37H,D24C022;
JMP A2
D24C023:
SETB P1.7;燒錄出錯母片數據不等于子片數據
CLR P3.7;亮指示燈
JB P1.6,$;按燒錄鍵反回
LCALL M001;
JNB P1.6,$;
CALL M003;
JMP A2;
W24C02: LCALL START1;開始子程序
MOV A,39H;寫模式
LCALL WRITE;寫數據
MOV A,40H;存儲位置
LCALL WRITE
MOV A,41H;存儲數據
LCALL WRITE
LCALL STOP1;結束
LCALL M001
RET
M001: MOV 30H,#3
M002: MOV 31H,#250
DJNZ 31H,$
DJNZ 30H,M002
RET
M003: MOV 3AH,#4
M004: MOV 3BH,#248
M005: MOV 3CH,#248
DJNZ 3CH,$
DJNZ 3BH,M005
DJNZ 3AH,M004
RET
R24C02: LCALL START;開始子程序
MOV A,39H
LCALL WRITE0
MOV A,40H;存儲位置
LCALL WRITE0
LCALL START
MOV A,38H;讀模式
LCALL WRITE0
LCALL READ;讀取數據
LCALL STOP
RET
R24C02_1:
LCALL START1;開始子程序
MOV A,39H
LCALL WRITE
MOV A,40H;存儲位置
LCALL WRITE
LCALL START1
MOV A,38H;讀模式
LCALL WRITE
LCALL READ_1;讀取數據
LCALL STOP1
RET
WRITE0: MOV R7,#8
WRITE01:RLC A
MOV SDA,C
SETB SCL
NOP
NOP
NOP
NOP
CLR SCL
NOP
DJNZ R7,WRITE01
NOP
NOP
NOP
LCALL ACK
NOP
NOP
RET
;寫
WRITE: MOV R7,#8
WRITE1: RLC A
MOV SDA1,C
SETB SCL1
NOP
NOP
NOP
NOP
CLR SCL1
NOP
DJNZ R7,WRITE1
NOP
NOP
NOP
LCALL ACK1
NOP
NOP
RET
;讀
READ: MOV R7,#8
READ1: SETB SDA
SETB SCL
MOV C,SDA
RLC A
MOV 32H,A
NOP
NOP
NOP
NOP
CLR SCL
DJNZ R7,READ1
LCALL NACK
NOP
NOP
RET
;讀
READ_1: MOV R7,#8
READ01: SETB SDA1
SETB SCL1
MOV C,SDA1
RLC A
MOV 32H,A
NOP
NOP
NOP
NOP
CLR SCL1
DJNZ R7,READ01
LCALL NACK1
NOP
NOP
RET
;應答
ACK: CLR SDA ;響應程序段 應答程序
NOP
SETB SCL
NOP
NOP
NOP
NOP
CLR SCL
NOP
NOP
RET
NACK: SETB SDA ;非應答程序段
NOP
NOP
SETB SCL
NOP
NOP
NOP
NOP
CLR SCL
NOP
RET
;開始
START: SETB SCL
SETB SDA
NOP
NOP
CLR SDA
NOP
NOP
NOP
NOP
CLR SCL
RET
;結束
STOP: SETB SCL
CLR SDA
NOP
NOP
NOP
NOP
SETB SDA
RET
;*********************************************
;應答
ACK1: CLR SDA1 ;響應程序段 應答程序
NOP
SETB SCL1
NOP
NOP
NOP
NOP
CLR SCL1
NOP
NOP
RET
NACK1:
SETB SDA1 ;非應答程序段
NOP
NOP
SETB SCL1
NOP
NOP
NOP
NOP
CLR SCL1
NOP
RET
;開始
START1: SETB SCL1
SETB SDA1
NOP
NOP
CLR SDA1
NOP
NOP
NOP
NOP
CLR SCL1
RET
;結束
STOP1: SETB SCL1
CLR SDA1
NOP
NOP
NOP
NOP
SETB SDA1
RET
end
SCL BIT P3.2;EEPROM母片
SDA BIT P3.3
SCL1 BIT P1.2;寫入目標EEPROM
SDA1 BIT P1.3
ORG 0000H
LJMP A1
ORG 002BH
A1: MOV P0,#0FFH
MOV P1,#0FFH
MOV P2,#0FFH
MOV P3,#0FFH
A2: CLR P1.7
SETB P3.7
JB P1.6,$
LCALL M001
JNB P1.6,$
SETB P1.7
MOV 39H,#0A0H;寫第一頁
MOV 38H,#0A1H;讀第一頁
MOV 37H,#1;總頁數
A3: JB P1.5,A4
JB P1.4,A01
MOV 37H,#1;00---C02
JMP A02
A01: MOV 37H,#2;01---C04
JMP A02
A4: JB P1.4,A5
MOV 37H,#4;10---C08
JMP A02
A5: MOV 37H,#8;11---C16
A02:
X24C021:MOV 40H,#0;位置
MOV 43H,#0FFH;一頁總數
X24C022:
LCALL R24C02;
MOV 41H,32H;
CALL W24C02
INC 40H
DJNZ 43H,X24C022
MOV 40H,#0;位置
MOV 43H,#0FFH;一頁總數
INC 39H
INC 39H
INC 38H
INC 38H
DJNZ 37H,X24C022
MOV 39H,#0A0H;寫第一頁
MOV 38H,#0A1H;讀第一頁
MOV 37H,#1;總頁數
D24C021:MOV 40H,#0;位置
MOV 43H,#0FFH;一頁總數
D24C022:
LCALL R24C02;
MOV 41H,32H;
CALL R24C02_1
MOV A,32H
CJNE A,41H,D24C023
INC 40H
DJNZ 43H,D24C022
MOV 40H,#0;位置
MOV 43H,#0FFH;一頁總數
INC 39H
INC 39H
INC 38H
INC 38H
DJNZ 37H,D24C022
JMP A2
D24C023:
SETB P1.7
CLR P3.7
JB P1.6,$
LCALL M001
JNB P1.6,$
CALL M003
JMP A2
W24C02: LCALL START1;開始子程序
MOV A,39H;寫模式
LCALL WRITE;寫數據
MOV A,40H;存儲位置
LCALL WRITE
MOV A,41H;存儲數據
LCALL WRITE
LCALL STOP1;結束
LCALL M001
RET
M001: MOV 30H,#1
M002: MOV 31H,#248
DJNZ 31H,$
DJNZ 30H,M002
RET
M003: MOV 3AH,#4
M004: MOV 3BH,#248
M005: MOV 3CH,#248
DJNZ 3CH,$
DJNZ 3BH,M005
DJNZ 3AH,M004
RET
R24C02: LCALL START;開始子程序
MOV A,39H
LCALL WRITE0
MOV A,40H;存儲位置
LCALL WRITE0
LCALL START
MOV A,38H;讀模式
LCALL WRITE0
LCALL READ;讀取數據
LCALL STOP
RET
R24C02_1:
LCALL START1;開始子程序
MOV A,39H
LCALL WRITE
MOV A,40H;存儲位置
LCALL WRITE
LCALL START1
MOV A,38H;讀模式
LCALL WRITE
LCALL READ_1;讀取數據
LCALL STOP1
RET
WRITE0: MOV R7,#8
WRITE01:RLC A
MOV SDA,C
SETB SCL
NOP
NOP
NOP
NOP
CLR SCL
NOP
DJNZ R7,WRITE01
NOP
NOP
NOP
LCALL ACK
NOP
NOP
RET
;寫
WRITE: MOV R7,#8
WRITE1: RLC A
MOV SDA1,C
SETB SCL1
NOP
NOP
NOP
NOP
CLR SCL1
NOP
DJNZ R7,WRITE1
NOP
NOP
NOP
LCALL ACK1
NOP
NOP
RET
;讀
READ: MOV R7,#8
READ1: SETB SDA
SETB SCL
MOV C,SDA
RLC A
MOV 32H,A
NOP
NOP
NOP
NOP
CLR SCL
DJNZ R7,READ1
LCALL NACK
NOP
NOP
RET
;讀
READ_1: MOV R7,#8
READ01: SETB SDA1
SETB SCL1
MOV C,SDA1
RLC A
MOV 32H,A
NOP
NOP
NOP
NOP
CLR SCL1
DJNZ R7,READ01
LCALL NACK1
NOP
NOP
RET
;應答
ACK: CLR SDA ;響應程序段 應答程序
NOP
SETB SCL
NOP
NOP
NOP
NOP
CLR SCL
NOP
NOP
RET
NACK: SETB SDA ;非應答程序段
NOP
NOP
SETB SCL
NOP
NOP
NOP
NOP
CLR SCL
NOP
RET
;開始
START: SETB SCL
SETB SDA
NOP
NOP
CLR SDA
NOP
NOP
NOP
NOP
CLR SCL
RET
;結束
STOP: SETB SCL
CLR SDA
NOP
NOP
NOP
NOP
SETB SDA
RET
;*********************************************
;應答
ACK1: CLR SDA1 ;響應程序段 應答程序
NOP
SETB SCL1
NOP
NOP
NOP
NOP
CLR SCL1
NOP
NOP
RET
NACK1:
SETB SDA1 ;非應答程序段
NOP
NOP
SETB SCL1
NOP
NOP
NOP
NOP
CLR SCL1
NOP
RET
;開始
START1: SETB SCL1
SETB SDA1
NOP
NOP
CLR SDA1
NOP
NOP
NOP
NOP
CLR SCL1
RET
;結束
STOP1: SETB SCL1
CLR SDA1
NOP
NOP
NOP
NOP
SETB SDA1
RET
end