📄 uart0.c
字号:
void RXRERE();
void uart_set_time();
void uart_read_time();
void uart_addvip();
void uart_addnom();
void uart_delvip();
void uart_delnom();
uchar uart_card();
void uart_card_error();
void uart_read();
void uart_set();
//------------------------------------------------------------------------------
//UART0程序
//------------------------------------------------------------------------------
#pragma vector=UART0RX_VECTOR
__interrupt void usart0_rx (void)
{
_DINT();
RXRERE();
_EINT();
}
/*****************************************************/
/*******接收程序**************************************/
/*****************************************************/
void RXRERE()
{
uchar i,j;
uchar rx_pre[7]={0x7e,0x31,0x30,addr1,addr,0x38,0x30};
RX_DATA[0]=U0RXBUF;
if(RX_DATA[0]==0x7e)
{
for(i=1;i<7;i++)
{
while (!(IFG1 & URXIFG0));
RX_DATA[i]=U0RXBUF;
if(RX_DATA[i] != rx_pre[i])
{
goto end;
}
}
while (!(IFG1 & URXIFG0));
RX_DATA[7]=U0RXBUF;
while (!(IFG1 & URXIFG0));
RX_DATA[8]=U0RXBUF;
i=hex_c(RX_DATA[7]);
j=hex_c(RX_DATA[8]);
j |= i<<4;
switch(j)
{
case 0x49: uart_set(); break;
case 0x4a: uart_read(); break;
}
}
end:
return;
}
/*****************************************************/
/*********接收设置命令********************************/
/*****************************************************/
uchar uart_set_re(uchar x)
{
uchar i;
uint j;
uint m;
for(i=17;i<x;i++)
{
while (!(IFG1 & URXIFG0));
RX_DATA[i]=U0RXBUF;
}
j =0;
for(i=1;i<(x-5);i++)
{
j +=RX_DATA[i];
}
j %=0xffff;
j ^=0xffff;
j +=1;
m=0;
for(i=(x-5); i<(x-1); i++)
{
m |=hex_c(RX_DATA[i])<<((x-i-2)*4);
}
if(j==m)
{
if(RX_DATA[x-1]==0X0D)
{
for(i=17;i<(x-5);i++)
{
RX_DATA[i] =hex_c(RX_DATA[i]);
}
return 1;
}
}
return 0;
}
/****************************************************/
/***********接受设置时间命令*************************/
/****************************************************/
void uart_set_time()
{
uchar x;
x = 38;
if(uart_set_re(x))
{
FLAG |=gb_wr1302;
}
}
/****************************************************/
/****接收设置历史纪录参数命令************************/
/****************************************************/
void uart_set_par()
{
uchar x;
if(RX_DATA[12] == 0X45)
{
x = 32;
if(uart_set_re(x))
{
RX_DATA[20] |=RX_DATA[19]<<4;
SAVEP = (RX_DATA[20] << 8);
SAVEP |= (RX_DATA[17] << 4);
SAVEP |= (RX_DATA[18]);
RX_DATA[24] |= (RX_DATA[23]<<4);
LOADP = (RX_DATA[24] << 8);
LOADP |= (RX_DATA[21] << 4);
LOADP |= (RX_DATA[22]);
MF = (RX_DATA[25] << 4);
MF |= (RX_DATA[26]);
set_par_re();
FLAG1 |= gb_flashw;
}
}
else
{
x = 28;
if(uart_set_re(x))
{
RX_DATA[20] |= (RX_DATA[19]<<4);
LOADP = (RX_DATA[20] << 8);
LOADP |= RX_DATA[17]<<4;
LOADP |= RX_DATA[18];
MF = RX_DATA[21]<<4;
MF |= RX_DATA[22];
set_par_re();
FLAG1 |= gb_flashw;
}
}
}
/********************************************************/
/*****************远程开门*******************************/
/********************************************************/
void uart_set_opdr()
{
ulong i;
i = 34;
if(uart_set_re(i))
{
if((RX_DATA[17] ==0X00) && (RX_DATA[18] == 0X01))
{
FLAG |=gb_lock;
FLAG |=gb_buzzer;
buzzer_cycle = 1;
clk_20s = delay_cnt;
FLAG2 |= gb_doorval;
}
REMARK = 0X02;
STATUS = 0;
GETSTATUS();
recordbuf = (RX_DATA[19]<<4);
recordbuf |= (RX_DATA[20]);
i = (RX_DATA[21]<<4);
i |= (RX_DATA[22]);
cardnum =i;
cardnum <<= 24;
i = (RX_DATA[23]<<4);
i |= (RX_DATA[24]);
cardnum |= (i<<16);
i = (RX_DATA[25]<<4);
i |= (RX_DATA[26]);
cardnum |= (i<<8);
i = (RX_DATA[27]<<4);
i |= (RX_DATA[28]);
cardnum |= i;
FLAG |= gb_re1302;
FLAG1 |= gb_wrmsg;
set_par_re();
}
}
/************************************************/
/***********设置门锁继电器执行时间***************/
/************************************************/
void uart_set_delay()
{
uchar i;
i = 24;
if(uart_set_re(i))
{
delay_cnt = (RX_DATA[17]<<4);
delay_cnt |=(RX_DATA[18]);
FLAG1 |= gb_flashw;
set_par_re();
}
}
/*******************************************************/
/***********设置开门后等待进入的延时时间****************/
/*******************************************************/
void uart_set_opde()
{
uchar i;
i = 24;
if(uart_set_re(i))
{
wait_cnt = (RX_DATA[17]<<4);
wait_cnt |=(RX_DATA[18]);
FLAG1 |= gb_flashw;
set_par_re();
}
}
/**************************************************/
/********红外报警输出的被确认时间******************/
/**************************************************/
void uart_set_iren()
{
uchar i;
i = 24;
if(uart_set_re(i))
{
iren_cnt = (RX_DATA[17]<<4);
iren_cnt |= (RX_DATA[18]);
FLAG1 |= gb_flashw;
set_par_re();
}
}
/**************************************************/
/*********设置异地报警的延时时间*******************/
/**************************************************/
void uart_set_alarmde()
{
uchar i;
i = 24;
if(uart_set_re(i))
{
alarm_cnt = (RX_DATA[17]<<4);
alarm_cnt |= RX_DATA[18];
FLAG1 |= gb_flashw;
set_par_re();
}
}
/*****************************************************/
/**********设置工作日的准进时段***********************/
/*****************************************************/
void uart_set_work()
{
uchar i;
i = 56;
uchar j;
if(uart_set_re(i))
{
j = RX_DATA[18]*16;
for(i=19; i<51; i++)
{
table_buf[j] = (RX_DATA[i++]<<4);
table_buf[j++] |= RX_DATA[i];
}
set_par_re();
if(RX_DATA[18] == 4)
{
FLAG1 |= gb_work;
}
}
}
/**********************************************/
/******设置非工作日的准进时段******************/
/**********************************************/
void uart_set_nowork()
{
uchar i,j;
i = 56;
j = 0;
if(uart_set_re(i))
{
if(RX_DATA[18] == 8)
{
FLAG2 |= gb_flashw;
for(i=19; i<51; i++)
{
ircon[j] = (RX_DATA[i++]<<4);
ircon[j++] |= RX_DATA[i];
}
}
else if(RX_DATA[18] == 1)
{
for(i=19; i<51; i++)
{
table_buf[j] = (RX_DATA[i++]<<4);
table_buf[j++] |= RX_DATA[i];
}
}
set_par_re();
}
}
/*******************************************/
/****设置星期准进时段***********************/
/*******************************************/
void uart_set_week()
{
uchar i;
uint j;
i = 74;
if(uart_set_re(i))
{
j = RX_DATA[18]*168+(RX_DATA[20]-1)*24;
for(i=21; i<69; i++)
{
table_buf[j] = (RX_DATA[i++]<<4);
table_buf[j++] |= RX_DATA[i];
}
set_par_re();
if((RX_DATA[18] == 0x04) && (RX_DATA[20] == 0x07))
{
FLAG1 |= gb_week;
}
}
}
/******************************************************/
/****设置星期内的休息日********************************/
/******************************************************/
void uart_set_rest()
{
uchar i;
i = 26;
if(uart_set_re(i))
{
restday1 = RX_DATA[18];
restday2 = RX_DATA[20];
set_par_re();
FLAG1 |= gb_flashw;
}
}
/******************************************************/
/**********设置法定节假日******************************/
/******************************************************/
void uart_set_holiday()
{
uchar i;
uchar j;
uchar buf;
uchar buf1;
i = 26;
if(uart_set_re(i))
{
buf = (RX_DATA[17]<<4);
buf |= RX_DATA[18];
buf1 = (RX_DATA[19]<<4);
buf1 |= RX_DATA[20];
for(i=0; i<40; i++)
{
if((holiday[i][0]==0xff) && (holiday[i][1]==0xff))
{
j = i;
break;
}
}
for(i=0; i<j; i++)
{
if((holiday[i][0]==buf) && (holiday[i][1]==buf1))
{
goto holidayend;
}
}
holiday[j][0] = buf;
holiday[j][1] = buf1;
FLAG1 |= gb_flashw;
}
holidayend:
set_par_re();
return;
}
/************************************************************/
/***********删除节假日***************************************/
/************************************************************/
void uart_set_delhol()
{
uchar i;
uchar j;
uchar buf;
uchar buf1;
i = 26;
if(uart_set_re(i))
{
buf = (RX_DATA[17] << 4);
buf |=(RX_DATA[18]);
buf1 =(RX_DATA[19] << 4);
buf1 |=(RX_DATA[20]);
if((buf == 0) && (buf1 == 0))
{
for(i=0; i<40; i++)
{
holiday[i][0] = 0xff;
holiday[i][1] = 0xff;
}
FLAG1 |= gb_flashw;
set_par_re();
}
else
{
for(i=0; i<40; i++)
{
if((buf == holiday[i][0]) && (buf1 == holiday[i][1]))
{
holiday[i][0] = 0xff;
holiday[i][1] = 0xff;
for(j=i; j<39; j++)
{
holiday[j][0] = holiday[j+1][0];
holiday[j][1] = holiday[j+1][1];
}
holiday[39][0] = 0xff;
holiday[39][1] = 0xff;
FLAG1 |= gb_flashw;
set_par_re();
goto delholend;
}
}
set_tx();
TX_DATA[7] = 0X45;
TX_DATA[8] = 0X35;
TX_DATA[9] = 0X30;
TX_DATA[10] = 0X30;
TX_DATA[11] = 0X30;
TX_DATA[12] = 0X30;
TX_DATA[13] = 0X46;
TX_DATA[14] = 0X44;
TX_DATA[15] = 0X39;
TX_DATA[16] = 0X43;
TX_DATA[17] = 0X0D;
tx_len = 18;
FLAG |= gb_tx;
}
}
delholend:
return;
}
/********************************************************/
/***********增加一个用户*********************************/
/********************************************************/
void uart_set_addcd()
{
uint i;
i = 54;
if(uart_set_re(i))
{
card_buf[0] = (RX_DATA[19] << 4);
card_buf[0] |= RX_DATA[20];
card_buf[1] = (RX_DATA[21] << 4);
card_buf[1] |= RX_DATA[22];
card_buf[2] = (RX_DATA[23] << 4);
card_buf[2] |= RX_DATA[24];
card_buf[3] = (RX_DATA[25] << 4);
card_buf[3] |= RX_DATA[26];
card_buf[4] = (RX_DATA[47] << 4);
card_buf[4] |= RX_DATA[48];
i = card_buf[4] & 0x30;
if(i == 0x00)
{
if(card_buf[4] == 0x00)
{
FLAG |= gb_addnom;
}
else
{
FLAG |= gb_addvip;
}
}
else if(i == 0x30)
{
if(card_buf[4] == 0x00)
{
FLAG |= gb_addynom;
}
else
{
FLAG |= gb_addyvip;
}
}
}
}
/************************************************************/
/*********删除一个用户***************************************/
/************************************************************/
void uart_set_delcd()
{
uchar i;
i = 34;
if(uart_set_re(i))
{
if(RX_DATA[18] == 0)
{
card_buf[0] = (RX_DATA[21] << 4);
card_buf[0] |= RX_DATA[22];
card_buf[1] = (RX_DATA[23] << 4);
card_buf[1] |= RX_DATA[24];
card_buf[2] = (RX_DATA[25] << 4);
card_buf[2] |= RX_DATA[26];
card_buf[3] = (RX_DATA[27] << 4);
card_buf[3] |= RX_DATA[28];
FLAG |= gb_delvip;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -