-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmeter_logger.asm
9235 lines (9142 loc) · 155 KB
/
meter_logger.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
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
;--------------------------------------------------------
; File Created by SDCC : free open source ANSI-C Compiler
; Version 3.4.0 #8981 (Jul 1 2014) (Mac OS X x86_64)
; This file was generated Thu Jul 10 02:46:16 2014
;--------------------------------------------------------
; PIC16 port for the Microchip 16-bit core micros
;--------------------------------------------------------
list p=18f2550
radix dec
CONFIG PLLDIV=2
CONFIG CPUDIV=OSC1_PLL2
CONFIG USBDIV=1
CONFIG FOSC=INTOSC_XT
CONFIG FCMEN=OFF
CONFIG IESO=OFF
CONFIG PWRT=OFF
CONFIG BOR=OFF
CONFIG BORV=3
CONFIG VREGEN=OFF
CONFIG WDT=OFF
CONFIG WDTPS=32768
CONFIG CCP2MX=ON
CONFIG PBADEN=OFF
CONFIG LPT1OSC=OFF
CONFIG MCLRE=ON
CONFIG STVREN=ON
CONFIG LVP=ON
CONFIG XINST=OFF
CONFIG CP0=OFF
CONFIG CP1=OFF
CONFIG CP2=OFF
CONFIG CP3=OFF
CONFIG CPB=OFF
CONFIG CPD=OFF
CONFIG WRT0=OFF
CONFIG WRT1=OFF
CONFIG WRT2=OFF
CONFIG WRT3=OFF
CONFIG WRTC=OFF
CONFIG WRTB=OFF
CONFIG WRTD=OFF
CONFIG EBTR0=OFF
CONFIG EBTR1=OFF
CONFIG EBTR2=OFF
CONFIG EBTR3=OFF
CONFIG EBTRB=OFF
;--------------------------------------------------------
; public variables in this module
;--------------------------------------------------------
global _c
global _sleep_ms
global _init_system
global _get_dev_id
global _my_usart_open
global _reverse
global _testo_valid_err_corr
global _testo_ir_enable
global _testo_ir_disable
global _rs232_8n2_tx_enable
global _rs232_8n2_tx_disable
global _rs232_8n2_rx_enable
global _rs232_8n2_rx_disable
global _rs232_8n2_tx_byte
global _rs232_7e1_tx_enable
global _rs232_7e1_tx_disable
global _rs232_7e1_rx_enable
global _rs232_7e1_rx_disable
global _rs232_7e1_tx_byte
global _fsk_tx_enable
global _fsk_tx_disable
global _fsk_rx_enable
global _fsk_rx_disable
global _send_fsk_high
global _send_fsk_low
global _fsk_tx_byte
global _fifo_in_use
global _fifo_put
global _fifo_get
global _fifo_snoop
global _get_battery_level
global _flash_led
global __debug
global __debug2
global _timer_0
global _last_timer_0
global _timer_1_ms
global _timer0_reload
global _debug_buffer
global _fifo_head
global _fifo_tail
global _fifo_buffer_0
global _fifo_buffer_1
global _fifo_buffer_2
global _fifo_buffer_3
global _codec_type
global _led_flash
global _testo_ir_proto
global _rs232_proto
global _fsk_proto
global _main
;--------------------------------------------------------
; extern variables in this module
;--------------------------------------------------------
extern __gptrput1
extern _UFRMLbits
extern _UFRMHbits
extern _UIRbits
extern _UIEbits
extern _UEIRbits
extern _UEIEbits
extern _USTATbits
extern _UCONbits
extern _UADDRbits
extern _UCFGbits
extern _UEP0bits
extern _UEP1bits
extern _UEP2bits
extern _UEP3bits
extern _UEP4bits
extern _UEP5bits
extern _UEP6bits
extern _UEP7bits
extern _UEP8bits
extern _UEP9bits
extern _UEP10bits
extern _UEP11bits
extern _UEP12bits
extern _UEP13bits
extern _UEP14bits
extern _UEP15bits
extern _PORTAbits
extern _PORTBbits
extern _PORTCbits
extern _PORTEbits
extern _LATAbits
extern _LATBbits
extern _LATCbits
extern _DDRAbits
extern _TRISAbits
extern _DDRBbits
extern _TRISBbits
extern _DDRCbits
extern _TRISCbits
extern _OSCTUNEbits
extern _PIE1bits
extern _PIR1bits
extern _IPR1bits
extern _PIE2bits
extern _PIR2bits
extern _IPR2bits
extern _EECON1bits
extern _RCSTAbits
extern _TXSTAbits
extern _T3CONbits
extern _CMCONbits
extern _CVRCONbits
extern _CCP1ASbits
extern _ECCP1ASbits
extern _CCP1DELbits
extern _ECCP1DELbits
extern _BAUDCONbits
extern _BAUDCTLbits
extern _CCP2CONbits
extern _CCP1CONbits
extern _ADCON2bits
extern _ADCON1bits
extern _ADCON0bits
extern _SSPCON2bits
extern _SSPCON1bits
extern _SSPSTATbits
extern _T2CONbits
extern _T1CONbits
extern _RCONbits
extern _WDTCONbits
extern _HLVDCONbits
extern _LVDCONbits
extern _OSCCONbits
extern _T0CONbits
extern _STATUSbits
extern _INTCON3bits
extern _INTCON2bits
extern _INTCONbits
extern _STKPTRbits
extern _stdin
extern _stdout
extern _UFRM
extern _UFRML
extern _UFRMH
extern _UIR
extern _UIE
extern _UEIR
extern _UEIE
extern _USTAT
extern _UCON
extern _UADDR
extern _UCFG
extern _UEP0
extern _UEP1
extern _UEP2
extern _UEP3
extern _UEP4
extern _UEP5
extern _UEP6
extern _UEP7
extern _UEP8
extern _UEP9
extern _UEP10
extern _UEP11
extern _UEP12
extern _UEP13
extern _UEP14
extern _UEP15
extern _PORTA
extern _PORTB
extern _PORTC
extern _PORTE
extern _LATA
extern _LATB
extern _LATC
extern _DDRA
extern _TRISA
extern _DDRB
extern _TRISB
extern _DDRC
extern _TRISC
extern _OSCTUNE
extern _PIE1
extern _PIR1
extern _IPR1
extern _PIE2
extern _PIR2
extern _IPR2
extern _EECON1
extern _EECON2
extern _EEDATA
extern _EEADR
extern _RCSTA
extern _TXSTA
extern _TXREG
extern _RCREG
extern _SPBRG
extern _SPBRGH
extern _T3CON
extern _TMR3
extern _TMR3L
extern _TMR3H
extern _CMCON
extern _CVRCON
extern _CCP1AS
extern _ECCP1AS
extern _CCP1DEL
extern _ECCP1DEL
extern _BAUDCON
extern _BAUDCTL
extern _CCP2CON
extern _CCPR2
extern _CCPR2L
extern _CCPR2H
extern _CCP1CON
extern _CCPR1
extern _CCPR1L
extern _CCPR1H
extern _ADCON2
extern _ADCON1
extern _ADCON0
extern _ADRES
extern _ADRESL
extern _ADRESH
extern _SSPCON2
extern _SSPCON1
extern _SSPSTAT
extern _SSPADD
extern _SSPBUF
extern _T2CON
extern _PR2
extern _TMR2
extern _T1CON
extern _TMR1
extern _TMR1L
extern _TMR1H
extern _RCON
extern _WDTCON
extern _HLVDCON
extern _LVDCON
extern _OSCCON
extern _T0CON
extern _TMR0
extern _TMR0L
extern _TMR0H
extern _STATUS
extern _FSR2L
extern _FSR2H
extern _PLUSW2
extern _PREINC2
extern _POSTDEC2
extern _POSTINC2
extern _INDF2
extern _BSR
extern _FSR1L
extern _FSR1H
extern _PLUSW1
extern _PREINC1
extern _POSTDEC1
extern _POSTINC1
extern _INDF1
extern _WREG
extern _FSR0L
extern _FSR0H
extern _PLUSW0
extern _PREINC0
extern _POSTDEC0
extern _POSTINC0
extern _INDF0
extern _INTCON3
extern _INTCON2
extern _INTCON
extern _PROD
extern _PRODL
extern _PRODH
extern _TABLAT
extern _TBLPTR
extern _TBLPTRL
extern _TBLPTRH
extern _TBLPTRU
extern _PC
extern _PCL
extern _PCLATH
extern _PCLATU
extern _STKPTR
extern _TOS
extern _TOSL
extern _TOSH
extern _TOSU
extern _sprintf
extern _usart_drdy
extern _usart_getc
extern _usart_putc
extern _usart_puts
extern _adc_open
extern _adc_close
extern _adc_conv
extern _adc_busy
extern _adc_read
extern _adc_setchannel
extern __mullong
extern __divulong
;--------------------------------------------------------
; Equates to used internal registers
;--------------------------------------------------------
STATUS equ 0xfd8
PCL equ 0xff9
PCLATH equ 0xffa
PCLATU equ 0xffb
WREG equ 0xfe8
BSR equ 0xfe0
FSR0L equ 0xfe9
FSR0H equ 0xfea
FSR1L equ 0xfe1
FSR2L equ 0xfd9
INDF0 equ 0xfef
POSTINC1 equ 0xfe6
POSTDEC1 equ 0xfe5
PREINC1 equ 0xfe4
PLUSW2 equ 0xfdb
PRODL equ 0xff3
PRODH equ 0xff4
; Internal registers
.registers udata_ovr 0x0000
r0x00 res 1
r0x01 res 1
r0x02 res 1
r0x03 res 1
r0x04 res 1
r0x05 res 1
r0x06 res 1
r0x07 res 1
r0x08 res 1
r0x09 res 1
r0x0a res 1
r0x0b res 1
r0x0c res 1
r0x0d res 1
udata_meter_logger_0 udata
_c res 1
udata_meter_logger_1 udata
_timer_1_ms res 2
udata_meter_logger_2 udata
_fifo_head res 2
udata_meter_logger_3 udata
_fifo_tail res 2
udata_meter_logger_4 udata
_debug_buffer res 128
udata_meter_logger_5 udata
_main_cmd_1_90 res 1
udata_meter_logger_6 udata
_main_sub_cmd_1_90 res 1
udata_meter_logger_7 udata
_timer_0 res 2
udata_meter_logger_8 udata
_timer0_reload res 2
udata_meter_logger_9 udata
_last_timer_0 res 2
udata_meter_logger_10 udata
_codec_type res 1
udata_meter_logger_11 udata
_testo_ir_proto res 6
udata_meter_logger_12 udata
_rs232_proto res 7
udata_meter_logger_13 udata
_fsk_proto res 16
udata_meter_logger_14 udata
_led_flash res 2
udata_meter_logger_15 udata
_fifo_buffer_0 res 256
udata_meter_logger_16 udata
_fifo_buffer_1 res 256
udata_meter_logger_17 udata
_fifo_buffer_2 res 256
udata_meter_logger_18 udata
_fifo_buffer_3 res 256
;--------------------------------------------------------
; interrupt vector
;--------------------------------------------------------
;--------------------------------------------------------
; global & static initialisations
;--------------------------------------------------------
; ; Starting pCode block for absolute section
; ;-----------------------------------------
S_meter_logger_ivec_0x1_isr_high_prio code 0X000008
ivec_0x1_isr_high_prio:
GOTO _isr_high_prio
; ; Starting pCode block for absolute section
; ;-----------------------------------------
S_meter_logger_ivec_0x2_isr_low_prio code 0X000018
ivec_0x2_isr_low_prio:
GOTO _isr_low_prio
; I code from now on!
; ; Starting pCode block
S_meter_logger__main code
_main:
; .line 124; meter_logger.c OSCCONbits.SCS = 0x10;
MOVF _OSCCONbits, W
ANDLW 0xfc
MOVWF _OSCCONbits
; .line 126; meter_logger.c OSCCONbits.IRCF = 0x7; // 8 MHz
MOVF _OSCCONbits, W
ANDLW 0x8f
IORLW 0x70
MOVWF _OSCCONbits
BANKSEL _timer_1_ms
; .line 129; meter_logger.c timer_1_ms = 0;
CLRF _timer_1_ms, B
; removed redundant BANKSEL
CLRF (_timer_1_ms + 1), B
BANKSEL _fifo_head
; .line 131; meter_logger.c fifo_head = 0;
CLRF _fifo_head, B
; removed redundant BANKSEL
CLRF (_fifo_head + 1), B
BANKSEL _fifo_tail
; .line 132; meter_logger.c fifo_tail = 0;
CLRF _fifo_tail, B
; removed redundant BANKSEL
CLRF (_fifo_tail + 1), B
; .line 134; meter_logger.c init_system();
CALL _init_system
; .line 135; meter_logger.c LED_PIN = 1;
BSF _PORTBbits, 4
; .line 136; meter_logger.c sleep_ms(100);
MOVLW 0x00
MOVWF POSTDEC1
MOVLW 0x64
MOVWF POSTDEC1
CALL _sleep_ms
MOVF POSTINC1, F
MOVF POSTINC1, F
; .line 137; meter_logger.c LED_PIN = 0;
BCF _PORTBbits, 4
; .line 144; meter_logger.c get_battery_level();
CALL _get_battery_level
; .line 147; meter_logger.c dev_id = get_dev_id();
CALL _get_dev_id
MOVWF r0x00
MOVFF PRODL, r0x01
; .line 149; meter_logger.c if (dev_id == 0x1240) {
MOVF r0x00, W
XORLW 0x40
BNZ _00334_DS_
MOVF r0x01, W
XORLW 0x12
BZ _00335_DS_
_00334_DS_:
BRA _00109_DS_
_00335_DS_:
; .line 150; meter_logger.c sprintf(debug_buffer, "Processor: pic18f2550\n\r");
MOVLW UPPER(___str_0)
MOVWF r0x04
MOVLW HIGH(___str_0)
MOVWF r0x03
MOVLW LOW(___str_0)
MOVWF r0x02
MOVLW HIGH(_debug_buffer)
MOVWF r0x06
MOVLW LOW(_debug_buffer)
MOVWF r0x05
MOVLW 0x80
MOVWF r0x07
MOVF r0x04, W
MOVWF POSTDEC1
MOVF r0x03, W
MOVWF POSTDEC1
MOVF r0x02, W
MOVWF POSTDEC1
MOVF r0x07, W
MOVWF POSTDEC1
MOVF r0x06, W
MOVWF POSTDEC1
MOVF r0x05, W
MOVWF POSTDEC1
CALL _sprintf
MOVLW 0x06
ADDWF FSR1L, F
BRA _00110_DS_
_00109_DS_:
; .line 152; meter_logger.c else if (dev_id == 0x2a40) {
MOVF r0x00, W
XORLW 0x40
BNZ _00336_DS_
MOVF r0x01, W
XORLW 0x2a
BZ _00337_DS_
_00336_DS_:
BRA _00106_DS_
_00337_DS_:
; .line 153; meter_logger.c sprintf(debug_buffer, "Processor: pic18f2553\n\r");
MOVLW UPPER(___str_1)
MOVWF r0x04
MOVLW HIGH(___str_1)
MOVWF r0x03
MOVLW LOW(___str_1)
MOVWF r0x02
MOVLW HIGH(_debug_buffer)
MOVWF r0x06
MOVLW LOW(_debug_buffer)
MOVWF r0x05
MOVLW 0x80
MOVWF r0x07
MOVF r0x04, W
MOVWF POSTDEC1
MOVF r0x03, W
MOVWF POSTDEC1
MOVF r0x02, W
MOVWF POSTDEC1
MOVF r0x07, W
MOVWF POSTDEC1
MOVF r0x06, W
MOVWF POSTDEC1
MOVF r0x05, W
MOVWF POSTDEC1
CALL _sprintf
MOVLW 0x06
ADDWF FSR1L, F
BRA _00110_DS_
_00106_DS_:
; .line 156; meter_logger.c sprintf(debug_buffer, "Processor: unsupported, device id: 0x%04x\n\r", dev_id);
MOVLW UPPER(___str_2)
MOVWF r0x04
MOVLW HIGH(___str_2)
MOVWF r0x03
MOVLW LOW(___str_2)
MOVWF r0x02
MOVLW HIGH(_debug_buffer)
MOVWF r0x06
MOVLW LOW(_debug_buffer)
MOVWF r0x05
MOVLW 0x80
MOVWF r0x07
MOVF r0x01, W
MOVWF POSTDEC1
MOVF r0x00, W
MOVWF POSTDEC1
MOVF r0x04, W
MOVWF POSTDEC1
MOVF r0x03, W
MOVWF POSTDEC1
MOVF r0x02, W
MOVWF POSTDEC1
MOVF r0x07, W
MOVWF POSTDEC1
MOVF r0x06, W
MOVWF POSTDEC1
MOVF r0x05, W
MOVWF POSTDEC1
CALL _sprintf
MOVLW 0x08
ADDWF FSR1L, F
_00110_DS_:
; .line 158; meter_logger.c usart_puts(debug_buffer);
MOVLW HIGH(_debug_buffer)
MOVWF r0x01
MOVLW LOW(_debug_buffer)
MOVWF r0x00
MOVLW 0x80
MOVWF r0x02
MOVF r0x02, W
MOVWF POSTDEC1
MOVF r0x01, W
MOVWF POSTDEC1
MOVF r0x00, W
MOVWF POSTDEC1
CALL _usart_puts
MOVLW 0x03
ADDWF FSR1L, F
; .line 161; meter_logger.c fsk_rx_enable();
CALL _fsk_rx_enable
_00171_DS_:
; .line 163; meter_logger.c if (fifo_get(&cmd)) {
MOVLW HIGH(_main_cmd_1_90)
MOVWF r0x01
MOVLW LOW(_main_cmd_1_90)
MOVWF r0x00
MOVLW 0x80
MOVWF r0x02
MOVF r0x02, W
MOVWF POSTDEC1
MOVF r0x01, W
MOVWF POSTDEC1
MOVF r0x00, W
MOVWF POSTDEC1
CALL _fifo_get
MOVWF r0x00
MOVLW 0x03
ADDWF FSR1L, F
MOVF r0x00, W
BZ _00171_DS_
; .line 164; meter_logger.c switch (cmd) {
MOVLW 0xfb
BANKSEL _main_cmd_1_90
SUBWF _main_cmd_1_90, W, B
BTFSS STATUS, 0
GOTO _00165_DS_
MOVLW 0x05
; removed redundant BANKSEL
ADDWF _main_cmd_1_90, W, B
MOVWF r0x00
CLRF PCLATH
CLRF PCLATU
RLCF r0x00, W
RLCF PCLATH, F
RLCF WREG, W
RLCF PCLATH, F
ANDLW 0xfc
ADDLW LOW(_00339_DS_)
MOVWF POSTDEC1
MOVLW HIGH(_00339_DS_)
ADDWFC PCLATH, F
MOVLW UPPER(_00339_DS_)
ADDWFC PCLATU, F
MOVF PREINC1, W
MOVWF PCL
_00339_DS_:
GOTO _00163_DS_
GOTO _00145_DS_
GOTO _00127_DS_
GOTO _00111_DS_
GOTO _00119_DS_
_00111_DS_:
; .line 166; meter_logger.c fsk_rx_disable();
CALL _fsk_rx_disable
; .line 167; meter_logger.c usart_puts("\n\rpress print on testo\n\r");
MOVLW UPPER(___str_3)
MOVWF r0x02
MOVLW HIGH(___str_3)
MOVWF r0x01
MOVLW LOW(___str_3)
MOVWF r0x00
MOVF r0x02, W
MOVWF POSTDEC1
MOVF r0x01, W
MOVWF POSTDEC1
MOVF r0x00, W
MOVWF POSTDEC1
CALL _usart_puts
MOVLW 0x03
ADDWF FSR1L, F
; .line 168; meter_logger.c testo_ir_enable();
CALL _testo_ir_enable
; .line 170; meter_logger.c last_fifo_size = 0;
CLRF r0x00
CLRF r0x01
; .line 171; meter_logger.c sleep_ms(10000); // 10 seconds to start printing
MOVLW 0x27
MOVWF POSTDEC1
MOVLW 0x10
MOVWF POSTDEC1
CALL _sleep_ms
MOVF POSTINC1, F
MOVF POSTINC1, F
; .line 172; meter_logger.c fifo_size = fifo_in_use();
CALL _fifo_in_use
MOVWF r0x02
MOVFF PRODL, r0x03
_00112_DS_:
; .line 173; meter_logger.c while (fifo_size > last_fifo_size) { // and wait while we are still receiving data
MOVF r0x03, W
SUBWF r0x01, W
BNZ _00340_DS_
MOVF r0x02, W
SUBWF r0x00, W
_00340_DS_:
BC _00114_DS_
; .line 174; meter_logger.c last_fifo_size = fifo_size;
MOVFF r0x02, r0x00
MOVFF r0x03, r0x01
; .line 175; meter_logger.c sleep_ms(200); // return data when no data for 200 ms
MOVLW 0x00
MOVWF POSTDEC1
MOVLW 0xc8
MOVWF POSTDEC1
CALL _sleep_ms
MOVF POSTINC1, F
MOVF POSTINC1, F
; .line 176; meter_logger.c fifo_size = fifo_in_use();
CALL _fifo_in_use
MOVWF r0x02
MOVFF PRODL, r0x03
BRA _00112_DS_
_00114_DS_:
; .line 178; meter_logger.c testo_ir_disable();
CALL _testo_ir_disable
; .line 184; meter_logger.c sprintf(debug_buffer, "<- ");
MOVLW UPPER(___str_4)
MOVWF r0x06
MOVLW HIGH(___str_4)
MOVWF r0x05
MOVLW LOW(___str_4)
MOVWF r0x04
MOVLW HIGH(_debug_buffer)
MOVWF r0x08
MOVLW LOW(_debug_buffer)
MOVWF r0x07
MOVLW 0x80
MOVWF r0x09
MOVF r0x06, W
MOVWF POSTDEC1
MOVF r0x05, W
MOVWF POSTDEC1
MOVF r0x04, W
MOVWF POSTDEC1
MOVF r0x09, W
MOVWF POSTDEC1
MOVF r0x08, W
MOVWF POSTDEC1
MOVF r0x07, W
MOVWF POSTDEC1
CALL _sprintf
MOVLW 0x06
ADDWF FSR1L, F
; .line 185; meter_logger.c usart_puts(debug_buffer);
MOVLW HIGH(_debug_buffer)
MOVWF r0x05
MOVLW LOW(_debug_buffer)
MOVWF r0x04
MOVLW 0x80
MOVWF r0x06
MOVF r0x06, W
MOVWF POSTDEC1
MOVF r0x05, W
MOVWF POSTDEC1
MOVF r0x04, W
MOVWF POSTDEC1
CALL _usart_puts
MOVLW 0x03
ADDWF FSR1L, F
; .line 186; meter_logger.c for (i = 0; i < fifo_in_use(); i++) {
CLRF r0x04
CLRF r0x05
_00174_DS_:
CALL _fifo_in_use
MOVWF r0x06
MOVFF PRODL, r0x07
MOVF r0x07, W
SUBWF r0x05, W
BNZ _00341_DS_
MOVF r0x06, W
SUBWF r0x04, W
_00341_DS_:
BTFSC STATUS, 0
BRA _00115_DS_
; .line 188; meter_logger.c fifo_get(&sub_cmd);
MOVLW HIGH(_main_sub_cmd_1_90)
MOVWF r0x07
MOVLW LOW(_main_sub_cmd_1_90)
MOVWF r0x06
MOVLW 0x80
MOVWF r0x08
MOVF r0x08, W
MOVWF POSTDEC1
MOVF r0x07, W
MOVWF POSTDEC1
MOVF r0x06, W
MOVWF POSTDEC1
CALL _fifo_get
MOVLW 0x03
ADDWF FSR1L, F
; .line 190; meter_logger.c sprintf(debug_buffer, "%d ", sub_cmd);
MOVFF _main_sub_cmd_1_90, r0x06
CLRF r0x07
MOVLW UPPER(___str_5)
MOVWF r0x0a
MOVLW HIGH(___str_5)
MOVWF r0x09
MOVLW LOW(___str_5)
MOVWF r0x08
MOVLW HIGH(_debug_buffer)
MOVWF r0x0c
MOVLW LOW(_debug_buffer)
MOVWF r0x0b
MOVLW 0x80
MOVWF r0x0d
MOVF r0x07, W
MOVWF POSTDEC1
MOVF r0x06, W
MOVWF POSTDEC1
MOVF r0x0a, W
MOVWF POSTDEC1
MOVF r0x09, W
MOVWF POSTDEC1
MOVF r0x08, W
MOVWF POSTDEC1
MOVF r0x0d, W
MOVWF POSTDEC1
MOVF r0x0c, W
MOVWF POSTDEC1
MOVF r0x0b, W
MOVWF POSTDEC1
CALL _sprintf
MOVLW 0x08
ADDWF FSR1L, F
; .line 191; meter_logger.c usart_puts(debug_buffer);
MOVLW HIGH(_debug_buffer)
MOVWF r0x07
MOVLW LOW(_debug_buffer)
MOVWF r0x06
MOVLW 0x80
MOVWF r0x08
MOVF r0x08, W
MOVWF POSTDEC1
MOVF r0x07, W
MOVWF POSTDEC1
MOVF r0x06, W
MOVWF POSTDEC1
CALL _usart_puts
MOVLW 0x03
ADDWF FSR1L, F
BANKSEL _main_sub_cmd_1_90
; .line 193; meter_logger.c fifo_put(sub_cmd);
MOVF _main_sub_cmd_1_90, W, B
MOVWF POSTDEC1
CALL _fifo_put
MOVF POSTINC1, F
; .line 186; meter_logger.c for (i = 0; i < fifo_in_use(); i++) {
INFSNZ r0x04, F
INCF r0x05, F
BRA _00174_DS_
_00115_DS_:
; .line 195; meter_logger.c sprintf(debug_buffer, "\n\r");
MOVLW UPPER(___str_6)
MOVWF r0x06
MOVLW HIGH(___str_6)
MOVWF r0x05
MOVLW LOW(___str_6)
MOVWF r0x04
MOVLW HIGH(_debug_buffer)
MOVWF r0x08
MOVLW LOW(_debug_buffer)
MOVWF r0x07
MOVLW 0x80
MOVWF r0x09
MOVF r0x06, W
MOVWF POSTDEC1
MOVF r0x05, W
MOVWF POSTDEC1
MOVF r0x04, W
MOVWF POSTDEC1
MOVF r0x09, W
MOVWF POSTDEC1
MOVF r0x08, W
MOVWF POSTDEC1
MOVF r0x07, W
MOVWF POSTDEC1
CALL _sprintf
MOVLW 0x06
ADDWF FSR1L, F
; .line 196; meter_logger.c usart_puts(debug_buffer);
MOVLW HIGH(_debug_buffer)
MOVWF r0x05
MOVLW LOW(_debug_buffer)
MOVWF r0x04
MOVLW 0x80
MOVWF r0x06
MOVF r0x06, W
MOVWF POSTDEC1
MOVF r0x05, W
MOVWF POSTDEC1
MOVF r0x04, W
MOVWF POSTDEC1
CALL _usart_puts
MOVLW 0x03
ADDWF FSR1L, F
; .line 198; meter_logger.c fsk_tx_enable();
CALL _fsk_tx_enable
_00116_DS_:
; .line 199; meter_logger.c while (fifo_get(&cmd)) { // and send them via fsk
MOVLW HIGH(_main_cmd_1_90)
MOVWF r0x05
MOVLW LOW(_main_cmd_1_90)
MOVWF r0x04
MOVLW 0x80
MOVWF r0x06
MOVF r0x06, W
MOVWF POSTDEC1
MOVF r0x05, W
MOVWF POSTDEC1
MOVF r0x04, W
MOVWF POSTDEC1
CALL _fifo_get
MOVWF r0x04
MOVLW 0x03
ADDWF FSR1L, F
MOVF r0x04, W
BZ _00118_DS_
BANKSEL _main_cmd_1_90
; .line 200; meter_logger.c fsk_tx_byte(cmd);
MOVF _main_cmd_1_90, W, B
MOVWF POSTDEC1
CALL _fsk_tx_byte
MOVF POSTINC1, F
; .line 201; meter_logger.c sleep_ms(FSK_TX_SLEEP);
MOVLW 0x00
MOVWF POSTDEC1
MOVLW 0x04
MOVWF POSTDEC1
CALL _sleep_ms
MOVF POSTINC1, F
MOVF POSTINC1, F
BRA _00116_DS_
_00118_DS_:
; .line 203; meter_logger.c fsk_tx_disable();
CALL _fsk_tx_disable
; .line 207; meter_logger.c fsk_rx_enable();
CALL _fsk_rx_enable
; .line 208; meter_logger.c break;
GOTO _00165_DS_
_00119_DS_:
; .line 218; meter_logger.c last_fifo_size = 0;
CLRF r0x00
CLRF r0x01
; .line 219; meter_logger.c sleep_ms(1000); // 1 second
MOVLW 0x03
MOVWF POSTDEC1
MOVLW 0xe8
MOVWF POSTDEC1
CALL _sleep_ms
MOVF POSTINC1, F
MOVF POSTINC1, F
; .line 220; meter_logger.c fifo_size = fifo_in_use();
CALL _fifo_in_use
MOVWF r0x02
MOVFF PRODL, r0x03
_00120_DS_: