整合AD0804, AT89C51, HIN232與 PC的問題(關於量測電壓) |
答題得分者是:㊣
|
TsannTay
一般會員 發表:20 回覆:34 積分:10 註冊:2003-04-10 發送簡訊給我 |
各位大大:
我想要量測電壓訊號傳送至電腦上,
其中訊號的流程為
AD0804--> AT89C51 --> HIN232 --> PC
己經測試過AD0804與AT89C51,AT89C51與PC
兩個都可以獨立運作
但我現在有一個問題,
就是兩個合併一起使用時會有問題
無法正常電壓傳送至電腦的動作.
問題出AT89C51的程式,
不知道問題出在那裏,
請各位幫忙. AT89C51組合語言程式如下所示
;AD CONVERTER --> AT89C51 --> HIN232 --> PC ORG 00H JMP RESET ORG 03H JMP ExtInt0 ORG 23H JMP SERIES_IT ORG 0BH JMP TimerInt RESET: MOV SP,#70H ;;-----USE TIMER 0 MODE 1,TIMER 1 MODE 2, 4000 us INTERRUPT------- MOV TMOD,#00100001B MOV SCON,#01010000B ;;-----AD CONVERT MOV TH0,#>(65536-4000) MOV TL0,#<(65536-4000) MOV IE,#10011011B ;ENABLE TIMER 0, INT0,TIMER 1 AND UART INTERRUPT MOV IP,#00000001B ;choose INT0 SETB TR0 ;START TIMER 0 MOVX @R0,A ;START A/D ADLoop: JMP ADLoop ;;-----INT0 INTERRUPT ExtInt0: PUSH A PUSH PSW SETB RS1 ;SELECT RB2 CLR RS0 MOVX A,@R0 ;READ A/D RESULT MOV P1,A ;AD VALUE SHOW AT P1 SETB TR1 ;START TIMER 1 MOVX @R0,A ;START NEXT A/D CONVERT POP PSW POP A RETI ;;-----Timer 0 INTERRUPT SERVICE ROUTINE--------- TimerInt: MOV TH0,#>(65536-4000) MOV TL0,#<(65536-4000) RETI ;;-----UART SERIES SERIES_IT: JNB RI,EMIT_IT CLR RI MOV SBUF,A ;;A/D CONVERT TRANSFER TO UART CLR TR1 ;CLOSE TIMER 1 JMP END_IT EMIT_IT: CLR TI END_IT: RETI END |
㊣
版主 發表:261 回覆:2302 積分:1667 註冊:2005-01-04 發送簡訊給我 |
你確定你讀ADC0804的值時都正常嗎? ORG 00H
JMP RESET
ORG 03H
JMP ExtInt0
ORG 23H
JMP SERIES_IT
ORG 0BH
JMP TimerInt ------> ORG 00H
JMP RESET
ORG 03H
JMP ExtInt0
ORG 0BH
JMP TimerInt
ORG 23H
JMP SERIES_IT
ORG 30H ------------------------------------
生命的目的,在幻化出多采多姿的組合。
生活的意義,在捕捉住稍縱即逝的感動。
------------------------------------
------
------------------------------------------------------------------------- 走是為了到另一境界,停是為了欣賞人生;未走過千山萬水,怎知生命的虛實與輕重!? |
TsannTay
一般會員 發表:20 回覆:34 積分:10 註冊:2003-04-10 發送簡訊給我 |
|
㊣
版主 發表:261 回覆:2302 積分:1667 註冊:2005-01-04 發送簡訊給我 |
ORG 00H JMP RESET ORG 03H JMP ExtInt0 ORG 0BH JMP TimerInt ORG 23H JMP SERIES_IT ORG 50H RESET: MOV SP,#70H MOV TMOD,#00100001B ORL PCON,#10000000B ; MOV TH1,#0FDH ;19200bps MOV SCON,#01010000B MOV TH0,#>(65536-4000) MOV TL0,#<(65536-4000) MOV IP,#00010000B ; MOV IE,#10010011B ;ENABLE TIMER 0, INT0,AND UART INTERRUPT SETB TR0 ;START TIMER 0 SETB TR1 MOVX @R0,A ;START A/D ADLoop: JMP ADLoop ;;-----INT0 INTERRUPT ExtInt0: PUSH A PUSH PSW SETB RS1 ;SELECT RB2 CLR RS0 MOVX A,@R0 ;READ A/D RESULT MOV P1,A ;AD VALUE SHOW AT P1 MOV SBUF,P1 MOVX @R0,A ;START NEXT A/D CONVERT POP PSW POP A RETI ;;-----Timer 0 INTERRUPT SERVICE ROUTINE--------- TimerInt: MOV TH0,#>(65536-4000) MOV TL0,#<(65536-4000) RETI ;;-----UART SERIES SERIES_IT: JBC TI,END_IT CLR RI END_IT: RETI END請將程式改成上述,試試看. ------------------------------------ 生命的目的,在幻化出多采多姿的組合。 生活的意義,在捕捉住稍縱即逝的感動。 ------------------------------------
------
------------------------------------------------------------------------- 走是為了到另一境界,停是為了欣賞人生;未走過千山萬水,怎知生命的虛實與輕重!? |
TsannTay
一般會員 發表:20 回覆:34 積分:10 註冊:2003-04-10 發送簡訊給我 |
大大,你好:
感謝您的指正,
8951的程式我試過了,
可以正確地在P1上顯示輸入的電壓值,
但傳送至電腦的數值與輸入電壓值為何不同呢?
而我電腦接收的程式如下所示.
請再一次您幫幫忙. 附上BCB版本5.0的程式
//--------------------------------------------------------------- #include |
㊣
版主 發表:261 回覆:2302 積分:1667 註冊:2005-01-04 發送簡訊給我 |
if(BuildCommDCB("9600,n,8,1",&dcb)) 這一行請改為
if(BuildCommDCB("19200,n,8,1",&dcb)) ------------------------------------
生命的目的,在幻化出多采多姿的組合。
生活的意義,在捕捉住稍縱即逝的感動。
------------------------------------
------
------------------------------------------------------------------------- 走是為了到另一境界,停是為了欣賞人生;未走過千山萬水,怎知生命的虛實與輕重!? |
TsannTay
一般會員 發表:20 回覆:34 積分:10 註冊:2003-04-10 發送簡訊給我 |
|
㊣
版主 發表:261 回覆:2302 積分:1667 註冊:2005-01-04 發送簡訊給我 |
引言: 為什麼回傳值變化那麼大, 再則其值變化沒有一個規則性, 我若將baudrate改為19200時, 結果是一樣地,為什麼呢? 再跟大大請教,謝謝.51的振蕩器有用11.0592MHz的嗎? 它才能產生正確的baudrate ------------------------------------ 生命的目的,在幻化出多采多姿的組合。 生活的意義,在捕捉住稍縱即逝的感動。 ------------------------------------
------
------------------------------------------------------------------------- 走是為了到另一境界,停是為了欣賞人生;未走過千山萬水,怎知生命的虛實與輕重!? |
TsannTay
一般會員 發表:20 回覆:34 積分:10 註冊:2003-04-10 發送簡訊給我 |
|
㊣
版主 發表:261 回覆:2302 積分:1667 註冊:2005-01-04 發送簡訊給我 |
引言: 我也是用11.0592MHz的振盪器, 而BCB在讀取資料的Timer設為1sec或0.5sec, 或者其他時間所得的結果都是一樣地, 有時還會不能產生不能接到傳送的訊號, 現在我該如何做才能獲得正確地資料嗎? 是BCB程式的問題呢? 或者是8051程式的問題呢? 再煩請您協助,謝謝.應該是BCB的問題. 改由中斷寫看看吧.當com1上有傳送要求,就去讀取. ------------------------------------ 生命的目的,在幻化出多采多姿的組合。 生活的意義,在捕捉住稍縱即逝的感動。 ------------------------------------
------
------------------------------------------------------------------------- 走是為了到另一境界,停是為了欣賞人生;未走過千山萬水,怎知生命的虛實與輕重!? |
㊣
版主 發表:261 回覆:2302 積分:1667 註冊:2005-01-04 發送簡訊給我 |
可以先確定一下是那邊的問題.
51的串列埠部分,傳輸值改為固定,看看BCB收到的值是否正確,以及能否接收到. MOV SBUF,P1---->MOV SBUF,#0FH ------------------------------------
生命的目的,在幻化出多采多姿的組合。
生活的意義,在捕捉住稍縱即逝的感動。
------------------------------------
------
------------------------------------------------------------------------- 走是為了到另一境界,停是為了欣賞人生;未走過千山萬水,怎知生命的虛實與輕重!? |
TsannTay
一般會員 發表:20 回覆:34 積分:10 註冊:2003-04-10 發送簡訊給我 |
若將MOV SBUF,P1此改MOV SBUF,#0FH
BCB不能接收數值,
而按下8051的RESET開關時
可以接收255的數值,
我想應該是BCB的問題吧, Timer中的程式為
int ReceiveValue; DWORD dwRead; ReadFile(handle, &ReceiveValue, 1, &dwRead, NULL); if(dwRead==0) { Form1->lbStatus->Caption="傳輸錯誤!"; } else { Form1->Edit2->Text=ReceiveValue; Form1->Edit1->Text=""; Form1->lbStatus->Caption="傳輸成功!"; } |
㊣
版主 發表:261 回覆:2302 積分:1667 註冊:2005-01-04 發送簡訊給我 |
你的BCB部分大概有問題.這裡有BCB RS-232相關使用方式,參考一下吧! http://myweb.hinet.net/home5/finetech/TecDoc/Doc2/AcceRS232.htm ------------------------------------
生命的目的,在幻化出多采多姿的組合。
生活的意義,在捕捉住稍縱即逝的感動。
------------------------------------
------
------------------------------------------------------------------------- 走是為了到另一境界,停是為了欣賞人生;未走過千山萬水,怎知生命的虛實與輕重!? |
TsannTay
一般會員 發表:20 回覆:34 積分:10 註冊:2003-04-10 發送簡訊給我 |
|
㊣
版主 發表:261 回覆:2302 積分:1667 註冊:2005-01-04 發送簡訊給我 |
引言: 我之前就是參考這篇文章做BCB的RS232傳輸, 而8051程式將大大的修改的部份, 與本篇8051程式將所要的功能整合在一起, 最後略作修改後,即可傳輸電壓訊號, 但還有一個問題,就是傳輸同一個電壓中, 在數次中就會得到一個錯誤的數據33, 怎麼會這樣嗎? 再一次請您賜教,謝謝.是幾次會出現一次?都固定是33嗎? 若為固定,baudrate改為9200試試 51部分將這一行 ORL PCON,#10000000B 改為 ANL PCON,#01111111B ------------------------------------ 生命的目的,在幻化出多采多姿的組合。 生活的意義,在捕捉住稍縱即逝的感動。 ------------------------------------
------
------------------------------------------------------------------------- 走是為了到另一境界,停是為了欣賞人生;未走過千山萬水,怎知生命的虛實與輕重!? |
TsannTay
一般會員 發表:20 回覆:34 積分:10 註冊:2003-04-10 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |