📄 c8051f064.c
字号:
// Temp_3.c
//-------------------------------------------------------------------------
// 1号测试台 和2号测试台
// AUTH: CAO
// DATE: 10 AUG 2003
#include <c8051f060.h> // SFR declarations
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <float.h>
//-----------------------------------------------------------------------------
// 16-bit SFR Definitions for 'F02x
sfr16 RCAP3 = 0xCA; // Timer3 reload value
sfr16 TMR3 = 0xCC; // Timer3 counter
sfr16 ADC0 = 0xBE; // ADC0 Data
sfr16 ADC1 = 0xBE; // ADC1 Data
/*
sfr16 DP = 0x82; // data pointer
sfr16 TMR3RL = 0x92; // Timer3 reload value
sfr16 TMR3 = 0x94; // Timer3 counter
sfr16 ADC0 = 0xbe; // ADC0 data
sfr16 ADC0GT = 0xc4; // ADC0 greater than window
sfr16 ADC0LT = 0xc6; // ADC0 less than window
sfr16 RCAP2 = 0xca; // Timer2 capture/reload
sfr16 T2 = 0xcc; // Timer2
sfr16 RCAP4 = 0xe4; // Timer4 capture/reload
sfr16 T4 = 0xf4; // Timer4
sfr16 DAC0 = 0xd2; // DAC0 data
sfr16 DAC1 = 0xd5; // DAC1 data
*/
//-----------------------------------------------------------------------------
// Global CONSTANTS
#define SYSCLK 22118400
#define BAUDRATE 9600
sbit C_485DE = P0^2 ; //485方向控制脚 0 recept 1 send
sbit LED = P3^5; // LED='1' means ON
sbit K0 = P6^3; // K0='0' means ON 常开弹跳
sbit K1 = P6^2; // K1='0' means ON 常闭弹跳
sbit K2 = P6^4; // K2='0' means ON 衰减
sbit K3 = P6^1; // K3='0' means ON 常闭触点
sbit STRIG = P1^5;
//-----------------------------------------------------------------------------
// Function PROTOTYPES
void SYSCLK_Init (void);
void PORT_Init (void);
void UART0_Init (void);
void ADC0_Init (void);
void Timer3_Init (void);
void Time3_vecter (void);
void delay(unsigned int x);
void UART0RX_VECTOR (void);
void UART1RX_VECTOR (void);
void test1(void);
void test2(void);
void test3(void);
void test4(void);
void test5(void);
void test6(void);
void test7(void);
void test8(void);
void test11(void);
void test12(void);
void test21(void);
void test22(void);
void test23(void);
void test24(void);
void timetest1(void);
void timetest2(void);
void timetest3(void);
void timetest4(void);
void adch(void);
void adch1(void);
void communication_485(void);
void cpinit(void);
void CP0UP (void);
void CP0DOWN (void);
void CP1UP (void);
void CP1DOWN (void);
void bcdchang(void);
//-----------------------------------------------------------------------------
// Global VARIABLES
//data float admn ; // ADC0 decimated value
data unsigned long admn,adc;
xdata unsigned char r1_buffer[4];
xdata unsigned int ad[14];
data unsigned int t1,t0,r1,r0,t2,t3,t5,j,m;
data unsigned int count,updata1[2],updata2[2],dodata1[2],dodata2[2];
data unsigned int cp1,cp2,cp3,cp4,updata3[2],updata4[2],dodata3[2],dodata4[2];
unsigned int crc_485;
unsigned char top0,top1,top2;
unsigned long i,n;
xdata unsigned char t1_buffer[31],r0_buffer[7],t0_buffer[9];
//unsigned long adf;
//float ggg;
//-----------------------------------------------------------------------------
// MAIN Routine
void main (void)
{
WDTCN = 0xde; // disable watchdog timer
WDTCN = 0xad;
C_485DE =0 ;
top0 = 0x7e ;
top1 = 0xaa ;
top2 = 255- P7 ;
t1_buffer[0] = 0x7e;
t1_buffer[1] = 0xba;
t1_buffer[2] = 255- P7;
n=4000; //47.56ms
r1=0;
SYSCLK_Init (); // initialize oscillator
PORT_Init (); // initialize crossbar and GPIO
UART0_Init (); // initialize UART0
Timer3_Init (); // initialize Timer3 to overflow at
cpinit();
ADC0_Init (); // init ADC
for (i=3;i<29;i++)
{
t1_buffer[i]=0;;
}
EA = 1; // Enable global interrupts
//********************************************************************
WDTCN = 0xa5; // 开看门狗,清看门狗
// ADC0CF |= 0x02; // input adc *2
while (1)
{
WDTCN = 0xa5; // 开看门狗,清看门狗
count=0;
// TMR3 = 0x0000;
if (r1==0x004)
{
t2=r1_buffer[2];
t3=r1_buffer[3];
if ((t3>127)&&(t2>127))
{
switch(t2)
{
case 0x81:
K0=0 ; //继电器吸合,测量
cp1=0;
cp3=0;
dodata1[0]=0;
dodata2[0]=0;
dodata3[0]=0;
dodata4[0]=0;
dodata1[1]=0;
dodata2[1]=0;
dodata3[1]=0;
dodata4[1]=0;
timetest1();
break;
case 0x82:
K0=0 ; //继电器吸合,测量
cp2=0;
cp4=0;
updata1[0]=0;
updata2[0]=0;
updata3[0]=0;
updata4[0]=0;
updata1[1]=0;
updata2[1]=0;
updata3[1]=0;
updata4[1]=0;
timetest2();
break;
case 0x83:
K1=0 ; //继电器吸合,测量
cp2=0;
cp4=0;
updata1[0]=0;
updata2[0]=0;
updata3[0]=0;
updata4[0]=0;
updata1[1]=0;
updata2[1]=0;
updata3[1]=0;
updata4[1]=0;
timetest3();
break;
case 0x84:
K1=0 ; //继电器吸合,测量
cp1=0;
cp3=0;
dodata1[0]=0;
dodata2[0]=0;
dodata3[0]=0;
dodata4[0]=0;
dodata1[1]=0;
dodata2[1]=0;
dodata3[1]=0;
dodata4[1]=0;
timetest4();
break;
case 0x86:
K3=0 ; //继电器吸合,测量常开触电
test1();
break;
case 0x87:
K3=0 ; //继电器吸合,测量常开触电
test2();
break;
case 0x88:
test3();
break;
case 0x89:
test4();
break;
case 0x91:
K3=0 ; //继电器吸合,测量常开触电
test5();
break;
case 0x92:
K3=0;
test6();
break;
case 0x93:
test7();
break;
case 0x94:
test8();
break;
case 0x96:
test21();
break;
case 0x97:
test22();
break;
case 0x98:
test23();
break;
case 0x99:
test24();
break;
default: break;
}
}
if ((r1_buffer[2]==top2)&&(r1_buffer[3]==top2))
{
communication_485();
}
r1=0;
}
WDTCN = 0xa5; //清看门狗;
}
}
//********************************************
void communication_485(void)
{
char old_SFRPAGE = SFRPAGE;
C_485DE=1 ; //485方向控制口,485发
t1_buffer[0] = 0x7e;
t1_buffer[1] = 0xba;
t1_buffer[2] = 255-P7;
crc_485=t1_buffer[2];
for (i=3;i<29;i++)
{
crc_485=(crc_485^t1_buffer[i]);
}
t1_buffer[29]=crc_485; //
SFRPAGE = UART0_PAGE; // Switch to UART0 page
for (t1=0;t1<30;t1++)
{
SBUF0 = t1_buffer[t1] ; //数据送发送缓冲
WDTCN = 0xa5; //清看门狗
while ((SCON0&0x02)==0);
SCON0 &=~0x02;
delay(200); //2.378ms
}
SFRPAGE = old_SFRPAGE;
C_485DE=0 ; //485方向控制口置低,485为接收状态
}
//*******************************************************
void bcdchang(void)
{
r0_buffer[1]=adc%10;
adc=adc/10;
r0_buffer[2]=adc%10;
adc=adc/10;
r0_buffer[3]=adc%10;
adc=adc/10;
r0_buffer[4]=adc%10;
adc=adc/10;
r0_buffer[5]=adc%10;
adc=adc/10;
r0_buffer[6]=adc%10;
}
//*******************************************************
void timetest1(void)
{
while (STRIG == 1);
TR3=1;
while (count<90) ;
TR3=0;
K0=1;
adc = (unsigned long)(800/27*dodata4[0]+dodata3[0]/2211.84);
bcdchang ();
t1_buffer[3]=r0_buffer[4]<<4|r0_buffer[3];
t1_buffer[4]=r0_buffer[2]<<4|r0_buffer[1];
if (dodata2[1]==0)
{
adc= (unsigned long)((8000/27*(dodata2[0]-dodata4[0])+dodata1[0]/221.184-dodata3[0]/221.184));
}
else adc = (unsigned long)((8000/27*(dodata2[1]-dodata4[0])+dodata1[1]/221.184-dodata3[0]/221.184));
bcdchang ();
t1_buffer[5]=r0_buffer[4]<<4|r0_buffer[3];
t1_buffer[6]=r0_buffer[2]<<4|r0_buffer[1];
adc= (unsigned long)dodata4[0];
bcdchang ();
t1_buffer[20]=r0_buffer[2]<<4|r0_buffer[1];
adc= (unsigned long)dodata4[1];
bcdchang ();
t1_buffer[21]=r0_buffer[2]<<4|r0_buffer[1];
adc= (unsigned long)dodata2[0];
bcdchang ();
t1_buffer[22]=r0_buffer[2]<<4|r0_buffer[1];
adc= (unsigned long)dodata2[1];
bcdchang ();
t1_buffer[23]=r0_buffer[2]<<4|r0_buffer[1];
adc= (unsigned long)updata4[0];
bcdchang ();
t1_buffer[24]=r0_buffer[2]<<4|r0_buffer[1];
adc= (unsigned long)updata4[1];
bcdchang ();
t1_buffer[25]=r0_buffer[2]<<4|r0_buffer[1];
adc= (unsigned long)updata2[0];
bcdchang ();
t1_buffer[26]=r0_buffer[2]<<4|r0_buffer[1];
adc= (unsigned long)updata2[1];
bcdchang ();
t1_buffer[27]=r0_buffer[2]<<4|r0_buffer[1];
}
//*******************************************************
void timetest2(void)
{
while (STRIG == 1);
TR3=1;
while (count<90) ;
TR3=0;
K0=1;
adc =(unsigned long)(800/27*updata2[0]+updata1[0]/2211.84);
bcdchang ();
t1_buffer[7]=r0_buffer[4]<<4|r0_buffer[3];
t1_buffer[8]=r0_buffer[2]<<4|r0_buffer[1];
if (updata4[1]==0)
{
adc= (unsigned long)(8000/27*(updata4[0]-updata2[0])+updata3[0]/221.184-updata1[0]/221.184);
}
else adc = (unsigned long)(8000/27*(updata4[1]-updata2[0])+updata3[1]/221.184-updata1[0]/221.184);
bcdchang ();
t1_buffer[9]=r0_buffer[4]<<4|r0_buffer[3];
t1_buffer[10]=r0_buffer[2]<<4|r0_buffer[1];
adc= (unsigned long)dodata4[0];
bcdchang ();
t1_buffer[20]=r0_buffer[2]<<4|r0_buffer[1];
adc= (unsigned long)dodata4[1];
bcdchang ();
t1_buffer[21]=r0_buffer[2]<<4|r0_buffer[1];
adc= (unsigned long)dodata2[0];
bcdchang ();
t1_buffer[22]=r0_buffer[2]<<4|r0_buffer[1];
adc= (unsigned long)dodata2[1];
bcdchang ();
t1_buffer[23]=r0_buffer[2]<<4|r0_buffer[1];
adc= (unsigned long)updata4[0];
bcdchang ();
t1_buffer[24]=r0_buffer[2]<<4|r0_buffer[1];
adc= (unsigned long)updata4[1];
bcdchang ();
t1_buffer[25]=r0_buffer[2]<<4|r0_buffer[1];
adc= (unsigned long)updata2[0];
bcdchang ();
t1_buffer[26]=r0_buffer[2]<<4|r0_buffer[1];
adc= (unsigned long)updata2[1];
bcdchang ();
t1_buffer[27]=r0_buffer[2]<<4|r0_buffer[1];
}
//*******************************************************
void timetest3(void)
{
while (STRIG == 1);
TR3=1;
while (count<90) ;
TR3=0;
K1=1;
adc = (unsigned long)(800/27*updata2[0]+updata1[0]/2211.84);
bcdchang ();
t1_buffer[11]=r0_buffer[4]<<4|r0_buffer[3];
t1_buffer[12]=r0_buffer[2]<<4|r0_buffer[1];
if (updata4[1]==0)
{
adc = (unsigned long)(8000/27*(updata4[0]-updata2[0])+updata3[0]/221.184-updata1[0]/221.184);
}
else adc = (unsigned long)(8000/27*(updata4[1]-updata2[0])+updata3[1]/221.184-updata1[0]/221.184);
bcdchang ();
t1_buffer[13]=r0_buffer[4]<<4|r0_buffer[3];
t1_buffer[14]=r0_buffer[2]<<4|r0_buffer[1];
adc= (unsigned long)dodata4[0];
bcdchang ();
t1_buffer[20]=r0_buffer[2]<<4|r0_buffer[1];
adc= (unsigned long)dodata4[1];
bcdchang ();
t1_buffer[21]=r0_buffer[2]<<4|r0_buffer[1];
adc= (unsigned long)dodata2[0];
bcdchang ();
t1_buffer[22]=r0_buffer[2]<<4|r0_buffer[1];
adc= (unsigned long)dodata2[1];
bcdchang ();
t1_buffer[23]=r0_buffer[2]<<4|r0_buffer[1];
adc= (unsigned long)updata4[0];
bcdchang ();
t1_buffer[24]=r0_buffer[2]<<4|r0_buffer[1];
adc= (unsigned long)updata4[1];
bcdchang ();
t1_buffer[25]=r0_buffer[2]<<4|r0_buffer[1];
adc= (unsigned long)updata2[0];
bcdchang ();
t1_buffer[26]=r0_buffer[2]<<4|r0_buffer[1];
adc= (unsigned long)updata2[1];
bcdchang ();
t1_buffer[27]=r0_buffer[2]<<4|r0_buffer[1];
}
//*******************************************************
void timetest4(void)
{
while (STRIG == 1);
TR3=1;
while (count<90) ;
TR3=0;
K1=1;
adc= (unsigned long)(800/27*dodata4[0]+dodata3[0]/2211.84);
bcdchang ();
t1_buffer[15]=r0_buffer[4]<<4|r0_buffer[3];
t1_buffer[16]=r0_buffer[2]<<4|r0_buffer[1];
if (dodata2[1]==0)
{
adc = (unsigned long)(8000/27*(dodata2[0]-dodata4[0])+dodata1[0]/221.184-dodata3[0]/221.184);
}
else adc = (unsigned long)(8000/27*(dodata2[1]-dodata4[0])+dodata1[1]/221.184-dodata3[0]/221.184);
bcdchang ();
t1_buffer[17]=r0_buffer[4]<<4|r0_buffer[3];
t1_buffer[18]=r0_buffer[2]<<4|r0_buffer[1];
adc= (unsigned long)dodata4[0];
bcdchang ();
t1_buffer[20]=r0_buffer[2]<<4|r0_buffer[1];
adc= (unsigned long)dodata4[1];
bcdchang ();
t1_buffer[21]=r0_buffer[2]<<4|r0_buffer[1];
adc= (unsigned long)dodata2[0];
bcdchang ();
t1_buffer[22]=r0_buffer[2]<<4|r0_buffer[1];
adc= (unsigned long)dodata2[1];
bcdchang ();
t1_buffer[23]=r0_buffer[2]<<4|r0_buffer[1];
adc= (unsigned long)updata4[0];
bcdchang ();
t1_buffer[24]=r0_buffer[2]<<4|r0_buffer[1];
adc= (unsigned long)updata4[1];
bcdchang ();
t1_buffer[25]=r0_buffer[2]<<4|r0_buffer[1];
adc= (unsigned long)updata2[0];
bcdchang ();
t1_buffer[26]=r0_buffer[2]<<4|r0_buffer[1];
adc= (unsigned long)updata2[1];
bcdchang ();
t1_buffer[27]=r0_buffer[2]<<4|r0_buffer[1];
}
//*******************************************************
void test1(void)
{
delay(n);
adch();
if (admn<298) //小于16V
{
K2=0;
delay(n); //47.56ms
adch();
adc=(unsigned long)admn*3/100; //*61/6/2*2470/4096/100
K2=1;
}
else adc=(unsigned long)(admn*337/500); //*1342/6/2*2470/4096/100
K3=1;
bcdchang ();
t1_buffer[27]=r0_buffer[4]<<4|r0_buffer[3];
t1_buffer[28]=r0_buffer[2]<<4|r0_buffer[1];
}
//*******************************************************
void test2(void)
{
test11();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -