[問題] 8051陣列索引使用uint與uchar出現差異

作者: brominelove (brominelove)   2018-08-13 19:55:49
開發平台(Platform): (Ex: Win10, Linux, ...)
Windows 7
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)
Keil C51
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
reg51.h, stdio.h
問題(Question):
在一個把終端機藉由UART送一個一個字元給8051、再讓8051與LCD溝通使LCD顯示終端機送
的字元的練習中,發現陣列索引使用uchar和uint宣告,得到的結果不同(索引最大到31)。
LCD是16*2顯示,我構想的是在終端機上一個字輸入完後按enter再輸入下一個字,排列滿
LCD第一列16字時就寫到第二列,最高塞滿31字,當輸入超過第31個字時,所有的字往前擠
一位,第一位被捨棄,而第31位放最新輸入的字,以此類推。
餵入的資料(Input):
例:
1234567890abcdef
ghijklmnopqrstu_ (_是游標)
作者: yvb   2018-08-13 20:10:00
MSG_count=30 時, scanf("%s", ...); 字串結束字元放到...?!
作者: Lipraxde (Lipraxde)   2018-08-13 21:05:00
可能會寫到外面去啊,MSG[n], n = 0~30你的結束字元就被放到MSG[31]去了結果就是把你的uchar弄成0了
作者: yvb   2018-08-13 21:38:00
你要的是 scanf("%s"...? scanf("%c"...? getchar()? 還是?
作者: Lipraxde (Lipraxde)   2018-08-13 22:02:00
應該是中間被插了空格用來對齊,你會用debugger的話可以注意看看記憶體位置我建議練習一下uart中斷處理、在isr裡面手動做處理
作者: yvb   2018-08-13 22:19:00
用 scanf("%s"... 是讀入字串, 且用空白字元分段(略過),而不是逐字讀取; 至於如何排除結束字元? 不要印它不行嗎?意思就是檢查若是結束字元(其實是enter吧?) 就不加MSG_count.
作者: sarafciel (Cattuz)   2018-08-13 22:25:00
getchar讀進來是結束字元濾掉就好了吧
作者: yvb   2018-08-13 22:25:00
這樣 WriteString() 就不會多印出enter符號了.

Links booklink

Contact Us: admin [ a t ] ucptt.com