打印
[PIC®/AVR®/dsPIC®产品]

485突然无法发送数据

[复制链接]
988|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
m1a1ha|  楼主 | 2016-12-1 10:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <p33fxxxx.h>



unsigned char recbuf[8];
unsigned char recpt;
char *testbuf="www.PIC591.com";
unsigned int i ;

void write_485_string(char *data,unsigned char len);

int main(void)
{
   
    _PLLPRE = 0 ;   //N1 = 2
    _PLLDIV = 38 ;  //M = 38+2 = 40
    _PLLPOST = 0 ;  //N2 = 2
                    //FOSC = (8/2) * 40 / 2 = 80M
    while(OSCCONbits.LOCK == 0) ;   //等待PLL稳定   
    _DISI = 1 ;     //使能DISI指令,部分内建函数需要,建议开启
   
   
    _TRISB9 = 1 ;               //RB9/AN9为输入口
    _PCFG9 = 0 ;                //RB9/AN9设置为模拟口
   
    _LATF3 = 1;             //串口TX默认为高电平
    _TRISF2 = 1;            //U1RX输入
    _TRISF3 = 0;            //U1TX输出
   
    _LATD6 = 0;             //处于接收态
    _TRISD6 = 0;            //485控制引脚输出
   
    U1MODE = 0X8800;        //传统的N,8,1模式,不使用CTS,RTS,BRGH = 0,只能使用该模式
    U1STA = 0X2400;         //收发使能,TSR空中断,
    U1BRG = 259;            //FCY=40M,40000/16/9.6 - 1 = 259
        
    _U1TXIP = 1;            //设置U2TX优先级
    _U1RXIP = 2;            //设置U2RX优先级
    _U1TXIF = 0;
        _U1RXIF = 0;
        _U1TXIE = 0;            //不启用发送中断
        _U1RXIE = 1;            //启动接收中断
   
    for(i = 0 ; i < 0xff ; i++);
    write_485_string(testbuf,14);    //
   
    while(1);
}
/*
函数功能:485发送函数
入口参数:字符串数组首地址,要发送的长度
出口参数:无
调用说明:发送完毕,485方向控制位回到接收状态
*/
void write_485_string(char *data,unsigned char len)
{
    _LATD6 = 1;
    while(len--)
    {
        U1TXREG = *data++;
        while(_U1TXIF == 0);
        _U1TXIF = 0;
    }
    LATDbits.LATD6 = 0;
}
/*
向量编号,见具体的链接文件,如xxxx.gld
*/
void __attribute__((__interrupt__,no_auto_psv)) _U1RXInterrupt(void)
{
    unsigned int temp;
   
    do
    {
        temp = U1RXREG;             //先读走数据
        _U1RXIF = 0;
        if(U1STAbits.OERR)          //判定是否出错
        {
            U1STAbits.OERR=0;
        }
        else
        {
            recbuf[recpt] = U1RXREG;
            recpt++;
            if(recpt == 8)
            {
                recpt = 0;
            }  
        }                  
    }while(U1STAbits.URXDA);     //一定要加此句,防止漏收
  
}


程序如上,之前还可以运行,昨天改了程序,突然不行了,一直停留在    while(_U1TXIF == 0);

不只是怎么回事
沙发
JY-DX-JY| | 2016-12-1 10:44 | 只看该作者
改了哪里?

使用特权

评论回复
板凳
皈依| | 2016-12-1 14:34 | 只看该作者
把代码改回去,然后一条条的再改回来

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

27

主题

69

帖子

0

粉丝