在 STC12C5A602S MCU 中使用 2 个 ADC 通道

问题描述

我正在用 8051 MCU IDE 引脚 P1.0 和 P1.1 作为脉冲信号和延迟时间的 ADC 输入对 STC12C5A602S MCU 进行编程;在上面的代码中,在 SFR 声明之后,有一个用于 P0.0 和 P0.1 作为输入和 P2.0(脉冲信号发射器)和 P2.2 作为输出的 START-STOP 代码来控制 DIV268N 步进驱动器。来自P0.3(en of carrer)的信号使MCU根据P1.1的值来停止驱动器延迟并改变驱动器中的dir;之后有一个空的反向运动大约 3 圈(87H 步);事实是,我将 TH 和 TL 与来自 P1.0 的 AD_RES 用于脉冲信号,但在空的反向运动中,脉冲信号与初始不同(慢):我无法弄清楚代码中的问题是什么,请检查我的代码并感谢您

;/*Declare SFR associated with the ADC */
ADC_CONTR   EQU 0BCH            ;ADC control register
ADC_RES     EQU 0BDH            ;ADC high 8-bit result register
ADC_LOW2    EQU 0BEH            ;ADC low 2-bit result register
P1ASF       EQU 09DH            ;P1 secondary function control register
AUXR1       EQU 0A2H        ;redefirnir AUXR1
;//Declare Control REGISTERS asociated with ADC*//
IE      EQU 0A8H        ;Interrupt Enable
IP      EQU 0B8H        ;Interrupt priority Low
IPH     EQU 0B7H        ;Interrupt priority High

;/*Define ADC operation const for ADC_CONTR*/
ADC_POWER   EQU 80H             ;ADC power control bit
ADC_FLAG    EQU 10H             ;ADC complete flag
ADC_START   EQU 08H             ;ADC start control bit
ADC_SPEEDLL EQU 00H             ;420 clocks
ADC_SPEEDL  EQU 20H             ;280 clocks
ADC_SPEEDH  EQU 40H             ;140 clocks
ADC_SPEEDHH EQU 60H             ;70 clocks

    ORG 0100H
    MOV TMOD,#01H      ;16-bit timer mode
                    ;USE EXTERNAL CRISTAL¡¡¡¡¡ (11.0592MHz)
ESPERA:
    SETB    P2.2            ;disconnect ENABLE OUT
    SETB    P2.0            ;APAGA Emisor
    JB  P0.1,ESPERA        ;ESPERA untill START P0.1 INTERUPTOR
LOOP:
    JNB P0.0,ESPERA        ;STOP WAIT
    JNB P0.2,ESPERA        ;Verify UP,Down Sensor 
    JB  P0.4,ESPERA        ;Signal ENAPLC2

    MOV A,#11111111b
    MOV P1ASF,#000000001B ;set P1.0 ADC
    MOV     ADC_CONTR,#11101000B   ;ADC power-on delay and Start A/D conversion
                    ;P1.0 As ADC
    nop
    nop
    nop
    nop

    MOV TH0,ADC_RES        ;A (high byte PWM)
    MOV TL0,ADC_RES        ;A (low byte PWM)   
    CLR TF0         ;clear timer overflow flag
    SETB    TR0         ;start timer
WAIT:

    JNB TF0,WAIT       ;wait for overflow
    DJNZ    A,WAIT          ;A counter
    CLR P2.2            ;ENA On PSR5042
    CPL P2.0            ;toggle port bit

    JB  P0.3,LOOP      ;Verify RIGTH,LEFT sensor

;   CLR TR0         ;stop timer
    CLR ADC_RES
    CLR ADC_CONTR       ;Turn off ADC
    SETB    P2.2            ;disconnect ENABLE OUT
    SETB    P2.0            ;APAGA Emisor

    MOV P1ASF,#00000010B  ;set P1.1 as ADC
    MOV     ADC_CONTR,#11101001B   ;ADC power-on delay and Start A/D conversion
    nop
    nop
    nop
    nop
    nop
    MOV A,ADC_RES
    CLR ADC_RES
    CLR ADC_CONTR       ;Turn off ADC

    MOV B,#00001000B
    DIV AB
    MOV R0,A
    MOV R1,A
    MOV R2,A

DELAY1:             ;Espera en extremo Left o Rigth
    DJNZ    R0,DELAY1
    DJNZ    R1,DELAY1
    DJNZ    R2,DELAY1
    CPL P2.1        ;Change DIR
    CLR P2.2        ;ENA ON PSR5042

    MOV     R2,87H          ;3 rounds

IDLE:
    MOV A,#11111111b
    CLR TF0         ;clear timer overflow flag
    SETB    TR0         ;start timer
DELAY2:                 ;movimiento en vacío de regreso
    JNB TF0,DELAY2     ;wait for overflow
    DJNZ    A,DELAY2        ;A counter
;   CLR P2.2            ;ENA On PSR5042
    CPL P2.0            ;toggle port bit
    DJNZ    R2,IDLE         ;repeat

    LJMP    LOOP            ;repeat
    END

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)