📄 main.lst
字号:
C51 COMPILER V7.07 MAIN 07/07/2006 03:59:08 PAGE 1
C51 COMPILER V7.07, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: c:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #define uchar unsigned char //定义一下方便使用
2 #define uint unsigned int
3 #define ulong unsigned long
4 #include <reg52.h> //包括一个52标准内核的头文件
5
6 char code dx516[3] _at_ 0x003b;//这是为了仿真设置的
7
8 #define WriteDeviceAddress 0xa0 //定义器件在IIC总线中的地址
9 #define ReadDviceAddress 0xa1
10 sbit SCL=P2^7;
11 sbit SDA=P2^6;
12
13 sbit P10=P1^0;
14
15 //定时函数
16 void DelayMs(unsigned int number)
17 {
18 1 unsigned char temp;
19 1 for(;number!=0;number--)
20 1 {
21 2 for(temp=112;temp!=0;temp--) ;
22 2 }
23 1 }
24
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 //结束总线
35 void Stop()
36 {
37 1 SCL=0;
38 1 SDA=0;
39 1 SCL=1;
40 1 SDA=1;
41 1 }
42
43
44 //发ACK0
45 void NoAck()
46 {
47 1 SDA=1;
48 1 SCL=1;
49 1 SCL=0;
50 1 }
51
52 //测试ACK
53 bit TestAck()
54 {
55 1 bit ErrorBit;
C51 COMPILER V7.07 MAIN 07/07/2006 03:59:08 PAGE 2
56 1 SDA=1;
57 1 SCL=1;
58 1 ErrorBit=SDA;
59 1 SCL=0;
60 1 return(ErrorBit);
61 1 }
62
63 //写入8个bit到24c02
64 Write8Bit(unsigned char input)
65 {
66 1 unsigned char temp;
67 1 for(temp=8;temp!=0;temp--)
68 1 {
69 2 SDA=(bit)(input&0x80);
70 2 SCL=1;
71 2 SCL=0;
72 2 input=input<<1;
73 2 }
74 1 }
75
76 //写入一个字节到24c02中
77 void Write24c02(uchar ch,uchar address)
78 {
79 1 Start();
80 1 Write8Bit(WriteDeviceAddress);
81 1 TestAck();
82 1 Write8Bit(address);
83 1 TestAck();
84 1
85 1 Write8Bit(ch);
86 1 TestAck();
87 1
88 1 Stop();
89 1 DelayMs(10);
90 1 }
91
92 //从24c02中读出8个bit
93 uchar Read8Bit()
94 {
95 1 unsigned char temp,rbyte=0;
96 1 for(temp=8;temp!=0;temp--)
97 1 {
98 2 SCL=1;
99 2 rbyte=rbyte<<1;
100 2 rbyte=rbyte|((unsigned char)(SDA));
101 2 SCL=0;
102 2 }
103 1 return(rbyte);
104 1 }
105
106 //从24c02中读出1个字节
107 uchar Read24c02(uchar address)
108 {
109 1 uchar ch;
110 1
111 1 Start();
112 1 Write8Bit(WriteDeviceAddress);
113 1 TestAck();
114 1 Write8Bit(address);
115 1 TestAck();
116 1 Start();
117 1 Write8Bit(ReadDviceAddress);
C51 COMPILER V7.07 MAIN 07/07/2006 03:59:08 PAGE 3
118 1 TestAck();
119 1 ch=Read8Bit();
120 1 NoAck();
121 1 Stop();
122 1 return(ch);
123 1 }
124
125 //本课试验写入一个字节到24c02并读出来验证
126
127 void main(void) // 主程序
128 {
129 1 uchar c1,c2;
130 1 c1=Read24c02(0x02);
131 1
132 1 Write24c02(0x99,0x03);
133 1 c2=Read24c02(0x03);
134 1
135 1 P10=0;
136 1 while(1); //程序挂起
137 1
138 1 }
139
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 190 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 2
IDATA SIZE = ---- ----
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 + -