線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1378
推到 Plurk!
推到 Facebook!

8051串列傳輸接收資料以後對其他輸入作處理的問題

缺席
hisaka0204
一般會員


發表:1
回覆:0
積分:0
註冊:2007-11-07

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-11-08 13:45:31 IP:140.127.xxx.xxx 訂閱
ORG00H
MAIN:
;========設定鮑率========可以正確接收了
MOVTMOD,#00100000B;使用計時計數器模式暫存器1與2 ,1號mode2,2號mode1
;P2-30
MOVTH1,#FDH;鮑率=9600,可由timer1 mode2 產生
MOVTL1,#FDH
REV:
SETB P1.1
MOVSCON,#01010000B;SCON串列埠控制暫存器01=mode1,ren=1開始接收
SETBTR1

;部分1=========等待垂直訊號進來,開始做延遲==================
;byte1
JNBRI,$;RI=1?,是,下一步,否則繼續偵測
MOVA,SBUF
MOVR0,A
CLRRI

;byte2
JNBRI,$;RI=1?,是,下一步,否則繼續偵測
MOVA,SBUF
MOVR1,A
CLRRI

;byte3
JNBRI,$;RI=1?,是,下一步,否則繼續偵測
MOVA,SBUF
MOVR2,A
CLRRI



;部分2=========等待垂直訊號進來,開始做延遲==================部分2


MOVP0,#0FFH
LOOP:
SETB P1.1;P2.1的狀態一開始高5v電位



LOOP1:MOVA,P0;等待下一個垂直脈波出現
CJNEA,#11111111B,LOOP1
SETB P1.1
ACALL DELAY
CLR P1.1
AJMP REV

DELAY:

MOV R6,#43
S3: MOV R7,#76
DJNZ R7,$
DJNZ R6,S3
MOV R7,#4
DJNZ R7,$


RET


JMP LOOP
END

**************************************

以上是我做的程式

我的功能是

1.我點觸控螢幕後接收觸控螢幕的資料放於r3 r2 r1
2.接收完以後等待螢幕的數位訊號高電位的時候做一段時間的delay
然後送出1us的低電位(此種動作接在光筆可以讓主機知道我的滑鼠要定位在哪裡)
3.跳回去等待我下一次點觸控螢幕

問題來了:

1.我有只單純做部分一的程式,每個byte如同預期沒問題
部分二所做出來的座標位置(已延遲時間來算的),也大約在1~4us的誤差內
(還能接受)
但是當我把兩個部分放在一起的時候卻有1~15us的大誤差,所以我想問的是
"當我接收完串列資料以後然後要做其他動作的時候我需不需要設定什麼才能讓結果如同沒加上接收串列資料的結果一樣?"

雖然結果只差15us,但對我ㄧ個座標只有30ns卻是非常大的錯誤

p.s因為這是測試程式,所以我沒有對串列資料作處理,但是結果還是有上面提到的誤差


感謝大大們的幫忙阿


======================================
以下是對我沒講清楚的部份做個介紹

我的意思是我做這CODE是接收串列資料後不處理
然後DELAY一段時間CLR P1.1腳
而至於怎麼知道DELAY時間的問題,因為以800*600為例 我要定位Y=300在螢幕上的話,就送出300*30ns的delay

現在單純只定位在我想讓滑鼠停在螢幕某點可以做到

所以我只要燒完啟動電路就知道滑鼠位置跟加部份1的結果DELAY大概 差多少了?

主要問題在這兩個放一起是否需設定什麼 ?

問題在於我不清楚這兩者加起來怎麼會干擾?
因為我接受串列資料只是做到碰一下做一個DELAY.
理論上應該不影響我要做的後面的DELAY部分,但結果有影響

系統時間:2024-05-13 13:21:59
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!