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