📄 last.c
字号:
PIR1bits.ADIF=0; //清AD中断标志
TRISAbits.TRISA0=1; //配置管脚为输入方向
TRISAbits.TRISA1=1;
}
/*******************************
函数名:ADread()
AD转换子程序
********************************/
void ADread()
{
unsigned int ADdata = 0;
PIR1bits.ADIF = 0;
// datace[datacount++] = ADRESH; //一个数据用两个字节表示,高位在前,低位在后
// datace[datacount++] = ADRESL;
datace[0] = ADRESH;
datace[1] = ADRESL;
}
/*******************************
函数名:datatest()
测量导轨数据 11.06
*******************************/
void datatest(void)
{ unsigned char *direction;
unsigned char right[]="rr"; //向右测数据标志
unsigned char left[]="ll"; // 向左测数据标志
// unsigned char end[]="@@"; // 数据传输完标志
// unsigned char direction[2];
unsigned int time = 300,j=1000,i=300;
// unsigned char num_flag = 0; //探头在左,标志为0,在右标志为1
datacount = 0;
// DATA_flag = 1;
ADCON0 = 0X00; //选择通道0
PIR1bits.ADIF = 0; //读数据前清标志位
if((PORTDbits.RD6 == 0)&&(PORTDbits.RD7 == 0))
{
control(0); //控制电机左转
closeoropen(1); //开电机电源
while(PORTDbits.RD7 == 0); //等待电机到头,RD7变为1
while(i-->0);
while(PORTDbits.RD7 == 0);
closeoropen(0);
}
if(PORTDbits.RD6 == 1) //在右边,左转
while(i--);
if(PORTDbits.RD6 == 1)
{
control(0);
direction=left;
}
if(PORTDbits.RD7 == 1) // 左边,右转
while(i--);
if(PORTDbits.RD7 == 1)
{
control(1);
direction=right;
}
closeoropen(1); //开电机电源
while(PORTDbits.RD6 == 1||PORTDbits.RD7 == 1); //没离开当前传感器之前不采样
ADCON0bits.ADON = 1;
ADCON0bits.GO = 1;
// while(datacount < 400)
while(PORTDbits.RD6 == 0&&PORTDbits.RD7 == 0)
{
/* TXREG = 'p';
while(PIR1bits.TXIF == 0); //等待串口发送完成
for(i = 300;i > 0;i--);
*/
while(PIR1bits.ADIF == 0);
ADread();
senddata(datace);
ADCON0bits.ADON = 0;
// for(j=4550;j>0;j--); //延时正好到头
while(PORTDbits.RD6 == 1||PORTDbits.RD7 == 1)
break;
// delay(2); //采样延时2*300US
/*
if(PORTDbits.RD6 == 1||PORTDbits.RD7 == 1)
while(i--);
if(PORTDbits.RD6 == 1||PORTDbits.RD7 == 1)
{ TXREG = 'q';
while(PIR1bits.TXIF == 0); //等待串口发送完成
for(j = 300;j > 0;j--);
break;
}
*/
ADCON0bits.ADON = 1;
ADCON0bits.GO = 1; //AD转换继续
}
while(PORTDbits.RD6 == 0&&PORTDbits.RD7 == 0); // 到达某一边
// while(i-->0);
// while(PORTDbits.RD6 == 0&&PORTDbits.RD7 == 0);
/*
TXREG = 'q';
while(PIR1bits.TXIF == 0); //等待串口发送完成
for(j = 300;j > 0;j--);
*/
ADCON0bits.ADON = 0; //关AD
closeoropen(0); //关电机
senddata(direction);
TXREG = 0xaa;
while(PIR1bits.TXIF == 0); //等待串口发送完成
for(j = 300;j > 0;j--);
// senddata(end);
/*
TXREG = 0xff; //数据采集完标志
while(PIR1bits.TXIF == 0); //等待串口发送完成
for(j = 300;j > 0;j--);
TXREG = 0xff;
while(PIR1bits.TXIF == 0); //等待串口发送完成
for(j = 300;j > 0;j--);
*/
// senddata(datace,str,400);
}
/******************************
函数名:batterytest()
电量测试
*******************************/
void batterytest(void)
{
unsigned char str[]="dl";
unsigned int j;
// AD_flag = 0;
DATA_flag = 0; //表示此时AD转换的是电量数据
ADCON0 = 0X04; //选择通道1
ADCON0bits.ADON = 1; //使能AD模块,启动AD转换
ADCON0bits.GO = 1;
while(PIR1bits.ADIF == 0);
PIR1bits.ADIF = 0;
databattery[1]=ADRESL;
databattery[0]=ADRESH;
// senddata(&databattery,str,2);
senddata(battery);
senddata(databattery);
// senddata(end);
ADCON0bits.ADON = 0; //关闭AD模块
TXREG = 0xaa;
while(PIR1bits.TXIF == 0); //等待串口发送完成
for(j = 300;j > 0;j--);
}
/****************************
函数名:senddata()
串行发送数据
*****************************/
/*
void senddata(unsigned char *p,unsigned char *q,unsigned int num)
{
int j = 0;
TXREG = *(q++);
for(j = 300;j > 0;j--);
while(PIR1bits.TXIF == 0);
TXREG = *(q++);
while(PIR1bits.TXIF == 0);
for(j = 300;j > 0;j--);
while((num--) != 0)
{
TXREG = *(p++);
while(PIR1bits.TXIF == 0); //等待串口发送完成
for(j = 300;j > 0;j--);
}
TXREG = 0xff;
while(PIR1bits.TXIF == 0); //等待串口发送完成
for(j = 300;j > 0;j--);
TXREG = 0xff;
while(PIR1bits.TXIF == 0); //等待串口发送完成
for(j = 300;j > 0;j--);
}
*/
void senddata(unsigned char *p)
{
int j = 0;
/*
TXREG = '#';
for(j = 300;j > 0;j--);
while(PIR1bits.TXIF == 0);
*/
TXREG = '#';
while(PIR1bits.TXIF == 0);
for(j = 300;j > 0;j--);
TXREG = *(p++);
while(PIR1bits.TXIF == 0); //等待串口发送完成
for(j = 300;j > 0;j--);
TXREG = *p;
while(PIR1bits.TXIF == 0); //等待串口发送完成
for(j = 300;j > 0;j--);
}
/**************************
函数名:main()
**************************/
void main(void)
{
unsigned char receivedata[2]={0,0};
unsigned char i = 0,j;
initial();
serialinital();
ADinitial();
IICinitial();
timer0inition();
// INTCON = INTCON|0XC0; //开总中断
/*
datatest();
TXREG = 'q';
while(PIR1bits.TXIF == 0); //等待串口发送完成
for(j = 300;j > 0;j--);
while(1)
{
TXREG = 'q';
while(PIR1bits.TXIF == 0); //等待串口发送完成
for(j = 300;j > 0;j--);
// datatest();
}
*/
while(1)
{
/* if(PIR1bits.RCIF == 1)
{
PIR1bits.RCIF=0;
TXREG = 'q';
while(PIR1bits.TXIF == 0); //等待串口发送完成
for(j = 300;j > 0;j--);
}
*/
if(PIR1bits.RCIF == 1)
{
PIR1bits.RCIF=0;
receivedata[1] = receivedata[0];
receivedata[0] = RCREG;
if((receivedata[1] == 'd')&&(receivedata[0] == 'l')) //判断接收到的请求信息类型
{ RCSTAbits.CREN = 0;
batterytest();
RCSTAbits.CREN = 1;
}
if((receivedata[1] == 's')&&(receivedata[0] == 'j'))
{
RCSTAbits.CREN = 0;
// PIR1bits.RCIF=0;
// TXREG = 'q';
// while(PIR1bits.TXIF == 0); //等待串口发送完成
// for(j = 300;j > 0;j--);
datatest();
RCSTAbits.CREN = 1;
}
if((receivedata[1] == 'w')&&(receivedata[0] == 'd'))
{ RCSTAbits.CREN = 0;
Testtemp();
RCSTAbits.CREN = 1;
}
if((receivedata[1] == 'r')&&(receivedata[0] == 'r'))
{ RCSTAbits.CREN = 0;
reset();
RCSTAbits.CREN = 1;
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -