📄 24c256.lst
字号:
C51 COMPILER V7.50 24C256 05/27/2007 09:12:26 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE 24C256
OBJECT MODULE PLACED IN 24c256.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 24c256.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*---------------------------------------------
2 读写24C256/512标准程序段 适用于地址为两个字节的IIC存储器
3 -------------------------------------------*/
4 #include <reg52.h>
5 #include <intrins.h>
6 #define uchar unsigned char
7 #define uint unsigned int
8 sbit SDA=P1^0;
9 sbit SCL=P1^1;
10 /*-----------------------------------------------
11 调用方式:void start_bit(void)
12 函数说明:开始位
13 -----------------------------------------------*/
14 void start_bit(void)
15 {
16 1 SCL=1;
17 1 _nop_();
18 1 SDA=1;
19 1 _nop_();
20 1 SDA=0;
21 1 _nop_();
22 1 SCL=0;
23 1 _nop_();
24 1 }
25 /*-----------------------------------------------
26 调用方式:void stop_bit(void)
27 函数说明:停止位
28 -----------------------------------------------*/
29 void stop_bit(void)
30 {
31 1 SDA=0;
32 1 _nop_();
33 1 SCL=1;
34 1 _nop_();
35 1 SDA=1;
36 1 _nop_();
37 1 }
38
39 /*-----------------------------------------------
40 调用方式:void ack(void)
41 函数说明:应答函数
42 -----------------------------------------------*/
43 void ack(void)
44 {
45 1 SDA=1;
46 1 SCL=0;
47 1 _nop_();
48 1 SCL=1;
49 1 _nop_();
50 1 //while(SDA){;} //This may make the CPU crash. 04-3-18 17:16
51 1 SCL=0;
52 1 _nop_();
53 1 }
54 /*-----------------------------------------------
55 调用方式:void no_ack(void)
C51 COMPILER V7.50 24C256 05/27/2007 09:12:26 PAGE 2
56 函数说明:无需应答位,在读程序中用到
57 -----------------------------------------------*/
58 void no_ack(void)
59 {
60 1 SDA=1;
61 1 _nop_();
62 1 SCL=1;
63 1 _nop_();
64 1 //while(SDA){;} //This may make the CPU crash. 04-3-18 17:16
65 1 SCL=0;
66 1 _nop_();
67 1 }
68 /*-----------------------------------------------
69 调用方式:void write_8bit(uchar ch)
70 函数说明:写一个字节(8位)数据
71 -----------------------------------------------*/
72 void write_8bit(uchar ch)
73 {
74 1 uchar i=8;
75 1
76 1 SCL=0;
77 1 _nop_();
78 1 while(i--)
79 1 {
80 2 SDA=(bit)(ch&0x80);
81 2 _nop_();
82 2 ch<<=1;
83 2 SCL=1;
84 2 _nop_();
85 2 SCL=0;
86 2 _nop_();
87 2 }
88 1 }
89
90 /*----------------------------------------------
91 调用方式:uchar read24c16(uint address)
92 函数说明:读24c16指定地址数据(字节读)
93 -----------------------------------------------*/
94 uchar ReadFm24c256(uint address)
95 {
96 1 uchar data rdata;
97 1 uchar i=8;
98 1 //EA=0;//避免与串口通讯等中断冲突
99 1 start_bit();
100 1 write_8bit(0xA0);
101 1 ack();
102 1 write_8bit(address/256);
103 1 ack();//伪写
104 1 write_8bit(address%256);
105 1 ack();
106 1 start_bit();
107 1 write_8bit(0xA1);
108 1 ack();
109 1 while(i--)
110 1 {
111 2 rdata<<=1;
112 2 SCL=0;
113 2 _nop_();
114 2 SCL=1;
115 2 if(SDA) rdata|=0x01;
116 2 }
117 1 no_ack();
C51 COMPILER V7.50 24C256 05/27/2007 09:12:26 PAGE 3
118 1 stop_bit();
119 1 //EA=1;
120 1 return rdata;
121 1 }
122
123 /*-----------------------------------------------
124 调用方式:void write24c16(uint address,uchar ddata)
125 函数说明:写数据到24c16的指定地址(字节写)
126 -----------------------------------------------*/
127 void WriteFm24c256(uint address,uchar ddata)
128 {
129 1 //EA=0; //避免与串口通讯等中断冲突
130 1 start_bit();
131 1 write_8bit(0xA0);
132 1 ack();
133 1 write_8bit(address/256);
134 1 ack();
135 1 write_8bit(address%256);
136 1 ack();
137 1 write_8bit(ddata);
138 1 ack();
139 1 stop_bit();
140 1 //EA=1;
141 1 }
142
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 165 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
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 + -