📄 red_code.c
字号:
#include "stdio.h"
#include "reg51.h"
#include "intrins.h"
#include "absacc.h"
#include "stdlib.h"
#include "ctype.h"
#define uchar unsigned char
#define uint unsigned int
sbit LED=P2^6;
sbit P2_4=P2^4;
sbit P2_5=P2^5;
uchar a1,a2,b1,b2;
uchar time0_count=0;
uchar ms1000_flag=0;
uchar ms50_flag=0;
uchar receive_end_flag=0;
uchar receive_data=0;
uchar transmit_data[10];
uchar first_flag=0;
void delay(uint DelayTime) //延时函数
{
while(DelayTime!=0)
{
DelayTime--;
}
}
void CPU_init()
{
IE = 0;
PSW = 0;
IP = 0x1A; //外部中断0和1为高优先级中断?
TMOD = 0x21; //T1为定时器,T0为定时器,为16位定时器
TCON = 0;
SCON = 0X50;
PCON = 0;
TR0 = 0;
TR1=0;
TL0 = 0xFD; //定时器0初值19453=4BFD
TH0 = 0x4B;
TL1 = 0xFD; //波特率设置9600
TH1 = 0xFD;
EA = 0; // all interrupt
IT0 = 1; //set into:falling eage trigger
IT1 = 1; //边沿触发
TR0 = 1; //开定时器0
TR1 = 1; //开定时器1
ET0 = 1; //定时器0中断允许
}
void time0_int() interrupt 1 using 0
{
TR0=0;
ET0=0;
TL0=0x00; //50ms定时器重装载值
TH0=0x4C;
time0_count++;
if(time0_count>=20)
{
ms1000_flag=1;
}
TR0=1;
ET0=1;
}
void serial_int4() interrupt 4 using 1
{
if(RI==1)
{ receive_data=SBUF;
RI=0;
receive_end_flag=1;
}
}
void transmit()
{uchar j;
P2_5=1;
for(j=0;j<5;j++)
{
SBUF=transmit_data[j]; //往SBUF写报文
while(TI==0);
TI=0;
}
P2_5=0;
TR0=0;
ET0=0;
TL0=0x00; //50ms定时器重装载值
TH0=0x4C;
time0_count=0;
ms1000_flag=0;
TR0=1;
ET0=1;
}
main()
{
uchar j,i;
CPU_init();
ES=1;
ET0=1;
REN=1;
EA=1;
transmit_data[0]=0xef;
transmit_data[4]=0xfe;
for(i=0;i<5;i++)
{
P2_4=1;
P2_4=0;
delay(15000);
LED=!LED;
}
P2_5=0;
for(;;)
{
P2_4=1;
P2_4=0;
a2=a1;
a1=~(((P1<<7)&0x80)|((P1<<5)&0x40)|((P1<<3)&0x20)|((P1<<1)&0x10)|((P1>>7)&0x01)|((P1>>5)&0x02)|((P1>>3)&0x04)|((P1>>1)&0x08));
b2=b1;
b1=_crol_(((~P2)&0x0f),4);
if(a2!=a1||b2!=b1)
{
transmit_data[0]=0xef; //报文头
transmit_data[1]=a1; //报文区
transmit_data[2]=b1; //报文区
transmit_data[3]=a1+b1; //校验和
transmit_data[4]=0xfe; //报文尾
transmit();
first_flag=1;
}
else
{
if(ms1000_flag==1&&first_flag==1) //每隔一秒或是状态有变化是发送;
{
transmit();
}
}
if(receive_end_flag==1)
{
receive_end_flag=0; //发送完毕时需要重新置零
if(receive_data==0xB2)
{
P2_5=1;
for(j=0;j<5;j++)
{
SBUF=transmit_data[j]; //往SBUF写报文
while(TI==0);
TI=0;
}
P2_5=0;
receive_data=0;
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -