📄 main.c
字号:
#include "at89x52.h"
#define uchar unsigned char
#define uint unsigned char
sbit B_RFIN = P3^2;
sbit B_TFIN = P3^3;
uchar dat,m;
void PSendChar(uchar ch)
{
uchar i;
B_TFIN=0;
Mydelay_800us();
for(i=8;i>0;i--)
{
B_TFIN=ch&1;
Mydelay_800us();
ch>>=1;
}
B_TFIN=1;
Mydelay_800us();
}
void Serial_SimulatRe(void) // 9600b/s
{
uchar i;
if(!B_RFIN) //起始位0,共扫描3次
{
Mydelay_200us();
if(!B_RFIN)
{
Mydelay_200us();
if(!B_RFIN)
{
Mydelay_200us();
if(!B_RFIN)
{
Mydelay_200us();
}else {return;} // 出错,退出
}else{return;}
}else{return;}
}else{return;}
for(i=0;i<8;i++) //扫描第一到第八位,每位扫描三次。
{
dat=dat>>1;
Mydelay_200us(); //为1,
{ //为0;
Mydelay_200us();
if(!B_RFIN)
{
Mydelay_200us();
if(!B_RFIN)
{
Mydelay_200us();
dat=dat&0x7f;
}else{return;} //出错,退出
}else {return;}
}
}
Mydelay_200us();
if(!B_RFIN)
{ //停止位
return;
}
}
void Serial_Moni(void) interrupt 0
{
EX0=0; //禁止init0中断
Serial_SimulatRe();//接收一BYTE,
//PSendChar(dat);
EX0=1; //开中断
}
void check_demo_send(uchar *buf)
{
uchar ecc=0;
while(*buf==0)
{
ecc=ecc^(*buf);
PSendChar(dat);
buf++;
}
PSendChar(ecc);
PSendChar(0x01);
}
bit ceck_demo_recv(uchar *buf)
{
uchar ecc=0;
while(1)
{
*buf=dat;
if(dat==0x01)
{
buf=0;
break;
}
ecc=ecc^(*buf);
}
if(ecc!=0)
return 0;
return 1;
}
void main(void)
{
P0=P1=P2=P3=0xff;
initial();
while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -