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

📄 debug.c

📁 16为单片机实现调制解调器功能
💻 C
📖 第 1 页 / 共 5 页
字号:
//********************** 使用 RS232 作为调试口 ****************
#include "msp430x14x.h"
#include "main.h"

//********************** extern 区****************extern 区****************
//********************** extern 区****************extern 区****************
//form main.c
//用作为 16 个位!BOOLEAN 变量来使用
extern unsigned int g_intMark;
extern unsigned int g_intMarkA;
extern unsigned int intTBCount_50ms;
extern unsigned char g_chSecond, g_chMinute, g_chHour, g_chDay, g_chMonth, g_chYear;
//form flash.c
extern unsigned char WriteID(unsigned char chFirstLen, unsigned char *chParamBuf, unsigned char chLen, unsigned char chMode);
extern void Write_DoorInfo_AccordingNo(unsigned int iTempSensorNo, unsigned char *pInfoData);
//from commPC.c
extern unsigned char g_chSendPCBuf_Stat;
extern unsigned char g_chMainPushReport_Stat;
extern unsigned char g_chSendPCHead, g_chSendPCTail;
extern unsigned char g_chPushReportDetail_SubStat;
extern unsigned char g_chReceivePCHead, g_chReceivePCTail;
extern unsigned char g_chReceivePCBuf_Stat;
extern unsigned char g_chPushBit0to7;
//from dtmf.c
extern unsigned char g_chBuildDTMF_Stat;
//from innerComm.c
extern unsigned char g_chFS_Status;
extern unsigned char g_chFS_SelfCheck_Status;
extern unsigned char g_chGP_SelfCheck_Status;
extern unsigned char g_chGP_Status;
extern unsigned char g_chCable_Status;

extern unsigned char g_chInnerCommHead;//
extern unsigned char g_chInnerCommTail;
extern unsigned char g_chInnerCommSingleChar;
extern unsigned char g_chMainInnerComm_Stat;

extern unsigned int g_intGP_Current[8];
extern unsigned char g_chInnerCommSingleChar;
extern unsigned char g_chInnerCommSendHead;//
extern unsigned char g_chInnerCommSendTail;
extern unsigned char g_chInnerCommSendBuf[MacroInnerCommSendBufMax];
extern void AddCheckSum(unsigned char chLen);
extern unsigned char g_chInnerCommSubSingleChar;
extern unsigned int g_intGP_FixedCurrent[8];

extern unsigned char g_chFS_Mark;//----按位表明1-8列的FS的要等待发送的告警或恢复状态
extern unsigned char g_chFS_SelfCheck_Mark;//----按位表明1-8列的FS的要等待发送的自检告警或恢复状态
extern unsigned char g_chGP_Mark;//----按位表明1-8列的工频传感器的要等待发送的告警或恢复状态
extern unsigned char g_chGP_SelfCheck_Mark;//----按位表明1-8列的工频传感器的要等待发送的自检告警或恢复状态
extern unsigned char g_chCable_Mark;//----按位表明1-8列的主干电缆的要等待发送的告警或恢复状态

extern unsigned char g_chFS_Alert;//----按位表明1-8列的FS的要等待发送的告警状态
extern unsigned char g_chFS_SelfCheck_Alert;//----按位表明1-8列的FS的要等待发送的自检告警状态
extern unsigned char g_chGP_Alert;//----按位表明1-8列的工频传感器的要等待发送的告警状态
extern unsigned char g_chGP_SelfCheck_Alert;//----按位表明1-8列的工频传感器的要等待发送的自检告警状态
extern unsigned char g_chCable_Alert;//----按位表明1-8列的主干电缆的要等待发送的告警状态

extern unsigned char g_chFS_Restore;//----按位表明1-8列的FS的要等待发送的恢复状态
extern unsigned char g_chFS_SelfCheck_Restore;//----按位表明1-8列的FS的要等待发送的自检恢复状态
extern unsigned char g_chGP_Restore;//----按位表明1-8列的工频传感器的要等待发送的恢复状态
extern unsigned char g_chGP_SelfCheck_Restore;//----按位表明1-8列的工频传感器的要等待发送的自检恢复状态
extern unsigned char g_chCable_Restore;//----按位表明1-8列的主干电缆的要等待发送的恢复状态
//from env.c
extern unsigned char g_chTemperature;
extern unsigned char g_chTemperatureBoard;
extern unsigned char g_chDoorStat;//0-门关 1-密码开门 2-非法开门 3-中心开门 4-禁用门禁 5-启用 6-门开
extern unsigned char g_chDoorStatTemp;//门状态变化中的量
extern unsigned char g_chOpenDoorID[3];//记录开门人,保留的是索引号
extern unsigned char g_chDC;
extern unsigned char g_chBadGas;
extern unsigned char g_chTheTwoAD;
extern unsigned char g_chEnv_Free;
extern unsigned char g_chEnv_Status;//-按位表明1-2通道的环境的告警/恢复状态

