找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2269|回复: 12
收起左侧

请教SADDR和SADEN寄存器理解的问题

[复制链接]
ID:47286 发表于 2022-4-14 14:08 | 显示全部楼层 |阅读模式
这是手册里的解释
1.png


我理解SADDR和SADEN是与的关系 类似IP地址的子网掩码 那么 现在我想只识别1个地址应该怎么写 比如SADDR是0x10 只接收发给0X10的指令 我把SADDR和SADEN都写成0x10 结果是0x10~0x1f都可以响应
回复

使用道具 举报

ID:624769 发表于 2022-4-14 17:31 来自手机 | 显示全部楼层
saden = 0xff;   即需要完全匹配。
回复

使用道具 举报

ID:47286 发表于 2022-4-14 18:09 | 显示全部楼层
188610329 发表于 2022-4-14 17:31
saden = 0xff;   即需要完全匹配。

感谢回复

试了一下 还是0x10~0x1f 是我哪没写对么

在main里 while(1)之前写了以下两句

SADEN = 0x10;        //0001 0000
SADDR = 0xff;        //0001 1111
回复

使用道具 举报

ID:47286 发表于 2022-4-14 19:00 | 显示全部楼层
188610329 发表于 2022-4-14 17:31
saden = 0xff;   即需要完全匹配。

找到问题了 低级错误 两个寄存器赋值反了 再次感谢回复
回复

使用道具 举报

ID:47286 发表于 2022-4-14 19:03 | 显示全部楼层
各位看帖的兄弟 不用回复了 我自己把赋值写反了 为此 声明一个变量

uint 打脸=低级错误;
回复

使用道具 举报

ID:123289 发表于 2022-4-15 10:46 | 显示全部楼层
我也常发生这样的事,自己一个人找许久找不出。把问题与别人一提,却发现是个低级失误。
回复

使用道具 举报

ID:47286 发表于 2022-4-15 10:51 来自手机 | 显示全部楼层
yzwzfyz 发表于 2022-4-15 10:46
我也常发生这样的事,自己一个人找许久找不出。把问题与别人一提,却发现是个低级失误。

感谢回复

这功能还不错 但只能串口1 其他口都没用 有点遗憾
回复

使用道具 举报

ID:624769 发表于 2022-4-15 16:23 | 显示全部楼层
dzbj 发表于 2022-4-15 10:51
感谢回复

这功能还不错 但只能串口1 其他口都没用 有点遗憾

这个功能, 其实现在用处已经不大了, 只不过被保留了下来, 现在单片机速度都很快了, 自己写几行代码, 利用 8+1的传输方式,自己判断一下,其实并不复杂, 而实际使用中, 硬件的 SADDR + SADEN 对串口的性能提升,帮助其实不大。所以,没有什么好可惜的。
回复

使用道具 举报

ID:47286 发表于 2022-4-16 00:26 | 显示全部楼层
188610329 发表于 2022-4-15 16:23
这个功能, 其实现在用处已经不大了, 只不过被保留了下来, 现在单片机速度都很快了, 自己写几行代码, 利用 ...

你说的是 可能我有点强迫症吧 总是担心

记得和你说过 我有一套自己用的系统 基本是以太网的概念 只不过用485传输 不用局域网是转LAN模块体积大 成本高 另外资源开销 耗电量 以及速度 实际上TCP/IP是一个效率非常低的协议 大概只有30%吧 因为有很多固有信息层

这个系统分三层 主控 子控和执行 之间的协调指令 数据传输 都是靠串口 先不说速率和带宽问题 起码是需要很频繁的产生串口中断 最早用8位通讯 软件判断地址 后来用9位 先判断地址 那么其实每次接收都会产生中断 不管是不是呼叫自己 至少要收一位来判断地址用 用单片机硬件功能的话 至少可以不产生中断了 我用cpu都是往死里用 只要还能干就让它多干 频繁的中断总是有可能影响其它函数 因此有点喜欢这功能
回复

使用道具 举报

ID:624769 发表于 2022-4-16 02:58 | 显示全部楼层
dzbj 发表于 2022-4-16 00:26
你说的是 可能我有点强迫症吧 总是担心

记得和你说过 我有一套自己用的系统 基本是以太网的概念 只不 ...

你说的这些都对。所以,我也只是说在如今单片机速度越来越快的今天, 硬件SADDR+SADEN 帮助不大,不是完全没有用。

以下这个是建议,供你在非串口1前提下参考。(我串口1多用作同步移位寄存器,硬件操作HC595或者DS1302这些,这一点也是属于榨干单片机的性能,应该属于和你类似的强迫症吧)
串口中断,没有你想象的那么消耗资源,如果,你只是进入中断 读一下RB8 的话,其实这个动作可以忽略不计。所以,当用串口2,3,4, 做从机的话,先读RB8, 如果不是送地址,直接抛弃。继续休息,如果是地址才比较地址,然后,决定,是否接受余下的数据。那么,对于1T单片机来说,这个串口中断的影响可以忽略不计。而这种软件的 SADDR +SADEN 方式,有一个硬件方式没有的优势,可以接受广播地址(类似TCP/IP)。你可以判断,是否是针对所有从机的广播。而硬件方式,就无法实现这个功能了……
回复

使用道具 举报

ID:47286 发表于 2022-4-16 12:44 | 显示全部楼层
188610329 发表于 2022-4-16 02:58
你说的这些都对。所以,我也只是说在如今单片机速度越来越快的今天, 硬件SADDR+SADEN 帮助不大,不是完 ...

收到 多谢回复

请教一下 串口1只有2根线 怎么操作DS1302 那东西不是要3根线吗 而且也不是串口通讯 你意思是通讯线占用串口1的两根线吗 那意义何在呢 1302并不会主动发送靠中断产生响应吧 这样相当于占用一个通讯口和一个中断 是不是反而浪费了

中断开销的问题 有你的解释我就释然多了 看来串口234还可以再挖一下潜力

另外互通一下信息 硬件地址判断可以广播 FF是默认的广播地址 线上的所有串口都会响应
回复

使用道具 举报

ID:624769 发表于 2022-4-16 15:25 | 显示全部楼层
dzbj 发表于 2022-4-16 12:44
收到 多谢回复

请教一下 串口1只有2根线 怎么操作DS1302 那东西不是要3根线吗 而且也不是串口通讯 你 ...

串口1的 "同步寄存器模式" 是把 TX 用作时钟线(CLK), RX用作数据线(IO)来进行传送的。
当 SCON = 0x00; 的时候, 你把要发送的数据 写入 SBUF,  就会触发 串口开始工作,从TX发出8个时钟,并且从RX 按 低位在前(LSB)的格式,把数据发出去,发送完一整个字节之后,会TI置1,你查询方式也好,中断方式也好,得到TI == 1 这个信号之后, 继续清TI  写 SBUF 发送下一位, 这是一个非常高效的方式,在用连续写,连续读的方式的时候,完全不影响单片机的其他工作,不用像 模拟方式那样,用for循环 一个一个位的发出去。接收的时候,一样道理,当RI =0, REN =1 则会TX发出8个时钟, RX依次读取 外部IO 的电平, 全部接收后 写入SBUF 并且 RI 置1, 你查询也好,中断也好,继续后续操作即可。
驱动 DS1302 需要多用一个单片机 IO 来控制 CE, 不过,这里有一个问题,就是DS1302 速度比较慢,而串口1的同步移位寄存器速率不可调,需要把晶振调到 6MHz 以下才能比较稳定传输,不是非常合算。(我前文提到DS1302主要是举个例子,并不推荐这样操作DS1302) 实际上,串口1我主要是 操作HC595, 他速率高到27MHz 就算 我MCU 主频开到最高,也能稳定传输,对于驱动大面积点阵,用串口1可以有效避免在定时器中断里耗费大量的时间。

然后说一下,串口的“广播” ,我的意思是,如果是非硬件地址判断,你可以自由的建立广播小组,比如:0xFF 是所有从机, 0x1F 是,1号到20号机   0x3f 是21到40 号机,也不需要什么掩码去限制,甚至完全不需要去考虑掩码等等,这些完全可以自由定义,甚至 可以把从机数量  增加到 65000 台 用16位从机地址。而不需要 受到 硬件SADDR + SADEN 的束缚,主要想表达,有失也有得的意思。
回复

使用道具 举报

ID:47286 发表于 2022-4-16 22:38 | 显示全部楼层
188610329 发表于 2022-4-16 15:25
串口1的 "同步寄存器模式" 是把 TX 用作时钟线(CLK), RX用作数据线(IO)来进行传送的。
当 SCON = 0x ...

感谢降解 明白了

1302的意思理解 但感觉有点浪费 哈哈

595暂时还没用到 因为牵涉到端口扩展之类的应用很少 所以没怎么接触

广播的说法受益了 你说的分组广播我还真没想过 感觉是个挺有用的方法 不过还好 我做了个配置文件 里边会定义单片机型号 比如STC12系是6 15系是11 8系是15 如果15系之后并且定义9位传输 编译时自动用SADDR中断服务 如果之前则自动用非SADDR中断服务 将来遇到需要分组广播 可以比较容易的改回去
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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