📄 at24c02.lst
字号:
C51 COMPILER V7.50 AT24C02 12/16/2007 13:47:07 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE AT24C02
OBJECT MODULE PLACED IN AT24C02.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE AT24C02.C BROWSE DEBUG OBJECTEXTEND
line level source
1
2 /******************************************************************
3 /* *
4 /* AOKE210E单片机开发系统演示程序 *
5 /* *
6 /* 版本: V2.0 (2007/11/20) *
7 /* 作者: 高山流水 (Email: aoke999@sohu.com) *
8 /* 网站: www.aokemcu.cn(奥科电子) *
9 /* *
10 /* *
11 /******************************************************************/
12
13 //试验AT24C02EEPROM芯片程序
14 #include<reg51.h>
15 #include <intrins.h>
16 #define uint unsigned int
17 #define uchar unsigned char
18 unsigned char sec; //定义计数值,每过1秒,sec加1
19 unsigned int tcnt; //定时中断次数
20 bit write=0; //写24C08的标志;
21 sbit sda=P1^4; //IO口定义
22 sbit scl=P1^3;
23 sbit dula=P2^2;
24 sbit wela=P2^3;
25 unsigned char j,k;
26 void delay(unsigned char i) //延时程序
27 {
28 1 for(j=i;j>0;j--)
29 1 for(k=125;k>0;k--);
30 1 }
31 uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, //数码管编码
32 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
33 void display(uchar bai_c,uchar sh_c) //显示程序
34 {
35 1 dula=0;
36 1 P0=table[bai_c]; //显示百位
37 1 dula=1;
38 1 dula=0;
39 1
40 1 wela=0;
41 1 P0=0xfe;
42 1 wela=1;
43 1 wela=0;
44 1 delay(5);
45 1
46 1 dula=0;
47 1 P0=table[sh_c]; //显示十位
48 1 dula=1;
49 1 dula=0;
50 1
51 1 wela=0;
52 1 P0=0xfd;
53 1 wela=1;
54 1 wela=0;
55 1 delay(5);
C51 COMPILER V7.50 AT24C02 12/16/2007 13:47:07 PAGE 2
56 1
57 1 }
58
59 /////////24C08读写驱动程序////////////////////
60 void delay1(unsigned char x)
61 { unsigned int i;
62 1 for(i=0;i<x;i++);
63 1 ;}
64 void flash()
65 { ; ; }
66 void x24c08_init() //24c08初始化子程序
67 {scl=1; flash(); sda=1; flash();}
68 void start() //启动I2C总线
69 {sda=1; flash(); scl=1; flash(); sda=0; flash(); scl=0; flash();}
70 void stop() //停止I2C总线
71 {sda=0; flash(); scl=1; flash(); sda=1; flash();}
72 void writex(unsigned char j) //写一个字节
73 { unsigned char i,temp;
74 1 temp=j;
75 1 for (i=0;i<8;i++)
76 1 {temp=temp<<1; scl=0; flash(); sda=CY; flash(); scl=1; flash();}
77 1 scl=0; flash(); sda=1; flash();
78 1 }
79 unsigned char readx() //读一个字节
80 {
81 1 unsigned char i,j,k=0;
82 1 scl=0; flash(); sda=1;
83 1 for (i=0;i<8;i++)
84 1 { flash(); scl=1; flash();
85 2 if (sda==1) j=1;
86 2 else j=0;
87 2 k=(k<<1)|j;
88 2 scl=0;}
89 1 flash(); return(k);
90 1 }
91 void clock() //I2C总线时钟
92 {
93 1 unsigned char i=0;
94 1 scl=1; flash();
95 1 while ((sda==1)&&(i<255))i++;
96 1 scl=0; flash();
97 1 }
98 ////////从24c02的地址address中读取一个字节数据/////
99 unsigned char x24c08_read(unsigned char address)
100 {
101 1 unsigned char i;
102 1 start(); writex(0xa0);
103 1 clock(); writex(address);
104 1 clock(); start();
105 1 writex(0xa1); clock();
106 1 i=readx(); stop();
107 1 delay1(10);
108 1 return(i);
109 1 }
110 //////向24c02的address地址中写入一字节数据info/////
111 void x24c08_write(unsigned char address,unsigned char info)
112 {
113 1 EA=0;
114 1 start(); writex(0xa0);
115 1 clock(); writex(address);
116 1 clock(); writex(info);
117 1 clock(); stop();
C51 COMPILER V7.50 AT24C02 12/16/2007 13:47:07 PAGE 3
118 1 EA=1;
119 1 delay1(50);
120 1 }
121
122 void t0(void) interrupt 1 using 0 //定时中断服务函数
123 {
124 1 TH0=(65536-50000)/256; //对TH0 TL0赋值
125 1 TL0=(65536-50000)%256; //重装计数初值
126 1 tcnt++; //每过250ust tcnt加一
127 1 if(tcnt==20) //计满20次(1秒)时
128 1 {
129 2 tcnt=0; //重新再计
130 2 sec++;
131 2 write=1; //1秒写一次24C08
132 2 if(sec==100) //定时100秒,在从零开始计时
133 2 {sec=0;}
134 2 }
135 1 }
136
137 void main()
138 {
139 1 unsigned char i;
140 1 TMOD=0x01; //定时器工作在方式1
141 1 ET0=1; EA=1;
142 1 x24c08_init(); //初始化24C08
143 1 sec=x24c08_read(2);//读出保存的数据赋于sec
144 1 TH0=(65536-50000)/256; //对TH0 TL0赋值
145 1 TL0=(65536-50000)%256; //使定时器0.05秒中断一次
146 1 TR0=1; //开始计时
147 1 P2=0xC0;
148 1 while(1)
149 1 {
150 2 i=10;
151 2 while(i--)
152 2 {
153 3 display(sec/10,sec%10);
154 3 }
155 2 if(write==1) //判断计时器是否计时一秒
156 2 {
157 3 write=0; //清零
158 3 x24c08_write(2,sec); //在24c08的地址2中写入数据sec
159 3 }
160 2 }
161 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 419 ----
CONSTANT SIZE = 16 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 5 ----
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 + -