⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 caiji.c

📁 AL157型灵达电源单片机通讯程序.通过协议获得电源当前的状态.
💻 C
字号:
#define OS_GLOBALS
#include <variable.H>

void Init_sys(void) 
{
    memset(Rcv, 0, sizeof(Rcv));
	memset(Snd, 0, sizeof(Snd));
	MakeCrcTable();
    RELAY1=0;
	RELAY2=0;
	SCON=0x50;
	TMOD=0x21;
	IT0=0; IT1=0;
	TH0=0xEE; TL0=0x00;  // T0 = 12/11059200 * (0x10000 - TH_TL) = 5.00ms

    RS485SndDelTime = 0;
	TR=0;
	Address=D_ADDR & 0x0f;

	ET1=0;
#ifdef PARACOM0
	TH1=PARACOM0;//  0xF4:2400 0xFA:4800; 0xFD:9600 freq =(11059200/12 / (0x100-TH1))/32= 9600
	TR1=1;
	ES=1;
#else
	ES=0;
#endif

#ifdef PARACOM1
	LCR1=0x80; 		
	D_SER1=PARACOM1;
	IER1=0x00; 		 
	LCR1=0x03; 	// 0x03: n,8,1;  0x07:n,8,2	
	IER1=0x01;
	EX0=1;
#else
	EX0=0;
#endif

#ifdef PARACOM2
	LCR2=0x80;
	D_SER2=PARACOM2;
	IER2=0x00;
	LCR2=0x03;	// stop_bit is 1
	IER2=0x01;
	EX1=1;
#else
	EX1=0;
#endif

	ST_AD=0;
	TR0=1; 	ET0=1;	EA=1;
}


void StartAD(void)
{
unsigned char xdata cTmp;
	ST_AD=1;
	cTmp=0;
	while (cTmp<20) cTmp++;
	ST_AD=0;
}

unsigned char SaveYcData(unsigned char Chn)
{
    float data ftmp;
    unsigned char data i,k,cTmp;
    static unsigned char data TempPos=0;
    static unsigned char xdata AD_Temp[AVERTIMES];
	AD_Temp[TempPos++] = D_0809;
	if (TempPos < AVERTIMES) return 0;
	TempPos=0;
	for (k=0; k<AVERTIMES-1; k++ ) {
		for (i=k+1; i<AVERTIMES; i++) {
			if ( AD_Temp[k] < AD_Temp[i] ) {
				cTmp=AD_Temp[k];
				AD_Temp[k]=AD_Temp[i];
				AD_Temp[i]=cTmp;
			}
		}
	}
	k=AVERTIMES / 2 ;
	
	ftmp = AD_Temp[k] + AD_Temp[k-1] + AD_Temp[k+2] + AD_Temp[k+1];
	YcData[Chn]= ftmp / 4.0;
	return 1;
}

void ChannelSel(unsigned char Chn)
{
    AD_A0= Chn & 1;
    AD_A1= Chn & 2;
    AD_A2= Chn & 4;
}


void main(void) 
{
unsigned char data cTmp1, cTmp2, AdOver, Ad_Loop;
	Init_sys();
	StartAD();
	while(1) {
		if (enPoll == 1) {
			enPoll = 0;
#ifdef  ELTECK_AC
			AcProcess();
#endif
#ifdef ELTECK_DC
			DcProcess();
#endif
		}
		Std_Process(QZJ);

		if (AdOver < 4) { 
 			AdOver++;
 		}
 		else {
 			if ( SaveYcData(Ad_Loop) ) Ad_Loop=(Ad_Loop+1) % 8;
			ChannelSel(Ad_Loop);
			StartAD();
			AdOver=0;
		}

		cTmp1=YX1;  cTmp2= YX2;
		if ( (LastYx1 != cTmp1) || (LastYx2 != cTmp2) ){
			LastYx1 = cTmp1;  LastYx2 = cTmp2;
		    SendYxToQZJ(QZJ);
		}
	}  		
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -