-
Notifications
You must be signed in to change notification settings - Fork 0
/
sistema_disparo.asm
74 lines (63 loc) · 2.62 KB
/
sistema_disparo.asm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#ifndef _SISTEMA_DISPARO_ASM_
#define _SISTEMA_DISPARO_ASM_
#define RETARDO 2000 // 2 segundos
#define DISPARO_ANGULO_1 120
#define DISPARO_ANGULO_2 60
#define DISPARO_ANGULO_3 0
#define SistDisparo(_var,_pin) malloc(_var, SERVO_SIZE + 3 * SIZE_INT + 1 * SIZE_LONG) .EQU _var##Pin = _pin .EQU _var##_servo = array_dir_16(_var, 3) .EQU OCR3_##_var##_servo = _pin _sistema_disparo_construct _var,_pin // 3 variables de 2 bytes.
#define SistDisparo_update(_var) _sistema_disparo_update _var
#define SistDisparo_press(_var) _sistema_disparo_press _var
#define SistDisparo_reset(_var) _sistema_disparo_reset _var,##_var##Pin
#define disparo_TiempoActual(_var) array_dir_32(_var, 0) // 32 bits
#define disparo_Grados(_var) array_dir_16(_var, 2) // 16 bits
#define disparo_AnguloDisparo(_var) array_dir_16(_var, 3) // 16 bits
#define disparo_contadorDisparo(_var) array_dir_16(_var, 4) // 16 bits
#define disparo_Servo(_var) array_dir_16(_var, 5) // SERVO_SIZE
// params @0 Variable
// params @1 Pin
.MACRO _sistema_disparo_construct
_servo_construct @0_servo,@1
Servo_write(@0_servo, 180, 'i')
assign32(disparo_TiempoActual(@0), 0)
assign16(disparo_AnguloDisparo(@0), 180)
assign16(disparo_contadorDisparo(@0), 0)
.ENDM
.MACRO _sistema_disparo_reset
Servo_write(@0_servo, 180, 'i')
assign32(disparo_TiempoActual(@0), 0)
assign16(disparo_AnguloDisparo(@0), 180)
assign16(disparo_contadorDisparo(@0), 0)
.ENDM
// params @0 Variable
.MACRO _sistema_disparo_update
Servo_update(disparo_Servo(@0))
// Servo_giro_3(disparo_Servo(@0), 4, true)
.ENDM
// params @0 Variable
.MACRO _sistema_disparo_press
cpMillis(disparo_TiempoActual(@0), RETARDO, i)
jlt(EndSistemaDisparoPress)
copy32(disparo_TiempoActual(@0), tiempoEnMilis)
cpi16 disparo_AnguloDisparo(@0),180
ContInstInicialSistDispPress:
brne PC+ContInstFinalSistDispPress-ContInstInicialSistDispPress
assign16(disparo_AnguloDisparo(@0), DISPARO_ANGULO_1)
jmp EndSeleccionAngulo
ContInstFinalSistDispPress:
cpi16 disparo_AnguloDisparo(@0), DISPARO_ANGULO_1
brne PC+ContInstFinalSistDispPress-ContInstInicialSistDispPress
assign16(disparo_AnguloDisparo(@0), DISPARO_ANGULO_2)
jmp EndSeleccionAngulo
cpi16 disparo_AnguloDisparo(@0),DISPARO_ANGULO_2
brne PC+ContInstFinalSistDispPress-ContInstInicialSistDispPress
assign16(disparo_AnguloDisparo(@0), DISPARO_ANGULO_3)
jmp EndSeleccionAngulo
assign16(disparo_AnguloDisparo(@0), 180)
EndSeleccionAngulo:
inc16 disparo_contadorDisparo(@0)
copy16(disparo_Grados(@0), disparo_AnguloDisparo(@0))
assign16ge disparo_Grados(@0),181,0,'i','i'
Servo_write(@0_servo, disparo_Grados(@0), 'v')
EndSistemaDisparoPress:
.ENDM
#endif