📄 spi.lst
字号:
C51 COMPILER V7.06 SPI 04/29/2009 14:40:58 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE SPI
OBJECT MODULE PLACED IN SPI.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE SPI.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 ////////////////////////////////////////////////////////////////////////////
2 ////////////////////////////////////////////////////////////////////////////
3 ///////////////////////////////////////////////////////////////////////////
4 #include "c8051.h"
5 extern bit RESET_bz;
6 extern uchar SPI_CM; //用于存放SPI读或写的命令字
7 extern uchar SPI_Data[3]; //用于存放SPI读或写的数据
8
9 void SPIRead()
10 {
11 1 uchar i,k;
12 1 SPI_CS=1;
13 1 _nop_();
14 1 SPI_CK=0;
15 1 _nop_();
16 1 _nop_();
17 1 _nop_();
18 1 SPI_CS=0;
19 1 for(i=0;i<8;i++)
20 1 {
21 2 SPI_CK=1;
22 2 if(SPI_CM&0x80)
23 2 SPI_DI=1;
24 2 else
25 2 SPI_DI=0;
26 2 _nop_();
27 2 _nop_();
28 2 _nop_();
29 2 _nop_();
30 2 _nop_();
31 2 _nop_();
32 2 SPI_CK=0;
33 2 SPI_CM=SPI_CM<<1;
34 2 }
35 1 SPI_DI=0;
36 1 _nop_();
37 1 _nop_();
38 1 _nop_();
39 1 _nop_();
40 1 _nop_();
41 1 _nop_();
42 1 for(k=0;k<3;k++)
43 1 {SPI_Data[k]=0;
44 2 for(i=0;i<8;i++)
45 2 {SPI_Data[k]=SPI_Data[k]<<1;
46 3 SPI_CK=1;
47 3 _nop_();
48 3 _nop_();
49 3 _nop_();
50 3 _nop_();
51 3 _nop_();
52 3 _nop_();
53 3 if(SPI_DO)
54 3 SPI_Data[k]=SPI_Data[k]|0x01;
55 3 SPI_CK=0;
C51 COMPILER V7.06 SPI 04/29/2009 14:40:58 PAGE 2
56 3 }
57 2 }
58 1 SPI_CS=1;
59 1 }
60 //SPI写函数
61 void SPIWrite()
62 {
63 1 uchar i,k;
64 1 SPI_CS=1;
65 1 _nop_();
66 1 _nop_();
67 1 _nop_();
68 1 _nop_();
69 1 _nop_();
70 1 _nop_();
71 1 _nop_();
72 1 _nop_();
73 1 SPI_CK=0;
74 1 _nop_();
75 1 _nop_();
76 1 _nop_();
77 1 _nop_();
78 1 _nop_();
79 1 _nop_();
80 1 SPI_CS=0;
81 1 SPI_CM=SPI_CM&0x80;
82 1 for(i=0;i<8;i++)
83 1 {
84 2 SPI_CK=1;
85 2 if(SPI_CM&0x80)
86 2 SPI_DI=1;
87 2 else
88 2 SPI_DI=0;
89 2 _nop_();
90 2 _nop_();
91 2 _nop_();
92 2 _nop_();
93 2 _nop_();
94 2 _nop_();
95 2 _nop_();
96 2 _nop_();
97 2 SPI_CK=0;
98 2 SPI_CM=SPI_CM<<1;
99 2 }
100 1 SPI_DI=0;
101 1 for(k=0;k<3;k++)
102 1 {
103 2 for(i=0;i<8;i++)
104 2 {
105 3 SPI_CK=1;
106 3 _nop_();
107 3 _nop_();
108 3 _nop_();
109 3 _nop_();
110 3 _nop_();
111 3 _nop_();
112 3
113 3 if(SPI_Data[k]&0x80)
114 3 SPI_DI=1;
115 3 else
116 3 SPI_DI=0;
117 3 _nop_();
C51 COMPILER V7.06 SPI 04/29/2009 14:40:58 PAGE 3
118 3 _nop_();
119 3 _nop_();
120 3 _nop_();
121 3 _nop_();
122 3 _nop_();
123 3 SPI_CK=0;
124 3 SPI_Data[k]=SPI_Data[k]<<1;
125 3 }
126 2
127 2 }
128 1 SPI_DI=0;
129 1 SPI_CS=1;
130 1 }
131
132 ///////////////////////////////////////////////////////////////////////////
133 void SPImtWrite()
134 {
135 1 SPI_Data[0]=0x00;
136 1 SPI_Data[1]=0x00;
137 1 SPI_Data[2]=0x00;
138 1 SPI_CM=0xc9;
139 1 SPIWrite( ); //允许校表寄存器修改
140 1
141 1 SPI_Data[0]=0x00;
142 1 SPI_Data[1]=0x00;
143 1 SPI_Data[2]=0x00;
144 1 SPI_CM=0x80;
145 1 SPIWrite( ); //写起始校表命令字,任意三个字节写到校表寄存器00H里
146 1
147 1 SPI_Data[0]=0x00;
148 1 SPI_Data[1]=0x00;
149 1 SPI_Data[2]=0x01;
150 1 SPI_CM=0xaa;
151 1 SPIWrite( ); //三相三线合相能量累加模式,=1为绝对值相加 =0代数相加
152 1
153 1 SPI_Data[0]=0x00;
154 1 SPI_Data[1]=0x00;
155 1 SPI_Data[2]=0x4f;
156 1 SPI_CM=0x0a; //三个字节数据根据公式计算出来 脉冲常数为200,电压380v,电
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -