Re: 18F452 + ICE2000 + C18 之問題請教.
|
||||
---|---|---|---|---|
新會員
|
謝謝各位大大指導,
我今天重新Try了幾個方法後,還是一樣,結果我發現是程式裡以下這一行出了問題,在ICE-2000模式下,P.C端可以正常收到 "xx TEST CONVERT DATA = yy"字串,但將程式燒到晶片去了以後,P.C 端就無法收到東東了,後來我試著把 while ( COMPortTXDataBuffer[x] != 0) Remark後,P.C端就會收到一些奇怪的碼,我猜第一個字應該是0x00所以才會字串都無法傳出來. sprintf(COMPortTXDataBuffer,"%1c%1c TEST CONVERT DATA = %1c%1c \0",COMPortRXDataBuffer[1],COMPortRXDataBuffer[2], HexDataHigh,HexDataLow); COMPortTxBufferData(); 但是如果我用一次單1個Byte來指定資料時,則在ICE-2000或燒到晶片去時,則都可以收到了,如下列. 而問題是, 我看了C-18的LIBRARIES手冊DS51297F-page 147,上面寫 sprintf()是將資料轉換到RAM去 不是嗎??為什麼在ICE-2000可以,但是燒到晶片去又不行??? 再麻煩各位先進了... COMPortTXDataBuffer[ 0] = COMPortRXDataBuffer[1]; COMPortTXDataBuffer[ 1] = COMPortRXDataBuffer[2]; COMPortTXDataBuffer[ 2] = ' '; COMPortTXDataBuffer[ 3] = 'T'; COMPortTXDataBuffer[ 4] = 'E'; COMPortTXDataBuffer[ 5] = 'S'; COMPortTXDataBuffer[ 6] = 'T'; COMPortTXDataBuffer[ 7] = ' '; COMPortTXDataBuffer[ 8] = 'C'; COMPortTXDataBuffer[ 9] = 'O'; COMPortTXDataBuffer[10] = 'N'; COMPortTXDataBuffer[11] = 'V'; COMPortTXDataBuffer[12] = 'E'; COMPortTXDataBuffer[13] = 'R'; COMPortTXDataBuffer[14] = 'T'; COMPortTXDataBuffer[15] = ' '; COMPortTXDataBuffer[16] = 'D'; COMPortTXDataBuffer[17] = 'A'; COMPortTXDataBuffer[18] = 'T'; COMPortTXDataBuffer[19] = 'A'; COMPortTXDataBuffer[20] = ' '; COMPortTXDataBuffer[21] = '='; COMPortTXDataBuffer[22] = ' '; COMPortTXDataBuffer[23] = HexDataHigh; COMPortTXDataBuffer[24] = HexDataLow; COMPortTXDataBuffer[25] = ' '; COMPortTXDataBuffer[26] = '\0'; COMPortTxBufferData();
發表於: 2005/8/11 14:10
|
|||
|
Re: 18F452 + ICE2000 + C18 之問題請教.
|
||||
---|---|---|---|---|
新會員
|
假如你在stand_alone的情況下,uart可以正確的收到資料,表示你的baudrate與硬體是正常的。
或許你可以化繁為簡,直接在stand_alone的情況下,由uart連續送出某個字元到pc端,然後用超級終端機看資料是否有傳到pc端,甚至你可以用示波器量tx的訊號,等這個機制完成後,就可以確定你傳送的function在stand_alone的情況下是可以正常執行的,然後你再來驗證你目前的機制,這樣才能釐清你的問題點。
發表於: 2005/8/11 9:37
|
|||
|
Re: 18F452 + ICE2000 + C18 之問題請教.
|
||||
---|---|---|---|---|
高級會員
|
也可以參考 Full Speed USB demo board 應用程式
內有 Bootloader 程式範例
發表於: 2005/8/10 22:37
|
|||
IWC
IWC JL Rolex PP 有點距離 越來越遠 |
||||
|
Re: 18F452 + ICE2000 + C18 之問題請教.
|
||||
---|---|---|---|---|
版主
|
第一個問題很奇怪,檢查一下 Stand-Alone 模式下的 configuration words 的設定是否正確,ICE2000 的 clock 是誰供應的? 你可以再用 ICD2 來測試一下看看是否能正常跑。
第二問題要用寫的似乎有點長了,你可以打電話來討論 0800-717-718 , 基本的重點如下: 1. 將LKR檔內的 c018i.o 先移除後回存一新的LKR 檔,以後bootloader 就需使用此 LKR 檔。 2. 到 C:\mcc18\src\traditional\startup 的目錄下將 c018i.c 考到 Project 目錄下並加到 Project 裡。 3. 修改reset 起始位置到 0x200 的地方,如下所示
#pragma code _entry_scn=0x000200
4. 最後還要做RESET & INTERRUPT 向量位址的轉移,將0x008 加入 GOTO 0x208 , 0x018 --> 0x218
發表於: 2005/8/10 17:45
|
|||
|
Re: 18F452 + ICE2000 + C18 之問題請教.
|
||||
---|---|---|---|---|
新會員
|
Dear DoubleChen,
感謝您提供的方法,我試過了,問題都還是一樣耶....
發表於: 2005/8/10 16:50
|
|||
|
Re: 18F452 + ICE2000 + C18 之問題請教.
|
||||
---|---|---|---|---|
新會員
|
從你的描述,我提供兩種可能性,讓你debug看看,
1.是否TXSTAbits.TXEN有設定為1 2.在TXREG = COMPortTXDataBuffer[x];後面多加一個判斷 while(!(TXSTAbits.TRMT)); 當TSR是Empty時,才能確定你的資料已經傳送出去了。
發表於: 2005/8/10 16:33
|
|||
|
18F452 + ICE2000 + C18 之問題請教.
|
||||
---|---|---|---|---|
新會員
|
請教各位大大:
不好意思,小弟是C-18新手,有幾個問題要請教, 1.為什麼我使用ICE-2000及C-18寫了一段18F452的RS-232通訊程式, 在ICE-2000底下收發字串都正常,但是燒錄到I.C去時,卻發生F452只能收到指令,但是無法回傳資料的問題..我試過了個方法,包括使用C-18函式庫上的幾個USART指令(如putsUSART...)及用TXREG的方法 來傳出資料,但情形都是一樣,程式碼節錄如下,在ICE-2000都可以,但是一燒錄到晶片去後,就不能了,但是如果完全使用組合語言寫, 在ICE-2000下可以,燒錄到晶片也是可以的.不知道C-18有什麼不一樣嗎?? 請問各位大大,有沒有人知道Why?? 2.另外如果我的C程式要使用BootLoad模式時,程式起始位址要如何定義在0x200的地方?,要使用何種指令來定義?? 請賜教,謝謝!!!! //------------------------------------------------ char COMPortTXDataBuffer[50]; void COMPortTxBufferData() { char x = 0; while ( COMPortTXDataBuffer[x] != 0) { while (PIR1bits.TXIF == 0) { Nop(); Nop(); } // TXREG = COMPortTXDataBuffer[x]; WriteUSART( COMPortTXDataBuffer[x]); //<---- 以上兩種方法,結果都一樣.. x ++ ; } }
發表於: 2005/8/10 15:24
|
|||
|