📄 eeprom58.lst.svn-base
字号:
C51 COMPILER V8.08 EEPROM58 09/26/2012 10:47:48 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE EEPROM58
OBJECT MODULE PLACED IN eeprom58.OBJ
COMPILER INVOKED BY: D:\Program Files\keil_51\C51\BIN\C51.EXE eeprom58.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include<STC12C5A60S2.H>
2 #define uchar unsigned char
3 #define uint unsigned int
4 #include <intrins.h>
5 typedef unsigned char INT8U;
6 typedef unsigned int INT16U;
7
8 /*
9 sfr IAP_DATA = 0xC2;
10 sfr IAP_ADDRH = 0xC3;
11 sfr IAP_ADDRL = 0xC4;
12 sfr IAP_CMD = 0xC5;
13 sfr IAP_TRIG = 0xC6;
14 sfr IAP_CONTR = 0xC7;
15 */
16
17 //定义Flash 操作等待时间及允许IAP/ISP/EEPROM 操作的常数
18 //#define ENABLE_ISP 0x80 //系统工作时钟<30MHz 时,对IAP_CONTR 寄存器设置此值
19 #define ENABLE_ISP 0x81 //系统工作时钟<24MHz 时,对IAP_CONTR 寄存器设置此值
20 //#define ENABLE_ISP 0x82 //系统工作时钟<20MHz 时,对IAP_CONTR 寄存器设置此值
21 //#define ENABLE_ISP 0x83 //系统工作时钟<12MHz 时,对IAP_CONTR 寄存器设置此值
22 //#define ENABLE_ISP 0x84 //系统工作时钟<6MHz 时,对IAP_CONTR 寄存器设置此值
23 //#define ENABLE_ISP 0x85 //系统工作时钟<3MHz 时,对IAP_CONTR 寄存器设置此值
24 //#define ENABLE_ISP 0x86 //系统工作时钟<2MHz 时,对IAP_CONTR 寄存器设置此值
25 //#define ENABLE_ISP 0x87 //系统工作时钟<1MHz 时,对IAP_CONTR 寄存器设置此值
26
27 void IAP_Disable();
28
29 union union_temp16
30 {
31 INT16U un_temp16;
32 INT8U un_temp8[2];
33 }my_unTemp16;
34
35 //读一字节,调用前需打开IAP 功能,入口:DPTR = 字节地址,返回:A = 读出字节
36 INT8U byte_read(INT16U add)
37 {
38 1 IAP_DATA = 0x00;
39 1 IAP_CONTR = ENABLE_ISP; //打开IAP 功能, 设置Flash 操作等待时间
40 1 IAP_CMD = 0x01; //IAP/ISP/EEPROM 字节读命令
41 1
42 1 my_unTemp16.un_temp16 = add;
43 1 IAP_ADDRH = my_unTemp16.un_temp8[0]; //设置目标单元地址的高8 位地址
44 1 IAP_ADDRL = my_unTemp16.un_temp8[1]; //设置目标单元地址的低8 位地址
45 1
46 1 //EA = 0;
47 1 IAP_TRIG = 0x5A; //先送 5Ah,再送A5h 到ISP/IAP 触发寄存器,每次都需如此
48 1 IAP_TRIG = 0xA5; //送完A5h 后,ISP/IAP 命令立即被触发起动
49 1 _nop_();
50 1 //EA = 1;
51 1 IAP_Disable(); //关闭IAP 功能, 清相关的特殊功能寄存器,使CPU 处于安全状态,
52 1 //一次连续的IAP 操作完成之后建议关闭IAP 功能,不需要每次都关
53 1 return (IAP_DATA);
54 1 }
55
C51 COMPILER V8.08 EEPROM58 09/26/2012 10:47:48 PAGE 2
56 //字节编程,调用前需打开IAP 功能,入口:DPTR = 字节地址, A= 须编程字节的数据
57 void byte_program(INT16U add, INT8U ch)
58 {
59 1 IAP_CONTR = ENABLE_ISP; //打开 IAP 功能, 设置Flash 操作等待时间
60 1 IAP_CMD = 0x02; //IAP/ISP/EEPROM 字节编程命令
61 1
62 1 my_unTemp16.un_temp16 = add;
63 1 IAP_ADDRH = my_unTemp16.un_temp8[0]; //设置目标单元地址的高8 位地址
64 1 IAP_ADDRL = my_unTemp16.un_temp8[1]; //设置目标单元地址的低8 位地址
65 1
66 1 IAP_DATA = ch; //要编程的数据先送进IAP_DATA 寄存器
67 1 //EA = 0;
68 1 IAP_TRIG = 0x5A; //先送 5Ah,再送A5h 到ISP/IAP 触发寄存器,每次都需如此
69 1 IAP_TRIG = 0xA5; //送完A5h 后,ISP/IAP 命令立即被触发起动
70 1 _nop_();
71 1 //EA = 1;
72 1 IAP_Disable(); //关闭IAP 功能, 清相关的特殊功能寄存器,使CPU 处于安全状态,
73 1 //一次连续的IAP 操作完成之后建议关闭IAP 功能,不需要每次都关
74 1 }
75
76 //擦除扇区, 入口:DPTR = 扇区地址
77 void sector_erase(INT16U add)
78 {
79 1 IAP_CONTR = ENABLE_ISP; //打开IAP 功能, 设置Flash 操作等待时间
80 1 IAP_CMD = 0x03; //IAP/ISP/EEPROM 扇区擦除命令
81 1
82 1 my_unTemp16.un_temp16 = add;
83 1 IAP_ADDRH = my_unTemp16.un_temp8[0]; //设置目标单元地址的高8 位地址
84 1 IAP_ADDRL = my_unTemp16.un_temp8[1]; //设置目标单元地址的低8 位地址
85 1
86 1 //EA = 0;
87 1 IAP_TRIG = 0x5A; //先送 5Ah,再送A5h 到ISP/IAP 触发寄存器,每次都需如此
88 1 IAP_TRIG = 0xA5; //送完A5h 后,ISP/IAP 命令立即被触发起动
89 1 _nop_();
90 1 //EA = 1;
91 1 IAP_Disable(); //关闭IAP 功能, 清相关的特殊功能寄存器,使CPU 处于安全状态,
92 1 //一次连续的IAP 操作完成之后建议关闭IAP 功能,不需要每次都关
93 1 }
94
95 void IAP_Disable()
96 {
97 1 //关闭IAP 功能, 清相关的特殊功能寄存器,使CPU 处于安全状态,
98 1 //一次连续的IAP 操作完成之后建议关闭IAP 功能,不需要每次都关
99 1 IAP_CONTR = 0; //关闭IAP 功能
100 1 IAP_CMD = 0; //清命令寄存器,使命令寄存器无命令,此句可不用
101 1 IAP_TRIG = 0; //清命令触发寄存器,使命令触发寄存器无触发,此句可不用
102 1 IAP_ADDRH = 0;
103 1 IAP_ADDRL = 0;
104 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 98 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 2 ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -