作者tea1116 (大钧)
看板Master_D
标题[请益] 已解决,有兴趣知道结果可以写信问我
时间: 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)