|
<br />使用AD转换器AD7708碰到的问题!!!<br /><br /><br />使用AD7708与MSC89C51来测试电阻值的大小.<br />可是读AD数据不成功,汇编程序代码如下:<br />;***********************************************************<br />;初始化ADC转换器AD7708,<br />;AD7708的数据顺序是高位在前,低位在后,<br />;MSC89C51数据是低位在前,高位在后.<br />;MSC89C51使用串口工作方式0与AD7708通讯<br />;***********************************************************<br />TESTR: MOV SCON, #00H ;设置串口的工作方式为0<br /> MOV PCON, #00H<br /> MOV A, #07H ;设置comunication寄存器07H,将对IOCON寄存器进行设置<br /> LCALL XCHML<br /> LCALL TRSER<br /> MOV A, #00H ;设置IOCON寄存器,写入00<br /> LCALL XCHML<br /> LCALL TRSER<br /> MOV A, #03H ;设置comunication寄存器03H,将对filter寄存器进行设置<br /> LCALL XCHML<br /> LCALL TRSER<br /> MOV A, #45H ;设置filter寄存器<br /> LCALL XCHML<br /> LCALL TRSER<br /> MOV A, #02H ;设comunication寄存器02H,将对ADCCON寄存器进行设置<br /> LCALL XCHML<br /> LCALL TRSER<br /> MOV A, #0FH ;设置ADCCON寄存器<br /> LCALL XCHML<br /> LCALL TRSER<br /> MOV A, #01H ;设置comunication寄存器02H,将对MODE寄存器进行设置<br /> LCALL XCHML<br /> LCALL TRSER<br /> MOV A, #03H ;设置MODE寄存器<br /> LCALL XCHML<br /> LCALL TRSER<br /><br />;***********************************************************<br />;无需校正ADC<br /><br />;***********************************************************<br />;多通道的读操作<br />READ: MOV A, #01H ;设置comunication寄存器01H,将对MODE寄存器进行设置<br /> LCALL XCHML<br /> LCALL TRSER<br /> MOV A, #03H ;设置MODE寄存器为连续转换模式<br /> LCALL XCHML<br /> LCALL TRSER<br /><br /> MOV R2, #04H<br /> MOV R3, #0F0H<br /> MOV R0, #30H<br /><br /><br /><br />READ4: MOV A, #02H ;设置comunication寄存器02H,将对ADCCON寄存器进行设置<br /> LCALL XCHML<br /> LCALL TRSER<br /> MOV A, R3<br /> SWAP A ;设置ADCCON寄存器选择通道N和它的工作范围。<br /> LCALL XCHML<br /> LCALL TRSER<br /> JB AD_RDY, $<br /> MOV A, #44H ;设置comunication寄存器44H,将对DATA寄存器进行读操作。<br /> LCALL XCHML<br /> LCALL TRSER<br /><br /> LCALL RESER ;读串口数据<br /> LCALL XCHML ;交换高低位数据<br /> MOV @R0, A<br /> INC R0<br /> INC R3<br /> DJNZ R2, READ4 ;将四个通道数据全部读完毕后,存储到RAM中。<br /><br />;***********************************************************<br />;串口发送数据子程序<br />TRSER: MOV SBUF, A<br />TRSER1: JNB TI, TRSER1 ;输出完否<br /> CLR TI ;完了,清TI标志,以备下次发送<br /> RET<br />;***********************************************************<br />;串口接收数据子程序<br />RESER: SETB REN<br />RESER1: JNB RI, RESER1 ;接受完否<br /> MOV A, SBUF<br /> CLR RI ;完了,清RI标志,以备下次接受<br /> RET<br />;***********************************************************<br />;高低位交换子程序<br />XCHML: MOV R5, #08H<br /> MOV R7, A<br /> MOV R6, #00H<br /> CLR C<br />XCHML1: MOV A, R7<br /> RRC A<br /> MOV R7, A<br /> MOV A, R6<br /> RLC A<br /> MOV R6, A<br /> DJNZ R5, XCHML1<br /> RET<br /><br />请帮忙说明到底是哪里不对?<br /> |
|