📄 fm24c256.lst
字号:
C51 COMPILER V8.02 FM24C256 01/09/2009 16:21:04 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE FM24C256
OBJECT MODULE PLACED IN FM24C256.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE program\FM24C256.c LARGE BROWSE DEBUG OBJECTEXTEND PRINT(.\FM24C256.lst) OB
-JECT(FM24C256.obj)
line level source
1 #include "C8051F020.h"
2
3 #define FM24C256ClkDelay 10
4 #define FM24C256SCL P1_6
5 #define FM24C256SDA P1_7
6
7 //---------------------------------------------------------------------------------
8 //IIC总线的开始状态
9 void FM24C256I2CStart(void)
10 {
11 1 unsigned char wait;
12 1 for(wait=0;wait<FM24C256ClkDelay;wait++);
13 1 FM24C256SDA = 1;
14 1 FM24C256SCL = 1;
15 1 for(wait=0;wait<FM24C256ClkDelay;wait++);
16 1 FM24C256SDA = 0;
17 1 for(wait=0;wait<FM24C256ClkDelay;wait++);
18 1 FM24C256SCL = 0;
19 1 for(wait=0;wait<FM24C256ClkDelay;wait++);
20 1 }
21 //----------------------------------------------------------------------------------
22 //IIC总线的停止状态
23 void FM24C256I2CStop(void)
24 {
25 1 unsigned char wait;
26 1 FM24C256SCL = 0;
27 1 FM24C256SDA = 0;
28 1 for(wait=0;wait<FM24C256ClkDelay;wait++);
29 1 FM24C256SCL = 1;
30 1 for(wait=0;wait<FM24C256ClkDelay;wait++);
31 1 FM24C256SDA = 1;
32 1 }
33 //----------------------------------------------------------------------------------
34 //向从器件写出一个字节 ch,同时判断ack返回
35 //返回:ack的状态
36 unsigned char FM24C256I2CByteWr(unsigned char ch)
37 {
38 1 unsigned char i,wait;
39 1 for (i=0; i<8; i++)
40 1 {
41 2 if(ch&0x80) FM24C256SDA=1; else FM24C256SDA=0;
42 2 ch<<=1;
43 2 for(wait=0;wait<FM24C256ClkDelay;wait++);
44 2 FM24C256SCL = 1;
45 2 for(wait=0;wait<FM24C256ClkDelay;wait++);
46 2 FM24C256SCL = 0;
47 2 for(wait=0;wait<FM24C256ClkDelay;wait++);
48 2 }
49 1 FM24C256SDA=1;
50 1 for(wait=0;wait<FM24C256ClkDelay;wait++);
51 1 FM24C256SCL = 1;
52 1 if(FM24C256SDA)i=1;else i=0;
53 1 for(wait=0;wait<FM24C256ClkDelay;wait++);
54 1 FM24C256SCL = 0;
C51 COMPILER V8.02 FM24C256 01/09/2009 16:21:04 PAGE 2
55 1 return i;
56 1 }
57 //-----------------------------------------------------------------------------------
58 //从从器件读入一个字节
59 //reack:是反给从器件的应答信号
60 //返回:读入的字节
61 unsigned char FM24C256I2CByteRd(unsigned char reack)
62 {
63 1 unsigned char i,val,wait;
64 1 FM24C256SDA = 1;
65 1 for (i=0; i<8; i++)
66 1 {
67 2 for(wait=0;wait<FM24C256ClkDelay;wait++);
68 2 FM24C256SCL = 1;
69 2 val<<=1;
70 2 if(FM24C256SDA) val|=1;
71 2 for(wait=0;wait<FM24C256ClkDelay;wait++);
72 2 FM24C256SCL = 0;
73 2 }
74 1 for(wait=0;wait<FM24C256ClkDelay;wait++);
75 1 if (reack)FM24C256SDA = 1;else FM24C256SDA = 0;
76 1 for(wait=0;wait<FM24C256ClkDelay;wait++);
77 1 FM24C256SCL = 1;
78 1 for(wait=0;wait<FM24C256ClkDelay;wait++);
79 1 FM24C256SCL = 0;
80 1
81 1 return val;
82 1 }
83 //====================================================================================
84 void FM24C256Write(unsigned int romadr,unsigned char *buf,unsigned int len)
85 {
86 1 if(len==0)return;
87 1 FM24C256I2CStart();
88 1 FM24C256I2CByteWr(0xa0);
89 1 FM24C256I2CByteWr((romadr/0x100));
90 1 FM24C256I2CByteWr((romadr%0x100));
91 1 while(len--)
92 1 {
93 2 FM24C256I2CByteWr(*buf++);
94 2 }
95 1 FM24C256I2CStop();
96 1 }
97 //-----------------------------------------------------------------------------------
98 void FM24C256Read(unsigned int romadr,unsigned char *buf,unsigned int len)
99 {
100 1 if(len==0)return;
101 1 FM24C256I2CStart();
102 1 FM24C256I2CByteWr(0xa0);
103 1 FM24C256I2CByteWr((romadr/0x100));
104 1 FM24C256I2CByteWr((romadr%0x100));
105 1 FM24C256I2CStart();
106 1 FM24C256I2CByteWr(0xa1);
107 1 while(len--)
108 1 {
109 2 if(len!=0)*buf++ = FM24C256I2CByteRd(0);
110 2 else *buf = FM24C256I2CByteRd(1);//读取最后一个字节后ACK的值必须是1
111 2 }
112 1 FM24C256I2CStop();
113 1 }
114 //-----------------------------------------------------------------------------------
115
C51 COMPILER V8.02 FM24C256 01/09/2009 16:21:04 PAGE 3
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 428 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- 14
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 + -