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