-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathProject.asm
More file actions
169 lines (168 loc) · 3.02 KB
/
Project.asm
File metadata and controls
169 lines (168 loc) · 3.02 KB
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
ORGANIZATION_BLOCK MAIN:OB1
TITLE=AQUARIUM WATER CIRCULATION / LIGHTING CONTROLLER LOGIC
//
// Input controls:
// I0.0 - Main switch
// I0.1 - Lighting switch
// I0.2 - Pump switch
//
// Created by Miroslav Sergiev #25629
// Sofia University, Faculty of Mathematics and Informatics
// 2017
VAR
PWM_ERROR:BYTE;
END_VAR
BEGIN
Network 1 // Initialization
LD SM0.1
CALL SBR6
Network 2 // RTC data getter
// Reads the RTC register every second and parses BCD data to decimal data
LD I0.0
A SM0.5
EU
TODR VB0
AENO
CALL SBR2, VB3
CALL SBR2, VB4
CALL SBR2, VB5
Network 3 // Pulse width calculator
// Calculates PWM duty cycle
LD I0.0
A SM0.5
EU
CALL SBR3, VB5, VW30
Network 4 // PWM LED lights control
// Controls PWM
LD I0.0
= L60.0
LD I0.0
A I0.1
= L63.7
LD L60.0
CALL SBR1, L63.7, VW28, VW30, LB0
Network 5 // Pump control
// Turns on pump for a set period
LD I0.0
A I0.2
AB>= VB5, VB20
AB<= VB5, VB21
= Q0.2
END_ORGANIZATION_BLOCK
SUBROUTINE_BLOCK PWM0_RUN:SBR1
TITLE=This instruction was generated by the PTO/PWM wizard for use with output Q0.0. The output is used for PWM with synchronous updates and a milliseconds timebase.
VAR_INPUT
RUN:BOOL; // Run/Stop
Cycle:WORD; // Cycle time (2-65535 ms)
Pulse:WORD; // Pulse time width (0-65535)
END_VAR
VAR_OUTPUT
Error:BYTE;
END_VAR
BEGIN
Network 1 // This POU is password-protected against editing and viewing.
END_SUBROUTINE_BLOCK
SUBROUTINE_BLOCK BCD_PARSER:SBR2
TITLE=BCD data parser
VAR_IN_OUT
IN_OUT:BYTE; // Raw BCD data byte
END_VAR
VAR
LEFT_DIGIT:BYTE; // Temporary data
RIGHT_DIGIT:BYTE;
LEFT_INT:INT;
RIGHT_INT:INT;
END_VAR
BEGIN
Network 1 // Parser
// BCD to decimal converter pipeline
LD I0.0
MOVB LB0, LB2
AENO
ANDB 15, LB2
AENO
MOVB LB0, LB1
AENO
ANDB 240, LB1
AENO
SRB LB1, 4
AENO
BTI LB1, LW3
AENO
BTI LB2, LW5
AENO
*I 10, LW3
AENO
+I LW5, LW3
AENO
ITB LW3, LB0
END_SUBROUTINE_BLOCK
SUBROUTINE_BLOCK MAP:SBR3
TITLE=SUBROUTINE COMMENTS
VAR_INPUT
IN:BYTE;
END_VAR
VAR_OUTPUT
OUT:WORD;
END_VAR
BEGIN
Network 1 // Network Title
// Determine current pulse widh
LD I0.0
BTI LB0, LW1
AENO
LPS
AB< LB0, VB22
MOVW 0, LW1
LRD
AB>= LB0, VB22
AB< LB0, VB24
NOP 0
LRD
AB>= LB0, VB24
AB< LB0, VB23
MOVW VW28, LW1
LRD
AB>= LB0, VB23
AB< LB0, VB25
-I 45, LW1
AENO
INVW LW1
INCW LW1
+I VW28, LW1
LPP
AB>= LB0, VB25
MOVW 0, LW1
END_SUBROUTINE_BLOCK
SUBROUTINE_BLOCK INIT:SBR6
TITLE=
VAR
TMP_I:WORD; // Temporary values
END_VAR
BEGIN
Network 1
// Set RTC if needed
LD SM0.1
AB= VB8, 1
TODW VB0
Network 2 // Network Title
// Determine lighting intervals
LD SM0.1
AW> VW26, 0
LPS
BTI VB22, LW0
AENO
+I VW26, LW0
AENO
ITB LW0, VB24
LPP
BTI VB23, LW0
AENO
+I VW26, LW0
AENO
ITB LW0, VB25
Network 3
// Calculate PWM duty cycle
LD SM0.1
CALL SBR3, VB5, VW30
END_SUBROUTINE_BLOCK