📄 24c02.lst
字号:
C51 COMPILER V8.02 24C02 07/09/2010 11:41:02 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE 24C02
OBJECT MODULE PLACED IN 24c02.OBJ
COMPILER INVOKED BY: D:\处理软件\keil\C51\BIN\C51.EXE 24c02.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /***************************************************************
2 “天祥电子” 倾情奉献
3 www.txmcu.com
4 www.txmcu.cn
5 *****************************************************************
6 程序功能: 向IIC总线器件24c02EEPROM中地址为3的存储单元中写入数据34
7 并将其读出,显示于数码管上。
8 主要为了练习IIC总线的驱动程序以及24C02的操作方法。
9 ***************************************************************/
10 //试验AT24C02EEPROM芯片程序
11 #include<reg51.h>
12 #include <intrins.h>
13 #define uint unsigned int
14 #define uchar unsigned char
15 sbit sda=P2^0; //IO口定义
16 sbit scl=P2^1;
17 sbit dula=P2^6;
18 sbit wela=P2^7;
19
20 void nop()
21 {
22 1 _nop_();
23 1 _nop_();
24 1 }
25 /////////24C02读写驱动程序////////////////////
26 void delay1(unsigned int m)
27 { unsigned int n;
28 1 for(n=0;n<m;n++);
29 1 }
30
31 void init() //24c02初始化子程序
32 {
33 1 scl=1;
34 1 nop();
35 1 sda=1;
36 1 nop();
37 1 }
38
39 void start() //启动I2C总线
40 {
41 1 sda=1;
42 1 nop();
43 1 scl=1;
44 1 nop();
45 1 sda=0;
46 1 nop();
47 1 scl=0;
48 1 nop();
49 1 }
50
51 void stop() //停止I2C总线
52 {
53 1 sda=0;
54 1 nop();
55 1 scl=1;
C51 COMPILER V8.02 24C02 07/09/2010 11:41:02 PAGE 2
56 1 nop();
57 1 sda=1;
58 1 nop();
59 1 }
60
61 void writebyte(unsigned char j) //写一个字节
62 {
63 1 unsigned char i,temp;
64 1 temp=j;
65 1 for (i=0;i<8;i++)
66 1 {
67 2 temp=temp<<1;
68 2 scl=0;
69 2 nop();
70 2 sda=CY; //temp左移时,移出的值放入了CY中
71 2 nop();
72 2 scl=1; //待sda线上的数据稳定后,将scl拉高
73 2 nop();
74 2 }
75 1 scl=0;
76 1 nop();
77 1 sda=1;
78 1 nop();
79 1 }
80
81 unsigned char readbyte() //读一个字节
82 {
83 1 unsigned char i,j,k=0;
84 1 scl=0; nop(); sda=1;
85 1 for (i=0;i<8;i++)
86 1 {
87 2 nop(); scl=1; nop();
88 2 if(sda==1)
89 2 j=1;
90 2 else
91 2 j=0;
92 2 k=(k<<1)|j;
93 2 scl=0;
94 2 }
95 1 nop();
96 1 return(k);
97 1 }
98
99 void clock() //I2C总线时钟
100 {
101 1 unsigned char i=0;
102 1 scl=1;
103 1 nop();
104 1 while((sda==1)&&(i<255))
105 1 i++;
106 1 scl=0;
107 1 nop();
108 1 }
109
110 ////////从24c02的地址address中读取一个字节数据/////
111 unsigned char read24c02(unsigned char address)
112 {
113 1 unsigned char i;
114 1 start();
115 1 writebyte(0xa0);
116 1 clock();
117 1 writebyte(address);
C51 COMPILER V8.02 24C02 07/09/2010 11:41:02 PAGE 3
118 1 clock();
119 1 start();
120 1 writebyte(0xa1);
121 1 clock();
122 1 i=readbyte();
123 1 stop();
124 1 delay1(100);
125 1 return(i);
126 1 }
127
128 //////向24c02的address地址中写入一字节数据info/////
129 void write24c02(unsigned char address,unsigned char info)
130 {
131 1 start();
132 1 writebyte(0xa0);
133 1 clock();
134 1 writebyte(address);
135 1 clock();
136 1 writebyte(info);
137 1 clock();
138 1 stop();
139 1 delay1(5000); //这个延时一定要足够长,否则会出错。因为24c02在从sda上取得数据后,还需要一定时间的烧录过
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -