大家好:帮我看看下面这个程序问题在哪里?收到控制码(test)时,程序里面做了相同的延时,实际通过示波器看到的延时却不同,不知道是哪里出了问题。另外,编译时有这个警告:Warning[596] : segment "rbit_0" (20-51) overlaps segment "intsave_2" (4A-4A)<br />Warning[596] : segment "rbit_0" (20-51) overlaps segment "intsave_3" (4B-4B)<br />会是这个影响吗?程序如下:<br /><br />#include <pic.h><br />#define False 0<br />#define True 1<br /><br />static volatile bit EnableDir @ (unsigned)&TRISC*8+4; // bit4 in port c<br />static volatile bit Enable @ (unsigned)&PORTC*8+4; // bit4 in port C<br />static volatile bit HostTX @ (unsigned)&PORTC*8+7; // bit7 in port C<br />static volatile bit SendBit @ (unsigned)&PORTA*8+3; // bit3 in port A<br />static volatile bit HsyncPulse @ (unsigned)&PORTA*8+4; // bit4 in port A<br />static volatile bit NoCoaxSign @ (unsigned)&PORTB*8+1; // bit1 in port B<br />static volatile bit test1 @ (unsigned)&PORTB*8+7; // bit7 in port B<br />static volatile bit test @ (unsigned)&PORTC*8+1; // bit1 in port C<br /><br />unsigned char HDatatemp,Datatemp;<br />unsigned char HData[4],Data[4];<br />unsigned char waite,i,j;<br /><br />bit Vsync_flag;<br />bit OverFlag;<br />/****************************************************************/<br />/* Interrup subprogram */<br />/****************************************************************/<br />void interrupt ISR(void)<br />{<br /> if(T0IF && T0IE)<br /> {<br /> T0IF=False;<br /> T0IE=False;<br /> OverFlag=1;<br /> }<br />/* if (RCIF && RCIE)<br /> {<br /> if (OERR || FERR) // error process, any error drop all<br /> {<br /> OERR=0; // clean overrun flag<br /> RxCommand=RCREG; // read Rx register<br /> CREN = 0; // reset receiver<br /> CREN = 1; // restart<br /> RxFullSign=1;<br /> }<br /> else<br /> {<br /> RxCommand=RCREG; // read Rx register<br /> RxFullSign=1;<br /> }<br /> }*/<br />}<br />void InitialCCP(void)<br />{<br /><br /> CCP1CON=5;<br /> CCP2CON=4;<br /> TRISC1=1;<br /> TRISC2=1;<br /> TMR1CS=0;<br /> TMR1ON=1;<br /> GIE=True;<br />}<br />void IO_Initial(void)<br />{<br /> TRISA=0xf7;<br /> TRISB=0x02;<br /> TRISC=0xAe;<br /> RBPU=0;<br /> ADCON0=0;<br /> ADCON1=0x06;<br /> SendBit=0;<br />}<br />void TMR0_Initial(void)<br />{<br /> T0CS=1; // set T0 counter mode and down edge trigger<br /> T0SE=1;<br /> TMR0=00;<br /> T0IF=False;<br /> T0IE=False;<br />}<br />void WGT_Init(void)<br />{<br /> PSA=1; //if no clear WGT in 36ms,CPU reset. <br /> PS0=1;<br /> PS1=1;<br /> PS2=1;<br />}<br />void TMR2_Init(void) <br />{<br /> TMR2IF=False; // clean interrupt flag<br /> TMR2IE=0; // disenable interrupt<br /> PEIE=True; <br />}<br />void sci_Init(void)<br />{<br /> BRGH = 1; /* high baud rate */<br /> SPBRG = 64; /* set the baud rate 19200bps */<br /> SYNC = 0; /* asynchronous */<br /> SPEN = 1; /* enable serial port pins */<br /> CREN = 1; /* enable reception */<br /> SREN = 0; /* no effect */<br /> TXIE = 0; /* disable tx interrupts */<br /> RCIE = 1; /* disable rx interrupts */<br /> TX9 = 0; /* 8- or 9-bit transmission */<br /> //RX9 = 0; /* 8- or 9-bit reception */<br /> TXEN = 1; /* enable the transmitter */<br />}<br />void delay1(void)<br />{ //3.4us;2.6us<br />// waite++;waite++;<br /> waite=0;<br /> waite++;//waite++;waite++;waite++;waite++;<br /> waite++;waite++;waite++;waite++;waite++;<br />}<br />void delay2(void)<br />{ //11.2us;<br /> waite=0;waite++;waite++;waite++;waite++;waite++;waite++;waite++;waite++;waite++;waite++;<br /> waite++;waite++;waite++;waite++;waite++;waite++;waite++;waite++;waite++;waite++;waite++;<br /> waite++;waite++;waite++;waite++;//waite++;//waite++;<br /> waite++;waite++;waite++;waite++;waite++;waite++;waite++;waite++;waite++;waite++;waite++;<br /> waite++;waite++;waite++;waite++;waite++;waite++;waite++;waite++;waite++;waite++;waite++;<br />}<br />void delay3(void)<br />{ //6.2us; <br /> waite=0;waite++;waite++;waite++;waite++;<br /> waite++;waite++;waite++;waite++;waite++;<br /> waite++;waite++;waite++;waite++;waite++;<br /> waite++;waite++;waite++;waite++;waite++;<br /> waite++;waite++;waite++;waite++;waite++;<br />}<br />void delay4(void)<br />{ //7.6us; <br /> waite=0;waite++;waite++;waite++;waite++;<br /> waite++;waite++;waite++;waite++;waite++;<br /> waite++;waite++;waite++;waite++;waite++;<br /> waite++;waite++;waite++;waite++;waite++;<br /> waite++;waite++;waite++;waite++;waite++;<br /> waite++;waite++;waite++;waite++;waite++;<br /> waite++;waite++;<br />}<br />void delay5(void)<br />{ //6.2us; <br /> waite=0;waite++;waite++;waite++;waite++;<br /> waite++;waite++;waite++;waite++;waite++;<br /> waite++;waite++;waite++;waite++;waite++;<br /> waite++;waite++;waite++;waite++;waite++;<br />// waite++;waite++;waite++;waite++;waite++;<br />}<br />void GetData(void)<br />{<br /> unsigned char loop; <br />// HDatatemp=0;<br />// Datatemp=0;<br />// SendBit=0;<br />// RCIE = 0;<br /> while (TMR0<0xf8);//f8<br /> while (!HsyncPulse);<br /> while (TMR0<0xfa); //fa //11<br /> while (!HsyncPulse);<br /> while(TMR0<254);//15<br /> while (!HsyncPulse);<br /> for(loop=0;loop<4;loop++)<br /> {<br /> HDatatemp=0;<br /> Datatemp=0;<br />// while (!HsyncPulse);<br /> while (HsyncPulse);<br />// delay2();//11.2us<br /> delay5();//5.2us<br /> if (test) <br /> {<br /> HDatatemp|=0x10;//0.4us<br /> test1=1;//0.2us<br /> }<br /> else <br /> {<br /> // test1=1;<br /> HDatatemp|=0;//0.2us<br /> test1=0; <br /> test1=0;<br /> test1=0;<br /> } <br /> delay1(); //2.6us<br /> if (test)<br /> { <br /> HDatatemp|=0x8;//0.4us<br /> test1=1;<br /> }<br /> else //0.6us<br /> {<br /> HDatatemp|=0;//0.2us <br /> test1=0;//0.2us<br /> test1=0;<br /> test1=0;<br /><br /> }<br /> delay1();//2.6us<br /> if (test)<br /> { <br /> HDatatemp|=0x4;<br /> test1=1;<br /> }<br /> else //0.6us<br /> {<br /> HDatatemp|=0;//0.2us<br /> test1=0;//0.2us<br /> test1=0;<br /> test1=0;<br /> }<br /> delay1();//2.6us<br /> if (test) //1.4us???????????<br /> {<br /> HDatatemp|=0x2;//0.4us<br /> test1=1;//0.2us<br /> }<br /> else <br /> {<br /> HDatatemp|=0;<br /> test1=0;<br /> test1=0;<br /> test1=0;<br /> }<br /> delay1();//2.6us<br /> if (test)<br /> { <br /> HDatatemp|=0x1;//0.4us<br /> test1=1;//0.2us<br /> }<br /> else <br /> {<br /> HDatatemp|=0;<br /> test1=0;<br /> test1=0;<br /> test1=0;<br /> }<br /> //----------------------------数据<br /> delay1();//2.6us <br /> if (test)<br /> { <br /> Datatemp|=0x80;<br /> test1=1;<br /> }<br /> else <br /> {<br /> Datatemp|=0;<br /> test1=0;<br /> test1=0;<br /> test1=0;<br /> }<br /> delay1();<br /> if (test)<br /> { <br /> Datatemp|=0x40;<br /> test1=1;<br /> }<br /> else <br /> {<br /> Datatemp|=0;<br /> test1=0;<br /> test1=0;<br /> test1=0;<br /> }<br /> delay1();<br /> if (test)<br /> { <br /> Datatemp|=0x20;<br /> test1=1;<br /> }<br /> else <br /> {<br /> Datatemp|=0;<br /> test1=0;<br /> test1=0;<br /> test1=0;<br /> }<br /> delay1();<br /> if (test) <br /> {<br /> Datatemp|=0x10;<br /> test1=1;<br /> }<br /> else <br /> {<br /> Datatemp|=0;<br /> test1=0;<br /> test1=0;<br /> test1=0;<br /> }<br /> delay1();<br /> if (test)<br /> { <br /> Datatemp|=0x8;<br /> test1=1;<br /> }<br /> else <br /> {<br /> Datatemp|=0;<br /> test1=0;<br /> test1=0;<br /> test1=0;<br /> }<br /> delay1();<br /> if (test) <br /> {<br /> Datatemp|=0x4;<br /> test1=1;<br /> }<br /> else <br /> {<br /> Datatemp|=0; <br /> test1=0;<br /> test1=0;<br /> test1=0;<br /> }<br /> delay1();<br /> if (test) <br /> {<br /> Datatemp|=0x2;<br /> test1=1;<br /> }<br /> else <br /> {<br /> Datatemp|=0; <br /> test1=0;<br /> test1=0;<br /> test1=0;<br /> }<br /> delay1();<br /> if (test)<br /> { <br /> Datatemp|=0x1;<br /> test1=1;<br /> }<br /> else <br /> {<br /> Datatemp|=0;<br /> test1=0;<br /> test1=0;<br /> test1=0;<br /> }<br /> HData[loop] =HDatatemp;<br /> Data[loop] =Datatemp;<br /> delay4();//7.2us<br /> }<br /> test1=0;<br />}<br />void ReceiveFromCoax(void)<br />{<br /> unsigned char loop; <br /> for (loop=0;loop<4;loop++)<br /> {<br /> HData[loop]=0;<br /> Data[loop] =0;<br /> }<br /> HDatatemp=0;<br /> Datatemp =0; <br /> GetData(); <br />}<br /> <br />void SendCommandToOut(void)<br />{<br /><br /> if(HData[0]==0x13 )&&HData[1]==0xc )&&HData[2]==0x13 &&HData[3]==0xc)<br /> {<br /> for (i=0;i<4;i++);<br /> {<br /> TXREG=Data; <br /> for (j=0;j<55;j++) delay2(); //19200 90*6.2us>520us <br /> } <br /> }<br />}<br />void main (void)<br />{ <br /> <br /> IO_Initial();<br /> InitialCCP();<br /> WGT_Init();<br /> TMR0_Initial();<br /> TMR2_Init();<br /> sci_Init(); <br /> EnableDir=0; //output<br /> Enable=0; <br /> while (NoCoaxSign)<br /> {<br /> if (!HostTX)<br /> { <br /> EnableDir=0; //output<br /> for (i=0;i<140;i++)<br /> for (j=0;j<15;j++); <br /> }<br /> EnableDir=1;//input<br /> asm ("clrwdt"); <br /> } <br /> for(;;)<br /> {<br /> ReFind: <br /> while (HsyncPulse);<br /> while (!HsyncPulse);<br /> for (i=0;i<9;i++);<br /> if (HsyncPulse) <br /> { <br /> Vsync_flag=True;<br /> goto ReFind; <br /> }<br />// SendBit=0;<br /> if (Vsync_flag) <br /> { <br /> OverFlag=0;<br /> asm ("clrwdt");<br /> TMR0=0xf3; <br /> T0IF=False;<br /> T0IE=True;<br /> Vsync_flag=False;<br />// RCIE = 0;<br /> test1=0;<br /> ReceiveFromCoax();<br />// RCIE = 1;<br /> SendCommandToOut();<br /> }<br /> }<br />}<br /> |
|