打印

中断!

[复制链接]
3180|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
fzh123|  楼主 | 2013-3-18 22:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 fzh123 于 2013-3-20 09:21 编辑

void sci_Init(void)  // 串口配置
{
        BRGH = 1;        // high baud rate
        SPBRG =25;  // 设置波特率9600
        SYNC = 0;        // 1=同步接收方式 0=异步接收方式
        SPEN = 1;        // 串口使能位
        CREN = 1;        // 1=允许连续接收 0=禁止连续接收
        SREN = 0;        // 异步方式:此位未用
        TXIE = 0;        // 关闭发送
        RCIE = 1;        // 打开接收中断
        RCIF = 0;
        PEIE = 1;
        TX9  = 0;        // 1:选择9位接收 0:选择8位接收
        RX9  = 0;        // 1:选择9位接收 0:选择8位接收
        TXEN = 1;        // 发送允许
        TRISC6=1;   // 作为串口使用,RC6必须设置为输入
        TRISC7=1;   // 作为串口使用,RC7必须设置为输入       
}

void interrupt ISR(void)  //中断程序
{       
        if(RCIF && RCIE)
        {
                RCIF = 0;
                ReceiveOneByte();
        }
        if(T0IE && T0IF)
        {
                T0IF = 0;
                TMR0 = 0X09;

                TimeOutMonitor();
                ms_500++;
        }
}


void ReceiveOneByte(void)  //接收一个字节
{
        receive_timeout_flag = 0;                //接收到数据,超时标志清零
        receive_timer = RECEIVE_TIMEOUT;        //接收到数据,超时时间赋值

        if(ReceiveIndex < MAX_BUF_LENGTH)
        {
                RecBuf[ReceiveIndex++] = RCREG;
        }
        else
        {
                receive_timer = 0;
                receive_timeout = 0;
        }
}


void TimeOutMonitor(void)  //超时监测
{
        if(receive_timer > 0)     //接收超时检测
        {
                receive_timer--;
                if(receive_timer == 0)
                {
                        receive_timeout = 1;
                }
        }

        else
            receive_timeout_flag = 0;
}

void uartcom(void)  //串口处理函数
{
        if(receive_timeout_flag == 0)
        return;
        receive_timeout = 0;    //一帧数据接收完成,清超时标志。
        if((RecBuf[0] == 0X51)&&(RecBuf[1] == 0X52)&&(RecBuf[2] == 0X53) )
        {
                ;
        }
    ReceiveIndex = 0;
}


串口中断一直发数据,将断点打在串口处理函数里面,只能停留一次;打在中断函数里面,
也是只能进一次,都是在复位重新运行后才能停在断点处。怎么回事呢?

沙发
huangxz| | 2013-3-18 22:23 | 只看该作者
看不懂加理解不了,楼主这样描述估计只有自己才能解决自己的问题。

使用特权

评论回复
板凳
fzh123|  楼主 | 2013-3-19 08:37 | 只看该作者
算了,如果出现全速运行到不了断点,单步运行能到断点,是什么情况?

使用特权

评论回复
地板
fzh123|  楼主 | 2013-3-20 10:00 | 只看该作者
watch看到的OERR等于1,接收数据溢出错误。怎么回事?

使用特权

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

本版积分规则

61

主题

335

帖子

1

粉丝