打印

PIC18系列串口发送中断

[复制链接]
6517|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
mei326|  楼主 | 2011-12-30 17:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 mei326 于 2011-12-31 09:29 编辑

用串口中断发送9位数据,如何实现?看pdf上说了,需要发送的时候把串口中断使能,即置位TXEN,不需要发送的时候把串口中断禁止。

    if((TX1IE)&&(TX1IF))//串口发送中断
    {
        if(txlenth==1)
        {                   //最后一个数据
            TX9D1 = 1;
            TXREG1 = *Ptx;  //在串口中断允许之前已指向数据发送缓存首地址           
            TX1IE = 0;
            txlenth = 0;
        }
        else
        {
            TX9D1 = 0;            
            TXREG1 = *Ptx;
            Ptx++;
            txlenth--;
        }
    }

偶尔出现数据不正确!不知程序中哪里有误!请指正~
沙发
yewuyi| | 2011-12-31 08:43 | 只看该作者
if((TX1IE)&&(TX1IF))//串口接收中断


TXIE、TXIF是发送中断控制位,不是接受控制位啊

使用特权

评论回复
板凳
mei326|  楼主 | 2011-12-31 09:32 | 只看该作者
回ye斑竹->备注有误,已修改!帮看下我的串口中断处理程序是否有误!!!

使用特权

评论回复
地板
yewuyi| | 2011-12-31 11:13 | 只看该作者
1、怎么个不正确?你是怎么确定错误的?
2、你弄明白TX9D1干什么用的了吗?
3、if(txlenth==1)和后面的txlenth--;
这是一种不健康代码,建议改成if(txlenth<=1)

使用特权

评论回复
5
tdh03z| | 2012-1-1 19:19 | 只看该作者
串口发送中断,你需注意或谨慎使用,前几个月用PIC18F4685做串口收发,中断接收没有问题,但利用中断进行数据发送,则出现程序运行不稳定,几小时内看门狗会复位1次,后发现是发送中断没处理好导致的,因时间紧没有仔细查找原因,将发送程序放到主循环中后,程序运行稳定,看门狗取消后查看运行稳定性,72小时无复位死机现象。
    主要是发送中断使能后,如果数据没有发送完成,会一直触发中断,如果波特率为9600,则一个数据发送大约需1ms,导致这1ms一直被中断。真是搞不懂咋回事。

使用特权

评论回复
6
兰天白云| | 2012-1-5 13:07 | 只看该作者
楼上几位,数据手册还是没看清楚,中断发送,PIC与其他单片机差异很大,问题往往就出现在最后1字节发送
当你装入最后1字节时,倒数第2字节才刚刚开始发送,当发送最后1字节时,中断已不为你服务

使用特权

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

本版积分规则

个人签名:与其等待机会,不如主动出击...

117

主题

764

帖子

2

粉丝