Pregunte por el lenguaje ensamblador del microcontrolador 51 para controlar el sensor de inclinación SCA60, que se utiliza para hacer un carro balancín.
¡Está bien si puedes proporcionar una referencia si es similar! !
Anexo 1:
Programa fuente total
***************Descripción****; ** **********************************************
;** P1.1 es la entrada del sensor izquierdo; P1.0 es la entrada del sensor derecho**
;** P1.6 detecta la inclinación hacia adelante del cuerpo. ; P1.7 detecta la inclinación del cuerpo hacia atrás**
;** Definición del puerto del cronómetro: **
;** A(P2.1): Iniciar/detener el cronometraje; ; B(P2.3): Reproducción de cada tiempo de grabación; **
;** C(P2.3): Marcar/borrar el tiempo del segmento (en estado detenido) **
;************ ************************************* **************** **********
ORG 0000H
;******* *****Programa principal********** ********************************** *********
JBGN:
LCALL TC; Detener
LCALL CSZT; ***************Comprobación del equilibrio corporal* *******************
CGQ:
LCALL QJ; avance 3S, no verifique la línea negra en el terminal A por primera vez
p>
LCALL QL ; ; Iniciar cronómetro
LCALL DELAY1S
LCALL DELAY1S
LCALL DELAY1S
LCALL TC Detener
LCALL DELAY30; ; Eliminar balanceo
JXPD: JNB P1.6, MBXS; si se inclina hacia adelante (llegando cerca del punto C), gire el cronómetro muestra el tiempo de conducción del segmento AC
LCALL QJ; >
LCALL DELAY
LCALL TC
LCALL DELAY30; Eliminar oscilación
LJMP JXPD Continúe juzgando si llega a las proximidades del punto C
p>MBXS:
LCALL QDJS
LCALL CDSL5 Deténgase durante 5 segundos, lea el segmento de CA y conduzca el tiempo
LCALL QL;
;Reiniciar el cronómetro
LCALL QDJS;Iniciar el cronometraje y registrar el tiempo de ajuste del equilibrio
CGQJC:
JNB P1.6, JBZHT; Si se inclina hacia adelante, gire más lento Ir; hacia atrás a alta velocidad
JNB P1.7, JBWW; si se inclina hacia atrás, gire hacia adelante a baja velocidad
LCALL DELAY1S para determinar si está realmente equilibrado
p>
LCALL DELAY1S
LCALL DELAY1S
JNB P1.6, CGQJC; si está inclinado hacia adelante, gire para continuar ajustando la balanza
JNB P1. 7, CGQJC; si está inclinado hacia atrás, gire para continuar Ajustar el equilibrio
LCALL TC; Detener
LCALL QDJS Detener el tiempo y mostrar el tiempo necesario para el ajuste del equilibrio
CLR P2.5; el zumbador suena
CLR P2.4; luces coloridas encendidas
LCALL CDSL5; gire hacia las luces del automóvil y parpadee 5 veces, indicando el tiempo de 5S
LCALL CSZT
LJMP CDB; Ir de C a B y programar hacia adelante
*************Ir a salto de longitud*** ************
JBZHT:
LJMP JBTPH
JBWW:
LJMP JBWWW
;************Ajustar saldo** *******
JBTPH:
LCALL DELAY30; oscilación del sensor
JBTP: LCALL HT
retardo de llamada
LCALL TC
LCALL DELAYTC elimina la oscilación del sensor
> JNB P1.6, JBTP
LJMP CGQJC
JBWWW:
LCALL DELAY30
JBWG: LCALL QJ
LCALL DELAY
LCALL TC
LCALL DELAYTC Eliminar oscilación del sensor
JNB P1.7, JBWG
LJMP CGQJC
p>; ********* Programa desde el punto C hasta el final B* *********
CDB:
LCALL QL ; reinicio del cronómetro
LCALL QDJS
LCALL QJ
DT: JB P1.0, DT si el lado derecho encuentra una línea negra, verifique el lado izquierdo; (ejecución secuencial); de lo contrario, continúe revisando el lado izquierdo
JB
P1.1, DT
LCALL TC
LCALL QDJS; Detener el cronometraje y mostrar el tiempo de C a B
LCALL CDSL5;
LCALL HT; después de 5 segundos de estacionamiento, retroceda y regrese
LCALL QL
LCALL QDJS
LCALL DELAY1S
LCALL DELAY1S
LCALL DELAY1S
DDTT: JB P1.0, DDTT; si el lado derecho encuentra una línea negra, verifique el lado izquierdo (ejecución secuencial); de lo contrario, continúe verificando el lado izquierdo
JB P1.1, DDTT
; INC A
; CJNE A, #2H, DDTT Al regresar de la terminal B a la terminal A, no es necesario detectar la línea negra del terminal B
p>LCALL TC ha regresado a A, detener
LCALL QDJS Detiene el cronometraje y muestra el tiempo necesario para regresar; B a A
; ******** ****************Funciones básicas e interfaz de programa para desarrollar piezas******* ********************* *************
LCALL CDSL5; retraso 5S, esperando entrar a la obra programa de pieza
LCALL CSZT
CLR P2.4 ;La luz de estado está encendida durante 5S
LCALL DELAY1S
LCALL DELAY1S p>
CLR P2.5 ;El timbre suena durante 3S
LCALL DELAY1S p>
LCALL DELAY1S
LCALL DELAY1S
LCALL CSZT; apague la luz de estado e ingrese al programa de reproducción
; ********** *******************Reproducir parte del programa principal************************************ *********** **
FHBF:
LCALL QJ
QJXHX:
JNB P1, JX1; línea negra), continúe consultando P1.0 (si se encuentra una línea negra a la izquierda, verifique el estado a la derecha)
JNB P1.0, JX2 si P1 .0 es 0 (negro) línea), luego continúe consultando P1.1 (cuando encuentre una línea negra a la derecha, verifique el estado a la izquierda)
LJMP QJXHX
JX1:
JNB P1.0, PHCL
LJMP CZZW; si P1.0 también es una línea negra, equilibre, de lo contrario gire a la izquierda
JX2:
JNB
P1.1, PHCL
LJMP CYZW
CZZW:
LCALL ZZW
LCALL ZWSJ tiempo de giro
LCALL TC
LCALL DELAY30
LCALL QJ
LJMP QJXHX
CYZW:
LCALL YZW p>
LCALL ZWSJ; tiempo de giro
LCALL TC
LCALL DELAY30
LCALL QJ
LJMP QJXHX
;******************Ajuste de saldo************************ p>
PHCL:
LCALL QJ adelante 3S
LCALL DELAY1S
LCALL DELAY1S
LCALL DELAY1S
LCALL TC
LCALL DELAY30; Eliminar la oscilación del sensor
FHPHTZ:
JNB P1.6, FHZHT; p>
JNB P1.7, FHZQJ; si se inclina hacia atrás, gire hacia adelante lentamente
LCALL DELAY1S; Retraso para determinar si está realmente equilibrado
LCALL DELAY1S
LCALL DELAY1S
JNB P1.6, FHPHTZ; si está inclinado hacia adelante, gire para continuar ajustando la balanza
JNB P1.7, FHPHTZ si está inclinado hacia atrás, gire hacia continúe ajustando el equilibrio
LCALL TC; Detener
LCALL QDJS; detenga el tiempo y muestre el tiempo necesario para el ajuste del equilibrio
CLR P2.5 suena el zumbador; /p>
CLR P2.4; luces de colores encendidas
LCALL CDSL5; gire los faros para parpadear 5 veces, indicando tiempo 5S
LJMP FHPHTZ; /p>
;***** ******Transferencia a salto de longitud************
FHZQJ:
LCALL CSZT ; el estado inicial apaga la alarma
LJMP FHWWW
FHZHT:
LCALL CSZT el estado inicial apaga la alarma
LJ;
MP FHTPH
;**********Ajustar saldo*********
FHTPH:
LCALL DELAY30 ; Eliminar la oscilación del sensor
TP: LCALL HT
LCALL DELAY
LCALL TC
LCALL DELAYTC ;Eliminar la oscilación del sensor
JNB P1.6, TP
LJMP FHPHTZ
FHWWW:
LCALL DELAY30; eliminar oscilación del sensor
DH: LCALL QJ
LCALL DELAY
LCALL TC
LCALL DELAYTC; eliminar oscilación del sensor
JNB P1.7, DH
LJMP FHPHTZ
;******************subrutina****************** ** ********************************
;******* ****Configuración Estado inicial**********
CSZT:
SETB P2.6 apagar las luces
SETB; P2.7
SETB P2.4
SETB P2.5; apagar el timbre
RET
;**** **** ***Detener************************
TC:
CLR P1.2
CLR P1.3
CLR P1.4
CLR P1.5
RET
;* ***** ****Adelante************************
QJ:
CLR P1 .2
SETB P1.3
CLR P1.4
SETB P1.5
RET
;****** ****Volver************************
HT:
SETB P1.2
CLR P1.3
SETB P1.4
CLR P1.5
RET
;****** ***Gira a la izquierda******************
ZZW:
CLR P1.2
CLR P1.3
CLR P1.4
SETB P1.5
RET
<p>;************Gire a la derecha******************
YZW:
CLR P1 .2
SETB P1.3
CLR P1.4
CLR P1.5
RET
;************Control de cronómetro************************
;** *** **Iniciar/detener temporización************
QDJS:
CLR P2.1
LCALL DELAY10 p>
RETARDO LLAMADA10
RETARDO LLAMADA10
RETARDO LLAMADA10
SETB P2.1
RET
;* *************Pantalla borrada******************
QL:
CLR P2.3
RETARDO LLAMADA LC10
RETARDO LLAMADA LC10
RETARDO LLAMADA LC10
RETARDO LLAMADA LC10
SETB P2.3
RET
;************Programa de retardo****************** ****
;****Retraso 1 segundo******
DELAY1S:
MOV R3, #02H
DEL1: MOV R2, #0FAH
DEL2: MOV R1, #0FAH
DEL3: DJNZ R1, DEL3
NOP
DJNZ R2, DEL2
p>DJNZ R3, DEL1
RET
;****Retraso 10 milisegundos*****
DELAY10: p>
MOV R2, #20
DB1: MOV R1, #248
DB2: DJNZ R1, DB2
DJNZ R2, DB1 p>
RET
;**********tiempo de avance o retroceso************
RETARDO:
MOV R2, #30
DD1: MOV R1, #200
DD2: DJNZ R1, DD2
DJNZ R2, DD1
RET
;************Tiempo de estacionamiento****************** *
DELAYTC:
MOV R2, #100
D11: MOV R1, #200
D22: DJNZ R1, D22
DJNZ R2, D11
RET
;****
*****Programa de retraso******************
**********Retraso 0,5 segundos****<; /p>
DELAY30:
MOV R2, #250
DL2: MOV R1, #250
DL1: DJNZ R1, DL1
DJNZ R2, DL2
RET
;************Tiempo de giro 32MS************
ZWSJ:
MOV R2, #50
D1: MOV R1, #100
D2: DJNZ R1, D2
DJNZ R2, D1
RET
; ****Retraso de unos 250 milisegundos (oscilador de cristal de 12M)****
DELAY250: p >
MOV R3, #2
L3: MOV R2, #250
L1: MOV R1, #250
L2: DJNZ R1, L2
DJNZ R2, L1
DJNZ R3, L3
RET
*****Utilice la luz de estado para mostrar el punto final y parada durante 5 segundos Tiempo (se ilumina 5 veces)*****
CDSL5:
MOV R5, #5H
PY: SETB P2 .6
SETB P2.7
RETARDO LLAMADA LC250
RETARDO LLAMADA LC250
CLR P2.6
CLR P2.7
LCALL DELAY250
LCALL DELAY250
DJNZ R5, PY
RET
END p>