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