欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: 單片機(jī)初學(xué)者提問:請問串口中斷函數(shù)的最長時間怎么算? [打印本頁]

作者: Kankanxi    時間: 2023-8-23 01:53
標(biāo)題: 單片機(jī)初學(xué)者提問:請問串口中斷函數(shù)的最長時間怎么算?
比如有一串?dāng)?shù)據(jù)傳過來,字節(jié)和字節(jié)之前無時間間隔,我應(yīng)該控制我的串口中斷函數(shù)運行時間在多少以內(nèi)才能使下一個數(shù)據(jù)能正常被接收,是1/baud嗎。
另外還有個問題,如果晶振頻率算出來的串口中斷時間有浮點數(shù)誤差,那么接收一個字節(jié)后,下一個字節(jié)的起始位不會相對變短產(chǎn)生誤差嗎?如果是的話怎么解決?
附圖:

Snipaste_2023-08-23_01-52-06.png (10.57 KB, 下載次數(shù): 50)

產(chǎn)生了漂移

產(chǎn)生了漂移

作者: Kankanxi    時間: 2023-8-23 02:30
比如說晶振頻率是12MHz
作者: Kankanxi    時間: 2023-8-23 02:59
另外,如果晶振頻率是11.0592MHz的話,雖然除盡了,但是誤差是不是在持續(xù)積累呢?我想問這種誤差積累到什么程度會出錯誤,另外,如何計算誤差。
作者: Kankanxi    時間: 2023-8-23 03:00
謝謝各位大佬的回復(fù)了
作者: wulin    時間: 2023-8-23 07:59
Kankanxi 發(fā)表于 2023-8-23 02:59
另外,如果晶振頻率是11.0592MHz的話,雖然除盡了,但是誤差是不是在持續(xù)積累呢?我想問這種誤差積累到什么 ...

1.一幀數(shù)據(jù)至少包含起始位、數(shù)據(jù)位、結(jié)束位。連續(xù)接收一串?dāng)?shù)據(jù),串口中斷周期就是接收一幀數(shù)據(jù)的時間,中斷函數(shù)運行時間必須小于或遠(yuǎn)小于中斷周期。否則會丟失數(shù)據(jù)或不能及時處理數(shù)據(jù)。
2.異步通訊天然存在頻率和相位誤差,只要誤差在可控范圍就不會有問題。每一幀的起始位信號就相當(dāng)于修正一次誤差。不存在積累誤差一說。
作者: esslitao    時間: 2023-8-23 08:14
你好。串行數(shù)據(jù)無論是發(fā)送或是接收過程中,每個位每個字節(jié)是有間隔的。波特率的定義就是----串行口每秒鐘發(fā)送或是接收的二進(jìn)制的位數(shù),就叫這個串口的波特率。特別是在不定長數(shù)據(jù)傳輸過程中,兩個字節(jié)的間隔超過一定值,就認(rèn)為是這一組數(shù)據(jù)傳輸完畢!
作者: 4091    時間: 2023-8-23 08:19
接收到數(shù)據(jù)觸發(fā)中斷,32和51是這樣,什么情況下中斷要靠計算時間才能進(jìn)入?
作者: munuc_w    時間: 2023-8-23 08:37
UART是異步通信,無特殊情況下,一幀數(shù)據(jù)是10bit,傳輸時間只跟波特率相關(guān)。幀與幀之間的間隔時間不一定是相同的,會受到其它中斷的影響。
作者: devcang    時間: 2023-8-23 09:48
硬件串口,只管中斷、接收。
作者: yzwzfyz    時間: 2023-8-23 11:30
樓主的想法是對的,的確如此:
實際上:A向B串行通訊時,是允許波特率有誤差的。
1、每幀,A會先發(fā)起始脈沖,而后再發(fā)數(shù)據(jù)。對方B會據(jù)此脈沖的邊沿,進(jìn)行同步,再依據(jù)自己波特率,每間隔一個周期,下載一位數(shù)據(jù),由于兩方存在周期誤差(波特率誤差),積累N位后,必然會發(fā)生錯位現(xiàn)象。
2、如果雙方波特率完全一致,這個N=∞,如果誤差太大,N會很小。
3、好在還未發(fā)生錯位時(下載的位數(shù) < N),一幀就結(jié)束了,數(shù)據(jù)就不會出錯。
4、下一幀會重新同步,積累的誤差被清除重來。

硬件上通常采三取二。如你圖中所示,當(dāng)積累誤達(dá)到30%寬度左右時(估計值),采樣箭頭會出界。
設(shè)A方=9600,B方=9640,誤差約=1-9640/9000 = 0.416%,即每個脈沖會移位(誤差前移或后移)0.4%。
當(dāng)起始脈沖同步后,第幾個脈沖采樣會出界呢?
30% ÷ 0.416%  = 72,在第72個脈沖之后,采樣會出界而錯。
一個字節(jié)通常有:需要 11至13個脈沖(起始+數(shù)據(jù)+校驗+停止)。如此算來:即使5個字節(jié)不進(jìn)行同步,也不會出錯。
以上是估算,并不是樓主所要的直接答案。
不過樓主可以以12個脈沖為界,估算出當(dāng)頻率偏差多少時會出錯。
不過要注意:以上參數(shù)要以手冊上的數(shù)據(jù)為參考。這樣才準(zhǔn)確一些。

