×
单片机 > 单片机程序设计 > 详情

利用2051单片机烧录24C02,04,08,16

发布时间:2020-06-22 发布时间:
|
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

 [page]
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
关键字:2051  单片机  烧录  24C02

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
单片机中高阻态的实质及意义