📄 www.ourhc.cn.lst
字号:
C51 COMPILER V8.05a WWW_OURHC_CN 06/11/2012 15:35:32 PAGE 1
C51 COMPILER V8.05a, COMPILATION OF MODULE WWW_OURHC_CN
OBJECT MODULE PLACED IN www.ourhc.cn.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE www.ourhc.cn.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /********************************************************************
2 汇诚科技
3
4 实现功能:STC15F104E系列单片机之EEPROM应用程序
5 使用芯片:STC15F104E系列单片机
6 晶振:11.0592MHZ
7 波特率:9600
8 编译环境:Keil
9 作者:zhangxinchun
10 网站:www.ourhc.cn
11 淘宝店:
12 汇诚科技 http://ourhc.taobao.com
13 郑兴电子直销部 http://shop68451856.taobao.com
14 【声明】此程序仅用于学习与参考,引用请注明版权和作者信息!
15
16 *********************************************************************/
17 /********************************************************************/
18 #include "reg52.h"
19 #include <intrins.H>
20 #define uchar unsigned char //宏定义字符型变量
21 #define uint unsigned int //宏定义整型变量
22 /********************************************************************
23 寄存器设置
24 *********************************************************************/
25 sfr IAP_DATA =0xc2; //数据寄存器
26 sfr IAP_ADDRH =0xc3; //地址寄存器
27 sfr IAP_ADDRL =0xc4; //地址寄存器
28 sfr IAP_CMD =0xc5; //命令寄存器
29 sfr IAP_TRIG =0xc6; //触发寄存器
30 sfr IAP_CONTR =0xc7; //擦除寄存器
31
32 sbit P33=P3^3; //定义继电器控制输出脚
33 /********************************************************************
34 命令定义
35 *********************************************************************/
36 #define CMD_IDLE 0 //EEPROM无操作
37 #define CMD_READ 1 //读取字节
38 #define CMD_PROGRAM 2 //写入字节
39 #define CMD_ERASE 3 //擦除字节
40 /********************************************************************
41 编程周期由晶振决定
42 *********************************************************************/
43 //#define ENABLE_IAP 0X80 //编程周期由晶振决定(如果<30MHZ选用此项)
44 //#define ENABLE_IAP 0X81 //编程周期由晶振决定(如果<24MHZ选用此项)
45 //#define ENABLE_IAP 0X82 //编程周期由晶振决定(如果<20MHZ选用此项)
46 #define ENABLE_IAP 0X83 //编程周期由晶振决定(如果<12MHZ选用此项)
47 //#define ENABLE_IAP 0X84 //编程周期由晶振决定(如果<6MHZ选用此项)
48 //#define ENABLE_IAP 0X85 //编程周期由晶振决定(如果<3MHZ选用此项)
49 //#define ENABLE_IAP 0X86 //编程周期由晶振决定(如果<2MHZ选用此项)
50 //#define ENABLE_IAP 0X87 //编程周期由晶振决定(如果<1MHZ选用此项)
51
52 #define IAP_ADDRESS 0X0000 //内部EEPROM地址
53 /********************************************************************
54 函数初始化
55 *********************************************************************/
C51 COMPILER V8.05a WWW_OURHC_CN 06/11/2012 15:35:32 PAGE 2
56 void Delay(uchar n); //延时函数
57 void IapIdle(); //操作函数
58 uchar IapReadByte(uint addr); //读取函数
59 void IapProgramByte(uint addr,uchar dat); //写入函数
60 void IapEraseSector(uint addr); //擦除函数
61 /********************************************************************
62 主函数
63 *********************************************************************/
64 void main()
65 {
66 1 uint i; //定义整型变量i
67 1 P33=0;
68 1 Delay(10);//延时
69 1
70 1 IapEraseSector(IAP_ADDRESS); //擦除扇区
71 1 for(i=0;i<512;i++) //擦除512个字节的扇区
72 1 {
73 2 if(IapReadByte(IAP_ADDRESS+i)!=0xff)//判断是否完全擦除
74 2 goto Error; //如果没有擦除跳转到报错位置
75 2 }
76 1
77 1
78 1 Delay(10); //延时
79 1 for(i=0;i<512;i++)//对512个字节进行数据写入
80 1 {
81 2 IapProgramByte(IAP_ADDRESS+i,(uchar)i); //写入数据
82 2 }
83 1
84 1 Delay(10);//延时
85 1 for(i=0;i<512;i++)//读取512个字节的数据
86 1 {
87 2 if(IapReadByte(IAP_ADDRESS+i)!=(uchar)i)//判断数据是否完整
88 2 goto Error; //如果没有擦除跳转到报错位置
89 2 }
90 1
91 1 while(1); //循环一次
92 1 Error: //错误标志位
93 1 P33=1; //如果错误执行此操作
94 1 while(1); //循环一次
95 1 }
96 /********************************************************************
97 延时函数
98 *********************************************************************/
99 void Delay(uchar n)
100 {
101 1 uint x;
102 1 while(n--)
103 1 {
104 2 x=0;
105 2 while(++x);
106 2 }
107 1 }
108 /********************************************************************
109 操作函数
110 *********************************************************************/
111 void IapIdle()
112 {
113 1 IAP_CONTR=0;
114 1 IAP_CMD=0;
115 1 IAP_TRIG=0;
116 1 IAP_ADDRH=0X80;
117 1 IAP_ADDRL=0;
C51 COMPILER V8.05a WWW_OURHC_CN 06/11/2012 15:35:32 PAGE 3
118 1 }
119
120 /********************************************************************
121 读取一个字节函数
122 *********************************************************************/
123 uchar IapReadByte(uint addr)
124 {
125 1 uchar dat;
126 1 IAP_CONTR=ENABLE_IAP;
127 1 IAP_CMD=CMD_READ;
128 1 IAP_ADDRL=addr;
129 1 IAP_ADDRH=addr>>8;
130 1 IAP_TRIG=0X5A;
131 1 IAP_TRIG=0XA5;
132 1 _nop_();
133 1 _nop_();
134 1 _nop_();
135 1 dat=IAP_DATA;
136 1 IapIdle();
137 1 return dat;
138 1 }
139
140 /********************************************************************
141 写入一个字节函数
142 *********************************************************************/
143 void IapProgramByte(uint addr,uchar dat)
144 {
145 1
146 1 IAP_CONTR=ENABLE_IAP;
147 1 IAP_CMD=CMD_PROGRAM;
148 1 IAP_ADDRL=addr;
149 1 IAP_ADDRH=addr>>8;
150 1 IAP_DATA=dat;
151 1 IAP_TRIG=0X5A;
152 1 IAP_TRIG=0XA5;
153 1 _nop_();
154 1 _nop_();
155 1 _nop_();
156 1 IapIdle();
157 1 }
158 /********************************************************************
159 擦除一个字节函数
160 *********************************************************************/
161 void IapEraseSector(uint addr)
162 {
163 1 IAP_CONTR=ENABLE_IAP;
164 1 IAP_CMD=CMD_ERASE;
165 1 IAP_ADDRL=addr;
166 1 IAP_ADDRH=addr>>8;
167 1 IAP_TRIG=0X5A;
168 1 IAP_TRIG=0XA5;
169 1 _nop_();
170 1 _nop_();
171 1 _nop_();
172 1 IapIdle();
173 1 }
174
175 /********************************************************************
176 结束
177 *********************************************************************/
C51 COMPILER V8.05a WWW_OURHC_CN 06/11/2012 15:35:32 PAGE 4
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 224 ----
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 + -