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

📄 protocol.i

📁 使用avr--cc2420模块程序,需要原理图的联系 QQ:120304948
💻 I
📖 第 1 页 / 共 2 页
字号:
				{
					CheckSum += (unsigned char)PROTOCOL_TEMP[nTempLoop + nSync];
				}
		
				if(CheckSum == 0xFF)
				{					
					switch((unsigned char) PROTOCOL_TEMP[nSync + 3])
					{
					case 0x22:
						SetThreshold();
						break;
					case 0x24:
						ReadThreshold();
						break;
					case 0x26:
						SetMobile();
						break;
					case 0x28:
						SetClock();
						break;
					case 0x2A:
						break;
					case 0x2C:
						//waiting for reply
						ConfirmMobilePhone();
						break;
					case 0x2E:
						//waiting for reply
						ConfirmAlarmValue();
						break;
					case 0x44:
						//waiting for reply
						ConfirmAlarmData();
						break;
					}
					
					PROTOCOL_POINTER = 0;
					nSync = 0;
					continue;
				}
			}
		}
		
		if(PROTOCOL_POINTER > 40)
		{
			PROTOCOL_POINTER = 0;
			nSync = 0;
		}		
		
		if(PROTOCOL_TEMP[PROTOCOL_POINTER] == (BYTE)0x16)
		{
			if((PROTOCOL_POINTER - nSync) >= nPacketLength)
				nSync = nLoop + PROTOCOL_POINTER;
		}
		
		PROTOCOL_POINTER ++;		
	}
}

unsigned char validateID()
{
	unsigned int nID;
	unsigned char *pTemp;
	unsigned int ntemp;

	pTemp = (unsigned char*)&ntemp;

	*(pTemp + 0) = PROTOCOL_TEMP[nSync + 4];
	*(pTemp + 1) = PROTOCOL_TEMP[nSync + 5];
	nID = MY_ID;

	if(nID == ntemp)
	{
		my_id_arr[0] = *(pTemp + 0);
		my_id_arr[1] = *(pTemp + 1);
		return 1;
	}
	else
	{
		return 0;
	}	
}


void SetThreshold()
{
	unsigned char szreply[30];
	unsigned int nloop = 0;
	unsigned char szSum = 0;
	
//	unsigned char *pTemp = NULL;
//	unsigned int nTemp = 0;
	
	if(!validateID())
		return;

	rtc_set_flag = 1;
	memset(szreply, 0x00, 30);


	//send reply
	szreply[0] = 0x16;
	szreply[1] = 0x00;
	szreply[2] = 0x03;
	szreply[3] = 0xA2;
	szreply[4] = my_id_arr[0];
	szreply[5] = my_id_arr[1];

	szSum = 0x00;
	for(nloop = 1; nloop < 6; nloop ++)
	{
		szSum += szreply[nloop];
	}
	szreply[6] = 0xFF - szSum;

	SerialPortWrite(szreply, 7);
	rtc_set_flag = 0;
}

void ReadThreshold()
{
	unsigned char szreply[40];
	unsigned char szsum = 0x00;
	unsigned int nloop;
//	unsigned char *pTemp;
//	unsigned int ntemp;

	if(!validateID())
		return;

	memset(szreply, 0x00, 40);

	szreply[0] = 0x16;
	szreply[1] = 0x00;
	szreply[2] = 0x15;
	szreply[3] = 0xA4;
	szreply[4] = my_id_arr[0];
	szreply[5] = my_id_arr[1];
	

	szsum = 0x00;
	for(nloop = 1; nloop < 22; nloop++)
	{
		szsum += szreply[nloop];
	}
	szreply[22] = 0xFF - szsum;
	
	SerialPortWrite(szreply, 23);
}

