📄 6.1.3.lst
字号:
C51 COMPILER V6.20c 6_1_3 09/02/2001 14:53:02 PAGE 1
C51 COMPILER V6.20c, COMPILATION OF MODULE 6_1_3
OBJECT MODULE PLACED IN 6.1.3.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 6.1.3.c DEBUG OBJECTEXTEND
stmt level source
1 #include <reg51.h>
2 #include <intrins.h>
3 #define uchar unsigned char
4 #define uint unsigned int
5 #define AddWr 0xa0 //器件地址选择及写标志
6 #define AddRd 0xa1 //器件地址选择及读标志
7
8 /*有关全局变量*/
9 sbit Sda= P3^7; //串行数据
10 sbit Scl= P3^6; //串行时钟
11 sbit WP= P3^5; //硬件写保护
12 void mDelay(uchar j)
13 {
14 1 uint i;
15 1 for(;j>0;j--)
16 1 {
17 2 for(i=0;i<125;i--)
18 2 {;}
19 2 }
20 1 }
21
22 /*起始条件*/
23 void Start(void)
24 {
25 1 Sda=1;
26 1 Scl=1;
27 1 _nop_();_nop_();_nop_();_nop_();
28 1 Sda=0;
29 1 _nop_();_nop_();_nop_();_nop_();
30 1 }
31
32 /*停止条件*/
33 void Stop(void)
34 {
35 1 Sda=0;
36 1 Scl=1;
37 1 _nop_();_nop_();_nop_();_nop_();
38 1 Sda=1;
39 1 _nop_();_nop_();_nop_();_nop_();
40 1 }
41
42 /*应答位*/
43 void Ack(void)
44 {
45 1 Sda=0;
46 1 _nop_();_nop_();_nop_();_nop_();
47 1 Scl=1;
48 1 _nop_();_nop_();_nop_();_nop_();
49 1 Scl=0;
50 1 }
51
52 /*反向应答位*/
53 void NoAck(void)
54 {
55 1 Sda=1;
C51 COMPILER V6.20c 6_1_3 09/02/2001 14:53:02 PAGE 2
56 1 _nop_();_nop_();_nop_();_nop_();
57 1 Scl=1;
58 1 _nop_();_nop_();_nop_();_nop_();
59 1 Scl=0;
60 1 }
61
62 /*发送数据子程序,Data为要求发送的数据*/
63 void Send(uchar Data)
64 {
65 1 uchar BitCounter=8; //位数控制
66 1 uchar temp; //中间变量控制
67 1 do
68 1 {
69 2 temp=Data;
70 2 Scl=0;
71 2 _nop_();_nop_();_nop_();_nop_();
72 2 if((temp&0x80)==0x80) //如果最高位是1
73 2 Sda=1;
74 2 else
75 2 Sda=0;
76 2 Scl=1;
77 2 temp=Data<<1; //RLC
78 2 Data=temp;
79 2 BitCounter--;
80 2 }while(BitCounter);
81 1 Scl=0;
82 1 }
83
84 /*读一个字节的数据,并返回该字节值*/
85 uchar Read(void)
86 {
87 1 uchar temp=0;
88 1 uchar temp1=0;
89 1 uchar BitCounter=8;
90 1 Sda=1;
91 1 do{
92 2 Scl=0;
93 2 _nop_();_nop_();_nop_();_nop_();
94 2 Scl=1;
95 2 _nop_();_nop_();_nop_();_nop_();
96 2 if(Sda) //如果Sda=1
97 2 temp=temp|0x01; //temp的最低位置1
98 2 else
99 2 temp=temp&0xfe; //否则temp的最低位清0
100 2 if(BitCounter-1)
101 2 {
102 3 temp1=temp<<1;
103 3 temp=temp1;
104 3 }
105 2 BitCounter--;
106 2 }while(BitCounter);
107 1 return(temp);
108 1 }
109
110 void WrToROM(uchar Data[],uchar Address,uchar Num)
111 {
112 1 uchar i;
113 1 uchar *PData;
114 1 PData=Data;
115 1 for(i=0;i<Num;i++)
116 1 {
117 2 Start(); //发送启动信号
C51 COMPILER V6.20c 6_1_3 09/02/2001 14:53:02 PAGE 3
118 2 Send(0xa0); //发送SLA+W
119 2 Ack();
120 2 Send(Address+i); //发送地址
121 2 Ack();
122 2 Send(*(PData+i));
123 2 Ack();
124 2 Stop();
125 2 mDelay(20);
126 2 }
127 1 }
128
129 void RdFromROM(uchar Data[],uchar Address,uchar Num)
130 {
131 1 uchar i;
132 1 uchar *PData;
133 1 PData=Data;
134 1 for(i=0;i<Num;i++)
135 1 {
136 2 Start();
137 2 Send(0xa0);
138 2 Ack();
139 2 Send(Address+i);
140 2 Ack();
141 2 Start();
142 2 Send(0xa1);
143 2 Ack();
144 2 *(PData+i)=Read();
145 2 Scl=0;
146 2 NoAck();
147 2 Stop();
148 2 }
149 1 }
150
151 void main()
152 {
153 1 uchar Number[4]={1,2,3,4};
154 1 WP= 1;
155 1 WrToROM(Number,4,4); //将初始化后的数值写入EEPROM
156 1 mDelay(20);
157 1 Number[0]=0;
158 1 Number[1]=0;
159 1 Number[2]=0;
160 1 Number[3]=0; //将数组中的值清掉,以验证读出的数是否正确
161 1 RdFromROM(Number,4,4);
162 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 365 ----
CONSTANT SIZE = 4 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 21
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 + -