| 
 
| <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 /> | 
 |