void SetMobile()
{
	unsigned char szreply[20];
	unsigned int nloop = 0;
	unsigned char szSum = 0;
	if(!validateID())
		return;
		
	rtc_set_flag = 1;
	MobilePhone1[0] = PROTOCOL_TEMP[nSync + 6];
	MobilePhone1[1] = PROTOCOL_TEMP[nSync + 7];
	MobilePhone1[2] = PROTOCOL_TEMP[nSync + 8];
	MobilePhone1[3] = PROTOCOL_TEMP[nSync + 9];
	MobilePhone1[4] = PROTOCOL_TEMP[nSync + 10];
	MobilePhone1[5] = PROTOCOL_TEMP[nSync + 11];
	MobilePhone1[6] = PROTOCOL_TEMP[nSync + 12];
	MobilePhone1[7] = PROTOCOL_TEMP[nSync + 13];
	MobilePhone1[8] = PROTOCOL_TEMP[nSync + 14];
	MobilePhone1[9] = PROTOCOL_TEMP[nSync + 15];
	MobilePhone1[10] = PROTOCOL_TEMP[nSync + 16];
	MobilePhone1[11] = 0x00;
	MobilePhone2[0] = PROTOCOL_TEMP[nSync + 17];
	MobilePhone2[1] = PROTOCOL_TEMP[nSync + 18];
	MobilePhone2[2] = PROTOCOL_TEMP[nSync + 19];
	MobilePhone2[3] = PROTOCOL_TEMP[nSync + 20];
	MobilePhone2[4] = PROTOCOL_TEMP[nSync + 21];
	MobilePhone2[5] = PROTOCOL_TEMP[nSync + 22];
	MobilePhone2[6] = PROTOCOL_TEMP[nSync + 23];
	MobilePhone2[7] = PROTOCOL_TEMP[nSync + 24];
	MobilePhone2[8] = PROTOCOL_TEMP[nSync + 25];
	MobilePhone2[9] = PROTOCOL_TEMP[nSync + 26];
	MobilePhone2[10] = PROTOCOL_TEMP[nSync + 27];
	MobilePhone2[11] = 0x00;
	MobilePhone3[0] = PROTOCOL_TEMP[nSync + 28];
	MobilePhone3[1] = PROTOCOL_TEMP[nSync + 29];
	MobilePhone3[2] = PROTOCOL_TEMP[nSync + 30];
	MobilePhone3[3] = PROTOCOL_TEMP[nSync + 31];
	MobilePhone3[4] = PROTOCOL_TEMP[nSync + 32];
	MobilePhone3[5] = PROTOCOL_TEMP[nSync + 33];
	MobilePhone3[6] = PROTOCOL_TEMP[nSync + 34];
	MobilePhone3[7] = PROTOCOL_TEMP[nSync + 35];
	MobilePhone3[8] = PROTOCOL_TEMP[nSync + 36];
	MobilePhone3[9] = PROTOCOL_TEMP[nSync + 37];
	MobilePhone3[10] = PROTOCOL_TEMP[nSync + 38];
	MobilePhone3[11] = 0x00;

	//send reply
	memset(szreply, 0x00, 20);
	szreply[0] = 0x16;
	szreply[1] = 0x00;
	szreply[2] = 0x03;
	szreply[3] = 0xA6;
	szreply[4] = my_id_arr[0];
	szreply[5] = my_id_arr[1];

	szSum = 0x00;
	for(nloop = 1; nloop < 6; nloop ++)
	{
		szSum += szreply[nloop];
	}
	szreply[6] = 0xFF - szSum;

	SerialPortWrite(szreply, 7);
	rtc_set_flag = 0;
}

void SetClock()
{
	unsigned char nyear, nmonth, nday, nhour, nmin, nsec;
	unsigned char szreply[20];
	unsigned int nloop = 0;
	unsigned char szSum = 0;	
	unsigned char szBuffer[8];
	if(!validateID())
		return;

	memset(szreply, 0x00, 20);
	
	nyear = PROTOCOL_TEMP[nSync + 6];
	nmonth = PROTOCOL_TEMP[nSync + 7];
	nday = PROTOCOL_TEMP[nSync + 8];
	
	nhour = PROTOCOL_TEMP[nSync + 9];
	nmin = PROTOCOL_TEMP[nSync + 10];
	nsec = PROTOCOL_TEMP[nSync + 11];

	szBuffer[0] = hex2bcd(nsec);
	szBuffer[1] = hex2bcd(nmin);
	szBuffer[2] = hex2bcd(nhour);	
	szBuffer[3] = hex2bcd(nday);	
	szBuffer[4] = hex2bcd(nmonth);	
	szBuffer[5] = 0x00;	
	szBuffer[6] = hex2bcd(nyear);
	szBuffer[7] = 0x00;
	
	rtc_set_flag = 1;
    v_Set1302(szBuffer);
	rtc_set_flag = 0;

	//send reply
	szreply[0] = 0x16;
	szreply[1] = 0x00;
	szreply[2] = 0x03;
	szreply[3] = 0xA8;
	szreply[4] = my_id_arr[0];
	szreply[5] = my_id_arr[1];

	szSum = 0x00;
	for(nloop = 1; nloop < 6; nloop ++)
	{
		szSum += szreply[nloop];
	}
	szreply[6] = 0xFF - szSum;

	SerialPortWrite(szreply, 7);
}

void ConfirmMobilePhone()
{
	
	if(!validateID())
		return;
		
	bMobilePhone = 0;
//#error " 清除手机设置上传标识"
}

void ConfirmAlarmValue()
{
	if(!validateID())
		return;
		
	bAlarmValue = 0;
//#error "清除告警值上传标识"
}

void ConfirmAlarmData()
{
	if(!validateID())
		return;
		
	bAlarmData = 0;
//#error "清除告警信息上传标识"
}

void uploadRealtimeData()
{
	unsigned char szreply[60];
	unsigned char szsum;
	unsigned char nloop;
	unsigned char *pTemp;
	unsigned int nTemp;
	unsigned int nmy_id; 
	

	memset(szreply, 0x00, 60);

	nmy_id = MY_ID;
	pTemp = (unsigned char*)&nmy_id;
	szreply[0] = 0x16;
	szreply[1] = 0x00;
	szreply[2] = 0x34;
	szreply[3] = 0xC2;
	szreply[4] = *(pTemp + 0);
	szreply[5] = *(pTemp + 1);
    szreply[6] = 0x00;

	szreply[7] = CLK_YEAR;
	szreply[8] = CLK_MONTH;
	szreply[9] = CLK_DAY;
	szreply[10] = CLK_HOUR;
	szreply[11] = CLK_MIN;
	szreply[12] = CLK_SEC;
	
	szreply[13] = movex;
	szreply[14] = movey;
	szreply[15] = movez;

	nTemp = adcx;
	pTemp = (unsigned char*)&nTemp;
	szreply[16] = *(pTemp + 0);
	szreply[17] = *(pTemp + 1);

	nTemp = adcy;
	pTemp = (unsigned char*)&nTemp;
	szreply[18] = *(pTemp + 0);
	szreply[19] = *(pTemp + 1);

	nTemp = adcz;
	pTemp = (unsigned char*)&nTemp;
	szreply[20] = *(pTemp + 0);
	szreply[21] = *(pTemp + 1);
	
	szreply[22] = (unsigned char)g_itemp_c[0];
	szreply[23] = (unsigned char)g_itemp_c[1];
	szreply[24] = (unsigned char)g_itemp_c[2];
	szreply[25] = (unsigned char)g_itemp_c[3];
	szreply[26] = (unsigned char)g_itemp_c[4];
	szreply[27] = (unsigned char)g_itemp_c[5];
	szreply[28] = (unsigned char)g_itemp_c[6];
	szreply[29] = (unsigned char)g_itemp_c[7];
	
	szreply[30] = g_itemp_c[8];        //g_itemp_c

	szreply[31] = my_usart1_data[0];
	szreply[32] = my_usart1_data[1];
	szreply[33] = my_usart1_data[2];
	szreply[34] = my_usart1_data[3];
	szreply[35] = my_usart1_data[4];
	szreply[36] = my_usart1_data[5];
	szreply[37] = my_usart1_data[6];
	szreply[38] = my_usart1_data[7];
	szreply[39] = my_usart1_data[8];

	szreply[40] = my_usart1_data[9];
	szreply[41] = my_usart1_data[10];
	szreply[42] = my_usart1_data[11];
	szreply[43] = my_usart1_data[12];
	szreply[44] = my_usart1_data[13];
	szreply[45] = my_usart1_data[14];
	szreply[46] = my_usart1_data[15];
	szreply[47] = my_usart1_data[16];
	szreply[48] = my_usart1_data[17];
	szreply[49] = my_usart1_data[18];

	szreply[50] = my_usart1_data[19];
	szreply[51] = my_usart1_data[20];
	szreply[52] = my_usart1_data[21];
	szreply[53] = my_usart1_data[22];
	szreply[54] = my_usart1_data[23];

	szsum = 0x00;
	for (nloop = 1; nloop < 55; nloop ++)
	{
		szsum += szreply[nloop];
	}

	szreply[55] = 0xFF - szsum;

	SerialPortWrite(szreply, 56);
}

void uploadAlarmData(unsigned char value)
{
	unsigned char szreply[40];
	unsigned char szsum;
	unsigned char nloop;
	unsigned char *pTemp;
//	unsigned int nTemp;
	unsigned int nmy_id;

	memset(szreply, 0x00, 40);

	nmy_id = MY_ID;
	pTemp = (unsigned char*)&nmy_id;
	szreply[0] = 0x16;
	szreply[1] = 0x00;
	szreply[2] = 0x18;
	szreply[3] = 0xC4;
	szreply[4] = *(pTemp + 0);
	szreply[5] = *(pTemp + 1);

	szreply[6] = CLK_YEAR;
	szreply[7] = CLK_MONTH;
	szreply[8] = CLK_DAY;
	szreply[9] = CLK_HOUR;
	szreply[10] = CLK_MIN;
	szreply[11] = CLK_SEC;
	
	szreply[15] = value;
	
	szsum = 0x00;
	for (nloop = 1; nloop < 16; nloop ++)
	{
		szsum += szreply[nloop];
	}

	szreply[16] = 0xFF - szsum;

	SerialPortWrite(szreply, 17);
}

void uploadAlarmValue()
{
	unsigned char szreply[40];
	unsigned char szsum;
	unsigned char nloop;
	unsigned char *pTemp;
//	unsigned int nTemp;
	unsigned int nmy_id; 
	
	memset(szreply, 0x00, 40);

	nmy_id = MY_ID;
	pTemp = (unsigned char*)&nmy_id;
	szreply[0] = 0x16;
	szreply[1] = 0x00;
	szreply[2] = 0x15;
	szreply[3] = 0xAE;
	
	szreply[4] = *(pTemp + 0);
	szreply[5] = *(pTemp + 1);


	szsum = 0x00;
	for (nloop = 1; nloop < 10; nloop ++)
	{
		szsum += szreply[nloop];
	}

	szreply[10] = 0xFF - szsum;

	SerialPortWrite(szreply, 11);

//#error "设置等待告警值返回标识"	
}

void uploadMobile()
{
	unsigned char szreply[30];
	unsigned char szsum;
	unsigned char nloop;
	unsigned char *pTemp;
	unsigned int nmy_id;

	memset(szreply, 0x00, 30);

	nmy_id = MY_ID;
	pTemp = (unsigned char*)&nmy_id;
	szreply[0] = 0x16;
	szreply[1] = 0x00;
	szreply[2] = 0x0E;
	szreply[3] = 0xAC;
	szreply[4] = *(pTemp + 0);
	szreply[5] = *(pTemp + 1);

	szsum = 0x00;
	for (nloop = 1; nloop < 17; nloop ++)
	{
		szsum += szreply[nloop];
	}

	szreply[17] = 0xFF - szsum;

	SerialPortWrite(szreply, 18);
}

/* bcd to hex */
unsigned int bcd2hex(BYTE bdata)
{
    unsigned int tmp;
    tmp = (((unsigned int)(bdata >> 4) * 10) + (unsigned int)(bdata & 0x0f));
    return tmp;
}

/* hex to bcd */
unsigned char hex2bcd(unsigned char hdata)
{
    unsigned char bdata;
    unsigned char tmp;

    tmp = hdata % 100;
    bdata=(unsigned char)((unsigned int)hdata) / 100 << 8;
    bdata=(unsigned char)(bdata | tmp / 10 << 4);
    bdata=(unsigned char)(bdata | tmp % 10);
    return bdata;
}

⌨️ 快捷键说明

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