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

📄 cmdprocess.c.bak

📁 一个以前开发的实际应用的交通灯控制器程序
💻 BAK
字号:
#include "iic.h"
//2007-3-21 20:40
//2007-3-29 20:03

#define GET(x)	RecBuf[(x)+3]
//#define MsgErr()	{UART_Ack(REC_OK);return;}
#define ASSERT(x,y)	{if(RecBuf[(x)+3]>=(y)) {UART_Ack(REC_OK);return;}}
	//在CmdProcess中使用的宏:保证x<y,否则发送数据出错信息并退出该函数。
unsigned char CheckCRC()
{
	unsigned char xdata i,k;
	i=RecCnt-2;//CRC位置
	k=RecBuf[i-1];
	while(i)
	{
		i--;
		k=k^RecBuf[i];	
	}
	i=RecCnt-2;//CRC位置
	if(k==RecBuf[i])
		return(1);
	else
		return(0);
}



void CmdProcess()
{
	unsigned int xdata i,k;
	if((RecBuf[0]!=MacAddr)&&(RecBuf[0]!=0x00))
		return;//非本机且非广播,返回
	i=CheckCRC();
	if(i==0)
	{//CRC出错
		UART_Ack(REC_CRC_ERR);
		return;
	}
	switch(RecBuf[2])//信息部
	{
		case CMD_IDT://绿色通道
		{
			ASSERT(0,9)
			i=GET(0);
			if(i==0)
			{//禁止通道
				MeterSta=MSTA_AUTO;
				HourUpdate();//更新所有
				PhaseSwitch();
			}
			else if(i<=8)
			{
				i-=1;
				MeterSta=MSTA_GREENWAY;
				CheDaoBuf[2]=GreenWay[i][0];
				CheDaoBuf[1]=GreenWay[i][1];
				CheDaoBuf[0]=GreenWay[i][2];
				SecondCnt=0;
			}
		}
			break;
		case CMD_PHASE://相位
		{
			ASSERT(0,2)//方案号
			ASSERT(1,12)//时段号
			ASSERT(2,8)//相位号
			ASSERT(6,255)//绿灯时间
			ASSERT(7,255)//绿闪时间
			i=GET(6);
			k=GET(7);
			if(i<k)//绿灯时间必需大于绿闪时间
			{
				UART_Ack(MSG_ERR);
				return;
			}
			ASSERT(8,255)//YT
			ASSERT(9,255)//RT
			//存储相位
		}
			break;
		case CMD_PHASE_GROUP://相位组
			break;
		case CMD_SYSTEM_TIME://设置时间
		{
			ASSERT(0,100)//年
			ASSERT(1,13)//月
			ASSERT(2,32)//日
			ASSERT(3,24)//小时
			ASSERT(4,60)//分钟
			ASSERT(5,60)//秒
			//
			
		}
			break;
		case CMD_ADD_HOLIDAY://增加节假日
		{
			ASSERT(0,100)//年
			ASSERT(1,13)//月
			ASSERT(2,32)//日
		}
			break;
		case CMD_DEL_HOLIDAY://删除节假日
		{
			ASSERT(0,100)//年
			ASSERT(1,13)//月
			ASSERT(2,32)//日
		}
			break;
		case CMD_ENABLE_HOLIDAY://允许/禁止节假日
			ASSERT(0,2)//
			break;
		case CMD_SET_NODE_ID://设置本机ID
		{
			ASSERT(0,255)//小于255,大于0
			i=GET(0);
			if(i==0)
			{
				UART_Ack(MSG_ERR);
				return;	
			}
		}
			break;
		case CMD_RESTORE://恢复系统默认
			break;
		default:
			UART_Ack(MSG_ERR);
			return;
	}

	UART_Ack(REC_OK);//信息正确解释
}

⌨️ 快捷键说明

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