?? 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 + -