📄 uart0_isr.c
字号:
//串口发送数据
#include "c8051.h"
extern bit chuankou_bz;
extern bit jieshu_bz;
//extern bit error_bz=0;
//bit jieshu_bz=0;
extern bit error_bz;
extern uchar pointer;
extern uchar receive[COUNT1];
uchar txsjjs;
void UART0_ISR (void) interrupt 4
{
unsigned char astring;
while(RI0==0);//串口接收标志位的软件清零//
RI0=0;
astring=SBUF0;
// ES0=0;
if(pointer==0)
{if( astring==0x68&&chuankou_bz==0)
{chuankou_bz=1;
receive[pointer++]=astring;
txsjjs=100;
}
else error_bz=1;
}
else
{if(chuankou_bz==1)
{if(pointer>9)
{if(pointer==9+2+receive[9])
{ if(astring==0x16)
{ receive[pointer++]=astring;
jieshu_bz=1;
pointer=0; //jieshu通讯
}
else error_bz=1;
}
else
{if(pointer>COUNT1)
{error_bz=1;
}
else receive[pointer++]=astring;
}
}
else
{ if(pointer==7)
{if(astring==0x68)
{receive[pointer++]=astring;
}
else
{error_bz=1;
}
}
else
{receive[pointer++]=astring;
}
}
}
else error_bz=1;
}
if(error_bz==1)
{ uchar j;
error_bz=0;
pointer=0;
chuankou_bz=0;
for(j=0;j<COUNT1;j++)
{
receive[j]=0;
}
}
//if((astring==0x68)&&(chuankou_bz==0))
// {
// chuankou_bz=1;//开始接收数据标志
// }
// receive[pointer++]=astring;
// if(pointer==COUNT1)
// {
// ES0=0; //数据长度到了,表示可以结束了!
// }
// ES0=1;
}
void RS485(void)
{ uchar j;
uchar i;
uchar r[18]={0x68,0x90,0x78,0x56,0x00,0x00,0x00,0x68,0x81,0x06,0x43,0xc3,0x11,0x11,0x11,0x11,0xff,0x16};
// TXC=0;
for(i=100;i>0;i--);
// while(pointer==COUNT1)
// {
//pointer=0;
//chuankou_bz=0;
TXC=1;
ES0=0;
for(i=100;i>0;i--);
for(j=0;j<18;j++)
{
SBUF0=r[j];
while(TI0==0);
TI0=0;
}
ES0=1;
TXC=0; //485通讯向外发送数据
// }
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -