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

PIC16F193X串口发送带奇偶校验位的数据

[复制链接]
2886|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
eleczj|  楼主 | 2015-11-23 12:03 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
主机端是要求数据格式如下:
准备使用PIC16F193X单片机,串口发送的是带奇偶校验位数据,也就是说一个停止位+9个数据位(8bit数据+1比特校验)+一个停止位,因为PIC这个片子不带硬件奇偶校验,准备用软件实现,看了下pdf的步骤,

之前没写过9位数据,我把校验值运算以后,将结果后直接写入TX9D,再将要发送的数据写入TXREG就可以了吗?
如果做过这个格式的能否提供例程指点下?
沙发
eleczj|  楼主 | 2015-11-23 17:33 | 只看该作者
串口监控及串口调试都不能准确解析偶校验。。。
抓波形分析确实是偶校验。。怎么解?。。。串口软件不行?



使用特权

评论回复
板凳
eleczj|  楼主 | 2015-11-23 20:07 | 只看该作者


换个串口工具就好了,o(︶︿︶)o 唉。。。国内开源的串口工具很多都没有奇校验、偶校验区别的功能。。。。。。。。。。。

使用特权

评论回复
地板
yklstudent| | 2015-11-24 10:19 | 只看该作者
楼主上面用的什么串口调试工具?

使用特权

评论回复
5
eleczj|  楼主 | 2015-11-25 11:24 | 只看该作者
yklstudent 发表于 2015-11-24 10:19
楼主上面用的什么串口调试工具?



。。。就是文件安装包太大。。。

使用特权

评论回复
6
yklstudent| | 2015-11-25 12:18 | 只看该作者
eleczj 发表于 2015-11-25 11:24
。。。就是文件安装包太大。。。

恩,谢谢

使用特权

评论回复
7
carverzhang| | 2016-5-11 00:33 | 只看该作者
楼主,你的这个问题是怎么实现的 ?

使用特权

评论回复
8
fxl123| | 2022-7-12 14:43 | 只看该作者
楼主,现在又也用软件实现9位的奇偶校验,出了问题,能指教下啊

使用特权

评论回复
9
lcczg| | 2022-7-13 17:35 | 只看该作者
fxl123 发表于 2022-7-12 14:43
楼主,现在又也用软件实现9位的奇偶校验,出了问题,能指教下啊

具体什么问题?有波形吗?

使用特权

评论回复
10
fxl123| | 2022-7-13 18:07 | 只看该作者
发送1,2,3,4,5。显示的是3F,3F,03,3F,05.程序
uint add (uint data)        //奇校验 1的个数为奇数
{
        uint i = 0;
        int cnt = 0;
        int temp = 0;
        for(i = 0;i < 8;i++)
        {
                temp = ((data >> i) & 1);
                cnt += temp;
        }
        if(cnt%2 == 0)
        {
                return 1;
        }
        else
        {
                return 0;
        }

}


void Usart_Init (void)               
{      
        RCSTA = 0xD0;                //9位接收                       
        TXSTAbits.TX9 = 1;                  //9位发送        
        TXSTAbits.TXEN = 1;        //使能发送
        TXSTAbits.SYNC = 0;        //异步
        TXSTAbits.BRGH = 1;        //高速

        BAUDCONbits.BRG16 = 0; //SYNC = 0, BRGH = 1, BRG16 = 0
                                       
        SP1BRGH = 0;
        SP1BRGL = 0x19;                        //25,波特率9600
        RCIE = 1;
        RCIF = 0;
//        TXIE = 1;
}


void Usart_SEND (uint TX)
{      
        TXSTAbits.TX9D = add(TX);
        TXREG = TX;
        while(!TXSTAbits.TRMT);
        delayus(50);
}
波形还没看

使用特权

评论回复
11
huquanz711| | 2022-7-13 18:57 | 只看该作者
奇偶校验是自动加上的啊

使用特权

评论回复
12
fxl123| | 2022-7-15 10:34 | 只看该作者
没啊,硬件没有奇偶校验,只有9位数据发送,软件算奇偶位

使用特权

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

本版积分规则

3

主题

20

帖子

1

粉丝