问题描述
我正在用 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 (将#修改为@)