extern unsigned char g_chEnv_Mark;// -------按位表明1-2通道的环境的要等待发送告警或恢复状态
						//3--5位为三路环境模拟量:温度1,有害气体,48V,第6位为门系统
extern unsigned char g_chEnv_Alert;// -------按位表明1-2通道的环境的要等待发送告警状态
						//3--5位为三路环境模拟量:温度1,有害气体,48V,第6位为门系统
extern unsigned char g_chEnv_Restore;// -------按位表明1-2通道的环境的要等待发送恢复状态
						//3--5位为三路环境模拟量:温度1,有害气体,48V,第6位为门系统
extern unsigned char g_chEnv_LowHign;//对于 象		温度1		48V 要分高还是低告警!
//温度
extern unsigned char g_chTemperatureAlert,g_chTemperatureRestore;
//3 个 A/D 处理		
extern unsigned char g_chDCAlert,g_chDCRestore;//P6。2
extern unsigned char g_chBadGasAlert,g_chBadGasRestore;//P6。0

//from lcd.c
extern unsigned char g_chLcdDriveHead;
extern unsigned char g_chLcdDriveTail;
extern unsigned char g_chLcdDrive_Stat;
//from lcdshow.c
extern unsigned char g_chMainLcdProcess_Stat;
//from ds1820drv.c
extern void DS1820_Read_ID_MultiChannel(unsigned char chMCUPort, unsigned char DataBit, unsigned char *pDS1820ID);
extern unsigned char Read_DoorID(void);
extern void Write_DoorID(unsigned char *chP);


//********************** extern 区****************extern 区****************
//********************** extern 区****************extern 区****************
//********************** const 区****************const 区****************
//********************** const 区****************const 区****************
const unsigned char c_chShow_2[] = "按 1  查询或修改参数\n\r";
const unsigned char c_chShow_3[] = "按 2  查询系统状态\n\r";
const unsigned char c_chShow_4[] = "按 3  查询温度1 ROM-ID\n\r";
const unsigned char c_chShow_5[] = "按 4  查询温度2 ROM-ID\n\r";
const unsigned char c_chShow_6[] = "按 5  查询电子纽扣 ROM-ID\n\r";
const unsigned char c_chShow_7[] = "按 6  读电子纽扣信息\n\r";
const unsigned char c_chShow_8[] = "按 7  写电子纽扣信息\n\r";
const unsigned char c_chShow_9[] = "按 8  配置开门人\n\r";
const unsigned char c_chShow_10[] = "按 9  查询开门人\n\r";
const unsigned char c_chShow_17[] = "按 R  复位告警盘\n\r";

const unsigned char c_chShow_Menu10[] = "请输入 ID 号\n\r";
const unsigned char c_chShow_Menu13[] = "错误\n\r";
const unsigned char c_chShow_Menu14[] = "请输入新的参数,Esc返回\n\r";

const unsigned char chShow_Pmpt_Door_40[] = "输入ID号:\n\r";//输入用户序号及ID号:
const unsigned char chShow_Pmpt_Door_60[] = "输入用户序号及ID号:\n\r";//输入用户序号及ID号:
const unsigned char chShow_Pmpt_Door_80[] = "输入用户序号:\n\r";//输入用户序号及ID号:
//********************** const 区****************const 区****************
//********************** const 区****************const 区****************
unsigned char g_chDebugBuf[DebugMAX];//收发共一个缓冲区
unsigned char g_chDebugHead, g_chDebugTail;
unsigned char g_chReceiveDebugChar;//收单个信息

void MainDebugProcess(void);
	unsigned char g_chMainDebugSend_Stat;  //发送缓冲区状态机
//	unsigned char g_chMainDebugReceive_Stat;  //接收缓冲区状态机
	unsigned int g_intMainDebugProcess_Stat;  //主处理、接受状态机
    unsigned char  g_chMainDebugSendTimeout_1s;  //超时
    unsigned char  g_chMainDebugProcessTimeout_1s;  //超时
    #define MainDebugProcessTimeout_1sMAX      10 
    #define DebugWaitInputTimeout_1sMAX      30  //超时时间
