program mode setting

This commit is contained in:
Sergey Yarkov 2023-06-29 22:50:37 +03:00
parent 9950d2e13d
commit a164982095
No known key found for this signature in database
GPG Key ID: E91CE1FABC619B6F
10 changed files with 823 additions and 595 deletions

View File

@ -1,2 +1,3 @@
- сделать программу, которая будет сохранять уставку температуры, гистерезис и режим работы в EEPROM
(перед инициализации МК необходимо чтобы данные брались из EEPROM и записывались в соответствующие ячейки)
- убрать отображение разряда индикатора в режиме программирования устройства на 3 этапе

View File

@ -61,10 +61,12 @@
.EQU MCU_STATE_PROGRAM = 0x01 ; Режим настройки параметров в EEPROM
.EQU MCU_STATE_ERROR = 0x02 ; Режим ошибки, например когда не подключен датчик
.EQU MIN_HYST = 1 ; минимальный гистерезис который можно выставить - 0.1
.EQU MAX_HYST = 200 ; максимальный гистерезис который можно выставить - 20
; **** СТАНДАРТНЫЕ ПАРАМЕТРЫ ***********************************
; Отдельно задается целая и дробная часть в точности до десятых
.EQU DEFAULT_TEMP = 315 ; 30 градусов
.EQU DEFAULT_TEMP = 300 ; 30 градусов
.EQU DEFAULT_HYST = 5 ; 0.5 градусов гистерезис
.EQU HEAT_MODE = 1

View File

