8051的值變成亂碼 |
答題得分者是:kib72377
|
huskyang
一般會員 發表:2 回覆:8 積分:2 註冊:2010-06-30 發送簡訊給我 |
各位前輩大家好
小弟遇到一些問題,想請問一下板上的高手 將所要量測的電阻值經過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....都試過了,還是亂碼 煩請先進幫忙,感謝!!!
------
=.= |
kib72377
高階會員 發表:1 回覆:217 積分:238 註冊:2004-11-12 發送簡訊給我 |
|
huskyang
一般會員 發表:2 回覆:8 積分:2 註冊:2010-06-30 發送簡訊給我 |
|
kib72377
高階會員 發表:1 回覆:217 積分:238 註冊:2004-11-12 發送簡訊給我 |
以 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 發送簡訊給我 |
|
kib72377
高階會員 發表:1 回覆:217 積分:238 註冊:2004-11-12 發送簡訊給我 |
|
huskyang
一般會員 發表:2 回覆:8 積分:2 註冊:2010-06-30 發送簡訊給我 |
謝謝你喔!!!
我重新敘述一遍好了,我的電路圖跟 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 發送簡訊給我 |
|
huskyang
一般會員 發表:2 回覆:8 積分:2 註冊:2010-06-30 發送簡訊給我 |
是不管輸入什麼值,他永遠都是在 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 發送簡訊給我 |
你可以先測量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, 註解 無‧
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |