📄 fm24c04.lst
字号:
C51 COMPILER V7.00 FM24C04 09/14/2006 16:35:47 PAGE 1
C51 COMPILER V7.00, COMPILATION OF MODULE FM24C04
OBJECT MODULE PLACED IN FM24C04.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE FM24C04.C OPTIMIZE(9,SIZE) BROWSE ORDER DEBUG OBJECTEXTEND
stmt level source
1 //=============================
2 #include"REG51STC.H"
3 #include "CMD16887.H"
4 #include<intrins.h>
5 #include "externxy.h"
6
7 #define uchar unsigned char
8 #define uint unsigned int
9 #define IIC_READ 0xa1 //定义读指令
10 #define IIC_WRITE 0xa0 //定义写指令
11 #define NOP _nop_()
12 //========================================
13 //功能:ROUTES TO PROVIDE A START SIGNAL
14 //*****************************************
15 void start(void)
16 {
17 1 SCL=0;SDA=1;SCL=1;SDA=0;SCL=0;
18 1 }
19 //=======================================
20 //功能:ROUTES TO PROVIDE A STOP SIGNAL
21 //***************************************
22 void stop(void)
23 {
24 1 SCL=0;SDA=0;SCL=1;SDA=1;SCL=0;
25 1 }
26 //=====================================
27 //功能:ROUTES TO PROVIDE ACK SINGAL
28 //*************************************
29 void ack(void)
30 {
31 1 SCL=0;SDA=0;SCL=1;SCL=0;
32 1 }
33 //======================================================
34 //功能:ROUTES TO RELEASE THE SDA TO RECEIVE A ACK SIGNAL
35 // OR TO PROVIDE A NO_ACK SIGNAL
36 //type=1等待应答信号
37 //type=0 产生无应答信号
38 //*******************************************************
39 void nack(uchar type)
40 {
41 1 SCL=0;SDA=1;SCL=1;IFACK=SDA; SCL=0;
42 1 if(type)
43 1 {
44 2 if(IFACK)//如果无应答信号,则置标志位NO_ACK,程序中止
45 2 {
46 3 NO_ACK=1;//用户可以加入自己的异常处理程序
47 3 //while(1);
48 3 }
49 2 else NO_ACK=0;
50 2 }
51 1 }
52 //=======================================================
53 //功能:THE IIC DEVICE SHIFT OUT A BYTE TO THE MASTER
54 //*******************************************************
55 uchar inbyte(void) //从IIC器件中读出数据
C51 COMPILER V7.00 FM24C04 09/14/2006 16:35:47 PAGE 2
56 {
57 1 SDA=1;
58 1 SCL=1;a7=SDA;SCL=0;
59 1 SCL=1;a6=SDA;SCL=0;
60 1 SCL=1;a5=SDA;SCL=0;
61 1 SCL=1;a4=SDA;SCL=0;
62 1 SCL=1;a3=SDA;SCL=0;
63 1 SCL=1;a2=SDA;SCL=0;
64 1 SCL=1;a1=SDA;SCL=0;
65 1 SCL=1;a0=SDA;SCL=0;
66 1 return(bbyte);
67 1 }
68 //=======================================================
69 //功能:THE IIC DEVICE SHIFT IN A BYTE FROM THE MASTER
70 //*******************************************************
71 void outbyte(uchar outdata) //将数据写入IIC器件
72 {
73 1 bbyte=outdata;
74 1 SDA=a7;SCL=1;SCL=0;
75 1 SDA=a6;SCL=1;SCL=0;
76 1 SDA=a5;SCL=1;SCL=0;
77 1 SDA=a4;SCL=1;SCL=0;
78 1 SDA=a3;SCL=1;SCL=0;
79 1 SDA=a2;SCL=1;SCL=0;
80 1 SDA=a1;SCL=1;SCL=0;
81 1 SDA=a0;SCL=1;SCL=0;
82 1 }
83 //******************************************************************
84 //功能:写EEPROM 1BYTE
85 //******************************************************************
86 void writebyte(uint add,uchar wbyte) //add为写入地址,wbyte为写入数据
87 {
88 1 uchar temph,templ;
89 1 temph=(uchar)(add/256*2+0xa0);
90 1 templ=(uchar)(add%256);
91 1 start(); //开始信号
92 1 //outbyte(IIC_WRITE); //写命令
93 1 //nack(1); //等待应答
94 1 outbyte(temph); //写地址
95 1 nack(1); //等待应答
96 1 outbyte(templ); //写地址
97 1 nack(1);
98 1 outbyte(wbyte); //写数据
99 1 nack(1); //等待应答
100 1 stop(); //停止信号
101 1 }
102 //=====================================================
103 // 功能:读EEPROM 1BYTE
104 //*****************************************************
105 uchar readbyte (uint add) //add为读地址
106 {
107 1 uchar temp,temph,templ;
108 1 temph=(uchar)(add/256*2+0xa0);
109 1 templ=(uchar)(add%256);
110 1 start(); //开始信号
111 1 //outbyte(IIC_WRITE); //写命令
112 1 //nack(1); //等待应答
113 1 outbyte(temph); //写地址
114 1 nack(1); //等待应答
115 1 outbyte(templ); //写地址
116 1 nack(1);
117 1 start(); //开始信号
C51 COMPILER V7.00 FM24C04 09/14/2006 16:35:47 PAGE 3
118 1 //outbyte(IIC_READ); //读命令
119 1 //nack(1); //等待应答
120 1 outbyte(temph+1); //写地址
121 1 nack(1); //等待应答
122 1
123 1 temp=inbyte(); //读数据
124 1 nack(0); //无应答
125 1 stop(); //停止信号
126 1 return(temp);
127 1 }
128 //=================================================
129 // 功能:连写函数
130 //add为读入EEPROM起始地址,ptr保存数据指针,writelen为写入数据长度
131 void writebyteseq(uint add,uchar *ptr,uint writelen)
132 {
133 1 //uchar temp;
134 1 uchar temph,templ;
135 1 uint i;
136 1 temph=(uchar)(add/256*2+0xa0);
137 1 templ=(uchar)(add%256);
138 1 start();
139 1 //outbyte(IIC_WRITE);
140 1 //nack(1);
141 1 outbyte(temph);
142 1 nack(1);
143 1 outbyte(templ);
144 1 nack(1);
145 1 for(i=0;i<writelen;i++)
146 1 {
147 2 outbyte(*(ptr+i));
148 2 nack(1);
149 2 }
150 1 stop();
151 1 }
152 /*******************************************************
153 * 功能:连读函数--read
154 *add为读EEPROM起始地址,ptr读出数据指针,readlen为读出数据长度
155 ********************************************************/
156 void readbyteseq(uint add,uchar *ptr,uint readlen)
157 {
158 1 uchar temph,templ;
159 1 uint i;
160 1 temph=(uchar)(add/256*2+0xa0);
161 1 templ=(uchar)(add%256);
162 1 start();
163 1 //outbyte(IIC_WRITE);
164 1 //nack(1);
165 1 outbyte(temph);
166 1 nack(1);
167 1 outbyte(templ);
168 1 nack(1);
169 1 start();
170 1 //outbyte(IIC_READ);
171 1 //nack(1);
172 1 outbyte(temph+1);
173 1 nack(1);
174 1
175 1 for(i=0;i<readlen-1;i++)
176 1 {
177 2 *(ptr+i)=inbyte();
178 2 ack();
179 2
C51 COMPILER V7.00 FM24C04 09/14/2006 16:35:47 PAGE 4
180 2 }
181 1 *(ptr+readlen-1)=inbyte();
182 1 nack(0);
183 1 stop();
184 1
185 1 }
186 /********************************************************
187 * 功能:EEPROM初始化程序
188 *********************************************************/
189 void eeprom_ipl(void)
190 { uint i;
191 1 void *ptr;
192 1 //-----------------------------------
193 1 for(i=0;i<512;i++)
194 1 {
195 2 writebyte(i,0x00);
196 2 }
197 1 clear_worka();
198 1 clear_workb();
199 1 //----------------------------
200 1 price_a=price_b=888;//单价
201 1 residue_a=residue_b=30; //提前量
202 1 close_num_a=close_num_b=0; //提前关机量
203 1 increment_a=increment_b=300; //增量
204 1 printermode_a=printermode_b=1; //打印机模式--手动
205 1 pirnt_select_a=0;pirnt_select_b=1; //选择打印机
206 1 oil_types_a=oil_types_b=0; //油品类别
207 1 gunadd_a=1;gunadd_b=2; //枪中控号
208 1 decimal_a=2;decimal_b=2; //小数点
209 1 invoice_number=0; //发票编号
210 1 backup_sysdata(); //系统参数备份
211 1 //----------------------------------
212 1 ration_num_b=0x00; //锁机密码a
213 1 ptr=&ration_num_b;
214 1 writebyteseq(PASSSTARTADD,ptr,4);
215 1 ptr=&ration_num_b; //锁机密码b
216 1 writebyteseq(PASSSTARTADD+4,ptr,4);
217 1 //-----------------
218 1 ptr=&invoice_number;
219 1 writebyteseq(506,ptr,4);
220 1
221 1 updatea=1;
222 1 updateb=1;
223 1 //accumulative_total_list_a(); //累计转换至列表a
224 1 //accumulative_total_list_b(); //累计转换至列表b
225 1 }
226 //=======================================================
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 572 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 14
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 + -