@ -7,25 +7,25 @@
:10003A002F933F934F935F935FB74091670045308B
:10004A000CF403C0442740936700403081F493982E
:10005A00949895980EF002C00BE002C000916500DA
:10006A00002311F0929A01C09298A3D29BD14130F9
:10006A00002311F0929A01C09298DAD29BD14130C2
:10007A0081F4929894989598009164003091650063
:10008A00032B11F0939A01C093980091640091D2C6
:10008A00032B11F0939A01C0939800916400C8D28F
:10009A0089D1423059F4929893989598949A0091FC
:1000AA00630087D2002D0F77002E7CD1433041F4B4
:1000BA00929893989498959A009166007AD272D100
:1000AA006300BED2002D0F77002E7CD1433041F47D
:1000BA00929893989498959A00916600B1D272D1C9
:1000CA004395409367005FBF5F914F913F912F9196
:1000DA001F910F9118950FED0DBF0FE701BB01EEB0
:1000EA0007BB0CE108BB02E000BF05E003BF09E162
:1000EA0007BB0CE108BB02E000BF05E003BF03E267
:1000FA0006BF00E20BBF0CE100BD03E309B900E053
:10010A0002B908E00AB906E003B91124109267009F
:10011A0000E0009360000BE300936C0001E00093A1
:10011A0000E0009360000CE200936C0001E00093A1
:10012A006B0005E000936D0001E000936E0000276C
:10013A00009368000093690000EF00936A000FEFD4
:10014A00009371006624CED000916F00083209F442
:10015A0005C012E0109360003ED201C035D280E0A3
:10016A0090E0009160000BD2003051F496982091F3
:10015A0005C012E01093600075D201C06CD280E035
:10016A0090E00091600042D2003051F496982091BC
:10017A006A0020936600A7D059D011E019BF38D081
:10018A00013011F4969842D1023059F7969AE9CF84
:10018A00013011F4969848D1023059F7969AE9CF7E
:10019A00EE24FF1841E1001F111F4A9509F4089542
:1001AA00EE1CFF1CE21AF30A20F4E20EF31E8894F6
:1001BA00F2CF0894F0CFFF1829E0001F2A9509F41E
@ -46,60 +46,67 @@
:1002AA00909801C0909A07C040916E00442311F4BF
:1002BA00909A01C090987F915F914F913F912F91B1
:1002CA001F910F9108951F9361D052E135E54DEBCF
:1002DA009DD112D010916800812F10916900912F41
:1002EA001F9108950F93FDD003E3802E0FD1AFE63F
:1002FA00B0E02BD10F9108950F931F932F933F9343
:10030A004F93EFD070FF3CC00CEC802EFFD00EEB69
:10031A00802EFCD0A8E6B0E018D1A9E6B0E015D14D
:1002DA00D4D112D010916800812F10916900912F0A
:1002EA001F9108950F9334D103E3802E46D1AFE6D0
:1002FA00B0E062D10F9108950F931F932F933F930C
:10030A004F9326D170FF3CC00CEC802E36D10EEBF9
:10031A00802E33D1A8E6B0E04FD1A9E6B0E04CD1A7
:10032A0010916800209169002F93287F283F11F0CF
:10033A00E89407C02F916894109520951F5F2F4F5E
:10034A0001C02F91269517952695179526951795ED
:10035A0026951795309168000EF43195432F3F701A
:10036A00432F330F330F330F440F340F369536951F
:10037A0036953695109368002093690030936A0089
:10038A004F913F912F911F910F9108950F93A9D0EB
:10039A0070FF06C00CEC802EB9D004E4802EB6D0D3
:10038A004F913F912F911F910F9108950F93E0D0B4
:10039A0070FF06C00CEC802EF0D004E4802EEDD065
:1003AA000F9108950F930F920FB800E40EB90BE165
:1003BA000DB9769BFDCFC09AC0980F900F91089502
:1003CA000F93B49B01C014C000917100002309F47B
:1003DA000FC000270093710005D16394162D1430C5
:1003EA0014F4F2D005C06624F6D010E01093600031
:1003FA00B49901C009C000917100002309F004C03A
:10040A000FEF00937100EED00F9108950F931F9391
:10041A002F933F934F93062D002309F002C0639454
:10042A00D3D0CEDF013019F0023011F154C00000F0
:10043A00B29B04C000C0B39B08C00DC0D3D01091BA
:10044A006D00139510936D0006C0CCD010916D000D
:10045A001A9510936D000F931F9300916D001AE087
:10046A00AADE802F9927F09266001F910F9133C060
:10047A000000B29B04C000C0B39B0FC019C0B2D029
:10048A0010916C0020916B0031E0130F3327231F6A
:10049A0010936C0020936B000BC0A4D010916C00D9
:1004AA0020916B001150204010936C0020936B0038
:1004BA000F931F932F933F9300916C0010916B0041
:1004CA002AE030E065DE802F912FE09266003F91AE
:1004DA002F911F910F914F913F912F911F910F9142
:1004EA000895F894B99A33E04EEB8CD0B99830E07D
:1004FA004AE888D005D033E042E384D0789408955E
:10050A00B19B716002C0B1997E7F0895F8940F93F0
:10051A001F93082D18E0069508F448F0B99A30E0C0
:10052A0046E770D0B99830E042E16CD008C0B99A79
:10053A0030E04AE067D0B99830E04EE763D01A95C8
:10054A0051F71F910F9178940895F8940F931F9380
:10055A00002718E00695B99A30E04AE053D0B998D6
:10056A0030E040E14FD0B199006830E04CE64AD023
:10057A001A9581F70C931F910F91789408950F9310
:10058A005F9353E0A3E6B0E080936100909362002A
:10059A0000916100109162002AE030E0F9DDED92ED
:1005AA0000936100109362005A9591F75F910F9141
:1005BA0008950F931F93E0E4F6E01127E00FF11F6F
:1005CA0004901F910F910895C59A53E039EA4DE7B7
:1005DA001DD0C5980895C59A5CE034E34DEF16D056
:1005EA00C59808950F931F932F932AE01FEF0FEFDB
:1005FA000A95F1F71A95D9F72A95C1F72F911F9104
:10060A000F91089541503040E8F708954150304025
:10061A005040E0F708950F931F932F9326E00FEFB2
:10062A001FEF1A95F1F70A95D9F72A95C1F72F9175
:10063A001F910F910895C0F9A4B0999282F8809001
:04064A009CBFC68902
:1003CA000F93B49B01C01AC000917100002309F475
:1003DA0015C00027009371003CD16394162D143088
:1003EA0014F429D10BC010E019BF929893989498ED
:1003FA009598662427D110E010936000B49901C043
:10040A0009C000917100002309F004C00FEF0093A6
:10041A0071001FD10F9108950F931F932F933F934C
:10042A004F93062D002309F002C005D16394C8DF5B
:10043A00013029F0023049F1033031F183C0000064
:10044A00B29B04C000C0B39B0AC011C002D1109174
:10045A006D00183C09F0139510936D0008C0F9D08F
:10046A0010916D00113009F01A9510936D000F93D9
:10047A001F9300916D001AE09EDE802F9927F0925B
:10048A0066001F910F915EC03EC00000B29B04C07F
:10049A0000C0B39B0FC019C0DCD010916C00209132
:1004AA006B0031E0130F3327231F10936C00209346
:1004BA006B000BC0CED010916C0020916B001150D4
:1004CA00204010936C0020936B000F931F932F937F
:1004DA003F9300916C0010916B00212F207811F44A
:1004EA00E89405C06894009510950F5F1F4F2AE0A5
:1004FA0030E04EDE802F912FE09266003F912F91DF
:10050A001F910F911FC0E894B29B04C000C0B39B17
:10051A0006C009C09ED011E010936E0004C099D0A5
:10052A0010E010936E001127812F912F20916E00F9
:10053A00222309F004C01CE01093660003C01DE0EA
:10054A00109366004F913F912F911F910F9108953B
:10055A00F894B99A33E04EEB8CD0B99830E04AE877
:10056A0088D005D033E042E384D078940895B19BD3
:10057A00716002C0B1997E7F0895F8940F931F931A
:10058A00082D18E0069508F448F0B99A30E046E7D5
:10059A0070D0B99830E042E16CD008C0B99A30E026
:1005AA004AE067D0B99830E04EE763D01A9551F720
:1005BA001F910F9178940895F8940F931F93002731
:1005CA0018E00695B99A30E04AE053D0B99830E07D
:1005DA0040E14FD0B199006830E04CE64AD01A9514
:1005EA0081F70C931F910F91789408950F935F935D
:1005FA0053E0A3E6B0E0809361009093620000911B
:10060A006100109162002AE030E0C2DDED920093B1
:10061A006100109362005A9591F75F910F910895C6
:10062A000F931F93EEEAF6E01127E00FF11F0490F3
:10063A001F910F910895C59A53E039EA4DE71DD0ED
:10064A00C5980895C59A5CE034E34DEF16D0C59875
:10065A0008950F931F932F932AE01FEF0FEF0A9528
:10066A00F1F71A95D9F72A95C1F72F911F910F9192
:10067A00089541503040E8F70895415030405040C5
:10068A00E0F708950F931F932F9326E00FEF1FEFC4
:10069A001A95F1F70A95D9F72A95C1F72F911F9163
:1006AA000F910895C0F9A4B0999282F880909CBFE6
:0206BA00C689EF
:00000001FF

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,5 @@
AVRASM ver. 2.2.7 main.asm Thu Jun 29 14:17:58 2023
AVRASM ver. 2.2.7 main.asm Thu Jun 29 22:49:03 2023
EQU SIGNATURE_000 0000001e
@ -527,12 +527,14 @@ EQU UART_TX_PIN 00000001
EQU MCU_STATE_DEFAULT 00000000
EQU MCU_STATE_PROGRAM 00000001
EQU MCU_STATE_ERROR 00000002
EQU DEFAULT_TEMP 0000013b
EQU MIN_HYST 00000001
EQU MAX_HYST 000000c8
EQU DEFAULT_TEMP 0000012c
EQU DEFAULT_HYST 00000005
EQU HEAT_MODE 00000001
EQU COOLING_MODE 00000000
EQU DEFAULT_MODE 00000001
EQU DEFAULT_SETTING_TEMP_L 0000003b
EQU DEFAULT_SETTING_TEMP_L 0000002c
EQU DEFAULT_SETTING_TEMP_H 00000001
EQU DEFAULT_SETTING_HYST 00000005
EQU DEFAULT_SETTING_MODE 00000001
@ -558,7 +560,7 @@ CSEG _INTO_PROGRAM_STATE 00000014
CSEG _CLR_CURRENT_DIGIT 00000027
CSEG _indicate_1 0000002a
CSEG _indicate_2 0000003c
CSEG DISPLAY_DECODER 000002de
CSEG DISPLAY_DECODER 00000315
CSEG USI_TRANSMIT 000001d7
CSEG _indicate_3 0000004e
CSEG _indicate_4 0000005b
@ -567,17 +569,17 @@ CSEG MCU_INIT 00000072
CSEG RD_F_CODE 00000177
CSEG ERR_FAMILY_CODE 000000ae
CSEG START_PROGRAM 000000b3
CSEG BEEP_LONG 000002f0
CSEG BEEP_SHORT 000002e9
CSEG BEEP_LONG 00000327
CSEG BEEP_SHORT 00000320
CSEG LOOP 000000b6
CSEG DISPLAY_UPD_DIGITS 000002c4
CSEG DISPLAY_UPD_DIGITS 000002fb
CSEG _STATE_DEFAULT 000000b9
CSEG _STATE_PROGRAM 000000c5
CSEG TEMP_UPD 00000168
CSEG TEMP_COMPARSION 0000011b
CSEG TEMP_SEND_UART 000000fd
CSEG _STATE_ERROR 000000c9
CSEG REPROGRAM_SETTINGS 0000020b
CSEG REPROGRAM_SETTINGS 00000211
DEF drem16uL r14
DEF drem16uH r15
DEF dres16uL r16
@ -626,11 +628,11 @@ CSEG _MIN_THRESHOLD 00000151
CSEG _MAX_THRESHOLD 00000159
CSEG _COMPARSION_EXIT 00000160
CSEG TEMP_CONV 000001cb
CSEG DELAY_LOOP_24 0000030b
CSEG DELAY_LOOP_24 00000342
CSEG TEMP_RD 00000181
CSEG OW_PRESENCE 00000276
CSEG OW_SEND_BYTE 0000028b
CSEG OW_RD_BYTE 000002aa
CSEG OW_PRESENCE 000002ad
CSEG OW_SEND_BYTE 000002c2
CSEG OW_RD_BYTE 000002e1
CSEG _TEMP_RD_EXIT 000001c5
CSEG _TEMP_RD_TO_UNSIGNED 0000019f
CSEG _TEMP_RD_CONTINUE 000001a6
@ -640,47 +642,63 @@ CSEG _USI_TRANSMIT_LOOP 000001dd
CSEG BUTTON_PROCESS 000001e5
CSEG _SW_CHECK_ON_0 000001e6
CSEG _SW_SET_0 000001e9
CSEG _SW_CHECK_ON_1 000001fd
CSEG _SW_CHECK_ON_1 00000203
CSEG _SW_SET_FROM_0_TO_1 000001ee
CSEG DEBOUNCE_SW 000002f7
CSEG DEBOUNCE_SW 0000032e
CSEG _SAVE_SETTINGS 000001f8
CSEG _SW_SET_1 00000200
CSEG _BUTTON_PROCESS_END 00000209
CSEG _SW_SET_FROM_1_TO_0 00000205
CSEG _INTO 00000214
CSEG _REPROGRAM_SETTINGS_LOOP 00000216
CSEG _CHECK_STEP 00000217
CSEG _STEP_1 0000021c
CSEG _STEP_2 0000023d
CSEG _REPROGRAM_SETTINGS_END 00000270
CSEG _S1_CHECK_PLUS 0000021d
CSEG _INCREASE_HYST 00000223
CSEG _S1_CHECK_MINUS 00000220
CSEG _DECREASE_HYST 0000022a
CSEG _SHOW_HYST 00000230
CSEG _S2_CHECK_PLUS 0000023e
CSEG _INCREASE_TEMP 00000244
CSEG _S2_CHECK_MINUS 00000241
CSEG _DECREASE_TEMP 00000252
CSEG _SHOW_TEMP 0000025d
CSEG DELAY_LOOP_16 00000307
CSEG OW_CHECK_PRESENCE 00000285
CSEG _EXIT 0000028a
CSEG _OW_SEND_BYTE_LOOP 00000290
CSEG _OW_SEND_0 00000293
CSEG _OW_SEND_1 0000029c
CSEG _OW_SEND_BYTE_END 000002a4
CSEG _OW_RD_BYTE_LP 000002af
CSEG _SW_SET_1 00000206
CSEG _BUTTON_PROCESS_END 0000020f
CSEG _SW_SET_FROM_1_TO_0 0000020b
CSEG _INTO 0000021a
CSEG _REPROGRAM_SETTINGS_LOOP 0000021c
CSEG _CHECK_STEP 0000021d
CSEG _STEP_1 00000224
CSEG _STEP_2 0000024a
CSEG _S3_JMP 00000249
CSEG _REPROGRAM_SETTINGS_END 000002a7
CSEG _S1_CHECK_PLUS 00000225
CSEG _INCREASE_HYST 0000022b
CSEG _S1_CHECK_MINUS 00000228
CSEG _DECREASE_HYST 00000234
CSEG _SHOW_HYST 0000023c
CSEG _STEP_3 00000288
CSEG _S2_CHECK_PLUS 0000024b
CSEG _INCREASE_TEMP 00000251
CSEG _S2_CHECK_MINUS 0000024e
CSEG _DECREASE_TEMP 0000025f
CSEG _SHOW_TEMP 0000026a
CSEG _NEGATE_SET_TEMP 00000277
CSEG _DIVIDE_SET_TEMP 0000027c
CSEG _S3_CHECK_PLUS 00000289
CSEG _SET_HEAT_MODE 0000028f
CSEG _S3_CHECK_MINUS 0000028c
CSEG _SET_COOLING_MODE 00000294
CSEG _SHOW_MODE 00000298
CSEG _SHOW_COOLING 000002a0
CSEG _SHOW_HEATING 000002a4
CSEG DELAY_LOOP_16 0000033e
CSEG OW_CHECK_PRESENCE 000002bc
CSEG _EXIT 000002c1
CSEG _OW_SEND_BYTE_LOOP 000002c7
CSEG _OW_SEND_0 000002ca
CSEG _OW_SEND_1 000002d3
CSEG _OW_SEND_BYTE_END 000002db
CSEG _OW_RD_BYTE_LP 000002e6
EQU dividend 00000061
EQU divisor 0000000a
CSEG DIV_LOOP 000002cd
CSEG DISPLAY_SYMBOLS 00000320
CSEG _loop_2 000002fb
CSEG _loop_0 000002fc
CSEG _dec_0 000002fd
CSEG _loop_1 000002ff
CSEG _loop_3 00000301
CSEG DELAY 00000310
CSEG _DELAY_0 00000314
CSEG _DELAY_1 00000315
CSEG _DELAY_2 00000316
CSEG DIV_LOOP 00000304
CSEG DISPLAY_SYMBOLS 00000357
CSEG _loop_2 00000332
CSEG _loop_0 00000333
CSEG _dec_0 00000334
CSEG _loop_1 00000336
CSEG _loop_3 00000338
CSEG DELAY 00000347
CSEG _DELAY_0 0000034b
CSEG _DELAY_1 0000034c
CSEG _DELAY_2 0000034d
ESEG E_SETTING_TEMP_H 00000000
ESEG E_SETTING_TEMP_L 00000001
ESEG E_SETTING_HYST 00000002
ESEG E_SETTING_MODE 00000003
ESEG E_FIRST_TIME_RUN 00000004

View File

@ -48,7 +48,7 @@
<_CLR_CURRENT_DIGIT><FILE>main.asm</FILE><LINE>98</LINE></_CLR_CURRENT_DIGIT>
<_indicate_1><FILE>main.asm</FILE><LINE>102</LINE></_indicate_1>
<_indicate_2><FILE>main.asm</FILE><LINE>122</LINE></_indicate_2>
<DISPLAY_DECODER><FILE>main.asm</FILE><LINE>926</LINE></DISPLAY_DECODER>
<DISPLAY_DECODER><FILE>main.asm</FILE><LINE>994</LINE></DISPLAY_DECODER>
<USI_TRANSMIT><FILE>main.asm</FILE><LINE>592</LINE></USI_TRANSMIT>
<_indicate_3><FILE>main.asm</FILE><LINE>140</LINE></_indicate_3>
<_indicate_4><FILE>main.asm</FILE><LINE>156</LINE></_indicate_4>
@ -57,17 +57,17 @@
<RD_F_CODE><FILE>main.asm</FILE><LINE>458</LINE></RD_F_CODE>
<ERR_FAMILY_CODE><FILE>main.asm</FILE><LINE>254</LINE></ERR_FAMILY_CODE>
<START_PROGRAM><FILE>main.asm</FILE><LINE>259</LINE></START_PROGRAM>
<BEEP_LONG><FILE>main.asm</FILE><LINE>952</LINE></BEEP_LONG>
<BEEP_SHORT><FILE>main.asm</FILE><LINE>944</LINE></BEEP_SHORT>
<BEEP_LONG><FILE>main.asm</FILE><LINE>1020</LINE></BEEP_LONG>
<BEEP_SHORT><FILE>main.asm</FILE><LINE>1012</LINE></BEEP_SHORT>
<LOOP><FILE>main.asm</FILE><LINE>266</LINE></LOOP>
<DISPLAY_UPD_DIGITS><FILE>main.asm</FILE><LINE>885</LINE></DISPLAY_UPD_DIGITS>
<DISPLAY_UPD_DIGITS><FILE>main.asm</FILE><LINE>953</LINE></DISPLAY_UPD_DIGITS>
<_STATE_DEFAULT><FILE>main.asm</FILE><LINE>269</LINE></_STATE_DEFAULT>
<_STATE_PROGRAM><FILE>main.asm</FILE><LINE>281</LINE></_STATE_PROGRAM>
<TEMP_UPD><FILE>main.asm</FILE><LINE>442</LINE></TEMP_UPD>
<TEMP_COMPARSION><FILE>main.asm</FILE><LINE>345</LINE></TEMP_COMPARSION>
<TEMP_SEND_UART><FILE>main.asm</FILE><LINE>300</LINE></TEMP_SEND_UART>
<_STATE_ERROR><FILE>main.asm</FILE><LINE>286</LINE></_STATE_ERROR>
<REPROGRAM_SETTINGS><FILE>main.asm</FILE><LINE>670</LINE></REPROGRAM_SETTINGS>
<REPROGRAM_SETTINGS><FILE>main.asm</FILE><LINE>675</LINE></REPROGRAM_SETTINGS>
<div16u><FILE>div16u.asm</FILE><LINE>32</LINE></div16u>
<d16u_1><FILE>div16u.asm</FILE><LINE>36</LINE></d16u_1>
<d16u_2><FILE>div16u.asm</FILE><LINE>42</LINE></d16u_2>
@ -87,11 +87,11 @@
<_MAX_THRESHOLD><FILE>main.asm</FILE><LINE>424</LINE></_MAX_THRESHOLD>
<_COMPARSION_EXIT><FILE>main.asm</FILE><LINE>431</LINE></_COMPARSION_EXIT>
<TEMP_CONV><FILE>main.asm</FILE><LINE>570</LINE></TEMP_CONV>
<DELAY_LOOP_24><FILE>main.asm</FILE><LINE>994</LINE></DELAY_LOOP_24>
<DELAY_LOOP_24><FILE>main.asm</FILE><LINE>1062</LINE></DELAY_LOOP_24>
<TEMP_RD><FILE>main.asm</FILE><LINE>474</LINE></TEMP_RD>
<OW_PRESENCE><FILE>main.asm</FILE><LINE>798</LINE></OW_PRESENCE>
<OW_SEND_BYTE><FILE>main.asm</FILE><LINE>825</LINE></OW_SEND_BYTE>
<OW_RD_BYTE><FILE>main.asm</FILE><LINE>856</LINE></OW_RD_BYTE>
<OW_PRESENCE><FILE>main.asm</FILE><LINE>866</LINE></OW_PRESENCE>
<OW_SEND_BYTE><FILE>main.asm</FILE><LINE>893</LINE></OW_SEND_BYTE>
<OW_RD_BYTE><FILE>main.asm</FILE><LINE>924</LINE></OW_RD_BYTE>
<_TEMP_RD_EXIT><FILE>main.asm</FILE><LINE>562</LINE></_TEMP_RD_EXIT>
<_TEMP_RD_TO_UNSIGNED><FILE>main.asm</FILE><LINE>511</LINE></_TEMP_RD_TO_UNSIGNED>
<_TEMP_RD_CONTINUE><FILE>main.asm</FILE><LINE>524</LINE></_TEMP_RD_CONTINUE>
@ -101,47 +101,63 @@
<BUTTON_PROCESS><FILE>main.asm</FILE><LINE>625</LINE></BUTTON_PROCESS>
<_SW_CHECK_ON_0><FILE>main.asm</FILE><LINE>627</LINE></_SW_CHECK_ON_0>
<_SW_SET_0><FILE>main.asm</FILE><LINE>631</LINE></_SW_SET_0>
<_SW_CHECK_ON_1><FILE>main.asm</FILE><LINE>651</LINE></_SW_CHECK_ON_1>
<_SW_CHECK_ON_1><FILE>main.asm</FILE><LINE>656</LINE></_SW_CHECK_ON_1>
<_SW_SET_FROM_0_TO_1><FILE>main.asm</FILE><LINE>636</LINE></_SW_SET_FROM_0_TO_1>
<DEBOUNCE_SW><FILE>main.asm</FILE><LINE>960</LINE></DEBOUNCE_SW>
<DEBOUNCE_SW><FILE>main.asm</FILE><LINE>1028</LINE></DEBOUNCE_SW>
<_SAVE_SETTINGS><FILE>main.asm</FILE><LINE>646</LINE></_SAVE_SETTINGS>
<_SW_SET_1><FILE>main.asm</FILE><LINE>655</LINE></_SW_SET_1>
<_BUTTON_PROCESS_END><FILE>main.asm</FILE><LINE>664</LINE></_BUTTON_PROCESS_END>
<_SW_SET_FROM_1_TO_0><FILE>main.asm</FILE><LINE>660</LINE></_SW_SET_FROM_1_TO_0>
<_INTO><FILE>main.asm</FILE><LINE>681</LINE></_INTO>
<_REPROGRAM_SETTINGS_LOOP><FILE>main.asm</FILE><LINE>684</LINE></_REPROGRAM_SETTINGS_LOOP>
<_CHECK_STEP><FILE>main.asm</FILE><LINE>686</LINE></_CHECK_STEP>
<_STEP_1><FILE>main.asm</FILE><LINE>693</LINE></_STEP_1>
<_STEP_2><FILE>main.asm</FILE><LINE>727</LINE></_STEP_2>
<_REPROGRAM_SETTINGS_END><FILE>main.asm</FILE><LINE>775</LINE></_REPROGRAM_SETTINGS_END>
<_S1_CHECK_PLUS><FILE>main.asm</FILE><LINE>695</LINE></_S1_CHECK_PLUS>
<_INCREASE_HYST><FILE>main.asm</FILE><LINE>703</LINE></_INCREASE_HYST>
<_S1_CHECK_MINUS><FILE>main.asm</FILE><LINE>699</LINE></_S1_CHECK_MINUS>
<_DECREASE_HYST><FILE>main.asm</FILE><LINE>709</LINE></_DECREASE_HYST>
<_SHOW_HYST><FILE>main.asm</FILE><LINE>714</LINE></_SHOW_HYST>
<_S2_CHECK_PLUS><FILE>main.asm</FILE><LINE>729</LINE></_S2_CHECK_PLUS>
<_INCREASE_TEMP><FILE>main.asm</FILE><LINE>737</LINE></_INCREASE_TEMP>
<_S2_CHECK_MINUS><FILE>main.asm</FILE><LINE>733</LINE></_S2_CHECK_MINUS>
<_DECREASE_TEMP><FILE>main.asm</FILE><LINE>748</LINE></_DECREASE_TEMP>
<_SHOW_TEMP><FILE>main.asm</FILE><LINE>756</LINE></_SHOW_TEMP>
<DELAY_LOOP_16><FILE>main.asm</FILE><LINE>986</LINE></DELAY_LOOP_16>
<OW_CHECK_PRESENCE><FILE>main.asm</FILE><LINE>814</LINE></OW_CHECK_PRESENCE>
<_EXIT><FILE>main.asm</FILE><LINE>820</LINE></_EXIT>
<_OW_SEND_BYTE_LOOP><FILE>main.asm</FILE><LINE>831</LINE></_OW_SEND_BYTE_LOOP>
<_OW_SEND_0><FILE>main.asm</FILE><LINE>835</LINE></_OW_SEND_0>
<_OW_SEND_1><FILE>main.asm</FILE><LINE>841</LINE></_OW_SEND_1>
<_OW_SEND_BYTE_END><FILE>main.asm</FILE><LINE>846</LINE></_OW_SEND_BYTE_END>
<_OW_RD_BYTE_LP><FILE>main.asm</FILE><LINE>862</LINE></_OW_RD_BYTE_LP>
<DIV_LOOP><FILE>main.asm</FILE><LINE>902</LINE></DIV_LOOP>
<DISPLAY_SYMBOLS><FILE>main.asm</FILE><LINE>1028</LINE></DISPLAY_SYMBOLS>
<_loop_2><FILE>main.asm</FILE><LINE>966</LINE></_loop_2>
<_loop_0><FILE>main.asm</FILE><LINE>968</LINE></_loop_0>
<_dec_0><FILE>main.asm</FILE><LINE>970</LINE></_dec_0>
<_loop_1><FILE>main.asm</FILE><LINE>973</LINE></_loop_1>
<_loop_3><FILE>main.asm</FILE><LINE>976</LINE></_loop_3>
<DELAY><FILE>main.asm</FILE><LINE>1003</LINE></DELAY>
<_DELAY_0><FILE>main.asm</FILE><LINE>1009</LINE></_DELAY_0>
<_DELAY_1><FILE>main.asm</FILE><LINE>1011</LINE></_DELAY_1>
<_DELAY_2><FILE>main.asm</FILE><LINE>1013</LINE></_DELAY_2>
<_SW_SET_1><FILE>main.asm</FILE><LINE>660</LINE></_SW_SET_1>
<_BUTTON_PROCESS_END><FILE>main.asm</FILE><LINE>669</LINE></_BUTTON_PROCESS_END>
<_SW_SET_FROM_1_TO_0><FILE>main.asm</FILE><LINE>665</LINE></_SW_SET_FROM_1_TO_0>
<_INTO><FILE>main.asm</FILE><LINE>686</LINE></_INTO>
<_REPROGRAM_SETTINGS_LOOP><FILE>main.asm</FILE><LINE>689</LINE></_REPROGRAM_SETTINGS_LOOP>
<_CHECK_STEP><FILE>main.asm</FILE><LINE>691</LINE></_CHECK_STEP>
<_STEP_1><FILE>main.asm</FILE><LINE>701</LINE></_STEP_1>
<_STEP_2><FILE>main.asm</FILE><LINE>744</LINE></_STEP_2>
<_S3_JMP><FILE>main.asm</FILE><LINE>740</LINE></_S3_JMP>
<_REPROGRAM_SETTINGS_END><FILE>main.asm</FILE><LINE>843</LINE></_REPROGRAM_SETTINGS_END>
<_S1_CHECK_PLUS><FILE>main.asm</FILE><LINE>703</LINE></_S1_CHECK_PLUS>
<_INCREASE_HYST><FILE>main.asm</FILE><LINE>711</LINE></_INCREASE_HYST>
<_S1_CHECK_MINUS><FILE>main.asm</FILE><LINE>707</LINE></_S1_CHECK_MINUS>
<_DECREASE_HYST><FILE>main.asm</FILE><LINE>719</LINE></_DECREASE_HYST>
<_SHOW_HYST><FILE>main.asm</FILE><LINE>726</LINE></_SHOW_HYST>
<_STEP_3><FILE>main.asm</FILE><LINE>806</LINE></_STEP_3>
<_S2_CHECK_PLUS><FILE>main.asm</FILE><LINE>746</LINE></_S2_CHECK_PLUS>
<_INCREASE_TEMP><FILE>main.asm</FILE><LINE>754</LINE></_INCREASE_TEMP>
<_S2_CHECK_MINUS><FILE>main.asm</FILE><LINE>750</LINE></_S2_CHECK_MINUS>
<_DECREASE_TEMP><FILE>main.asm</FILE><LINE>765</LINE></_DECREASE_TEMP>
<_SHOW_TEMP><FILE>main.asm</FILE><LINE>773</LINE></_SHOW_TEMP>
<_NEGATE_SET_TEMP><FILE>main.asm</FILE><LINE>786</LINE></_NEGATE_SET_TEMP>
<_DIVIDE_SET_TEMP><FILE>main.asm</FILE><LINE>790</LINE></_DIVIDE_SET_TEMP>
<_S3_CHECK_PLUS><FILE>main.asm</FILE><LINE>808</LINE></_S3_CHECK_PLUS>
<_SET_HEAT_MODE><FILE>main.asm</FILE><LINE>816</LINE></_SET_HEAT_MODE>
<_S3_CHECK_MINUS><FILE>main.asm</FILE><LINE>812</LINE></_S3_CHECK_MINUS>
<_SET_COOLING_MODE><FILE>main.asm</FILE><LINE>821</LINE></_SET_COOLING_MODE>
<_SHOW_MODE><FILE>main.asm</FILE><LINE>825</LINE></_SHOW_MODE>
<_SHOW_COOLING><FILE>main.asm</FILE><LINE>834</LINE></_SHOW_COOLING>
<_SHOW_HEATING><FILE>main.asm</FILE><LINE>838</LINE></_SHOW_HEATING>
<DELAY_LOOP_16><FILE>main.asm</FILE><LINE>1054</LINE></DELAY_LOOP_16>
<OW_CHECK_PRESENCE><FILE>main.asm</FILE><LINE>882</LINE></OW_CHECK_PRESENCE>
<_EXIT><FILE>main.asm</FILE><LINE>888</LINE></_EXIT>
<_OW_SEND_BYTE_LOOP><FILE>main.asm</FILE><LINE>899</LINE></_OW_SEND_BYTE_LOOP>
<_OW_SEND_0><FILE>main.asm</FILE><LINE>903</LINE></_OW_SEND_0>
<_OW_SEND_1><FILE>main.asm</FILE><LINE>909</LINE></_OW_SEND_1>
<_OW_SEND_BYTE_END><FILE>main.asm</FILE><LINE>914</LINE></_OW_SEND_BYTE_END>
<_OW_RD_BYTE_LP><FILE>main.asm</FILE><LINE>930</LINE></_OW_RD_BYTE_LP>
<DIV_LOOP><FILE>main.asm</FILE><LINE>970</LINE></DIV_LOOP>
<DISPLAY_SYMBOLS><FILE>main.asm</FILE><LINE>1096</LINE></DISPLAY_SYMBOLS>
<_loop_2><FILE>main.asm</FILE><LINE>1034</LINE></_loop_2>
<_loop_0><FILE>main.asm</FILE><LINE>1036</LINE></_loop_0>
<_dec_0><FILE>main.asm</FILE><LINE>1038</LINE></_dec_0>
<_loop_1><FILE>main.asm</FILE><LINE>1041</LINE></_loop_1>
<_loop_3><FILE>main.asm</FILE><LINE>1044</LINE></_loop_3>
<DELAY><FILE>main.asm</FILE><LINE>1071</LINE></DELAY>
<_DELAY_0><FILE>main.asm</FILE><LINE>1077</LINE></_DELAY_0>
<_DELAY_1><FILE>main.asm</FILE><LINE>1079</LINE></_DELAY_1>
<_DELAY_2><FILE>main.asm</FILE><LINE>1081</LINE></_DELAY_2>
<E_SETTING_TEMP_H><FILE>main.asm</FILE><LINE>1113</LINE></E_SETTING_TEMP_H>
<E_SETTING_TEMP_L><FILE>main.asm</FILE><LINE>1114</LINE></E_SETTING_TEMP_L>
<E_SETTING_HYST><FILE>main.asm</FILE><LINE>1115</LINE></E_SETTING_HYST>
<E_SETTING_MODE><FILE>main.asm</FILE><LINE>1116</LINE></E_SETTING_MODE>
<E_FIRST_TIME_RUN><FILE>main.asm</FILE><LINE>1117</LINE></E_FIRST_TIME_RUN>
</LABELS>
</ASSEMBLER_INFO>

View File

@ -25,6 +25,15 @@
cbi RELAY_PORT, RELAY_PIN
.ENDMACRO
; @0 - младший байт
; @1 - старший байт
.MACRO com16
com @0
com @1
subi @0, low(-1)
sbci @1, high(-1)
.ENDMACRO
.MACRO DELAY16
ldi DELAY_16_r, HIGH(@0*F_CPU/4-2)
ldi DELAY_8_r, LOW(@0*F_CPU/4-2)

View File

@ -196,7 +196,7 @@ MCU_INIT:
; **** ИНИЦИАЛИЗАЦИЯ ТАЙМЕРА 0 (8 бит) *************************
outi r16, TCCR0A, (1<<WGM01) ; режим CTC Compare A
outi r16, TCCR0B, (1<<CS02) | (1<<CS00) ; 1024 делитель
outi r16, OCR0A, 25 ; число для сравнения. (60Hz)
outi r16, OCR0A, 35 ; число для сравнения. (~60Hz)
; **** ИНИЦИАЛИЗАЦИЯ ТАЙМЕРА 1 (16 бит) *************************
; outi r16, TCCR1A
@ -644,6 +644,11 @@ _SW_SET_FROM_0_TO_1:
rcall BEEP_SHORT
rjmp _SW_CHECK_ON_1
_SAVE_SETTINGS:
outi r17, TIMSK, (0<<OCIE0A)
cbi PORTD, DIGIT_1_PIN
cbi PORTD, DIGIT_2_PIN
cbi PORTD, DIGIT_3_PIN
cbi PORTD, DIGIT_4_PIN
clr REPROGRAM_STEP_r
rcall BEEP_LONG
ldi r17, MCU_STATE_DEFAULT
@ -679,8 +684,8 @@ REPROGRAM_SETTINGS:
breq _INTO
rjmp _REPROGRAM_SETTINGS_LOOP
_INTO:
inc REPROGRAM_STEP_r
rcall BEEP_SHORT
inc REPROGRAM_STEP_r
_REPROGRAM_SETTINGS_LOOP:
rcall BUTTON_PROCESS
_CHECK_STEP:
@ -688,8 +693,11 @@ _CHECK_STEP:
breq _STEP_1
cpi r16, 2
breq _STEP_2
cpi r16, 3
breq _S3_JMP
rjmp _REPROGRAM_SETTINGS_END
//<editor-fold defaultstate="collapsed" desc="Настройка: шаг 1">
_STEP_1: ; установка и отображение гистерезиса
nop
_S1_CHECK_PLUS:
@ -703,12 +711,16 @@ _S1_CHECK_MINUS:
_INCREASE_HYST:
rcall DEBOUNCE_SW
lds r17, SETTING_HYST
cpi r17, MAX_HYST
breq PC+2
inc r17
sts SETTING_HYST, r17
rjmp _SHOW_HYST
_DECREASE_HYST:
rcall DEBOUNCE_SW
lds r17, SETTING_HYST
cpi r17, MIN_HYST
breq PC+2
dec r17
sts SETTING_HYST, r17
_SHOW_HYST:
@ -723,7 +735,12 @@ _SHOW_HYST:
pop dv8u
pop dd8u
rjmp _REPROGRAM_SETTINGS_END
//</editor-fold>
_S3_JMP: ; просто прыжок на _STEP_3
rjmp _STEP_3
//<editor-fold defaultstate="collapsed" desc="Настройка: шаг 2">
_STEP_2:
nop
_S2_CHECK_PLUS:
@ -761,6 +778,16 @@ _SHOW_TEMP:
lds dd16uL, SETTING_TEMP_L
lds dd16uH, SETTING_TEMP_H
mov r18, dd16uH
andi r18, (1<<7)
brne _NEGATE_SET_TEMP
clt
rjmp _DIVIDE_SET_TEMP
_NEGATE_SET_TEMP:
set
com16 dd16uL, dd16uH
_DIVIDE_SET_TEMP:
ldi dv16uL, LOW(10)
ldi dv16uH, HIGH(10)
rcall div16u
@ -772,6 +799,47 @@ _SHOW_TEMP:
pop dv16uL
pop dd16uH
pop dd16uL
rjmp _REPROGRAM_SETTINGS_END
//</editor-fold>
//<editor-fold defaultstate="collapsed" desc="Настройка: шаг 3">
_STEP_3:
clt
_S3_CHECK_PLUS:
sbis SW_PIN, SW_PLUS_PIN
rjmp _SET_HEAT_MODE
rjmp _S3_CHECK_MINUS
_S3_CHECK_MINUS:
sbis SW_PIN, SW_MINUS_PIN
rjmp _SET_COOLING_MODE
rjmp _SHOW_MODE
_SET_HEAT_MODE:
rcall DEBOUNCE_SW
ldi r17, HEAT_MODE
sts SETTING_MODE, r17
rjmp _SHOW_MODE
_SET_COOLING_MODE:
rcall DEBOUNCE_SW
ldi r17, COOLING_MODE
sts SETTING_MODE, r17
_SHOW_MODE:
clr r17
mov DISP_NUM_L, r17
mov DISP_NUM_H, r17
lds r18, SETTING_MODE
tst r18
breq _SHOW_COOLING
rjmp _SHOW_HEATING
_SHOW_COOLING:
ldi r17, 12
sts DIGITS+3, r17
rjmp _REPROGRAM_SETTINGS_END
_SHOW_HEATING:
ldi r17, 13
sts DIGITS+3, r17
//</editor-fold>
_REPROGRAM_SETTINGS_END:
pop r20
pop r19
@ -1040,6 +1108,11 @@ DISPLAY_SYMBOLS:
//<editor-fold defaultstate="collapsed" desc="Сегмент EEPROM">
; **** СЕГМЕНТ EEPROM ********************************************
; .ESEG
; INFO: .DB "AVR Thermostat. Written by Sergey Yarkov 22.01.2023"
.ESEG
E_SETTING_TEMP_H: .BYTE 1
E_SETTING_TEMP_L: .BYTE 1
E_SETTING_HYST: .BYTE 1
E_SETTING_MODE: .BYTE 1
E_FIRST_TIME_RUN: .BYTE 1
;</editor-fold>

202
main.hex
View File

@ -1,98 +1,112 @@
:020000020000FC
:020000007AC0C4
:020000006FC0CF
:02000800189549
:0200160002C026
:10001A0018C00F931F932F933F930FB716B3212F37
:10002A002C71309171002327209371001C7019F4F0
:10003A0011E0109360000FBF3F912F911F910F9114
:10004A0018950F931F932F933F934F935F935FB727
:10005A004091670045300CF403C044274093670081
:10006A00403081F49398949895980EF002C00BE072
:10007A0002C000916500002311F0929A01C0929883
:10008A0060D29BD1413081F49298949895980091CE
:10009A00640030916500032B11F0939A01C0939884
:1000AA00009164004ED289D1423059F492989398C3
:1000BA009598949A0091630044D2002D0F77002EF0
:1000CA007CD1433041F4929893989498959A0091F0
:1000DA00660037D272D14395409367005FBF5F9144
:1000EA004F913F912F911F910F9118950FED0DBFD1
:1000FA000FE701BB01EE07BB0CE108BB02E000BF42
:10010A0005E003BF09E106BF00E20BBF0CE100BD39
:10011A0003E309B900E002B908E00AB906E003B945
:10012A0011241092670000E0009360000CE2009333
:10013A006C0001E000936B0005E000936D0001E0A4
:10014A0000936E000027009368000093690000EF97
:10015A0000936A0000E0009371006624CED00091FB
:10016A006F00083209F405C012E010936000FBD159
:10017A0001C0F2D180E090E000916000C8D1003067
:10018A0051F4969820916A0020936600A7D011E056
:10019A0019BF57D038D0013011F496981CD10230CB
:1001AA0059F7969AE9CFEE24FF1841E1001F111F73
:1001BA004A9509F40895EE1CFF1CE21AF30A20F48A
:1001CA00E20EF31E8894F2CF0894F0CFFF1829E0CC
:1001DA00001F2A9509F40895FF1CF11A18F4F10E6C
:1001EA008894F6CF0894F4CF5527442760E13695D2
:1001FA00279510F4400F511F579547953795279526
:10020A006A95B9F708950F931F9300916800502ECD
:10021A0014D000916A00502E10D000B30170502EF5
:10022A000CD004E0502E09D00027502E1CE005D037
:10023A001A95E9F71F910F9108955D9BFECF5CB85F
:10024A0008950F931F932F933F934F935F937F9339
:10025A0000916800109169002AE030E0C5DF022FA2
:10026A00132F20916A003327020F131F40916C004D
:10027A0050916B0060916D004F935F937727461BF7
:10028A00570BB42EA52E5F914F917727460F571F14
:10029A00D42EC52E0EF004C0009510950F5F1F4F87
:1002AA00B016A10624F40D151C054CF40FC040919C
:1002BA006E00442311F4909801C0909A07C04091AF
:1002CA006E00442311F4909A01C090987F915F9137
:1002DA004F913F912F911F910F9108951F9361D0D4
:1002EA0052E135E54DEB5AD112D010916800812FB9
:1002FA0010916900912F1F9108950F93BAD003E3CB
:10030A00802ECCD0AFE6B0E0E8D00F9108950F93DD
:10031A001F932F933F934F93ACD070FF3CC00CECCC
:10032A00802EBCD00EEB802EB9D0A8E6B0E0D5D096
:10033A00A9E6B0E0D2D010916800209169002F930D
:10034A00287F283F11F0E89407C02F9168941095F0
:10035A0020951F5F2F4F01C02F912695179526953F
:10036A0017952695179526951795309168000EF4DE
:10037A003195432F3F70432F330F330F330F440F01
:10038A00340F369536953695369510936800209336
:10039A00690030936A004F913F912F911F910F91FD
:1003AA0008950F9366D070FF06C00CEC802E76D0AD
:1003BA0004E4802E73D00F9108950F930F920FB813
:1003CA0000E40EB90BE10DB9769BFDCFC09AC09837
:1003DA000F900F9108950F931F932F93062D0023CB
:1003EA0009F002C06394B8D0013009F00CC00F9331
:1003FA001F9300916D001AE0E9DE802F9927F09291
:10040A0066001F910F910091710004FF01C015C091
:10041A00B49B01C02AC01091710010611093710041
:10042A00A9D06394162D143011F096D01EC06624FC
:10043A009AD010E01093600018C0B29B03C0B39B1F
:10044A000BC013C057E032E54DEFA8D020916D00E4
:10045A00239520936D0009C057E032E54DEF9ED0F9
:10046A0020916D002A9520936D002F911F910F9175
:10047A000895F894B99A33E04EEB8CD0B99830E0ED
:10048A004AE888D005D033E042E384D078940895CE
:10049A00B19B716002C0B1997E7F0895F8940F9361
:1004AA001F93082D18E0069508F448F0B99A30E031
:1004BA0046E770D0B99830E042E16CD008C0B99AEA
:1004CA0030E04AE067D0B99830E04EE763D01A9539
:1004DA0051F71F910F9178940895F8940F931F93F1
:1004EA00002718E00695B99A30E04AE053D0B99847
:1004FA0030E040E14FD0B199006830E04CE64AD094
:10050A001A9581F70C931F910F91789408950F9380
:10051A005F9353E0A3E6B0E080936100909362009A
:10052A0000916100109162002AE030E03CDEED9219
:10053A0000936100109362005A9591F75F910F91B1
:10054A0008950F931F93E0EDF5E01127E00FF11FD7
:10055A0004901F910F910895C59A53E039EA4DE727
:10056A001DD0C5980895C59A5CE034E34DEF16D0C6
:10057A00C59808950F931F932F932AE01FEF0FEF4B
:10058A000A95F1F71A95D9F72A95C1F72F911F9174
:10059A000F91089541503040E8F708954150304096
:1005AA005040E0F708950F931F932F9326E00FEF23
:1005BA001FEF1A95F1F70A95D9F72A95C1F72F91E6
:1005CA001F910F910895C0F9A4B0999282F8809072
:0405DA009CBFC68973
:10001A000DC00F931F930FB716B31C7019F411E09C
:10002A00109360000FBF1F910F9118950F931F93A4
:10003A002F933F934F935F935FB74091670045308B
:10004A000CF403C0442740936700403081F493982E
:10005A00949895980EF002C00BE002C000916500DA
:10006A00002311F0929A01C09298DAD29BD14130C2
:10007A0081F4929894989598009164003091650063
:10008A00032B11F0939A01C0939800916400C8D28F
:10009A0089D1423059F4929893989598949A0091FC
:1000AA006300BED2002D0F77002E7CD1433041F47D
:1000BA00929893989498959A00916600B1D272D1C9
:1000CA004395409367005FBF5F914F913F912F9196
:1000DA001F910F9118950FED0DBF0FE701BB01EEB0
:1000EA0007BB0CE108BB02E000BF05E003BF03E267
:1000FA0006BF00E20BBF0CE100BD03E309B900E053
:10010A0002B908E00AB906E003B91124109267009F
:10011A0000E0009360000CE200936C0001E00093A1
:10012A006B0005E000936D0001E000936E0000276C
:10013A00009368000093690000EF00936A000FEFD4
:10014A00009371006624CED000916F00083209F442
:10015A0005C012E01093600075D201C06CD280E035
:10016A0090E00091600042D2003051F496982091BC
:10017A006A0020936600A7D059D011E019BF38D081
:10018A00013011F4969848D1023059F7969AE9CF7E
:10019A00EE24FF1841E1001F111F4A9509F4089542
:1001AA00EE1CFF1CE21AF30A20F4E20EF31E8894F6
:1001BA00F2CF0894F0CFFF1829E0001F2A9509F41E
:1001CA000895FF1CF11A18F4F10E8894F6CF0894DA
:1001DA00F4CF5527442760E13695279510F4400F50
:1001EA00511F57954795379527956A95B9F70895F9
:1001FA000F931F9300916800502E14D000916A004B
:10020A00502E10D000B30170502E0CD004E0502EA6
:10021A0009D00027502E1CE005D01A95E9F71F9146
:10022A000F9108955D9BFECF5CB808950F931F93BD
:10023A002F933F934F935F937F93009168001091A0
:10024A0069002AE030E0C5DF022F132F20916A00EF
:10025A003327020F131F40916C0050916B0060917D
:10026A006D004F935F937727461B570BB42EA52E2D
:10027A005F914F917727460F571FD42EC52E0EF048
:10028A0004C0009510950F5F1F4FB016A10624F405
:10029A000D151C054CF40FC040916E00442311F457
:1002AA00909801C0909A07C040916E00442311F4BF
:1002BA00909A01C090987F915F914F913F912F91B1
:1002CA001F910F9108951F9361D052E135E54DEBCF
:1002DA00D4D112D010916800812F10916900912F0A
:1002EA001F9108950F9334D103E3802E46D1AFE6D0
:1002FA00B0E062D10F9108950F931F932F933F930C
:10030A004F9326D170FF3CC00CEC802E36D10EEBF9
:10031A00802E33D1A8E6B0E04FD1A9E6B0E04CD1A7
:10032A0010916800209169002F93287F283F11F0CF
:10033A00E89407C02F916894109520951F5F2F4F5E
:10034A0001C02F91269517952695179526951795ED
:10035A0026951795309168000EF43195432F3F701A
:10036A00432F330F330F330F440F340F369536951F
:10037A0036953695109368002093690030936A0089
:10038A004F913F912F911F910F9108950F93E0D0B4
:10039A0070FF06C00CEC802EF0D004E4802EEDD065
:1003AA000F9108950F930F920FB800E40EB90BE165
:1003BA000DB9769BFDCFC09AC0980F900F91089502
:1003CA000F93B49B01C01AC000917100002309F475
:1003DA0015C00027009371003CD16394162D143088
:1003EA0014F429D10BC010E019BF929893989498ED
:1003FA009598662427D110E010936000B49901C043
:10040A0009C000917100002309F004C00FEF0093A6
:10041A0071001FD10F9108950F931F932F933F934C
:10042A004F93062D002309F002C005D16394C8DF5B
:10043A00013029F0023049F1033031F183C0000064
:10044A00B29B04C000C0B39B0AC011C002D1109174
:10045A006D00183C09F0139510936D0008C0F9D08F
:10046A0010916D00113009F01A9510936D000F93D9
:10047A001F9300916D001AE09EDE802F9927F0925B
:10048A0066001F910F915EC03EC00000B29B04C07F
:10049A0000C0B39B0FC019C0DCD010916C00209132
:1004AA006B0031E0130F3327231F10936C00209346
:1004BA006B000BC0CED010916C0020916B001150D4
:1004CA00204010936C0020936B000F931F932F937F
:1004DA003F9300916C0010916B00212F207811F44A
:1004EA00E89405C06894009510950F5F1F4F2AE0A5
:1004FA0030E04EDE802F912FE09266003F912F91DF
:10050A001F910F911FC0E894B29B04C000C0B39B17
:10051A0006C009C09ED011E010936E0004C099D0A5
:10052A0010E010936E001127812F912F20916E00F9
:10053A00222309F004C01CE01093660003C01DE0EA
:10054A00109366004F913F912F911F910F9108953B
:10055A00F894B99A33E04EEB8CD0B99830E04AE877
:10056A0088D005D033E042E384D078940895B19BD3
:10057A00716002C0B1997E7F0895F8940F931F931A
:10058A00082D18E0069508F448F0B99A30E046E7D5
:10059A0070D0B99830E042E16CD008C0B99A30E026
:1005AA004AE067D0B99830E04EE763D01A9551F720
:1005BA001F910F9178940895F8940F931F93002731
:1005CA0018E00695B99A30E04AE053D0B99830E07D
:1005DA0040E14FD0B199006830E04CE64AD01A9514
:1005EA0081F70C931F910F91789408950F935F935D
:1005FA0053E0A3E6B0E0809361009093620000911B
:10060A006100109162002AE030E0C2DDED920093B1
:10061A006100109362005A9591F75F910F910895C6
:10062A000F931F93EEEAF6E01127E00FF11F0490F3
:10063A001F910F910895C59A53E039EA4DE71DD0ED
:10064A00C5980895C59A5CE034E34DEF16D0C59875
:10065A0008950F931F932F932AE01FEF0FEF0A9528
:10066A00F1F71A95D9F72A95C1F72F911F910F9192
:10067A00089541503040E8F70895415030405040C5
:10068A00E0F708950F931F932F9326E00FEF1FEFC4
:10069A001A95F1F70A95D9F72A95C1F72F911F9163
:1006AA000F910895C0F9A4B0999282F880909CBFE6
:0206BA00C689EF
:00000001FF