-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathLENTIL3.LST
1303 lines (1227 loc) · 58.5 KB
/
LENTIL3.LST
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
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
MPASM 02.30.07 Intermediate LENTIL3.ASM 1-5-2000 16:49:03 PAGE 1
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
00001 ; 150W square waveform inverter
00002 ; filename:lentil.asm
00003 ; author:Fengjiantao
00004 ; Email:[email protected]
00005 ; begin from:1999.10.10
00006
00007 include p16c711.inc
00001 LIST
00002 ; P16C711.INC Standard Header File, Version 1.00 Microchip Technology, Inc.
00151 LIST
00008
00009 ;Constant definitions
00010 ; PWM-module-constant
00000019 00011 PWMADJUSTVAL equ .25
000000A2 00012 VOLTAGER equ .162 ;Voltage request
000000B8 00013 LOWVOLTAGE equ .184
000000A4 00014 OVER150 equ .164
00000089 00015 OVER125 equ .137
00000028 00016 KP equ .40 ;Proportional gain
00000001 00017 KI equ .1 ;Integral gain
00000001 00018 KD equ .1 ;Differential gain
0000001D 00019 PWMMAXVAL equ .29
000000B0 00020 INTCONVAL equ 0b0h ; set GIE, T0IE
0000004F 00021 OPTIONVAL equ 4fh ; portB have pull-up, tmr0 int.
00022
00023
00024 ;Register Equates
00025
0000000C 00026 HITIMES equ 0ch
0000000D 00027 HI equ 0dh
0000000E 00028 LOTIMES equ 0eh
0000000F 00029 LO equ 0fh
00000010 00030 TIMES equ 10h
00000011 00031 STACKW equ 11h ; stack to push/pop the W-register
00000012 00032 STACKS equ 12h ; stack to push/pop the STATUS-reg
00000013 00033 LOWCOUNT equ 13h ; Low Voltage counter
00000014 00034 COUNTER1 equ 14h ; counter2: input frequency
00000015 00035 count150 equ 15h;
00000016 00036 PWMMAX equ 16h ; register to support generating PWM
00000017 00037 count125 equ 17h;
00000018 00038 FLAG equ 18h ;
00000019 00039 ERR equ 19h ;
0000001A 00040 SUMLO equ 1ah ;PROGRESSIVE SUM OF the PID terms
0000001B 00041 ACCUM equ 1bh ;Error accumulator
0000001C 00042 ERR_O equ 1ch ;error history(last error)
0000001D 00043 VOLTAGEA equ 1dh ;Voltage actual
0000001E 00044 mulcnd equ 1eh ;8 bit multiplicand
0000001F 00045 mulplr equ 1fh ;8 bit multiplier
00000020 00046 ACCaLO equ 20h ;for the add routine
00000021 00047 ACCbLO equ 21h ;
00000022 00048 H_byte equ 22h ;High byte of the 16 bit result
00000023 00049 L_byte equ 23h ;Low byte of the 16 bit result
00000024 00050 ACCaHI equ 24h
MPASM 02.30.07 Intermediate LENTIL3.ASM 1-5-2000 16:49:03 PAGE 2
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
00000025 00051 ACCbHI equ 25h
00000026 00052 count equ 26h ;Loop counter
00000027 00053 SUMHI equ 27h ;High byte of the loop sum
00000028 00054 KEYPRESS equ 28h ;KEY counter
00000029 00055 LOOPER equ 29H;
00056
00000000 00057 polarity equ 0
00000001 00058 ER_SGN equ 1 ;Sign bit for the error in flag register
00000002 00059 AC_SGN equ 2 ;Sign bit for the error accumulator
00000003 00060 DE_SGN equ 3 ;Sign bit for DE/DT
00000004 00061 OER_SGN equ 4 ;sign bit for the old error
00000005 00062 INT equ 5
00063
00064
00065 ;port A:
00000004 00066 EN3525 equ 4
0000000F 00067 TRISAVAL equ 0Fh ; RA0-RA3: input;RA4:Output
00000000 00068 ADCON1VAL equ 0 ; A0-A3 analog in
00000089 00069 ADCON0VAL equ 89h ; fosc/32, channel 2
00000081 00070 ADCON0V0 equ 81h
00000099 00071 ADCON0V3 equ 99h
00072
00073 ;port B:
00000001 00074 LEDR equ 1
00000002 00075 LEDG equ 2
00000003 00076 PWMAU equ 3
00000004 00077 PWMAD equ 4
00000005 00078 PWMBU equ 5
00000006 00079 PWMBD equ 6
00000007 00080 KEY equ 7
00000081 00081 TRISBVAL equ h'81'
00082
00083
00084 ;Program entrance
0000 00085 org 0
0000 2A85 00086 goto start
00087
0004 00088 org 0004
0004 188B 00089 btfsc INTCON,INTF
0005 28F4 00090 goto short
0006 0091 00091 movwf STACKW
0007 0E91 00092 swapf STACKW,F
0008 0E03 00093 swapf STATUS,W
0009 0092 00094 movwf STACKS
000A 110B 00095 bcf INTCON,T0IF
000B 0B90 00096 decfsz TIMES,F
000C 280E 00097 goto ret1
000D 2812 00098 goto pulse
000E 00099 ret1
000E 0E12 00100 swapf STACKS,W
000F 0083 00101 movwf STATUS
0010 0E11 00102 swapf STACKW,W
0011 0009 00103 retfie
MPASM 02.30.07 Intermediate LENTIL3.ASM 1-5-2000 16:49:03 PAGE 3
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
0012 00104 pulse
0012 1818 00105 btfsc FLAG,polarity
0013 2883 00106 goto polarityb
0014 1A06 00107 btfsc PORTB,PWMAD
0015 284C 00108 goto Lowpulse
0016 090D 00109 comf HI,w
0017 0796 00110 addwf PWMMAX,f
0018 1C03 00111 btfss STATUS,C
0019 283F 00112 goto HIGHIMPINT
001A 0816 00113 movf PWMMAX,w
001B 0782 00114 addwf PCL,f
001C 1286 00115 bcf PORTB,PWMBU
001D 1606 00116 bsf PORTB,PWMAD
001E 1286 00117 bcf PORTB,PWMBU
001F 1606 00118 bsf PORTB,PWMAD
0020 1286 00119 bcf PORTB,PWMBU
0021 1606 00120 bsf PORTB,PWMAD
0022 1286 00121 bcf PORTB,PWMBU
0023 1606 00122 bsf PORTB,PWMAD
0024 1286 00123 bcf PORTB,PWMBU
0025 1606 00124 bsf PORTB,PWMAD
0026 1286 00125 bcf PORTB,PWMBU
0027 1606 00126 bsf PORTB,PWMAD
0028 1286 00127 bcf PORTB,PWMBU
0029 1606 00128 bsf PORTB,PWMAD
002A 1286 00129 bcf PORTB,PWMBU
002B 1606 00130 bsf PORTB,PWMAD
002C 1286 00131 bcf PORTB,PWMBU
002D 1606 00132 bsf PORTB,PWMAD
002E 1286 00133 bcf PORTB,PWMBU
002F 1606 00134 bsf PORTB,PWMAD
0030 1286 00135 bcf PORTB,PWMBU
0031 1606 00136 bsf PORTB,PWMAD
0032 1286 00137 bcf PORTB,PWMBU
0033 1606 00138 bsf PORTB,PWMAD
0034 1286 00139 bcf PORTB,PWMBU
0035 1606 00140 bsf PORTB,PWMAD
0036 1286 00141 bcf PORTB,PWMBU
0037 1606 00142 bsf PORTB,PWMAD
0038 1286 00143 bcf PORTB,PWMBU
0039 1606 00144 bsf PORTB,PWMAD
003A 301A 00145 movlw PWMADJUSTVAL+1
003B 0081 00146 movwf TMR0
003C 080C 00147 movf HITIMES,w
003D 0090 00148 movwf TIMES
003E 2846 00149 goto ret2
003F 00150 HIGHIMPINT
003F 3E19 00151 addlw PWMADJUSTVAL
0040 0081 00152 movwf TMR0
0041 1606 00153 bsf PORTB,PWMAD
0042 1286 00154 bcf PORTB,PWMBU
0043 080C 00155 movf HITIMES,w
0044 0090 00156 movwf TIMES
MPASM 02.30.07 Intermediate LENTIL3.ASM 1-5-2000 16:49:03 PAGE 4
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
0045 0A90 00157 incf TIMES,f
0046 00158 ret2
00159 ; incf COUNTER,F
0046 301D 00160 movlw PWMMAXVAL
0047 0096 00161 movwf PWMMAX
0048 0E12 00162 swapf STACKS,W
0049 0083 00163 movwf STATUS
004A 0E11 00164 swapf STACKW,W
004B 0009 00165 retfie
004C 00166 Lowpulse
004C 090F 00167 comf LO,w
004D 0796 00168 addwf PWMMAX,f
004E 1C03 00169 btfss STATUS,C
004F 2875 00170 goto LOWIMPINT
0050 0816 00171 movf PWMMAX,w
0051 0782 00172 addwf PCL,f
0052 1686 00173 bsf PORTB,PWMBU
0053 1206 00174 bcf PORTB,PWMAD
0054 1686 00175 bsf PORTB,PWMBU
0055 1206 00176 bcf PORTB,PWMAD
0056 1686 00177 bsf PORTB,PWMBU
0057 1206 00178 bcf PORTB,PWMAD
0058 1686 00179 bsf PORTB,PWMBU
0059 1206 00180 bcf PORTB,PWMAD
005A 1686 00181 bsf PORTB,PWMBU
005B 1206 00182 bcf PORTB,PWMAD
005C 1686 00183 bsf PORTB,PWMBU
005D 1206 00184 bcf PORTB,PWMAD
005E 1686 00185 bsf PORTB,PWMBU
005F 1206 00186 bcf PORTB,PWMAD
0060 1686 00187 bsf PORTB,PWMBU
0061 1206 00188 bcf PORTB,PWMAD
0062 1686 00189 bsf PORTB,PWMBU
0063 1206 00190 bcf PORTB,PWMAD
0064 1686 00191 bsf PORTB,PWMBU
0065 1206 00192 bcf PORTB,PWMAD
0066 1686 00193 bsf PORTB,PWMBU
0067 1206 00194 bcf PORTB,PWMAD
0068 1686 00195 bsf PORTB,PWMBU
0069 1206 00196 bcf PORTB,PWMAD
006A 1686 00197 bsf PORTB,PWMBU
006B 1206 00198 bcf PORTB,PWMAD
006C 1686 00199 bsf PORTB,PWMBU
006D 1206 00200 bcf PORTB,PWMAD
006E 1686 00201 bsf PORTB,PWMBU
006F 1206 00202 bcf PORTB,PWMAD
0070 301C 00203 movlw PWMADJUSTVAL+3
0071 0081 00204 movwf TMR0
0072 080E 00205 movf LOTIMES,w
0073 0090 00206 movwf TIMES
0074 287C 00207 goto ret3
0075 00208 LOWIMPINT
0075 301C 00209 movlw PWMADJUSTVAL+3
MPASM 02.30.07 Intermediate LENTIL3.ASM 1-5-2000 16:49:03 PAGE 5
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
0076 0081 00210 movwf TMR0
0077 1206 00211 bcf PORTB,PWMAD
0078 1686 00212 bsf PORTB,PWMBU
0079 080E 00213 movf LOTIMES,w
007A 0090 00214 movwf TIMES
007B 0A90 00215 incf TIMES,f
007C 00216 ret3
007C 1418 00217 bsf FLAG,polarity
007D 301D 00218 movlw PWMMAXVAL
007E 0096 00219 movwf PWMMAX
007F 0E12 00220 swapf STACKS,W
0080 0083 00221 movwf STATUS
0081 0E11 00222 swapf STACKW,W
0082 0009 00223 retfie
0083 00224 polarityb
0083 1B06 00225 btfsc PORTB,PWMBD
0084 28BB 00226 goto Lowpulse2
0085 090D 00227 comf HI,w
0086 0796 00228 addwf PWMMAX,f
0087 1C03 00229 btfss STATUS,C
0088 28AE 00230 goto HIGHIMPINT2
0089 0816 00231 movf PWMMAX,w
008A 0782 00232 addwf PCL,f
008B 1186 00233 bcf PORTB,PWMAU
008C 1706 00234 bsf PORTB,PWMBD
008D 1186 00235 bcf PORTB,PWMAU
008E 1706 00236 bsf PORTB,PWMBD
008F 1186 00237 bcf PORTB,PWMAU
0090 1706 00238 bsf PORTB,PWMBD
0091 1186 00239 bcf PORTB,PWMAU
0092 1706 00240 bsf PORTB,PWMBD
0093 1186 00241 bcf PORTB,PWMAU
0094 1706 00242 bsf PORTB,PWMBD
0095 1186 00243 bcf PORTB,PWMAU
0096 1706 00244 bsf PORTB,PWMBD
0097 1186 00245 bcf PORTB,PWMAU
0098 1706 00246 bsf PORTB,PWMBD
0099 1186 00247 bcf PORTB,PWMAU
009A 1706 00248 bsf PORTB,PWMBD
009B 1186 00249 bcf PORTB,PWMAU
009C 1706 00250 bsf PORTB,PWMBD
009D 1186 00251 bcf PORTB,PWMAU
009E 1706 00252 bsf PORTB,PWMBD
009F 1186 00253 bcf PORTB,PWMAU
00A0 1706 00254 bsf PORTB,PWMBD
00A1 1186 00255 bcf PORTB,PWMAU
00A2 1706 00256 bsf PORTB,PWMBD
00A3 1186 00257 bcf PORTB,PWMAU
00A4 1706 00258 bsf PORTB,PWMBD
00A5 1186 00259 bcf PORTB,PWMAU
00A6 1706 00260 bsf PORTB,PWMBD
00A7 1186 00261 bcf PORTB,PWMAU
00A8 1706 00262 bsf PORTB,PWMBD
MPASM 02.30.07 Intermediate LENTIL3.ASM 1-5-2000 16:49:03 PAGE 6
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
00A9 301E 00263 movlw PWMADJUSTVAL+5
00AA 0081 00264 movwf TMR0
00AB 080C 00265 movf HITIMES,w
00AC 0090 00266 movwf TIMES
00AD 28B5 00267 goto ret4
00AE 00268 HIGHIMPINT2
00AE 3E1E 00269 addlw PWMADJUSTVAL+5
00AF 0081 00270 movwf TMR0
00B0 1706 00271 bsf PORTB,PWMBD
00B1 1186 00272 bcf PORTB,PWMAU
00B2 080C 00273 movf HITIMES,w
00B3 0090 00274 movwf TIMES
00B4 0A90 00275 incf TIMES,f
00B5 00276 ret4
00B5 301D 00277 movlw PWMMAXVAL
00B6 0096 00278 movwf PWMMAX
00B7 0E12 00279 swapf STACKS,W
00B8 0083 00280 movwf STATUS
00B9 0E11 00281 swapf STACKW,W
00BA 0009 00282 retfie
00BB 00283 Lowpulse2
00BB 090F 00284 comf LO,w
00BC 0796 00285 addwf PWMMAX,f
00BD 1C03 00286 btfss STATUS,C
00BE 28E4 00287 goto LOWIMPINT2
00BF 0816 00288 movf PWMMAX,w
00C0 0782 00289 addwf PCL,f
00C1 1586 00290 bsf PORTB,PWMAU
00C2 1306 00291 bcf PORTB,PWMBD
00C3 1586 00292 bsf PORTB,PWMAU
00C4 1306 00293 bcf PORTB,PWMBD
00C5 1586 00294 bsf PORTB,PWMAU
00C6 1306 00295 bcf PORTB,PWMBD
00C7 1586 00296 bsf PORTB,PWMAU
00C8 1306 00297 bcf PORTB,PWMBD
00C9 1586 00298 bsf PORTB,PWMAU
00CA 1306 00299 bcf PORTB,PWMBD
00CB 1586 00300 bsf PORTB,PWMAU
00CC 1306 00301 bcf PORTB,PWMBD
00CD 1586 00302 bsf PORTB,PWMAU
00CE 1306 00303 bcf PORTB,PWMBD
00CF 1586 00304 bsf PORTB,PWMAU
00D0 1306 00305 bcf PORTB,PWMBD
00D1 1586 00306 bsf PORTB,PWMAU
00D2 1306 00307 bcf PORTB,PWMBD
00D3 1586 00308 bsf PORTB,PWMAU
00D4 1306 00309 bcf PORTB,PWMBD
00D5 1586 00310 bsf PORTB,PWMAU
00D6 1306 00311 bcf PORTB,PWMBD
00D7 1586 00312 bsf PORTB,PWMAU
00D8 1306 00313 bcf PORTB,PWMBD
00D9 1586 00314 bsf PORTB,PWMAU
00DA 1306 00315 bcf PORTB,PWMBD
MPASM 02.30.07 Intermediate LENTIL3.ASM 1-5-2000 16:49:03 PAGE 7
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
00DB 1586 00316 bsf PORTB,PWMAU
00DC 1306 00317 bcf PORTB,PWMBD
00DD 1586 00318 bsf PORTB,PWMAU
00DE 1306 00319 bcf PORTB,PWMBD
00DF 301B 00320 movlw PWMADJUSTVAL+2
00E0 0081 00321 movwf TMR0
00E1 080E 00322 movf LOTIMES,w
00E2 0090 00323 movwf TIMES
00E3 28EB 00324 goto ret5
00E4 00325 LOWIMPINT2
00E4 301B 00326 movlw PWMADJUSTVAL+2
00E5 0081 00327 movwf TMR0
00E6 1306 00328 bcf PORTB,PWMBD
00E7 1586 00329 bsf PORTB,PWMAU
00E8 080E 00330 movf LOTIMES,w
00E9 0090 00331 movwf TIMES
00EA 0A90 00332 incf TIMES,f
00EB 00333 ret5
00EB 1018 00334 bcf FLAG,polarity
00EC 301D 00335 movlw PWMMAXVAL
00ED 0096 00336 movwf PWMMAX
00EE 1698 00337 bsf FLAG,INT
00EF 0A94 00338 incf COUNTER1,f
00F0 0E12 00339 swapf STACKS,W
00F1 0083 00340 movwf STATUS
00F2 0E11 00341 swapf STACKW,W
00F3 0009 00342 retfie
00343
00F4 00344 short
00F4 1206 00345 bcf PORTB,PWMAD
00F5 1306 00346 bcf PORTB,PWMBD
00F6 1586 00347 bsf PORTB,PWMAU
00F7 1686 00348 bsf PORTB,PWMBU
00F8 1486 00349 bsf PORTB,LEDR
00F9 128B 00350 bcf INTCON,T0IE
00FA 3064 00351 movlw .100 ;delay 100 times
00FB 00A9 00352 movwf LOOPER
00FC 1683 00353 bsf STATUS,RP0
00FD 3047 00354 movlw 47h
Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct.
00FE 0081 00355 movwf OPTION_REG
00FF 1283 00356 bcf STATUS,RP0
0100 00357 sdelayloop
0100 0181 00358 clrf TMR0
0101 00359 scheckagain
0101 1D0B 00360 btfss INTCON,T0IF
0102 2901 00361 goto scheckagain
0103 110B 00362 bcf INTCON,T0IF
0104 0BA9 00363 decfsz LOOPER,f
0105 2900 00364 goto sdelayloop
0106 108B 00365 bcf INTCON,INTF
0107 2A85 00366 goto start
00367
MPASM 02.30.07 Intermediate LENTIL3.ASM 1-5-2000 16:49:03 PAGE 8
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
0108 00368 mpy_s ;8 bit multiply
0108 01A2 00369 clrf H_byte
0109 01A3 00370 clrf L_byte
010A 3008 00371 movlw 8
010B 00A6 00372 movwf count
010C 081E 00373 movf mulcnd,w
010D 1003 00374 bcf STATUS,C
010E 00375 loop
010E 0C9F 00376 rrf mulplr,f
010F 1803 00377 btfsc STATUS,C
0110 07A2 00378 addwf H_byte,f
0111 0CA2 00379 rrf H_byte,f
0112 0CA3 00380 rrf L_byte,f
0113 0BA6 00381 decfsz count,f
0114 290E 00382 goto loop
0115 3400 00383 retlw 0
00384
00385
0116 00386 D_sub ;Double precision add and subtract
0116 211E 00387 call neg_A
0117 00388 D_add
0117 0820 00389 movf ACCaLO,w
0118 07A1 00390 addwf ACCbLO,f
0119 1803 00391 btfsc STATUS,C
011A 0AA5 00392 incf ACCbHI,f
011B 0824 00393 movf ACCaHI,w
011C 07A5 00394 addwf ACCbHI,f
011D 3400 00395 retlw 00
00396
011E 00397 neg_A ;negate ACCa
011E 09A0 00398 comf ACCaLO,f
011F 0AA0 00399 incf ACCaLO,f
0120 1903 00400 btfsc STATUS,Z
0121 03A4 00401 decf ACCaHI,f
0122 09A4 00402 comf ACCaHI,f
0123 3400 00403 retlw 00
00404
00405 SHIFT MACRO
00406
00407 BCF STATUS,C
00408 RRF L_byte,f
00409 BCF STATUS,C
00410 RRF H_byte,f
00411 BTFSC STATUS,C
00412 BSF L_byte,7
00413 endM
00414
0124 00415 DIV_LMT ;Divide by 16 and limit to 100 Decimal
00416 SHIFT
M
0124 1003 M BCF STATUS,C
0125 0CA3 M RRF L_byte,f
0126 1003 M BCF STATUS,C
MPASM 02.30.07 Intermediate LENTIL3.ASM 1-5-2000 16:49:03 PAGE 9
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
0127 0CA2 M RRF H_byte,f
0128 1803 M BTFSC STATUS,C
0129 17A3 M BSF L_byte,7
00417 SHIFT
M
012A 1003 M BCF STATUS,C
012B 0CA3 M RRF L_byte,f
012C 1003 M BCF STATUS,C
012D 0CA2 M RRF H_byte,f
012E 1803 M BTFSC STATUS,C
012F 17A3 M BSF L_byte,7
00418 SHIFT
M
0130 1003 M BCF STATUS,C
0131 0CA3 M RRF L_byte,f
0132 1003 M BCF STATUS,C
0133 0CA2 M RRF H_byte,f
0134 1803 M BTFSC STATUS,C
0135 17A3 M BSF L_byte,7
00419 SHIFT
M
0136 1003 M BCF STATUS,C
0137 0CA3 M RRF L_byte,f
0138 1003 M BCF STATUS,C
0139 0CA2 M RRF H_byte,f
013A 1803 M BTFSC STATUS,C
013B 17A3 M BSF L_byte,7
013C 00420 LMT100
013C 3001 00421 MOVLW 1h
013D 0222 00422 SUBWF H_byte,0
013E 1C03 00423 BTFSS STATUS,C
013F 2943 00424 GOTO L8_E
0140 3064 00425 MOVLW 64H
0141 00A3 00426 MOVWF L_byte
0142 2949 00427 GOTO LMT_EXIT
0143 00428 L8_E
0143 3064 00429 MOVLW 64H
0144 0223 00430 SUBWF L_byte,w
0145 1C03 00431 BTFSS STATUS,C
0146 2949 00432 GOTO LMT_EXIT
0147 3064 00433 movlw 64h
0148 00A3 00434 movwf L_byte
0149 00435 LMT_EXIT
0149 3400 00436 retlw 00
00437
014A 00438 PIDTERM
014A 00439 C_ERR ;Calculating the PID terms
014A 081D 00440 movf VOLTAGEA,w
014B 3CA2 00441 sublw VOLTAGER
014C 1803 00442 btfsc STATUS,C
014D 294F 00443 goto PLS_ER
014E 2952 00444 goto MNS_ER
014F 00445 PLS_ER
MPASM 02.30.07 Intermediate LENTIL3.ASM 1-5-2000 16:49:03 PAGE 10
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
014F 0099 00446 MOVWF ERR
0150 1098 00447 bcf FLAG,ER_SGN
0151 2956 00448 goto CE_EXIT
0152 00449 MNS_ER
0152 30A2 00450 movlw VOLTAGER
0153 021D 00451 subwf VOLTAGEA,w
0154 0099 00452 movwf ERR
0155 1498 00453 bsf FLAG,ER_SGN
0156 00454 CE_EXIT
0156 019A 00455 clrf SUMLO
0157 01A7 00456 clrf SUMHI
0158 00457 C_PROP ;Calculate the proportional term
0158 0819 00458 movf ERR,w
0159 009E 00459 movwf mulcnd
015A 3028 00460 MOVLW KP
015B 009F 00461 movwf mulplr
015C 2108 00462 CALL mpy_s
015D 2124 00463 call DIV_LMT
015E 00464 restorre_SGN
015E 1C98 00465 btfss FLAG,ER_SGN
015F 2962 00466 goto ADDPROP
0160 09A3 00467 comf L_byte,f
0161 0AA3 00468 INCF L_byte,f
0162 00469 ADDPROP
0162 0823 00470 movf L_byte,w
0163 079A 00471 addwf SUMLO,f
0164 1803 00472 btfsc STATUS,C
0165 0AA7 00473 incf SUMHI,f
0166 3000 00474 movlw 0
0167 1B9A 00475 Btfsc SUMLO,7
0168 30FF 00476 movlw 0ffH
0169 07A7 00477 addwf SUMHI,f
016A 00478 C_INT ;calculate the integral term
016A 0819 00479 movf ERR,w
016B 1903 00480 btfsc STATUS,Z
016C 2983 00481 goto ADDINT
016D 1898 00482 btfsc FLAG,ER_SGN
016E 2972 00483 goto MNS_1
016F 00484 PLS_1
016F 3001 00485 movlw KI
0170 079B 00486 addwf ACCUM,f
0171 2974 00487 goto LMTACM
0172 00488 MNS_1
0172 3001 00489 movlw KI
0173 029B 00490 subwf ACCUM,f
0174 00491 LMTACM
0174 1B9B 00492 btfsc ACCUM,7
0175 297D 00493 goto M_LMT
0176 00494 P_LMT
0176 309C 00495 MOVLW 9ch
0177 071B 00496 addwf ACCUM,w
0178 1C03 00497 btfss STATUS,C
0179 2983 00498 goto ADDINT
MPASM 02.30.07 Intermediate LENTIL3.ASM 1-5-2000 16:49:03 PAGE 11
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
017A 3064 00499 movlw 64h
017B 009B 00500 movwf ACCUM
017C 2983 00501 goto ADDINT
017D 00502 M_LMT
017D 309C 00503 movlw 9ch
017E 021B 00504 subwf ACCUM,w
017F 1803 00505 btfsc STATUS,C
0180 2983 00506 goto ADDINT
0181 309C 00507 movlw 9ch
0182 009B 00508 movwf ACCUM
0183 00509 ADDINT
0183 081B 00510 movf ACCUM,w
0184 079A 00511 addwf SUMLO,f
0185 1803 00512 btfsc STATUS,C
0186 0AA7 00513 incf SUMHI,f
0187 3000 00514 movlw 0
0188 1B9B 00515 btfsc ACCUM,7
0189 0900 00516 comf W,w
018A 07A7 00517 addwf SUMHI,f
018B 00518 C_DIFF ;Calculate the differential term
018B 0819 00519 movf ERR,w
018C 1C98 00520 btfss FLAG,ER_SGN
018D 2991 00521 goto LO_BYTE
018E 0999 00522 comf ERR,1
018F 0A19 00523 incf ERR,w
0190 0999 00524 comf ERR,f
0191 00525 LO_BYTE
0191 00A1 00526 movwf ACCbLO
0192 3000 00527 movlw 0
0193 1898 00528 btfsc FLAG,ER_SGN
0194 30FF 00529 movlw 0ffH
0195 00A5 00530 movwf ACCbHI
0196 081C 00531 movf ERR_O,w
0197 1E18 00532 btfss FLAG,OER_SGN
0198 299B 00533 goto LO_BYTE0
0199 099C 00534 comf ERR_O,f
019A 0A1C 00535 incf ERR_O,w
019B 00536 LO_BYTE0
019B 00A0 00537 movwf ACCaLO
019C 3000 00538 movlw 0
019D 1A18 00539 btfsc FLAG,OER_SGN
019E 30FF 00540 movlw 0ffH
019F 00A4 00541 movwf ACCaHI
01A0 2116 00542 call D_sub
01A1 00543 STRIP_SGN
01A1 1BA5 00544 btfsc ACCbHI,7
01A2 29A4 00545 goto NEG_ABS
01A3 29A9 00546 goto POS_ABS
01A4 00547 NEG_ABS
01A4 1598 00548 bsf FLAG,DE_SGN
01A5 09A1 00549 comf ACCbLO,f
01A6 0A21 00550 incf ACCbLO,w
01A7 009C 00551 movwf ERR_O
MPASM 02.30.07 Intermediate LENTIL3.ASM 1-5-2000 16:49:03 PAGE 12
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
01A8 29AC 00552 goto MULT_KD
01A9 00553 POS_ABS
01A9 1198 00554 BCF FLAG,DE_SGN
01AA 0821 00555 movf ACCbLO,w
01AB 009C 00556 movwf ERR_O
01AC 00557 MULT_KD
01AC 081C 00558 movf ERR_O,w
01AD 009E 00559 movwf mulcnd
01AE 3001 00560 movlw KD
01AF 009F 00561 movwf mulplr
01B0 2108 00562 call mpy_s
01B1 2124 00563 call DIV_LMT
01B2 00564 RE_SGN
01B2 1D98 00565 btfss FLAG,DE_SGN
01B3 29B6 00566 goto SAVE_DIFF
01B4 09A3 00567 comf L_byte,f
01B5 0AA3 00568 incf L_byte,f
01B6 00569 SAVE_DIFF
01B6 0823 00570 movf L_byte,w
01B7 1903 00571 btfsc STATUS,Z
01B8 29C9 00572 goto ROLL_ER
01B9 009C 00573 movwf ERR_O
01BA 00574 ADDDIF ;Add the diff term into the summ
01BA 3000 00575 movlw 0
01BB 1998 00576 btfsc FLAG,DE_SGN
01BC 30FF 00577 movlw 0ffH
01BD 00A5 00578 movwf ACCbHI
01BE 081C 00579 movf ERR_O,W
01BF 00A1 00580 movwf ACCbLO
01C0 081A 00581 movf SUMLO,w
01C1 00A0 00582 movwf ACCaLO
01C2 0827 00583 movf SUMHI,w
01C3 00A4 00584 movwf ACCaHI
01C4 2117 00585 call D_add
01C5 0821 00586 movf ACCbLO,w
01C6 009A 00587 movwf SUMLO
01C7 0825 00588 movf ACCbHI,w
01C8 00A7 00589 movwf SUMHI
00590
01C9 00591 ROLL_ER
01C9 0819 00592 Movf ERR,W
01CA 009C 00593 movwf ERR_O
01CB 1218 00594 bcf FLAG,OER_SGN
01CC 1898 00595 btfsc FLAG,ER_SGN
01CD 1618 00596 bsf FLAG,OER_SGN
01CE 080C 00597 movf HITIMES,w
01CF 00A4 00598 movwf ACCaHI
01D0 080D 00599 movf HI,w
01D1 00A0 00600 movwf ACCaLO
01D2 0827 00601 movf SUMHI,w
01D3 00A5 00602 movwf ACCbHI
01D4 081A 00603 movf SUMLO,w
01D5 00A1 00604 movwf ACCbLO
MPASM 02.30.07 Intermediate LENTIL3.ASM 1-5-2000 16:49:03 PAGE 13
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
01D6 2117 00605 call D_add
01D7 00606 WaitNoIntt
01D7 0801 00607 movf TMR0,W
01D8 3CC8 00608 sublw 0c8h
01D9 1C03 00609 btfss STATUS,C
01DA 29D7 00610 goto WaitNoIntt
00611
01DB 0825 00612 movf ACCbHI,w
01DC 3C24 00613 sublw 24h
01DD 0825 00614 movf ACCbHI,w
01DE 1C03 00615 btfss STATUS,C
01DF 3024 00616 movlw 24h
01E0 1903 00617 btfsc STATUS,Z
01E1 3001 00618 movlw 1
01E2 008C 00619 movwf HITIMES
01E3 00A4 00620 movwf ACCaHI
01E4 0821 00621 movf ACCbLO,w
01E5 008D 00622 movwf HI
01E6 0821 00623 movf ACCbLO,w
01E7 00A0 00624 movwf ACCaLO
01E8 3027 00625 movlw 27h
01E9 00A5 00626 movwf ACCbHI
01EA 3010 00627 movlw 10h
01EB 00A1 00628 movwf ACCbLO
01EC 2116 00629 call D_sub
01ED 0825 00630 movf ACCbHI,w
01EE 008E 00631 movwf LOTIMES
01EF 0821 00632 movf ACCbLO,w
01F0 008F 00633 movwf LO
01F1 0008 00634 return
00635
01F2 00636 SLP
01F2 1B86 00637 btfsc PORTB,KEY ;Key press?
01F3 2A13 00638 goto RUN ;No
01F4 0AA8 00639 incf KEYPRESS,f ;Yes,counter +1
01F5 1FA8 00640 btfss KEYPRESS,7 ;reach 128?
01F6 2A14 00641 goto RUN1 ;No
01F7 1605 00642 bsf PORTA,EN3525 ;Yes,go to bed
01F8 128B 00643 bcf INTCON,T0IE ;Disable intuppter
01F9 1086 00644 bcf PORTB,LEDR ;Led OFF
01FA 1106 00645 bcf PORTB,LEDG
01FB 1206 00646 bcf PORTB,PWMAD
01FC 1306 00647 bcf PORTB,PWMBD
01FD 1586 00648 bsf PORTB,PWMAU
01FE 1686 00649 bsf PORTB,PWMBU
01FF 00650 waitnopress
01FF 1F86 00651 btfss PORTB,KEY ;wait key up
0200 29FF 00652 goto waitnopress
0201 3064 00653 movlw .100 ;delay 100 times
0202 00A9 00654 movwf LOOPER
0203 00655 delayloop
0203 0181 00656 clrf TMR0
0204 00657 checkagain
MPASM 02.30.07 Intermediate LENTIL3.ASM 1-5-2000 16:49:03 PAGE 14
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
0204 1D0B 00658 btfss INTCON,T0IF
0205 2A04 00659 goto checkagain
0206 110B 00660 bcf INTCON,T0IF
0207 0BA9 00661 decfsz LOOPER,f
0208 2A03 00662 goto delayloop
0209 100B 00663 bcf INTCON,RBIF ;Set RB int
020A 158B 00664 bsf INTCON,RBIE
020B 0063 00665 sleep ;sleep until RB7 press
020C 118B 00666 bcf INTCON,RBIE
020D 100B 00667 bcf INTCON,RBIF
020E 00668 waitnoprs
020E 1F86 00669 btfss PORTB,KEY ;wait key up
020F 2A0E 00670 goto waitnoprs
0210 1205 00671 bcf PORTA,EN3525
0211 168B 00672 bsf INTCON,T0IE
0212 1506 00673 bsf PORTB,LEDG
0213 00674 RUN
0213 01A8 00675 clrf KEYPRESS ;clear key counter
0214 00676 RUN1
00677 ; incf COUNTER2,F
00678 ; bcf COUNTER,07h
0214 0008 00679 return
00680
0215 00681 ADC
0215 3089 00682 movlw ADCON0VAL
0216 0088 00683 movwf ADCON0
0217 00684 WaitNoInt
0217 0801 00685 movf TMR0,W
0218 3CD0 00686 sublw 0d0h
0219 1C03 00687 btfss STATUS,C
021A 2A17 00688 goto WaitNoInt
021B 1508 00689 bsf ADCON0,GO
021C 00690 WaitAdc
021C 1908 00691 btfsc ADCON0,GO
021D 2A1C 00692 goto WaitAdc
021E 0809 00693 movf ADRES,W
021F 009D 00694 movwf VOLTAGEA
0220 0008 00695 return
00696
00697 ;LIGHT
00698 ; btfss COUNTER1,4
00699 ; return
00700 ; movlw 0
00701 ; movwf COUNTER1
00702 ; btfss LEDREG,FLASHR
00703 ; goto NOFLASH1
00704 ; btfss PORTB,LEDR
00705 ; goto LEDRL
00706 ; goto LEDRH
00707 ;NOFLASH1
00708 ; btfsc LEDREG,LEDR
00709 ; goto LEDRH
00710 ;LEDRL
MPASM 02.30.07 Intermediate LENTIL3.ASM 1-5-2000 16:49:03 PAGE 15
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
00711 ; bsf PORTB,LEDR
00712 ; goto LIGHTG
00713 ;LEDRH
00714 ; bcf PORTB,LEDR
00715 ;LIGHTG
00716 ; btfss LEDREG,FLASHG
00717 ; goto NOFLASH2
00718 ; btfss PORTB,LEDG
00719 ; goto LEDGL
00720 ; goto LEDGH
00721 ;NOFLASH2
00722 ; btfsc LEDREG,LEDG
00723 ; goto LEDGH
00724 ;LEDGL
00725 ; bsf PORTB,LEDG
00726 ; return
00727 ;LEDGH
00728 ; bcf PORTB,LEDG
00729 ; return
00730
0221 00731 LOWDET
0221 3081 00732 movlw ADCON0V0
0222 0088 00733 movwf ADCON0
0223 00734 WaitNoIntl
0223 0801 00735 movf TMR0,W
0224 3CD0 00736 sublw 0d0h
0225 1C03 00737 btfss STATUS,C
0226 2A23 00738 goto WaitNoIntl
0227 1508 00739 bsf ADCON0,GO
0228 00740 WaitAdcl
0228 1908 00741 btfsc ADCON0,GO
0229 2A28 00742 goto WaitAdcl
022A 0809 00743 movf ADRES,W
022B 3CB8 00744 sublw LOWVOLTAGE
022C 1C03 00745 btfss STATUS,C
022D 2A3F 00746 goto lret1
022E 0A93 00747 incf LOWCOUNT,f
022F 1F93 00748 btfss LOWCOUNT,7
0230 0008 00749 return
0231 1206 00750 bcf PORTB,PWMAD
0232 1306 00751 bcf PORTB,PWMBD
0233 1586 00752 bsf PORTB,PWMAU
0234 1686 00753 bsf PORTB,PWMBU
0235 1605 00754 bsf PORTA,EN3525
0236 128B 00755 bcf INTCON,T0IE
00756 ; bsf LEDREG,LEDR
00757 ; bcf LEDREG,FLASHR
00758 ; bcf LEDREG,FLASHG
00759 ; bcf LEDREG,LEDG
0237 1106 00760 bcf PORTB,LEDG
0238 1486 00761 bsf PORTB,LEDR
0239 100B 00762 bcf INTCON,RBIF ;Set RB int
023A 158B 00763 bsf INTCON,RBIE
MPASM 02.30.07 Intermediate LENTIL3.ASM 1-5-2000 16:49:03 PAGE 16
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
023B 0063 00764 sleep ;sleep until RB7 press
023C 118B 00765 bcf INTCON,RBIE
023D 100B 00766 bcf INTCON,RBIF
023E 2A85 00767 goto start
023F 00768 lret1
023F 0193 00769 clrf LOWCOUNT
0240 0008 00770 return
00771
0241 00772 OVERCUT
0241 3099 00773 movlw ADCON0V3
0242 0088 00774 movwf ADCON0
0243 00775 WaitNoIntO
0243 0801 00776 movf TMR0,W
0244 3CD0 00777 sublw 0d0h
0245 1C03 00778 btfss STATUS,C
0246 2A43 00779 goto WaitNoIntO
0247 1508 00780 bsf ADCON0,GO
0248 00781 WaitAdcO
0248 1908 00782 btfsc ADCON0,GO
0249 2A48 00783 goto WaitAdcO
024A 0809 00784 movf ADRES,W
024B 3CA4 00785 sublw OVER150
024C 1803 00786 btfsc STATUS,C
024D 2A65 00787 goto O125
024E 0A95 00788 incf count150,f
024F 1F95 00789 btfss count150,7
0250 2A66 00790 goto O1251
0251 1486 00791 bsf PORTB,LEDR
0252 1106 00792 bcf PORTB,LEDG
0253 1206 00793 bcf PORTB,PWMAD
0254 1306 00794 bcf PORTB,PWMBD
0255 1586 00795 bsf PORTB,PWMAU
0256 1686 00796 bsf PORTB,PWMBU
0257 3032 00797 movlw .50 ;delay 100 times
0258 00A9 00798 movwf LOOPER
0259 3047 00799 movlw 47h
025A 1683 00800 bsf STATUS,RP0
Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct.
025B 0081 00801 movwf OPTION_REG
025C 1283 00802 bcf STATUS,RP0
025D 128B 00803 bcf INTCON,T0IE
025E 00804 delayloop1
025E 0181 00805 clrf TMR0
025F 00806 checkagain1
025F 1D0B 00807 btfss INTCON,T0IF
0260 2A5F 00808 goto checkagain1
0261 110B 00809 bcf INTCON,T0IF
0262 0BA9 00810 decfsz LOOPER,f
0263 2A5E 00811 goto delayloop1
0264 2A85 00812 goto start
0265 00813 O125
0265 0195 00814 clrf count150
0266 00815 O1251
MPASM 02.30.07 Intermediate LENTIL3.ASM 1-5-2000 16:49:03 PAGE 17
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
0266 0809 00816 movf ADRES,W
0267 3C89 00817 sublw OVER125
0268 1803 00818 btfsc STATUS,C
0269 2A83 00819 goto ORET
026A 0814 00820 movf COUNTER1,w
026B 1903 00821 btfsc STATUS,Z
026C 0A97 00822 incf count125,f
026D 1E17 00823 BTfss count125,4
026E 0008 00824 return
026F 1486 00825 bsf PORTB,LEDR
0270 1106 00826 bcf PORTB,LEDG
0271 1206 00827 bcf PORTB,PWMAD
0272 1306 00828 bcf PORTB,PWMBD
0273 1586 00829 bsf PORTB,PWMAU
0274 1686 00830 bsf PORTB,PWMBU
0275 3032 00831 movlw .50 ;delay 100 times
0276 00A9 00832 movwf LOOPER
0277 3047 00833 movlw 47h
0278 1683 00834 bsf STATUS,RP0
Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct.
0279 0081 00835 movwf OPTION_REG
027A 1283 00836 bcf STATUS,RP0
027B 128B 00837 bcf INTCON,T0IE
027C 00838 delayloop2
027C 0181 00839 clrf TMR0
027D 00840 checkagain2
027D 1D0B 00841 btfss INTCON,T0IF
027E 2A7D 00842 goto checkagain2
027F 110B 00843 bcf INTCON,T0IF
0280 0BA9 00844 decfsz LOOPER,f
0281 2A7C 00845 goto delayloop2
0282 2A85 00846 goto start
0283 00847 ORET
0283 0197 00848 clrf count125
0284 0008 00849 return
00850
0285 00851 start
0285 1206 00852 bcf PORTB,PWMAD
0286 1306 00853 bcf PORTB,PWMBD
0287 1586 00854 bsf PORTB,PWMAU
0288 1686 00855 bsf PORTB,PWMBU
0289 301D 00856 movlw PWMMAXVAL
028A 0096 00857 movwf PWMMAX
028B 3025 00858 movlw 25h
028C 008E 00859 movwf LOTIMES
028D 3000 00860 movlw 0
028E 008F 00861 movwf LO
028F 3002 00862 movlw 2
0290 008C 00863 movwf HITIMES
0291 3010 00864 movlw 10h