📄 24c02读写.lst
字号:
C51 COMPILER V7.08 24C02读写 08/19/2000 21:33:07 PAGE 1
C51 COMPILER V7.08, COMPILATION OF MODULE 24C02读写
OBJECT MODULE PLACED IN 24c02读写.OBJ
COMPILER INVOKED BY: D:\单片机~1\C51\Bin\c51.exe 24c02读写.c DB OE SMALL ROM(LARGE)
line level source
*** WARNING C500 IN LINE 1 OF 24C02读写.C: MISSING DEVICE (SECURITY KEY NOT FOUND)
1 //用24c02完成一个实际应用的场合,在24c02中记录按键次数并用二机
2 //制显示在4个LED上。下次开机时,将继续显示上次的按键次数。这些工
3 //作在工控领域有十分广泛的应用。
4 #include <reg52.h> //包括一个52标准内核的头文件
5 #define uchar unsigned char //定义一下方便使用
6 #define uint unsigned int
7 #define ulong unsigned long
8
9 #define WriteDeviceAddress 0xa0 //定义器件在IIC总线中的地址
10 #define ReadDviceAddress 0xa1
11
12 sbit SCL=P2^7;
13 sbit SDA=P2^6;
14 sbit P10=P1^0;
15 sbit K1=P3^2;
16 //-----------------------------定时函数
17 void DelayMs(unsigned int number)
18 {
19 1 unsigned char temp;
20 1 for(;number!=0;number--)
21 1 {
22 2 for(temp=112;temp!=0;temp--);
23 2 }
24 1 }
25 //----------------------------开始总线
26 void Start()
27 {
28 1 SDA=1;
29 1 SCL=1;
30 1 SDA=0;
31 1 SCL=0;
32 1 }
33 //---------------------------结束总线
34 void Stop()
35 {
36 1 SCL=0;
37 1 SDA=0;
38 1 SCL=1;
39 1 SDA=1;
40 1 }
41 //----------------------------发ACK0
42 void NoAck()
43 {
44 1 SDA=1;
45 1 SCL=1;
46 1 SCL=0;
47 1 }
48 //---------------------------测试ACK
49 bit TestAck()
50 {
51 1 bit ErrorBit;
52 1 SDA=1;
53 1 SCL=1;
54 1 ErrorBit=SDA;
C51 COMPILER V7.08 24C02读写 08/19/2000 21:33:07 PAGE 2
55 1 SCL=0;
56 1 return(ErrorBit);
57 1 }
58 //-------------------写入8个bit到24c02
59 Write8Bit(unsigned char input)
60 {
61 1 unsigned char temp;
62 1 for(temp=8;temp!=0;temp--)
63 1 {
64 2 SDA=(bit)(input&0x80);
65 2 SCL=1;
66 2 SCL=0;
67 2 input=input<<1;
68 2 }
69 1 }
70 //-----------------写入一个字节到24c02中
71 void Write24c02(uchar ch,uchar address)
72 {
73 1 Start();
74 1 Write8Bit(WriteDeviceAddress);
75 1 TestAck();
76 1 Write8Bit(address);
77 1 TestAck();
78 1 Write8Bit(ch);
79 1 TestAck();
80 1 Stop();
81 1 DelayMs(10);
82 1 }
83 //--------------------从24c02中读出8个bit
84 uchar Read8Bit()
85 {
86 1 unsigned char temp,rbyte=0;
87 1 for(temp=8;temp!=0;temp--)
88 1 {
89 2 SCL=1;
90 2 rbyte=rbyte<<1;
91 2 rbyte=rbyte|((unsigned char)(SDA));
92 2 SCL=0;
93 2 }
94 1 return(rbyte);
95 1 }
96 //--------------------从24c02中读出1个字节
97 uchar Read24c02(uchar address)
98 {
99 1 uchar ch;
100 1 Start();
101 1 Write8Bit(WriteDeviceAddress);
102 1 TestAck();
103 1 Write8Bit(address);
104 1 TestAck();
105 1 Start();
106 1 Write8Bit(ReadDviceAddress);
107 1 TestAck();
108 1 ch=Read8Bit();
109 1 NoAck();
110 1 Stop();
111 1 return(ch);
112 1 }
113 //----------------写入按键次数到24c02,并读出来显示在4个LED上
114 void main(void) // 主程序
115 {
116 1 uchar c1,c2;
C51 COMPILER V7.08 24C02读写 08/19/2000 21:33:07 PAGE 3
117 1 while(1)
118 1 {
119 2 c1=Read24c02(0x01); //读出24c02第一个地址数据
120 2 P1=c1; //显示在P1口的4个LED上
121 2 if(!K1) //按键处理
122 2 {
123 3 c1++; //值加1
124 3 Write24c02(c1,0x01); //重新写入24c02
125 3 while(!K1); //等待按键松开
126 3 for(c2=0;c2<250;c2++); //松开按键去抖
127 3 }
128 2 }
129 1 }
130
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 195 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 1 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -