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


Browsing this Thread:   1 Anonymous Users






Re: UART輸出的數據 數值都不會超過256?
#8
初級會員
初級會員


查看用戶資訊
謝謝你的回覆
我找到想要的資訊了

link write.c 就能直接使用printf()傳送資料至UART
至於傳送方式 我就沒怎CARE了
直接用%f %d %c之類的格式就行了
XD 我好像不怎好學.....project在趕 先做出來再說哩 ^^

不過於高速傳送 會發生單一值突然嚴重偏大 或 偏小的現象
我不知道是硬體UART DELAY到 還是我程式有問題?!
甚至或者是馬達A訊號有干擾的問題

不管怎樣 謝謝你們的回覆



發表於: 2007/5/3 11:59
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: UART輸出的數據 數值都不會超過256?
#7
資深會員
資深會員


查看用戶資訊
一般系統內建終端機軟體只能看可視字元。不方便一般通訊軟體撰寫
上除錯。尤其在寫485和CAN的東西。

網路上有些終端機軟體有支援顯示二進位資料,自己找一下就有了。
UART傳輸沒有分什麼ASCII不ASCII的,對電腦來說都是位元資料。

int長度在C18及CCS都為16bits,C18部分在使用者手冊P19。手冊
裡面都講得很清楚,不需要花時間測啦!!

發表於: 2007/5/3 0:59
不要問我哪裡來,我只是個流浪天涯的工程師
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: UART輸出的數據 數值都不會超過256?
#6
初級會員
初級會員


查看用戶資訊
謝謝兩位的回覆
我之所以要轉成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
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: UART輸出的數據 數值都不會超過256?
#5
資深會員
資深會員


查看用戶資訊
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
不要問我哪裡來,我只是個流浪天涯的工程師
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: UART輸出的數據 數值都不會超過256?
#4
版主
版主


查看用戶資訊
RS-232 的傳送一般都以 8-bit 為單位,而且傳到終端機顯示 (VT-100) 時,還會將資料轉成可以顯示的 ASCII Code ,所以程式裡會有 itoa( )的函數先將 Integer 轉誠十進制後再轉成ASCII Code。 所以 0x1E9= 489 = 0x34, 0x38,0x39 三個Byte 傳送出去。

發表於: 2007/5/2 12:21
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: UART輸出的數據 數值都不會超過256?
#3
初級會員
初級會員


查看用戶資訊
謝謝救世主的回覆
不過你的例子 我怎算都是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
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: UART輸出的數據 數值都不會超過256?
#2
資深會員
資深會員


查看用戶資訊
把資料分成兩個位元來傳
EX: 589 = MSB=0x01 , LSB=0xE9

發表於: 2007/5/1 23:46
不要問我哪裡來,我只是個流浪天涯的工程師
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


UART輸出的數據 數值都不會超過256?
#1
初級會員
初級會員


查看用戶資訊
請教一下
我依照曾百由的"數位訊號處理器原理與應用"之書範例
想將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
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... ]

教育訓練中心

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