📄 cjcx.txt
字号:
#include <regx52.h>
#include <stdlib.h>
#include "encrypt.h"
#include "cmd.h"
#include "comm.h"
#include "24cxx.h"
#include "password.h"
/*------------------------------------------------
AT89S5X SFR定义(REGX52.h中未定义)
--------------------------------------------------*/
sfr AUXR = 0x8e;
sfr WDTRST = 0xa6;
sfr WDTPRG =0xA7;
sfr16 TIMEER2 = 0xcc;
sfr16 RCAP2 = 0xca;
#define WDIDLE (1<<4)
sbit KEY_START=P3^3;
sbit LIGHT_REG_OK=P3^7;
sbit OUT_38K =P2^7;
const DWORD id=15600;
extern uchar RecBuf[7];
extern uchar WrIdx;
extern bit DataOK;
#define FRAME_HEAD_SLAVE 0x23
uchar SndBuf[7]={'\0'};
uchar *RecCmd=(uchar *)&RecBuf[1];
uchar *SndCmd=(uchar *)&SndBuf[1];
DWORD rand_num;
DWORD *RecData=(DWORD *)&RecBuf[2];
DWORD *SndData=(DWORD *)&SndBuf[2];
bit isConnected;
uchar code my_num=0;
sbit S1=P1^7;
sbit S2=P1^6;
sbit S3=P1^5;
sbit S4=P1^4;
sbit S5=P1^3;
sbit S6=P1^2;
sbit S7=P1^1;
sbit S8=P1^0;
uchar time=0;
void ClrWdt(void)//喂狗
{
WDTRST = 0x1e;//89s52内狗
WDTRST = 0xe1;//89s52内狗
}
void delay(void)
{
uchar i,j;
for(i=100;i>0;i--)
for(j=100;j>0;j--);
}
void send_data(void)
{
REN = 0; //关接受
send_string(SndBuf,6);
REN = 1; //允许接受
}
void init(void)
{
LIGHT_REG_OK=0;
isConnected =0;
T2CON = 0x00; // 16 Bit Auto-Reload Mode
RCAP2H = (65535-32767)/256; // 重装值
RCAP2L = (65535-32767)%256;
TH2 = (65535-32767)/256;
TL2 = (65535-32767)%256;
ET2 = 1;
TR2 = 1;
SndBuf[0]=FRAME_HEAD_SLAVE;
TMOD |=0x02;
TH0= 0xF4;
ET0 =1;
TR0 =1;
init_comm();
EA =1;
P1=0;
}
void main(void)
{
init();
send_string("Hello",5);
AUXR |= WDIDLE;
PCON |= GF0_ | IDL_;//喂疯狗(GF0_=1)并进入空闲状态(IDL_=1)
WDTPRG |=0x06;
ClrWdt();
while(1)
{
if(!isConnected)
{
bit Key=0;
if(KEY_START==0)
{
delay();
if(KEY_START==0)
{
Key=1;
}
while(KEY_START==0);/*ClrWdt();;*/
}
if(Key)
{
*SndCmd=CMD_COME;
send_data();
S1=1;
}
}
ClrWdt();
if(time>=150) //150*32767*1.08 us =5.3s
{
time =0;
send_string("idle",4);
ET0 = 0;
ET2 = 0;
EX0 = 1;
EX1 = 1;
WrIdx = 0;
ClrWdt();
PCON |= IDL_;
}
if(DataOK)
{
time=0;
switch(*RecCmd)
{
case CMD_WHO:
*SndData=id;
Encrypt(&SndBuf[2],4,*RecData,RecBuf[5]&0x07);
*SndCmd=CMD_ID;
send_data();
S2=1;
break;
case CMD_PASSWORD:
*SndData=ReadPass();
Encrypt(&SndBuf[2],4,*RecData,RecBuf[5]&0x07);
*SndCmd=CMD_CRYPT_PASSWORD;
send_data();
S3=1;
break;
case CMD_NEW_PASSWORD:
{
*SndCmd=CMD_REPLY_PASSWORD;
*SndData=*RecData;
SndBuf[2] |= (my_num<<4);
send_data();
S4=1;
break;
}
case CMD_OVER:
WritePass(*SndData);
P1=0;
break;
default:
break;
}
DataOK=0;
}
}
}
void t0(void) interrupt 1 using 0
{
OUT_38K=! OUT_38K;
}
void t2(void) interrupt 5 using 0
{
TF2 =0;
time++;
}
void int0(void) interrupt 0 using 0
{
ET0 = 1;
ET2 = 1;
EX0 = 0;
EX1 = 0;
}
void int1(void) interrupt 2 using 0
{
ET0 = 1;
ET2 = 1;
EX0 = 0;
EX1 = 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -