?? test4div1.c
字號:
#include <REG935.H>
#include"..\SOURCE\general.h"
#include <STRING.H>
//#include <stdio.h>
BYTE STATE;
DWORD DISTANCE,DISTANCENA,DISTANCEPA1,DISTANCEPA2;
BYTE PREDATA=100,j=0;
bit OVERFLOW=0;
/*********************************************************************************************************
* 函數名稱: X9C104
*
* 功能描述: 數字電位器X9C104控制程序。
*
* 入口參數: X9C104DATA 數字電位器的中心抽頭的位置數值
*
* 出口參數: 無
*
* 全局變量: 無
*
* 調用模塊: delay
*
* 作 者: 汪帆
* 創建時間: 2006年1月10日
********************************************************************************************************/
void x9c104(BYTE X9C104DATA)
{
signed int i;
UD=0;
INC=0;
i= X9C104DATA-PREDATA;
if (i>0)
{
i=X9C104DATA-PREDATA;
UD=1;
do
{
INC=1;
_nop_();
INC=0;
i--;
}while (i>0);
}else if (i<0)
{
i=PREDATA-X9C104DATA;
UD=0;
do
{
INC=1;
_nop_();
INC=0;
i--;
}while (i>0);
}
PREDATA=X9C104DATA;
}
/*********************************************************************************************************
* 函數名稱: pulse
*
* 功能描述: 發送脈沖,并選擇脈沖寬度
*
* 入口參數: ABC=0 范圍參數
*
* 出口參數: 無
*
* 全局變量: 無
*
* 調用模塊: 無
*
* 作 者: 汪帆
* 創建時間: 2006年1月10日
********************************************************************************************************/
void pulse(BYTE ENSEL10)
{
//START=0;
CLR=0;
delay(2);
LOAD=0; //LOAD為脈沖下降沿有效
switch (ENSEL10)
{
case 1: EN=0;SEL1=0;SEL0=0;ENNP=0;break; //200米
case 2: EN=0;SEL1=0;SEL0=1;ENNP=0;break; //1000米
case 3: EN=0;SEL1=1;SEL0=0;ENNP=0;break; //4000米
case 4: EN=0;SEL1=1;SEL0=1;ENNP=0;break; //8000米
case 5: EN=1;SEL1=0;SEL0=0;ENNP=1;break; //
case 6: EN=1;SEL1=0;SEL0=0;ENNP=1;break; //
case 7: EN=1;SEL1=1;SEL0=0;ENNP=1;break; //
case 8: EN=1;SEL1=1;SEL0=0;ENNP=1;break; //
default: break;
}
DCLK=0;
//START=1;
CLR=1;
}
/*********************************************************************************************************
* 函數名稱: rdpulse
*
* 功能描述: 讀一次測試數據的值
*
* 入口參數:
*
* 出口參數: DISTANCE 一次測試后的記數值
*
* 全局變量: 無
*
* 調用模塊: 無
*
* 作 者: 汪帆
* 創建時間: 2006年1月10日
********************************************************************************************************/
DWORD rdNAPA(void)
{
BYTE i,l;
for(l=0;l<255;l++)
{
_nop_();
_nop_();
}
P2=P2|0x18;
_nop_();
P2=P2&0xe7;
DISTANCE=0;
DCLK=0;
LOAD=0;
LOAD=1;
DCLK=1;
LOAD=0;
for (i=0;i<10;i++)
{
DCLK=1;
if(SD==1)
DISTANCE|=1;
if(i<9)
DISTANCE<<=1;
DCLK=0;
}
DCLK=0;
//DISTANCE=1688;
return(DISTANCE);
}
/*********************************************************************************************************
* 函數名稱: gainDISTANCE
*
* 功能描述: 自動測試程序
*
* 入口參數: 無
*
* 出口參數: DISTANCE 一次測試后的記數值 ;RANGE 完成測試時的范圍
* 當DISTANCE=0x0fff,RANGE=7時說明測試距離過長,超出測試范圍。
*
* 全局變量: 無
*
* 調用模塊: 無
*
* 作 者: 汪帆
* 創建時間: 2006年1月10日
********************************************************************************************************/
DWORD gainDISTANCE(void)
{
BYTE k=255;
do
{
j=0;
CCU_init(j*36);
delay(5);
DA(k); //數模轉換,從AD03(P2.0)輸出模擬電壓,為PA,NA檢測提供基準電壓
_nop_();
_nop_();
_nop_();
do
{
j++;
if(j==9)
break;
pulse(j);
DISTANCE=rdNAPA();
}while(DISTANCE==0x03ff);
k=k-2;
if (k>10)
OVERFLOW=0;
else
{
OVERFLOW=1;
break;
}
}while(DISTANCE==0x03ff);
if ((j==1)||(j==2))
{
DISTANCE=(DISTANCE)*2;
}
else if ((j==3)||(j==4))
{
DISTANCE=(DISTANCE)*4;
}
else if ((j==5)||(j==6))
{
DISTANCE=(DISTANCE)*8;
}
else if ((j==7)||(j==8))
DISTANCE=(DISTANCE)*16;
return(DISTANCE);
}
void autotest()
{
char xdata str1[50],*str2;
/*unsigned char i=0; //測試
while(1)
{
CCU_init(1*36);
delay(5);
DA(255); //數模轉換,從AD03(P2.0)輸出模擬電壓,為PA,NA檢測提供基準電壓
_nop_();
_nop_();
_nop_();
i++;
i%=5;
pulse(2);
delay(20);
}*/
D1=0;
D0=0; //選中PA1事件測的數據
DISTANCEPA1=gainDISTANCE();
D1=0;
D0=1; //選中PA2事件測的數據
DISTANCEPA2=gainDISTANCE();
D1=1; //選中NA事件測的數據
DISTANCENA=gainDISTANCE();
/*PAS;
if(PAS==0)
{
strcpy(str1,"斷線距離。");
if (DISTANCEPA2==0x03ff)
DISTANCE=DISTANCEPA1;
else
DISTANCE=DISTANCEPA2;
}
else
{
strcpy(str1,"混線距離。");
}
strcpy(str1,"斷線距離第一次。");
numtostr(str1,DISTANCEPA1);
if(OVERFLOW)
str2=strcat("測試距離太長超范圍。");
else
str2=strcat(str1,"米");
xf3011text(str2);
delay(255);
delay(255); */
if ((DISTANCEPA1)==0x03ff)
DISTANCE=DISTANCEPA2;
else
DISTANCE=DISTANCEPA1;
/*if ((j==1)||(j==2))
{
DISTANCE=(DISTANCE)*2;
DISTANCENA=(DISTANCENA)*2;
}
else if ((j==3)||(j==4))
{
DISTANCE=(DISTANCE)*4;
DISTANCENA=(DISTANCENA)*4;
}
else if ((j==5)||(j==6))
{
DISTANCE=(DISTANCE)*8;
DISTANCENA=(DISTANCENA)*8;
}
else if ((j==7)||(j==8))
{
DISTANCE=(DISTANCE)*16;
DISTANCENA=(DISTANCENA)*16;
}*/
DISTANCE=DISTANCE-8;
DISTANCENA=DISTANCENA-10;
//DISTANCE=(DISTANCE)*7;
//DISTANCE=(DISTANCE)/8; ;
//DISTANCE=(DISTANCE)*9;
//DISTANCE=(DISTANCE)/10;
if(DISTANCENA>DISTANCE)
{
strcpy(str1,"斷線距離。");
numtostr(str1,DISTANCE);
if(OVERFLOW)
str2=strcat("測試距離太長超范圍。");
else
str2=strcat(str1,"米");
xf3011text(str2);
delay(255);
delay(255);
}
else
{
strcpy(str1,"短路距離。");
numtostr(str1,DISTANCENA);
if(OVERFLOW)
str2=("測試距離太長超范圍。");
else
str2=strcat(str1,"米");
xf3011text(str2);
delay(255);
delay(255);
}
}
void DA(BYTE da_val)
{
DWORD xdata i;
ADINS=0x08; //開轉換通道3
ADMODA=0x02; //設置轉換模式
ADMODB=0x44; //設置ADC模塊,0.5Mhz<ADC CLK<3.3Mhz,使能DAC0
ADCON0=0x04; //開啟DAC0模塊
//ADCON0&=0x7F; //清AD/DA轉換完成標志位
AD0DAT3=da_val; //AD0DAT3的值為DAC0輸出的控制量
for(i=0;i<=1000;i++);
ADCON0=0x05; //啟動DA轉換,立即啟動方式
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -