📄 stc12c5410ad_flashiap.lst
字号:
C51 COMPILER V8.08 STC12C5410AD_FLASHIAP 10/29/2007 22:49:07 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE STC12C5410AD_FLASHIAP
OBJECT MODULE PLACED IN STC12C5410AD_FlashIAP.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE STC12C5410AD_FlashIAP.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /********************************************************************************************************
2 ** STC12C5410AD单片机Flash EEPROM的IAP操作例程源文件
3 **
4 ** 版权所有 (c) 2007,罗建
5 ** 保留所有权利
6 **
7 ** V1.00
8 **
9 **
10 **-------------------------------------------------文件信息----------------------------------------------
11 **文 件 名: STC12C5410AD_FlashIAP.H
12 **创 建 人: 罗 建
13 **最后修改日期: 2007年06月29日
14 **描 述: STC12C5410AD单片机Flash EEPROM的IAP操作例程头文件。本文件中的例程借鉴了深圳宏晶公司的相关
15 ** 例程。本文件的原始文件来源于STC89C54RD_FlashIAP.H。
16 **
17 **-----------------------------------------------历史版本信息--------------------------------------------
18 ** 创建人: 罗建
19 ** 版 本: V1.00
20 ** 日 期: 2007年06月29日
21 ** 描 述: 原始版本。
22 **
23 **-------------------------------------------------------------------------------------------------------
24 ** 修改人:
25 ** 版 本:
26 ** 日 期:
27 ** 描 述:
28 **
29 **-----------------------------------------------当前版本修订--------------------------------------------
30 ** 修改人: 罗建
31 ** 日 期: 2007年06月29日
32 ** 描 述:
33 **
34 **-------------------------------------------------------------------------------------------------------
35 ********************************************************************************************************/
36 #include <Intrins.h>
37 #include "STC12C5410AD.H"
38 #include "STC12C5410AD_FlashIAP.H"
39
40 // ------------------------------------------------------------------------------------------------------
41 /********************************************************************************************************
42 ** 函数名称: ISP_IAP_Enable
43 ** 功能描述: 允许对STC12C5410AD单片机的EEPROM进行ISP/IAP操作。
44 ** 输 入: 无
45 ** 输 出: 无
46 ** 全局变量: 无
47 ** 全局常量:无
48 ** 调用模块: 无
49 ** 其它说明:详见有关ISP_CONTR寄存器的说明。
50 **
51 ** 作 者: 罗建
52 ** 日 期: 2007年06月29日
53 **-------------------------------------------------------------------------------------------------------
54 ** 修改人:
55 ** 日 期:
C51 COMPILER V8.08 STC12C5410AD_FLASHIAP 10/29/2007 22:49:07 PAGE 2
56 **-------------------------------------------------------------------------------------------------------
57 ********************************************************************************************************/
58 void ISP_IAP_Enable(void)
59 {
60 1 EA = 0; /* 关中断 */
61 1 ISP_CONTR = ISP_CONTR & 0x18; /* 0001,1000 */
62 1 ISP_CONTR = ISP_CONTR | WAIT_TIME; /* 设置等待时间 */
63 1 ISP_CONTR = ISP_CONTR | 0x80; /* 1000,0000 */
64 1 }
65
66 // ------------------------------------------------------------------------------------------------------
67 /********************************************************************************************************
68 ** 函数名称: ISP_IAP_Disable
69 ** 功能描述: 禁止对STC12C5410AD单片机的EEPROM进行ISP/IAP操作。
70 ** 输 入: 无
71 ** 输 出: 无
72 ** 全局变量: 无
73 ** 全局常量:无
74 ** 调用模块: 无
75 ** 其它说明:详见有关ISP_CONTR和ISP_TRIG两个寄存器的说明。
76 **
77 ** 作 者: 罗建
78 ** 日 期: 2007年06月29日
79 **-------------------------------------------------------------------------------------------------------
80 ** 修改人:
81 ** 日 期:
82 **-------------------------------------------------------------------------------------------------------
83 ********************************************************************************************************/
84 void ISP_IAP_Disable(void)
85 {
86 1 ISP_CONTR = ISP_CONTR & 0x7f; /* 0111,1111 */
87 1 ISP_TRIG = 0x00;
88 1 EA = 1; /* 开中断 */
89 1 }
90
91 // ------------------------------------------------------------------------------------------------------
92 /********************************************************************************************************
93 ** 函数名称: ReadBytes
94 ** 功能描述: 读STC12C5410AD单片机EEPROM中的连续ByteQuantity个字节数据到nDataBuf缓冲区中。
95 ** 输 入: nByteAddr>>>>>>>>>>要读出的数据缓冲区在EEPROM中的首地址;
96 ** ByteQuantity>>>>>>>要读出的数据个数;
97 ** nDataBuf[]>>>>>>>>>要读出的数据。
98 ** 输 出: 位变量>>>>>>>>>>>>>操作成功则返回OK(实际上永远返回OK)。
99 ** 全局变量: 无
100 ** 全局常量:无
101 ** 调用模块: ISP_IAP_Enable>>>>>允许对STC89C54RD+单片机的EEPROM进行ISP/IAP操作;
102 ** ISP_IAP_Disable>>>>禁止对STC89C54RD+单片机的EEPROM进行ISP/IAP操作。
103 ** 其它说明:详细的操作说明见深圳宏晶公司的数据手册。
104 **
105 ** 作 者: 罗建
106 ** 日 期: 2007年06月29日
107 **-------------------------------------------------------------------------------------------------------
108 ** 修改人:
109 ** 日 期:
110 **-------------------------------------------------------------------------------------------------------
111 ********************************************************************************************************/
112 bit ReadBytes(INT16U nByteAddr, INT8U ByteQuantity, INT8U nDataBuf[])
113 {
114 1 INT8U i;
115 1
116 1 ISP_CMD = ISP_CMD & 0xF8; /* 1111,1000 */
117 1 ISP_CMD = ISP_CMD | CMD_READ_DM; /* 0000,0001 */
C51 COMPILER V8.08 STC12C5410AD_FLASHIAP 10/29/2007 22:49:07 PAGE 3
118 1 ISP_IAP_Enable();
119 1 for (i=0;i<ByteQuantity;i++) /* 写入ByteQuantity个字节 */
120 1 {
121 2 ISP_ADDRH = (INT8U)(nByteAddr >> 8); /* 设置扇区地址 */
122 2 ISP_ADDRL = (INT8U)(nByteAddr & 0x00FF);
123 2 ISP_TRIG = 0x46;
124 2 ISP_TRIG = 0xB9;
125 2 _nop_();
126 2 nDataBuf[i] = ISP_DATA; /* 读取一字节数据,并移动缓冲区指针 */
127 2 nByteAddr++; /* 准备下一个字节地址 */
128 2 }
129 1 ISP_IAP_Disable();
130 1 return OK;
131 1 }
132
133 // ------------------------------------------------------------------------------------------------------
134 /********************************************************************************************************
135 ** 函数名称: WriteBytes
136 ** 功能描述: 将nDataBuf缓冲区中的连续ByteQuantity个字节数据写入到STC12C5410AD单片机EEPROM中。
137 ** 输 入: nByteAddr>>>>>>>>>>要写入的数据缓冲区在EEPROM中的首地址;
138 ** ByteQuantity>>>>>>>要写入的数据个数;
139 ** nDataBuf[]>>>>>>>>>要写入的数据。
140 ** 输 出: 位变量>>>>>>>>>>>>>操作成功则返回OK,否则返回ERROR。
141 ** 全局变量: 无
142 ** 全局常量:无
143 ** 调用模块: ISP_IAP_Enable>>>>>允许对STC12C5410AD单片机的EEPROM进行ISP/IAP操作;
144 ** ISP_IAP_Disable>>>>禁止对STC12C5410AD单片机的EEPROM进行ISP/IAP操作。
145 ** 其它说明:详细的操作说明见深圳宏晶公司的数据手册。
146 **
147 ** 作 者: 罗建
148 ** 日 期: 2007年06月29日
149 **-------------------------------------------------------------------------------------------------------
150 ** 修改人:
151 ** 日 期:
152 **-------------------------------------------------------------------------------------------------------
153 ********************************************************************************************************/
154 bit WriteBytes(INT16U nByteAddr, INT8U ByteQuantity, INT8U nDataBuf[])
155 {
156 1 INT16U i;
157 1 INT16U nSectorAddr;
158 1
159 1 /* 擦除要修改/写入的扇区 */
160 1 nSectorAddr = (nByteAddr & 0xFE00); /* 1111,1110,0000,0000; 取扇区地址 */
161 1 ISP_ADDRH = (INT8U)(nSectorAddr >> 8); /* 设置扇区地址 */
162 1 ISP_ADDRL = 0x00;
163 1 ISP_CMD = ISP_CMD & 0xF8; /* 1111,1000 */
164 1 ISP_CMD = ISP_CMD | CMD_ERASE_DM; /* 0000,0011 */
165 1 ISP_IAP_Enable();
166 1 ISP_TRIG = 0x46; /* 触发ISP_IAP命令 */
167 1 ISP_TRIG = 0xB9; /* 触发ISP_IAP命令 */
168 1 _nop_();
169 1
170 1 /* 写入连续ByteQuantity个字节,并校验 */
171 1 for (i=0;i<ByteQuantity;i++) /* 读取ByteQuantity个字节 */
172 1 {
173 2 /* 写一个字节 */
174 2 ISP_ADDRH = (INT8U)(nByteAddr >> 8); /* 设置扇区地址 */
175 2 ISP_ADDRL = (INT8U)(nByteAddr & 0x00FF);
176 2 ISP_DATA = nDataBuf[i]; /* 设置要编程的数据,并移动缓冲区指针 */
177 2 ISP_CMD = ISP_CMD & 0xF8; /* 1111,1000 */
178 2 ISP_CMD = ISP_CMD | CMD_PROGRAM_DM; /* 0000,0010 */
179 2 ISP_IAP_Enable(); /* 允许IAP编程 */
C51 COMPILER V8.08 STC12C5410AD_FLASHIAP 10/29/2007 22:49:07 PAGE 4
180 2 ISP_TRIG = 0x46; /* 触发ISP_IAP命令 */
181 2 ISP_TRIG = 0xB9; /* 触发ISP_IAP命令 */
182 2 _nop_();
183 2 /* 读回来 */
184 2 ISP_DATA = 0x00;
185 2 ISP_CMD = ISP_CMD & 0xF8; /* 1111,1000 */
186 2 ISP_CMD = ISP_CMD | CMD_READ_DM; /* 0000,0001 */
187 2 ISP_TRIG = 0x46; /* 触发ISP_IAP命令 */
188 2 ISP_TRIG = 0xB9; /* 触发ISP_IAP命令 */
189 2 _nop_();
190 2 /* 比较对错 */
191 2 if(ISP_DATA != nDataBuf[i])
192 2 {
193 3 ISP_IAP_Disable();
194 3 return ERROR;
195 3 }
196 2 nByteAddr++; /* 准备下一个字节地址 */
197 2 }
198 1 ISP_IAP_Disable(); /* 禁止IAP编程 */
199 1 return OK;
200 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 240 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 11
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 + -