?? alarm.c
字號:
/*本程序專用于閉塞系統的語音報警
創 建:曾銀玲
日 期:2008/03/19
*/
#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 + -