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

📄 main.c

📁 单片机通讯程序,从单片机SAT设备中获得设备状态.
💻 C
字号:
//pragma ot(0)
#define OS_GLOBALS
#include "Macro.h"
#include "Main.h"

unsigned char data mLastYx1,mLastYx2;
unsigned char data mainTmp;

void main(void) 
{
static unsigned char mCnt;

	AdOver=0;
	Init_sys();
	ChannelSel(Ad_Loop);
	StartAD();
	mCnt = 0;
	while(1) {
		if (mTimer) {
			mTimer =0;
			if (Snd[0].SendTime !=0) {
				Snd[0].SendTime--;
				if (Snd[0].SendTime == 0) {
					SBUF=Snd[0].Data[ Snd[0].Head++ ];
					Snd[0].Head = Snd[0].Head % sizeof(Snd[0].Data);
				}
			}
		}
		Std_Process(0);

		if (Port1Style) {
			Port1Process();
		}
		else {
			Std_Process(1);
		}

		if (Port2Style) {
			Port2Process();
		}
		else {
			Std_Process(2);
		}
		if (AdOver < 4) {
 			AdOver++;
 		}
 		else {
 			if ( SaveData_AD(Ad_Loop)) Ad_Loop=(Ad_Loop+1) % 8;
			ChannelSel(Ad_Loop);
			StartAD();
			AdOver=0;
		}
		if ( (LastYx1 != YX1) || (LastYx2 != YX2) ){
			mCnt++;
			if (mLastYx1 != YX1) mCnt = 0;
			mLastYx1 = YX1;
			if (mLastYx2 != YX2) mCnt = 0;
			mLastYx2 = YX2;
			if (mCnt > 10) {
				LastYx1 = mLastYx1;  LastYx2 = mLastYx2;
                if (Port1Style == 0) SendYxYcToEXT(1);
                if (Port2Style == 0) SendYxYcToEXT(2);
			}  
		}
		else {
			mCnt = 0;
		}
	}  		
}

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

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

unsigned char SaveData_AD(unsigned char Chn)
{
static unsigned char data TempPos=0;
static unsigned char xdata AD_Temp[AVERTIMES];
unsigned char data i,k,cTmp;
	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;
			}
		}
	}
	AD_Data[Chn] = (unsigned int)AD_Temp[AVERTIMES / 2] + AD_Temp[AVERTIMES / 2 - 1]  ;
	return 1;
}

void Init_sys(void) 
{

unsigned char xdata *pt;
unsigned int data iTmp;
unsigned char data k;
	for (k=0; k<3; k++){
		pt=(unsigned char xdata*)&Rcv[0];
		for (iTmp=0; iTmp<sizeof(Rcv); iTmp++ ) 	*(pt++)=0;
		pt=(unsigned char xdata*)&Snd[0];
		for (iTmp=0; iTmp<sizeof(Snd); iTmp++ ) 	*(pt++)=0;
	}
	make_crctable();

	SetCommPort();
	SCON=0x70;
	TMOD=0x21;
//	PCON = 0x80;		// 0x80:19200Bps
	IT0=0; IT1=0;
	TH0=0xF2; TL0=0xAB;  
	TH1=In_BAUD4800;       //  0xFA: 4800;  0xFD: 9600/19200
	TR=0;
	Address=D_ADDR & 0x1f;
	RELAY1 = 1;
	RELAY2 = 1;
	iDelay = 0;
	TR0=1; TR1=1;
	EX0=1; EX1=1; ET0=1; ET1=0; ES=1;
	EA=1;
}


void SetCommPort(void)
{
unsigned int data i;
unsigned int data CRC;
unsigned int data iTmp;
unsigned char xdata tmpBuff[sizeof(Port1Cmd) + sizeof(Port2Cmd) + 20];
	ReadEE(tmpBuff, sizeof(Port1Cmd) + sizeof(Port2Cmd) + 11);
	Port1Baud = Ext_BAUD4800;
	Port1Mode = 3;
	Port2Baud = Ext_BAUD4800;
	Port2Mode = 3;
	Port1Style = 0;  // 1:协议转发
	Port2Style = 0;
	if (tmpBuff[0] == 0x08) {  // port * 2 { style, 9600, N/M/P/E, CmdNum}
		CRC = 0;
		iTmp = tmpBuff[4] * LENCMD + tmpBuff[8] * LENCMD + 11;   // 11 = 1 + 4 + 4 + 2(crc)
		for (i=0; i<iTmp; i++)
			UPDATA_CRC(CRC,tmpBuff[i]);
		if (CRC == 0){
			if (tmpBuff[1] == 1) {
				Port1Style = 1;
				Port1Baud = tmpBuff[2];
				Port1Mode = tmpBuff[3];
				Port1Cmd[0] = tmpBuff[4];
				memcpy(&Port1Cmd[1],&tmpBuff[9],tmpBuff[4] * LENCMD);
			}
			if (tmpBuff[5] == 1) {
				Port2Style = 1;
				Port2Baud = tmpBuff[6];
				Port2Mode = tmpBuff[7];
				Port2Cmd[0] = tmpBuff[8];
				memcpy(&Port2Cmd[1],&tmpBuff[9 + tmpBuff[4] * LENCMD],tmpBuff[8] * LENCMD);
			}
		}
	}
	LCR1=0x80; 		  LCR2=0x80;
	D_SER1=Port1Baud; D_SER2=Port2Baud;   
	IER1=0x00; 		  IER2=0x00; 
	LCR1=Port1Mode;   LCR2=Port2Mode; 
	IER1=0x01; 		  IER2=0x01;
}

⌨️ 快捷键说明

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