Re: UART輸出的數據 數值都不會超過256?
|
||||
---|---|---|---|---|
資深會員
|
一般系統內建終端機軟體只能看可視字元。不方便一般通訊軟體撰寫
上除錯。尤其在寫485和CAN的東西。 網路上有些終端機軟體有支援顯示二進位資料,自己找一下就有了。 UART傳輸沒有分什麼ASCII不ASCII的,對電腦來說都是位元資料。 int長度在C18及CCS都為16bits,C18部分在使用者手冊P19。手冊 裡面都講得很清楚,不需要花時間測啦!!
發表於: 2007/5/3 0:59
|
|||
不要問我哪裡來,我只是個流浪天涯的工程師
|
||||
|
Re: UART輸出的數據 數值都不會超過256?
|
||||
---|---|---|---|---|
初級會員
|
謝謝兩位的回覆
我之所以要轉成ASCII 是受限於MPLAB 傳輸UART API的格式 此API似乎都是傳送ASCII 陣列格式至遠端 unsiged char[ ] 格式的資料 我如果想要單純傳一個unsigned int至遠端 先利用共用空間抓出DATA_H DATA_L 再分兩次送出 union Data_Type{ int data; ====>>是否要改成short int呢? char data_H; char data_L; } 因為你的原意 似乎想讓兩個char位址剛好對應至int char 2 + char 2 = short int 4 這是我在LINUX下測試的SIZE啦 = =>... 回家測試看看MPLAB的int size 請問有任何建議嗎
發表於: 2007/5/2 17:23
|
|||
|
Re: UART輸出的數據 數值都不會超過256?
|
||||
---|---|---|---|---|
資深會員
|
itoa函式是把489的數值轉換成"489"的字串。
因為用ASCII方式傳送,你比較不能確定資料長度。 489佔3個字元,25佔兩個字元。那每次送就資料長度不一樣。 若用binary方式傳送就是把數值489用0x01和0xE9兩個BYTE傳出去。 這樣處理起來比較直接,也不用作數值轉字串的動作。 只要宣告一個union變數。 EX: union Data_Type{ int data; char data_H; char data_L; } 把資料放在data中,把data_H,data_L依序從UART傳出去就可以了。然後找一個可以顯示二進位資料的終端機軟體驗證就可以了。這種方式我已經用過很多年了,從來沒有出現過問題。
發表於: 2007/5/2 15:30
|
|||
不要問我哪裡來,我只是個流浪天涯的工程師
|
||||
|
Re: UART輸出的數據 數值都不會超過256?
|
||||
---|---|---|---|---|
版主
|
RS-232 的傳送一般都以 8-bit 為單位,而且傳到終端機顯示 (VT-100) 時,還會將資料轉成可以顯示的 ASCII Code ,所以程式裡會有 itoa( )的函數先將 Integer 轉誠十進制後再轉成ASCII Code。 所以 0x1E9= 489 = 0x34, 0x38,0x39 三個Byte 傳送出去。
發表於: 2007/5/2 12:21
|
|||
|
Re: UART輸出的數據 數值都不會超過256?
|
||||
---|---|---|---|---|
初級會員
|
謝謝救世主的回覆
不過你的例子 我怎算都是489哩 @@? 我不知道 你是否有參考那本書的範例 我不確定我能改成16bits的傳輸 分8+8bits 以下為變數宣告... 並將ADCValue變數透過sitoa函式轉ASCII致TXdata陣列內 unsigned int ADCValue; unsigned char TXdata[4]; sitoa(ADCValue, (unsigned char *)TXdata); void sitoa( unsigned char The_Number, unsigned char *buff) { unsigned char Temp_Char_100; unsigned charTemp_Char_10,Temp_Char ; unsigned char *temp = (unsigned char *)buff ; Temp_Char_100 = The_Number /100 ;//取百位數的數字 temp[0] = Temp_Char_100 + '0' Temp_Char_10 = (The_Number - Temp_Char_100*100) /10 ;//取十位數的數字 temp[1] = Temp_Char_10 + '0' ; Temp_Char = The_Number - ( Temp_Char_100*100 + Temp_Char_10 * 10 ) ; //取個位數的數字 temp[2] = Temp_Char + '0' ; temp[3] = 0 ;//這應該是結束字元 } 此function我可以將此改成最高抓至"16bits"位數的數字 不過RS232傳輸部分 我就很不懂了 .... 且接收端PC 我也只是開個超級終端機來收取資訊 預設也是8bits 或者 9bits視為一筆資料 請問我要怎著手 @@ 謝謝
發表於: 2007/5/2 9:09
|
|||
|
Re: UART輸出的數據 數值都不會超過256?
|
||||
---|---|---|---|---|
資深會員
|
把資料分成兩個位元來傳
EX: 589 = MSB=0x01 , LSB=0xE9
發表於: 2007/5/1 23:46
|
|||
不要問我哪裡來,我只是個流浪天涯的工程師
|
||||
|
UART輸出的數據 數值都不會超過256?
|
||||
---|---|---|---|---|
初級會員
|
請教一下
我依照曾百由的"數位訊號處理器原理與應用"之書範例 想將RS232傳輸 與 輸入捕捉模組的範例CODING在一起 傳輸上似乎都OK 有值 但仔細看 會發現值都不會超過256 似乎高過256 就會從0起跳 EX 270 => 270-256 =14 輸出就會變成14哩 ~~ 請問我要如何才能讀到超過256的值呢?! 似乎跟8 BITS傳輸資料位元有關?! 那如果改成9 BITS (512)來傳輸 最多也頂多512 如果我有1千以上的值 請問我要怎做呢?! 我是利用sitoa() function將值轉成ASCII在傳送 謝謝
發表於: 2007/5/1 21:59
|
|||
|