Re: 用PIC18F452如何寫出另外一組 UART ?
|
||||
---|---|---|---|---|
版主
|
軟體裡是這樣定義的,如腳位不適用可以更改的。
發表於: 2008/10/15 11:36
|
|||
|
Re: 用PIC18F452如何寫出另外一組 UART ?
|
||||
---|---|---|---|---|
高級會員
|
請問一下UART延遲函數公式:
DelayTXBitUART 延時 ((((2*FOSC) / (4*baud)) + 1) / 2) - 12 週期 DelayRXHalfBitUART 延時: ((((2*FOSC) / (8*baud)) + 1) / 2) - 9 週期 DelayRXBitUART 延時: ((((2*FOSC) / (4*baud)) + 1) / 2) - 14 週期 Q1:baud代4800 ; FOSC = 16Mhz 帶出來的數據由上至下分別是 822(十進制) 408(十進制) 820(十進制) 可為何在終端機鮑率要設定300才能傳呢? 300的速率太慢了 ! 我公式代4800下去算 但是終端機的鮑率卻是300 ??? Q2:因為上敘鮑率問題所以我提高了公式裡面的 Baud數據,我提高來到57600後終於在 終端機這邊可以以4800的鮑率”大略”做接 收,代576002下去算的話數據由上至下分 別是 58 ; 26 ; 56 (十進制),但是終端機 這邊接收的字元部份正常部份亂碼,我也用 示波器下去看了,結果是我延遲的時間要再 短一點,示波器顯示我二位元裡面低位元那 邊的的數據會錯誤掉,錯誤如下 鍵盤敲C跑出G C = 0110 0011 G = 0110 0111 鍵盤敲J跑出N J = 0110 1000 N = 0110 1110 在低位元那邊都會有錯,但是有很多的字元也是 正常的,所以我就嘗試改改看程式裡面 DelayTXBitUART DelayRXHalfBitUART DelayRXBitUART 這三個的延遲數據,但是怎麼改大概就是在那個Range 請問這是要怎樣算 ?
發表於: 2008/8/22 15:32
|
|||
|
Re: 用PIC18F452如何寫出另外一組 UART ?
|
||||
---|---|---|---|---|
高級會員
|
更新一下,我IO模擬232在終端機跑出來了,
套用 DelayTXBitUART 延時公式: ((((2*FOSC) / (4*baud)) + 1) / 2) - 12 週期 DelayRXHalfBitUART 延時: ((((2*FOSC) / (8*baud)) + 1) / 2) - 9 週期 DelayRXBitUART 延時: ((((2*FOSC) / (4*baud)) + 1) / 2) - 14 週期 在16MHZ的FOSC下 Delay的時間分別是 ox336 0x198 0x334, 可是有一點很奇怪的事情是,我BAUD是帶4800下去算的,但是在終端機裡面卻得要調成300(太低)才能傳,這是為什麼 ?
發表於: 2008/8/21 18:01
|
|||
|
Re: 用PIC18F452如何寫出另外一組 UART ?
|
||||
---|---|---|---|---|
高級會員
|
嗯 ~ 我想討論一下關於software UART的Delay 計算
當然我也在這個討論區翻了很多舊文章來看,其中提到 UART的計算延遲函數如下: ************************************************* DelayTXBitUART 延時: ((((2*FOSC) / (4*baud)) + 1) / 2) - 12 週期 DelayRXHalfBitUART 延時: ((((2*FOSC) / (8*baud)) + 1) / 2) - 9 週期 DelayRXBitUART 延時: ((((2*FOSC) / (4*baud)) + 1) / 2) - 14 週期 ************************************************* 接著我看到其中一篇文章 http://www.microchip.com.tw/modules/n ... rev&topic_time=1110959946 所以我就如法泡製了一番 ~ 以下是程式碼: #include <p18f452.h> #include <sw_uart.h> #define Nop() {_asm nop _endasm} int i; void DelayRXHalfBitUART(void) { for(i=0;i<0XC4;i++) Nop(); } void DelayRXBitUART(void) { for(i=0;i<0X5D;i++) Nop(); } void DelayTXBitUART(void) { for(i=0;i<0XC2;i++) Nop(); } void main ( void ) { char data; // configure software UART OpenUART(); while( 1 ) { data = ReadUART(); //read a byte WriteUART ( data ); //bounce it back } } 我想問的是在這裡計算延時時間要怎樣算才正確 for(i=0;i<0XC4;i++) Nop(); for(i=0;i<0X5D;i++) Nop(); for(i=0;i<0XC2;i++) Nop(); 我需求是4800,震盪頻率16M,使用APP001實驗板 我有改過裡面的16進位數值如下 16M分別是 0x336 0x198 0x334 4M 分別是 0xC4 0x5D 0xC2 燒進去IC以後只有 4M 去計算的數據有在終端機以4800的鮑率 跑出東西來,可惜是亂碼……它是亂碼,所以我要問說應該要 怎樣算4800鮑率的延遲時間。 PS:那篇文章的最後好像有用 CSS 去寫,但是我不懂 CSS 的東C,也不知道如何將CSS弄在程式片斷裡
發表於: 2008/8/21 16:36
|
|||
|
Re: 用PIC18F452如何寫出另外一組 UART ?
|
||||
---|---|---|---|---|
高級會員
|
以下是 Software UART 的片斷程式,
我想請問OpenUART() 這一段: 先為大家說明一下 ~ OpenUART這一段是用於 用於設定模擬UART的I/O腳使它成為正確的輸入或輸出邏輯 想請教的是要如何寫這一小片段 ? 裡面要怎樣加 ? PS:不好意思,不太會寫C語言 … 學習ing ……. 目前只能懵懵懂懂看的懂做小修改 …. 只好用問的比較快 ******************************* char data; // configure software UART OpenUART(); ********************************* #include <p18f452.h> #include <sw_uart.h> void main ( void ) { char data; // configure software UART OpenUART(); while( 1 ) { data = ReadUART(); //read a byte WriteUART ( data ); //bounce it back } }
發表於: 2008/8/20 14:41
|
|||
|
Re: 用PIC18F452如何寫出另外一組 UART ?
|
||||
---|---|---|---|---|
版主
|
舊版看不到,重新下載新版本,安裝時都選 Yes 選項就對了。
或 直接看 C18 Libraries Documentation 網站上有。 http://www.microchip.com/stellent/idc ... Id=1406&dDocName=en010014
發表於: 2008/8/14 15:10
|
|||
|
Re: 用PIC18F452如何寫出另外一組 UART ?
|
||||
---|---|---|---|---|
高級會員
|
我的C碟裡面 MCC18 \ 在來的路經 沒有 \ doc 耶,我的安裝光碟裡面沒有hlpC18Lib.chm 的說明 ... XD
發表於: 2008/8/14 10:09
|
|||
|
Re: 用PIC18F452如何寫出另外一組 UART ?
|
||||
---|---|---|---|---|
版主
|
C18 的 Library 除了有硬體的周邊函數庫支援外也有支援 Software Peripheral Libraries 。詳細用法請參考 ..\MCC18\doc\hlpC18Lib.chm 的說明。
Software UART Functions Macros for UART Pin Assignments The precompiled versions of these functions use default pin assignments that can be changed by redefining the equate (equ) statements in the files writuart.asm, readuart.asm and openuart.asm, found in the src/traditional/pmc/sw_uart or scr/extended/pmc/sw_uart subdirectory of the compiler installation: : :
發表於: 2008/8/14 7:54
|
|||
|
用PIC18F452如何寫出另外一組 UART ?
|
||||
---|---|---|---|---|
高級會員
|
內建的 UART 終於和 終端機對話了 ~ 那麼接著下個階段是我還需要一組 UART ~ 請問有什麼建議方向嗎 ? 我該如何去寫這段模擬 UART 的程式 ? 怎樣的寫法會比較好一點 ?
發表於: 2008/8/13 19:03
|
|||
|