迪文科技论坛

 找回密码
 立即注册
搜索
查看: 2295|回复: 7

T5L的串口2,3,4,5如何更改奇偶校验

[复制链接]

5

主题

9

回帖

235

积分

中级会员

Rank: 3Rank: 3

积分
235
发表于 2019-12-7 16:44:51 | 显示全部楼层 |阅读模式
求助本人用的专用传感器是串口偶校验模式,T5L默认是没有校验位,如何更改,文档和头文件里没找到如何改,请帮忙,多谢
回复

使用道具 举报

0

主题

52

回帖

422

积分

中级会员

Rank: 3Rank: 3

积分
422
发表于 2019-12-7 19:57:01 | 显示全部楼层
本帖最后由 DWINcx... 于 2019-12-7 20:14 编辑

楼主,您好,

串口2是默认的DGUS协议,这个改不了,串口3、4、5可以通过OS串口配置指令COMSET,修改串口模式即可;
如果是C写的话,可以参考附件历程;

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

5

主题

9

回帖

235

积分

中级会员

Rank: 3Rank: 3

积分
235
 楼主| 发表于 2019-12-7 21:01:59 | 显示全部楼层
DWINcx... 发表于 2019-12-7 19:57
楼主,您好,

串口2是默认的DGUS协议,这个改不了,串口3、4、5可以通过OS串口配置指令COMSET,修改串口模 ...

我在工程代码中没找到修改相应寄存器的地方,另外能否在keli C下嵌入COMSET汇编语言改这参数,有现成的例子不,我只想把串口4改成偶校验,谢谢
回复

使用道具 举报

0

主题

52

回帖

422

积分

中级会员

Rank: 3Rank: 3

积分
422
发表于 2019-12-9 09:10:16 | 显示全部楼层
楼主,您好,

Keil C下是不能嵌入我们自己的那个OS指令的,如果把串口4改为偶校验,需要您自己改串口的驱动,


如下图所示,SCON2T和SCON2R寄存器的.5可以用作判断做奇偶校验位。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

45

主题

254

回帖

3617

积分

论坛元老

Rank: 8Rank: 8

积分
3617
发表于 2019-12-9 23:45:10 | 显示全部楼层
串口345本身就支持,保留os串口2调试功能的话,有几种方法实现。一种是用串口34做外部连接,串口3收到外部9位串口。然后转发给串口2的buff,串口2发送脚连接串口4接收,随后串口4中断赋值bit8并转发给串口3。

另外有一个比较快速的方法是用一片双串口的小单片机做转码。
回复

使用道具 举报

5

主题

9

回帖

235

积分

中级会员

Rank: 3Rank: 3

积分
235
 楼主| 发表于 2019-12-11 11:30:45 | 显示全部楼层
舞指飞扬 发表于 2019-12-9 23:45
串口345本身就支持,保留os串口2调试功能的话,有几种方法实现。一种是用串口34做外部连接,串口3收到外部9 ...

没这么复杂玩的,我最后看仔细看了下文档,只要把根据你要发的8bit数据,根据数据中的1的个数决定TB8 bit是设置成1还是0;接收时只需要用接收的数据判断下1的个数再和RB8比较一下一样吗就可以以验证了。以下是查表收发数据中1的个数的表。
const unsigned char numbits_lookup_table[256] = {
    0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4, 1, 2, 2, 3, 2, 3, 3, 4, 2,
    3, 3, 4, 3, 4, 4, 5, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3,
    3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3,
    4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 2, 3, 3, 4,
    3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5,
    6, 6, 7, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4,
    4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5,
    6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 2, 3, 3, 4, 3, 4, 4, 5,
    3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 3,
    4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 4, 5, 5, 6, 5, 6, 6, 7, 5, 6,
    6, 7, 6, 7, 7, 8
};
回复

使用道具 举报

45

主题

254

回帖

3617

积分

论坛元老

Rank: 8Rank: 8

积分
3617
发表于 2019-12-13 18:20:45 | 显示全部楼层
bjshion 发表于 2019-12-11 11:30
没这么复杂玩的,我最后看仔细看了下文档,只要把根据你要发的8bit数据,根据数据中的1的个数决定TB8 b ...

你想讨论的不是11位串口 和十位串口收发的问题,是第九位如何产生的问题。
回复

使用道具 举报

0

主题

39

回帖

153

积分

注册会员

Rank: 2

积分
153
发表于 2019-12-28 17:55:23 | 显示全部楼层
利用8051的PSW寄存器里面偶检验标记P(A的数据中1的个数是偶数,P=0;反之是1):

发送时:
MOV    A,TXDATA
MOV    C,P
MOV    TB8,C
MOV    SBUF0,A

接收时:
MOV    A,SBUF0
MOV    RXDATA,A
MOV    B.0,P
MOV    ACC.0,RB8
XRL     A,B
JNB     ACC.0,CHK_ERR
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|迪文科技论坛 ( 京ICP备05033781号-1 )

GMT+8, 2025-7-10 10:42 , Processed in 0.026913 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表