📄 project1.c
字号:
/*------------------------------------------------------------------------------
------------------------------------------------------------------------------*/
#include "reg52.h"
#include "main.h"
#include "INTRINS.H"
/*extern char getchar(void);
extern char putchar(char c);*/
unsigned char idata *boot_flag;
unsigned char data wdt_count;
unsigned char data Camera;
unsigned char data Cummun;
unsigned char data ID5;
unsigned char data Baut;
unsigned char data Protocol;
unsigned char data in_p3;
unsigned char data ad_aux;
unsigned char data g;
unsigned int data t;
unsigned int data s;
unsigned char data i;
unsigned char data j;
#define TBUF_SIZE 10
#define RBUF_SIZE 10
bit flag_cycle = 0; /* bit variable */
bit flag_ea = 1; /* bit vareniable */
static data unsigned char tbuf [TBUF_SIZE];
static data unsigned char rbuf [RBUF_SIZE];
static data unsigned char checksum;
static data unsigned char r_in = 0;
static data unsigned char r_out = 1;
/*----------------------------------------------------------------------------
TX-485,北京Pelco_d 9600,
----------------------------------------------------------------------------*/
unsigned char code My_Array4[29][4]={0xFF,0x01,0x00,0x08,
0xFF,0x01,0x00,0x10,
0xFF,0x01,0x00,0x04,
0xFF,0x01,0x00,0x02,
0xFF,0x01,0x02,0x00,
0xFF,0x01,0x04,0x00,
0xFF,0x01,0x01,0x00,
0xFF,0x01,0x00,0x80,
0xFF,0x01,0x00,0x40,
0xFF,0x01,0x00,0x20,
0xFF,0x01,0x00,0x09,
0xFF,0x01,0x00,0x0B,
0xFF,0x01,0x90,0x00,
0xFF,0x01,0x00,0x00,
0xFF,0x01,0x00,0x0C,
0xFF,0x01,0x00,0x14,
0xFF,0x01,0x00,0x0A,
0xFF,0x01,0x00,0x12,
0xFF,0x01,0x00,0x00,
0xFF,0x01,0x09,0x00,
0xFF,0x01,0x00,0x03, //2003-10-29 added for bj Pelco-d (aux function)
0xFF,0x01,0x10,0x00, //2003-10-29 added for bj pelco-d (auto function)
0xFF,0x01,0x00,0x01, //2004-5-26 added for 王波 PELCO-D AUTO FUNCTION
0xFF,0x01,0x00,0x07, //2004-7-27 added for Auto Function
0xFF,0x01,0x00,0x06, //2004-10-24 added
0xFF,0x01,0x00,0x16,
0xFF,0x01,0x98,0x00,
0xFF,0X01,0X08,0X00,
0xFF,0x01,0x20,0x00,
};
/*-------------------------------------------------------------------------------
ADT8050 KEY BOARD
-------------------------------------------------------------------------------*/
unsigned char code My_Array15[18] = { 0x01,0x02,0x04,0x08,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x05,0x06,0x09
,0x0a,0x03,0x07};
unsigned char code My_Array16[14] = { 0x88,0x8a,0x91,0x81,0xaa,0xa2,0xa9,0xa1,0xa8,0xa0,0xab,0xa3,0x8b,0x9b};
/*----------------------------------------------------------------
serial receive interrupt
----------------------------------------------------------------*/
static void com_isr (void) interrupt 4 using 2
{
wdt_count++;
if (RI != 0)
{
RI = 0;
if ((r_in + 1) != r_out)
rbuf [r_in++] = SBUF;
else
{
rbuf[r_in]=SBUF;
flag_ea=0;
r_in=0;
EA=0;
REN=0;
}
}
}
/*------------------------------------------------
for system set
------------------------------------------------*/
void SystemSet ()
{
WREN3=0;
P0=Baut;
WREN1=0;
while(BUSY1)
{;}
WREN1=1;
while(!BUSY1)
{;}
P0=Protocol;
WREN1=0;
while(BUSY1)
{;}
WREN1=1;
}
/*------------------------------------------------
for execuation
------------------------------------------------*/
void Action (char e)
{
WREN3=0;
P0=rbuf[1];
WREN1=0;
while(BUSY1)
{;}
WREN1=1;
while(!BUSY1)
{;}
P0=e;
WREN1=0;
while(BUSY1)
{;}
WREN1=1;
}
/*------------------------------------------------------
ADT 距阵
------------------------------------------------------*/
void Get_Order4(void)
{
if(r_out!=7)
{
r_out = 7;
r_in= 1;
EA=1;
}
/*else if( rbuf[1]!= Camera)
{
r_in=0;
r_out=1;
}*/
else
{rbuf[1]=0x01;
WREN2=0;
for(i=0;i<29; i++)
{
flag_cycle=1;
for (j=0;j<4;j++)
{
t=My_Array4[i][j];
s=rbuf[j];
if(t!= s)
{
flag_cycle=0;
break;
}
}
if(flag_cycle)
{
if(i>=12)
i=i+4;
if((i==10)||(i==11))
{
if(rbuf[5]==0x01)
i=i;
else if(rbuf[5]==0x02)
i=i+2;
else if(rbuf[5]==0x03)
i=i+4;
else if(rbuf[5]==0x04)
i=i+6;
else
break;
}
if(i==0x11)
i=22;
if(i==23)
i=10;
if(i==31)
i=22;
if(i==32)
i=4;
Action(i);
flag_ea=1;
EA=1;
break;
}
}
r_out=1;
r_in=0;
}
}
/*---------------------------------------------------------------
ADT KEYBOARD
-----------------------------------------------------------------*/
void Get_Order12(void)
{
if(r_out!=9)
{
r_out = 9;
r_in= 1 ;
EA=1;
}
/* else if((rbuf[1])!= Camera)
{
r_out=1;
r_in=0;
}*/
else
{
s=rbuf[3];
for(i=0;i<18;i++)
{
t=My_Array15[i];
if(t==s)
{
if(i>15)
i=22;
if(i>11 && i<16)
i=i+6;
if(i==10 || i==11)
{
i=(rbuf[4]-1)*2 + i;
if(i>17)
break;
}
Action(i);
flag_ea=1;
EA=1;
break;
}
}
flag_ea=1;
EA=1;
r_out=1;
r_in=0;
}
}
/*--------------------------
MAIN()
----------------------------*/
void main (void)
{
P0=0xFF;
boot_flag=0xff;
EA =1;
ES=0;
RT_CON1=1;
RT_CON2=0;
ID5=Camera;
PCON = 0x00;
SCON = 0x50; /* SCON: mode 1, 8-bit UART, enable rcvr */
TMOD = 0x21; /* TMOD: timer 1, mode 2, 8-bit reload */
in_p3=~P3;
Baut = in_p3 & 0x60;
Protocol = in_p3 & 0x80;
SystemSet();
if (Baut==0x00)
{
TH1 = 0xFD; /* TH1: reload value for 9600 baud */
}
else if (Baut==0x40)
{
TH1 = 0xFA; /* TH1: reload value for 4800 baud */
}
else if (Baut==0x20)
{
TH1 = 0xF4; /* TH1: reload value for 2400 baud */
}
else
{
TH1 = 0xE8; /* TH1: reload value for 1200 baud */
}
REN = 1;
TR1= 1; /* TR1: timer 1 run */
ES=1; //使能中断
if((SCONF | 0x7F)==0xFF) //WATCH DOG
{
SCONF = 0x00;
WDTC = WDTC | 0x20;
}
WDTC = 0x84;
/*---------------主循环----------------*/
while(1)
{
P0=0xFF;
if(wdt_count<20)
WDTC = WDTC | 0x20; /*Clear WDT*/
if(flag_ea) /*wait the interrupt*/
{
EA=1;
REN=1;
}
else if (rbuf[0]==0x80)
{
wdt_count=0;
EA=1;
REN=1;
flag_ea=1;
}
else if (rbuf[0]==0xFF || rbuf[0]==0xF0 )
{
if(rbuf[0]==0xFF)
Get_Order4();
if(rbuf[0]==0xF0)
Get_Order12();
EA=1;
REN=1;
flag_ea=1;
wdt_count=0;
}
else
flag_ea=1;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -