用PIC16F883作485通信,程序如下:
void interrupt SerialAndTimer1(void)
{
if (RCIF&RCIE)
{
RCIF=0;
if(ModbusHead>=ModbusTime)
{
RxUartBuf[RxIndex++]=RCREG;
}
else if(ModbusHead<ModbusTime)
ModbusHead=0;
if((RxIndex)&&(ModbusTail<ModbusTime))
ModbusTail=0;
return;
}
if(TXIF&TXIE)
{
//TXIF=0;
if(TxNum<TxIndex)
TXREG=TxUartBuf[TxNum++];
else if(TxNum==TxIndex)
{
TxNum++;
while(!TRMT);
TXEN=0;
Rs485RxEn;
ClrBufInt(TxUartBuf,UartBufLen);
TxNum=0; TxIndex=0;
if(CfgModeIsIn)
{
RFMODULEOUTCFG;
CfgModeIsIn=0;
SPBRG=BaudArray[0];
}
}
}
if(TMR1IF==1)
{
TMR1ON=0; //停止计时
LoopTime++;
if(RfStatus.databit.RST)
{
RfRstTime++;
if(RfRstTime>3000)
{
RfRstTime=0;
RFMODULEOUTRST;
RfStatus.databit.RST=0;
}
}
if(RfStatus.databit.CFG)
{
RfCfgTime++;
if(RfCfgTime>3000)
{
RfCfgTime=0;CfgModeIsIn=1;
RfStatus.databit.CFG=0;
}
}
TMR1IF=0;
if((!RxIndex)&&(ModbusHead<ModbusTime)) //当串口准备接收数据的时候,进行延时计数,判断帧头
{
ModbusHead++;
}
else if((RxIndex)&&(ModbusTail<ModbusTime)) //当串口接收到数据的时候,进行延时计数,判断帧尾
{
ModbusTail++;
}
TMR1H=0xfe;
TMR1L=0xa6; //定时100ms
TMR1ON=1; //启动计时
return;
}
}
void UartInitial(void)
{
TXSTA=0X00; //八位数据发送,异步低速主控模式
RCSTA=0X90; //八位数据接收,连续接收
BAUDCTL=0X40; //8位波特率产生器
SPBRG=BaudArray[BaudNum]; //波特率9600;spbrg=Fosc/(64*baudrate)-1
}
void AdInit()
{
SSPSTAT=0xc0; //---SMP---CKE---D/A---P---S---R/W---UA---BF
//---1-----1-------------------------------
//末尾采样输入数据,上升沿发送数据
SSPCON=0x22; //---WCOL---SSPOV---SSPEN---CKP---SSPM
//------------------1-------------0010
//使能串行口,主控模式,时钟为Fosc/64
}
void McuInitial()
{
ANSEL=0x00;
ANSELH=0x00;
TRISA=0x17;
TRISB=0xff;
TRISC=0xd4; //SDO配置为输出,SDI配置为输入,SCK配置为输出。其余默认
LocalAdr=PORTB&0x1f;
BaudNum=PORTB&0xe0;
BaudNum>>=5;
BaudNum=0;
TMR1Initial();
UartInitial();
AdInit();
ei();
PEIE=1;
TXIE=1;RCIE=1;TMR1IE=1;
TMR1ON=1;
}
void main()
{
asm("NOP");
McuInitial();
CorrectOver1=eeprom_read(CorrectFlag1);
CorrectOver2=eeprom_read(CorrectFlag2);
if((CorrectOver1!=0x55)||(CorrectOver2!=0x55))
{}
while(1)
{
TxUartBuf[TxIndex++]=0x55;
Send_Com();
}
但发现串口无数据接收,不知道怎么回事,初次使用883系列,还望大家告知指点,项目急,连夜加班。。。。。。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>