找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 3181|回復(fù): 12
打印 上一主題 下一主題
收起左側(cè)

請(qǐng)教SADDR和SADEN寄存器理解的問(wèn)題

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:47286 發(fā)表于 2022-4-14 14:08 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
這是手冊(cè)里的解釋



我理解SADDR和SADEN是與的關(guān)系 類似IP地址的子網(wǎng)掩碼 那么 現(xiàn)在我想只識(shí)別1個(gè)地址應(yīng)該怎么寫(xiě) 比如SADDR是0x10 只接收發(fā)給0X10的指令 我把SADDR和SADEN都寫(xiě)成0x10 結(jié)果是0x10~0x1f都可以響應(yīng)
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:624769 發(fā)表于 2022-4-14 17:31 來(lái)自手機(jī) | 只看該作者
saden = 0xff;   即需要完全匹配。
回復(fù)

使用道具 舉報(bào)

板凳
ID:47286 發(fā)表于 2022-4-14 18:09 | 只看該作者
188610329 發(fā)表于 2022-4-14 17:31
saden = 0xff;   即需要完全匹配。

感謝回復(fù)

試了一下 還是0x10~0x1f 是我哪沒(méi)寫(xiě)對(duì)么

在main里 while(1)之前寫(xiě)了以下兩句

SADEN = 0x10;        //0001 0000
SADDR = 0xff;        //0001 1111
回復(fù)

使用道具 舉報(bào)

地板
ID:47286 發(fā)表于 2022-4-14 19:00 | 只看該作者
188610329 發(fā)表于 2022-4-14 17:31
saden = 0xff;   即需要完全匹配。

找到問(wèn)題了 低級(jí)錯(cuò)誤 兩個(gè)寄存器賦值反了 再次感謝回復(fù)
回復(fù)

使用道具 舉報(bào)

5#
ID:47286 發(fā)表于 2022-4-14 19:03 | 只看該作者
各位看帖的兄弟 不用回復(fù)了 我自己把賦值寫(xiě)反了 為此 聲明一個(gè)變量

uint 打臉=低級(jí)錯(cuò)誤;
回復(fù)

使用道具 舉報(bào)

6#
ID:123289 發(fā)表于 2022-4-15 10:46 | 只看該作者
我也常發(fā)生這樣的事,自己一個(gè)人找許久找不出。把問(wèn)題與別人一提,卻發(fā)現(xiàn)是個(gè)低級(jí)失誤。
回復(fù)

使用道具 舉報(bào)

7#
ID:47286 發(fā)表于 2022-4-15 10:51 來(lái)自手機(jī) | 只看該作者
yzwzfyz 發(fā)表于 2022-4-15 10:46
我也常發(fā)生這樣的事,自己一個(gè)人找許久找不出。把問(wèn)題與別人一提,卻發(fā)現(xiàn)是個(gè)低級(jí)失誤。

感謝回復(fù)

這功能還不錯(cuò) 但只能串口1 其他口都沒(méi)用 有點(diǎn)遺憾
回復(fù)

使用道具 舉報(bào)

8#
ID:624769 發(fā)表于 2022-4-15 16:23 | 只看該作者
dzbj 發(fā)表于 2022-4-15 10:51
感謝回復(fù)

這功能還不錯(cuò) 但只能串口1 其他口都沒(méi)用 有點(diǎn)遺憾

這個(gè)功能, 其實(shí)現(xiàn)在用處已經(jīng)不大了, 只不過(guò)被保留了下來(lái), 現(xiàn)在單片機(jī)速度都很快了, 自己寫(xiě)幾行代碼, 利用 8+1的傳輸方式,自己判斷一下,其實(shí)并不復(fù)雜, 而實(shí)際使用中, 硬件的 SADDR + SADEN 對(duì)串口的性能提升,幫助其實(shí)不大。所以,沒(méi)有什么好可惜的。
回復(fù)

使用道具 舉報(bào)

9#
ID:47286 發(fā)表于 2022-4-16 00:26 | 只看該作者
188610329 發(fā)表于 2022-4-15 16:23
這個(gè)功能, 其實(shí)現(xiàn)在用處已經(jīng)不大了, 只不過(guò)被保留了下來(lái), 現(xiàn)在單片機(jī)速度都很快了, 自己寫(xiě)幾行代碼, 利用 ...

你說(shuō)的是 可能我有點(diǎn)強(qiáng)迫癥吧 總是擔(dān)心

記得和你說(shuō)過(guò) 我有一套自己用的系統(tǒng) 基本是以太網(wǎng)的概念 只不過(guò)用485傳輸 不用局域網(wǎng)是轉(zhuǎn)LAN模塊體積大 成本高 另外資源開(kāi)銷 耗電量 以及速度 實(shí)際上TCP/IP是一個(gè)效率非常低的協(xié)議 大概只有30%吧 因?yàn)橛泻芏喙逃行畔?br />
這個(gè)系統(tǒng)分三層 主控 子控和執(zhí)行 之間的協(xié)調(diào)指令 數(shù)據(jù)傳輸 都是靠串口 先不說(shuō)速率和帶寬問(wèn)題 起碼是需要很頻繁的產(chǎn)生串口中斷 最早用8位通訊 軟件判斷地址 后來(lái)用9位 先判斷地址 那么其實(shí)每次接收都會(huì)產(chǎn)生中斷 不管是不是呼叫自己 至少要收一位來(lái)判斷地址用 用單片機(jī)硬件功能的話 至少可以不產(chǎn)生中斷了 我用cpu都是往死里用 只要還能干就讓它多干 頻繁的中斷總是有可能影響其它函數(shù) 因此有點(diǎn)喜歡這功能
回復(fù)

使用道具 舉報(bào)

10#
ID:624769 發(fā)表于 2022-4-16 02:58 | 只看該作者
dzbj 發(fā)表于 2022-4-16 00:26
你說(shuō)的是 可能我有點(diǎn)強(qiáng)迫癥吧 總是擔(dān)心

記得和你說(shuō)過(guò) 我有一套自己用的系統(tǒng) 基本是以太網(wǎng)的概念 只不 ...

你說(shuō)的這些都對(duì)。所以,我也只是說(shuō)在如今單片機(jī)速度越來(lái)越快的今天, 硬件SADDR+SADEN 幫助不大,不是完全沒(méi)有用。

以下這個(gè)是建議,供你在非串口1前提下參考。(我串口1多用作同步移位寄存器,硬件操作HC595或者DS1302這些,這一點(diǎn)也是屬于榨干單片機(jī)的性能,應(yīng)該屬于和你類似的強(qiáng)迫癥吧)
串口中斷,沒(méi)有你想象的那么消耗資源,如果,你只是進(jìn)入中斷 讀一下RB8 的話,其實(shí)這個(gè)動(dòng)作可以忽略不計(jì)。所以,當(dāng)用串口2,3,4, 做從機(jī)的話,先讀RB8, 如果不是送地址,直接拋棄。繼續(xù)休息,如果是地址才比較地址,然后,決定,是否接受余下的數(shù)據(jù)。那么,對(duì)于1T單片機(jī)來(lái)說(shuō),這個(gè)串口中斷的影響可以忽略不計(jì)。而這種軟件的 SADDR +SADEN 方式,有一個(gè)硬件方式?jīng)]有的優(yōu)勢(shì),可以接受廣播地址(類似TCP/IP)。你可以判斷,是否是針對(duì)所有從機(jī)的廣播。而硬件方式,就無(wú)法實(shí)現(xiàn)這個(gè)功能了……
回復(fù)

使用道具 舉報(bào)

11#
ID:47286 發(fā)表于 2022-4-16 12:44 | 只看該作者
188610329 發(fā)表于 2022-4-16 02:58
你說(shuō)的這些都對(duì)。所以,我也只是說(shuō)在如今單片機(jī)速度越來(lái)越快的今天, 硬件SADDR+SADEN 幫助不大,不是完 ...

收到 多謝回復(fù)

請(qǐng)教一下 串口1只有2根線 怎么操作DS1302 那東西不是要3根線嗎 而且也不是串口通訊 你意思是通訊線占用串口1的兩根線嗎 那意義何在呢 1302并不會(huì)主動(dòng)發(fā)送靠中斷產(chǎn)生響應(yīng)吧 這樣相當(dāng)于占用一個(gè)通訊口和一個(gè)中斷 是不是反而浪費(fèi)了

中斷開(kāi)銷的問(wèn)題 有你的解釋我就釋然多了 看來(lái)串口234還可以再挖一下潛力

另外互通一下信息 硬件地址判斷可以廣播 FF是默認(rèn)的廣播地址 線上的所有串口都會(huì)響應(yīng)
回復(fù)

使用道具 舉報(bào)

12#
ID:624769 發(fā)表于 2022-4-16 15:25 | 只看該作者
dzbj 發(fā)表于 2022-4-16 12:44
收到 多謝回復(fù)

