📄 spi.lst
字号:
C51 COMPILER V8.09 SPI 05/19/2011 23:29:40 PAGE 1
C51 COMPILER V8.09, COMPILATION OF MODULE SPI
OBJECT MODULE PLACED IN spi.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE spi.c LARGE BROWSE DEBUG OBJECTEXTEND
line level source
1 #include "spi.h"
2 #include "mytype.h"
3 #include "Delay.h"
4
5 /*******************************************************
6
7 +----------------------------------------+
8 | 振南电子 驱动程序模块 软件模拟SPI 部分 |
9 +----------------------------------------+
10
11 此源码版权属 振南 全权享有,如欲引用,敬请署名并告知
12 严禁随意用于商业目的,违者必究,后果自负
13 振南电子
14 ->产品网站 http://www.znmcu.cn/
15 ->产品网店 http://shop.znmcu.cn/
16 ->产品咨询 QQ:987582714
17 MSN:yzn07@126.com
18 WW:yzn07
19
20 ********************************************************/
21
22 unsigned char bdata dat; //dat是可位寻址的变量
23
24 sbit dat7=dat^7;
25 sbit dat6=dat^6;
26 sbit dat5=dat^5;
27 sbit dat4=dat^4;
28 sbit dat3=dat^3;
29 sbit dat2=dat^2;
30 sbit dat1=dat^1;
31 sbit dat0=dat^0; //取出dat的各个位
32
33 /******************************************************************
34 - 功能描述:IO模拟SPI,发送一个字节
35 - 隶属模块:SPI模块
36 - 函数属性:外部,供用户调用
37 - 参数说明:x:要发送的字节
38 - 返回说明:无返回
39 - 注:很多情况下,SPI是需要有较高的速度的,此函数中不使用任何循环
40 结构,如for(;;) while等等,并且使用了位寻址就是为了提高速度
41 ******************************************************************/
42
43 void SPI_WriteByte(unsigned char x)
44 {
45 1 /*----这种使用循环与位运算的实现方式,速度要比直接用位寻址与顺序执行方式实现慢得多
46 1 ----因为它把大部分的时间花在了循环因子的递增、比较与位运行上了
47 1 unsigned char i=0;
48 1 for(i=0;i<8;i++)
49 1 {
50 1 SPI_SI=x&(0x80>>i);
51 1 SPI_SCL=0;
52 1 SPI_SCL=1;
53 1 }
54 1 ----------------------------------*/
55 1
C51 COMPILER V8.09 SPI 05/19/2011 23:29:40 PAGE 2
56 1 dat=x; //将x的值赋给可位寻址的变量dat,以便取出各个位
57 1
58 1 SPI_SI=dat7; //取出第7个位,写到数据线上
59 1 SPI_SCL=0;
60 1 SPI_SCL=1; //时钟线产生上升沿,数据被写入
61 1
62 1 SPI_SI=dat6;
63 1 SPI_SCL=0;
64 1 SPI_SCL=1;
65 1
66 1 SPI_SI=dat5;
67 1 SPI_SCL=0;
68 1 SPI_SCL=1;
69 1
70 1 SPI_SI=dat4;
71 1 SPI_SCL=0;
72 1 SPI_SCL=1;
73 1
74 1 SPI_SI=dat3;
75 1 SPI_SCL=0;
76 1 SPI_SCL=1;
77 1
78 1 SPI_SI=dat2;
79 1 SPI_SCL=0;
80 1 SPI_SCL=1;
81 1
82 1 SPI_SI=dat1;
83 1 SPI_SCL=0;
84 1 SPI_SCL=1;
85 1
86 1 SPI_SI=dat0;
87 1 SPI_SCL=0;
88 1 SPI_SCL=1;
89 1 }
90
91 /******************************************************************
92 - 功能描述:IO模拟SPI,读取一个字节
93 - 隶属模块:SPI模块
94 - 函数属性:外部,供用户调用
95 - 参数说明:无
96 - 返回说明:读到的字节
97 - 注:很多情况下,SPI是需要有较高的速度的,此函数中不使用任何循环
98 结构,如for(;;) while等等,并且使用了位寻址就是为了提高速度
99 ******************************************************************/
100
101 unsigned char SPI_ReadByte()
102 {
103 1 SPI_SO=1;
104 1
105 1 SPI_SCL=1;
106 1 delay(1);
107 1 SPI_SCL=0;
108 1 delay(1);
109 1 dat7=SPI_SO;
110 1
111 1 SPI_SCL=1;
112 1 delay(1);
113 1 SPI_SCL=0;
114 1 delay(1);
115 1 dat6=SPI_SO;
116 1
117 1 SPI_SCL=1;
C51 COMPILER V8.09 SPI 05/19/2011 23:29:40 PAGE 3
118 1 delay(1);
119 1 SPI_SCL=0;
120 1 delay(1);
121 1 dat5=SPI_SO;
122 1
123 1 SPI_SCL=1;
124 1 delay(1);
125 1 SPI_SCL=0;
126 1 delay(1);
127 1 dat4=SPI_SO;
128 1
129 1 SPI_SCL=1;
130 1 delay(1);
131 1 SPI_SCL=0;
132 1 delay(1);
133 1 dat3=SPI_SO;
134 1
135 1 SPI_SCL=1;
136 1 delay(1);
137 1 SPI_SCL=0;
138 1 delay(1);
139 1 dat2=SPI_SO;
140 1
141 1 SPI_SCL=1;
142 1 delay(1);
143 1 SPI_SCL=0;
144 1 delay(1);
145 1 dat1=SPI_SO;
146 1
147 1 SPI_SCL=1;
148 1 delay(1);
149 1 SPI_SCL=0;
150 1 delay(1);
151 1 dat0=SPI_SO;
152 1
153 1 return dat;
154 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 248 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 1 ----
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 + -