首先,你得确定你的硬件电路是连接正确了的,硬件电路可参考芯片的典型应用电路。
其次,对其转换的过程应该比较熟悉,该芯片的ADC转化过程如下:
在开始加电20ms内不要有任何转换工作。将CS置低电平后,开始转化。在CS的下降沿,采样保持电路进入保持状态,而且转化正式开始,经过一段内部转化时间后,转化结束的标志是Dout信号置高。数据然后能在外部时钟的作用下依次送出。
编程操作过程:
● 使用CPU上的一个通用I/O接口去拉低CS,保持SCLK低电平。
● 等待最大转换时间或查询DOUT是否为高电平来决定转换是否结束。
● 转换结束后,在SCLK的下降沿开始DOUT数据输出。
● 在第13个脉冲将CS置高,如果CS继续保持低电平,以下输出数据为0。
● 在开始一次新的转换之前,等待最小规定时间tcs,这期间CS应为高电平。如果在转换过程中通过拉高CS来放弃转换,在开始一段新的转换之前,也要等待一段时间(tacq)。CS必须在所有数据转换结束前一直保持低电平。
最后,检查程序是否满足其编程的时序要求。相应的汇编程序如下(你的程序写的太混乱了,思路不清晰)
MOV A,#00H ;接口使用三位通用I/O端口P1.0~P1.2。其中P1.0用 于片选信号。P1.2为数据输入,P1.1产生驱动脉冲SCLK
MOV R6,#04H
MOV R7,#08H
CLR P1.2
CLR P1.0 ;A/D片选有效,启动转换
WAIT: JNB P1.2, WAIT ;等待A/D转换结束
GAOWI: SETB P1.1
CLR P1.1
MOV C, P1.2 ;输入一位数据
RLC A
DJNZ R6, GAOWI ;判高4位是否移出
MOV 21H, A ;存高4位的转换结果
DIWI: SETB P1.1
CLR P1.1
MOV C, P1.2
RLC A
DJNZ R7, DIWI
MOV 20H, A ;存低8位的转换结果
SETB P1.1
CLR P1.1
SETB P1.0
RET
|