📄 spi.lst
字号:
C51 COMPILER V7.50 SPI 12/12/2006 10:05:03 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE SPI
OBJECT MODULE PLACED IN spi.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE spi.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <spi.h>
2
3 uchar jindu = 1;
4
5 /*延迟程序12M 大约5uS*/
6 void delay5us()
7 {
8 1 uint i;
9 1 for (i=0;i<5;i++)
10 1 _nop_();
11 1 }
12
13 //从SI发数据
14 void SPISendByte(uchar ch)
15 {
16 1 uchar idata n=8;
17 1 SCLK=0;
18 1 CSn=0;
19 1 delay5us();
20 1 while(n--)
21 1 {
22 2 delay5us();
23 2 SCLK=0;
24 2 if((ch&0x80)==0x80)
25 2 {
26 3 SI=1;
27 3 }
28 2 else
29 2 {
30 3 SI=0;
31 3 }
32 2 delay5us();
33 2 ch=ch<<1;
34 2 SCLK=1;
35 2 }
36 1 delay5us();
37 1 SCLK=0;
38 1 }
39
40 //SO上接收数据
41 uchar SPIreceiveByte()
42 {
43 1 uchar idata n=8;
44 1 uchar tdata;
45 1 SCLK=0;
46 1 CSn=0;
47 1 while (n--)
48 1 {
49 2 delay5us();
50 2 SCLK=0;
51 2 delay5us();
52 2 tdata=tdata<<1;
53 2 if(SO==1)
54 2 tdata=tdata|0x01;
55 2 else
C51 COMPILER V7.50 SPI 12/12/2006 10:05:03 PAGE 2
56 2 tdata=tdata&0xfe;
57 2 SCLK=1;
58 2 }
59 1 delay5us();
60 1 SCLK=0;
61 1 return(tdata);
62 1 }
63
64 uchar spisend_receivebyte(uchar ch) //发送数据 ,返回状态
65 {
66 1 uchar idata n = 8;
67 1 uchar tdata;
68 1 SCLK = 0;
69 1 CSn = 0;
70 1 delay5us();
71 1 while (n--)
72 1 {
73 2 delay5us();
74 2 SCLK = 0;
75 2 delay5us();
76 2
77 2 tdata = tdata << 1;
78 2 if (SO == 1)
79 2 {
80 3 tdata = tdata | 0x01;
81 3 }
82 2 else
83 2 {
84 3 tdata = tdata & 0xfe;
85 3 }
86 2
87 2 if((ch & 0x80) == 0x80)
88 2 {
89 3 SI = 1;
90 3 }
91 2 else
92 2 {
93 3 SI = 0;
94 3 }
95 2 ch = ch << 1;
96 2 SCLK = 1;
97 2 }
98 1 delay5us();
99 1 SCLK = 0;
100 1 return(tdata);
101 1 }
102
103 /*void autoreset(void) //上电自动复位
104 {
105 SCLK=1;
106 SI=0;
107 CSn = 1;
108 CSn = 0;
109 while (SO)
110 {
111 }
112 delay5us();
113 delay5us();
114 CSn = 1;
115 SCLK = 0;
116 SI=1;
117 }*/
C51 COMPILER V7.50 SPI 12/12/2006 10:05:03 PAGE 3
118
119 void power_on(void)
120 {
121 1 int i;
122 1 CSn = 1;
123 1 SCLK = 1;
124 1 SI = 0;
125 1 CSn = 0;
126 1 delay5us();
127 1 CSn = 1;
128 1 for (i = 0; i <100; i++) //持续>40us
129 1 {
130 2 delay5us();
131 2 }
132 1 CSn = 0;
133 1 while (SO) //将CSn拉低,等待SO变低(CHIP_RDYn)
134 1 {}
135 1 SPISendByte(0x30);
136 1 while (SO) //当SO再次为低时,时钟与电压都稳定了
137 1 {}
138 1 CSn=1;
139 1 SCLK=0;
140 1 SI=1;
141 1 SO=1;
142 1 }
143
144 void LEDSHOW(uchar ch)
145 {
146 1 uchar i=100;uint j;
147 1 while (i--)
148 1 {
149 2 P1 = 0xef;
150 2 switch(ch&0x0f)
151 2 {
152 3 case 0x00: P0 = 0xc0; break;
153 3 case 0x01: P0 = 0xf9; break;
154 3 case 0x02: P0 = 0xa4; break;
155 3 case 0x03: P0 = 0xb0; break;
156 3 case 0x04: P0 = 0x99; break;
157 3 case 0x05: P0 = 0x92; break;
158 3 case 0x06: P0 = 0x82; break;
159 3 case 0x07: P0 = 0xf8; break;
160 3 case 0x08: P0 = 0x80; break;
161 3 case 0x09: P0 = 0x90; break;
162 3 case 0x0a: P0 = 0x88; break;
163 3 case 0x0b: P0 = 0x83; break;
164 3 case 0x0c: P0 = 0xc6; break;
165 3 case 0x0d: P0 = 0xa1; break;
166 3 case 0x0e: P0 = 0x86; break;
167 3 case 0x0f: P0 = 0x8e; break;
168 3
169 3 }
170 2 for(j=0;j<100;j++) { delay5us(); delay5us(); }
171 2 P1 = 0xdf;
172 2 switch((ch>>4)&0x0f)
173 2 {
174 3 case 0x00: P0 = 0xc0; break;
175 3 case 0x01: P0 = 0xf9; break;
176 3 case 0x02: P0 = 0xa4; break;
177 3 case 0x03: P0 = 0xb0; break;
178 3 case 0x04: P0 = 0x99; break;
179 3 case 0x05: P0 = 0x92; break;
C51 COMPILER V7.50 SPI 12/12/2006 10:05:03 PAGE 4
180 3 case 0x06: P0 = 0x82; break;
181 3 case 0x07: P0 = 0xf8; break;
182 3 case 0x08: P0 = 0x80; break;
183 3 case 0x09: P0 = 0x90; break;
184 3 case 0x0a: P0 = 0x88; break;
185 3 case 0x0b: P0 = 0x83; break;
186 3 case 0x0c: P0 = 0xc6; break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -