这是我的PIC16F877A单片机的485通讯程序,目前只能接受串口调试助手的数据,但是返回的数据不合适,RB1是接发控制口。请大家看看那不合适。指点一下,谢谢!
#include <pic.h> __CONFIG(0x3531); #define _asm{"nop"} NOP() #define uchar unsigned char #define uint unsigned int uchar receive[11]; // 接收数据数组 uchar receive_count=0;// 接收数据个数计数 uchar send_count=0; // 发送数据个数计数 uchar flag; // =1,接收到8个数据 uchar a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a0; //=========================延时1MS函数======================================= void delay(unsigned int n) { unsigned int i,j; for(i=0;i<n;i++) for(j=0;j<110;j++); } //================================SCI部件初始化子程序============================================== void sciint() { TRISB = 0xc0; TRISC = 0x80; SPBRG=0x19; //将传输的波特率设置为9600 TXSTA=0x04;//B100 SYNC=0;BRGH=1 异步高速方式传输8bit数据 RCSTA=0x80;//SPEN=1;允许同步串行口工作 CREN=1; //允许接收数据 PORTB=0x02; }
//=================================================主函数========================================== main () { sciint();//SCI部件初始化子程序 RCIF=0; while(1) { while(1) { if(RCIF==1) break; } receive[receive_count]=RCREG; //接收数据并存储 receive_count++; // 接收计数器加1 if(receive_count>10) // 如果已经接收到8个数据 { a0=receive[0]; a1=receive[1]; a2=receive[2]; a3=receive[3]; a4=receive[4]; a5=receive[5]; a6=receive[6]; a7=receive[7]; a8=receive[8]; a9=receive[9]; a10=receive[10]; receive_count=0; // 接收计数器清0 flag=1; //置接收到数据标志 PORTB=0x00; RCIF=0; CREN=0; } while(flag) { TXEN=1; //使能发送 TXREG=receive[send_count]; send_count++; // 发送计数器加1 delay(10); while(1) { if(TXIF==1) break; } if(send_count>10) { send_count=0; flag=0; TXEN=0; CREN=1; //允许接收数据 PORTB=0x02; } } } }
有图,是附件
|