📄 stc89c54rd_flashiap.lst
字号:
C51 COMPILER V8.02 STC89C54RD_FLASHIAP 02/13/2007 17:34:12 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE STC89C54RD_FLASHIAP
OBJECT MODULE PLACED IN STC89C54RD_FlashIAP.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE STC89C54RD_FlashIAP.c OMF2 MODP2 DEBUG
line level source
1 /********************************************************************************************************
2 ** STC89C54RD+单片机Flash EEPROM的IAP操作例程源文件
3 **
4 ** 版权所有 (c) 2007,罗建
5 ** 保留所有权利
6 **
7 ** V1.00
8 **
9 **
10 **-------------------------------------------------文件信息----------------------------------------------
11 **文 件 名: STC89C54RD_FlashIAP.H
12 **创 建 人: 罗 建
13 **最后修改日期: 2007年02月09日
14 **描 述: STC89C54RD+单片机Flash EEPROM的IAP操作例程头文件。本文件中的例程借鉴了深圳宏晶公司的相关
15 ** 例程。
16 **
17 **-----------------------------------------------历史版本信息--------------------------------------------
18 ** 创建人: 罗建
19 ** 版 本: V1.00
20 ** 日 期: 2007年02月08日
21 ** 描 述: 原始版本。
22 **
23 **-------------------------------------------------------------------------------------------------------
24 ** 修改人:
25 ** 版 本:
26 ** 日 期:
27 ** 描 述:
28 **
29 **-------------------------------------------------------------------------------------------------------
30 **-----------------------------------------------当前版本修订--------------------------------------------
31 ** 修改人: 罗建
32 ** 日 期: 2007年02月09日
33 ** 描 述: 增加了文件头注释。
34 **
35 **-------------------------------------------------------------------------------------------------------
36 ********************************************************************************************************/
37 #include <AT89X52.H>
38 #include <Intrins.h>
39 #include "STC89C54RD_FlashIAP.h"
40
41 // ------------------------------------------------------------------------------------------------------
42 /********************************************************************************************************
43 ** 函数名称: ISP_IAP_Enable
44 ** 功能描述: 允许对STC89C54RD+单片机的EEPROM进行ISP/IAP操作。
45 ** 输 入: 无
46 ** 输 出: 无
47 ** 全局变量: 无
48 ** 全局常量:无
49 ** 调用模块: 无
50 ** 其它说明:详见有关ISP_CONTR寄存器的说明。
51 **
52 ** 作 者: 罗建
53 ** 日 期: 2007年02月09日
54 **-------------------------------------------------------------------------------------------------------
55 ** 修改人:
C51 COMPILER V8.02 STC89C54RD_FLASHIAP 02/13/2007 17:34:12 PAGE 2
56 ** 日 期:
57 **-------------------------------------------------------------------------------------------------------
58 ********************************************************************************************************/
59 void ISP_IAP_Enable(void)
60 {
61 1 EA = 0; /* 关中断 */
62 1 ISP_CONTR = ISP_CONTR & 0x18; /* 0001,1000 */
63 1 ISP_CONTR = ISP_CONTR | WAIT_TIME; /* 设置等待时间 */
64 1 ISP_CONTR = ISP_CONTR | 0x80; /* 1000,0000 */
65 1 }
66
67 // ------------------------------------------------------------------------------------------------------
68 /********************************************************************************************************
69 ** 函数名称: ISP_IAP_Disable
70 ** 功能描述: 禁止对STC89C54RD+单片机的EEPROM进行ISP/IAP操作。
71 ** 输 入: 无
72 ** 输 出: 无
73 ** 全局变量: 无
74 ** 全局常量:无
75 ** 调用模块: 无
76 ** 其它说明:详见有关ISP_CONTR和ISP_TRIG两个寄存器的说明。
77 **
78 ** 作 者: 罗建
79 ** 日 期: 2007年02月09日
80 **-------------------------------------------------------------------------------------------------------
81 ** 修改人:
82 ** 日 期:
83 **-------------------------------------------------------------------------------------------------------
84 ********************************************************************************************************/
85 void ISP_IAP_Disable(void)
86 {
87 1 ISP_CONTR = ISP_CONTR & 0x7f; /* 0111,1111 */
88 1 ISP_TRIG = 0x00;
89 1 EA = 1; /* 开中断 */
90 1 }
91
92 // ------------------------------------------------------------------------------------------------------
93 /********************************************************************************************************
94 ** 函数名称: ReadBytes
95 ** 功能描述: 读STC89C54RD+单片机EEPROM中的连续ByteQuantity个字节数据到nDataBuf缓冲区中。
96 ** 输 入: nByteAddr>>>>>>>>>>要读出的数据缓冲区在EEPROM中的首地址;
97 ** ByteQuantity>>>>>>>要读出的数据个数;
98 ** nDataBuf[]>>>>>>>>>要读出的数据。
99 ** 输 出: 位变量>>>>>>>>>>>>>操作成功则返回OK(实际上永远返回OK)。
100 ** 全局变量: 无
101 ** 全局常量:无
102 ** 调用模块: ISP_IAP_Enable>>>>>允许对STC89C54RD+单片机的EEPROM进行ISP/IAP操作;
103 ** ISP_IAP_Disable>>>>禁止对STC89C54RD+单片机的EEPROM进行ISP/IAP操作。
104 ** 其它说明:详细的操作说明见深圳宏晶公司的数据手册。
105 **
106 ** 作 者: 罗建
107 ** 日 期: 2007年02月09日
108 **-------------------------------------------------------------------------------------------------------
109 ** 修改人:
110 ** 日 期:
111 **-------------------------------------------------------------------------------------------------------
112 ********************************************************************************************************/
113 bit ReadBytes(INT16U nByteAddr, INT8U ByteQuantity, INT8U nDataBuf[])
114 {
115 1 INT8U i;
116 1
117 1 ISP_CMD = ISP_CMD & 0xF8; /* 1111,1000 */
C51 COMPILER V8.02 STC89C54RD_FLASHIAP 02/13/2007 17:34:12 PAGE 3
118 1 ISP_CMD = ISP_CMD | CMD_READ_DM; /* 0000,0001 */
119 1 ISP_IAP_Enable();
120 1 for (i=0;i<ByteQuantity;i++) /* 写入ByteQuantity个字节 */
121 1 {
122 2 ISP_ADDRH = (INT8U)(nByteAddr >> 8); /* 设置扇区地址 */
123 2 ISP_ADDRL = (INT8U)(nByteAddr & 0x00FF);
124 2 ISP_TRIG = 0x46;
125 2 ISP_TRIG = 0xB9;
126 2 _nop_();
127 2 nDataBuf[i] = ISP_DATA; /* 读取一字节数据,并移动缓冲区指针 */
128 2 nByteAddr++; /* 准备下一个字节地址 */
129 2 }
130 1 ISP_IAP_Disable();
131 1 return OK;
132 1 }
133
134 // ------------------------------------------------------------------------------------------------------
135 /********************************************************************************************************
136 ** 函数名称: WriteBytes
137 ** 功能描述: 将nDataBuf缓冲区中的连续ByteQuantity个字节数据写入到STC89C54RD+单片机EEPROM中。
138 ** 输 入: nByteAddr>>>>>>>>>>要写入的数据缓冲区在EEPROM中的首地址;
139 ** ByteQuantity>>>>>>>要写入的数据个数;
140 ** nDataBuf[]>>>>>>>>>要写入的数据。
141 ** 输 出: 位变量>>>>>>>>>>>>>操作成功则返回OK,否则返回ERROR
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -