read temperature

This commit is contained in:
Sergey Yarkov 2023-06-19 19:49:14 +03:00
parent 6011384e01
commit 59b71a21d6
No known key found for this signature in database
GPG Key ID: E91CE1FABC619B6F
8 changed files with 524 additions and 503 deletions

View File

@ -1,4 +1,4 @@
.EQU F_CPU = 8 ; 8 Mhz .EQU F_CPU = 8 ; 8 Mhz (для задержки)
.DEF TEMP_REG_A = r16 .DEF TEMP_REG_A = r16
.DEF TEMP_REG_B = r17 .DEF TEMP_REG_B = r17

View File

@ -2,46 +2,48 @@
:0200000049C0F5 :0200000049C0F5
:10001A0000C04F935F930F935FB7409167004530DD :10001A0000C04F935F930F935FB7409167004530DD
:10002A000CF403C0442740936700403041F493988E :10002A000CF403C0442740936700403041F493988E
:10003A0094989598929A0091660016D19FD0413073 :10003A0094989598929A009166002BD1B6D0413047
:10004A0041F4929894989598939A009165000CD1EE :10004A0041F4929894989598939A0091650021D1D9
:10005A0095D0423041F4929893989598949A009149 :10005A00ACD0423041F4929893989598949A009132
:10006A00640002D18BD0433041F4929893989498CB :10006A00640017D1A2D0433041F49298939894989F
:10007A00959A00916300F8D081D043954093670028 :10007A00959A009163000DD198D0439540936700FB
:10008A005FBF0F915F914F9118950FED0DBF0EE76E :10008A005FBF0F915F914F9118950FED0DBF0EE76E
:10009A0001BB01EC07BB0CE108BB02E000BF05E0B5 :10009A0001BB01EC07BB0CE108BB02E000BF05E0B5
:1000AA0003BF09E106BF01E009BF112410926700EE :1000AA0003BF09E106BF01E009BF112410926700EE
:1000BA0000E000936000002700936A0080E090E06F :1000BA0000E000936000002700936A0000936B0041
:1000CA0051D0DDD0DCD0DBD0DAD03FD000916A004D :1000CA0080E090E000916A00802F90E0009160004B
:1000DA00802F90E000916000003079F4ABD070FD81 :1000DA00003089F4C4D070FD969A70FF969859D072
:1000EA00969A70FF96983ED0CAD0C9D0C8D0C7D0C9 :1000EA00E3D0E2D0E1D0E0D02ED010916A00812F87
:1000FA002CD010916A00812F90E0013011F49AD02F :1000FA0010916B00912F013011F4B1D062D002300F
:10010A0049D0023039F71BE0109363001093640062 :10010A0029F71BE0109363001093640010936500B5
:10011A0010936500109366000000DCCFEE24FF18F0 :10011A00109366000000DACFEE24FF1841E1001FB9
:10012A0041E1001F111F4A9509F40895EE1CFF1CB6 :10012A00111F4A9509F40895EE1CFF1CE21AF30AFE
:10013A00E21AF30A20F4E20EF31E8894F2CF08942E :10013A0020F4E20EF31E8894F2CF0894F0CF4150D7
:10014A00F0CF41503040E8F708950F93F89428D043 :10014A003040E8F708950F931F932F93F8943FD008
:10015A000CEC802E38D00EEB802E35D051D078940E :10015A000CEC802E4FD00EEB802E4CD0AAE6B0E0ED
:10016A000F9108950F93F8941BD00CEC802E2BD08E :10016A0066D0ABE6B0E063D010916A0020916B00D4
:10017A0004E4802E28D078940F9108950F930FB835 :10017A0026951795269517952695179526951795D9
:10018A0000E40EB90BE10DB9769BFDCFC09AC09879 :10018A0010936A0020936B0078942F911F910F911E
:10019A000F91089574D0B29B0196B39B019708956D :10019A0008950F93F8941BD00CEC802E2BD004E416
:1001AA00B99A33E04EEBCDDFB99830E04AE8C9DFBF :1001AA00802E28D078940F9108950F930FB800E409
:1001BA0004D033E042E3C5DF0895B19B716002C009 :1001BA000EB90BE10DB9769BFDCFC09AC0980F918D
:1001CA00B1997E7F08950F931F93082D18E0069525 :1001CA00089572D0B29B0196B39B01970895B99A8C
:1001DA0008F448F0B99A30E046E7B3DFB99830E05E :1001DA0033E04EEBB4DFB99830E04AE8B0DF04D040
:1001EA0042E1AFDF08C0B99A30E04AE0AADFB99825 :1001EA0033E042E3ACDF0895B19B716002C0B1997C
:1001FA0030E04EE7A6DF1A9551F71F910F91089547 :1001FA007E7F08950F931F93082D18E0069508F443
:10020A000F931F9308E0B99A30E04AE09ADFB99851 :10020A0048F0B99A30E046E79ADFB99830E042E11F
:10021A0030E040E196DF10916A001695B1991068B6 :10021A0096DF08C0B99A30E04AE091DFB99830E039
:10022A0010936A0030E04CE68CDF0A9561F71F9163 :10022A004EE78DDF1A9551F71F910F9108950F939D
:10023A000F910895F8945F9354E0A3E6B0E0809399 :10023A001F93002718E00695B99A30E04AE07FDF5D
:10024A0061009093620000916100109162002AE0BF :10024A00B99830E040E17BDFB199006830E04CE6D4
:10025A0030E064DFED9200936100109362005A95DA :10025A0076DF1A9581F70C931F910F910895F89400
:10026A0091F75F91789408950F931F93E4ECF2E06D :10026A005F9354E0A3E6B0E080936100909362004C
:10027A001127E00FF11F04901F910F9108950F931A :10027A0000916100109162002AE030E04DDFED92BA
:10028A001F932F932AE01FEF0FEF0A95F1F71A95A4 :10028A0000936100109362005A9591F75F917894F8
:10029A00D9F72A95C1F72F911F910F9108950F93BE :10029A0008950F931F93EEEEF2E01127E00FF11F7E
:1002AA001F930FEF1FEF1A95000000000000D9F707 :1002AA0004901F910F9108950F931F932F932AE0A3
:1002BA000A95C1F71F910F910895C0F9A4B09992B8 :1002BA001FEF0FEF0A95F1F71A95D9F72A95C1F7AB
:0602CA0082F880909CBF49 :1002CA002F911F910F9108950F931F930FEF1FEF17
:1002DA001A95000000000000D9F70A95C1F71F918E
:1002EA000F910895C0F9A4B0999282F880909CBFAA
:00000001FF :00000001FF

View File

@ -1,26 +1,26 @@
AVRASM ver. 2.2.7 main.asm Mon Jun 19 15:34:12 2023 AVRASM ver. 2.2.7 main.asm Mon Jun 19 19:48:15 2023
[builtin](2): Including file '/home/sergeyyarkov/.mchp_packs/Microchip/ATtiny_DFP/3.0.151/avrasm/inc\tn2313Adef.inc' [builtin](2): Including file '/home/sergeyyarkov/.mchp_packs/Microchip/ATtiny_DFP/3.0.151/avrasm/inc\tn2313Adef.inc'
main.asm(15): Including file 'definitions.asm' main.asm(15): Including file 'definitions.asm'
main.asm(16): Including file 'macros.asm' main.asm(16): Including file 'macros.asm'
main.asm(244): Including file 'div16u.asm' main.asm(215): Including file 'div16u.asm'
div16u.asm(22): warning: Register r16 already defined by the .DEF directive div16u.asm(22): warning: Register r16 already defined by the .DEF directive
main.asm(244): 'div16u.asm' included form here main.asm(215): 'div16u.asm' included form here
div16u.asm(23): warning: Register r17 already defined by the .DEF directive div16u.asm(23): warning: Register r17 already defined by the .DEF directive
main.asm(244): 'div16u.asm' included form here main.asm(215): 'div16u.asm' included form here
div16u.asm(24): warning: Register r16 already defined by the .DEF directive div16u.asm(24): warning: Register r16 already defined by the .DEF directive
main.asm(244): 'div16u.asm' included form here main.asm(215): 'div16u.asm' included form here
div16u.asm(25): warning: Register r17 already defined by the .DEF directive div16u.asm(25): warning: Register r17 already defined by the .DEF directive
main.asm(244): 'div16u.asm' included form here main.asm(215): 'div16u.asm' included form here
div16u.asm(27): warning: Register r19 already defined by the .DEF directive div16u.asm(27): warning: Register r19 already defined by the .DEF directive
main.asm(244): 'div16u.asm' included form here main.asm(215): 'div16u.asm' included form here
div16u.asm(28): warning: Register r20 already defined by the .DEF directive div16u.asm(28): warning: Register r20 already defined by the .DEF directive
main.asm(244): 'div16u.asm' included form here main.asm(215): 'div16u.asm' included form here
[builtin](2): Including file '/home/sergeyyarkov/.mchp_packs/Microchip/ATtiny_DFP/3.0.151/avrasm/inc\tn2313Adef.inc' [builtin](2): Including file '/home/sergeyyarkov/.mchp_packs/Microchip/ATtiny_DFP/3.0.151/avrasm/inc\tn2313Adef.inc'
main.asm(15): Including file 'definitions.asm' main.asm(15): Including file 'definitions.asm'
main.asm(16): Including file 'macros.asm' main.asm(16): Including file 'macros.asm'
main.asm(244): Including file 'div16u.asm' main.asm(215): Including file 'div16u.asm'
; ;
@ -826,7 +826,8 @@ main.asm(244): Including file 'div16u.asm'
000067 CURRENT_DIGIT: .BYTE 1 ; Номер разряда индикатора, который сейчас горит 000067 CURRENT_DIGIT: .BYTE 1 ; Номер разряда индикатора, который сейчас горит
000068 SW_FLAGS: .BYTE 1 ; Состояние кнопок 000068 SW_FLAGS: .BYTE 1 ; Состояние кнопок
000069 HYSTERESIS: .BYTE 1 ; Отклонение температуры от уставки 000069 HYSTERESIS: .BYTE 1 ; Отклонение температуры от уставки
00006a OW_RECEIVE: .BYTE 1 00006a TEMP_L: .BYTE 1
00006b TEMP_H: .BYTE 1
;//</editor-fold> ;//</editor-fold>
@ -869,8 +870,8 @@ main.asm(244): Including file 'div16u.asm'
00001e 9895 cbi PORTD, DIGIT_4_PIN 00001e 9895 cbi PORTD, DIGIT_4_PIN
00001f 9a92 sbi PORTD, DIGIT_1_PIN 00001f 9a92 sbi PORTD, DIGIT_1_PIN
000020 9100 0066 lds TEMP_REG_A, DIGITS+3 000020 9100 0066 lds TEMP_REG_A, DIGITS+3
000022 d116 rcall DISPLAY_DECODER 000022 d12b rcall DISPLAY_DECODER
000023 d09f rcall USI_TRANSMIT 000023 d0b6 rcall USI_TRANSMIT
_indicate_2: _indicate_2:
000024 3041 cpi r20, 1 000024 3041 cpi r20, 1
@ -881,8 +882,8 @@ main.asm(244): Including file 'div16u.asm'
000028 9895 cbi PORTD, DIGIT_4_PIN 000028 9895 cbi PORTD, DIGIT_4_PIN
000029 9a93 sbi PORTD, DIGIT_2_PIN 000029 9a93 sbi PORTD, DIGIT_2_PIN
00002a 9100 0065 lds TEMP_REG_A, DIGITS+2 00002a 9100 0065 lds TEMP_REG_A, DIGITS+2
00002c d10c rcall DISPLAY_DECODER 00002c d121 rcall DISPLAY_DECODER
00002d d095 rcall USI_TRANSMIT 00002d d0ac rcall USI_TRANSMIT
_indicate_3: _indicate_3:
00002e 3042 cpi r20, 2 00002e 3042 cpi r20, 2
@ -893,8 +894,8 @@ main.asm(244): Including file 'div16u.asm'
000032 9895 cbi PORTD, DIGIT_4_PIN 000032 9895 cbi PORTD, DIGIT_4_PIN
000033 9a94 sbi PORTD, DIGIT_3_PIN 000033 9a94 sbi PORTD, DIGIT_3_PIN
000034 9100 0064 lds TEMP_REG_A, DIGITS+1 000034 9100 0064 lds TEMP_REG_A, DIGITS+1
000036 d102 rcall DISPLAY_DECODER 000036 d117 rcall DISPLAY_DECODER
000037 d08b rcall USI_TRANSMIT 000037 d0a2 rcall USI_TRANSMIT
_indicate_4: _indicate_4:
000038 3043 cpi r20, 3 000038 3043 cpi r20, 3
@ -905,8 +906,8 @@ main.asm(244): Including file 'div16u.asm'
00003c 9894 cbi PORTD, DIGIT_3_PIN 00003c 9894 cbi PORTD, DIGIT_3_PIN
00003d 9a95 sbi PORTD, DIGIT_4_PIN 00003d 9a95 sbi PORTD, DIGIT_4_PIN
00003e 9100 0063 lds TEMP_REG_A, DIGITS 00003e 9100 0063 lds TEMP_REG_A, DIGITS
000040 d0f8 rcall DISPLAY_DECODER 000040 d10d rcall DISPLAY_DECODER
000041 d081 rcall USI_TRANSMIT 000041 d098 rcall USI_TRANSMIT
_indicate_exit: _indicate_exit:
000042 9543 inc r20 000042 9543 inc r20
@ -958,46 +959,15 @@ main.asm(244): Including file 'div16u.asm'
00005e 9300 0060 sts MCU_STATE, r16 ; переводим МК сразу в режим измерения температуры 00005e 9300 0060 sts MCU_STATE, r16 ; переводим МК сразу в режим измерения температуры
000060 2700 clr r16 000060 2700 clr r16
000061 9300 006a sts OW_RECEIVE, r16 000061 9300 006a sts TEMP_L, r16
000063 9300 006b sts TEMP_H, r16
000063 e080 000065 e080
000064 e090 display_load 0 ; загружаем число, которое нужно показать на индикатор 000066 e090 display_load 0 ; загружаем число, которое нужно показать на индикатор
; ldi r16, 0b10000000 000067 9100 006a lds r16, TEMP_L
; lsr r16 000069 2f80 mov DISP_NUM_L, r16
; sbr r16, (1<<7) 00006a e090 ldi DISP_NUM_H, 0
; sbrc OWFR, OWPRF
; ldi r16, DS18B20_CMD_SKIPROM
; mov r8, r16
; rcall OW_PRESENCE
; rcall OW_SEND_BYTE
;
; ldi r16, DS18B20_CMD_RSCRATCHPAD
; mov r8, r16
;;; rcall OW_PRESENCE
; rcall OW_SEND_BYTE
;
; rcall OW_RD_BYTE
;; rcall OW_RD_BYTE
; rcall TEMP_CONV
; rcall OW_PRESENCE
000065 d051 rcall TEMP_CONV
000066 d0dd rcall DEBOUNCE_SW
000067 d0dc rcall DEBOUNCE_SW
000068 d0db rcall DEBOUNCE_SW
000069 d0da rcall DEBOUNCE_SW
00006a d03f rcall TEMP_RD
00006b 9100 006a lds r16, OW_RECEIVE
00006d 2f80 mov DISP_NUM_L, r16
00006e e090 ldi DISP_NUM_H, 0
; sei ; sei
@ -1007,43 +977,44 @@ main.asm(244): Including file 'div16u.asm'
; **** ГЛАВНЫЙ ЦИКЛ ********************************************** ; **** ГЛАВНЫЙ ЦИКЛ **********************************************
LOOP: LOOP:
; rcall DISPLAY_UPD_DIGITS ; rcall DISPLAY_UPD_DIGITS
00006f 9100 0060 lds r16, MCU_STATE ; получаем текущее состояние МК 00006b 9100 0060 lds r16, MCU_STATE ; получаем текущее состояние МК
_STATE_DEFAULT: _STATE_DEFAULT:
000071 3000 cpi r16, MCU_STATE_DEFAULT 00006d 3000 cpi r16, MCU_STATE_DEFAULT
000072 f479 brne _STATE_PROGRAM 00006e f489 brne _STATE_PROGRAM
000073 d0ab rcall DISPLAY_UPD_DIGITS 00006f d0c4 rcall DISPLAY_UPD_DIGITS
; rcall TEMP_RD 000070 fd70 sbrc OWFR, OWPRF
000074 fd70 sbrc OWFR, OWPRF 000071 9a96 sbi PORTD, PD6
000075 9a96 sbi PORTD, PD6 000072 ff70 sbrs OWFR, OWPRF
000076 ff70 sbrs OWFR, OWPRF 000073 9896 cbi PORTD, PD6
000077 9896 cbi PORTD, PD6
000078 d03e rcall TEMP_CONV 000074 d059 rcall TEMP_CONV
000079 d0ca rcall DEBOUNCE_SW 000075 d0e3 rcall DEBOUNCE_SW
00007a d0c9 rcall DEBOUNCE_SW 000076 d0e2 rcall DEBOUNCE_SW
00007b d0c8 rcall DEBOUNCE_SW 000077 d0e1 rcall DEBOUNCE_SW
00007c d0c7 rcall DEBOUNCE_SW 000078 d0e0 rcall DEBOUNCE_SW
00007d d02c rcall TEMP_RD 000079 d02e rcall TEMP_RD
00007e 9110 006a lds r17, OW_RECEIVE 00007a 9110 006a lds r17, TEMP_L
000080 2f81 mov DISP_NUM_L, r17 00007c 2f81 mov DISP_NUM_L, r17
000081 e090 ldi DISP_NUM_H, 0 00007d 9110 006b lds r17, TEMP_H
00007f 2f91 mov DISP_NUM_H, r17
_STATE_PROGRAM: _STATE_PROGRAM:
000082 3001 cpi r16, MCU_STATE_PROGRAM 000080 3001 cpi r16, MCU_STATE_PROGRAM
000083 f411 brne _STATE_ERROR 000081 f411 brne _STATE_ERROR
000084 d09a rcall DISPLAY_UPD_DIGITS 000082 d0b1 rcall DISPLAY_UPD_DIGITS
000085 d049 rcall SW_CHECK_PROCESS 000083 d062 rcall SW_CHECK_PROCESS
_STATE_ERROR: _STATE_ERROR:
000086 3002 cpi r16, MCU_STATE_ERROR 000084 3002 cpi r16, MCU_STATE_ERROR
000087 f739 brne LOOP 000085 f729 brne LOOP
000088 e01b ldi r17, 11 000086 e01b ldi r17, 11
000089 9310 0063 sts DIGITS, r17 000087 9310 0063 sts DIGITS, r17
00008b 9310 0064 sts DIGITS+1, r17 000089 9310 0064 sts DIGITS+1, r17
00008d 9310 0065 sts DIGITS+2, r17 00008b 9310 0065 sts DIGITS+2, r17
00008f 9310 0066 sts DIGITS+3, r17 00008d 9310 0066 sts DIGITS+3, r17
000091 0000 nop 00008f 0000 nop
000092 cfdc rjmp LOOP 000090 cfda rjmp LOOP
//</editor-fold> //</editor-fold>
@ -1081,82 +1052,108 @@ main.asm(244): Including file 'div16u.asm'
;***** Code ;***** Code
div16u: div16u:
000093 24ee clr drem16uL ; clear remainder Low byte 000091 24ee clr drem16uL ; clear remainder Low byte
000094 18ff sub drem16uH,drem16uH ; clear remainder High byte and carry 000092 18ff sub drem16uH,drem16uH ; clear remainder High byte and carry
000095 e141 ldi dcnt16u,17 ; init loop counter 000093 e141 ldi dcnt16u,17 ; init loop counter
d16u_1: d16u_1:
000096 1f00 rol dd16uL ; shift left dividend 000094 1f00 rol dd16uL ; shift left dividend
000097 1f11 rol dd16uH 000095 1f11 rol dd16uH
000098 954a dec dcnt16u ; decrement counter 000096 954a dec dcnt16u ; decrement counter
000099 f409 brne d16u_2 ; if done 000097 f409 brne d16u_2 ; if done
00009a 9508 ret ; return 000098 9508 ret ; return
d16u_2: d16u_2:
00009b 1cee rol drem16uL ; shift dividend into remainder 000099 1cee rol drem16uL ; shift dividend into remainder
00009c 1cff rol drem16uH 00009a 1cff rol drem16uH
00009d 1ae2 sub drem16uL,dv16uL ; remainder = remainder - divisor 00009b 1ae2 sub drem16uL,dv16uL ; remainder = remainder - divisor
00009e 0af3 sbc drem16uH,dv16uH 00009c 0af3 sbc drem16uH,dv16uH
00009f f420 brcc d16u_3 ; if result negative 00009d f420 brcc d16u_3 ; if result negative
0000a0 0ee2 add drem16uL,dv16uL ; restore remainder 00009e 0ee2 add drem16uL,dv16uL ; restore remainder
0000a1 1ef3 adc drem16uH,dv16uH 00009f 1ef3 adc drem16uH,dv16uH
0000a2 9488 clc ; clear carry to be shifted into result 0000a0 9488 clc ; clear carry to be shifted into result
0000a3 cff2 rjmp d16u_1 ; else 0000a1 cff2 rjmp d16u_1 ; else
d16u_3: d16u_3:
0000a4 9408 sec ; set carry to be shifted into result 0000a2 9408 sec ; set carry to be shifted into result
0000a5 cff0 0000a3 cff0
DELAY_LOOP_16: DELAY_LOOP_16:
0000a6 5041 subi DELAY_8_r, 1 0000a4 5041 subi DELAY_8_r, 1
0000a7 4030 sbci DELAY_16_r, 0 0000a5 4030 sbci DELAY_16_r, 0
0000a8 f7e8 brcc DELAY_LOOP_16 0000a6 f7e8 brcc DELAY_LOOP_16
0000a9 9508 ret 0000a7 9508 ret
//<editor-fold defaultstate="collapsed" desc="Подпрограмма: чтение и опрос температуры"> //<editor-fold defaultstate="collapsed" desc="Подпрограмма: чтение и опрос температуры">
TEMP_RD: TEMP_RD:
0000aa 930f push r16 0000a8 930f push r16
0000a9 931f push r17
0000aa 932f push r18
0000ab 94f8 cli 0000ab 94f8 cli
0000ac d028 rcall OW_PRESENCE 0000ac d03f rcall OW_PRESENCE
0000ad ec0c ldi r16, DS18B20_CMD_SKIPROM 0000ad ec0c ldi r16, DS18B20_CMD_SKIPROM
0000ae 2e80 mov OW_CMD_r, r16 0000ae 2e80 mov OW_CMD_r, r16
0000af d038 rcall OW_SEND_BYTE 0000af d04f rcall OW_SEND_BYTE
0000b0 eb0e ldi r16, DS18B20_CMD_RSCRATCHPAD 0000b0 eb0e ldi r16, DS18B20_CMD_RSCRATCHPAD
0000b1 2e80 mov OW_CMD_r, r16 0000b1 2e80 mov OW_CMD_r, r16
0000b2 d035 rcall OW_SEND_BYTE 0000b2 d04c rcall OW_SEND_BYTE
0000b3 d051 rcall OW_RD_BYTE 0000b3 e6aa ldi XL, LOW(TEMP_L)
0000b4 e0b0 ldi XH, HIGH(TEMP_L)
0000b5 d066 rcall OW_RD_BYTE
0000b4 9478 sei 0000b6 e6ab ldi XL, LOW(TEMP_H)
0000b5 910f pop r16 0000b7 e0b0 ldi XH, HIGH(TEMP_H)
0000b6 9508 ret 0000b8 d063 rcall OW_RD_BYTE
0000b9 9110 006a lds r17, TEMP_L
0000bb 9120 006b lds r18, TEMP_H
0000bd 9526 lsr r18
0000be 9517 ror r17
0000bf 9526 lsr r18
0000c0 9517 ror r17
0000c1 9526 lsr r18
0000c2 9517 ror r17
0000c3 9526 lsr r18
0000c4 9517 ror r17
0000c5 9310 006a sts TEMP_L, r17
0000c7 9320 006b sts TEMP_H, r18
0000c9 9478 sei
0000ca 912f pop r18
0000cb 911f pop r17
0000cc 910f pop r16
0000cd 9508 ret
; ;
TEMP_CONV: TEMP_CONV:
0000b7 930f push r16 0000ce 930f push r16
0000b8 94f8 cli 0000cf 94f8 cli
0000b9 d01b rcall OW_PRESENCE 0000d0 d01b rcall OW_PRESENCE
0000ba ec0c ldi r16, DS18B20_CMD_SKIPROM 0000d1 ec0c ldi r16, DS18B20_CMD_SKIPROM
0000bb 2e80 mov OW_CMD_r, r16 0000d2 2e80 mov OW_CMD_r, r16
0000bc d02b rcall OW_SEND_BYTE 0000d3 d02b rcall OW_SEND_BYTE
0000bd e404 ldi r16, DS18B20_CMD_CONVERTTEMP 0000d4 e404 ldi r16, DS18B20_CMD_CONVERTTEMP
0000be 2e80 mov OW_CMD_r, r16 0000d5 2e80 mov OW_CMD_r, r16
0000bf d028 rcall OW_SEND_BYTE 0000d6 d028 rcall OW_SEND_BYTE
0000c0 9478 sei 0000d7 9478 sei
0000c1 910f pop r16 0000d8 910f pop r16
0000c2 9508 ret 0000d9 9508 ret
//</editor-fold> //</editor-fold>
//<editor-fold defaultstate="collapsed" desc="Подпрограмма: отправка байта в сдвиговый регистр"> //<editor-fold defaultstate="collapsed" desc="Подпрограмма: отправка байта в сдвиговый регистр">
; **** ОТПРАВКА БАЙТА В СДВИГОВЫЙ РЕГИСТР ************************* ; **** ОТПРАВКА БАЙТА В СДВИГОВЫЙ РЕГИСТР *************************
USI_TRANSMIT: USI_TRANSMIT:
0000c3 930f push r16 0000da 930f push r16
0000c4 b80f out USIDR, r0 ; Байт для отправки всегда находится в регистре r0. Помещаем данные в регистр USIDR. 0000db b80f out USIDR, r0 ; Байт для отправки всегда находится в регистре r0. Помещаем данные в регистр USIDR.
; Enable USI Overflow Interrupt Flag (will be 0 if transfer is not compeleted) ; Enable USI Overflow Interrupt Flag (will be 0 if transfer is not compeleted)
0000c5 e400 ldi TEMP_REG_A, (1<<USIOIF) 0000dc e400 ldi TEMP_REG_A, (1<<USIOIF)
0000c6 b90e out USISR, TEMP_REG_A 0000dd b90e out USISR, TEMP_REG_A
; Load settings of USI into temp register ; Load settings of USI into temp register
; This will setup USI to Three-wire mode, Software clock strobe (USITC) ; This will setup USI to Three-wire mode, Software clock strobe (USITC)
@ -1166,49 +1163,49 @@ main.asm(244): Including file 'div16u.asm'
; USICS1 <--------------> USI Clock Source Select ; USICS1 <--------------> USI Clock Source Select
; USICLK <--------------> USI Clock Strobe ; USICLK <--------------> USI Clock Strobe
; USITC <--------------> USI Toggle Clock (Enable clock generation) ; USITC <--------------> USI Toggle Clock (Enable clock generation)
0000c7 e10b ldi TEMP_REG_A, (1<<USIWM0) | (1<<USICS1) | (1<<USICLK) | (1<<USITC) 0000de e10b ldi TEMP_REG_A, (1<<USIWM0) | (1<<USICS1) | (1<<USICLK) | (1<<USITC)
_USI_TRANSMIT_LOOP: ; Execute loop when USIOIF is 0 _USI_TRANSMIT_LOOP: ; Execute loop when USIOIF is 0
0000c8 b90d out USICR, TEMP_REG_A ; Load settings from temp register into USI Control Register 0000df b90d out USICR, TEMP_REG_A ; Load settings from temp register into USI Control Register
0000c9 9b76 sbis USISR, USIOIF ; If transfer is comleted then move out of loop 0000e0 9b76 sbis USISR, USIOIF ; If transfer is comleted then move out of loop
0000ca cffd rjmp _USI_TRANSMIT_LOOP 0000e1 cffd rjmp _USI_TRANSMIT_LOOP
; Send pulse into LATCH pin. ; Send pulse into LATCH pin.
; This will copy byte from 74hc595 shift register into 74hc595 storage register ; This will copy byte from 74hc595 shift register into 74hc595 storage register
0000cb 9ac0 sbi PORTB, USI_LATCH_PIN 0000e2 9ac0 sbi PORTB, USI_LATCH_PIN
0000cc 98c0 cbi PORTB, USI_LATCH_PIN 0000e3 98c0 cbi PORTB, USI_LATCH_PIN
0000cd 910f pop r16 0000e4 910f pop r16
0000ce 9508 ret//</editor-fold> 0000e5 9508 ret//</editor-fold>
//<editor-fold defaultstate="collapsed" desc="Подпрограмма: опрос кнопок"> //<editor-fold defaultstate="collapsed" desc="Подпрограмма: опрос кнопок">
SW_CHECK_PROCESS: SW_CHECK_PROCESS:
0000cf d074 rcall DEBOUNCE_SW 0000e6 d072 rcall DEBOUNCE_SW
0000d0 9bb2 sbis SW_PIN, SW_PLUS_PIN 0000e7 9bb2 sbis SW_PIN, SW_PLUS_PIN
0000d1 9601 adiw DISP_NUM_L, 1 0000e8 9601 adiw DISP_NUM_L, 1
0000d2 9bb3 sbis SW_PIN, SW_MINUS_PIN 0000e9 9bb3 sbis SW_PIN, SW_MINUS_PIN
0000d3 9701 sbiw DISP_NUM_L, 1 0000ea 9701 sbiw DISP_NUM_L, 1
0000d4 9508 ret//</editor-fold> 0000eb 9508 ret//</editor-fold>
//<editor-fold defaultstate="collapsed" desc="Реализация интерфеса 1-Wire"> //<editor-fold defaultstate="collapsed" desc="Реализация интерфеса 1-Wire">
//<editor-fold defaultstate="collapsed" desc="1-Wire: оспрос присутствия"> //<editor-fold defaultstate="collapsed" desc="1-Wire: оспрос присутствия">
; **** ОПРОС ПРИСУТСТВИЯ УСТРОЙСТВА ****************************** ; **** ОПРОС ПРИСУТСТВИЯ УСТРОЙСТВА ******************************
OW_PRESENCE: OW_PRESENCE:
0000d5 9ab9 ow_pull 0000ec 9ab9 ow_pull
0000d6 e033 0000ed e033
0000d7 eb4e 0000ee eb4e
0000d8 dfcd DELAY16 480 0000ef dfb4 DELAY16 480
0000d9 98b9 ow_release 0000f0 98b9 ow_release
0000da e030 0000f1 e030
0000db e84a 0000f2 e84a
0000dc dfc9 DELAY16 70 0000f3 dfb0 DELAY16 70
0000dd d004 rcall OW_CHECK_PRESENCE 0000f4 d004 rcall OW_CHECK_PRESENCE
0000de e033 0000f5 e033
0000df e342 0000f6 e342
0000e0 dfc5 DELAY16 410 0000f7 dfac DELAY16 410
0000e1 9508 ret 0000f8 9508 ret
//</editor-fold> //</editor-fold>
//<editor-fold defaultstate="collapsed" desc="1-Wire: проверка наличия устройства"> //<editor-fold defaultstate="collapsed" desc="1-Wire: проверка наличия устройства">
@ -1216,79 +1213,99 @@ main.asm(244): Including file 'div16u.asm'
; Если подчиненное устройство притянет шину, то устанавливаем флаг OWPRF в единицу в регистре флагов ; Если подчиненное устройство притянет шину, то устанавливаем флаг OWPRF в единицу в регистре флагов
; ;
OW_CHECK_PRESENCE: OW_CHECK_PRESENCE:
0000e2 9bb1 sbis OW_PIN, OW_LINE 0000f9 9bb1 sbis OW_PIN, OW_LINE
0000e3 6071 sbr OWFR, (1<<OWPRF) 0000fa 6071 sbr OWFR, (1<<OWPRF)
0000e4 c002 rjmp _EXIT 0000fb c002 rjmp _EXIT
0000e5 99b1 sbic OW_PIN, OW_LINE 0000fc 99b1 sbic OW_PIN, OW_LINE
0000e6 7f7e cbr OWFR, (1<<OWPRF) 0000fd 7f7e cbr OWFR, (1<<OWPRF)
_EXIT: _EXIT:
0000e7 9508 ret 0000fe 9508 ret
//</editor-fold> //</editor-fold>
//<editor-fold defaultstate="collapsed" desc="1-Wire: отправка байта"> //<editor-fold defaultstate="collapsed" desc="1-Wire: отправка байта">
OW_SEND_BYTE: OW_SEND_BYTE:
0000e8 930f push r16 0000ff 930f push r16
0000e9 931f push r17 000100 931f push r17
0000ea 2d08 mov r16, OW_CMD_r 000101 2d08 mov r16, OW_CMD_r
0000eb e018 ldi r17, 8 000102 e018 ldi r17, 8
_OW_SEND_BYTE_LOOP: _OW_SEND_BYTE_LOOP:
0000ec 9506 lsr r16 000103 9506 lsr r16
0000ed f408 brcc _OW_SEND_0 000104 f408 brcc _OW_SEND_0
0000ee f048 brcs _OW_SEND_1 000105 f048 brcs _OW_SEND_1
_OW_SEND_0: _OW_SEND_0:
0000ef 9ab9 ow_pull 000106 9ab9 ow_pull
0000f0 e030 000107 e030
0000f1 e746 000108 e746
0000f2 dfb3 DELAY16 60 000109 df9a DELAY16 60
0000f3 98b9 ow_release 00010a 98b9 ow_release
0000f4 e030 00010b e030
0000f5 e142 00010c e142
0000f6 dfaf DELAY16 10 00010d df96 DELAY16 10
0000f7 c008 rjmp _OW_SEND_BYTE_END 00010e c008 rjmp _OW_SEND_BYTE_END
_OW_SEND_1: _OW_SEND_1:
0000f8 9ab9 ow_pull 00010f 9ab9 ow_pull
0000f9 e030 000110 e030
0000fa e04a 000111 e04a
0000fb dfaa DELAY16 6 000112 df91 DELAY16 6
0000fc 98b9 ow_release 000113 98b9 ow_release
0000fd e030 000114 e030
0000fe e74e 000115 e74e
0000ff dfa6 DELAY16 64 000116 df8d DELAY16 64
_OW_SEND_BYTE_END: _OW_SEND_BYTE_END:
000100 951a dec r17 000117 951a dec r17
000101 f751 brne _OW_SEND_BYTE_LOOP 000118 f751 brne _OW_SEND_BYTE_LOOP
000102 911f pop r17 000119 911f pop r17
000103 910f pop r16 00011a 910f pop r16
000104 9508 ret 00011b 9508 ret
//</editor-fold> //</editor-fold>
//<editor-fold defaultstate="collapsed" desc="1-Wire: чтение байта"> //<editor-fold defaultstate="collapsed" desc="1-Wire: чтение байта">
;OW_RD_BYTE:
; push r16
; push r17
; ldi r16, 8
;_OW_RD_BYTE_LP:
; ow_pull
; DELAY16 6
; ow_release
; DELAY16 9
; lds r17, TEMP_L
; lsr r17
; sbic OW_PIN, OW_LINE
; sbr r17, (1<<7)
; sts TEMP_L, r17
; DELAY16 55
; dec r16
; brne _OW_RD_BYTE_LP
; pop r17
; pop r16
; ret
OW_RD_BYTE: OW_RD_BYTE:
000105 930f push r16 00011c 930f push r16
000106 931f push r17 00011d 931f push r17
000107 e008 ldi r16, 8 00011e 2700 clr r16
00011f e018 ldi r17, 8
_OW_RD_BYTE_LP: _OW_RD_BYTE_LP:
000108 9ab9 ow_pull 000120 9506 lsr r16
000109 e030 000121 9ab9 ow_pull
00010a e04a 000122 e030
00010b df9a DELAY16 6 000123 e04a
00010c 98b9 ow_release 000124 df7f DELAY16 6
00010d e030 000125 98b9 ow_release
00010e e140 000126 e030
00010f df96 DELAY16 9 000127 e140
000110 9110 006a lds r17, OW_RECEIVE 000128 df7b DELAY16 9
000112 9516 lsr r17 000129 99b1 sbic OW_PIN, OW_LINE
000113 99b1 sbic OW_PIN, OW_LINE 00012a 6800 sbr r16, (1<<7)
000114 6810 sbr r17, (1<<7) 00012b e030
000115 9310 006a sts OW_RECEIVE, r17 00012c e64c
000117 e030 00012d df76 DELAY16 55
000118 e64c 00012e 951a dec r17
000119 df8c DELAY16 55 00012f f781 brne _OW_RD_BYTE_LP
00011a 950a dec r16 000130 930c st X, r16
00011b f761 brne _OW_RD_BYTE_LP 000131 911f pop r17
00011c 911f pop r17 000132 910f pop r16
00011d 910f pop r16 000133 9508 ret
00011e 9508 ret
//</editor-fold> //</editor-fold>
@ -1300,122 +1317,122 @@ main.asm(244): Including file 'div16u.asm'
; Описание: Перемещает цифры числа в соответствующие ячейки памяти в SRAM ; Описание: Перемещает цифры числа в соответствующие ячейки памяти в SRAM
; путем деления этого числа несколько раз ; путем деления этого числа несколько раз
DISPLAY_UPD_DIGITS: DISPLAY_UPD_DIGITS:
00011f 94f8 cli 000134 94f8 cli
000120 935f push r21 000135 935f push r21
000121 e054 ldi r21, 4 ; (4 раза делим) т.к индикатор четырех разрядный 000136 e054 ldi r21, 4 ; (4 раза делим) т.к индикатор четырех разрядный
; инициализация указателя (за каждый проход цикла будет инкрементироваться) ; инициализация указателя (за каждый проход цикла будет инкрементироваться)
000122 e6a3 ldi XL, LOW(DIGITS) 000137 e6a3 ldi XL, LOW(DIGITS)
000123 e0b0 ldi XH, HIGH(DIGITS) 000138 e0b0 ldi XH, HIGH(DIGITS)
.equ dividend = SRAM_TEMP_1 ; число которе будем делить .equ dividend = SRAM_TEMP_1 ; число которе будем делить
.equ divisor = 10 ; на что делим .equ divisor = 10 ; на что делим
; загружаем число которое хотим поделить в адрес SRAM делимого ; загружаем число которое хотим поделить в адрес SRAM делимого
000124 9380 0061 sts dividend, DISP_NUM_L 000139 9380 0061 sts dividend, DISP_NUM_L
000126 9390 0062 sts dividend+1, DISP_NUM_H 00013b 9390 0062 sts dividend+1, DISP_NUM_H
; четыре раза производим деление для получения остатков ; четыре раза производим деление для получения остатков
DIV_LOOP: DIV_LOOP:
; заполняем нужные регистры ; заполняем нужные регистры
000128 9100 0061 lds dd16uL, dividend 00013d 9100 0061 lds dd16uL, dividend
00012a 9110 0062 lds dd16uH, dividend+1 00013f 9110 0062 lds dd16uH, dividend+1
00012c e02a ldi dv16uL, LOW(divisor) 000141 e02a ldi dv16uL, LOW(divisor)
00012d e030 ldi dv16uH, HIGH(divisor) 000142 e030 ldi dv16uH, HIGH(divisor)
00012e df64 rcall div16u ; делим 000143 df4d rcall div16u ; делим
00012f 92ed st X+, drem16uL ; сохраняем остаток в ячейку по указателю и увеличиваем его 000144 92ed st X+, drem16uL ; сохраняем остаток в ячейку по указателю и увеличиваем его
; обновляем делимое ; обновляем делимое
000130 9300 0061 sts dividend, dres16uL 000145 9300 0061 sts dividend, dres16uL
000132 9310 0062 sts dividend+1, dres16uH 000147 9310 0062 sts dividend+1, dres16uH
000134 955a dec r21 ; декрементируем счетчик цикла 000149 955a dec r21 ; декрементируем счетчик цикла
000135 f791 brne DIV_LOOP ; делим еще раз если не 0 00014a f791 brne DIV_LOOP ; делим еще раз если не 0
000136 915f pop r21 00014b 915f pop r21
000137 9478 sei 00014c 9478 sei
000138 9508 ret 00014d 9508 ret
//</editor-fold> //</editor-fold>
//<editor-fold defaultstate="collapsed" desc="Подпрограмма: получение символа для индикатора"> //<editor-fold defaultstate="collapsed" desc="Подпрограмма: получение символа для индикатора">
; **** ЗАГРУЖАЕТ НУЖНЫЙ АДРЕС СИМВОЛА В R0 *********************** ; **** ЗАГРУЖАЕТ НУЖНЫЙ АДРЕС СИМВОЛА В R0 ***********************
DISPLAY_DECODER: DISPLAY_DECODER:
000139 930f push r16 00014e 930f push r16
00013a 931f push r17 00014f 931f push r17
00013b ece4 ldi ZL, LOW(2*DISPLAY_SYMBOLS) 000150 eeee ldi ZL, LOW(2*DISPLAY_SYMBOLS)
00013c e0f2 ldi ZH, HIGH(2*DISPLAY_SYMBOLS) 000151 e0f2 ldi ZH, HIGH(2*DISPLAY_SYMBOLS)
00013d 2711 clr TEMP_REG_B 000152 2711 clr TEMP_REG_B
00013e 0fe0 add ZL, TEMP_REG_A 000153 0fe0 add ZL, TEMP_REG_A
00013f 1ff1 adc ZH, TEMP_REG_B 000154 1ff1 adc ZH, TEMP_REG_B
000140 9004 lpm r0, Z 000155 9004 lpm r0, Z
000141 911f pop r17 000156 911f pop r17
000142 910f pop r16 000157 910f pop r16
000143 9508 ret//</editor-fold> 000158 9508 ret//</editor-fold>
//<editor-fold defaultstate="collapsed" desc="Подпрограмма: устранение дребезга кнопки"> //<editor-fold defaultstate="collapsed" desc="Подпрограмма: устранение дребезга кнопки">
DEBOUNCE_SW: DEBOUNCE_SW:
000144 930f push r16 000159 930f push r16
000145 931f push r17 00015a 931f push r17
000146 932f push r18 00015b 932f push r18
000147 e02a ldi r18, 10 00015c e02a ldi r18, 10
_loop_2: _loop_2:
000148 ef1f ldi r17, 255 00015d ef1f ldi r17, 255
_loop_0: _loop_0:
000149 ef0f ldi r16, 255 00015e ef0f ldi r16, 255
_dec_0: _dec_0:
00014a 950a dec r16 00015f 950a dec r16
00014b f7f1 brne _dec_0 000160 f7f1 brne _dec_0
_loop_1: _loop_1:
00014c 951a dec r17 000161 951a dec r17
00014d f7d9 brne _loop_0 000162 f7d9 brne _loop_0
_loop_3: _loop_3:
00014e 952a dec r18 000163 952a dec r18
00014f f7c1 brne _loop_2 000164 f7c1 brne _loop_2
000150 912f pop r18 000165 912f pop r18
000151 911f pop r17 000166 911f pop r17
000152 910f pop r16 000167 910f pop r16
000153 9508 ret//</editor-fold> 000168 9508 ret//</editor-fold>
//<editor-fold defaultstate="collapsed" desc="Подпрограмма: задержка"> //<editor-fold defaultstate="collapsed" desc="Подпрограмма: задержка">
DELAY: DELAY:
000154 930f push r16 000169 930f push r16
000155 931f push r17 00016a 931f push r17
000156 ef0f ldi r16, 255 00016b ef0f ldi r16, 255
_DELAY_1: _DELAY_1:
000157 ef1f ldi r17, 255 00016c ef1f ldi r17, 255
_DELAY_2: _DELAY_2:
000158 951a dec r17 00016d 951a dec r17
000159 0000 nop 00016e 0000 nop
00015a 0000 nop 00016f 0000 nop
00015b 0000 nop 000170 0000 nop
00015c f7d9 brne _DELAY_2 000171 f7d9 brne _DELAY_2
00015d 950a dec r16 000172 950a dec r16
00015e f7c1 brne _DELAY_1 000173 f7c1 brne _DELAY_1
00015f 911f pop r17 000174 911f pop r17
000160 910f pop r16 000175 910f pop r16
000161 9508 ret //</editor-fold> 000176 9508 ret //</editor-fold>
//<editor-fold defaultstate="collapsed" desc="Символы для индикатора"> //<editor-fold defaultstate="collapsed" desc="Символы для индикатора">
DISPLAY_SYMBOLS: DISPLAY_SYMBOLS:
; HGFEDCBA HGFEDCBA ; HGFEDCBA HGFEDCBA
000162 f9c0 .DB 0b11000000, 0b11111001 ; 0, 1 000177 f9c0 .DB 0b11000000, 0b11111001 ; 0, 1
000163 b0a4 .DB 0b10100100, 0b10110000 ; 2, 3 000178 b0a4 .DB 0b10100100, 0b10110000 ; 2, 3
000164 9299 .DB 0b10011001, 0b10010010 ; 4, 5 000179 9299 .DB 0b10011001, 0b10010010 ; 4, 5
000165 f882 .DB 0b10000010, 0b11111000 ; 6, 7 00017a f882 .DB 0b10000010, 0b11111000 ; 6, 7
000166 9080 .DB 0b10000000, 0b10010000 ; 8, 9 00017b 9080 .DB 0b10000000, 0b10010000 ; 8, 9
000167 bf9c .DB 0b10011100, 0b10111111 ; °, -//</editor-fold> 00017c bf9c .DB 0b10011100, 0b10111111 ; °, -//</editor-fold>
//</editor-fold> //</editor-fold>
@ -1441,10 +1458,10 @@ counted separately from r26..r31 here.
.dseg memory usage only counts static data declared with .byte .dseg memory usage only counts static data declared with .byte
"ATtiny2313A" register use summary: "ATtiny2313A" register use summary:
x : 1 y : 0 z : 1 r0 : 2 r1 : 2 r2 : 0 r3 : 0 r4 : 0 x : 2 y : 0 z : 1 r0 : 2 r1 : 2 r2 : 0 r3 : 0 r4 : 0
r5 : 0 r6 : 0 r7 : 0 r8 : 5 r9 : 0 r10: 0 r11: 0 r12: 0 r5 : 0 r6 : 0 r7 : 0 r8 : 5 r9 : 0 r10: 0 r11: 0 r12: 0
r13: 0 r14: 5 r15: 5 r16: 72 r17: 32 r18: 7 r19: 14 r20: 25 r13: 0 r14: 5 r15: 5 r16: 75 r17: 40 r18: 15 r19: 14 r20: 25
r21: 8 r22: 0 r23: 4 r24: 6 r25: 4 r26: 1 r27: 1 r28: 0 r21: 8 r22: 0 r23: 4 r24: 6 r25: 4 r26: 3 r27: 3 r28: 0
r29: 0 r30: 2 r31: 2 r29: 0 r30: 2 r31: 2
Registers used: 20 out of 35 (57.1%) Registers used: 20 out of 35 (57.1%)
@ -1455,25 +1472,25 @@ brcc : 3 brcs : 1 break : 0 breq : 0 brge : 1 brhc : 0
brhs : 0 brid : 0 brie : 0 brlo : 0 brlt : 0 brmi : 0 brhs : 0 brid : 0 brie : 0 brlo : 0 brlt : 0 brmi : 0
brne : 16 brpl : 0 brsh : 0 brtc : 0 brts : 0 brvc : 0 brne : 16 brpl : 0 brsh : 0 brtc : 0 brts : 0 brvc : 0
brvs : 0 bset : 0 bst : 0 cbi : 18 cbr : 1 clc : 1 brvs : 0 bset : 0 bst : 0 cbi : 18 cbr : 1 clc : 1
clh : 0 cli : 3 cln : 0 clr : 5 cls : 0 clt : 0 clh : 0 cli : 3 cln : 0 clr : 6 cls : 0 clt : 0
clv : 0 clz : 0 com : 0 cp : 0 cpc : 0 cpi : 8 clv : 0 clz : 0 com : 0 cp : 0 cpc : 0 cpi : 8
cpse : 0 dec : 9 eor : 0 icall : 0 ijmp : 0 in : 1 cpse : 0 dec : 9 eor : 0 icall : 0 ijmp : 0 in : 1
inc : 1 ld : 0 ldd : 0 ldi : 55 lds : 11 lpm : 2 inc : 1 ld : 0 ldd : 0 ldi : 58 lds : 13 lpm : 2
lsl : 0 lsr : 2 mov : 7 movw : 0 neg : 0 nop : 4 lsl : 0 lsr : 6 mov : 8 movw : 0 neg : 0 nop : 4
or : 0 ori : 0 out : 12 pop : 18 push : 18 rcall : 43 or : 0 ori : 0 out : 12 pop : 20 push : 20 rcall : 38
ret : 14 reti : 1 rjmp : 9 rol : 4 ror : 0 sbc : 1 ret : 14 reti : 1 rjmp : 9 rol : 4 ror : 4 sbc : 1
sbci : 1 sbi : 10 sbic : 2 sbis : 4 sbiw : 1 sbr : 2 sbci : 1 sbi : 10 sbic : 2 sbis : 4 sbiw : 1 sbr : 2
sbrc : 1 sbrs : 1 sec : 1 seh : 0 sei : 3 sen : 0 sbrc : 1 sbrs : 1 sec : 1 seh : 0 sei : 3 sen : 0
ser : 0 ses : 0 set : 0 sev : 0 sez : 0 sleep : 0 ser : 0 ses : 0 set : 0 sev : 0 sez : 0 sleep : 0
spm : 0 st : 1 std : 0 sts : 14 sub : 2 subi : 1 spm : 0 st : 2 std : 0 sts : 16 sub : 2 subi : 1
swap : 0 tst : 0 wdr : 0 swap : 0 tst : 0 wdr : 0
Instructions used: 45 out of 105 (42.9%) Instructions used: 46 out of 105 (43.8%)
"ATtiny2313A" memory use summary [bytes]: "ATtiny2313A" memory use summary [bytes]:
Segment Begin End Code Data Used Size Use% Segment Begin End Code Data Used Size Use%
--------------------------------------------------------------- ---------------------------------------------------------------
[.cseg] 0x000000 0x0002d0 684 12 696 2048 34.0% [.cseg] 0x000000 0x0002fa 726 12 738 2048 36.0%
[.dseg] 0x000060 0x00006b 0 11 11 128 8.6% [.dseg] 0x000060 0x00006c 0 12 12 128 9.4%
[.eseg] 0x000000 0x000000 0 0 0 128 0.0% [.eseg] 0x000000 0x000000 0 0 0 128 0.0%
Assembly complete, 0 errors, 6 warnings Assembly complete, 0 errors, 6 warnings

View File

@ -1,5 +1,5 @@
AVRASM ver. 2.2.7 main.asm Mon Jun 19 15:34:12 2023 AVRASM ver. 2.2.7 main.asm Mon Jun 19 19:48:15 2023
EQU SIGNATURE_000 0000001e EQU SIGNATURE_000 0000001e
@ -527,27 +527,28 @@ DSEG DIGITS 00000063
DSEG CURRENT_DIGIT 00000067 DSEG CURRENT_DIGIT 00000067
DSEG SW_FLAGS 00000068 DSEG SW_FLAGS 00000068
DSEG HYSTERESIS 00000069 DSEG HYSTERESIS 00000069
DSEG OW_RECEIVE 0000006a DSEG TEMP_L 0000006a
DSEG TEMP_H 0000006b
CSEG RESET_vect 0000004a CSEG RESET_vect 0000004a
CSEG TIMER0_COMPA_vect 0000000e CSEG TIMER0_COMPA_vect 0000000e
CSEG _CLR_CURRENT_DIGIT 00000017 CSEG _CLR_CURRENT_DIGIT 00000017
CSEG _indicate_1 0000001a CSEG _indicate_1 0000001a
CSEG _indicate_2 00000024 CSEG _indicate_2 00000024
CSEG DISPLAY_DECODER 00000139 CSEG DISPLAY_DECODER 0000014e
CSEG USI_TRANSMIT 000000c3 CSEG USI_TRANSMIT 000000da
CSEG _indicate_3 0000002e CSEG _indicate_3 0000002e
CSEG _indicate_4 00000038 CSEG _indicate_4 00000038
CSEG _indicate_exit 00000042 CSEG _indicate_exit 00000042
CSEG MCU_INIT 0000004c CSEG MCU_INIT 0000004c
CSEG TEMP_CONV 000000b7 CSEG LOOP 0000006b
CSEG DEBOUNCE_SW 00000144 CSEG _STATE_DEFAULT 0000006d
CSEG TEMP_RD 000000aa CSEG _STATE_PROGRAM 00000080
CSEG LOOP 0000006f CSEG DISPLAY_UPD_DIGITS 00000134
CSEG _STATE_DEFAULT 00000071 CSEG TEMP_CONV 000000ce
CSEG _STATE_PROGRAM 00000082 CSEG DEBOUNCE_SW 00000159
CSEG DISPLAY_UPD_DIGITS 0000011f CSEG TEMP_RD 000000a8
CSEG _STATE_ERROR 00000086 CSEG _STATE_ERROR 00000084
CSEG SW_CHECK_PROCESS 000000cf CSEG SW_CHECK_PROCESS 000000e6
DEF drem16uL r14 DEF drem16uL r14
DEF drem16uH r15 DEF drem16uH r15
DEF dres16uL r16 DEF dres16uL r16
@ -557,31 +558,31 @@ DEF dd16uH r17
DEF dv16uL r18 DEF dv16uL r18
DEF dv16uH r19 DEF dv16uH r19
DEF dcnt16u r20 DEF dcnt16u r20
CSEG div16u 00000093 CSEG div16u 00000091
CSEG d16u_1 00000096 CSEG d16u_1 00000094
CSEG d16u_2 0000009b CSEG d16u_2 00000099
CSEG d16u_3 000000a4 CSEG d16u_3 000000a2
CSEG DELAY_LOOP_16 000000a6 CSEG DELAY_LOOP_16 000000a4
CSEG OW_PRESENCE 000000d5 CSEG OW_PRESENCE 000000ec
CSEG OW_SEND_BYTE 000000e8 CSEG OW_SEND_BYTE 000000ff
CSEG OW_RD_BYTE 00000105 CSEG OW_RD_BYTE 0000011c
CSEG _USI_TRANSMIT_LOOP 000000c8 CSEG _USI_TRANSMIT_LOOP 000000df
CSEG OW_CHECK_PRESENCE 000000e2 CSEG OW_CHECK_PRESENCE 000000f9
CSEG _EXIT 000000e7 CSEG _EXIT 000000fe
CSEG _OW_SEND_BYTE_LOOP 000000ec CSEG _OW_SEND_BYTE_LOOP 00000103
CSEG _OW_SEND_0 000000ef CSEG _OW_SEND_0 00000106
CSEG _OW_SEND_1 000000f8 CSEG _OW_SEND_1 0000010f
CSEG _OW_SEND_BYTE_END 00000100 CSEG _OW_SEND_BYTE_END 00000117
CSEG _OW_RD_BYTE_LP 00000108 CSEG _OW_RD_BYTE_LP 00000120
EQU dividend 00000061 EQU dividend 00000061
EQU divisor 0000000a EQU divisor 0000000a
CSEG DIV_LOOP 00000128 CSEG DIV_LOOP 0000013d
CSEG DISPLAY_SYMBOLS 00000162 CSEG DISPLAY_SYMBOLS 00000177
CSEG _loop_2 00000148 CSEG _loop_2 0000015d
CSEG _loop_0 00000149 CSEG _loop_0 0000015e
CSEG _dec_0 0000014a CSEG _dec_0 0000015f
CSEG _loop_1 0000014c CSEG _loop_1 00000161
CSEG _loop_3 0000014e CSEG _loop_3 00000163
CSEG DELAY 00000154 CSEG DELAY 00000169
CSEG _DELAY_1 00000157 CSEG _DELAY_1 0000016c
CSEG _DELAY_2 00000158 CSEG _DELAY_2 0000016d

View File

@ -30,52 +30,53 @@
<CURRENT_DIGIT><FILE>main.asm</FILE><LINE>27</LINE></CURRENT_DIGIT> <CURRENT_DIGIT><FILE>main.asm</FILE><LINE>27</LINE></CURRENT_DIGIT>
<SW_FLAGS><FILE>main.asm</FILE><LINE>28</LINE></SW_FLAGS> <SW_FLAGS><FILE>main.asm</FILE><LINE>28</LINE></SW_FLAGS>
<HYSTERESIS><FILE>main.asm</FILE><LINE>29</LINE></HYSTERESIS> <HYSTERESIS><FILE>main.asm</FILE><LINE>29</LINE></HYSTERESIS>
<OW_RECEIVE><FILE>main.asm</FILE><LINE>30</LINE></OW_RECEIVE> <TEMP_L><FILE>main.asm</FILE><LINE>30</LINE></TEMP_L>
<RESET_vect><FILE>main.asm</FILE><LINE>124</LINE></RESET_vect> <TEMP_H><FILE>main.asm</FILE><LINE>31</LINE></TEMP_H>
<TIMER0_COMPA_vect><FILE>main.asm</FILE><LINE>49</LINE></TIMER0_COMPA_vect> <RESET_vect><FILE>main.asm</FILE><LINE>125</LINE></RESET_vect>
<_CLR_CURRENT_DIGIT><FILE>main.asm</FILE><LINE>60</LINE></_CLR_CURRENT_DIGIT> <TIMER0_COMPA_vect><FILE>main.asm</FILE><LINE>50</LINE></TIMER0_COMPA_vect>
<_indicate_1><FILE>main.asm</FILE><LINE>64</LINE></_indicate_1> <_CLR_CURRENT_DIGIT><FILE>main.asm</FILE><LINE>61</LINE></_CLR_CURRENT_DIGIT>
<_indicate_2><FILE>main.asm</FILE><LINE>76</LINE></_indicate_2> <_indicate_1><FILE>main.asm</FILE><LINE>65</LINE></_indicate_1>
<DISPLAY_DECODER><FILE>main.asm</FILE><LINE>464</LINE></DISPLAY_DECODER> <_indicate_2><FILE>main.asm</FILE><LINE>77</LINE></_indicate_2>
<USI_TRANSMIT><FILE>main.asm</FILE><LINE>293</LINE></USI_TRANSMIT> <DISPLAY_DECODER><FILE>main.asm</FILE><LINE>481</LINE></DISPLAY_DECODER>
<_indicate_3><FILE>main.asm</FILE><LINE>88</LINE></_indicate_3> <USI_TRANSMIT><FILE>main.asm</FILE><LINE>290</LINE></USI_TRANSMIT>
<_indicate_4><FILE>main.asm</FILE><LINE>100</LINE></_indicate_4> <_indicate_3><FILE>main.asm</FILE><LINE>89</LINE></_indicate_3>
<_indicate_exit><FILE>main.asm</FILE><LINE>112</LINE></_indicate_exit> <_indicate_4><FILE>main.asm</FILE><LINE>101</LINE></_indicate_4>
<MCU_INIT><FILE>main.asm</FILE><LINE>130</LINE></MCU_INIT> <_indicate_exit><FILE>main.asm</FILE><LINE>113</LINE></_indicate_exit>
<TEMP_CONV><FILE>main.asm</FILE><LINE>272</LINE></TEMP_CONV> <MCU_INIT><FILE>main.asm</FILE><LINE>131</LINE></MCU_INIT>
<DEBOUNCE_SW><FILE>main.asm</FILE><LINE>481</LINE></DEBOUNCE_SW> <LOOP><FILE>main.asm</FILE><LINE>171</LINE></LOOP>
<TEMP_RD><FILE>main.asm</FILE><LINE>253</LINE></TEMP_RD> <_STATE_DEFAULT><FILE>main.asm</FILE><LINE>175</LINE></_STATE_DEFAULT>
<LOOP><FILE>main.asm</FILE><LINE>201</LINE></LOOP> <_STATE_PROGRAM><FILE>main.asm</FILE><LINE>195</LINE></_STATE_PROGRAM>
<_STATE_DEFAULT><FILE>main.asm</FILE><LINE>205</LINE></_STATE_DEFAULT> <DISPLAY_UPD_DIGITS><FILE>main.asm</FILE><LINE>439</LINE></DISPLAY_UPD_DIGITS>
<_STATE_PROGRAM><FILE>main.asm</FILE><LINE>224</LINE></_STATE_PROGRAM> <TEMP_CONV><FILE>main.asm</FILE><LINE>269</LINE></TEMP_CONV>
<DISPLAY_UPD_DIGITS><FILE>main.asm</FILE><LINE>422</LINE></DISPLAY_UPD_DIGITS> <DEBOUNCE_SW><FILE>main.asm</FILE><LINE>498</LINE></DEBOUNCE_SW>
<_STATE_ERROR><FILE>main.asm</FILE><LINE>229</LINE></_STATE_ERROR> <TEMP_RD><FILE>main.asm</FILE><LINE>224</LINE></TEMP_RD>
<SW_CHECK_PROCESS><FILE>main.asm</FILE><LINE>325</LINE></SW_CHECK_PROCESS> <_STATE_ERROR><FILE>main.asm</FILE><LINE>200</LINE></_STATE_ERROR>
<SW_CHECK_PROCESS><FILE>main.asm</FILE><LINE>322</LINE></SW_CHECK_PROCESS>
<div16u><FILE>div16u.asm</FILE><LINE>32</LINE></div16u> <div16u><FILE>div16u.asm</FILE><LINE>32</LINE></div16u>
<d16u_1><FILE>div16u.asm</FILE><LINE>36</LINE></d16u_1> <d16u_1><FILE>div16u.asm</FILE><LINE>36</LINE></d16u_1>
<d16u_2><FILE>div16u.asm</FILE><LINE>42</LINE></d16u_2> <d16u_2><FILE>div16u.asm</FILE><LINE>42</LINE></d16u_2>
<d16u_3><FILE>div16u.asm</FILE><LINE>52</LINE></d16u_3> <d16u_3><FILE>div16u.asm</FILE><LINE>52</LINE></d16u_3>
<DELAY_LOOP_16><FILE>main.asm</FILE><LINE>246</LINE></DELAY_LOOP_16> <DELAY_LOOP_16><FILE>main.asm</FILE><LINE>217</LINE></DELAY_LOOP_16>
<OW_PRESENCE><FILE>main.asm</FILE><LINE>338</LINE></OW_PRESENCE> <OW_PRESENCE><FILE>main.asm</FILE><LINE>335</LINE></OW_PRESENCE>
<OW_SEND_BYTE><FILE>main.asm</FILE><LINE>363</LINE></OW_SEND_BYTE> <OW_SEND_BYTE><FILE>main.asm</FILE><LINE>360</LINE></OW_SEND_BYTE>
<OW_RD_BYTE><FILE>main.asm</FILE><LINE>392</LINE></OW_RD_BYTE> <OW_RD_BYTE><FILE>main.asm</FILE><LINE>409</LINE></OW_RD_BYTE>
<_USI_TRANSMIT_LOOP><FILE>main.asm</FILE><LINE>311</LINE></_USI_TRANSMIT_LOOP> <_USI_TRANSMIT_LOOP><FILE>main.asm</FILE><LINE>308</LINE></_USI_TRANSMIT_LOOP>
<OW_CHECK_PRESENCE><FILE>main.asm</FILE><LINE>352</LINE></OW_CHECK_PRESENCE> <OW_CHECK_PRESENCE><FILE>main.asm</FILE><LINE>349</LINE></OW_CHECK_PRESENCE>
<_EXIT><FILE>main.asm</FILE><LINE>358</LINE></_EXIT> <_EXIT><FILE>main.asm</FILE><LINE>355</LINE></_EXIT>
<_OW_SEND_BYTE_LOOP><FILE>main.asm</FILE><LINE>368</LINE></_OW_SEND_BYTE_LOOP> <_OW_SEND_BYTE_LOOP><FILE>main.asm</FILE><LINE>365</LINE></_OW_SEND_BYTE_LOOP>
<_OW_SEND_0><FILE>main.asm</FILE><LINE>372</LINE></_OW_SEND_0> <_OW_SEND_0><FILE>main.asm</FILE><LINE>369</LINE></_OW_SEND_0>
<_OW_SEND_1><FILE>main.asm</FILE><LINE>378</LINE></_OW_SEND_1> <_OW_SEND_1><FILE>main.asm</FILE><LINE>375</LINE></_OW_SEND_1>
<_OW_SEND_BYTE_END><FILE>main.asm</FILE><LINE>383</LINE></_OW_SEND_BYTE_END> <_OW_SEND_BYTE_END><FILE>main.asm</FILE><LINE>380</LINE></_OW_SEND_BYTE_END>
<_OW_RD_BYTE_LP><FILE>main.asm</FILE><LINE>396</LINE></_OW_RD_BYTE_LP> <_OW_RD_BYTE_LP><FILE>main.asm</FILE><LINE>414</LINE></_OW_RD_BYTE_LP>
<DIV_LOOP><FILE>main.asm</FILE><LINE>439</LINE></DIV_LOOP> <DIV_LOOP><FILE>main.asm</FILE><LINE>456</LINE></DIV_LOOP>
<DISPLAY_SYMBOLS><FILE>main.asm</FILE><LINE>531</LINE></DISPLAY_SYMBOLS> <DISPLAY_SYMBOLS><FILE>main.asm</FILE><LINE>548</LINE></DISPLAY_SYMBOLS>
<_loop_2><FILE>main.asm</FILE><LINE>487</LINE></_loop_2> <_loop_2><FILE>main.asm</FILE><LINE>504</LINE></_loop_2>
<_loop_0><FILE>main.asm</FILE><LINE>489</LINE></_loop_0> <_loop_0><FILE>main.asm</FILE><LINE>506</LINE></_loop_0>
<_dec_0><FILE>main.asm</FILE><LINE>491</LINE></_dec_0> <_dec_0><FILE>main.asm</FILE><LINE>508</LINE></_dec_0>
<_loop_1><FILE>main.asm</FILE><LINE>494</LINE></_loop_1> <_loop_1><FILE>main.asm</FILE><LINE>511</LINE></_loop_1>
<_loop_3><FILE>main.asm</FILE><LINE>497</LINE></_loop_3> <_loop_3><FILE>main.asm</FILE><LINE>514</LINE></_loop_3>
<DELAY><FILE>main.asm</FILE><LINE>508</LINE></DELAY> <DELAY><FILE>main.asm</FILE><LINE>525</LINE></DELAY>
<_DELAY_1><FILE>main.asm</FILE><LINE>513</LINE></_DELAY_1> <_DELAY_1><FILE>main.asm</FILE><LINE>530</LINE></_DELAY_1>
<_DELAY_2><FILE>main.asm</FILE><LINE>515</LINE></_DELAY_2> <_DELAY_2><FILE>main.asm</FILE><LINE>532</LINE></_DELAY_2>
</LABELS> </LABELS>
</ASSEMBLER_INFO> </ASSEMBLER_INFO>

View File

@ -27,7 +27,8 @@ DIGITS: .BYTE 4 ; Ячейки, где хранят
CURRENT_DIGIT: .BYTE 1 ; Номер разряда индикатора, который сейчас горит CURRENT_DIGIT: .BYTE 1 ; Номер разряда индикатора, который сейчас горит
SW_FLAGS: .BYTE 1 ; Состояние кнопок SW_FLAGS: .BYTE 1 ; Состояние кнопок
HYSTERESIS: .BYTE 1 ; Отклонение температуры от уставки HYSTERESIS: .BYTE 1 ; Отклонение температуры от уставки
OW_RECEIVE: .BYTE 1 TEMP_L: .BYTE 1
TEMP_H: .BYTE 1
;//</editor-fold> ;//</editor-fold>
@ -152,43 +153,12 @@ MCU_INIT:
sts MCU_STATE, r16 ; переводим МК сразу в режим измерения температуры sts MCU_STATE, r16 ; переводим МК сразу в режим измерения температуры
clr r16 clr r16
sts OW_RECEIVE, r16 sts TEMP_L, r16
sts TEMP_H, r16
display_load 0 ; загружаем число, которое нужно показать на индикатор display_load 0 ; загружаем число, которое нужно показать на индикатор
; ldi r16, 0b10000000 lds r16, TEMP_L
; lsr r16
; sbr r16, (1<<7)
; sbrc OWFR, OWPRF
; ldi r16, DS18B20_CMD_SKIPROM
; mov r8, r16
; rcall OW_PRESENCE
; rcall OW_SEND_BYTE
;
; ldi r16, DS18B20_CMD_RSCRATCHPAD
; mov r8, r16
;;; rcall OW_PRESENCE
; rcall OW_SEND_BYTE
;
; rcall OW_RD_BYTE
;; rcall OW_RD_BYTE
; rcall TEMP_CONV
; rcall OW_PRESENCE
rcall TEMP_CONV
rcall DEBOUNCE_SW
rcall DEBOUNCE_SW
rcall DEBOUNCE_SW
rcall DEBOUNCE_SW
rcall TEMP_RD
lds r16, OW_RECEIVE
mov DISP_NUM_L, r16 mov DISP_NUM_L, r16
ldi DISP_NUM_H, 0 ldi DISP_NUM_H, 0
@ -206,20 +176,21 @@ _STATE_DEFAULT:
cpi r16, MCU_STATE_DEFAULT cpi r16, MCU_STATE_DEFAULT
brne _STATE_PROGRAM brne _STATE_PROGRAM
rcall DISPLAY_UPD_DIGITS rcall DISPLAY_UPD_DIGITS
; rcall TEMP_RD
sbrc OWFR, OWPRF sbrc OWFR, OWPRF
sbi PORTD, PD6 sbi PORTD, PD6
sbrs OWFR, OWPRF sbrs OWFR, OWPRF
cbi PORTD, PD6 cbi PORTD, PD6
rcall TEMP_CONV rcall TEMP_CONV
rcall DEBOUNCE_SW rcall DEBOUNCE_SW
rcall DEBOUNCE_SW rcall DEBOUNCE_SW
rcall DEBOUNCE_SW rcall DEBOUNCE_SW
rcall DEBOUNCE_SW rcall DEBOUNCE_SW
rcall TEMP_RD rcall TEMP_RD
lds r17, OW_RECEIVE lds r17, TEMP_L
mov DISP_NUM_L, r17 mov DISP_NUM_L, r17
ldi DISP_NUM_H, 0 lds r17, TEMP_H
mov DISP_NUM_H, r17
_STATE_PROGRAM: _STATE_PROGRAM:
cpi r16, MCU_STATE_PROGRAM cpi r16, MCU_STATE_PROGRAM
@ -252,6 +223,8 @@ DELAY_LOOP_16:
//<editor-fold defaultstate="collapsed" desc="Подпрограмма: чтение и опрос температуры"> //<editor-fold defaultstate="collapsed" desc="Подпрограмма: чтение и опрос температуры">
TEMP_RD: TEMP_RD:
push r16 push r16
push r17
push r18
cli cli
rcall OW_PRESENCE rcall OW_PRESENCE
@ -263,9 +236,33 @@ TEMP_RD:
mov OW_CMD_r, r16 mov OW_CMD_r, r16
rcall OW_SEND_BYTE rcall OW_SEND_BYTE
ldi XL, LOW(TEMP_L)
ldi XH, HIGH(TEMP_L)
rcall OW_RD_BYTE rcall OW_RD_BYTE
ldi XL, LOW(TEMP_H)
ldi XH, HIGH(TEMP_H)
rcall OW_RD_BYTE
lds r17, TEMP_L
lds r18, TEMP_H
lsr r18
ror r17
lsr r18
ror r17
lsr r18
ror r17
lsr r18
ror r17
sts TEMP_L, r17
sts TEMP_H, r18
sei sei
pop r18
pop r17
pop r16 pop r16
ret ret
; ;
@ -362,7 +359,7 @@ _EXIT:
//<editor-fold defaultstate="collapsed" desc="1-Wire: отправка байта"> //<editor-fold defaultstate="collapsed" desc="1-Wire: отправка байта">
OW_SEND_BYTE: OW_SEND_BYTE:
push r16 push r16
push r17 push r17
mov r16, OW_CMD_r mov r16, OW_CMD_r
ldi r17, 8 ldi r17, 8
_OW_SEND_BYTE_LOOP: _OW_SEND_BYTE_LOOP:
@ -392,20 +389,20 @@ _OW_SEND_BYTE_END:
OW_RD_BYTE: OW_RD_BYTE:
push r16 push r16
push r17 push r17
ldi r16, 8 clr r16
ldi r17, 8
_OW_RD_BYTE_LP: _OW_RD_BYTE_LP:
lsr r16
ow_pull ow_pull
DELAY16 6 DELAY16 6
ow_release ow_release
DELAY16 9 DELAY16 9
lds r17, OW_RECEIVE
lsr r17
sbic OW_PIN, OW_LINE sbic OW_PIN, OW_LINE
sbr r17, (1<<7) sbr r16, (1<<7)
sts OW_RECEIVE, r17
DELAY16 55 DELAY16 55
dec r16 dec r17
brne _OW_RD_BYTE_LP brne _OW_RD_BYTE_LP
st X, r16
pop r17 pop r17
pop r16 pop r16
ret ret

View File

@ -2,43 +2,46 @@
:0200000049C0F5 :0200000049C0F5
:10001A0000C04F935F930F935FB7409167004530DD :10001A0000C04F935F930F935FB7409167004530DD
:10002A000CF403C0442740936700403041F493988E :10002A000CF403C0442740936700403041F493988E
:10003A0094989598929A00916600FED087D04130A4 :10003A0094989598929A0091660015D19FD0413074
:10004A0041F4929894989598939A00916500F4D007 :10004A0041F4929894989598939A009165000BD1EF
:10005A007DD0423041F4929893989598949A009161 :10005A0095D0423041F4929893989598949A009149
:10006A006400EAD073D0433041F4929893989498FC :10006A00640001D18BD0433041F4929893989498CC
:10007A00959A00916300E0D069D043954093670058 :10007A00959A00916300F7D081D043954093670029
:10008A005FBF0F915F914F9118950FED0DBF0EE76E :10008A005FBF0F915F914F9118950FED0DBF0EE76E
:10009A0001BB01EC07BB0CE108BB02E000BF05E0B5 :10009A0001BB01EC07BB0CE108BB02E000BF05E0B5
:1000AA0003BF09E106BF01E009BF112410926700EE :1000AA0003BF09E106BF01E009BF112410926700EE
:1000BA0000E000936000002700936A0080E090E06F :1000BA0000E000936000002700936A0080E090E06F
:1000CA00C6D056D00CEC802E66D004E4802E63D0C5 :1000CA0051D0DCD0DBD0DAD0D9D03FD000916A0051
:1000DA004FD00CEC802E5FD00EEB802E5CD00091BE :1000DA00802F90E000916000003079F4AAD070FD82
:1000EA006A00802F90E000916000003039F48AD0D5 :1000EA00969A70FF96983ED0C9D0C8D0C7D0C6D0CD
:1000FA0070FD969A70FF9698AAD0A9D0013011F493 :1000FA002CD010916A00812F90E0013011F499D030
:10010A0081D030D0023079F71BE01093630010934E :10010A0049D0023039F71BE0109363001093640062
:10011A00640010936500109366000000E4CFEE249B :10011A0010936500109366000000DCCFEE24FF18F0
:10012A00FF1841E1001F111F4A9509F40895EE1CBA :10012A0041E1001F111F4A9509F40895EE1CFF1CB6
:10013A00FF1CE21AF30A20F4E20EF31E8894F2CFAF :10013A00E21AF30A20F4E20EF31E8894F2CF08942E
:10014A000894F0CF41503040E8F708950F930FB864 :10014A00F0CF41503040E8F708950F93F89428D043
:10015A0000E40EB90BE10DB9769BFDCFC09AC098A9 :10015A000CEC802E38D00EEB802E35D050D078940F
:10016A000F91089574D0B29B0196B39B019708959D :10016A000F9108950F93F8941BD00CEC802E2BD08E
:10017A00B99A33E04EEBE6DFB99830E04AE8E2DFBD :10017A0004E4802E28D078940F9108950F930FB835
:10018A0004D033E042E3DEDF0895B19B716002C020 :10018A0000E40EB90BE10DB9769BFDCFC09AC09879
:10019A00B1997E7F08950F931F93082D18E0069555 :10019A000F91089573D0B29B0196B39B019708956E
:1001AA0008F448F0B99A30E046E7CCDFB99830E075 :1001AA00B99A33E04EEBCDDFB99830E04AE8C9DFBF
:1001BA0042E1C8DF08C0B99A30E04AE0C3DFB99823 :1001BA0004D033E042E3C5DF0895B19B716002C009
:1001CA0030E04EE7BFDF1A9551F71F910F9108955E :1001CA00B1997E7F08950F931F93082D017049F00E
:1001DA000F931F9308E0B99A30E04AE0B3DFB99869 :1001DA00B99A30E04AE0B5DFB99830E04EE7B1DFCE
:1001EA0030E040E1AFDF10916A001695B1991068CE :1001EA0008C0B99A30E046E7ACDFB99830E042E19E
:1001FA0010936A0030E04CE6A5DF0A9561F71F917B :1001FA00A8DF8694882049F71F910F9108950F93DD
:10020A000F910895F8945F9354E0A3E6B0E08093C9 :10020A001F9308E0B99A30E04AE09BDFB99830E0E2
:10021A0061009093620000916100109162002AE0EF :10021A0040E197DF10916A001695B1991068109322
:10022A0030E07DDFED9200936100109362005A95F1 :10022A006A0030E04CE68DDF0A9561F71F910F9165
:10023A0091F75F91789408950F931F93E4E9F2E0A0 :10023A000895F8945F9354E0A3E6B0E080936100D8
:10024A001127E00FF11F04901F910F9108950F934A :10024A009093620000916100109162002AE030E010
:10025A001F932F932AE01FEF0FEF0A95F1F71A95D4 :10025A0065DFED9200936100109362005A9591F761
:10026A00D9F72A95C1F72F911F910F9108950F93EE :10026A005F91789408950F931F93E2ECF2E01127BF
:10027A001F930FEF1FEF1A95000000000000D9F737 :10027A00E00FF11F04901F910F9108950F931F93A0
:10028A000A95C1F71F910F910895C0F9A4B09992E8 :10028A002F932AE01FEF0FEF0A95F1F71A95D9F786
:06029A0082F880909CBF79 :10029A002A95C1F72F911F910F9108950F931F93DC
:1002AA000FEF1FEF1A95000000000000D9F70A951A
:1002BA00C1F71F910F910895C0F9A4B0999282F8DD
:0402CA0080909CBFC5
:00000001FF :00000001FF