手冊上會說明,當(dāng)接到起始脈沖邊沿后多久會進(jìn)行數(shù)據(jù)采樣(圖中的三個采樣脈沖),以及這三個采樣脈沖的間隔。這樣就計算得更準(zhǔn)確一點了。
也有一次采樣就認(rèn)定的(以手冊上說的為準(zhǔn))。
這些主要定義允許誤差取多少?(極限是50%,保守取10%,上例取的是30%)。
作者: Kankanxi    時間: 2023-8-23 11:39
wulin 發(fā)表于 2023-8-23 07:59
1.一幀數(shù)據(jù)至少包含起始位、數(shù)據(jù)位、結(jié)束位。連續(xù)接收一串?dāng)?shù)據(jù),串口中斷周期就是接收一幀數(shù)據(jù)的時間,中 ...

非常非常感謝您的回復(fù)。
但是我還是不太理解起始位修正誤差的說法,如果主機(jī)發(fā)送的數(shù)據(jù)幀和幀之間無間隔(終止位緊接著起始位),又假設(shè)誤差較大,那么RI置位有可能發(fā)生在第一個幀的終止位的后段,甚至第二個幀的起始位的前段,這樣的話,單片機(jī)開始檢測rxd跳變的時間不就在第二個幀的起始位中前段嗎,第二個幀的起始位這一比特時間不就縮短了嗎,如此一來,當(dāng)發(fā)送的幀特別多,不就會出問題嗎。
本人大一剛剛開始入門,實驗條件可能不足,暫時在家沒有各種電子儀器實測信號,如果問題太過繁瑣簡單,還請多多諒解。
作者: Kankanxi    時間: 2023-8-23 12:01
yzwzfyz 發(fā)表于 2023-8-23 11:30
樓主的想法是對的,的確如此:
實際上:A向B串行通訊時,是允許波特率有誤差的。
1、每幀,A會先發(fā)起始脈 ...

非常非常感謝您的耐心回復(fù)。
請問幀和幀之間一般都存在停止位嗎?即使是連續(xù)發(fā)送的數(shù)據(jù)。
我主要是不太理解第四步,即起始位修正誤差的問題。如果幀和幀之間沒有停止位的間隔,我不理解誤差是如何消除的。如果主機(jī)發(fā)送的數(shù)據(jù)幀和幀之間無間隔(終止位緊接著起始位),又假設(shè)誤差較大,那么RI置位有可能發(fā)生在第一個幀的終止位的后段,甚至第二個幀的起始位的前段,這樣的話,單片機(jī)開始檢測rxd跳變的時間不就在第二個幀的起始位中前段嗎,第二個幀的起始位這一比特時間不就縮短了嗎,如此一來,當(dāng)發(fā)送的幀特別多,不就會出問題嗎。
本人大一剛剛開始自學(xué)入門,暫時在家沒有各種電子儀器實測信號,如果問題太過繁瑣簡單,還請多多諒解。
作者: mtdzok    時間: 2023-8-23 12:25
主要是和波特率有關(guān)。比如9600波特率,最短字節(jié)間距大約1mS有足夠的時間存入緩存,并等待接收下一字節(jié)。具體起始停止位那是硬件的事
作者: Hephaestus    時間: 2023-8-23 16:17
樓主明顯對停止位理解有誤,停止位只是插入一個固定的間隔時間,只是時間概念,并不存在實際的數(shù)據(jù)位。發(fā)送端要發(fā)送固定停止位時間,接收端并不檢測停止位,只檢測起始位。就算兩端波特率有誤差,累積到停止位就算完事兒,從起始位開始從零開始累積。
作者: 188610329    時間: 2023-8-23 17:11
波特率誤差  只要小于 2%  就可以忽略,不會影響傳輸。

起始位的作用,就是用來對齊的,所以,“誤差累計” 是不存在的。

停止位,在實際通信的過程中,尤其是目標(biāo)設(shè)備為單片機(jī)時,是可以不存在的,即大多時候,你發(fā)送完停止位之后,可以立刻發(fā)送起始位。
但是,在設(shè)備傳輸需求中又是普遍存在的,比如某設(shè)備要求2位停止位,代表他 每接受完一個字節(jié)數(shù)據(jù)后,必須有 兩個位的間隔才能繼續(xù)接收下一個字節(jié)。通常出現(xiàn)在性能比較差的 老設(shè)備中。
作者: ydatou    時間: 2023-8-23 17:26
串口通訊到底有沒有累積誤差?對時鐘精度到底有何要求?_串口誤差容忍_liuxd3000的博客-CSDN博客  https://blog.csdn.net/liuxd3000/article/details/128396918

波特率誤差,上面鏈接講得很清楚了。下面的回答基于波特率為9600,1位停止位,無校驗的情形。
第1個問題:
單串口收到一字節(jié)數(shù)據(jù)時,只要在小于10/baud(約1.04ms)時間取出,就不會影響下一字節(jié)接收。很多單片機(jī)有串口緩存,這時間等于10/baud*(緩存數(shù)量+1),例如新唐的m0有16字節(jié)收發(fā)緩存。只要在17.7mS內(nèi)處理不會出錯。
第2個問題:
只要收發(fā)波特率的偏差小于4.5%,就不會有問題。任意數(shù)量的數(shù)據(jù)通訊都不會有問題。
作者: Kankanxi    時間: 2023-8-24 15:27
感謝各位的解答,各位講的都對我有所幫助




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1