全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2126
推到 Plurk!
推到 Facebook!

8051的值變成亂碼

答題得分者是:kib72377
huskyang
一般會員


發表:2
回覆:8
積分:2
註冊:2010-06-30

發送簡訊給我
#1 引用回覆 回覆 發表時間:2010-06-30 22:39:15 IP:140.122.xxx.xxx 訂閱
各位前輩大家好

小弟遇到一些問題,想請問一下板上的高手

將所要量測的電阻值經過ADC0804轉換輸入到8051 (跟益眾買的AT89C51ED2實驗版)

然後用labview去抓8051的值,結果出來變成亂碼

想說是不是labview的問題,開終端機下去看也是亂碼

?????矘 ?????????矘 ?????????矘 ?????????矘 ??
???????矘 ????????????????????????????????
????????????????????????????????????????
????????????????????????????????????????

目前想過的問題是鮑率,爬過一些文章,已經試過ATMEL FLIP燒錄時發生的問題(X2勾不勾之類的)

現在只要拔掉INTR (接P2.0),就不會再傳送亂碼

但是拔掉RD(接P3.7),WR(接P3.6),DB0~7(接P0.0~0.7)

卻還是一直傳送亂碼,請問到底哪個地方發生錯誤

以下是程式碼:

$MOD51
;程式起始設定 --------------------------------
ORG 00H
START: MOV SP,#60H ;設定堆疊區
MOV SCON,#50H ;UART工作在MODE1,SM1=1,REN=1
MOV TMOD,#20H ;TIMER1工作在MODE2
MOV TH1,#0F4H ;鮑率2400 (石英振盪11.0592M)
MOV TL1,#0F4H ;鮑率2400
SETB TR1 ;啟動TIMER1
;資料傳送 ------------------------------------

RESET: MOVX @R0,A ;使P0為高阻抗並使ADC0804開始轉換
JB P2.0,$ ;判斷INTR是否轉換完成
MOVX A,@R0 ;將轉換完成的資料載入累加器A
CLR TI ;清除傳送旗標
MOV SBUF,A ;將資料載入SBUF暫存器(資料傳送到PC)
JNB TI,$ ;判斷是否傳送完畢
CPL A
MOV P1,A ;將資料顯示在P1上
CALL DELAY ;呼叫延遲副程式
JMP RESET ;返回RESET
;延遲副程式 ----------------------------------------
DELAY: MOV R5,#100
D1: MOV R6,#248
DJNZ R6,$
DJNZ R5,D1
RET
END

這是課本的範例程式碼,鮑率的部份我修改試過還是亂碼!!!

2400,4800,9600,19200....都試過了,還是亂碼

煩請先進幫忙,感謝!!!


------
=.=
編輯記錄
huskyang 重新編輯於 2010-06-30 22:43:13, 註解 無‧
huskyang 重新編輯於 2010-06-30 22:44:30, 註解 怎麼上傳電路圖??‧
huskyang 重新編輯於 2010-06-30 23:12:25, 註解 無‧
kib72377
高階會員


發表:1
回覆:217
積分:238
註冊:2004-11-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2010-07-01 08:57:47 IP:218.170.xxx.xxx 未訂閱
你沒有將2進數值轉成 hex,bcd,ascii之類的文字,
當然都看到亂碼
huskyang
一般會員


發表:2
回覆:8
積分:2
註冊:2010-06-30

發送簡訊給我
#3 引用回覆 回覆 發表時間:2010-07-01 11:11:37 IP:140.122.xxx.xxx 訂閱
請問一下要怎麼轉成ASCII碼??

TABLE: DB 30H
DB 31H
.
.
.


DB 39H


是這樣嗎???

謝謝!!
------
=.=
kib72377
高階會員


發表:1
回覆:217
積分:238
註冊:2004-11-12

發送簡訊給我
#4 引用回覆 回覆 發表時間:2010-07-01 18:08:56 IP:218.170.xxx.xxx 未訂閱
以 HEX 為例,
先將原 8BIT 2進制數值拆解 上下4bit (第7-4 bit 轉1個數字0~F,第3-0 bit 轉另一數字0~F)
查表取值,
db 30h,31h,32h,33h,34h,35h,36h,37h,38h,39h,41h,42h,43h,44h,45h,46h
('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F')

2個字傳回後,再補一個空格字元 20H當分格.這樣就有個稍微像樣的版面了.
huskyang
一般會員


發表:2
回覆:8
積分:2
註冊:2010-06-30

發送簡訊給我
#5 引用回覆 回覆 發表時間:2010-07-01 19:16:23 IP:140.122.xxx.xxx 訂閱
現在程式跑出來一直在5V上下震盪,好像沒辦法抓到實際的值???

=.=
------
=.=
kib72377
高階會員


發表:1
回覆:217
積分:238
註冊:2004-11-12

