📄 485-pc-bus.c
字号:
#include <pic.h>
#include<pic1687x.h>
#define REDE RD2//TRISD2=0;
#define ADDR0 0x30
#define ADDR1 0x31
#define start 0x24
#define end 0x2a
unsigned char recdata;
unsigned char r_buf[8];
unsigned char flag;
unsigned char rcount;
unsigned char i,j,k,x,y;
void send_serial(unsigned char count) //串口发送
{
TXEN=1; //发送使能发送功能
TXREG=count;
while(1)
{
if(TRMT==1) break;
}
TXEN=0;
}
//系统初始化函数*/
void initial()
{
INTCON=0x00;
ADCON1=0x07;
PIE1=0;
PIE2=0;
}
//串行通信初始化程序*/
void sciinitial()
{
TXSTA=0x04;
RCSTA=0x80;
TRISC=0x80;
SPBRG=0x33;
PIR1=0x00;
PIE1=PIE1|0x20;
CREN=1;
TXEN=1;
}
//485接收中断
void interrupt LOW_ISR()
{
unsigned char a=1,flag_recover=0,flag_startrec=0;
if(RCIF==1)
{
RCIF=0;
while(!flag_recover)
{
while(!RCIF);
recdata = RCREG;
RCIF=0;
if((!flag_startrec)&&(recdata==start))
{
flag_startrec = 1;
}
if(flag_startrec)
{
r_buf[rcount] = recdata;
rcount ++;
if(recdata == end)
{flag_recover = 1;}
}
}
//recdata=RCREG;
flag=1;
}
}
//主函数
main()
{
initial();
sciinitial();
TRISD2=0;
REDE=0;
flag=0;
INTCON=INTCON|0xc0;
rcount=0;
while(1)
{
if(flag==1)
{
flag=0;
REDE=1;
if(rcount>4)
{
rcount=0;
if((r_buf[1]==ADDR0)&&(r_buf[2]==ADDR1))
{
send_serial(66);
send_serial(0x0a);
}
else
{
for(k=0;k<5;k++)
send_serial(r_buf[k]);
}
}
for(i=0;i<50;i++);
REDE=0;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -