Re: 18f458上的usrat接收暫存器是否有兩層?
|
||||
---|---|---|---|---|
資深會員
|
正確宣告方式版主已解說。
那個資料結構是「環狀佇列」(circular queue), 或稱 ring FIFO 使用時還要有兩個指標指向頭尾。 環狀佇列的運作方式可 google 以上關鍵詞,即可找到詳細解說。
發表於: 2009/9/23 17:10
|
|||
|
Re: 18f458上的usrat接收暫存器是否有兩層?
|
||||
---|---|---|---|---|
版主
|
不是這樣宣告的。用組語要開 Buffer 可以用此方式:
udata_acs
詳細使用參考 MPASM 教育訓練教材。 http://www.microchip.com.tw/modules/w ... nglefile.php?cid=4&lid=32
發表於: 2009/9/23 16:07
|
|||
|
Re: 18f458上的usrat接收暫存器是否有兩層?
|
||||
---|---|---|---|---|
資深會員
|
一般是由軟體再作一層 buffer, 所有由 UART Interupt 收到的資料都例即放到此 buffer, 再由主程式作進一步處理。 buffer 大小就看你的需要了。
發表於: 2009/9/22 17:09
|
|||
|
Re: 18f458上的usrat接收暫存器是否有兩層?
|
||||
---|---|---|---|---|
中級會員
|
參照:
請問那如果一次傳送超過2筆以上的資料 又不能控制它傳送幾筆 這種情況怎麼辦??
發表於: 2009/9/22 16:38
|
|||
|
Re: 18f458上的usrat接收暫存器是否有兩層?
|
||||
---|---|---|---|---|
版主
|
是的,只要 RCIF 為 1,就代表有資料還在 RCREG 裡,這時只要將 RCREG 的值讀走。如果還有一筆資料能在 RCREG 裡,RCIF 還是會被設為 1 的,直到你完全把 RCREG 的資料讀取完畢後RCIF才會為 0。
發表於: 2008/3/7 11:46
|
|||
|
Re: 18f458上的usrat接收暫存器是否有兩層?
|
||||
---|---|---|---|---|
資深會員
|
Figure 18-5 畫得很清楚了
RX 最多能收下兩筆,並且 set RCIF,如果超過,則會發生 oerr 這個時候,就需要 cren 來 clear OERR 至於你的問題,有幾筆資料在buffer 內? 基本上,不用你管,你只要知道有沒有資料需要讀出即可 至於是一筆還是兩筆,還是一筆讀完又來一筆,基本上不重要 只要檢查 RCIF ,就知道有沒有資料需要讀取,有那就 MOVFW RCREG ,並做處理。 程式運行會一直做這樣的檢查,所以只要主程序的不要花太多的時間,每一筆資料都能被收下。
發表於: 2008/3/7 8:54
|
|||
|
18f458上的usrat接收暫存器是否有兩層?
|
||||
---|---|---|---|---|
資深會員
|
想請問一下
看18f458上的datasheet,其中USART的RCREG接收暫存器的示意圖 似乎畫有兩層,其中還寫一個fifo 但我在說明文字中完全沒有看到相關敍述 不知道倒底怎麼處理?? 我用C18寫了 temp=RCREG; temp=RCREG; 兩次,在PIR1上的RCIF旗標才會變0 所以我想這個暫存器有兩層應該是確定的 但不知道如何才知道是目前RCREG收到幾筆資料呢?? 是有一筆還是兩筆在BUFFER內...?? 可否只收最近的一個呢?
發表於: 2008/3/6 19:51
|
|||
|