#i nclude<pic.h>
__CONFIG(0x1832);
union adres
{int y1;
unsigned char adre[2];
}adresult;
int AD_Value;
bit sci_Sign,js=0;
int Order[3];
int buf[4];
void adinitial(void);
void sciint(void);
void ad_Collect(void);
void sci(int);
//*SCI部件接收初始化子程序*/
void sciint()
{
TRISC7= 1 ;// |= 0xc0;//设置为输入
TRISC6= 1 ;
BRGH = 1 ; //高波特率选择位
SPBRG = 25 ; //((20000000/9600)/16)-1
SYNC = 0 ;//异步
SPEN = 1 ;//串口使能
RCIE = 1 ;// USART数据接收中断使能位
TXIE = 0 ;//USART数据发送中断使能位
TXEN = 1 ;//发送
CREN = 1 ;//连续接收使能位
PEIE= 1 ; //开中断
}
//A/D 转换初始化子程序
void adinitial()
{
ADCON0=0X41;//
ADCON1=0X8E;
TRISA0=1;
}
void ad_Collect()
{
float temp;
ADGO=1;
while(!ADIF);
ADIF=0;
adresult.adre[0]=ADRESL;//读取AD转换的结果到联合体数组.
adresult.adre[1]=ADRESH;
// AD_value="/ADRESH;//
temp=(float)adresult.y1;//*5)/1023)*1000;
temp=((temp*5)/1023)*100;
AD_Value=(int)(temp*5);//adresult.y1;//(int)temp;
}
void" sci(int tran)
{
while(!TXIF);
TXREG=tran; //*发出一个字符*/
TXIF=0;
}
void interrupt SCI_Admit(void)
{
// sci_Sign=1;
int temp;
if(RCIF) //判断是否是接收中断
{
if(js)
{
if(Order[0]=='$')
{
temp++;
Order[temp]=RCREG;
if(temp==2)
{
js=0;
sci_Sign=1;
temp=0;
}
}
else
js=0;
// RCIF=0;
}
else
{
Order[0]=RCREG;
js=1;
temp=0;
}
RCIF=0;
}
}
/* if(js)
{
if(Order[1]=='R')
{
Order[2]=RCREG;
sci_Sign=1;
js=0;
}
else
{
Order[1]=RCREG;
}
temp++;
Order[temp]=RCREG;
if(temp==2)
js=0;
}*/
void int_to_asc(int dat)
{
int temp;
buf[0]=(dat/1000)+'0';
temp=dat%100;
buf[1]=((dat%1000)/100)+'0';
buf[2]=((dat%1000)%100)/10+'0';
buf[3]=((dat%1000)%100)%10+'0';
}
void main()
{
int temp='V';
adinitial();
sciint(); //*SCI部件初始化*/
sci_Sign=0;
ei();
TXEN = 1 ;//发送
CREN = 1 ;//连续接收使能位
while(1)
{
// ad_Collect();
if(sci_Sign)
{
if(Order[0]=='$')
{
if(Order[1]=='R'&&Order[2]=='V')
{
ad_Collect();
//AD_value="/123;
//sci(AD_Value);
int_to_asc(AD_Value);
sci(temp);
if(buf[0]!='0')
sci(buf[0]);
sci(buf[1]);
sci('."');
sci(buf[2]);
sci(buf[3]);
Order[0]=0;
Order[1]=0;
Order[2]==0;
}
// sci(temp);
}
sci_Sign=0;
}
}
}
|