請(qǐng)教一下 串口1只有2根線 怎么操作DS1302 那東西不是要3根線嗎 而且也不是串口通訊 你 ...

串口1的 "同步寄存器模式" 是把 TX 用作時(shí)鐘線(CLK), RX用作數(shù)據(jù)線(IO)來(lái)進(jìn)行傳送的。
當(dāng) SCON = 0x00; 的時(shí)候, 你把要發(fā)送的數(shù)據(jù) 寫(xiě)入 SBUF,  就會(huì)觸發(fā) 串口開(kāi)始工作,從TX發(fā)出8個(gè)時(shí)鐘,并且從RX 按 低位在前(LSB)的格式,把數(shù)據(jù)發(fā)出去,發(fā)送完一整個(gè)字節(jié)之后,會(huì)TI置1,你查詢方式也好,中斷方式也好,得到TI == 1 這個(gè)信號(hào)之后, 繼續(xù)清TI  寫(xiě) SBUF 發(fā)送下一位, 這是一個(gè)非常高效的方式,在用連續(xù)寫(xiě),連續(xù)讀的方式的時(shí)候,完全不影響單片機(jī)的其他工作,不用像 模擬方式那樣,用for循環(huán) 一個(gè)一個(gè)位的發(fā)出去。接收的時(shí)候,一樣道理,當(dāng)RI =0, REN =1 則會(huì)TX發(fā)出8個(gè)時(shí)鐘, RX依次讀取 外部IO 的電平, 全部接收后 寫(xiě)入SBUF 并且 RI 置1, 你查詢也好,中斷也好,繼續(xù)后續(xù)操作即可。
驅(qū)動(dòng) DS1302 需要多用一個(gè)單片機(jī) IO 來(lái)控制 CE, 不過(guò),這里有一個(gè)問(wèn)題,就是DS1302 速度比較慢,而串口1的同步移位寄存器速率不可調(diào),需要把晶振調(diào)到 6MHz 以下才能比較穩(wěn)定傳輸,不是非常合算。(我前文提到DS1302主要是舉個(gè)例子,并不推薦這樣操作DS1302) 實(shí)際上,串口1我主要是 操作HC595, 他速率高到27MHz 就算 我MCU 主頻開(kāi)到最高,也能穩(wěn)定傳輸,對(duì)于驅(qū)動(dòng)大面積點(diǎn)陣,用串口1可以有效避免在定時(shí)器中斷里耗費(fèi)大量的時(shí)間。

然后說(shuō)一下,串口的“廣播” ,我的意思是,如果是非硬件地址判斷,你可以自由的建立廣播小組,比如:0xFF 是所有從機(jī), 0x1F 是,1號(hào)到20號(hào)機(jī)   0x3f 是21到40 號(hào)機(jī),也不需要什么掩碼去限制,甚至完全不需要去考慮掩碼等等,這些完全可以自由定義,甚至 可以把從機(jī)數(shù)量  增加到 65000 臺(tái) 用16位從機(jī)地址。而不需要 受到 硬件SADDR + SADEN 的束縛,主要想表達(dá),有失也有得的意思。
回復(fù)

使用道具 舉報(bào)

13#
ID:47286 發(fā)表于 2022-4-16 22:38 | 只看該作者
188610329 發(fā)表于 2022-4-16 15:25
串口1的 "同步寄存器模式" 是把 TX 用作時(shí)鐘線(CLK), RX用作數(shù)據(jù)線(IO)來(lái)進(jìn)行傳送的。
當(dāng) SCON = 0x ...

感謝降解 明白了

1302的意思理解 但感覺(jué)有點(diǎn)浪費(fèi) 哈哈

595暫時(shí)還沒(méi)用到 因?yàn)闋可娴蕉丝跀U(kuò)展之類的應(yīng)用很少 所以沒(méi)怎么接觸

廣播的說(shuō)法受益了 你說(shuō)的分組廣播我還真沒(méi)想過(guò) 感覺(jué)是個(gè)挺有用的方法 不過(guò)還好 我做了個(gè)配置文件 里邊會(huì)定義單片機(jī)型號(hào) 比如STC12系是6 15系是11 8系是15 如果15系之后并且定義9位傳輸 編譯時(shí)自動(dòng)用SADDR中斷服務(wù) 如果之前則自動(dòng)用非SADDR中斷服務(wù) 將來(lái)遇到需要分組廣播 可以比較容易的改回去
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表