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

📄 output.c

📁 这是一个单片机的项目
💻 C
📖 第 1 页 / 共 3 页
字号:
#define MaxGetChannelParaLen     0x7ED
#define MaxAlarmLen              0xFD
#define MaxSlaveAlarmLen         80
/**************************************拷贝数据最大长度定义**************************************/

/**************************************输出报警动作号定义****************************************/
#define ACTION1               0x01    //01号输出动作
#define ACTION2               0x02    //02号输出动作
#define ACTION3               0x03    //03号输出动作
#define ACTION4               0x04    //04号输出动作
#define ACTION5               0x05    //05号输出动作
#define ACTION6               0x06    //06号输出动作
#define ACTION7               0x07    //07号输出动作
#define ACTION8               0x08    //08号输出动作
#define ACTION9               0x09    //09号输出动作
#define ACTION10              0x10    //10号输出动作
#define ACTION11              0x11    //11号输出动作
#define ACTION12              0x12    //12号输出动作
/**************************************输出报警动作号定义****************************************/

/**********************************************标识位定义信息*********************************************/
bit  FlagMutex=0;              //用于隔离外部中断,假如一次外部中断没有执行完,不能响应下一次外部中断。
bit  FlagExt0=0;               //外部中断0标识,也就是IIC使用标识。
bit  FlagTime0=0;              //定时器0中断标识。
bit  FlagStartRecv=0;          //开始接收标识。
bit  FlagProcessRecvData=0;    //处理接收数据标识。
bit  FlagReInit = 0;           //从机参数重置的命令被解析的标识,也是从机参数重置的标志位。
bit  FlagProcessOrderStart = 0;//上位机的命令被从机拷贝的标志,也是处理命令的标志位。
bit  FlagFirst = 1;            //第一次定时器0中断标识。
bit  FlagNewData = 0;          //有新的外设数据标识。
bit  FlagNewOrder = 0;         //有新的服务器的命令标识。
bit  FlagSendOrder = 1;        //发送读取外设数据命令开始标识。
bit  FlagExtInterrupt = 0;
bit  FlagNewAlarm = 0;           //有新的报警需要处理的标识位。
/**********************************************标识位定义信息*********************************************/

/**********************************************定时器相关信息*********************************************/
#define  WaitLen      10      //发送外设数据采集命令的等待时限。
#define  MAX          20      //定时器的倍频。
#define  SampleBase   1000    //Sample = ReadDataRate/SampleBase即为发送采集外设数据命令的间隔。
#define  DelayTime        5
uchar    Sample = 2;          //发送采集外设数据命令的间隔。
uchar    TimesNum = 0;        //定时中断次数的计数器,用来判断等待的外设数据返回的时限的。
uchar    TimesCount = 0;      //定时中断次数的计数器,用来判断等待的外设数据返回的时限的。
/**********************************************定时器相关信息*********************************************/

/**********************************************从机IIC使用信息********************************************/
sbit P20=P2^0;                //IIC使用完通知仲裁机的信号。
/**********************************************从机IIC使用信息********************************************/

/******************************************从机分配的数组**************************************************/
#define  COPYLEN      200        //I2C中转的缓冲区大小。
#define  PROCESSLEN   20         //处理命令的暂存数组长度。
xdata uchar  RecvDataBuff[60];   //外设数据的接收数组,应大于56。
xdata uchar  SendBuff[4];        //发送读取外设数据的命令数组。
/******************************************从机分配的数组**************************************************/

/***********************************************************************************************************
功能:Delay
描述:延时函数
参数:t
返回:无
************************************************************************************************************/
void Delay(uint t)     /*延时函数*/
{
    while(t!=0)
        t--; 
}

/***********************************************************************************************************
功能:InitSerialCom
描述:串口初始化
参数:无
返回:无
************************************************************************************************************/
void InitSerialCom(void)
{
    SCON  = 0x50;       //SCON: serail mode 1, 8-bit UART, enable ucvr 
    TMOD |= 0x21;       //TMOD: timer 1, mode 2, 8-bit reload 
    PCON |= 0x80;       //SMOD=1; 
    TH1   = 0xF3;       //Baud:4800  fosc=12MHz 
    IE   |= 0x93;       //Enable Serial Interrupt 
    TR1   = 1;          // timer 1 run 
	IT0   = 1;
   // TI=1; 
}

/***********************************************************************************************************
功能:Time0Initial()
描述:定时器0初始化,主要设定初值
参数:无
返回:无
************************************************************************************************************/
void Time0Initial()
{
   TR0=0;
   TH0=0x3C; //50ms
   TL0=0xB0;
   TR0=1;
}

