📄 alarm.c
字号:
#include <at892051.h>
#include <absacc.h>
#include <intrins.h>
#include <string.h>
#include <stdio.h>
#include <data.h>
uint8 WriteBits_1700(uint8 isdbyte,uint8 num_of_bits);
void Start_1700(void);
void InError_Alarm(void);
void OutError_Alarm(void);
void System_Alarm(void);
void init_2051(void);
void End_1700(void);
void delay(uint16 Ldelay);
void init_2051(void)
{
IE = 0;
TMOD = 0;
}
main()
{uint8 j;
init_2051();
for(j=0;j<7;j++)
{
miso_byte[j] = 0x00;
}
while(1)
{
delay(0xfe0);
if((BJ_InError == 0) && (Other_ZBState2 == 0)) /*工作人员请注意,本机通信故障,已切换到备机*/
{
InError_Alarm();
}
if((BJ_OutError == 0) && (Other_ZBState2 == 0)) /*工作人员请注意,本机输出故障,已切换到备机*/
{
OutError_Alarm();
}
//if(ISD_ZBState2 == 0)
//{
// Ready2_Alarm();
//}
if((BJ_ZBState1 == 1) && (Other_ZBState2 == 1)) /*工作人员请注意,双机系统故障,已切换到电缆工作*/
{
System_Alarm();
}
}
}
/*启动ISD1700*/
void Start_1700(void)
{
ISD_SS = 1;
ISD_SCLK = 1;
ISD_MOSI = 0;
_nop_();_nop_();_nop_();_nop_();
}
/*空闲时SPI囗设置*/
void End_1700(void)
{
ISD_SS = 1;
ISD_SCLK = 1;
ISD_MOSI = 0;
}
/*写命令ISD1700*/
uint8 WriteBits_1700(uint8 isdbyte,uint8 num_of_bits)
{uint8 outbyte=0,i;
ISD_SS = 0;
ISD_SCLK = 0;
for(i=0;i<num_of_bits;i++)
{
if ((isdbyte & 0x01) == 0x01)
{
ISD_MOSI = 1;
}
else
{
ISD_MOSI = 0;
}
isdbyte >>= 1;
delay(20);
ISD_SCLK = 1;
delay(20);
outbyte>>=1;
if(ISD_MISO) {outbyte |= 0x80;}
ISD_SCLK = 0;
}
return(outbyte);
}
/*通信错误报警
起始地址:0x010(前十六位保留给了语音提示)
最大地址(1730):0x0ff*/
void InError_Alarm(void)
{
Start_1700();
miso_byte[0] = WriteBits_1700(PU | 0X10,0x08);
miso_byte[1] = WriteBits_1700(0x00,0x08);
delay(0xfe0);
if((miso_byte[0] & 0x04) == 0x04)
{
Start_1700();
miso_byte[2] = WriteBits_1700(CLR_INT | 0X10,0x08);
miso_byte[3] = WriteBits_1700(0x00,0x08);
Start_1700();
miso_byte[4] = WriteBits_1700(RD_STATUS | 0X10,0x08);
miso_byte[5] = WriteBits_1700(0x00,0x08);
miso_byte[6] = WriteBits_1700(0x00,0x08);
delay(0xfe0);
if((miso_byte[6] & 0x01) == 0x01)
{
Start_1700();
miso_byte[0] = WriteBits_1700(SET_PLAY,0x08);
miso_byte[1] = WriteBits_1700(0x00,0x08); /*数据字节1*/
miso_byte[2] = WriteBits_1700(0x35,0x08); /*数据字节2或起始地址1(低地址)*/
miso_byte[3] = WriteBits_1700(0x00,0x08); /*数据字节3或起始地址2(高地址)*/
miso_byte[4] = WriteBits_1700(0x50,0x08); /*结束地址1(低地址)*/
End_1700();
}
}
}
/*输出错误报警*/
void OutError_Alarm(void)
{
Start_1700();
miso_byte[0] = WriteBits_1700(PU | 0X10,0x08);
miso_byte[1] = WriteBits_1700(0x00,0x08);
delay(0xfe0);
if((miso_byte[0] & 0x04) == 0x04)
{
Start_1700();
miso_byte[2] = WriteBits_1700(CLR_INT | 0X10,0x08);
miso_byte[3] = WriteBits_1700(0x00,0x08);
Start_1700();
miso_byte[4] = WriteBits_1700(RD_STATUS | 0X10,0x08);
miso_byte[5] = WriteBits_1700(0x00,0x08);
miso_byte[6] = WriteBits_1700(0x00,0x08);
delay(0xfe0);
if((miso_byte[6] & 0x01) == 0x01)
{
Start_1700();
miso_byte[0] = WriteBits_1700(SET_PLAY,0x08);
miso_byte[1] = WriteBits_1700(0x00,0x08); /*数据字节1*/
miso_byte[2] = WriteBits_1700(0x90,0x08); /*数据字节2或起始地址1(低地址)*/
miso_byte[3] = WriteBits_1700(0x00,0x08); /*数据字节3或起始地址2(高地址)*/
miso_byte[4] = WriteBits_1700(0xa0,0x08); /*结束地址1(低地址)*/
End_1700();
}
}
}
/*系统故障报警*/
void System_Alarm(void)
{
Start_1700();
miso_byte[0] = WriteBits_1700(PU | 0X10,0x08);
miso_byte[1] = WriteBits_1700(0x00,0x08);
delay(0xfe0);
if((miso_byte[0] & 0x04) == 0x04)
{
Start_1700();
miso_byte[2] = WriteBits_1700(CLR_INT | 0X10,0x08);
miso_byte[3] = WriteBits_1700(0x00,0x08);
Start_1700();
miso_byte[4] = WriteBits_1700(RD_STATUS | 0X10,0x08);
miso_byte[5] = WriteBits_1700(0x00,0x08);
miso_byte[6] = WriteBits_1700(0x00,0x08);
delay(0xfe0);
if((miso_byte[6] & 0x01) == 0x01)
{
Start_1700();
miso_byte[0] = WriteBits_1700(SET_PLAY,0x08);
miso_byte[1] = WriteBits_1700(0x00,0x08); /*数据字节1*/
miso_byte[2] = WriteBits_1700(0x82,0x08); /*数据字节2或起始地址1(低地址)*/
miso_byte[3] = WriteBits_1700(0x00,0x08); /*数据字节3或起始地址2(高地址)*/
miso_byte[4] = WriteBits_1700(0xa0,0x08); /*结束地址1(低地址)*/
End_1700();
}
}
}
/*延时*/
void delay(uint16 Ldelay)
{
uint16 i;
for(i=0;i<Ldelay;i++) _nop_();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -