📄 lesson 9.lst
字号:
C51 COMPILER V8.05a LESSON_9 02/04/2009 22:35:34 PAGE 1
C51 COMPILER V8.05a, COMPILATION OF MODULE LESSON_9
OBJECT MODULE PLACED IN lesson 9.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE lesson 9.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include<reg52.h>
2 #define uchar unsigned char
3 #define uint unsigned int
4 sbit sda=P3^7;
5 sbit sck=P3^6;
6
7 void sda_0() {sda=0;;;;}
8 void sda_1() {sda=1;;;;}
9 void sck_0() {sck=0;;;;}
10 void sck_1() {sck=1;;;;}
11 void delay1() {;;;} //延时5us子程序
12 void delay(uint z) //延时子程序
13 {
14 1 uint x,y;
15 1 for(x=z;x>0;x--)
16 1 for(y=110;y>0;y--);
17 1 }
18
19 void initial() //初始化子程序
20 {
21 1 sda_1();
22 1 sck_1();
23 1 }
24
25 void start() //开始子程序
26 {
27 1 sda_1();
28 1 sck_1();
29 1 sda_0();
30 1 }
31
32 void stop() //停止子程序
33 {
34 1 sda_0();
35 1 sck_1();
36 1 sda_1();
37 1 }
38
39 void response() //判断是否收到对方的响应信号,
40 { //没有收到则在规定时间内默认对方收到数据
41 1 uchar i;
42 1 sck_1();
43 1 while((sda==1)&&(i<250))i++;
44 1 sck_0();
45 1 }
46
47 void write_byte(uchar data1) //写数据子程序
48 {
49 1 uchar i,temp;
50 1 temp=data1;
51 1 for(i=0;i<8;i++)
52 1 {
53 2 temp=temp<<1;
54 2 sck_0(); //时钟线为低电平时,数据线才能改变
55 2 sda=CY; delay1();
C51 COMPILER V8.05a LESSON_9 02/04/2009 22:35:34 PAGE 2
56 2 sck_1(); //时钟线为高电平时,数据必须稳定
57 2 }
58 1 sck_0();
59 1 sda_1(); //释放数据线
60 1 response();//等待对方响应
61 1 }
62
63 uchar read_byte() //读数据子程序
64 {
65 1 uchar i,temp;
66 1 sck_0();
67 1 sda_1();
68 1 for(i=0;i<8;i++)
69 1 {
70 2 sck_1();
71 2 temp=(temp<<1)|sda;
72 2 sck_0();
73 2 }
74 1 response();
75 1 return temp;
76 1 }
77
78 void write_address(uchar address,uchar data1)
79 { //向24C02任意地址写任意数据子程序
80 1 start();
81 1 write_byte(0xa0);
82 1 write_byte(address);
83 1 write_byte(data1);
84 1 stop();
85 1 }
86
87 uchar read_address(uchar address)
88 { //向24C02任意地址读任意数据子程序
89 1 uchar data1;
90 1 start();
91 1 write_byte(0xa0); //先发送地址+写方向
92 1 write_byte(address); //读24C02哪一地址的数据
93 1
94 1 start(); //接着又开始
95 1 write_byte(0xa1); //改变方向
96 1 data1=read_byte();
97 1 stop();
98 1 return data1;
99 1 }
100
101 void main()
102 {
103 1 uchar i,j;
104 1 initial();
105 1 for(i=0,j=0;i<255;i++,j++)
106 1 {
107 2 write_address(i,j); //把0到0xff数据存到24C02里
108 2 }
109 1 delay(1); //读数据前要延时一定时间
110 1 P1=read_address(0x55);
111 1 while(1);
112 1 }
113
114
MODULE INFORMATION: STATIC OVERLAYABLE
C51 COMPILER V8.05a LESSON_9 02/04/2009 22:35:34 PAGE 3
CODE SIZE = 241 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 1
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 + -