Browsing this Thread:
1 Anonymous Users
|
Re: USART中斷接收資料問題
|
|
版主
Joined
: 2004/4/30 10:53 最後登入時間
: 2021/11/30 18:11
From CAE, Microchip
Group:
站務管理者 註冊會員
Level : 75 HP : 744 / 1861 MP : 5367 / 111130 EXP : 45
|
會發生接收 Overrun Error 一般是沒有使用中斷方式接收,帶你試用中斷接收照理說應不會有此現象發生。建議用MPLAB SIM 下的 Stopwatch 檢查一下中斷函數所執行的時間是否小於一個Byte 的接收時間。
發表於: 2009/4/24 13:57
|
|
|
USART中斷接收資料問題
|
|
中級會員
Joined
: 2007/12/26 17:11 最後登入時間
: 2009/6/16 14:53
Group:
註冊會員
Level : 6 HP : 0 / 128 MP : 17 / 6283 EXP : 12
|
目前小弟遇到一個問題 就是使用中斷接收資料一直OERR 發生溢位 可是之前寫都沒問題 就最近突然發生這問題
所有副程式和其他中斷都關掉了 只留下USART中斷接收 主程式MAIN裡面只有留一個 while 空迴圈再跑
可是通常檢查接收的資料buffer 只收到前面三各byte 就發生OERR了.... 後面資料都不見了.....
會發生OERR我知道是因為資料來不及接收 造成buffer被塞滿了
請問這問題要怎麼處理? 是否有大大可以指點一下....
有試過檢查當RCSTA1bits.OERR = 1 就去把RCSTA1bits.CREN置0再置1 這樣可以把OERR清0並重新啟動中斷接收副程式 可是這樣做的話 之前沒收到的資料還是不見了 等於整個資料封包我只收到頭跟尾 但中間這一段都流失了
以下是USART中斷接收資料副程式
#pragma code low_vector = 0x18 void low_interrupt(void) { _asm GOTO USART_RX_ISR _endasm } #pragma code #pragma interruptlow USART_RX_ISR void USART_RX_ISR(void) { byte tmp; if(PIR1bits.RCIF == 1) { tmp = Read1USART(); if(tmp == 0xCC)RxCount = 0; RxBuff[RxCount] = tmp; if(++RxCount >= 50)RxCount = 0; PIR1bits.RCIF =0; } }
發表於: 2009/4/23 11:42
|
|
You can view topic.
你 不可以 發起新主題
You cannot reply to posts.
You cannot edit your posts.
You cannot delete your posts.
You cannot add new polls.
You cannot vote in polls.
You cannot attach files to posts.
You cannot post without approval.
You cannot use topic type.
You cannot use HTML syntax.
You cannot use signature.
You cannot create PDF files.
You cannot get print page.