📄 comok.c
字号:
#include <reg51.h>
#include <intrins.h>
sbit P21=P2^1;
sbit P16=P1^6;
sbit P17=P1^7;
bit flag_RECend=0;
bit flag_order=0;
bit flag_chksum=0;
unsigned char num=0;
unsigned char tnum=0;
unsigned char cnum=0;
unsigned char buffer1[15]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
void send_str(void);
void delaytime(void);
void order_is(void);
void chksum(void);
void main(void)
{
unsigned char k;
num=0;
SP=0x60;
SCON=0x50;
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
PCON=0x00;
TR1=1;
EA=1;
ES=1;
RI=0;
TI=0;
while(1)
{
if (flag_RECend==1)
{
flag_RECend=0;
delaytime();
chksum();
order_is();
if ((flag_order==1) && (flag_chksum==1))
{
send_str();
flag_order=0;
flag_chksum=0;
}
delaytime();
for (k=0;k<15;k++)
{
buffer1[k]=0;
}
}
P21=1;
P17=1;
ES=1;
}
}
void serial(void) interrupt 4 using 1
{
ES=0;
P16=1;
if (RI)
{
unsigned char ch;
RI=0;
ch=SBUF;
buffer1[num++]=ch;
if (buffer1[0]!=0x5E)
{
num=0;
goto exit;
}
if (buffer1[3]!=0)
{
if (buffer1[3]!=0xB2)
{
num=0;
goto exit;
}
}
if ((num==(buffer1[4]+7)) && (buffer1[num-1]=0xd))
{
cnum=num;
flag_RECend=1;
num=0;
P16=0;
}
}
exit:
P16=1;
ES=1;
}
void send_str(void)
{
unsigned char i;
ES=0;
P21=0;
flag_RECend=0;
for (i=0;i<tnum;i++)
{
SBUF=buffer1[i];
P17=0;
while (!TI);
TI=0;
}
ES=1;
}
void chksum(void)
{
unsigned char chksum;
unsigned int j;
chksum=0;
for (j=1;j<cnum-2;j++)
{
chksum+=buffer1[j];
}
if (buffer1[cnum-2]==chksum)
{
flag_chksum=1;
}
}
void order_is(void)
{
unsigned char n;
switch (buffer1[5])
{
case 1:
buffer1[4]=0x2;
buffer1[5]=0x2;
buffer1[6]=0x1;
buffer1[7]=0;
for (n=1;n<7;n++)
{
buffer1[7]+=buffer1[n];
}
buffer1[8]=0xd;
tnum=9;
flag_order=1;
break;
case 3:
buffer1[4]=0x2;
buffer1[5]=0x4;
buffer1[6]=0x1;
buffer1[7]=0;
for (n=1;n<7;n++)
{
buffer1[7]+=buffer1[n];
}
buffer1[8]=0xd;
tnum=9;
flag_order=1;
break;
default:
buffer1[0]=0x5e;
buffer1[1]=0x10;
buffer1[2]=0x1;
buffer1[3]=0xb2;
buffer1[4]=0x1;
buffer1[5]=0x0;
buffer1[6]=0;
for (n=1;n<6;n++)
{
buffer1[6]+=buffer1[n];
}
buffer1[7]=0xd;
tnum=8;
flag_order=1;
}
}
void delaytime(void)
{
#pragma asm
DELAY: MOV 70h,#1BH
DELAY2: PUSH 70h
DELm1: DJNZ 70h,DELm1
POP 70h
DJNZ 70h,DELAY2
NOP
NOP
RET
#pragma endasm
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -