📄 eeprom.lst
字号:
C51 COMPILER V7.09 EEPROM 04/14/2009 08:43:10 PAGE 1
C51 COMPILER V7.09, COMPILATION OF MODULE EEPROM
OBJECT MODULE PLACED IN eeprom.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE eeprom.c OMF2 OPTIMIZE(9,SIZE) BROWSE DEBUG
line level source
1 #include "reg52.h"
2 #include "eeprom.h"
3 #define HIGH 1
4 #define LOW 0
5 void I2CDelay_nms(uint Delay);
6 void delay( uint a)
7 {
8 1 uint K;
9 1 for( K=0;K<a;K++)
10 1 ;
11 1 }
12
13 ////////////////////////////////I2C///////////////////////////////////////
14 //提供I2C总线工作时序中的起始位
15 void I_start(void)
16 {
17 1 I2C_SDA = HIGH;
18 1 delay(4);
19 1 I2C_SCK = HIGH;
20 1 delay(4);
21 1 I2C_SDA = LOW;//当I2C_SCK为高时,I2C_SDA的一个下降沿作为起始位
22 1 delay(4);
23 1 I2C_SCK = LOW;
24 1 delay(4);
25 1 }
26 //提供I2C总线工作时序中的停止位
27 void I_stop(void)
28 {
29 1 I2C_SDA = LOW;
30 1 delay(4);
31 1 I2C_SCK = HIGH;
32 1 delay(4);
33 1 I2C_SDA = HIGH;//当I2C_SCK为高时,I2C_SDA的一个上升沿作为停止位
34 1 delay(4);
35 1 I2C_SCK = LOW;
36 1 delay(4);
37 1 }
38
39 //提供I2C总线的时钟信号,并返回时钟电平为高期间I2C_SDA信号线上状态
40 bit I_clock(void)
41 {
42 1 bit sample;
43 1 I2C_SCK = HIGH;
44 1 delay(4);
45 1 sample = I2C_SDA;
46 1 I2C_SCK = LOW;
47 1 delay(4);
48 1 return (sample);
49 1 }
50 //向I2C总线发送8位数据,并请求一个应答信号ACK。如果收到ACK应答,则返回1,否则返回0。
51 bit I_send(uchar I_data)
52 {
53 1 register uchar i;
54 1 /*发送8位数据*/
55 1
C51 COMPILER V7.09 EEPROM 04/14/2009 08:43:10 PAGE 2
56 1 for(i=0;i<8;i++)
57 1 {
58 2 I2C_SDA = (bit)(I_data & 0x80); //向总线发数据
59 2 I_data <<= 1;
60 2 I_clock(); //提供总线时钟
61 2 }
62 1 /*请求应答信号ACK*/
63 1 I2C_SDA = HIGH;
64 1 delay(4);
65 1 return(~I_clock());
66 1 }
67 //从I2C总线上接收8位数据信号,并将接收到的8位数据作为一个字节返回,不回送应答信号。
68 //主函数在调用本函数之前应保证I2C_SDA信号线处于浮置状态,I2C_SDA=1.
69 uchar I_receive(void)
70 {
71 1 uchar I_data = 0;
72 1 register uchar i;
73 1 for(i=0;i<8;i++)
74 1 {
75 2 I_data*=2;
76 2 if(I_clock())I_data++;
77 2 }
78 1 return (I_data);
79 1 }
80
81 uchar readI2c ( uchar address )
82 {
83 1 uchar ibuf = 0 ;
84 1 I_start() ;
85 1 I_send(0xa0);
86 1 I2CDelay_nms(8);
87 1 I_send(0x00);
88 1 I2CDelay_nms(8);
89 1 I_send( address );
90 1 I2CDelay_nms(8);
91 1 I_start() ;
92 1 I2CDelay_nms(5);
93 1 I_send(0xa1);
94 1 ibuf = I_receive() ;
95 1 I_stop( ) ;
96 1 I2CDelay_nms(8);
97 1 return ibuf ;
98 1 }
99
100
101
102 void writeI2c ( ) // 首地址 秒/分/时/天
103 {
104 1
105 1 I_start() ;
106 1 I_send(0xa0); // write command
107 1 I2CDelay_nms(5); // address high byte
108 1 I_send(0x00);
109 1 I2CDelay_nms(5);
110 1 I_send(0x00); //address low byte
111 1 I2CDelay_nms(5);
112 1 I_send(total_t[0]); //data
113 1 I2CDelay_nms(5);
114 1 I_send(total_t[1]); //data
115 1 I2CDelay_nms(5);
116 1 I_send(total_t[2]); //data
117 1 I2CDelay_nms(5);
C51 COMPILER V7.09 EEPROM 04/14/2009 08:43:10 PAGE 3
118 1 I_send(total_t[3]); //data
119 1 I2CDelay_nms(5);
120 1 I_stop( ) ;
121 1 I2CDelay_nms(5);
122 1 }
123 //--------------------------------------------------
124 void I2CDelay_nms(uint Delay) // f = 9.216MHZ
125 { uint i;
126 1 for(;Delay>0;Delay--)
127 1 { for(i=0;i<83;i++)
128 2 ;
129 2 }
130 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 317 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 2
IDATA SIZE = ---- ----
BIT SIZE = ---- 1
EDATA SIZE = ---- ----
HDATA SIZE = ---- ----
XDATA CONST SIZE = ---- ----
FAR CONST SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -