📄 eeprom.lst
字号:
C51 COMPILER V7.50 EEPROM 07/11/2005 15:03:03 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE EEPROM
OBJECT MODULE PLACED IN EEPROM.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE EEPROM.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /***********************************************************************
2 * Project: MTV230+CS7110+UPS017
3 *
-
4 * File: EEPROM.c (Source)
-
5 *
-
6 * Version: V1.0
-
7 *
-
8 * Created: 2004.11.2
-
9 * Last Change: 2005.7.11
-
10 *
-
11 * Author: Yuan K
-
12 *
13 * Company: MYSON
14 *
-
15 * Compiler: KEIL C51 V7.04
-
16 *
-
17 * Description:
18 *
19 * MTV230(@12MHz)
20 *
21 *Copyright (c) Century Integration Technology, Inc.
22 *All rights reserved.
23 *
24 ***********************************************************************/
25
26 #include "Globe.h"
27
28
29
30
31
32
33
34 bit EEPROM_Error ;
35 BYTE idata EEPROMDelay;
36
37 void InitialIIC(void)
38 {
39 1
40 1 IICBufPtr=IICBuf.ByteArray;
41 1 }
42
43 //=============================================================
C51 COMPILER V7.50 EEPROM 07/11/2005 15:03:03 PAGE 2
44 void I2cStart(void)
45 {
46 1 byM230_IIC_CTR =0x00;
47 1 ShortDelay(1);
48 1 byM230_IIC_CTR=byM230_IIC_CTR|0x01; //S rise
49 1 }
50
51 //=============================================================
52 bit wait_IIC(void)
53 {
54 1 IICWait=IIC_WAIT_TIME;
55 1 error=0;
56 1 //check MBuf sent/received
57 1 while( (byM230_IIC_INTFLG&0x01)==0) // Wait for byM230_IIC_MBUFl
58 1 {
59 2 if(IICWait==0)
60 2 {
61 3 error=1;
62 3 break;
63 3 }
64 2 }
65 1 // check ack.
66 1 if(byM230_IIC_STUS2&0x80)
67 1 {
68 2 error=1;
69 2 }
70 1
71 1 byM230_IIC_INTFLG=byM230_IIC_INTFLG&0xfe;
72 1 return(error);
73 1 }
74
75
76
77 //=============================================================
78 void I2cStop(void)
79 {
80 1 byM230_IIC_CTR=0x00;
81 1 ShortDelay(1);
82 1 byM230_IIC_CTR=byM230_IIC_CTR|0x02; //P rise
83 1 }
84
85
86 //=============================================================
87 void IICRead(BYTE slave, BYTE address, BYTE count)
88 {
89 1 BYTE data i;
90 1 InitialIIC();
91 1 byM230_IIC_INTFLG=byM230_IIC_INTFLG&0xfe;
92 1 //start
93 1 byM230_IIC_CTR=0x00; // S=0,P=0
94 1 byM230_IIC_MBUF=slave; // slave address (dummy write)
95 1 //I2cStart();
96 1 ShortDelay(1);
97 1 byM230_IIC_CTR=0x01; // S=1,P=0
98 1 error=wait_IIC();
99 1 //dummy write
100 1 // ShortDelay(1);
101 1 byM230_IIC_MBUF=address; //address
102 1 error=wait_IIC();
103 1 //restart
104 1 byM230_IIC_CTR=byM230_IIC_CTR & 0xfe; // S set 0
105 1 byM230_IIC_MBUF=slave|0x01; //restart + slave address (read)
C51 COMPILER V7.50 EEPROM 07/11/2005 15:03:03 PAGE 3
106 1 ShortDelay(1);
107 1 byM230_IIC_CTR=byM230_IIC_CTR | 0x01; // S set 1
108 1 error=wait_IIC();
109 1 //dummy read
110 1 ShortDelay(1);
111 1 IICBuf.ByteArray[0]=byM230_IIC_MBUF;
112 1 error=wait_IIC();
113 1 i=0;
114 1 while(count!=0)
115 1 {
116 2 if(count==1)
117 2 {
118 3 byM230_IIC_CTR=0x05; //Ack=1
119 3 }
120 2 ShortDelay(1);
121 2 *IICBufPtr=byM230_IIC_MBUF;
122 2 IICBufPtr++;
123 2 error=wait_IIC();
124 2 if(error==1) break;
125 2 count--;
126 2 i++;
127 2 }
128 1 I2cStop();
129 1
130 1 }
131
132
133
134 //=============================================================
135 void IICWrite(BYTE slave,BYTE address,BYTE count)
136 {
137 1 BYTE data i;
138 1 InitialIIC();
139 1 byM230_IIC_INTFLG=byM230_IIC_INTFLG&0xfe;
140 1 byM230_IIC_MBUF=slave; // First byte of IIC data:slave address
141 1 I2cStart();
142 1 error=wait_IIC();
143 1 byM230_IIC_MBUF=address; // Send next byte:sub address
144 1 error=wait_IIC();
145 1
146 1 for(i=0; i<count; i++)
147 1 {
148 2 byM230_IIC_MBUF=*IICBufPtr; // Send next byte
149 2 IICBufPtr++;
150 2 error=wait_IIC();
151 2 if(error==1) break;
152 2 }
153 1
154 1 I2cStop();
155 1 DelayX1ms(1);
156 1 }
157
158
159 BYTE EEPROM_Rd_Byte(BYTE address)
160 {
161 1 while(EEPROMDelay);
162 1 IICRead(EEPROM_ADDRESS, address, 1);
163 1 EEPROMDelay=EEPROM_WAIT;
164 1 InitialIIC();
165 1 return IICBuf.ByteArray[0];
166 1 }
167
C51 COMPILER V7.50 EEPROM 07/11/2005 15:03:03 PAGE 4
168 void EEPROM_Wr_Byte(BYTE address, BYTE datasheet)
169 {
170 1 IICBuf.ByteArray[0]=datasheet;
171 1 while(EEPROMDelay);
172 1 IICWrite(EEPROM_ADDRESS, address, 1);
173 1 EEPROMDelay=EEPROM_WAIT;
174 1 }
175
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 357 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 6
IDATA SIZE = 1 ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -