打印

求助:pic16f690串口接收中断进不去

[复制链接]
5799|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tiger84|  楼主 | 2009-7-23 16:05 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
/*********************************************************** 
函数名称:void UartInit(void)
函数功能:uart初始化
入口参数: 
出口参数: 
备注:
***********************************************************/
void UartInit(void)
{
    TRISB5 = 1;       
    TRISB7 = 1;
    ANS11 = 0;
    
    // 引脚配置
    SPEN = 1;     // 允许串口

    //RABPU = 0;
    // 波特率   SPBRGH:SPBRG:= ((FOSC/BAUD_RATE)/16) - 1; 
    BRGH = 0;  // 低波特率
    BRG16 = 1; // 16位模式 

    SPBRGH = ((FOSC/BAUD_RATE)/16) - 1; 
    SPBRG = 1;    

    // 异步模式
    SYNC = 0;  // 异步    
    TXEN = 0;  // 允许发送    
    TXIE = 0;  // 禁止发送中断    
    CREN = 1;  // 使能接收
    RCIE = 1;  // 允许接收中断

         GIE    = 1;    
    PEIE   = 1;
    
}


/*********************************************************** 
函数名称:void UartRxInt(void)
函数功能:uart 接收中断 
入口参数: 
出口参数: 
备注:
***********************************************************/
void interrupt UartRxInt(void)
{
    volatile uchar data;

    RB4 = 1;      // 控制LED灯亮
    
    if(RCIE && RCIF)  // RCIF不能软件清0
    {    
                // 数据
        data = RCREG;
        g_UartRxBuf[g_UartRxCnt++] = data;        

        if(g_UartRxCnt >= UART_RECEBUF_LENGTH)  // 防止溢出
        {
            g_UartRxCnt = 0;
        }
        
    }
    
    if(1 == FERR)    // 帧错误 
    {    
        RB4 = 1;      // test
        data = RCREG;   // 无效字符  
        
        if(1 == FERR)
        {
            SPEN = 0;
            NOP();
            SPEN = 1; 
        }    
        
    }

    if(1 == OERR)  // 溢出错误
    {
        RB4 = 1;      // test
        CREN = 0; 
        NOP();
        CREN = 1; 
    }
}

通过PC发数据给它,就是进入不了中断!
搞了1天,基本上想不出什么思路了,大家帮我看看吧
沙发
tiger84|  楼主 | 2009-7-23 16:06 | 只看该作者

测试了PIC的接收脚,发送时,测试它的接收脚,是有波形的

5V的TTL电平绝对标准。

现象说明一下:
如果进入了串口接收中断的话,那么控制的LED灯就应该亮,可是我怎么发数据,灯都没反应,灯的控制没有问题,就是说单片机的接收脚接收到数据,并没有进入中断。

使用特权

评论回复
板凳
wangruixu1121| | 2013-11-6 14:57 | 只看该作者
我也遇到进不到串口中断的问题 顶一下 有知道的大神 给小弟解解疑惑

使用特权

评论回复
地板
wxyicc| | 2015-4-30 16:40 | 只看该作者
tiger84 发表于 2009-7-23 16:06
5V的TTL电平绝对标准。现象说明一下:如果进入了串口接收中断的话,那么控制的LED灯就应该亮,可是我怎么发 ...

LZ .N你的问题怎么解决的?能否分享一下,现在我这边也出现了同样的问题

使用特权

评论回复
5
NE5532| | 2015-5-2 16:03 | 只看该作者
wxyicc 发表于 2015-4-30 16:40
LZ .N你的问题怎么解决的?能否分享一下,现在我这边也出现了同样的问题

先调发送,再调接收,中断里还在看IF标志,资料都没看完就敢写程序啊:lol

使用特权

评论回复
6
wxyicc| | 2015-5-4 09:29 | 只看该作者
NE5532 发表于 2015-5-2 16:03
先调发送,再调接收,中断里还在看IF标志,资料都没看完就敢写程序啊 ...

发送OK 。。。就是无法进入中断函数:

2.png (14.63 KB )

2.png

1.png (10.99 KB )

1.png

3.png (6.46 KB )

3.png

使用特权

评论回复
7
wxyicc| | 2015-5-4 09:31 | 只看该作者
NE5532 发表于 2015-5-2 16:03
先调发送,再调接收,中断里还在看IF标志,资料都没看完就敢写程序啊 ...

应该是某个地方没有设置对,分享分享下

使用特权

评论回复
8
NE5532| | 2015-5-4 11:58 | 只看该作者
while循环里不停的在做初始化,串口还能工作么?应该是在空while循环里等来数吧。

使用特权

评论回复
9
兰天白云| | 2015-5-7 13:53 | 只看该作者
仿真,当PC发完数据后,暂停运行,看看与串口中断的有关标志是否正常

使用特权

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

本版积分规则

101

主题

862

帖子

0

粉丝