📄 spi.lst
字号:
C51 COMPILER V7.06 SPI 06/19/2007 18:00:25 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE SPI
OBJECT MODULE PLACED IN spi.obj
COMPILER INVOKED BY: d:\Program Files\Keil\C51\BIN\C51.EXE code\spi.c BROWSE DEBUG OBJECTEXTEND PRINT(.\spi.lst) OBJECT(
-spi.obj)
stmt level source
1 #include "stc51reg.h"
2 #include <intrins.h>
3 //************************************************************
4 void config()
5 {
6 1 WDT_CONTR = 0x00; // Watchdog Timer Control Register
7 1
8 1 }
9 //初始化单片机,
10 //***********************************************************
11
12 //***********************************************************
13 unsigned char send(unsigned char _data1,unsigned char _data2)
14 { unsigned char i;
15 1 clk=0;
16 1 ness=0;
17 1 i=0;
18 1
19 1
20 1 if(_data1&0x80)
21 1 mosi=1;
22 1 else mosi=0;
23 1
24 1 clk=1;
25 1
26 1 // if(miso==1)
27 1 // i[0]=i[0]+0x80;
28 1 clk=0;
29 1
30 1
31 1 if(_data1&0x40)
32 1 {
33 2 mosi=1;
34 2 }
35 1 else mosi=0;
36 1
37 1 clk=1;
38 1
39 1
40 1
41 1 // if(miso==1)
42 1 // i[0]=i[0]+0x40;
43 1 clk=0;
44 1
45 1 if(_data1&0x20)
46 1 {
47 2 mosi=1;
48 2 }
49 1 else mosi=0;
50 1
51 1 clk=1;
52 1
53 1
54 1
C51 COMPILER V7.06 SPI 06/19/2007 18:00:25 PAGE 2
55 1 // if(miso==1)
56 1 // i[0]=i[0]+0x20;
57 1 clk=0;
58 1
59 1 if(_data1&0x10)
60 1 {
61 2 mosi=1;
62 2 }
63 1 else mosi=0;
64 1
65 1 clk=1;
66 1
67 1
68 1
69 1 // if(miso==1)
70 1 // i[0]=i[0]+0x10;
71 1 clk=0;
72 1
73 1 if(_data1&0x08)
74 1 {
75 2 mosi=1;
76 2 }
77 1 else mosi=0;
78 1
79 1 clk=1;
80 1
81 1
82 1
83 1 // if(miso==1)
84 1 // i[0]=i[0]+0x08;
85 1 clk=0;
86 1
87 1 if(_data1 & 0x04)
88 1 {
89 2 mosi=1;
90 2 }
91 1 else mosi=0;
92 1
93 1 clk=1;
94 1
95 1
96 1
97 1 // if(miso==1)
98 1 // i[0]=i[0]+0x04;
99 1 clk=0;
100 1
101 1 if(_data1&0x02)
102 1 {
103 2 mosi=1;
104 2 }
105 1 else mosi=0;
106 1
107 1 clk=1;
108 1
109 1
110 1 // if(miso==1)
111 1 // i[0]=i[0]+0x02;
112 1 clk=0;
113 1
114 1 if(_data1&0x01)
115 1 {
116 2 mosi=1;
C51 COMPILER V7.06 SPI 06/19/2007 18:00:25 PAGE 3
117 2 }
118 1 else mosi=0;
119 1
120 1 clk=1;
121 1
122 1
123 1 // if(miso==1)
124 1 // i[0]=i[0]+0x01;
125 1 clk=0;
126 1
127 1
128 1 if(_data2&0x80)
129 1 {
130 2 mosi=1;
131 2 }
132 1
133 1 else mosi=0;
134 1
135 1 clk=1;
136 1
137 1
138 1 if(miso)
139 1 i=i+128;
140 1 clk=0;
141 1
142 1 if(_data2&0x40)
143 1 {
144 2 mosi=1;
145 2 }
146 1 else mosi=0;
147 1
148 1
149 1 clk=1;
150 1
151 1 if(miso)
152 1 i=i+64;
153 1 clk=0;
154 1
155 1
156 1 if(_data2&0x20)
157 1 mosi=1;
158 1 else mosi=0;
159 1
160 1 clk=1;
161 1
162 1 if(miso)
163 1 i=i+32;
164 1
165 1 clk=0;
166 1
167 1
168 1 if(_data2&0x10)
169 1 mosi=1;
170 1 else mosi=0;
171 1
172 1
173 1 clk=1;
174 1
175 1 if(miso)
176 1 i=i+16;
177 1 clk=0;
178 1
C51 COMPILER V7.06 SPI 06/19/2007 18:00:25 PAGE 4
179 1
180 1 if(_data2&0x08)
181 1 mosi=1;
182 1 else mosi=0;
183 1
184 1
185 1 clk=1;
186 1
187 1 if(miso)
188 1 i=i+8;
189 1 clk=0;
190 1
191 1 if(_data2&0x04)
192 1 mosi=1;
193 1 else mosi=0;
194 1
195 1
196 1 clk=1;
197 1
198 1 if(miso)
199 1 i=i+4;
200 1 clk=0;
201 1
202 1 if(_data2&0x02)
203 1 mosi=1;
204 1 else mosi=0;
205 1
206 1
207 1 clk=1;
208 1
209 1 if(miso)
210 1 i=i+2;
211 1 clk=0;
212 1
213 1 if(_data2&0x01)
214 1 mosi=1;
215 1 else mosi=0;
216 1
217 1 clk=1;
218 1
219 1 if(miso)
220 1 i=i+1;
221 1 clk=0;
222 1 mosi=0;
223 1 ness=1;
224 1
225 1 return i;
226 1 }
227 //模拟SPI时序,data1,data2是写入的两个数据,这里仅返回第二个数据
228 //*************************************************************************
229
230 //*************************************************************************
231 void write_reg(unsigned char port,unsigned char reg,unsigned char dat)
232 {
233 1 send(0x60+port*32+reg*2,dat);
234 1 }
235 //写寄存器,port为子串口的路数,reg为寄存器的地址,dat为写入寄存器的数据
236 //*************************************************************************
237
238 //*************************************************************************
239 unsigned char read_reg(unsigned char port,unsigned char reg)
240 {
C51 COMPILER V7.06 SPI 06/19/2007 18:00:25 PAGE 5
241 1 return send(((port-1)<<5)+(reg<<1),0x00);
242 1 }
243 //读寄存器,琾ort为子串口的路数,reg为寄存器的地址,返回寄存器的值
244 //***************************************************************************
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 330 ----
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 + -