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

📄 function.c

📁 交直流灵达电源单片机通讯程序,通过协议获得电源当前状态.
💻 C
字号:
#define FUNC_GLOBALS

#include <variable.H>

unsigned char Send_To_SndBuffer(unsigned char Port, unsigned char len, unsigned char xdata *buff)
{
struct Serial_snd xdata *Com;
unsigned char data i;
	Com = Snd + Port;
	if(Com->Tail < Com->Head) {
		if(((unsigned int)Com->Tail + len) >= Com->Head)
			return 0;
		else {
			for(i = 0; i < len; i++)
				Com->mData[Com->Tail++]=buff[i];
			return 1;
		}
	}
	else if (((unsigned int)LEN_SND - Com->Tail + Com->Head) > len) {
		for(i = 0; i < len; i++) {
			Com->mData[Com->Tail++] = buff[i];
			#if (LEN_SND !=256)
				Com->Tail = Com->Tail % LEN_SND;
			#endif			
		}
		return 1;
	}
	else
		return 0;

}

void MakeCrcTable(void)
{
unsigned char data j;
unsigned int data i, CRC;
    for (i = 0; i< 256; i++) {
        CRC = i;
        for (j = 0; j<8; j++) {
            if (CRC & 1) 
                CRC = (CRC >> 1) ^ 0xA001;  // 0x8005
            else 
                CRC >>=1;
        }
        crctable[i] = CRC;
    }
}

void SendStart(unsigned char Port)
{
	if (!Snd[Port].Sending) {
		Snd[Port].Sending = 1;
    	switch(Port) {
    		case 0: 
    			RS485SndDelTime = DELAYSEND;
                TR = 1;
    			break;
    		case 1: 
    			D_SER1 = Snd[1].mData[Snd[1].Head++];
    			Snd[1].Head = Snd[1].Head % LEN_SND;
    			IER1 = 0x03; 	// bit0: receive valid;  bit1:  send buffer empty 
    			break;
    		case 2: 
    			D_SER2 = Snd[2].mData[Snd[2].Head++];
    			Snd[2].Head = Snd[2].Head % LEN_SND;
    			IER2 = 0x03; 	// bit0: receive valid;  bit1:  send buffer empty 
    			break;
    	} 
    }
}

⌨️ 快捷键说明

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