void InsertDebugSendBuf(unsigned char *pData, unsigned int intLen);
void ExternInsertDebugSendBuf(unsigned char *pData, unsigned int intLen);

unsigned char g_chID;
unsigned char ParamID(unsigned char chParamID, unsigned char *chParamBuf, unsigned char chLen);
unsigned int g_int135Ver;//1000-9999  由与 int 的最大是 65532 所以不能表达 00000-99999
/**************************************
*功能: 往调试口里加东西     
*参数: 
*返回: 
*备注: 供交互时使用,可能有一些在外面被调用
**************************************/
void InsertDebugSendBuf(unsigned char *pData, unsigned int intLen)
{
	g_intMark &= ~SendReceiveDebugBuf_Mark;//保证可用发送
	if(g_chMainDebugSend_Stat == 1)//单向,会丢掉一些信息
	{//调试区信息 空( =1 表示在等待发第一个字节)
		unsigned char i;
		for (i = 0; i < intLen; i++)
	   	{
	        if(g_chDebugTail < DebugMAX - 1)//不覆盖
	        {//调试缓冲区是单向数组   
	            g_chDebugTail++;  
	            g_chDebugBuf[g_chDebugTail] = *(pData + i);
	        }        
	   	}   
	}
}
/**************************************
*功能: 往调试口里加东西     
*参数: 
*返回: 
*备注: 供外面使用,不参加交互的信息
**************************************/
void ExternInsertDebugSendBuf(unsigned char *pData, unsigned int intLen)
{
	if(g_intMainDebugProcess_Stat == 0)
	{
		g_intMark &= ~SendReceiveDebugBuf_Mark;//保证可用发送
		if(g_chMainDebugSend_Stat == 1)//单向,会丢掉一些信息
		{//调试区信息 空( =1 表示在等待发第一个字节)
			if(intLen < (DebugMAX - g_chDebugTail -1))
			{//还有足够的空间,否则丢掉
				unsigned char i;
				for (i = 0; i < intLen; i++)
			   	{
			        if(g_chDebugTail < DebugMAX - 1)//不覆盖
			        {//调试缓冲区是单向数组   
			            g_chDebugTail++;  
			            g_chDebugBuf[g_chDebugTail] = *(pData + i);
			        }        
			   	}  
			} 
		}
	}
}
/**************************************
*功能: 调试口主处理     
*参数: 
*返回: 
*备注: 实时调用
**************************************/
void MainDebugProcess(void)
{
	//处于调试状态,没有办法、资源对灯进行动作
	//处理发送缓冲区
	switch(g_chMainDebugSend_Stat)
	{
		case 1://发第一个
			if((g_intMark & CommDebugUart_Mark))
			{//调试模式
				if(g_intMark & SendReceiveDebugBuf_Mark)
				{//收
					
				}
				else
				{//发
					if(g_chDebugTail > 0)
					{
						g_chMainDebugProcessTimeout_1s = 0;
						g_chDebugHead = 1;
						TXBUF0 = g_chDebugBuf[1];
						g_chMainDebugSend_Stat = 2;
						g_chMainDebugSendTimeout_1s = 0;
					}
				}
			}
		break;
		case 2://等待发送完毕,一定要有超时处理,这样可以保证发光调试区信息
			if(g_chDebugTail == 0)
			{//调试区信息 空
				g_chMainDebugSend_Stat = 0;//DEFAULT 中会有相关清理
			}
			if(g_chMainDebugSendTimeout_1s > 1)
			{//发码的时间不能超过 1 秒
				g_chMainDebugSend_Stat = 1;//
				//丢掉
				g_chDebugTail = 0;
				g_chDebugHead = 0;
			}
		break;
		default:
			g_chMainDebugSend_Stat = 1;
		break;
	}
	//处理接收缓冲区---由主处理负责
	//控制发送的主处理,防止死机
	if(g_intMainDebugProcess_Stat > 0)
	{//开始计时!
		if(g_chMainDebugProcessTimeout_1s > MainDebugProcessTimeout_1sMAX)
		{//10 秒后 没有东西输入
			//强行输出信息 并回到 1
			g_chDebugTail = 0;
			g_chDebugHead = 0;
			{
				unsigned char chMess[] = "超时 xxx\n\r";
				chMess[5] = g_intMainDebugProcess_Stat / 100 + 48;
				chMess[6] = (g_intMainDebugProcess_Stat / 10) % 10 + 48;
				chMess[7] = g_intMainDebugProcess_Stat % 10 + 48;
				InsertDebugSendBuf((unsigned char *)chMess,sizeof(chMess) - 1);
			}
			g_intMainDebugProcess_Stat = 0;//DEFAULT 中会有相关清理
		}
	}
	//处理交 流发送的主处理
	if(g_chMainDebugSend_Stat == 1)
	{
		switch(g_intMainDebugProcess_Stat)
		{
			case 0://接收单命令处理
				if(g_chReceiveDebugChar < 27)//Esc --27
				{//调试口 必须 接收大于 32(空格)的东西
					break;	
				}
				switch(g_chReceiveDebugChar)
				{
					case '1'://查询或修改参数
						g_intMainDebugProcess_Stat = 20;
					break;
					case '2'://查询系统状态
						g_intMainDebugProcess_Stat = 100;
					break;
					case '3'://温度1
						{
         					unsigned char chShowReadID[] = "ID:                          \n\r";
					     	unsigned char chReadTempeSenID[8];
					     	unsigned char i;
					     	//读取指定通道上的温度传感器ID     	  
				       		DS1820_Read_ID_MultiChannel(DqPort, DqDataBit, chReadTempeSenID);
				     		for (i = 0; i < 8; i++)
				     		{
				            	chShowReadID[3+3*i] = ((chReadTempeSenID[i] / 100) % 10) + 48;
				                chShowReadID[4+3*i] = ((chReadTempeSenID[i] / 10) % 10) + 48;
				                chShowReadID[5+3*i] = (chReadTempeSenID[i] % 10) + 48;			         			                        
				     		} 			         		
					     	InsertDebugSendBuf((unsigned char *)chShowReadID, sizeof(chShowReadID) - 1);
         				}
					break;
					case '4'://温度2--主板上
						{
         					unsigned char chShowReadID[] = "ID:                          \n\r";
					     	unsigned char chReadTempeSenID[8];
					     	unsigned char i;
					     	//读取指定通道上的温度传感器ID     	  
				       		DS1820_Read_ID_MultiChannel(DqBorad, DqBoradBit, chReadTempeSenID);
				     		for (i = 0; i < 8; i++)
				     		{
				            	chShowReadID[3+3*i] = ((chReadTempeSenID[i] / 100) % 10) + 48;
				                chShowReadID[4+3*i] = ((chReadTempeSenID[i] / 10) % 10) + 48;
				                chShowReadID[5+3*i] = (chReadTempeSenID[i] % 10) + 48;			         			                        
				     		} 			         		
					     	InsertDebugSendBuf((unsigned char *)chShowReadID, sizeof(chShowReadID) - 1);
         				}
					break;
					case '5'://地址纽扣
						{
         					unsigned char chShowReadID[] = "ID:                          \n\r";
					     	unsigned char chReadTempeSenID[8];
					     	unsigned char i;
					     	//读取指定通道上的温度传感器ID     	  
				       		DS1820_Read_ID_MultiChannel(DoorChannelPort, DoorChannelDataBit, chReadTempeSenID);
				     		for (i = 0; i < 8; i++)
				     		{
				            	chShowReadID[3+3*i] = ((chReadTempeSenID[i] / 100) % 10) + 48;
				                chShowReadID[4+3*i] = ((chReadTempeSenID[i] / 10) % 10) + 48;
				                chShowReadID[5+3*i] = (chReadTempeSenID[i] % 10) + 48;			         			                        
				     		} 			         		
					     	InsertDebugSendBuf((unsigned char *)chShowReadID, sizeof(chShowReadID) - 1);
         				}
					break;
					case '6'://读电子纽扣信息
						Read_DoorID();
					break;
					case '7'://写电子纽扣信息
						g_intMainDebugProcess_Stat = 40;
					break;
					case '8'://配置开门人
						g_intMainDebugProcess_Stat = 60;
					break;
					case '9'://查询开门人
						g_intMainDebugProcess_Stat = 80;
					break;
					case 'R':
					case 'r'://RESET
						g_intMark |= SoftReset_Mark;
						intTBCount_50ms = 0;//借用
						//给 135 RESET 命令
						g_chInnerCommSendBuf[1] = 215;
						g_chInnerCommSendBuf[2] = 9;
						//转为0--9 的 数字
						g_chInnerCommSendBuf[3] = 8;
						g_chInnerCommSendBuf[4] = 7;
						g_chInnerCommSendBuf[5] = 6;
						//6 sum
						//7 200
						AddCheckSum(6);
					break;
					case '*':
					case '#'://只要得到 # 表示,停止 调试口的 工作!
						//调试口 缓冲 不需要清理
						if(g_intMark & RS232DTMFSendPC_Mark)

⌨️ 快捷键说明

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