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