/***********************************************************************************************************
功能:Time0
描述:产生定时器0中断
参数:无
返回:无
************************************************************************************************************/
void Time0() interrupt 1 using 2
{
      TimeCount++;
	  if(TimeCount >= MAX)
	  {
	      TimeCount=0;
		  FlagTime0=1;
	  }
      Time0Initial();
}

/***********************************************************************************************************
功能:SendCharCom
描述:向串口发送一个字符 
参数:t
返回:无
************************************************************************************************************/
void SendCharCom(unsigned char ch)  
{
    SBUF=ch;
    while(TI==0);
    TI=0;
}

/***********************************************************************************************************
功能:SendStringCom
描述:向串口发送一个字符串,strlen为该字符串长度 
参数:str---要发送的字符串指针 strlen---字符串长度
返回:无
************************************************************************************************************/
void SendStringCom(unsigned char *str,unsigned int strlen)
{
    unsigned int k=0;
    while( (k < strlen) && (strlen > 0) )
    {
        SendCharCom(*(str + k));
        k++;
    }
}

/***********************************************************************************************************
功能:Extern0;产生外部中断0,是仲裁机分配IIC使用权的。
描述:FlagMutex---用于隔离外部中断,假如一次外部中断没有执行完,不能响应下一次外部中断;
     FlagExt0---外部中断期间标志;P20---保证IIC使用权已经完全释放才可以再次响应。
参数:无
返回:无
************************************************************************************************************/
void EXT0() interrupt 0 using 1
{ 
   if((FlagExt0 == 0) && (P20 == 1))
   {
       FlagExt0 = 1;
   }
}

/***********************************************************************************************************
功能:ClearMyRom
描述:清零字节数存储地址
参数:无
返回:无
************************************************************************************************************/
void ClearMyRam(uint address)
{
    MyWriteOneByte(address,0x00);
	MyWriteOneByte(address+1,0x00);
}

/***********************************************************************************************************
功能:SetDataBytes
描述:设置自带RAM的字节长度
参数:address---存放长度的地址 len---长度值
返回:无
************************************************************************************************************/
void SetMyDataBytes(uint address,uchar len)
{
	uint num;
	xdata uchar temp[2];
	MyReadBytes(address,temp,2);
	num = temp[0] + temp[1] * 0x100 + len;  
	temp[0]=num%256;
	temp[1]=num/256;  
    MyWriteBytes(address,temp,2);
}

/***********************************************************************************************************
功能:GetMyDataBytes
描述:得到自带RAM里的数据字节数
参数:address---存放长度的地址
返回:uint
************************************************************************************************************/
uint GetMyDataBytes(uint address)
{
	uint num;
	xdata uchar temp[2] = {0x00,0x00};
	MyReadBytes(address,temp,2);
	num = temp[0] + temp[1] * 0x100;
	return num;
}

/***********************************************************************************************************
功能:ClearComRam
描述:清零字节数存储地址
参数:address---需要清零的地址
返回:无
************************************************************************************************************/
void ClearComRam(uint address)
{
    ComWriteOneByte(address,0x00);
	ComWriteOneByte(address+1,0x00);
}

/***********************************************************************************************************
功能:SetComDataBytes;设置字节数的函数
描述:设置公共RAM的字节长度。是先读出长度,再累加一个需要设置的长度。
参数:address---需要设置字节数的地址;len---需要设置的长度。
返回:无
************************************************************************************************************/
void SetComDataBytes(uint address,uchar len)
{
	uint num;
	xdata uchar temp[2];
	ComReadBytes(address,temp,2);
	num = temp[0] + temp[1] * 0x100 + len;   
	temp[0]=num%256;
	temp[1]=num/256;
    ComWriteBytes(address,temp,2);
}

/***********************************************************************************************************
功能:GetComDataBytes;取到字节数的函数
描述:取得公共RAM里的数据字节数
参数:address---存放字节数的地址
返回:uint
************************************************************************************************************/
uint GetComDataBytes(uint address)
{
	uint num;
	xdata uchar temp[2] = {0x00,0x00};

	ComReadBytes(address,temp,2);
	num = temp[0] + temp[1] * 0x100;
	return num;
}

/***********************************************************************************************************
功能:WsSerialRecieve,接收外设发送来的数据。
描述:通过串口中断接收外设发送过来的数据,保存在RecvDataBuff数组里,数据接收完毕时通过标识FlagProcessRecvData
     通知Process7017RecvData或者Process7053RecvData函数来打包接收的数据。
参数:无

⌨️ 快捷键说明

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