發送簡訊給我
#6 引用回覆 回覆 發表時間:2010-07-01 20:00:58 IP:211.73.xxx.xxx 未訂閱
上下差多少?

1.電源濾波穩壓加強,
2.輸入信號加個電容器
3.程式中取樣N次來平均

編輯記錄
kib72377 重新編輯於 2010-07-01 20:01:56, 註解 無‧
huskyang
一般會員


發表:2
回覆:8
積分:2
註冊:2010-06-30

發送簡訊給我
#7 引用回覆 回覆 發表時間:2010-07-01 23:41:29 IP:219.71.xxx.xxx 訂閱
謝謝你喔!!!

我重新敘述一遍好了,我的電路圖跟 http://delphi.ktop.com.tw/board.php?cid=173&fid=1167&tid=67816

這一篇的作者一樣,只是我的ADC0804第六支接腳是5V接到10K的可變電阻,量測的類比訊號是電阻值

其它就跟他一樣,程式也是課本上面的範例

後來他有修改的地方(P3.6)

START: CLR P3.6
SETB P3.6
WAIT: JB P2.0,WAIT

我也跟著做結果還是不行,有找過一些ADC0804的電路圖看

有的人把CS跟RD一起接地,有的把RW跟INTR一起接

不知道哪一種才是正確的接法!!

另外在接ED2實驗版時,我的RD(接P3.7),WR(接P3.6),INTR(接P2.0),ADC0804 DB0~7(接P0.0~7)

我用三用電錶量上述的電壓,除了ADC0804電壓會改變之外,其他都一直在5V

最後ED2是接RS232到LABVIEW顯示出來,LABVIEW抓到的二進位一直是11111110~11111111

還是在5V,然後把RD跟WR拔掉時,LABVIEW仍然是呈現11111110~11111111

把INTR拔掉後,才歸0

如果WR跟RD電壓沒有變化的話,那表示應該沒有資料傳送

到底是電路圖的問題還是程式碼的問題??

CS跟RD一起接地的話ADC就會一直自己轉

那INTR跟WR接一起呢??


------
=.=
kib72377
高階會員


發表:1
回覆:217
積分:238
註冊:2004-11-12

發送簡訊給我
#8 引用回覆 回覆 發表時間:2010-07-02 12:23:34 IP:218.170.xxx.xxx 未訂閱
1. 硬體線路,我看不到,不予置評
(目前用的電腦,看不到此站上任何附加檔)

2.
5v輸出值 11111110~11111111 ,個人覺得不離譜(已經很好了,電源跟Vref穩壓或許可以再加強),
如果是輸入5.1v輸出11111110~11111111才叫離譜
你可以試試輸入 2.5V 和 0 V 時的輸出值再來一次研究.
huskyang
一般會員


發表:2
回覆:8
積分:2
註冊:2010-06-30

發送簡訊給我
#9 引用回覆 回覆 發表時間:2010-07-02 14:09:44 IP:140.122.xxx.xxx 訂閱
是不管輸入什麼值,他永遠都是在 11111111~11111110

後來找了一些資料研究了一下

我把CS跟RD接一起,WR跟INTR接一起,程式碼把P2.0的部份刪掉

重新接一次之後,就可以量出我要的電阻值了

我的可變電阻是10K,但是範圍在0K~11K左右

在電阻調到最大時,labview抓到的電阻值是10.5~12.5之間跳動

請問有什麼方法讓他穩定在11K左右嗎??

EX:加個電容??

我是用ADC0804-->8051ED2-->RS232-->labview,所以應該沒辦法再加穩壓電路進去!!

謝謝!!
------
=.=
ScottWang
版主


發表:32
回覆:486
積分:688
註冊:2009-04-27

發送簡訊給我
#10 引用回覆 回覆 發表時間:2010-07-06 12:00:20 IP:59.115.xxx.xxx 訂閱
你可以先測量VR在以下幾種的電阻值,如0,1K,5K,10K,最大值,以數位電表測量,換算成16進位,再測量ADC0804輸出的各種讀值,兩相對照,看看差額為多少.

當VR轉在最左邊時,電表的讀值可能不等於0,把該值以電表讀出記下.

ADC0804的讀值誤差為 ±LSB.

------
高壓直流電源供應器,高壓模組,測試LED專用AC LED定電流源,全範圍可調電壓電流,
中低壓直流電源供應器,電壓放大器,電流放大器,帶通濾波器,高精度參考電壓,
標準電壓,恆流源(定電流源),恆壓源(定電壓源),大電流電源供應器.
接受訂製,設計生產各種特殊規格,高精度產品,學校實驗室,研究單位實驗設備,
另可接受其它電子專案設計,HV Power,Vmax=20KV,Imax=2000A.
http://hvpower.myweb.hinet.net/
編輯記錄
ScottWang 重新編輯於 2010-07-06 12:08:01, 註解 無‧
系統時間:2024-04-24 18:59:11
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!