Re: [問題] RS232與8051

看板ASM (組合語言)作者 (此人掛網中……)時間16年前 (2008/08/04 20:00), 編輯推噓1(101)
留言2則, 1人參與, 最新討論串3/3 (看更多)
※ 引述《aegishow (clover)》之銘言: : 我想問一些關於編碼的問題,以下是部分程式碼 : unsigned char code seg7[]={0xc0,0xf9,0xa4 : ,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; : code char mes[]="$LGIN,275,34,5" ; //自己設的字串資料 : 我想要顯示自己設的字串資料中的34,也就是第二個逗號跟第三個逗號中間的數字 : 我是利用電腦送出這個字串 : L=第三個逗號的位置(13) : SBUF=mes[L-1]; //我用SBUF讀到的是4也就是34H : 我用7段顯示器接P0 : P0=seg7[mes[L-1]+1] //為什麼顯示出來不是數字4呢?? 結果不是數字 mes[L-1] = '4' mes[L-1]+1 = '4' + 1 = '5' = 35H P0 = seg7[mes[L-1]+1] = seg7[35H] = ??? 正確的做法應該是: P0 = seg7[ mes[L-1] - 30H ]; 這樣就好了……沒事再加一是做啥呢? 請記住一個很重要的觀念:4 和 '4' 和 "4" 是完全不同的東西 : 我直接放數字上去,也就是 : P0=seg7[5] //卻可以顯示出數字4 因為那個數字就是4 : SBUF讀到的數字4是經過轉碼了嗎? 所以我看到的數字並不是原始的資料嗎? 你看到的數字就是 UART 所讀到的數字 : 要怎麼把SBUF讀到的資料轉成數字呢? 不用轉,因為你在傳送字串時,已經轉成 ASCII 了 : 該不會要自己建一個對照表吧? 某個程度上會需要建立 ASCII -> 數字 的表格 不過因為你只想顯示數字 0~9,所以SBUF讀進來的資料只要 -30H 就可以了 所以其實也不用建對照表 再想想吧……有很多事情你把它搞混了 這個已經離組語很遠了…… -- 只要覺得有生命危險,就馬上四散逃走…… -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 219.87.156.98

08/05 09:04, , 1F
茅塞頓開
08/05 09:04, 1F

08/05 09:19, , 2F
話說30H不能用,要用0x30機器才看的懂XD
08/05 09:19, 2F
文章代碼(AID): #18bkzQQo (ASM)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 3 之 3 篇):
5
8
文章代碼(AID): #18bkzQQo (ASM)