專注電子技術學習與研究
當前位置:單片機教程網(wǎng) >> MCU設計實例 >> 瀏覽文章

利用2051單片機燒錄24C02,04,08,16

作者:佚名   來源:本站原創(chuàng)   點擊數(shù):  更新時間:2013年07月11日   【字體:
 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;總頁數(shù)
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;一頁總數(shù)
X24C022:
 LCALL R24C02;讀母片數(shù)據(jù)
 MOV 41H,32H;存到目標板子片數(shù)據(jù)寄存器
 CALL W24C02;將母片數(shù)據(jù)寫到
 INC 40H;地址加1
 DJNZ 43H,X24C022;判斷是否完成255個
 LCALL R24C02;完成255個再寫1個公256個數(shù)
 MOV 41H,32H;
 CALL W24C02;
 MOV 40H,#0;位置
 MOV 43H,#0FFH;一頁總數(shù)
 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;總頁數(shù)
D24C021:MOV 40H,#0;位置
 MOV 43H,#0FFH;一頁總數(shù)
D24C022:
 LCALL R24C02;讀母片數(shù)據(jù)
 MOV 41H,32H;保存母片數(shù)據(jù)
 CALL R24C02_1;讀子片數(shù)據(jù)
 MOV A,32H;
 CJNE A,41H,D24C023;判斷子片數(shù)據(jù)是否=母片數(shù)據(jù)
 INC 40H;數(shù)據(jù)位置加1
 DJNZ 43H,D24C022;判斷是否完成255個數(shù)對比
 LCALL R24C02;讀母片數(shù)據(jù)
 MOV 41H,32H;保存母片數(shù)據(jù)
 CALL R24C02_1;讀子片數(shù)據(jù)
 MOV A,32H;
 CJNE A,41H,D24C023;判斷子片數(shù)據(jù)是否=母片數(shù)據(jù)

 MOV 40H,#0;位置
 MOV 43H,#0FFH;一頁總數(shù)
 INC 39H;
 INC 39H;
 INC 38H;
 INC 38H;
 DJNZ 37H,D24C022;
 JMP A2
D24C023:
 SETB P1.7;燒錄出錯母片數(shù)據(jù)不等于子片數(shù)據(jù)
 CLR P3.7;亮指示燈
 JB P1.6,$;按燒錄鍵反回
 LCALL M001;
 JNB P1.6,$;
 CALL M003;
 JMP A2;
W24C02: LCALL START1;開始子程序
 MOV A,39H;寫模式
 LCALL WRITE;寫數(shù)據(jù)
 MOV A,40H;存儲位置
 LCALL WRITE
 MOV A,41H;存儲數(shù)據(jù)
 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;讀取數(shù)據(jù)
 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;讀取數(shù)據(jù)
 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;總頁數(shù)
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;一頁總數(shù)
X24C022:
 LCALL R24C02;
 MOV 41H,32H;
 CALL W24C02
 INC 40H
 DJNZ 43H,X24C022
 MOV 40H,#0;位置
 MOV 43H,#0FFH;一頁總數(shù)
 INC 39H
 INC 39H
 INC 38H
 INC 38H
 DJNZ 37H,X24C022
 MOV 39H,#0A0H;寫第一頁
 MOV 38H,#0A1H;讀第一頁
 MOV 37H,#1;總頁數(shù)
D24C021:MOV 40H,#0;位置
 MOV 43H,#0FFH;一頁總數(shù)
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;一頁總數(shù)
 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;寫數(shù)據(jù)
 MOV A,40H;存儲位置
 LCALL WRITE
 MOV A,41H;存儲數(shù)據(jù)
 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;讀取數(shù)據(jù)
 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;讀取數(shù)據(jù)
 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
關閉窗口

相關文章