钻石会员
主题
回帖0
积分26473
阅读权限50
注册时间2009-2-7
最后登录1970-1-1
在线时间 小时
|
本帖最后由 老弹弓 于 2011-2-27 17:25 编辑
MOSI EQU P1.5 ; spi
MISO EQU P1.6 ; SPI
SCLK EQU P1.7 ; 时钟
F_CS EQU P1.0 ; DATAFLASH片选
TP_CS EQU P1.2 ; 触摸芯片片选
SD_CS EQU P1.1 ; SD卡片选
TP_X_DATA EQU 50H ; 8位x值
TP_Y_DATA EQU 51H ; 8位y值
TP_CONTOR EQU 52H ; 放tp 的控制字
ORG 0058H
MAIN:
LCALL TP_Take_X ; 获取x通道的值
LCALL TP_Take_Y ; 获取y通道的值
jmp $
;***************************************************************************************
;子程序名称:TP_Take_X
;功能: 读取X 通道的值
;入口: ,
;出口: 读到的数放在 TP_X_DATA 中
;***************************************************************************************
TP_Take_X:
MOV TP_CONTOR, #98H ; 送x通道的控制字 1001 0100 差分 x 8位模式
LCALL TP_SEND ; 发送x通道的控制字
LCALL DELAY1US ; 延时或检测忙信号 实际是0.5us
LCALL TP_TAKE ; 获取x通道的值
MOV TP_X_DATA ,A ; 保存x通道的值
ret
;***************************************************************************************
;子程序名称:TP_Take_Y
;功能: 读取X 通道的值
;入口: ,
;出口: 读到的数放在 TP_X_DATA 中
;***************************************************************************************
TP_Take_Y:
MOV TP_CONTOR, #0d8H ; 送Y通道的控制字 1101 0100 差分 Y 8位
LCALL TP_SEND ; 发送Y通道的控制字
LCALL DELAY1US ; 延时或检测忙信号 实际是0.5us
LCALL TP_TAKE ; 获取Y通道的值
MOV TP_Y_DATA ,A ; 保存Y通道的值
ret
;***************************************************************************************
;子程序名称:?TP_SEND
;功能: 发送获取 通道的控制字
;入口: R1 放发送次数 8 ,TP_CONTOR 放发送控制字 用到 A
;***************************************************************************************
TP_SEND:
CLR TP_CS ; 片选
CLR SCLK
MOV R1,#8 ; 发送次数
MOV A,TP_CONTOR ; 通道的控制字
TP_SEND8: MOV C,ACC.7 ; 控制字的第七位送到 c
MOV MOSI, C ; 第一位送到 数据输出
NOP
NOP
NOP
NOP
SETB SCLK ; 上升沿数据被读入
NOP
NOP
NOP
NOP
CLR SCLK
RL A ; 左移A
DJNZ R1 , TP_SEND8
RET
;***************************************************************************************
;子程序名称:TP_Take 7843 在下降沿移出数据,可利用上升沿读取。 脉冲宽度 要大于 200ns
;功能: 读取X 或Y 通道的值
;入口: R1 放发送次数 8 ,
;出口: 读到的数放在 A 中
;***************************************************************************************
TP_Take:
MOV R1,#8 ; 放入读取次数,这里是8位所以放8 如果是12位就放12
SETB MISO ; 置高,准备读取
SETB SCLK ; CLK =1
NOP
NOP
NOP
NOP
NOP
CLR SCLK ; CLK=0 7843 在下降沿移出数据 第一位可以在这里读取 也可以在下一个时钟的上升沿后
NOP
NOP
NOP
NOP ; 额外增加的时钟,让第一个数据先发送的DOUT 上。
NOP
TP_TAKE8:
SETB SCLK ; CLK=1
MOV C, MISO ; 读取 3时钟
RLC A ; 左移一位 到A 中 1 时钟
NOP ; 1时钟
NOP ; 共计 6 时钟延时 0.045*6= 270ns 大于 200ns
CLR SCLK ; CLK=0 数据被送到数据线上
NOP
NOP
NOP
DJNZ R1,TP_TAKE8 ; 读取8次
SETB TP_CS ; 禁止片选
RET
delay1us:
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop ;22m 晶振
ret
end
为什么代码以发上来就乱了? |
|