• slider image 442
  • slider image 483
  • slider image 484
  • slider image 485
  • slider image 486
  • slider image 487
:::


Browsing this Thread:   1 Anonymous Users






Re: 18F452 + ICE2000 + C18 之問題請教.
#8
新會員
新會員


查看用戶資訊
sprintf()是什麼?怎麼用?,我也不知道 QQ
不過在Debug的過程中,最好不要延生太多的問題,這樣會讓你的焦點模糊,最後會變成你一直產生問題,卻無法解決最根本的問題QQ,抱歉,囉唆了一點。
既然你用單一BYTE可以,你就把函數寫成可以傳兩個引數,一個是陣列名稱,一個是傳送的資料長度。
void txfuntion(unsigned char n[],unsigned char ndata);
這樣你的問題就能解決了阿,而且那個函數又可以變成萬用型,不會拘泥於只有某個陣列才能使用,而且長度也可以延生(unsigned int or unsigned short long)^^。

發表於: 2005/8/23 12:02
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 18F452 + ICE2000 + C18 之問題請教.
#7
新會員
新會員


查看用戶資訊
謝謝各位大大指導,
我今天重新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
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 18F452 + ICE2000 + C18 之問題請教.
#6
新會員
新會員


查看用戶資訊
假如你在stand_alone的情況下,uart可以正確的收到資料,表示你的baudrate與硬體是正常的。
或許你可以化繁為簡,直接在stand_alone的情況下,由uart連續送出某個字元到pc端,然後用超級終端機看資料是否有傳到pc端,甚至你可以用示波器量tx的訊號,等這個機制完成後,就可以確定你傳送的function在stand_alone的情況下是可以正常執行的,然後你再來驗證你目前的機制,這樣才能釐清你的問題點。

發表於: 2005/8/11 9:37
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 18F452 + ICE2000 + C18 之問題請教.
#5
高級會員
高級會員


查看用戶資訊
也可以參考 Full Speed USB demo board 應用程式
內有 Bootloader 程式範例

發表於: 2005/8/10 22:37
IWC
IWC
JL
Rolex


PP
有點距離
越來越遠
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 18F452 + ICE2000 + C18 之問題請教.
#4
版主
版主


查看用戶資訊
第一個問題很奇怪,檢查一下 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
void
_entry 
(void)
{
_asm goto _startup _endasm

}


4. 最後還要做RESET & INTERRUPT 向量位址的轉移,將0x008 加入 GOTO 0x208 , 0x018 --> 0x218

發表於: 2005/8/10 17:45
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 18F452 + ICE2000 + C18 之問題請教.
#3
新會員
新會員


查看用戶資訊
Dear DoubleChen,
感謝您提供的方法,我試過了,問題都還是一樣耶....

發表於: 2005/8/10 16:50
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 18F452 + ICE2000 + C18 之問題請教.
#2
新會員
新會員


查看用戶資訊
從你的描述,我提供兩種可能性,讓你debug看看,
1.是否TXSTAbits.TXEN有設定為1
2.在TXREG = COMPortTXDataBuffer[x];後面多加一個判斷
while(!(TXSTAbits.TRMT));
當TSR是Empty時,才能確定你的資料已經傳送出去了。

發表於: 2005/8/10 16:33
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


18F452 + ICE2000 + C18 之問題請教.
#1
新會員
新會員


查看用戶資訊
請教各位大大:
不好意思,小弟是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
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部







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.

[進階搜尋]


:::

Microchip連結

https://www.facebook.com/microchiptechnologytaiwan/
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=13
https://mu.microchip.com/page/tmu
http://elearning.microchip.com.tw/modules/tad_link/index.php?cate_sn=1
https://page.microchip.com/APAC-PrefCenters-TW.html
http://www.microchip.com/
http://www.microchip.com/treelink
http://www.microchipdirect.com/
http://www.microchip.com.cn/newcommunity/index.php?m=Video&a=index&id=103
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=2
http://www.microchip.com.tw/Data_CD/eLearning/index.html
http://www.microchip.com.tw/RTC/RTC_DVD/
https://www.microchip.com/development-tools/
https://www.youtube.com/user/MicrochipTechnology
[ more... ]

教育訓練中心

!開發工具購買
辦法說明 [業界客戶] [教育單位]
----------------------------------
!校園樣品申請
辦法說明 [教師資格] [學生資格]
----------------------------------