📄 24c02.lst
字号:
C51 COMPILER V6.20c 24C02 07/17/2003 08:42:21 PAGE 1
C51 COMPILER V6.20c, COMPILATION OF MODULE 24C02
OBJECT MODULE PLACED IN 24c02.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 24c02.c DEBUG OBJECTEXTEND
stmt level source
1 #include "intrins.h"
2 #include "At89x51.h"
3 /////////////////////////////////////
4 //采用P1口作控制
5 //11.0592的晶体
6 ////////////////////////////////////
7 //I2C总线的数据和时钟
8 #define SCL P1_5
9 #define SDA P1_4
10 //////////////////////////////////////
11 #define NOP _nop_();_nop_();_nop_();_nop_();
12 #define AddWr 0xa0 /*器件地址选择及写标志*/
13 #define AddRd 0xa1 /*器件地址选择及读标志*/
14
15 //延时程序
16 void mDelay(unsigned j)
17 {
18 1 unsigned int i;
19 1 for(;j>0;j--)
20 1 {
21 2 for(i=0;i<125;i++)
22 2 {;}
23 2 }
24 1 }
25 //发送起始条件
26 void Start(void)
27 {
28 1 SDA=1;
29 1 SCL=1;
30 1 NOP;
31 1 SDA=0;
32 1 NOP;
33 1 }
34 //发送停止条件
35 void Stop(void)
36 {
37 1 SDA=0;
38 1 SCL=1;
39 1 NOP;
40 1 SDA=1;
41 1 NOP;
42 1 }
43 //应答位
44 void Ack(void)
45 {
46 1 SDA=0;
47 1 NOP;
48 1 SCL=1;
49 1 NOP;
50 1 SCL=0;
51 1 }
52 //非应答
53 void NoAck(void)
54 {
55 1 SDA=1;
C51 COMPILER V6.20c 24C02 07/17/2003 08:42:21 PAGE 2
56 1 NOP;
57 1 SCL=1;
58 1 NOP;
59 1 SCL=0;
60 1 }
61 //发送数据子程序,Data为要发送的数据a
62 void Send(unsigned char Data)
63 {
64 1 unsigned char BitCounter=8;//位数控制
65 1 unsigned char temp;//中间变量控制
66 1 do{
67 2 temp=Data;
68 2 SCL=0;
69 2 NOP;
70 2 if((temp&0x0080)==0x0080)//如果最高位是1
71 2 SDA=1;
72 2 else
73 2 SDA=0;
74 2 SCL=1;
75 2 temp=Data<<1;//左移
76 2 Data=temp;
77 2 BitCounter--;
78 2 }while(BitCounter);
79 1 SCL=0;
80 1 }
81 //读一个字节的数据,并返回该字节的值
82 unsigned Read(void)
83 {
84 1 unsigned char temp=0;
85 1 unsigned char temp1=0;
86 1 unsigned BitCounter=8;
87 1 SDA=1;
88 1 do{
89 2 SCL=0;
90 2 NOP;
91 2 SCL=1;
92 2 NOP;
93 2 if(SDA)
94 2 temp=temp|0x01;
95 2 else
96 2 temp=temp&0xfe;
97 2 if(BitCounter-1)
98 2 {
99 3 temp1=temp<<1;
100 3 temp=temp1;
101 3 }
102 2 BitCounter--;
103 2 }while(BitCounter);
104 1 return(temp);
105 1 }
106 //向24c02中写数据
107 void WrToROM(unsigned char Data[],unsigned char Address,unsigned char Num)
108 {
109 1 unsigned char i;
110 1 unsigned char *Pdata;
111 1 Pdata=Data;
112 1 for(i=0;i<Num;i++)
113 1 {
114 2 Start();
115 2 Send(AddWr);
116 2 Ack();
117 2 Send(Address+i);
C51 COMPILER V6.20c 24C02 07/17/2003 08:42:21 PAGE 3
118 2 Ack();
119 2 Send(*(Pdata+i));
120 2 Ack();
121 2 Stop();
122 2 // mDelay(20);
123 2 }
124 1 }
125 void RdFromROM(unsigned char Data[],unsigned char Address,unsigned char Num)
126 {
127 1 unsigned char i;
128 1 unsigned char *Pdata;
129 1 Pdata=Data;
130 1 for(i=0;i<Num;i++)
131 1 {
132 2 Start();
133 2 Send(AddWr);
134 2 Ack();
135 2 Send(Address+i);
136 2 Ack();
137 2 Start();
138 2 Send(AddRd);
139 2 Ack();
140 2 *(Pdata+i)=Read();
141 2 SCL=0;
142 2 NoAck();
143 2 Stop();
144 2 }
145 1 }
146 main()
147 {
148 1 unsigned char Number[4]={1,2,3,4};
149 1 WrToROM(Number,4,4);
150 1 mDelay(20);
151 1 Number[0]=0;
152 1 Number[1]=0;
153 1 Number[2]=0;
154 1 Number[3]=0;
155 1 RdFromROM(Number,4,4);
156 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 382 ----
CONSTANT SIZE = 4 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 21
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 + -