[請益] 已解決~如果有興趣可以寫信問改的地方
時間: Thu Nov 8 16:39:49 2007
這是我目前在研究有關8051做介面定位觸控螢幕的code
是用組語寫的可是卡到一個地方有問題
已有貼在ASM版了...也希望同樣是研究生的你們可以幫我DEBUG
以下是程式:
ORG00H
MAIN:
;========設定鮑率========可以正確接收了
MOV TMOD,#00100000B;使用計時計數器模式暫存器1與2 ,1號mode2,2號mode1
;P2-30
MOV TH1,#FDH;鮑率=9600,可由timer1 mode2 產生
MOV TL1,#FDH
REV:
SETB P1.1
MOVSCON,#01010000B;SCON串列埠控制暫存器01=mode1,ren=1開始接收
SETB TR1
;部分1=========等待垂直訊號進來,開始做延遲==================
;byte1
JNB RI,$ ;RI=1?,是,下一步,否則繼續偵測
MOV A,SBUF
MOV R0,A
CLR RI
;byte2
JNB RI,$ ;RI=1?,是,下一步,否則繼續偵測
MOV A,SBUF
MOV R1,A
CLR RI
;byte3
JNB RI,$ ;RI=1?,是,下一步,否則繼續偵測
MOV A,SBUF
MOV R2,A
CLR RI
;部分2=========等待垂直訊號進來,開始做延遲==================部分2
MOV P0,#0FFH
LOOP:
SETB P1.1;P1.1的狀態一開始高5v電位
LOOP1: MOV A,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部分,但結果有影響
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.127.77.235
※ 編輯: tea1116 來自: 140.127.77.235 (11/09 13:44)
※ 編輯: tea1116 來自: 140.127.77.235 (11/09 13:44)
※ 編輯: tea1116 來自: 140.127.77.235 (11/09 13:46)
→
10/06 04:10, , 1F
10/06 04:10, 1F