📄 testboard.lst
字号:
182: }
183: /************************************************************
184: 总线空闲等待函数waitfree()
185: 作用:等待总线空闲
186: 入口:无
187: 出口:无
188: ************************************************************/
189: void waitfree(void)
190: {
191: TMR1ON=0;
192: TMR1IF=0;
193: TMR1L=0x65;
194: TMR1H=0xf0;
195: TMR1ON=1; //运行T1
196: while(!TMR1IF)
197: {
198: if(RA1)
199: {
200: TMR1L=0x65;
201: TMR1H=0xf0;
202: TMR1ON=1; //运行T1
203: }
204: }
205: }
206: /************************************************************
207: 延时函数D7uS()
208: 作用:延时7uS
209: ************************************************************/
210: void D7uS(void)
211: {
212: asm("nop");
213: asm("nop");
214: }
215: /************************************************************
216: 总线空闲等待函数send_cdcdata()
217: 作用:等待总线空闲
218: 入口:无
219: 出口:无
220: ************************************************************/
221: void send_cdcdata(void)
222: {
223: unsigned char buffer[4];
224: unsigned char cnt1,cnt2,temp;
225: if(softpsw&0x02)
226: {
227: buffer[0]=(nowtrackH<<4)|nowtrackL;
228: buffer[1]=(nowminH<<4)|nowminL;
229: buffer[2]=(nowsecH<<4)|nowsecL;
230: buffer[3]=nowdisc;
231: //发送数据
232: cdc_dat=0;
233: cdc_dat_T=0; //发送握手信号
234: while(cdc_clk);
235: GIE=0;
236: while(!cdc_clk);
237: cdc_clk=1;
238: cdc_clk_T=0; //时钟为高
239: for(cnt1=0;cnt1<4;cnt1++)
240: {
241: temp=buffer[cnt1];
242: for(cnt2=8;cnt2>0;cnt2--)
243: {
244: D7uS();D7uS();D7uS();
245: if(temp&0x80)
246: {cdc_dat=1;}
247: else
248: {cdc_dat=0;}
249: cdc_clk=0;
250: D7uS();
251: temp<<=1;
252: cdc_clk=1;
253: }
254: }
255: cdc_dat_T=1;cdc_clk_T=1;softpsw&=0xFD;
256: waitfree();asm("movf _PORTA,w");RAIF=0;
257: GIE=1;
258: }
259: }
260: /******************************************
261: 主循环程序main()
262: 入口:无
263: 出口:无
264: *******************************************/
265: main()
266: {
267: unsigned char count;
268: sfr_setup();
269: waitfree();
270: asm("movf _PORTA,w");RAIF=0;RAIE=1;IOCA1=1;
271: GIE=1;
272: while(1)
273: {
274: send_cdcdata();
275: }
276: }
277: /************************************************************
278: 延时函数d7uS()
279: 作用:延时7uS
280: ************************************************************/
281: void d7uS(void)
282: {
283: asm("nop");
284: asm("nop");
285: }
286: //CDC状态数据移位
287: void shiftdata(void)
288: {
289: unsigned char temp;
290: temp=STATUS;
291: #asm
292: bcf _STATUS,6
293: bsf _STATUS,5
294: rlf _discpsw0,f
295: rlf _discpsw1,f
296: rlf _discpsw2,f
297: rlf _discpsw3,f
298: rlf _discpsw4,f
299: rlf _discpsw5,f
300: rlf _discpsw6,f
301: rlf _discpsw7,f
302: #endasm
303: STATUS=temp;
304: }
305: //数据清除
306: void dataclear(void)
307: {
308: discpsw0=0;discpsw1=0;discpsw2=0;
309: discpsw3=0;discpsw4=0;discpsw5=0;
310: discpsw6=0;discpsw7=0;
311: }
312: /******************************************
313: 中断处理函数inthandle()
314: 作用:
315: 入口:无;
316: 出口:无;
317: *******************************************/
318: void interrupt inthandle(void)
319: {
320: if(RAIE&&RAIF)
321: {
322: if(RA1)
323: {
324: TMR1IE=0;TMR1ON=0;TMR1IF=0; //停止1
325: TMR1L=0;TMR1H=0; //T1初值
326: TMR1ON=1; //运行T1
327: }
328: else
329: {
330: TMR1ON=0;
331: shiftdata(); //调整数据队列
332: if(TMR1H<0x04)
333: {discpsw0&=0xfe;}
334: else
335: {discpsw0|=0x01;}
336: TMR1IF=0;TMR1L=0x65;TMR1H=0xf0; //T1初值
337: TMR1ON=1;TMR1IE=1; //运行T1
338: }
339: asm("movf _PORTA,w");RAIF=0;
340: }
341: if(TMR1IE&&TMR1IF)
342: {
343: TMR1IE=0;TMR1ON=0;TMR1IF=0; //停止1
344: softpsw&=0xFE; //关数据读取标志
345: if(discpsw7==0x99)
346: {
347: nowtrackH=discpsw6&0x0f;
348: nowtrackL=discpsw5>>4; //Track
349: nowminH=discpsw4&0x0f;
350: nowminL=discpsw3>>4; //Min
351: nowsecH=discpsw3&0x0f;
352: nowsecL=discpsw2>>4; //sec
353: softpsw|=0x02;
354: }
355: else if(discpsw5==0x9b)
356: {nowdisc=discpsw4&0x0f;softpsw|=0x02;}
357: dataclear();
358: asm("movf _PORTA,w");RAIF=0;
359: }
360: }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -