📄 i2c.lst
字号:
C51 COMPILER V5.50, I2C 02/12/03 05:12:36 PAGE 1
DOS C51 COMPILER V5.50, COMPILATION OF MODULE I2C
OBJECT MODULE PLACED IN I2C.OBJ
COMPILER INVOKED BY: C:\C51\BIN\C51.EXE I2C.C SB DB OE
stmt level source
1 /*******************************************************************************/
2 /* */
3 /* Title: I2C Code */
4 /* */
5 /* This example demo code is provided as is and has no warranty, implied */
6 /* or otherwise. You are free to use/modify any of the provided code at */
7 /* your own risk in your applications. */
8 /* */
9 /* LIMITATION OF LIABILITY: NEITHER STMicroelectronics NOR ITS VENDORS */
10 /* OR AGENTS SHALL BE LIABLE FOR ANY LOSS OF PROFITS, LOST OF USE, LOSS */
11 /* OF DATA, INTERRUPTION OF BUSINESS, NOR FOR INDIRECT, SPECIAL, */
12 /* INCIDENTAL OR CONSEQUENTIAL DAMAGES OF ANY KIND WHETHER UNDER THIS */
13 /* AGREEMENT OR OTHERWISE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH */
14 /* DAMAGES. */
15 /* */
16 /* Application Test Program for: */
17 /* ----------------------------- */
18 /* */
19 /* M41T0/T00/T11/T56 (I2C - 8 Bytes RTC Reg. Map) */
20 /* M41T80/T81 (I2C - 20 Bytes RTC Reg. Map) */
21 /* M41ST84/ST85 (I2C - 20 Bytes RTC Reg. Map) */
22 /* M41ST87 (I2C - RTC Reg. Map) */
23 /* */
24 /*=============================================================================*/
25 /* */
26 /* Rev. Description Date: */
27 /*=============================================================================*/
28 /* */
29 /* 01 - Initial Rev. 03-01-03 */
30 /* */
31 /*******************************************************************************/
32
33 #include <c:\c51\inc\REG515.H> /* DEFINE 8051 REGISTERS */
34 #include <c:\c51\inc\STDIO.H> /* DEFINE I/O FUNCTIONS */
35 #include <c:\c51\inc\CTYPE.H> /* DEFINITIONS FOR CHAR CONVERSION */
36 #include <c:\c51\inc\ABSACC.H> /* DIRECT ACCESS TO 8051 MEMORY */
37 #include <c:\c51\inc\STDLIB.H> /* STANDARD LIBRARY */
38 #include <c:\c51\inc\STRING.H> /* STRING FUNCTIONS */
39 #include <c:\c51\inc\INTRINS.H>
40
41
42 /********************** PORT ASSIGNMENTS **************************************/
43 /* */
44 /* Use Port 1, 4 and 5 for the following signals. */
45 /* */
46 /* P4.0 = SDA (Input/Output) */
47 /* P4.1 = SCL (Input) */
48 /* */
49 /******************************************************************************/
50
51
52
53 /*********************** FUNCTIONS PROTOTYPE **********************************/
54 /* */
55 /******************************************************************************/
56
57 void main (void);
58 void Board_Init(void);
59
C51 COMPILER V5.50, I2C 02/12/03 05:12:36 PAGE 2
60 /* I2C Functions Prototype */
61 void I2CStart(void);
62 void I2C_Init(void);
63
64 void Delay(unsigned int count);
65
66 unsigned char I2CMasterWrite(unsigned char input_byte);
67 unsigned char I2CMasterRead(unsigned char ack);
68 unsigned char I2CStop();
69
70
71 /********************* DEFINE CONSTANTS & GLOBAL VARIABLES ********************/
72 /* */
73 /* Define Timekeeper registers constants. */
74 /* */
75 /******************************************************************************/
76
77 #define Good_Device 1
78 #define Bad_Device 2
79
80 sbit SDA = P4^0;
81 sbit SCL = P4^1;
82
83
84 /******************************************************************************/
85 /* Subroutine: Main */
86 /* */
87 /* Description: Write and read to the Timekeeper Register and also */
88 /* write and read to the RAM. */
89 /* */
90 /******************************************************************************/
91
92 void main(void)
93 { /* Start of Main Program */
94 1 unsigned char Dev_Sel;
95 1 unsigned char Sec_Add_Reg, Min_Add_Reg, Hr_Add_Reg, DOW_Add_Reg, DOM_Add_Reg;
96 1 unsigned char Mon_Add_Reg, Yr_Add_Reg, Cont_Add_Reg, Word_Add, RAM_Size;
97 1 unsigned char Tenths_Sec_Add_Reg, Wdog_Add_Reg, Al_Mon_Add_Reg;
98 1 unsigned char Al_DOM_Add_Reg, Al_Hr_Add_Reg, Al_Min_Add_Reg, Al_Sec_Add_Reg;
99 1 unsigned char Flags_Add_Reg, SQW_Add_Reg, Tamper1_Add_Reg, Tamper2_Add_Reg;
100 1 unsigned char Sel_RTC_Reg, RTC_Data;
101 1 unsigned char Sec_Reg, Min_Reg, Hr_Reg, DOW_Reg, DOM_Reg, Mon_Reg, Yr_Reg;
102 1 unsigned char Cont_Reg, Tenths_Sec_Reg, Wdog_Reg, Al_Mon_Reg, Al_DOM_Reg;
103 1 unsigned char Al_Hr_Reg, Al_Min_Reg, Al_Sec_Reg, Flags_Reg, SQW_Reg;
104 1 unsigned char Tamper1_Reg, Tamper2_Reg, Interrupts;
105 1 unsigned char Sec_Data, Min_Data, Hr_Data, DOW_Data, DOM_Data, Mon_Data, Yr_Data;
106 1 unsigned char j, i, Number_Bytes, Error_Flag;
107 1 unsigned char RAM_Data_In, RAM_Add, RAM_Data_Out, Dev_Add, RTC_Reg_Size, RAM_Density;
108 1
109 1
110 1
111 1 Board_Init();
112 1 Dev_Add = 0xD0;
113 1
114 1 /* Start of I2C Mode */
115 1 I2C_Init();
116 1 Dev_Sel = _getkey();
117 1 switch (Dev_Sel)
118 1 { /* Start of Device Selection */
119 2 case 1 : /* T0/T00/T11/T56 RTC Address Location */
120 2 /* T0 & T00 device have no memory */
121 2 /* T11 & T56 have 56 bytes of memory */
122 2 P5 = 0xFF;
123 2 Sec_Add_Reg = _getkey();
124 2 Min_Add_Reg = _getkey();
125 2 Hr_Add_Reg = _getkey();
C51 COMPILER V5.50, I2C 02/12/03 05:12:36 PAGE 3
126 2 DOW_Add_Reg = _getkey();
127 2 DOM_Add_Reg = _getkey();
128 2 Mon_Add_Reg = _getkey();
129 2 Yr_Add_Reg = _getkey();
130 2 Cont_Add_Reg = _getkey();
131 2 Word_Add = _getkey();
132 2 RAM_Size = _getkey();
133 2 break ;
134 2
135 2 case 2 : /* M41T80/T81/ST84/ST85 RTC Address Location */
136 2 /* T80 & T81 device have no memory */
137 2 /* ST84 & ST85 have 56 bytes of memory */
138 2 P5 = 0xFF;
139 2 Tenths_Sec_Add_Reg = _getkey();
140 2 Sec_Add_Reg = _getkey();
141 2 Min_Add_Reg = _getkey();
142 2 Hr_Add_Reg = _getkey();
143 2 DOW_Add_Reg = _getkey();
144 2 DOM_Add_Reg = _getkey();
145 2 Mon_Add_Reg = _getkey();
146 2 Yr_Add_Reg = _getkey();
147 2 Cont_Add_Reg = _getkey();
148 2 Wdog_Add_Reg = _getkey();
149 2 Al_Mon_Add_Reg = _getkey();
150 2 Al_DOM_Add_Reg = _getkey();
151 2 Al_Hr_Add_Reg = _getkey();
152 2 Al_Min_Add_Reg = _getkey();
153 2 Al_Sec_Add_Reg = _getkey();
154 2 Flags_Add_Reg = _getkey();
155 2 SQW_Add_Reg = _getkey();
156 2 Word_Add = _getkey();
157 2 RAM_Size = _getkey();
158 2 break ;
159 2
160 2 case 3 : /* M41ST87 RTC Address Location */
161 2 /* ST87 has 144 bytes of memory */
162 2 P5 = 0xEF;
163 2 Tenths_Sec_Add_Reg = _getkey();
164 2 Sec_Add_Reg = _getkey();
165 2 Min_Add_Reg = _getkey();
166 2 Hr_Add_Reg = _getkey();
167 2 DOW_Add_Reg = _getkey();
168 2 DOM_Add_Reg = _getkey();
169 2 Mon_Add_Reg = _getkey();
170 2 Yr_Add_Reg = _getkey();
171 2 Cont_Add_Reg = _getkey();
172 2 Wdog_Add_Reg = _getkey();
173 2 Al_Mon_Add_Reg = _getkey();
174 2 Al_DOM_Add_Reg = _getkey();
175 2 Al_Hr_Add_Reg = _getkey();
176 2 Al_Min_Add_Reg = _getkey();
177 2 Al_Sec_Add_Reg = _getkey();
178 2 Flags_Add_Reg = _getkey();
179 2 SQW_Add_Reg = _getkey();
180 2 Tamper1_Add_Reg = _getkey();
181 2 Tamper2_Add_Reg = _getkey();
182 2 Word_Add = _getkey();
183 2 RAM_Size = _getkey();
184 2 break ;
185 2
186 2 default:
187 2 break ;
188 2 }
189 1 /* End of Device Selection */
190 1 while(1)
191 1 { /* Start of Input Selection */
C51 COMPILER V5.50, I2C 02/12/03 05:12:36 PAGE 4
192 2 Sel_RTC_Reg = _getkey ();
193 2
194 2 switch (Sel_RTC_Reg)
195 2 { /* Start of RTC Reg. Selection */
196 3 case 11: /* write to seconds register */
197 3 RTC_Data = _getkey();
198 3 I2CStart();
199 3 if (I2CMasterWrite(Dev_Add))
200 3 I2CStop();
201 3
202 3 if (I2CMasterWrite(Sec_Add_Reg))
203 3 I2CStop();
204 3
205 3 if (I2CMasterWrite(RTC_Data))
206 3 I2CStop();
207 3
208 3 I2CStop();
209 3 break;
210 3
211 3 case 12: /* write to minutes register */
212 3 RTC_Data = _getkey();
213 3 I2CStart();
214 3 if (I2CMasterWrite(Dev_Add))
215 3 I2CStop();
216 3
217 3 if (I2CMasterWrite(Min_Add_Reg))
218 3 I2CStop();
219 3
220 3 if (I2CMasterWrite(RTC_Data))
221 3 I2CStop();
222 3
223 3 I2CStop();
224 3 break;
225 3
226 3 case 13: /* write to hours register */
227 3 RTC_Data = _getkey();
228 3 I2CStart();
229 3 if (I2CMasterWrite(Dev_Add))
230 3 I2CStop();
231 3
232 3 if (I2CMasterWrite(Hr_Add_Reg))
233 3 I2CStop();
234 3
235 3 if (I2CMasterWrite(RTC_Data))
236 3 I2CStop();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -