我想用485做两单片机间的通讯,程序运行不通,诚有力者指点一下,谢谢!(RB1为485收发转换端口)代码如下:
接收代码:
#include
__CONFIG(0x3531);
#define nop asm("NOP")
unsigned char flag=0;
unsigned char reveive[8];
//=========================延时1MS函数=======================================
void delay(unsigned int n)
{
unsigned int i,j;
for(i=0;i
for(j=0;j<110;j++);
}
//==========================串口设置===============================
void instuart(void)
{
TRISB = 0xC0;
TRISC = 0x80;
TXSTA=0x04; //B100 SYNC=0;BRGH=1 异步高速方式传输8bit数据
RCSTA=0x80; //SPEN=1;允许同步串行口工
SPBRG=0x25; //将传输的波特率设置为9600
PIR1=0x00;
RCIF=0;
PIE1=PIE1|0x20;
CREN=1; //允许接收数据
TXEN=1; //允许发送数据
}
//=======================485接收中断=============================
void interrupt LOW_ISR()
{
unsigned int i=0;
RCIF=0;
reveive=RCREG;
i++;
if(i==8)
{
flag=1; //可以放数据的解析函数在里面
}
}
//=======================接收主函数===================================
main()
{
instuart();
RB1=1;
INTCON=0xC0;
while(1)
{
if(flag==1)
{
flag=0;
nop;
nop;
}
}
}
发送代码:
#include
__CONFIG(0x3531);
#define nop asm("NOP")
bank1 unsigned char txsubf[8]={0x03,0x03,0x03,0x03,0x04,0x04,0x04,0x04}; //串口发送缓存,可以改变缓存个数
//=========================延时1MS函数=======================================
void delay(unsigned int n)
{
unsigned int i,j;
for(i=0;i
for(j=0;j<110;j++);
}
//==========================串口设置===============================
void instuart(void)
{
TRISB = 0xc0;
TRISC = 0x80;
TXSTA=0x04; //B100 SYNC=0;BRGH=1 异步高速方式传输8bit数据
RCSTA=0x80; //SPEN=1;允许同步串行口工
SPBRG=0x25; //将传输的波特率设置为9600
PIR1=0x00;
RCIF=0;
PIE1=PIE1|0x20;
CREN=1; //允许接收数据
TXEN=1; //允许发送数据
}
//=======================发送主程序===============================
void main()
{
unsigned int i;
instuart(); //串口设置
RB1=0; //485芯片选择
INTCON=INTCON|0x00; //不允许总中断和外围中断
while(1)
{
for(i=0;i<8;i++)
{
TXREG=txsubf;
delay(1);
}
}
}
望大家指点,谢谢!