?? sp3767.lst
字號:
C51 COMPILER V7.06 SP3767 06/15/2007 16:08:30 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE SP3767
OBJECT MODULE PLACED IN SP3767.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE SP3767.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include <reg52.h>
2 #include <stdio.h>
3 #include <intrins.h>
4
5 #include "SP3767.h"
6
7 #define NOP() _nop_()
8
9
10 sbit UpKey = P1 ^ 0;
11 sbit DnKey = P1 ^ 1;
12 sbit LED = P1 ^ 2;
13 sbit SDA = P1 ^ 4;
14 sbit SCL = P1 ^ 5;
15
16
17
18
19
20 #define HAND 1
21 //#define HAND
22 #define NUM 20
23 unsigned short code FRQ_TAB[] =
24 {
25 880,
26 920,
27 960,
28 1000,
29 1040,
30 876,
31 885,
32 897,
33 926,
34 937,
35 966,
36 975,
37 997,
38 1011,
39 1017,
40 1024,
41 1043,
42 1058,
43 1066,
44 1071,
45 1079,
46 };
47 unsigned char index;
48
49 void DelayMs(unsigned char i)
50 {
51 1 unsigned char j;
52 1 j = 200;
53 1 do{
54 2 do{
55 3 _nop_();
C51 COMPILER V7.06 SP3767 06/15/2007 16:08:30 PAGE 2
56 3 _nop_();
57 3 _nop_();
58 3 _nop_();
59 3 _nop_();
60 3 _nop_();
61 3 _nop_();
62 3 _nop_();
63 3 _nop_();
64 3 _nop_();
65 3 }while(j --);
66 2 }while(i --);
67 1 }
68
69 void I2CStart(void)
70 {/*
71 1 SDA = 1;
72 1 SCL = 1;
73 1 NOP();
74 1 SDA = 0;
75 1 NOP();
76 1 SCL = 0;*/
77 1
78 1 SCL = 1;
79 1 SDA = 1;
80 1 SDA = 0;
81 1 NOP();
82 1 NOP();
83 1 NOP();
84 1 SCL = 0;
85 1 }
86
87 void I2CStop(void)
88 {/*
89 1 SCL = 0;
90 1 SDA = 0;
91 1 NOP();
92 1 SCL = 1;
93 1 NOP();
94 1 SDA = 1;
95 1 EA = 1;*/
96 1
97 1 SCL = 1;
98 1 SDA = 0;
99 1 NOP();
100 1 NOP();
101 1 NOP();
102 1 SDA = 1;
103 1 NOP();
104 1 NOP();
105 1 NOP();
106 1 }
107
108 bit WaitAck(void)
109 {
110 1 unsigned char retry = 255; //因故障接收方無ACK,重試255次
111 1 SDA = 1;
112 1 NOP();
113 1 SCL = 1;
114 1 NOP();
115 1 // m24C01Error = 0x00;
116 1 while(SDA)
117 1 {
C51 COMPILER V7.06 SP3767 06/15/2007 16:08:30 PAGE 3
118 2 retry --;
119 2 if(!retry)
120 2 {
121 3 I2CStop();
122 3 // m24C01Error = ERROR; // 24C01出錯
123 3 return 0;
124 3 }
125 2 }
126 1 SCL = 0;
127 1 return 1;
128 1 }
129
130 void SendAck(void)
131 {
132 1 SDA = 0;
133 1 NOP();
134 1 SCL = 1;
135 1 NOP();
136 1 SCL = 0;
137 1 }
138
139 void SendNotAck(void)
140 {
141 1 SDA = 1;
142 1 NOP();
143 1 SCL = 1;
144 1 NOP();
145 1 SCL = 0;
146 1 }
147
148 void I2CSendByte(unsigned char ch)
149 {
150 1 unsigned char i = 8;
151 1 while(i--)
152 1 {
153 2 SCL = 0;
154 2 NOP();
155 2 SDA = (bit)(ch & 0x80);
156 2 SCL = 1;
157 2 ch <<= 1;
158 2 NOP();
159 2 }
160 1 SCL = 0;
161 1 }
162 unsigned char I2CRecvByte(void)
163 {
164 1 unsigned char i = 8;
165 1 unsigned char dat = 0;
166 1 SDA = 1;
167 1 while(i--)
168 1 {
169 2 dat <<= 1;
170 2 SCL = 0;
171 2 NOP();
172 2 SCL = 1;
173 2 NOP();
174 2 NOP();
175 2 NOP();
176 2 dat |= SDA;
177 2 }
178 1 SCL = 0;
179 1 return(dat);
C51 COMPILER V7.06 SP3767 06/15/2007 16:08:30 PAGE 4
180 1 }
181
182 BYTE SP3767Read(void)
183 {
184 1 unsigned char i;
185 1
186 1 I2CStart(); // 啟動總線
187 1 I2CSendByte(0xc1); // 發送設備寫地址
188 1
189 1 if(WaitAck()) // 等待應答
190 1 {
191 2 for(i = 0; i < 5; i ++)
192 2 {
193 3 bFmReadData[i] = I2CRecvByte();
194 3 SendAck(); // 發送應答
195 3 }
196 2 SendNotAck(); // 發送NoAck
197 2 I2CStop(); // 停止總線
198 2 return 1;
199 2 }
200 1 else return 0;
201 1
202 1 }
203
204 BYTE SP3767Write(void)
205 {
206 1 unsigned char i;
207 1
208 1 I2CStart(); // 啟動總線
209 1 I2CSendByte(0xc0); // 發送設備地址
210 1
211 1 if(WaitAck()) // 等待應答
212 1 {
213 2 for(i = 0; i < 5; i ++)
214 2 {
215 3 I2CSendByte(bFmWriteData[i]);
216 3 if(!WaitAck())
217 3 {
218 4 I2CStop();
219 4 printf("write 3767 err0\n");
220 4 return 0;
221 4 }
222 3 }
223 2 I2CStop(); // 停止總線
224 2 return 1;
225 2 }
226 1 else
227 1 {
228 2 I2CStop(); // 停止總線
229 2 printf("write 3767 err1\n");
230 2 return 0;
231 2 }
232 1 }
233
234 WORD CalculatePLL(void)
235 {
236 1 if(fHILOInjection)
237 1 return (WORD)((((DWORD)wFmFreq * 100000) + 225000) >> 13);//HILO injection=1
238 1 else
239 1 return (WORD)((((DWORD)wFmFreq * 100000) - 225000) >> 13);//HILO injection=0
240 1 }
241
C51 COMPILER V7.06 SP3767 06/15/2007 16:08:30 PAGE 5
242 WORD ConvertPLL(WORD wPll)
243 {
244 1 if(fHILOInjection)
245 1 return (((((DWORD)wPll << 13) - 225000) / 100000) + 1); // HILo injection=1;
246 1 else
247 1 return (((((DWORD)wPll << 13) + 225000) / 100000) + 1);// HILo injection=0;
248 1 }
249
250 bit FmInit(void)
251 {
252 1 unsigned char TP_BYTE_0;
253 1
254 1 for(TP_BYTE_0 = 0; TP_BYTE_0 < 5; TP_BYTE_0 ++)
255 1 {
256 2 bFmReadData[TP_BYTE_0] = 0;
257 2 bFmWriteData[TP_BYTE_0] = 0;
258 2 }
259 1
260 1 fHILOInjection = FM_HI_INJEC;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -