📄 rs485f.c
字号:
#include <C8051f020.h>
#include "main.h"
sbit DE_RE=P2^5;
void UART0_TX(unsigned char send[],unsigned char ii)
{
unsigned char i;
DE_RE = 1;//设置RS485处于发送状态
IE &= ~0x10;//关闭UART0中断用查询方式发送
for(i=0;i<ii;i++)
{
if(i==0)//发送从机地址,实现多机通信
{
TI0=0;
TB80=1;
SBUF0=send[i];
while(TI0==0);
TI0=0;
TB80=0;
}
else
{
SBUF0=send[i];
while(TI0==0);
TI0=0;
}
}
IE |= 0x10;//开启UART0中断
DE_RE = 0;//设置RS485处于接收状态
}
void UART0_ISR (void) interrupt 4 //URAT0中断处理
{
static unsigned char point=0,time=0;
if(RI0==1) //接受中断处理
{
RI0=0;
if(point==0&&SM20==1&&RB80==1) //广播地址识别
{
SM20=0; //以后收到为数据
RX[point++]=SBUF0;
}
else
{
if(point>=1)
{
RX[point++]=SBUF0;
if(point==3)
{
time=RX[2];//取报文长度
}
if(point>=3)
{
if(time==0)//全部接收完成
{
REN0=0;//禁止接收使能
SM20=1;
ReceiveBit=1;//置接收完成标志
point=0;
}
else
time--;
}
}
else
point=0;//等待下一次开始
}
}
else //发送中断处理
TI0=0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -