-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathFireLight_v2.LST
3164 lines (3164 loc) · 134 KB
/
FireLight_v2.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
1 1: ;*****************************************************
2 2: ;Company :
3 3: ;File Name : FireLight.asm
4 4: ;Author :
5 5: ;Create Data : 2015-12-16
6 6: ;Last Modified : 2015-12-16
7 7: ;Description :
8 8: ;Version : 2.0
9 9: ;*****************************************************
10
11 11: LIST P=69P48
12 12: ROMSIZE=4096
13
14 14: ;*****************************************************
15 15: ;系统寄存器 ($000 ~ $02F, $380 ~ $38C)
16 16: ;*****************************************************
17 17: IE EQU 00H ;中断使能/禁能控制
18 18: IRQ EQU 01H ;中断请求标志
19
20 20: TM0 EQU 02H ;Timer0 模式寄存器
21 21: TM1 EQU 03H ;Timer1 模式寄存器
22
23 23: TL0 EQU 04H ;Timer0 重载值低4位
24 24: TH0 EQU 05H ;Timer0 重载值高4位
25
26 26: TL1 EQU 06H ;Timer1 重载值低4位
27 27: TH1 EQU 07H ;Timer1 重载值高4位
28
29 29: PORTA EQU 08H ;PortA 数据寄存器
30 30: PORTB EQU 09H ;PortB 数据寄存器
31 31: PORTC EQU 0AH ;PortC 数据寄存器
32 32: PORTD EQU 0BH ;PortD 数据寄存器
33 33: PORTE EQU 0CH ;PortE 数据寄存器
34
35 35: ;0DH Reserved
36 36:
37 37: TBR EQU 0EH ;查表寄存器
38 38: INX EQU 0FH ;间接寻址伪索引寄存器
39 39: DPL EQU 10H ;INX数据指针低4位
40 40: DPM EQU 11H ;INX数据指针中4位
41 41: DPH EQU 12H ;INX数据指针高4位
42
43 43: TCTL1 EQU 13H ;Timer1 控制寄存器
44
45 45: ADCCTL EQU 14H ;ADC 使能与参考电压
46 46: ADCCFG EQU 15H ;ADC configuration
47 47: ADCPORT EQU 16H ;ADC PORT CONFIGURATION
48 48: ADCCHN EQU 17H ;ADC channel selection
49
50 50: PACR EQU 18H ;PortA 控制寄存器
51 51: PBCR EQU 19H ;PortB 控制寄存器
52 52: PCCR EQU 1AH ;PortC 控制寄存器
53 53: PDCR EQU 1BH ;PortD 控制寄存器
54 54: PECR EQU 1CH ;PortE 控制寄存器
55
56 56: ;1DH Reserved
57 57:
58 58: WDT EQU 1EH ;Whichdog timer control
59 59:
60
61 61: PWMC0 EQU 20H ;PWM0 控制寄存器
62 62: PWMC1 EQU 21H ;PWM1 控制寄存器
63
64 64: PWMP00 EQU 22H ;PWM0 周期控制寄存器低4位
65 65: PWMP01 EQU 23H ;PWM0 周期控制寄存器高4位
66
67 67: PWMD00 EQU 24H ;PWM0 占空比控制寄存器低2位
68 68: PWMD01 EQU 25H ;PWM0 占空比控制寄存器中4位
69 69: PWMD02 EQU 26H ;PWM0 占空比控制寄存器高4位
70
71 71: PWMP10 EQU 27H ;PWM1 周期控制寄存器低4位
72 72: PWMP11 EQU 28H ;PWM1 周期控制寄存器高4位
73
74 74: PWMD10 EQU 29H ;PWM1 占空比控制寄存器低2位
75 75: PWMD11 EQU 2AH ;PWM1 占空比控制寄存器中4位
76 76: PWMD12 EQU 2BH ;PWM1 占空比控制寄存器高4位
77
78 78: ;2CH Reserved
79 79:
80 80: AD_RET0 EQU 2DH ;ADC 转换结果低2位
81 81: AD_RET1 EQU 2EH ;ADC 转换结果中4位
82 82: AD_RET2 EQU 2FH ;ADC 转换结果高4位
83
84
85 85: PPACR EQU 388H ;PORTA 口上拉电阻控制寄存器
86 86: PPBCR EQU 389H ;PORTB 口上拉电阻控制寄存器
87 87: PPCCR EQU 38AH ;PORTC 口上拉电阻控制寄存器
88 88: PPDCR EQU 38BH ;PORTD 口上拉电阻控制寄存器
89 89: PPECR EQU 38CH ;PORTE 口上拉电阻控制寄存器
90
91
92 92: ;*****************************************************
93 93: ;用户自定义寄存器 ($030 ~ $0EF)
94 94: ;*****************************************************
95 95: ;Bank0
96 96: ;------------------------------------------------------------------
97 97: AC_BAK EQU 30H ;AC 值备份寄存器
98
99 99: SYSTEM_STATE EQU 31H ;bit 0: 0 - 主电状态(主电源正常), 1 - 应急状态(主电源停电)
100
101 101: SELF_STATE EQU 32H ;bit 0: 0 - 主电状态(主电源正常), 1 - 模拟应急状态(模拟主电源停电)
102 102: ;bit 1: 0 - 非月检状态, 1 - 月检状态
103 103: ;bit 2: 0 - 非年检状态, 1 - 年检状态
104 104: ;bit 3: 0 - 自动模式 1 - 手动模式
105 105: ;注释:自动模式是指,bit 0 - bit 2 均为时间流逝或是停电导致系统进入的相应状态
106 106: ;手动模式是指,bit 0 - bit 2 均为通过持续不同时长的按键而导致系统进入的相应状态
107
108 108: ALREADY_ENTER EQU 33H ;bit 0: 0 - 当前并未开始充电, 1 - 当前已经开始充电
109 109: ;bit 1: 0 - 当前并未开始放电(应急),1 - 当前已经开始放电(应急)
110 110: ;bit 2: 0 - 当前并未进入手动月检, 1 - 当前已经进入手动月检状态
111 111: ;bit 3: 0 - 当前并未进入手动年检, 1 - 当前已经进入手动年检状态
112 112:
113 113: ; 用于TIMER 定时
114 114: F_496MS_1S EQU 35H ;bit0 = 1, 496ms 到,供按键检测使用
115 115: ;bit1 = 1, 1s 到,用于计时应急时长
116 116:
117 117: F_TIME EQU 36H ;bit0 = 1, 1秒到;
118 118: ;bit1 = 1, 1月到;
119 119: ;bit2 = 1, 1年到;
120 120: ;bit3 = 1, 1分钟到。
121
122 122: CNT0_8MS EQU 37H ;CNT1_8MS, CNT0_8MS组成的8BIT数据达到125时,即Timer0产生125次中断后,表示1S计时已到
123 123: CNT1_8MS EQU 38H ;所以,初始化CNT1_8MS=07H, CNT0_8MS=0DH
124
125 125: SEC_CNT0 EQU 39H ;SEC_CNT0/1/2 以秒为单位计时
126 126: SEC_CNT1 EQU 3AH ;当数值达到1小时,即3600(E10H)秒时,向HOUR_CNT0/1进位,自身清零。
127 127: SEC_CNT2 EQU 3BH
128
129 129: HOUR_CNT0 EQU 3CH ;HOUR_CNT0/1 以小时为单位计时
130 130: HOUR_CNT1 EQU 3DH ;当数值达到1月时,即744(2EBH)小时时,向MONTH_CNT0/1进位,同时置F_TIME.1,自身清零。
131 131: HOUR_CNT2 EQU 3EH
132
133 133: MONTH_CNT EQU 3FH ;MONTH_CNT0/1 以月为单位计时
134 134: ;当数值达到1年时,即12(0CH)月时,,同时置F_TIME.2,自身清零。
135
136 136: TEMP_SUM_CY EQU 40H ;AD子程序参数临时变量
137 137: FLAG_OCCUPIED EQU 41H ;bit0/1/2/3 = 1时分别表示CHN0、1、6、7的转换结果(CHN0_FINAL_RET1等)正被前台使用,
138 138: ;此时ADC中断不能修改这些数据。
139
140 140: FLAG_TYPE EQU 42H ;bit0 = 1表示已经完成灯具类型选择(PORTB.3/AN7),此位为1后不再需要对AN7进行AD采样
141
142
143 143: CMP_MIN_PWR0 EQU 43H ;上电自检时,灯具电源最小电压值.(1.396V -> 0x23B ->(丢弃最低2位) 0x8E)
144 144: CMP_MIN_PWR1 EQU 44H ;
145
146 146: CMP_TYPE00 EQU 45H ;灯具类型门限0
147 147: CMP_TYPE01 EQU 46H ;
148
149 149: CMP_TYPE10 EQU 47H ;灯具类型门限1
150 150: CMP_TYPE11 EQU 48H ;
151
152 152: CMP_TYPE20 EQU 49H ;灯具类型门限2
153 153: CMP_TYPE21 EQU 4AH ;
154
155 155: LIGHT_TYPE EQU 4BH ;灯具类型
156 156: ;bit0 = 1, 锂电池,常亮型
157 157: ;bit1 = 1, 锂电池,常灭型
158 158: ;bit2 = 1, 镍镉电池,常亮型
159 159: ;bit3 = 1, 镍镉电池,常灭型
160
161 161: CMP_SUPPLY0 EQU 4CH ;检测到电源电压小于此数值时,开始应急放电.(1.115V -> 0x5B)
162 162: CMP_SUPPLY1 EQU 4DH
163
164 164: DURATION_EMER EQU 4EH ;bit0 = 1, 应急时长小于5分钟
165 165: ;bit1 = 1, 应急时长大于5分钟,小于30分钟
166 166: ;bit2 = 1, 应急时长大于30分钟
167 167:
168 168: CNT0_EMERGENCY EQU 4FH ;对应急时长计时,单位s
169 169: CNT1_EMERGENCY EQU 50H
170 170: CNT2_EMERGENCY EQU 51H
171
172 172: CMP_EXIT_EMER0 EQU 52H ;检测到电池电压小于此数值时(0.96V -> 0x62),应该关闭应急放电功能
173 173: CMP_EXIT_EMER1 EQU 53H
174
175 175: CMP_BAT_OPEN0 EQU 54H ;检测到电池电压大于此数值时(1.56V -> 0x9F),视为电池充电回路开路
176 176: CMP_BAT_OPEN1 EQU 55H
177
178 178: CMP_BAT_FULL0 EQU 56H ;检测到电池电压大于此数值时(1.44V -> 0x93),视为电池已充满
179 179: CMP_BAT_FULL1 EQU 57H
180
181 181: CMP_BAT_CHARGE0 EQU 58H ;检测到电池电压小于此数值时(1.35V -> 0x8A),视为电池得开始充电了
182 182: CMP_BAT_CHARGE1 EQU 59H
183
184
185
186 186: BAT_STATE EQU 58H ;bit0 = 0, 表示充电回路未开路;bit0 = 1, 表示充电回路开路
187 187: ;bit1 = 0, 表示电池未充满;bit1 = 1, 表示电池已充满
188 188: ;bit2 = 0, 表示电池还不需要充电;bit2 = 1, 表示电池需要充电
189 189: ;bit3 = 1, 表示电池电压过低,不能再继续应急放电了
190
191
192 192: CMP_LIGHT0 EQU 59H ;供光源检测使用,AD转换结果小于此数值时(0.2V -> 0x14),表示光源产生故障
193 193: CMP_LIGHT1 EQU 5AH
194
195 195: LIGHT_STATE EQU 5BH ;bit0 = 1, 表示光源故障
196
197
198 198: ALARM_STATE EQU 5CH ;bit0 = 1, 表示电池故障(开路或短路)
199 199: ;bit1 = 1, 表示光源故障(开路或短路)
200 200: ;bit2 = 1, 表示自检放电时间不足
201
202
203 203: CNT_LED_YELLOW EQU 5FH ;计数器,供翻转黄灯输出使用,计时单位为168MS
204
205
206 206: FLAG_SIMU_EMER EQU 60H ;bit0 = 1, 表示在"模拟停电"状态下已经打开应急功能
207 207: ;bit1 = 1表示1s已到
208
209 209: CNT0_1MINUTE EQU 61H ;每1秒加1,直至计时满1分钟为止
210 210: CNT1_1MINUTE EQU 62H
211
212
213 213: CNT0_CHARGE EQU 63H ;还应充电多长时间,初始值为20小时,即20 * 60 =1200分钟(0x4B0)
214 214: CNT1_CHARGE EQU 64H
215 215: CNT2_CHARGE EQU 65H
216
217 217: GREEN_FLASH EQU 66H ;用于手动月检或手动年检时的LED闪烁
218 218: ;BIT1 = 1, 按键时长超过了3秒,绿灯开始以1HZ的频率闪烁
219 219: ;BIT2 = 1, 按键时长超过了5秒,绿灯开始以3HZ的频率闪烁
220
221
222 222: CNT_LED_GREEN EQU 67H ;供绿色LED翻转用
223
224 224: ;按键相关寄存器
225 225: DELAY_TIMER2 EQU 71H ;延时子程序使用
226 226: DELAY_TIMER1 EQU 72H ;延时子程序使用
227 227: DELAY_TIMER0 EQU 73H ;延时子程序使用
228 228: CLEAR_AC EQU 74H ;清除累加器A 值用寄存器
229 229: TEMP EQU 75H ;临时寄存器
230
231 231: CNT0_496MS EQU 76H ;用于定时496MS
232 232: CNT1_496MS EQU 77H
233
234 234: BTN_PRE_STA EQU 78H ;bit0储存上一次按键状态,0:按下,1:未按下
235 235: BTN_PRESS_CNT EQU 79H ;按键按下时长,单位为496ms
236
237
238 238: ;led
239 239: CNT0_168MS EQU 7AH ;用于定时168MS,供翻转LED用
240 240: CNT1_168MS EQU 7BH
241
242 242: F_168MS EQU 7CH ;每168ms将bit0 = 1
243
244 244: CMP_RESUME0 EQU 7DH ;检测到电源电压大于此数值时,表示市电供电已恢复,应关闭应急.(1.396V -> 0x8E)
245 245: CMP_RESUME1 EQU 7EH
246
247 247: PRESS_DURATION EQU 7FH ;按键被按下持续时长标志
248 248: ;bit0 = 1; 被按下时长小于3秒
249 249: ;bit1 = 1; 被按下时长大于3秒,小于5秒
250 250: ;bit2 = 1; 被按下时长大于5秒,小于7秒
251 251: ;bit3 = 1; 被按下时长大于7秒
252
253 253: ;Bank1(以下寄存器真实地址应加上80H)
254 254: ;------------------------------------------------------------------
255 255: CHN0_RET0_BAK0 EQU 00H ;ADC CHN0 转换结果低2位备份
256 256: CHN0_RET1_BAK0 EQU 01H ;ADC CHN0 转换结果中4位备份
257 257: CHN0_RET2_BAK0 EQU 02H ;ADC CHN0 转换结果高4位备份
258
259 259: CHN0_RET0_BAK1 EQU 03H ;ADC CHN0 转换结果低2位备份
260 260: CHN0_RET1_BAK1 EQU 04H ;ADC CHN0 转换结果中4位备份
261 261: CHN0_RET2_BAK1 EQU 05H ;ADC CHN0 转换结果高4位备份
262
263 263: CHN0_RET0_BAK2 EQU 06H ;ADC CHN0 转换结果低2位备份
264 264:
265 265: CHN0_RET2_BAK2 EQU 08H ;ADC CHN0 转换结果高4位备份
266
267 267: CHN0_RET0_BAK3 EQU 09H ;ADC CHN0 转换结果低2位备份
268 268: CHN0_RET1_BAK3 EQU 0AH ;ADC CHN0 转换结果中4位备份
269 269: CHN0_RET2_BAK3 EQU 0BH ;ADC CHN0 转换结果高4位备份
270
271 271: CHN0_FINAL_RET0 EQU 0CH ;通道0平均后的结果
272 272: CHN0_FINAL_RET1 EQU 0DH ;
273 273: CHN0_FINAL_RET2 EQU 0EH
274
275 275: DET0_CT EQU 0FH ;ADC 通道0 转换结果个数
276
277 277: ;------------------------------------------------------------------
278 278: CHN1_RET0_BAK0 EQU 10H ;ADC CHN1 转换结果低2位备份
279 279: CHN1_RET1_BAK0 EQU 11H ;ADC CHN1 转换结果中4位备份
280 280: CHN1_RET2_BAK0 EQU 12H ;ADC CHN1 转换结果高4位备份
281
282 282: CHN1_RET0_BAK1 EQU 13H ;ADC CHN1 转换结果低2位备份
283 283: CHN1_RET1_BAK1 EQU 14H ;ADC CHN1 转换结果中4位备份
284 284: CHN1_RET2_BAK1 EQU 15H ;ADC CHN1 转换结果高4位备份
285
286 286: CHN1_RET0_BAK2 EQU 16H ;ADC CHN1 转换结果低2位备份
287 287: CHN1_RET1_BAK2 EQU 17H ;ADC CHN1 转换结果中4位备份
288 288: CHN1_RET2_BAK2 EQU 18H ;ADC CHN1 转换结果高4位备份
289
290 290: CHN1_RET0_BAK3 EQU 19H ;ADC CHN1 转换结果低2位备份
291 291: CHN1_RET1_BAK3 EQU 1AH ;ADC CHN1 转换结果中4位备份
292 292: CHN1_RET2_BAK3 EQU 1BH ;ADC CHN1 转换结果高4位备份
293
294 294: CHN1_FINAL_RET0 EQU 1CH ;通道1平均后的结果
295 295: CHN1_FINAL_RET1 EQU 1DH ;
296 296: CHN1_FINAL_RET2 EQU 1EH ;
297
298 298: DET1_CT EQU 1FH ;ADC 通道1 转换结果个数
299
300 300: ;------------------------------------------------------------------
301 301: CHN6_RET0_BAK0 EQU 20H ;ADC CHN6 转换结果低2位备份
302 302: CHN6_RET1_BAK0 EQU 21H ;ADC CHN6 转换结果中4位备份
303 303: CHN6_RET2_BAK0 EQU 22H ;ADC CHN6 转换结果高4位备份
304
305 305: CHN6_RET0_BAK1 EQU 23H ;ADC CHN6 转换结果低2位备份
306 306: CHN6_RET1_BAK1 EQU 24H ;ADC CHN6 转换结果中4位备份
307 307: CHN6_RET2_BAK1 EQU 25H ;ADC CHN6 转换结果高4位备份
308
309 309: CHN6_RET0_BAK2 EQU 26H ;ADC CHN6 转换结果低2位备份
310 310: CHN6_RET1_BAK2 EQU 27H ;ADC CHN6 转换结果中4位备份
311 311: CHN6_RET2_BAK2 EQU 28H ;ADC CHN6 转换结果高4位备份
312
313 313: CHN6_RET0_BAK3 EQU 29H ;ADC CHN6 转换结果低2位备份
314 314: CHN6_RET1_BAK3 EQU 2AH ;ADC CHN6 转换结果中4位备份
315 315: CHN6_RET2_BAK3 EQU 2BH ;ADC CHN6 转换结果高4位备份
316
317 317: CHN6_FINAL_RET0 EQU 2CH ;通道6平均后的结果
318 318: CHN6_FINAL_RET1 EQU 2DH ;
319 319: CHN6_FINAL_RET2 EQU 2EH
320
321 321: DET6_CT EQU 2FH ;ADC 通道6 转换结果个数
322
323 323: ;------------------------------------------------------------------
324 324: CHN7_RET0_BAK0 EQU 30H ;ADC CHN7 转换结果低2位备份
325 325: CHN7_RET1_BAK0 EQU 31H ;ADC CHN7 转换结果中4位备份
326 326: CHN7_RET2_BAK0 EQU 32H ;ADC CHN7 转换结果高4位备份
327
328 328: CHN7_RET0_BAK1 EQU 33H ;ADC CHN7 转换结果低2位备份
329 329: CHN7_RET1_BAK1 EQU 34H ;ADC CHN7 转换结果中4位备份
330 330: CHN7_RET2_BAK1 EQU 35H ;ADC CHN7 转换结果高4位备份
331
332 332: CHN7_RET0_BAK2 EQU 36H ;ADC CHN7 转换结果低2位备份
333 333: CHN7_RET1_BAK2 EQU 37H ;ADC CHN7 转换结果中4位备份
334 334: CHN7_RET2_BAK2 EQU 38H ;ADC CHN7 转换结果高4位备份
335
336 336: CHN7_RET0_BAK3 EQU 39H ;ADC CHN7 转换结果低2位备份
337 337: CHN7_RET1_BAK3 EQU 3AH ;ADC CHN7 转换结果中4位备份
338 338: CHN7_RET2_BAK3 EQU 3BH ;ADC CHN7 转换结果高4位备份
339
340 340: CHN7_FINAL_RET0 EQU 3CH ;通道7平均后的结果
341 341: CHN7_FINAL_RET1 EQU 3DH ;
342 342: CHN7_FINAL_RET2 EQU 3EH ;
343
344 344: DET7_CT EQU 3FH ;ADC 通道7 转换结果个数
345
346
347 347: ;*****************************************************
348 348: ;程序
349 349: ;*****************************************************
350 350: ORG 0000H
351
352 352: ;中断向量表
353 0x0000 0xe106 353: JMP RESET ;RESET ISP
354 0x0001 0xe03d 354: JMP ADC_ISP ;ADC INTERRUPT ISP
355 0x0002 0xe005 355: JMP TIMER0_ISP ;TIMER0 ISP
356 0x0003 0xd400 356: RTNI ;TIMER1 ISP
357 0x0004 0xd400 357: RTNI ;PORTB/D ISP
358
359
360 360: ;*****************************************************
361 361: ;Timer0 中断服务程序
362 362: ;Timer0已配置为每8ms产生一次中断
363 363: ;
364 364: ;*****************************************************
365 365: TIMER0_ISP:
366 0x0005 0x3c30 366: STA AC_BAK, 00H ;备份AC 值
367 0x0006 0x7581 367: ANDIM IRQ, 1011B ;清TIMER0 中断请求标志
368
369 369: J_168MS:
370 0x0007 0x58fa 370: SBIM CNT0_168MS, 01H
371 0x0008 0x780e 371: LDI TBR, 00H
372 0x0009 0x147b 372: SBCM CNT1_168MS
373 0x000a 0x980e 373: BC J_496MS
374
375 0x000b 0x7a7a 375: LDI CNT0_168MS, 04H ;8ms * 21 = 168ms
376 0x000c 0x78fb 376: LDI CNT1_168MS, 01H
377
378 0x000d 0x68fc 378: ORIM F_168MS, 0001B ;设置 "168ms 到"标志,翻转LED用
379
380 380: J_496MS:
381 0x000e 0x58f6 381: SBIM CNT0_496MS, 01H ;每次Timer0中断产生后,将CNT0_496MS减1
382 0x000f 0x780e 382: LDI TBR, 00H ;将累加器A 清0
383 0x0010 0x1477 383: SBCM CNT1_496MS ;每次CNT0-1产生借位时,将CNT1_496MS减1
384 0x0011 0x9815 384: BC J_1S ;如果未产生借位,则表示496MS还未计满
385
386 0x0012 0x7ef6 386: LDI CNT0_496MS, 0DH ;重置496ms 计数器,496 = 8 * 62
387 0x0013 0x79f7 387: LDI CNT1_496MS, 03H ;重置496ms 计数器
388 388:
389 0x0014 0x68b5 389: ORIM F_496MS_1S, 0001B ;设置 "496ms 到"标志
390 390:
391 391: J_1S:
392 0x0015 0x58b7 392: SBIM CNT0_8MS, 01H ;每次Timer0中断产生后,将CNT0_8MS减1
393 0x0016 0x780e 393: LDI TBR, 00H
394 0x0017 0x1438 394: SBCM CNT1_8MS ;每次CNT0_8MS-1产生借位时,将CNT1_8MS减1
395 0x0018 0x983a 395: BC TIMER0_ISP_END
396 396:
397 0x0019 0x7e37 397: LDI CNT0_8MS, 0CH ;重置1s 计数器 1S = 125 * 8 MS
398 0x001a 0x7bb8 398: LDI CNT1_8MS, 07H ;重置1s 计数器
399 399:
400 0x001b 0x68b6 400: ORIM F_TIME, 0001B ;设置 "1s 到"标志
401 0x001c 0x6935 401: ORIM F_496MS_1S, 0010B ;为应急功能提供 "1s 到"标志
402 0x001d 0x6960 402: ORIM FLAG_SIMU_EMER, 0010B ;为手动自检提供 "1s 到"标志
403
404 404: J_MINUTE:
405 0x001e 0x58e1 405: SBIM CNT0_1MINUTE, 01H
406 0x001f 0x780e 406: LDI TBR, 00H
407 0x0020 0x1462 407: SBCM CNT1_1MINUTE
408 0x0021 0x9825 408: BC J_HOUR ;因为J_HOUR是以秒为单位累加,所以应跳至J_HOUR
409
410 0x0022 0x7de1 410: LDI CNT0_1MINUTE, 0BH ;0x3c * 1s = 60s
411 0x0023 0x79e2 411: LDI CNT1_1MINUTE, 03H
412
413 0x0024 0x6c36 413: ORIM F_TIME, 1000B ;设置 "1分钟 到"标志
414
415 415: J_HOUR:
416 0x0025 0x58b9 416: SBIM SEC_CNT0, 01H ;SEC_CNT0 每秒减1
417 0x0026 0x780e 417: LDI TBR, 00H
418 0x0027 0x143a 418: SBCM SEC_CNT1 ;每次SEC_CNT0-1产生借位时,将SEC_CNT1减1
419 0x0028 0x780e 419: LDI TBR, 00H
420 0x0029 0x143b 420: SBCM SEC_CNT2 ;每次SEC_CNT1-1产生借位时,将SEC_CNT2减1
421 0x002a 0x983a 421: BC TIMER0_ISP_END ;SEC_CNT2减1产生借位时,则表示1小时计时已到
422 422:
423 0x002b 0x7fb9 423: LDI SEC_CNT0, 0FH ;重置SEC_CNT0/1/2 为E10H-1(3600-1)
424 0x002c 0x783a 424: LDI SEC_CNT1, 00H
425 0x002d 0x7f3b 425: LDI SEC_CNT2, 0EH
426 426:
427 427: J_MONTH:
428 0x002e 0x58bc 428: SBIM HOUR_CNT0, 01H ;HOUR_CNT0 每小时减1
429 0x002f 0x780e 429: LDI TBR, 00H
430 0x0030 0x143d 430: SBCM HOUR_CNT1 ;每次 HOUR_CNT0 产生借位时,将 HOUR_CNT1 减1
431 0x0031 0x983a 431: BC TIMER0_ISP_END ;HOUR_CNT1 减1产生借位时,则表示1月计时已到
432 432:
433 0x0032 0x7bbc 433: LDI HOUR_CNT0, 07H ;重置HOUR_CNT0/1/2 为2E8H-1(744-1)
434 0x0033 0x7f3d 434: LDI HOUR_CNT1, 0EH
435 0x0034 0x793e 435: LDI HOUR_CNT2, 02H
436 436:
437 0x0035 0x6936 437: ORIM F_TIME, 0010B ;设置 "1月到" 标志
438 438:
439 439: J_YEAR:
440 0x0036 0x58bf 440: SBIM MONTH_CNT, 01H ;MONTH_CNT 每月减1
441 0x0037 0x983a 441: BC TIMER0_ISP_END ;MONTH_CNT 减1产生借位时,则表示1年计时已到
442 442:
443 0x0038 0x7dbf 443: LDI MONTH_CNT, 0BH ;重置MONTH_CNT 为0CH-1(12-1)
444 444:
445 0x0039 0x6a36 445: ORIM F_TIME, 0100B ;设置 "1年到" 标志
446
447 447: TIMER0_ISP_END:
448 0x003a 0x7e00 448: LDI IE, 1100B ;打开ADC,Timer0 中断
449 0x003b 0x3830 449: LDA AC_BAK, 00H ;恢复AC 值
450 0x003c 0xd400 450: RTNI
451
452
453 453: ;*****************************************************
454 454: ;ADC 中断服务程序
455 455: ;*****************************************************
456 456: ADC_ISP:
457 0x003d 0x3c30 457: STA AC_BAK, 00H ;备份AC 值
458 0x003e 0x7381 458: ANDIM IRQ, 0111B ;清ADC 中断请求标志
459
460 0x003f 0x3817 460: LDA ADCCHN
461 0x0040 0x9048 461: BAZ CHN0_VOL_1 ;此次为通道0 转换结果
462 0x0041 0x5097 462: SBI ADCCHN, 01H
463 0x0042 0x9072 463: BAZ CHN1_VOL_1 ;此次为通道1 转换结果
464 0x0043 0x5317 464: SBI ADCCHN, 06H
465 0x0044 0x909c 465: BAZ CHN6_VOL_1 ;此次为通道6 转换结果
466 0x0045 0x5397 466: SBI ADCCHN, 07H
467 0x0046 0x90c6 467: BAZ CHN7_VOL_1 ;此次为通道7 转换结果
468 0x0047 0xe102 468: JMP ADC_ISP_END ;正常情况下不应执行此语句
469
470 470: ;----------------------------------------------------------------
471
472 472: ;转存通道0 转换结果
473 473: ;----------------------------------------------------------------
474 474: CHN0_VOL_1:
475 0x0048 0x788e 475: LDI TBR, 01H ;次数加一
476 0x0049 0x0c8f 476: ADDM DET0_CT, 01H
477
478 0x004a 0x7a0e 478: LDI TBR, 04H ;DET0_CT - 4 -> A
479 0x004b 0x188f 479: SUB DET0_CT, 01H
480 0x004c 0x9068 480: BAZ CHN0_VOL_14 ;第4个转换结果
481
482 0x004d 0x798e 482: LDI TBR, 03H ;DET0_CT - 3 -> A
483 0x004e 0x188f 483: SUB DET0_CT, 01H
484 0x004f 0x9061 484: BAZ CHN0_VOL_13 ;第3个转换结果
485
486 0x0050 0x790e 486: LDI TBR, 02H ;DET0_CT - 2 -> A
487 0x0051 0x188f 487: SUB DET0_CT, 01H
488 0x0052 0x905a 488: BAZ CHN0_VOL_12 ;第2个转换结果
489
490 490: CHN0_VOL_11:
491 0x0053 0x382d 491: LDA AD_RET0, 00H ;保存第一次A/D 转换结果
492 0x0054 0x3c80 492: STA CHN0_RET0_BAK0, 01H
493 0x0055 0x382e 493: LDA AD_RET1, 00H
494 0x0056 0x3c81 494: STA CHN0_RET1_BAK0, 01H
495 0x0057 0x382f 495: LDA AD_RET2, 00H
496 0x0058 0x3c82 496: STA CHN0_RET2_BAK0, 01H
497 0x0059 0xe0f0 497: JMP NEXT_CHN
498
499 499: CHN0_VOL_12:
500 0x005a 0x382d 500: LDA AD_RET0, 00H ;保存第二次A/D 转换结果
501 0x005b 0x3c83 501: STA CHN0_RET0_BAK1, 01H
502 0x005c 0x382e 502: LDA AD_RET1, 00H
503 0x005d 0x3c84 503: STA CHN0_RET1_BAK1, 01H
504 0x005e 0x382f 504: LDA AD_RET2, 00H
505 0x005f 0x3c85 505: STA CHN0_RET2_BAK1, 01H
506 0x0060 0xe0f0 506: JMP NEXT_CHN
507 507:
508 508: CHN0_VOL_13:
509 0x0061 0x382d 509: LDA AD_RET0, 00H ;保存第三次A/D 转换结果
510 0x0062 0x3c86 510: STA CHN0_RET0_BAK2, 01H
511 0x0063 0x382e 511: LDA AD_RET1, 00H
512 0x0064 0x3c87 512: STA CHN0_RET1_BAK2, 01H
513 0x0065 0x382f 513: LDA AD_RET2, 00H
514 0x0066 0x3c88 514: STA CHN0_RET2_BAK2, 01H
515 0x0067 0xe0f0 515: JMP NEXT_CHN
516 516:
517 517: CHN0_VOL_14:
518 0x0068 0x382d 518: LDA AD_RET0, 00H ;保存第四次A/D 转换结果
519 0x0069 0x3c89 519: STA CHN0_RET0_BAK3, 01H
520 0x006a 0x382e 520: LDA AD_RET1, 00H
521 0x006b 0x3c8a 521: STA CHN0_RET1_BAK3, 01H
522 0x006c 0x382f 522: LDA AD_RET2, 00H
523 0x006d 0x3c8b 523: STA CHN0_RET2_BAK3, 01H
524
525 0x006e 0x780e 525: LDI TBR, 00H ;DET0_CT 清0
526 0x006f 0x3c8f 526: STA DET0_CT, 01H
527 527:
528 0x0070 0xc385 528: CALL CAL_CHN0_ADCDATA
529 529:
530 0x0071 0xe0f0 530: JMP NEXT_CHN
531 531: ;----------------------------------------------------------------
532
533 533: ;转存通道1 转换结果
534 534: ;----------------------------------------------------------------
535 535: CHN1_VOL_1:
536 0x0072 0x788e 536: LDI TBR, 01H ;次数加一
537 0x0073 0x0c9f 537: ADDM DET1_CT, 01H
538
539 0x0074 0x7a0e 539: LDI TBR, 04H ;DET1_CT - 4 -> A
540 0x0075 0x189f 540: SUB DET1_CT, 01H
541 0x0076 0x9092 541: BAZ CHN1_VOL_14 ;第4个转换结果
542
543 0x0077 0x798e 543: LDI TBR, 03H ;DET1_CT - 3 -> A
544 0x0078 0x189f 544: SUB DET1_CT, 01H
545 0x0079 0x908b 545: BAZ CHN1_VOL_13 ;第3个转换结果
546
547 0x007a 0x790e 547: LDI TBR, 02H ;DET1_CT - 2 -> A
548 0x007b 0x189f 548: SUB DET1_CT, 01H
549 0x007c 0x9084 549: BAZ CHN1_VOL_12 ;第2个转换结果
550
551 551: CHN1_VOL_11:
552 0x007d 0x382d 552: LDA AD_RET0, 00H ;保存第一次A/D 转换结果
553 0x007e 0x3c90 553: STA CHN1_RET0_BAK0, 01H
554 0x007f 0x382e 554: LDA AD_RET1, 00H
555 0x0080 0x3c91 555: STA CHN1_RET1_BAK0, 01H
556 0x0081 0x382f 556: LDA AD_RET2, 00H
557 0x0082 0x3c92 557: STA CHN1_RET2_BAK0, 01H
558 0x0083 0xe0f0 558: JMP NEXT_CHN
559
560 560: CHN1_VOL_12:
561 0x0084 0x382d 561: LDA AD_RET0, 00H ;保存第二次A/D 转换结果
562 0x0085 0x3c93 562: STA CHN1_RET0_BAK1, 01H
563 0x0086 0x382e 563: LDA AD_RET1, 00H
564 0x0087 0x3c94 564: STA CHN1_RET1_BAK1, 01H
565 0x0088 0x382f 565: LDA AD_RET2,
566 0x0089 0x3c95 566: STA CHN1_RET2_BAK1, 01H
567 0x008a 0xe0f0 567: JMP NEXT_CHN
568
569 569: CHN1_VOL_13:
570 0x008b 0x382d 570: LDA AD_RET0, 00H ;保存第三次A/D 转换结果
571 0x008c 0x3c96 571: STA CHN1_RET0_BAK2, 01H
572 0x008d 0x382e 572: LDA AD_RET1, 00H
573 0x008e 0x3c97 573: STA CHN1_RET1_BAK2, 01H
574 0x008f 0x382f 574: LDA AD_RET2, 00H
575 0x0090 0x3c98 575: STA CHN1_RET2_BAK2, 01H
576 0x0091 0xe0f0 576: JMP NEXT_CHN
577
578 578: CHN1_VOL_14:
579 0x0092 0x382d 579: LDA AD_RET0, 00H ;保存第四次A/D 转换结果
580 0x0093 0x3c99 580: STA CHN1_RET0_BAK3, 01H
581 0x0094 0x382e 581: LDA AD_RET1, 00H
582 0x0095 0x3c9a 582: STA CHN1_RET1_BAK3, 01H
583 0x0096 0x382f 583: LDA AD_RET2, 00H
584 0x0097 0x3c9b 584: STA CHN1_RET2_BAK3, 01H
585
586 0x0098 0x780e 586: LDI TBR, 00H ;DET1_CT 清0
587 0x0099 0x3c9f 587: STA DET1_CT, 01H
588 588:
589 0x009a 0xc419 589: CALL CAL_CHN1_ADCDATA
590 590:
591 0x009b 0xe0f0 591: JMP NEXT_CHN
592 592: ;----------------------------------------------------------------
593
594 594: ;转存通道6 转换结果
595 595: ;----------------------------------------------------------------
596 596: CHN6_VOL_1:
597 0x009c 0x788e 597: LDI TBR, 01H ;次数加一
598 0x009d 0x0caf 598: ADDM DET6_CT, 01H
599
600 0x009e 0x7a0e 600: LDI TBR, 04H ;DET6_CT - 4 -> A
601 0x009f 0x18af 601: SUB DET6_CT, 01H
602 0x00a0 0x90bc 602: BAZ CHN6_VOL_14 ;第4个转换结果
603
604 0x00a1 0x798e 604: LDI TBR, 03H ;DET6_CT - 3 -> A
605 0x00a2 0x18af 605: SUB DET6_CT, 01H
606 0x00a3 0x90b5 606: BAZ CHN6_VOL_13 ;第3个转换结果
607
608 0x00a4 0x790e 608: LDI TBR, 02H ;DET6_CT - 2 -> A
609 0x00a5 0x18af 609: SUB DET6_CT, 01H
610 0x00a6 0x90ae 610: BAZ CHN6_VOL_12 ;第2个转换结果
611
612 612: CHN6_VOL_11:
613 0x00a7 0x382d 613: LDA AD_RET0, 00H ;保存第一次A/D 转换结果
614 0x00a8 0x3ca0 614: STA CHN6_RET0_BAK0, 01H
615 0x00a9 0x382e 615: LDA AD_RET1, 00H
616 0x00aa 0x3ca1 616: STA CHN6_RET1_BAK0, 01H
617 0x00ab 0x382f 617: LDA AD_RET2, 00H
618 0x00ac 0x3ca2 618: STA CHN6_RET2_BAK0, 01H
619 0x00ad 0xe0f0 619: JMP NEXT_CHN
620
621 621: CHN6_VOL_12:
622 0x00ae 0x382d 622: LDA AD_RET0, 00H ;保存第二次A/D 转换结果
623 0x00af 0x3ca3 623: STA CHN6_RET0_BAK1, 01H
624 0x00b0 0x382e 624: LDA AD_RET1, 00H
625 0x00b1 0x3ca4 625: STA CHN6_RET1_BAK1, 01H
626 0x00b2 0x382f 626: LDA AD_RET2, 00H
627 0x00b3 0x3ca5 627: STA CHN6_RET2_BAK1, 01H
628 0x00b4 0xe0f0 628: JMP NEXT_CHN
629 629:
630 630: CHN6_VOL_13:
631 0x00b5 0x382d 631: LDA AD_RET0, 00H ;保存第三次A/D 转换结果
632 0x00b6 0x3ca6 632: STA CHN6_RET0_BAK2, 01H
633 0x00b7 0x382e 633: LDA AD_RET1, 00H
634 0x00b8 0x3ca7 634: STA CHN6_RET1_BAK2, 01H
635 0x00b9 0x382f 635: LDA AD_RET2, 00H
636 0x00ba 0x3ca8 636: STA CHN6_RET2_BAK2, 01H
637 0x00bb 0xe0f0 637: JMP NEXT_CHN
638 638:
639 639: CHN6_VOL_14:
640 0x00bc 0x382d 640: LDA AD_RET0, 00H ;保存第四次A/D 转换结果
641 0x00bd 0x3ca9 641: STA CHN6_RET0_BAK3, 01H
642 0x00be 0x382e 642: LDA AD_RET1, 00H
643 0x00bf 0x3caa 643: STA CHN6_RET1_BAK3, 01H
644 0x00c0 0x382f 644: LDA AD_RET2, 00H
645 0x00c1 0x3cab 645: STA CHN6_RET2_BAK3, 01H
646
647 0x00c2 0x780e 647: LDI TBR, 00H ;DET6_CT 清0
648 0x00c3 0x3caf 648: STA DET6_CT, 01H
649 649:
650 0x00c4 0xc4ad 650: CALL CAL_CHN6_ADCDATA
651 651:
652 0x00c5 0xe0f0 652: JMP NEXT_CHN
653 653: ;----------------------------------------------------------------
654
655 655: ;转存通道7 转换结果
656 656: ;----------------------------------------------------------------
657 657: CHN7_VOL_1:
658 0x00c6 0x788e 658: LDI TBR, 01H ;次数加一
659 0x00c7 0x0cbf 659: ADDM DET7_CT, 01H
660
661 0x00c8 0x7a0e 661: LDI TBR, 04H ;DET7_CT - 4 -> A
662 0x00c9 0x18bf 662: SUB DET7_CT, 01H
663 0x00ca 0x90e6 663: BAZ CHN7_VOL_14 ;第4个转换结果
664
665 0x00cb 0x798e 665: LDI TBR, 03H ;DET7_CT - 3 -> A
666 0x00cc 0x18bf 666: SUB DET7_CT, 01H
667 0x00cd 0x90df 667: BAZ CHN7_VOL_13 ;第3个转换结果
668
669 0x00ce 0x790e 669: LDI TBR, 02H ;DET7_CT - 2 -> A
670 0x00cf 0x18bf 670: SUB DET7_CT, 01H
671 0x00d0 0x90d8 671: BAZ CHN7_VOL_12 ;第2个转换结果
672
673 673: CHN7_VOL_11:
674 0x00d1 0x382d 674: LDA AD_RET0, 00H ;保存第一次A/D 转换结果
675 0x00d2 0x3cb0 675: STA CHN7_RET0_BAK0, 01H
676 0x00d3 0x382e 676: LDA AD_RET1, 00H
677 0x00d4 0x3cb1 677: STA CHN7_RET1_BAK0, 01H
678 0x00d5 0x382f 678: LDA AD_RET2, 00H
679 0x00d6 0x3cb2 679: STA CHN7_RET2_BAK0, 01H
680 0x00d7 0xe0f0 680: JMP NEXT_CHN
681
682 682: CHN7_VOL_12:
683 0x00d8 0x382d 683: LDA AD_RET0, 00H ;保存第二次A/D 转换结果
684 0x00d9 0x3cb3 684: STA CHN7_RET0_BAK1, 01H
685 0x00da 0x382e 685: LDA AD_RET1, 00H
686 0x00db 0x3cb4 686: STA CHN7_RET1_BAK1, 01H
687 0x00dc 0x382f 687: LDA AD_RET2, 00H
688 0x00dd 0x3cb5 688: STA CHN7_RET2_BAK1, 01H
689 0x00de 0xe0f0 689: JMP NEXT_CHN
690 690:
691 691: CHN7_VOL_13:
692 0x00df 0x382d 692: LDA AD_RET0, 00H ;保存第三次A/D 转换结果
693 0x00e0 0x3cb6 693: STA CHN7_RET0_BAK2, 01H
694 0x00e1 0x382e 694: LDA AD_RET1, 00H
695 0x00e2 0x3cb7 695: STA CHN7_RET1_BAK2, 01H
696 0x00e3 0x382f 696: LDA AD_RET2, 00H
697 0x00e4 0x3cb8 697: STA CHN7_RET2_BAK2, 01H
698 0x00e5 0xe0f0 698: JMP NEXT_CHN
699 699:
700 700: CHN7_VOL_14:
701 0x00e6 0x382d 701: LDA AD_RET0, 00H ;保存第四次A/D 转换结果
702 0x00e7 0x3cb9 702: STA CHN7_RET0_BAK3, 01H
703 0x00e8 0x382e 703: LDA AD_RET1, 00H
704 0x00e9 0x3cba 704: STA CHN7_RET1_BAK3, 01H
705 0x00ea 0x382f 705: LDA AD_RET2, 00H
706 0x00eb 0x3cbb 706: STA CHN7_RET2_BAK3, 01H
707
708 0x00ec 0x780e 708: LDI TBR, 00H ;DET7_CT 清0
709 0x00ed 0x3cbf 709: STA DET7_CT, 01H
710 710:
711 0x00ee 0xc541 711: CALL CAL_CHN7_ADCDATA
712 712:
713 0x00ef 0xe0f0 713: JMP NEXT_CHN
714 714: ;----------------------------------------------------------------
715 715:
716 716: ;----------------------------------------------------------------
717 717: NEXT_CHN:
718 0x00f0 0x3817 718: LDA ADCCHN
719 0x00f1 0x90fb 719: BAZ NEXT_CHN1
720 0x00f2 0x5097 720: SBI ADCCHN, 01H
721 0x00f3 0x90fd 721: BAZ NEXT_CHN6
722 0x00f4 0x5317 722: SBI ADCCHN, 06H
723 0x00f5 0x90ff 723: BAZ NEXT_CHN7
724 0x00f6 0x5397 724: SBI ADCCHN, 07H
725 0x00f7 0x90f9 725: BAZ NEXT_CHN0
726 726:
727 0x00f8 0xe102 727: JMP ADC_ISP_END ;不可能执行这一句
728
729 729: NEXT_CHN0:
730 0x00f9 0x7817 730: LDI ADCCHN, 00H ;设定为CHN0
731 0x00fa 0xe102 731: JMP ADC_ISP_END
732
733 733: NEXT_CHN1:
734 0x00fb 0x7897 734: LDI ADCCHN, 01H ;设定为CHN1
735 0x00fc 0xe102 735: JMP ADC_ISP_END
736 736:
737 737: NEXT_CHN6:
738 0x00fd 0x7b17 738: LDI ADCCHN, 06H ;设定为CHN6
739 0x00fe 0xe102 739: JMP ADC_ISP_END
740
741 741: NEXT_CHN7:
742 0x00ff 0x3842 742: LDA FLAG_TYPE
743 0x0100 0xa0f9 743: BA0 NEXT_CHN0 ;若FLAG_TYPE的bit0=1,则表示已完成灯具类型选择,此时不再需要对AN7进行采样。
744 744:
745 0x0101 0x7b97 745: LDI ADCCHN, 07H ;设定为CHN7
746 746: ;----------------------------------------------------------------
747
748
749 749: ADC_ISP_END:
750 0x0102 0x6c15 750: ORIM ADCCFG, 1000B ;启动A/D 转换
751
752 0x0103 0x7e00 752: LDI IE, 1100B ;打开ADC,Timer0 中断
753 0x0104 0x3830 753: LDA AC_BAK, 00H ;取出AC 值
754 0x0105 0xd400 754: RTNI
755
756
757 757: ;*****************************************************
758 758: ; 主程序
759 759: ;*****************************************************
760 760: RESET:
761 0x0106 0xffff 761: NOP
762 0x0107 0x7800 762: LDI IE, 0000B ;关闭所有中断
763 0x0108 0xffff 763: NOP
764
765 0x0109 0xc115 765: CALL RESET_USER_DATA ;清除用户寄存器
766 0x010a 0xc124 766: CALL REGISTER_INITIAL ;初始化系统寄存器与用户数据寄存器
767
768 0x010b 0xc170 768: CALL PRE_START_PWR_CHK ;检查主电源是否正常,如异常则一直等待,直至恢复
769 0x010c 0xc17c 769: CALL PRE_START_TYPE_CHK ;判断灯具的电池类型与光源类型
770 770:
771 0x010d 0xc196 771: CALL CHARGE_BAT_ENABLE ;上电后,即开始对电池进行充电
772
773 773: MAIN_LOOP:
774 774: ;CALL CHARGE_BAT_CTRL ;[充电控制] 根据主电源状态、待充电时长、电池是否充满标志位等进行电池充电控制
775 775: ;CALL EMERGENCY_CTRL ;[放电控制] 主电源停电后的应急放电控制,退出应急状态时,计算此次应急放电时长
776 776:
777 0x010e 0xc2a9 777: CALL KEY_PROCESS ;[按键扫描] 按键扫描
778 0x010f 0xc2e3 778: CALL SELF_CHK_STATE ;[自检状态] 根据系统运行时长与按键时长,置"停电","月检","年检"标志位
779 0x0110 0xc30f 779: CALL SELF_CHK_PROCESS ;[系统自检] 根据自检标志位,进行自检
780
781 0x0111 0xc243 781: CALL BAT_STATE_CHK ;[电池状态] 检测电池状态,并置相应标志位
782 0x0112 0xc26a 782: CALL LIGHT_STATE_CHK ;[光源状态] 光源状态检测,并置相应标志位
783 0x0113 0xc274 783: CALL TIPS_PROCESS ;[声光提示] 处理LED与蜂鸣器
784
785 0x0114 0xe10e 785: JMP MAIN_LOOP
786
787 787:
788 788: ;*****************************************************
789 789: ;清用户寄存器($030 ~ $0EF)
790 790: ;*****************************************************
791 791: RESET_USER_DATA:
792
793 793: POWER_RESET:
794 0x0115 0x7810 794: LDI DPL, 00H
795 0x0116 0x7991 795: LDI DPM, 03H
796 0x0117 0x7812 796: LDI DPH, 00H ;从$30 开始
797
798 798: POWER_RESET_1:
799 0x0118 0x780f 799: LDI INX, 00H ;向DPH,DPM,DPL组成的地址处写0
800 0x0119 0x4890 800: ADIM DPL, 01H
801 0x011a 0x780e 801: LDI TBR, 00H ;将累加器A 清0
802 0x011b 0x0411 802: ADCM DPM, 00H
803 0x011c 0xb91e 803: BA3 POWER_RESET_2
804 0x011d 0xe11f 804: JMP POWER_RESET_3
805
806 806: POWER_RESET_2:
807 0x011e 0x4892 807: ADIM DPH, 01H
808
809 809: POWER_RESET_3:
810 0x011f 0x5092 810: SBI DPH, 01H ;到$EF 结束,即在地址001 111 000B时停止
811 0x0120 0x8118 811: BNZ POWER_RESET_1
812 0x0121 0x5391 812: SBI DPM, 07H
813 0x0122 0x8118 813: BNZ POWER_RESET_1
814
815 815: RESET_USER_DATA_END:
816 0x0123 0xd400 816: RTNI
817
818
819 819: ;*****************************************************
820 820: ;初始化系统寄存器
821 821: ;*****************************************************
822 822: REGISTER_INITIAL:
823
824 824: ;TIMER0 初始化
825 825: ;
826 826: ; fosc=4M, fsys=4M/4=1M
827 827: ;
828 828: ; fsys=1M 31250Hz 125Hz
829 829: ; ------------- -------------
830 830: ; -------->| Prescaler |----------->| Counter |----------->
831 831: ; ------------- -------------
832 832: ; (32) (250)
833 833:
834 0x0124 0x7982 834: LDI TM0, 03H ;设置TIMER0 预分频为/32
835 0x0125 0x7b04 835: LDI TL0, 06H
836 0x0126 0x7805 836: LDI TH0, 00H ;设置中断时间为8ms
837
838 0x0127 0x7a7a 838: LDI CNT0_168MS, 04H ;定时168ms
839 0x0128 0x78fb 839: LDI CNT1_168MS, 01H ;
840
841 0x0129 0x7eb7 841: LDI CNT0_8MS, 0DH ;定时1s
842 0x012a 0x7bb8 842: LDI CNT1_8MS, 07H ;定时1s
843 843:
844 0x012b 0x7fb9 844: LDI SEC_CNT0, 0FH ;SEC_CNT0/1/2 初始化为E10H - 1,即3600 -1
845 0x012c 0x783a 845: LDI SEC_CNT1, 00H
846 0x012d 0x7f3b 846: LDI SEC_CNT2, 0EH
847
848 0x012e 0x7bbc 848: LDI HOUR_CNT0, 07H ;HOUR_CNT0/1/2 初始化为2E8H - 1,即744 - 1
849 0x012f 0x7f3d 849: LDI HOUR_CNT1, 0EH
850 0x0130 0x793e 850: LDI HOUR_CNT2, 02H
851
852 0x0131 0x7dbf 852: LDI MONTH_CNT, 0BH ;MONTH_CNT 初始化为12 -1 个月
853 853:
854
855 855: ;I/O 口初始化
856 0x0132 0x7808 856: LDI PORTA, 00H
857 0x0133 0x7818 857: LDI PACR, 00H ;设置PortA 作为输入口
858 858:
859 0x0134 0x7809 859: LDI PORTB, 00H
860 0x0135 0x7819 860: LDI PBCR, 00H ;设置PortB 作为输入口
861
862 0x0136 0x780a 862: LDI PORTC, 00H
863 0x0137 0x7f9a 863: LDI PCCR, 0FH ;设置PortC.0/PortC.1/PortC.2/PortC.3 作为输出
864 864:
865 0x0138 0x7f1b 865: LDI PDCR, 1110B ;设置PD.0为输入,PD.3为输出
866 0x0139 0x788e 866: LDI TBR, 0001B ;打开PD.0 内部上拉电阻
867 0x013a 0x3f8b 867: STA PPDCR
868
869 0x013b 0x780c 869: LDI PORTE, 00H
870 0x013c 0x7f9c 870: LDI PECR, 0FH ;设置PortE 作为输出口
871
872 872: ;ADC初始化
873 873: ;tosc = 1/4M = 0.25us, tAD = 8tosc = 2us, 一次A/D 转换时间 = 204tAD = 408 us.
874 0x013d 0x7818 874: LDI PACR, 0000B ;设置PortA0/1 作为输入口
875 0x013e 0x7819 875: LDI PBCR, 0000B ;设置PortB2/3 作为输入口
876 0x013f 0x7894 876: LDI ADCCTL, 0001B ;选择内部参考电压VDD,使能ADC
877 0x0140 0x7a15 877: LDI ADCCFG, 0100B ;A/D 时钟tAD=8tOSC, A/D 转换时间= 204tAD
878 0x0141 0x7e16 878: LDI ADCPORT, 1100B ;使用AN0 ~ AN7
879 0x0142 0x7817 879: LDI ADCCHN, 00H ;选择AN0
880 0x0143 0x6c15 880: ORIM ADCCFG, 1000B ;启动A/D 转换
881
882 882: ;PWM初始化
883 0x0144 0x7820 883: LDI PWMC0, 0000B ;PWM0 Clock = tosc = 4M
884 0x0145 0x7ea2 884: LDI PWMP00, 0DH ;周期为125个PWM0 Clock
885 0x0146 0x7ba3 885: LDI PWMP01, 07H
886 0x0147 0x7824 886: LDI PWMD00, 00H ;无微调
887 0x0148 0x7f25 887: LDI PWMD01, 0EH ;占空比为50%
888 0x0149 0x79a6 888: LDI PWMD02, 03H
889
890 0x014a 0x7821 890: LDI PWMC1, 0000B ;PWM0 Clock = tosc = 4M
891 0x014b 0x7ea7 891: LDI PWMP10, 0DH ;周期为125个PWM0 Clock
892 0x014c 0x7ba8 892: LDI PWMP11, 07H
893 0x014d 0x7829 893: LDI PWMD10, 00H ;无微调
894 0x014e 0x7f2a 894: LDI PWMD11, 0EH ;占空比为50%
895 0x014f 0x79ab 895: LDI PWMD12, 03H
896
897
898 898: ;按键相关
899 0x0150 0x7ef6 899: LDI CNT0_496MS, 0DH ;初始化496ms 计数器,496 = 8 * 62
900 0x0151 0x79f6 900: LDI CNT0_496MS, 03H ;初始化496ms 计数器
901 0x0152 0x78f8 901: LDI BTN_PRE_STA, 01H ;初始化上一次没有按键
902
903 903: ;状态相关
904 0x0153 0x7831 904: LDI SYSTEM_STATE, 00H ;初始化为"主电"
905
906 906: ;门限值
907 0x0154 0x7bc3 907: LDI CMP_MIN_PWR0, 07H ;最小上电电压(1.396V -> 0x8E)
908 0x0155 0x7a44 908: LDI CMP_MIN_PWR1, 04H
909
910 0x0156 0x7ecc 910: LDI CMP_SUPPLY0, 0DH ;小于此电压,则开启应急功能(1.115V -> 0x5B)
911 0x0157 0x794d 911: LDI CMP_SUPPLY1, 02H
912
913 0x0158 0x7bfd 913: LDI CMP_RESUME0, 07H ;大于此电压,则由应急转入主电(1.396V -> 0x8E)
914 0x0159 0x7a7e 914: LDI CMP_RESUME1, 04H
915
916 0x015a 0x78d2 916: 入应急状态,则跳转
917 0x015b 0x79d3 917: LDI CMP_EXIT_EMER1, 03H
918
919 0x015c 0x7fd4 919: LDI CMP_BAT_OPEN0, 0FH ;电池电压大于此电压时,视为电池充电回路开路(1.56V -> 0x9F)
920 0x015d 0x7a55 920: LDI CMP_BAT_OPEN1, 04H
921
922 0x015e 0x7cd6 922: LDI CMP_BAT_FULL0, 09H ;检测到电池电压大于此数值时(1.44V -> 0x93),视为电池已充满
923 0x015f 0x7a57 923: LDI CMP_BAT_FULL1, 04H
924
925 0x0160 0x7ad8 925: LDI CMP_BAT_CHARGE0,05H ;检测到电池电压小于此数值时(1.35V -> 0x8A),视为电池得开始充电了
926 0x0161 0x7a59 926: LDI CMP_BAT_CHARGE1,04H
927
928 0x0162 0x7d59 928: LDI CMP_LIGHT0, 0AH ;供光源检测使用,AD转换结果小于此数值时(0.2V -> 0x14),表示光源产生故障
929 0x0163 0x785a 929: LDI CMP_LIGHT1, 00H
930 930:
931 0x0164 0x7845 931: LDI CMP_TYPE00, 00H ;灯具类型门限0
932 0x0165 0x7846 932: LDI CMP_TYPE01, 00H
933
934 0x0166 0x7847 934: LDI CMP_TYPE10, 00H ;灯具类型门限1
935 0x0167 0x7848 935: LDI CMP_TYPE11, 00H
936
937 0x0168 0x7849 937: LDI CMP_TYPE20, 00H ;灯具类型门限2
938 0x0169 0x784a 938: LDI CMP_TYPE21, 00H
939
940 0x016a 0x7fe3 940: LDI CNT0_CHARGE, 0FH ;还应充电多长时间,初始值为20小时,即20 * 60 =1200分钟(0x4B0)
941 0x016b 0x7d64 941: LDI CNT1_CHARGE, 0AH
942 0x016c 0x7a65 942: LDI CNT2_CHARGE, 04H
943 943:
944
945 0x016d 0x7801 945: LDI IRQ, 00H
946 0x016e 0x7e00 946: LDI IE, 1100B ;打开ADC,Timer0 中断
947
948
949 949: REGISTER_INITIAL_END:
950 0x016f 0xd400 950: RTNI
951
952
953
954 954: ;*****************************************************
955 955: ;检查供电是否正常
956 956: ;*****************************************************
957 957: PRE_START_PWR_CHK:
958
959 959: WAIT_AD_RESULT:
960 960: ;一个通道采样4个数据,去掉最小与最大值,将余下的2个数据平均后得到最终结果。
961 961: ;上述过程耗时约408us * 4 = 2ms
962 962: ;根据以上推断,四个通道各得出一个最终结果需耗时 2ms * 4 = 8ms
963
964 964: ;保险起见,此处延时20ms
965 0x0170 0xc37b 965: CALL DELAY_5MS
966 0x0171 0xc37b 966: CALL DELAY_5MS
967 0x0172 0xc37b 967: CALL DELAY_5MS
968 0x0173 0xc37b 968: CALL DELAY_5MS
969
970 970: WAIT_PWR_NML:
971 0x0174 0x6a41 971: ORIM FLAG_OCCUPIED, 0100B ;锁定通道6最终结果
972
973 0x0175 0x38ad 973: LDA CHN6_FINAL_RET1,01H
974 0x0176 0x1843 974: SUB CMP_MIN_PWR0
975 0x0177 0x38ae 975: LDA CHN6_FINAL_RET2,01H
976 0x0178 0x1044 976: SBC CMP_MIN_PWR1
977
978 0x0179 0x75c1 978: ANDIM FLAG_OCCUPIED, 1011B ;释放对通道6最终结果的锁定
979 979:
980 0x017a 0x9970 980: BC WAIT_AD_RESULT ;如果未达到最小上电电压,则一直等待电压升至最小上电电压之上。
981
982 982: PRE_START_PWR_CHK_END:
983 0x017b 0xd400 983: RTNI
984
985
986
987 987: ;***********************************************************
988 988: ; 检查灯具类型
989 989: ; 输入: CHN7_FINAL_RET1, CHN7_FINAL_RET2
990 990: ; 输出: LIGHT_TYPE
991 991: ;***********************************************************
992 992: PRE_START_TYPE_CHK:
993
994 0x017c 0x6c41 994: ORIM FLAG_OCCUPIED, 1000B ;锁定通道7最终结果
995
996 0x017d 0x38bd 996: LDA CHN7_FINAL_RET1,01H ;和门限0比较
997 0x017e 0x1845 997: SUB CMP_TYPE00
998 0x017f 0x38be 998: LDA CHN7_FINAL_RET2,01H
999 0x0180 0x1046 999: SBC CMP_TYPE01
1000 0x0181 0x898e 1000: BNC LI_ON ;