diff --git a/dist/default/production/attiny2313a_thermostat.X.production.hex b/dist/default/production/attiny2313a_thermostat.X.production.hex
index e492a1a..50d084c 100644
--- a/dist/default/production/attiny2313a_thermostat.X.production.hex
+++ b/dist/default/production/attiny2313a_thermostat.X.production.hex
@@ -1,5 +1,5 @@
:020000020000FC
-:020000006FC0CF
+:020000006CC0D2
:02000800189549
:0200160002C026
:10001A000DC00F931F930FB716B31C7019F411E09C
@@ -7,119 +7,121 @@
:10003A002F933F934F935F935FB74091670045308B
:10004A000CF403C0442740936700403081F493982E
:10005A00949895980EF002C00BE002C000916500DA
-:10006A00002311F0929A01C0929858D305D24130D8
+:10006A00002311F0929A01C0929856D302D24130DD
:10007A0081F4929894989598009164003091650063
-:10008A00032B11F0939A01C093980091640046D310
-:10009A00F3D1423059F4929893989598949A009192
-:1000AA0063003CD3002D0F77002EE6D1433041F494
-:1000BA00929893989498959A009166002FD3DCD1E0
-:1000CA004395409367005FBF5F914F913F912F9196
-:1000DA001F910F9118950FED0DBF0FE701BB01EEB0
-:1000EA0007BB0CE108BB02E000BF05E003BF03E267
-:1000FA0006BF00E20BBF0CE100BD03E309B900E053
-:10010A0002B908E00AB906E003B91124109267009F
-:10011A0000E00093600004E0302EEAD0042D0031A4
-:10012A0011F09CD014C000E0302EE2D040926B0057
-:10013A0001E0302EDDD040926C0002E0302ED8D0A3
-:10014A0040926D0003E0302ED3D040926E0000271B
-:10015A00009368000093690000EF00936A000FEFB4
-:10016A0000937100662428D100916F00083209F4C7
-:10017A0005C012E010936000E3D201C0DAD280E039
-:10018A0090E000916000003051F420916A002093C1
-:10019A00660003D1A9D2B4D011E019BF41D0013011
-:1001AA0009F4A6D1023069F71BE01093630010939B
-:1001BA006400109365001093660011E019BFE1CF47
-:1001CA00EE24FF1841E1001F111F4A9509F4089512
-:1001DA00EE1CFF1CE21AF30A20F4E20EF31E8894C6
-:1001EA00F2CF0894F0CFFF1829E0001F2A9509F4EE
-:1001FA000895FF1CF11A18F4F10E8894F6CF0894AA
-:10020A00F4CF5527442760E13695279510F4400F1F
-:10021A00511F57954795379527956A95B9F70895C8
-:10022A000F931F9300916800502E14D000916A001A
-:10023A00502E10D000B30170502E0CD004E0502E76
-:10024A0009D00027502E1CE005D01A95E9F71F9116
-:10025A000F9108955D9BFECF5CB8089501E000936D
-:10026A006B00402E00E0302E36D00CE200936C007A
-:10027A00402E01E0302E2FD005E000936D00402E75
-:10028A0002E0302E28D001E000936E00402E03E0F9
-:10029A00302E21D000E1402E04E0302E1CD00895EB
-:1002AA000F9300916B00402E00E0302E14D0009185
-:1002BA006C00402E01E0302E0ED000916D00402ED1
-:1002CA0002E0302E08D000916E00402E03E0302E5E
-:1002DA0002D00F910895F8940F93E199FECF00E0B0
-:1002EA000CBB3EBA4DBAE29AE19A0F9178940895FE
-:1002FA00F894E199FECF3EBAE09A4DB27894089507
-:10030A000F931F932F933F934F935F937F93009184
-:10031A006800109169002AE030E073DF022F132F82
-:10032A0020916A003327020F131F40916C005091ED
-:10033A006B0060916D004F935F937727461B570BB5
-:10034A00B42EA52E5F914F917727460F571FD42EB3
-:10035A00C52E0EF004C0009510950F5F1F4FB01602
-:10036A00A10624F40D151C054CF40FC040916E0033
-:10037A00442311F4909801C0909A07C040916E00EE
-:10038A00442311F4909A01C090987F915F914F9104
-:10039A003F912F911F910F9108951F9361D052E1C0
-:1003AA0035E54DEBE8D112D010916800812F1091FC
-:1003BA006900912F1F9108950F9348D103E3802E6E
-:1003CA005AD1AFE6B0E076D10F9108950F931F93FB
-:1003DA002F933F934F933AD170FF3CC00CEC802E81
-:1003EA004AD10EEB802E47D1A8E6B0E063D1A9E648
-:1003FA00B0E060D110916800209169002F93287FA6
-:10040A00283F11F0E89407C02F9168941095209521
-:10041A001F5F2F4F01C02F91269517952695179587
-:10042A002695179526951795309168000EF4319503
-:10043A00432F3F70432F330F330F330F440F340FC3
-:10044A00369536953695369510936800209369004F
-:10045A0030936A004F913F912F911F910F91089508
-:10046A000F93F4D070FF06C00CEC802E04D104E484
-:10047A00802E01D10F9108950F930F920FB800E4C7
-:10048A000EB90BE10DB9769BFDCFC09AC0980F90BB
-:10049A000F9108950F93B49B01C01CC00091710085
-:1004AA00002309F417C000270093710050D1639408
-:1004BA00162D143014F43DD10DC010E019BF9298D6
-:1004CA009398949895986624EBDE3AD1969810E022
-:1004DA0010936000B49901C009C000917100002313
-:1004EA0009F004C00FEF0093710031D10F91089504
-:1004FA000F931F932F933F934F93062D002309F0D9
-:10050A0004C09098969A15D16394C4DF013029F0FB
-:10051A00023049F1033031F193C0E6D0B29B04C0F6
-:10052A0000C0B39B0AC011C012D110916D00183CD3
-:10053A0009F0139510936D0008C009D110916D0050
-:10054A00113009F01A9510936D000F931F930091C3
-:10055A006D001AE048DE802F9927F09266001F91FD
-:10056A000F916EC047C0C0D0B29B04C000C0B39BFD
-:10057A0013C021C0ECD010916C0020916B00103B8D
-:10058A0034E0230731F03AE0130F3327231F109387
-:10059A006C0020936B000FC0DAD010916C00209190
-:1005AA006B001C303EEF230711F01A5020401093C5
-:1005BA006C0020936B000F931F932F933F9300912E
-:1005CA006C0010916B00212F207811F4E89405C07B
-:1005DA006894009510950F5F1F4F2AE030E0F0DD18
-:1005EA00802F912F0AE0009366003F912F911F916F
-:1005FA000F9126C0E894B29B04C000C0B39B06C00A
-:10060A0009C0A5D011E010936E0004C0A0D010E07C
-:10061A0010936E001127812F912F1EE01093630013
-:10062A00109364001093650020916E00222309F054
-:10063A0004C01CE01093660003C01DE0109366001E
-:10064A004F913F912F911F910F910895F894B99A64
-:10065A0033E04EEB8CD0B99830E04AE888D005D028
-:10066A0033E042E384D078940895B19B716002C06C
-:10067A00B1997E7F0895F8940F931F93082D18E07F
-:10068A00069508F448F0B99A30E046E770D0B99870
-:10069A0030E042E16CD008C0B99A30E04AE067D055
-:1006AA00B99830E04EE763D01A9551F71F910F9130
-:1006BA0078940895F8940F931F93002718E00695ED
-:1006CA00B99A30E04AE053D0B99830E040E14FD0CF
-:1006DA00B199006830E04CE64AD01A9581F70C933C
-:1006EA001F910F91789408950F935F9353E0A3E6B7
-:1006FA00B0E08093610090936200009161001091D4
-:10070A0062002AE030E05CDDED9200936100109314
-:10071A0062005A9591F75F910F9108950F931F9375
-:10072A00EAE8F7E01127E00FF11F04901F910F91FB
-:10073A000895C59A53E039EA4DE71DD0C598089542
-:10074A00C59A5CE034E34DEF16D0C59808950F932F
-:10075A001F932F932AE01FEF0FEF0A95F1F71A95CF
-:10076A00D9F72A95C1F72F911F910F9108954150FA
-:10077A003040E8F70895415030405040E0F708957E
-:0E078A00C0F9A4B0999282F880909CBFC689F5
+:10008A00032B11F0939A01C093980091640044D312
+:10009A00F0D1423041F4929893989598949A0091AD
+:1000AA0063003AD3E6D1433041F4929893989498F6
+:1000BA00959A0091660030D3DCD14395409367004E
+:1000CA005FBF5F914F913F912F911F910F911895AB
+:1000DA000FED0DBF0FE701BB01EE07BB0CE108BB3B
+:1000EA0002E000BF05E003BF03E206BF00E20BBF68
+:1000FA000CE100BD03E309B900E002B908E00AB95E
+:10010A0006E003B911241092670000E00093600032
+:10011A0004E0302EEAD0042D003111F09CD014C036
+:10012A0000E0302EE2D040926B0001E0302EDDD0AC
+:10013A0040926C0002E0302ED8D040926D0003E06D
+:10014A00302ED3D040926E000027009368000093AF
+:10015A00690000EF00936A000FEF009371006624B4
+:10016A0028D100916F00083209F405C012E01093FB
+:10017A006000F3D201C0EAD280E090E00091600012
+:10018A00003051F420916A002093660003D1AAD26C
+:10019A00B4D011E019BF41D0013009F4A6D1023020
+:1001AA0069F71BE0109363001093640010936500D5
+:1001BA001093660011E019BFE1CFEE24FF1841E168
+:1001CA00001F111F4A9509F40895EE1CFF1CE21A3C
+:1001DA00F30A20F4E20EF31E8894F2CF0894F0CFCB
+:1001EA00FF1829E0001F2A9509F40895FF1CF11A47
+:1001FA0018F4F10E8894F6CF0894F4CF55274427C3
+:10020A0060E13695279510F4400F511F5795479591
+:10021A00379527956A95B9F708950F931F9300911B
+:10022A006800502E14D000916A00502E10D000B3EE
+:10023A000170502E0CD004E0502E09D00027502E09
+:10024A001CE005D01A95E9F71F910F9108955D9B5F
+:10025A00FECF5CB8089501E000936B00402E00E0E9
+:10026A00302E36D00CE200936C00402E01E0302E86
+:10027A002FD005E000936D00402E02E0302E28D0EA
+:10028A0001E000936E00402E03E0302E21D000E101
+:10029A00402E04E0302E1CD008950F9300916B007D
+:1002AA00402E00E0302E14D000916C00402E01E068
+:1002BA00302E0ED000916D00402E02E0302E08D074
+:1002CA0000916E00402E03E0302E02D00F91089567
+:1002DA00F8940F93E199FECF00E00CBB3EBA4DBAF9
+:1002EA00E29AE19A0F9178940895F894E199FECFF1
+:1002FA003EBAE09A4DB2789408950F931F932F93C4
+:10030A003F934F935F937F93009168001091690028
+:10031A002AE030E073DF022F132F20916A0033277F
+:10032A00020F131F40916C0050916B0060916D0099
+:10033A004F935F937727461B570BB42EA52E5F91D9
+:10034A004F917727460F571FD42EC52E0EF004C0A3
+:10035A00009510950F5F1F4FB016A10624F40D15D6
+:10036A001C054CF40FC040916E00442311F4909880
+:10037A0001C0909A07C040916E00442311F4909AEC
+:10038A0001C090987F915F914F913F912F911F915A
+:10039A000F9108951F9361D052E135E54DEBF8D1E5
+:1003AA0012D010916800812F10916900912F1F912E
+:1003BA0008950F9349D103E3802E5BD1AFE6B0E0F5
+:1003CA0077D10F9108950F931F932F933F934F93D4
+:1003DA003BD170FF3CC00CEC802E4BD10EEB802E33
+:1003EA0048D1A8E6B0E064D1A9E6B0E061D11091A5
+:1003FA006800209169002F93287F283F11F0E89424
+:10040A0007C02F916894109520951F5F2F4F01C048
+:10041A002F91269517952695179526951795269522
+:10042A001795309168000EF43195432F3F70432F92
+:10043A00330F330F330F440F340F369536953695F5
+:10044A003695109368002093690030936A004F91A3
+:10045A003F912F911F910F9108950F93F5D070FF3F
+:10046A0006C00CEC802E05D104E4802E02D10F9137
+:10047A0008950F930F920FB800E40EB90BE10DB96E
+:10048A00769BFDCFC09AC0980F900F9108950F9355
+:10049A00B49B01C01CC000917100002309F417C06D
+:1004AA0000270093710060D16394162D143014F460
+:1004BA004DD10DC010E019BF9298939894989598D1
+:1004CA006624EBDE4AD1969810E010936000B49946
+:1004DA0001C009C000917100002309F004C00FEFA8
+:1004EA000093710041D10F9108950F931F932F9399
+:1004FA003F934F93062D002309F004C09098969AD3
+:10050A0025D16394C4DF013029F0023051F1033060
+:10051A0039F194C0E7D0B29B04C000C0B39B0AC0B3
+:10052A0011C022D110916D00183C09F01395109357
+:10053A006D0008C019D110916D00113009F01A959B
+:10054A0010936D00E8940F931F9300916D001AE0C9
+:10055A0047DE802F9927F09266001F910F916EC097
+:10056A0047C0C0D0B29B04C000C0B39B13C021C017
+:10057A00FBD010916C0020916B00103B34E02307F4
+:10058A0031F03AE0130F3327231F10936C002093A6
+:10059A006B000FC0E9D010916C0020916B001C30E9
+:1005AA003EEF230711F01A50204010936C0020935D
+:1005BA006B000F931F932F933F9300916C00109140
+:1005CA006B00212F207811F4E89405C068940095F7
+:1005DA0010950F5F1F4F2AE030E0EFDD802F912F3B
+:1005EA000AE0009366003F912F911F910F9126C058
+:1005FA00E894B29B04C000C0B39B06C009C0B4D043
+:10060A0011E010936E0004C0AFD010E010936E009A
+:10061A001127812F912F1EE010936300109364001D
+:10062A001093650020916E00222309F004C01CE09B
+:10063A001093660003C01DE0109366004F913F912E
+:10064A002F911F910F910895F894B99A33E04EEBC8
+:10065A009BD0B99830E04AE897D005D033E042E31E
+:10066A0093D078940895B19B716002C0B1997E7F4E
+:10067A000895F8940F931F93082D18E0069508F42F
+:10068A0048F0B99A30E046E77FD0B99830E042E1C5
+:10069A007BD008C0B99A30E04AE076D0B99830E009
+:1006AA004EE772D01A9551F71F910F9178940895D9
+:1006BA00F8940F931F93002718E00695B99A30E033
+:1006CA004AE062D0B99830E040E15ED0B199006862
+:1006DA0030E04CE659D01A9581F70C931F910F918F
+:1006EA00789408950F935F9353E0A3E6B0E0809364
+:1006FA0061009093620000916100109162002AE00B
+:10070A0030E05BDDED9200936100109362005A9530
+:10071A0091F75F910F9108950F931F93E4EAF7E021
+:10072A001127E00FF11F049000916700023009F0D1
+:10073A000AC0002D0F77002E062D02300CF403C0DC
+:10074A00002D0068002E1F910F910895C59A53E05D
+:10075A0039EA4DE71DD0C5980895C59A5CE034E39F
+:10076A004DEF16D0C59808950F931F932F932AE043
+:10077A001FEF0FEF0A95F1F71A95D9F72A95C1F7E6
+:10078A002F911F910F91089541503040E8F7089535
+:10079A00415030405040E0F70895C0F9A4B0999212
+:0807AA0082F880909CBFC68913
:00000001FF
diff --git a/dist/default/production/attiny2313a_thermostat.X.production.lss b/dist/default/production/attiny2313a_thermostat.X.production.lss
index 20479db..312490f 100644
--- a/dist/default/production/attiny2313a_thermostat.X.production.lss
+++ b/dist/default/production/attiny2313a_thermostat.X.production.lss
@@ -1,58 +1,58 @@
-AVRASM ver. 2.2.7 main.asm Fri Jun 30 21:37:26 2023
+AVRASM ver. 2.2.7 main.asm Sat Jul 01 12:22:06 2023
[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(16): Including file 'macros.asm'
-main.asm(317): Including file 'div16u.asm'
+main.asm(310): Including file 'div16u.asm'
div16u.asm(22): warning: Register r16 already defined by the .DEF directive
-main.asm(317): 'div16u.asm' included form here
+main.asm(310): 'div16u.asm' included form here
div16u.asm(23): warning: Register r17 already defined by the .DEF directive
-main.asm(317): 'div16u.asm' included form here
+main.asm(310): 'div16u.asm' included form here
div16u.asm(24): warning: Register r16 already defined by the .DEF directive
-main.asm(317): 'div16u.asm' included form here
+main.asm(310): 'div16u.asm' included form here
div16u.asm(25): warning: Register r17 already defined by the .DEF directive
-main.asm(317): 'div16u.asm' included form here
+main.asm(310): 'div16u.asm' included form here
div16u.asm(27): warning: Register r19 already defined by the .DEF directive
-main.asm(317): 'div16u.asm' included form here
+main.asm(310): 'div16u.asm' included form here
div16u.asm(28): warning: Register r20 already defined by the .DEF directive
-main.asm(317): 'div16u.asm' included form here
-main.asm(318): Including file 'div8u.asm'
+main.asm(310): 'div16u.asm' included form here
+main.asm(311): Including file 'div8u.asm'
div8u.asm(18): warning: Register r15 already defined by the .DEF directive
-main.asm(318): 'div8u.asm' included form here
+main.asm(311): 'div8u.asm' included form here
div8u.asm(19): warning: Register r16 already defined by the .DEF directive
-main.asm(318): 'div8u.asm' included form here
+main.asm(311): 'div8u.asm' included form here
div8u.asm(20): warning: Register r16 already defined by the .DEF directive
-main.asm(318): 'div8u.asm' included form here
+main.asm(311): 'div8u.asm' included form here
div8u.asm(21): warning: Register r17 already defined by the .DEF directive
-main.asm(318): 'div8u.asm' included form here
+main.asm(311): 'div8u.asm' included form here
div8u.asm(22): warning: Register r18 already defined by the .DEF directive
-main.asm(318): 'div8u.asm' included form here
-main.asm(319): Including file 'mpy16u.asm'
+main.asm(311): 'div8u.asm' included form here
+main.asm(312): Including file 'mpy16u.asm'
mpy16u.asm(19): warning: Register r16 already defined by the .DEF directive
-main.asm(319): 'mpy16u.asm' included form here
+main.asm(312): 'mpy16u.asm' included form here
mpy16u.asm(20): warning: Register r17 already defined by the .DEF directive
-main.asm(319): 'mpy16u.asm' included form here
+main.asm(312): 'mpy16u.asm' included form here
mpy16u.asm(21): warning: Register r18 already defined by the .DEF directive
-main.asm(319): 'mpy16u.asm' included form here
+main.asm(312): 'mpy16u.asm' included form here
mpy16u.asm(22): warning: Register r19 already defined by the .DEF directive
-main.asm(319): 'mpy16u.asm' included form here
+main.asm(312): 'mpy16u.asm' included form here
mpy16u.asm(23): warning: Register r18 already defined by the .DEF directive
-main.asm(319): 'mpy16u.asm' included form here
+main.asm(312): 'mpy16u.asm' included form here
mpy16u.asm(24): warning: Register r19 already defined by the .DEF directive
-main.asm(319): 'mpy16u.asm' included form here
+main.asm(312): 'mpy16u.asm' included form here
mpy16u.asm(25): warning: Register r20 already defined by the .DEF directive
-main.asm(319): 'mpy16u.asm' included form here
+main.asm(312): 'mpy16u.asm' included form here
mpy16u.asm(26): warning: Register r21 already defined by the .DEF directive
-main.asm(319): 'mpy16u.asm' included form here
-main.asm(486): warning: Register r16 already defined by the .DEF directive
-main.asm(487): warning: Register r17 already defined by the .DEF directive
+main.asm(312): 'mpy16u.asm' included form here
+main.asm(479): warning: Register r16 already defined by the .DEF directive
+main.asm(480): warning: Register r17 already defined by the .DEF directive
[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(16): Including file 'macros.asm'
-main.asm(317): Including file 'div16u.asm'
-main.asm(318): Including file 'div8u.asm'
-main.asm(319): Including file 'mpy16u.asm'
+main.asm(310): Including file 'div16u.asm'
+main.asm(311): Including file 'div8u.asm'
+main.asm(312): Including file 'mpy16u.asm'
;
@@ -938,7 +938,7 @@ main.asm(319): Including file 'mpy16u.asm'
//
.ORG 0x00
-000000 c06f rjmp RESET_vect
+000000 c06c rjmp RESET_vect
.ORG 0x04
000004 9518 reti
@@ -1010,8 +1010,8 @@ main.asm(319): Including file 'mpy16u.asm'
000037 9a92 sbi PORTD, DIGIT_1_PIN
000038 c001 rjmp PC+2
000039 9892 cbi PORTD, DIGIT_1_PIN
-00003a d358 rcall DISPLAY_DECODER
-00003b d205 rcall USI_TRANSMIT
+00003a d356 rcall DISPLAY_DECODER
+00003b d202 rcall USI_TRANSMIT
_indicate_2:
00003c 3041 cpi r20, 1
@@ -1028,197 +1028,190 @@ main.asm(319): Including file 'mpy16u.asm'
000048 c001 rjmp PC+2
000049 9893 cbi PORTD, DIGIT_2_PIN
00004a 9100 0064 lds TEMP_REG_A, DIGITS+1
-00004c d346 rcall DISPLAY_DECODER
-00004d d1f3 rcall USI_TRANSMIT
+00004c d344 rcall DISPLAY_DECODER
+00004d d1f0 rcall USI_TRANSMIT
_indicate_3:
00004e 3042 cpi r20, 2
-00004f f459 brne _indicate_4
+00004f f441 brne _indicate_4
000050 9892 cbi PORTD, DIGIT_1_PIN
000051 9893 cbi PORTD, DIGIT_2_PIN
000052 9895 cbi PORTD, DIGIT_4_PIN
000053 9a94 sbi PORTD, DIGIT_3_PIN
000054 9100 0063 lds TEMP_REG_A, DIGITS
-000056 d33c rcall DISPLAY_DECODER
-000057 2d00 mov r16, r0
-000058 770f cbr r16, (1<<7)
-000059 2e00 mov r0, r16
-00005a d1e6 rcall USI_TRANSMIT
+000056 d33a rcall DISPLAY_DECODER
+000057 d1e6 rcall USI_TRANSMIT
_indicate_4:
-00005b 3043 cpi r20, 3
-00005c f441 brne _indicate_exit
+000058 3043 cpi r20, 3
+000059 f441 brne _indicate_exit
-00005d 9892 cbi PORTD, DIGIT_1_PIN
-00005e 9893 cbi PORTD, DIGIT_2_PIN
-00005f 9894 cbi PORTD, DIGIT_3_PIN
-000060 9a95 sbi PORTD, DIGIT_4_PIN
-000061 9100 0066 lds TEMP_REG_A, DIGITS+3
-000063 d32f rcall DISPLAY_DECODER
-000064 d1dc rcall USI_TRANSMIT
+00005a 9892 cbi PORTD, DIGIT_1_PIN
+00005b 9893 cbi PORTD, DIGIT_2_PIN
+00005c 9894 cbi PORTD, DIGIT_3_PIN
+00005d 9a95 sbi PORTD, DIGIT_4_PIN
+00005e 9100 0066 lds TEMP_REG_A, DIGITS+3
+000060 d330 rcall DISPLAY_DECODER
+000061 d1dc rcall USI_TRANSMIT
_indicate_exit:
-000065 9543 inc r20
-000066 9340 0067 sts CURRENT_DIGIT, r20
+000062 9543 inc r20
+000063 9340 0067 sts CURRENT_DIGIT, r20
-000068 bf5f out SREG, r21
+000065 bf5f out SREG, r21
-000069 915f pop r21
-00006a 914f pop r20
-00006b 913f pop r19
-00006c 912f pop r18
-00006d 911f pop r17
-00006e 910f pop r16
-00006f 9518 reti
+000066 915f pop r21
+000067 914f pop r20
+000068 913f pop r19
+000069 912f pop r18
+00006a 911f pop r17
+00006b 910f pop r16
+00006c 9518 reti
;//
; **** СТАРТ ПРОГРАММЫ *******************************************
RESET_vect:
-000070 ed0f ldi TEMP_REG_A, LOW(RAMEND)
-000071 bf0d out SPL, TEMP_REG_A
+00006d ed0f ldi TEMP_REG_A, LOW(RAMEND)
+00006e bf0d out SPL, TEMP_REG_A
//
; **** ПРОЦЕСС ИНИЦИАЛИЗАЦИИ МК **********************************
MCU_INIT:
; **** ИНИЦИАЛИЗАЦИЯ ПИНОВ *************************************
-000072 e70f
-000073 bb01 outi r16, DDRD, (1<
//
; **** ГЛАВНЫЙ ЦИКЛ **********************************************
LOOP:
-0000c6 9100 0060 lds r16, MCU_STATE ; получаем текущее состояние МК
- ; rcall DISPLAY_UPD_DIGITS
+0000c3 9100 0060 lds r16, MCU_STATE ; получаем текущее состояние МК
_STATE_DEFAULT:
-0000c8 3000 cpi r16, MCU_STATE_DEFAULT
-0000c9 f451 brne _STATE_PROGRAM
+0000c5 3000 cpi r16, MCU_STATE_DEFAULT
+0000c6 f451 brne _STATE_PROGRAM
-0000ca 9120 006a lds r18, TEMP_F
-0000cc 9320 0066 sts DIGITS+3, r18
+0000c7 9120 006a lds r18, TEMP_F
+0000c9 9320 0066 sts DIGITS+3, r18
-0000ce d103 rcall TEMP_UPD ; обновление данных о температуре
-0000cf d2a9 rcall DISPLAY_UPD_DIGITS
-0000d0 d0b4 rcall TEMP_COMPARSION ; логика термостата
-0000d1 e011
-0000d2 bf19 outi r17, TIMSK, (1<
@@ -1256,29 +1249,29 @@ main.asm(319): Including file 'mpy16u.asm'
;***** Code
div16u:
-0000e5 24ee clr drem16uL ; clear remainder Low byte
-0000e6 18ff sub drem16uH,drem16uH ; clear remainder High byte and carry
-0000e7 e141 ldi dcnt16u,17 ; init loop counter
+0000e2 24ee clr drem16uL ; clear remainder Low byte
+0000e3 18ff sub drem16uH,drem16uH ; clear remainder High byte and carry
+0000e4 e141 ldi dcnt16u,17 ; init loop counter
d16u_1:
-0000e8 1f00 rol dd16uL ; shift left dividend
-0000e9 1f11 rol dd16uH
-0000ea 954a dec dcnt16u ; decrement counter
-0000eb f409 brne d16u_2 ; if done
-0000ec 9508 ret ; return
+0000e5 1f00 rol dd16uL ; shift left dividend
+0000e6 1f11 rol dd16uH
+0000e7 954a dec dcnt16u ; decrement counter
+0000e8 f409 brne d16u_2 ; if done
+0000e9 9508 ret ; return
d16u_2:
-0000ed 1cee rol drem16uL ; shift dividend into remainder
-0000ee 1cff rol drem16uH
-0000ef 1ae2 sub drem16uL,dv16uL ; remainder = remainder - divisor
-0000f0 0af3 sbc drem16uH,dv16uH
-0000f1 f420 brcc d16u_3 ; if result negative
-0000f2 0ee2 add drem16uL,dv16uL ; restore remainder
-0000f3 1ef3 adc drem16uH,dv16uH
-0000f4 9488 clc ; clear carry to be shifted into result
-0000f5 cff2 rjmp d16u_1 ; else
+0000ea 1cee rol drem16uL ; shift dividend into remainder
+0000eb 1cff rol drem16uH
+0000ec 1ae2 sub drem16uL,dv16uL ; remainder = remainder - divisor
+0000ed 0af3 sbc drem16uH,dv16uH
+0000ee f420 brcc d16u_3 ; if result negative
+0000ef 0ee2 add drem16uL,dv16uL ; restore remainder
+0000f0 1ef3 adc drem16uH,dv16uH
+0000f1 9488 clc ; clear carry to be shifted into result
+0000f2 cff2 rjmp d16u_1 ; else
d16u_3:
-0000f6 9408 sec ; set carry to be shifted into result
+0000f3 9408 sec ; set carry to be shifted into result
.INCLUDE "div8u.asm"
-0000f7 cff0
+0000f4 cff0
;*
;* "div8u" - 8/8 Bit Unsigned Division
;*
@@ -1303,21 +1296,21 @@ main.asm(319): Including file 'mpy16u.asm'
;***** Code
-0000f8 18ff div8u: sub drem8u,drem8u ;clear remainder and carry
-0000f9 e029 ldi dcnt8u,9 ;init loop counter
-0000fa 1f00 d8u_1: rol dd8u ;shift left dividend
-0000fb 952a dec dcnt8u ;decrement counter
-0000fc f409 brne d8u_2 ;if done
-0000fd 9508 ret ; return
-0000fe 1cff d8u_2: rol drem8u ;shift dividend into remainder
-0000ff 1af1 sub drem8u,dv8u ;remainder = remainder - divisor
-000100 f418 brcc d8u_3 ;if result negative
-000101 0ef1 add drem8u,dv8u ; restore remainder
-000102 9488 clc ; clear carry to be shifted into result
-000103 cff6 rjmp d8u_1 ;else
-000104 9408 d8u_3: sec ; set carry to be shifted into result
+0000f5 18ff div8u: sub drem8u,drem8u ;clear remainder and carry
+0000f6 e029 ldi dcnt8u,9 ;init loop counter
+0000f7 1f00 d8u_1: rol dd8u ;shift left dividend
+0000f8 952a dec dcnt8u ;decrement counter
+0000f9 f409 brne d8u_2 ;if done
+0000fa 9508 ret ; return
+0000fb 1cff d8u_2: rol drem8u ;shift dividend into remainder
+0000fc 1af1 sub drem8u,dv8u ;remainder = remainder - divisor
+0000fd f418 brcc d8u_3 ;if result negative
+0000fe 0ef1 add drem8u,dv8u ; restore remainder
+0000ff 9488 clc ; clear carry to be shifted into result
+000100 cff6 rjmp d8u_1 ;else
+000101 9408 d8u_3: sec ; set carry to be shifted into result
.INCLUDE "mpy16u.asm"
-000105 cff4
+000102 cff4
;*
;* "mpy16u" - 16x16 Bit Unsigned Multiplication
;*
@@ -1347,186 +1340,186 @@ main.asm(319): Including file 'mpy16u.asm'
;***** Code
-000106 2755 mpy16u: clr m16u3 ;clear 2 highest bytes of result
-000107 2744 clr m16u2
-000108 e160 ldi mcnt16u,16 ;init loop counter
-000109 9536 lsr mp16uH
-00010a 9527 ror mp16uL
+000103 2755 mpy16u: clr m16u3 ;clear 2 highest bytes of result
+000104 2744 clr m16u2
+000105 e160 ldi mcnt16u,16 ;init loop counter
+000106 9536 lsr mp16uH
+000107 9527 ror mp16uL
-00010b f410 m16u_1: brcc noad8 ;if bit 0 of multiplier set
-00010c 0f40 add m16u2,mc16uL ;add multiplicand Low to byte 2 of res
-00010d 1f51 adc m16u3,mc16uH ;add multiplicand high to byte 3 of res
-00010e 9557 noad8: ror m16u3 ;shift right result byte 3
-00010f 9547 ror m16u2 ;rotate right result byte 2
-000110 9537 ror m16u1 ;rotate result byte 1 and multiplier High
-000111 9527 ror m16u0 ;rotate result byte 0 and multiplier Low
-000112 956a dec mcnt16u ;decrement loop counter
-000113 f7b9 brne m16u_1 ;if not done, loop more
-000114 9508
+000108 f410 m16u_1: brcc noad8 ;if bit 0 of multiplier set
+000109 0f40 add m16u2,mc16uL ;add multiplicand Low to byte 2 of res
+00010a 1f51 adc m16u3,mc16uH ;add multiplicand high to byte 3 of res
+00010b 9557 noad8: ror m16u3 ;shift right result byte 3
+00010c 9547 ror m16u2 ;rotate right result byte 2
+00010d 9537 ror m16u1 ;rotate result byte 1 and multiplier High
+00010e 9527 ror m16u0 ;rotate result byte 0 and multiplier Low
+00010f 956a dec mcnt16u ;decrement loop counter
+000110 f7b9 brne m16u_1 ;if not done, loop more
+000111 9508
//
TEMP_SEND_UART:
-000115 930f push r16
-000116 931f push r17
+000112 930f push r16
+000113 931f push r17
; целая часть
-000117 9100 0068 lds r16, TEMP_L
-000119 2e50 mov r5, r16
-00011a d014 rcall UART_WR_BYTE
+000114 9100 0068 lds r16, TEMP_L
+000116 2e50 mov r5, r16
+000117 d014 rcall UART_WR_BYTE
; дробная часть
-00011b 9100 006a lds r16, TEMP_F
-00011d 2e50 mov r5, r16
-00011e d010 rcall UART_WR_BYTE
+000118 9100 006a lds r16, TEMP_F
+00011a 2e50 mov r5, r16
+00011b d010 rcall UART_WR_BYTE
; состояние реле
-00011f b300 in r16, PIND
-000120 7001 andi r16, (1<
//
UART_WR_BYTE:
-00012f 9b5d sbis UCSRA, UDRE
-000130 cffe rjmp UART_WR_BYTE
-000131 b85c out UDR, r5
-000132 9508 ret
+00012c 9b5d sbis UCSRA, UDRE
+00012d cffe rjmp UART_WR_BYTE
+00012e b85c out UDR, r5
+00012f 9508 ret
//
//
INIT_DEFAULT_PARAMS:
-000133 e001 ldi r16, DEFAULT_SETTING_TEMP_H
-000134 9300 006b sts SETTING_TEMP_H, r16 ; уставка HIGH
-000136 2e40 mov EEP_D_r, r16
-000137 e000 ldi r16, EEP_SETTING_TEMP_H
-000138 2e30 mov EEP_A_r, r16
-000139 d036 rcall EEP_WR_BYTE
+000130 e001 ldi r16, DEFAULT_SETTING_TEMP_H
+000131 9300 006b sts SETTING_TEMP_H, r16 ; уставка HIGH
+000133 2e40 mov EEP_D_r, r16
+000134 e000 ldi r16, EEP_SETTING_TEMP_H
+000135 2e30 mov EEP_A_r, r16
+000136 d036 rcall EEP_WR_BYTE
-00013a e20c ldi r16, DEFAULT_SETTING_TEMP_L
-00013b 9300 006c sts SETTING_TEMP_L, r16 ; уставка LOW
-00013d 2e40 mov EEP_D_r, r16
-00013e e001 ldi r16, EEP_SETTING_TEMP_L
-00013f 2e30 mov EEP_A_r, r16
-000140 d02f rcall EEP_WR_BYTE
+000137 e20c ldi r16, DEFAULT_SETTING_TEMP_L
+000138 9300 006c sts SETTING_TEMP_L, r16 ; уставка LOW
+00013a 2e40 mov EEP_D_r, r16
+00013b e001 ldi r16, EEP_SETTING_TEMP_L
+00013c 2e30 mov EEP_A_r, r16
+00013d d02f rcall EEP_WR_BYTE
-000141 e005 ldi r16, DEFAULT_SETTING_HYST
-000142 9300 006d sts SETTING_HYST, r16 ; гистерезис
-000144 2e40 mov EEP_D_r, r16
-000145 e002 ldi r16, EEP_SETTING_HYST
-000146 2e30 mov EEP_A_r, r16
-000147 d028 rcall EEP_WR_BYTE
+00013e e005 ldi r16, DEFAULT_SETTING_HYST
+00013f 9300 006d sts SETTING_HYST, r16 ; гистерезис
+000141 2e40 mov EEP_D_r, r16
+000142 e002 ldi r16, EEP_SETTING_HYST
+000143 2e30 mov EEP_A_r, r16
+000144 d028 rcall EEP_WR_BYTE
-000148 e001 ldi r16, DEFAULT_SETTING_MODE
-000149 9300 006e sts SETTING_MODE, r16 ; режим
-00014b 2e40 mov EEP_D_r, r16
-00014c e003 ldi r16, EEP_SETTING_MODE
-00014d 2e30 mov EEP_A_r, r16
-00014e d021 rcall EEP_WR_BYTE
+000145 e001 ldi r16, DEFAULT_SETTING_MODE
+000146 9300 006e sts SETTING_MODE, r16 ; режим
+000148 2e40 mov EEP_D_r, r16
+000149 e003 ldi r16, EEP_SETTING_MODE
+00014a 2e30 mov EEP_A_r, r16
+00014b d021 rcall EEP_WR_BYTE
-00014f e100 ldi r16, 0x10
-000150 2e40 mov EEP_D_r, r16
-000151 e004 ldi r16, EEP_FIRST_TIME_RUN
-000152 2e30 mov EEP_A_r, r16
-000153 d01c rcall EEP_WR_BYTE
-000154 9508 ret
+00014c e100 ldi r16, 0x10
+00014d 2e40 mov EEP_D_r, r16
+00014e e004 ldi r16, EEP_FIRST_TIME_RUN
+00014f 2e30 mov EEP_A_r, r16
+000150 d01c rcall EEP_WR_BYTE
+000151 9508 ret
//
//
WRITE_PARAMS_TO_EEP:
-000155 930f push r16
-000156 9100 006b lds r16, SETTING_TEMP_H ; уставка HIGH
-000158 2e40 mov EEP_D_r, r16
-000159 e000 ldi r16, EEP_SETTING_TEMP_H
-00015a 2e30 mov EEP_A_r, r16
-00015b d014 rcall EEP_WR_BYTE
+000152 930f push r16
+000153 9100 006b lds r16, SETTING_TEMP_H ; уставка HIGH
+000155 2e40 mov EEP_D_r, r16
+000156 e000 ldi r16, EEP_SETTING_TEMP_H
+000157 2e30 mov EEP_A_r, r16
+000158 d014 rcall EEP_WR_BYTE
-00015c 9100 006c lds r16, SETTING_TEMP_L ; уставка LOW
-00015e 2e40 mov EEP_D_r, r16
-00015f e001 ldi r16, EEP_SETTING_TEMP_L
-000160 2e30 mov EEP_A_r, r16
-000161 d00e rcall EEP_WR_BYTE
+000159 9100 006c lds r16, SETTING_TEMP_L ; уставка LOW
+00015b 2e40 mov EEP_D_r, r16
+00015c e001 ldi r16, EEP_SETTING_TEMP_L
+00015d 2e30 mov EEP_A_r, r16
+00015e d00e rcall EEP_WR_BYTE
-000162 9100 006d lds r16, SETTING_HYST ; гистерезис
-000164 2e40 mov EEP_D_r, r16
-000165 e002 ldi r16, EEP_SETTING_HYST
-000166 2e30 mov EEP_A_r, r16
-000167 d008 rcall EEP_WR_BYTE
+00015f 9100 006d lds r16, SETTING_HYST ; гистерезис
+000161 2e40 mov EEP_D_r, r16
+000162 e002 ldi r16, EEP_SETTING_HYST
+000163 2e30 mov EEP_A_r, r16
+000164 d008 rcall EEP_WR_BYTE
-000168 9100 006e lds r16, SETTING_MODE ; режим
-00016a 2e40 mov EEP_D_r, r16
-00016b e003 ldi r16, EEP_SETTING_MODE
-00016c 2e30 mov EEP_A_r, r16
-00016d d002 rcall EEP_WR_BYTE
-00016e 910f pop r16
-00016f 9508 ret//
+000165 9100 006e lds r16, SETTING_MODE ; режим
+000167 2e40 mov EEP_D_r, r16
+000168 e003 ldi r16, EEP_SETTING_MODE
+000169 2e30 mov EEP_A_r, r16
+00016a d002 rcall EEP_WR_BYTE
+00016b 910f pop r16
+00016c 9508 ret//
//
EEP_WR_BYTE:
-000170 94f8 cli
-000171 930f push r16
+00016d 94f8 cli
+00016e 930f push r16
_EEP_WR_BYTE_LP:
; ждем завершения предыдущей записи
-000172 99e1 sbic EECR, EEPE
-000173 cffe rjmp _EEP_WR_BYTE_LP
+00016f 99e1 sbic EECR, EEPE
+000170 cffe rjmp _EEP_WR_BYTE_LP
; режим программирования - атомарный
-000174 e000 ldi r16, (0<
+00017e 9ae0 sbi EECR, EERE
+00017f b24d in EEP_D_r, EEDR
+000180 9478 sei
+000181 9508 ret//
//
TEMP_COMPARSION:
-000185 930f push r16
-000186 931f push r17
-000187 932f push r18
-000188 933f push r19
-000189 934f push r20
-00018a 935f push r21
-00018b 937f push r23
+000182 930f push r16
+000183 931f push r17
+000184 932f push r18
+000185 933f push r19
+000186 934f push r20
+000187 935f push r21
+000188 937f push r23
.DEF temp_r_l = r16
.DEF temp_r_h = r17
@@ -1537,247 +1530,247 @@ main.asm(319): Including file 'mpy16u.asm'
.DEF max_r_trhd_l = r13
.DEF max_r_trhd_h = r12
; умножаем температуру на 10
-00018c 9100 0068 lds mc16uL, TEMP_L // r16
-00018e 9110 0069 lds mc16uH, TEMP_H // r17
-000190 e02a ldi mp16uL, LOW(10)
-000191 e030 ldi mp16uH, HIGH(10)
-000192 df73 rcall mpy16u
-000193 2f02 mov temp_r_l, m16u0 ; L
-000194 2f13 mov temp_r_h, m16u1 ; H
+000189 9100 0068 lds mc16uL, TEMP_L // r16
+00018b 9110 0069 lds mc16uH, TEMP_H // r17
+00018d e02a ldi mp16uL, LOW(10)
+00018e e030 ldi mp16uH, HIGH(10)
+00018f df73 rcall mpy16u
+000190 2f02 mov temp_r_l, m16u0 ; L
+000191 2f13 mov temp_r_h, m16u1 ; H
; добавляем дробную часть
-000195 9120 006a lds r18, TEMP_F
-000197 2733 clr r19
-000198 0f02 add temp_r_l, r18
-000199 1f13 adc temp_r_h, r19
+000192 9120 006a lds r18, TEMP_F
+000194 2733 clr r19
+000195 0f02 add temp_r_l, r18
+000196 1f13 adc temp_r_h, r19
; определяем нижний и верхний пороги
-00019a 9140 006c lds r20, SETTING_TEMP_L
-00019c 9150 006b lds r21, SETTING_TEMP_H
-00019e 9160 006d lds r22, SETTING_HYST
-0001a0 934f push r20
-0001a1 935f push r21
-0001a2 2777 clr r23
-0001a3 1b46 sub r20, r22
-0001a4 0b57 sbc r21, r23
-0001a5 2eb4 mov min_r_trhd_l, r20
-0001a6 2ea5 mov min_r_trhd_h, r21
-0001a7 915f pop r21
-0001a8 914f pop r20
-0001a9 2777 clr r23
-0001aa 0f46 add r20, r22
-0001ab 1f57 adc r21, r23
-0001ac 2ed4 mov max_r_trhd_l, r20
-0001ad 2ec5 mov max_r_trhd_h, r21
+000197 9140 006c lds r20, SETTING_TEMP_L
+000199 9150 006b lds r21, SETTING_TEMP_H
+00019b 9160 006d lds r22, SETTING_HYST
+00019d 934f push r20
+00019e 935f push r21
+00019f 2777 clr r23
+0001a0 1b46 sub r20, r22
+0001a1 0b57 sbc r21, r23
+0001a2 2eb4 mov min_r_trhd_l, r20
+0001a3 2ea5 mov min_r_trhd_h, r21
+0001a4 915f pop r21
+0001a5 914f pop r20
+0001a6 2777 clr r23
+0001a7 0f46 add r20, r22
+0001a8 1f57 adc r21, r23
+0001a9 2ed4 mov max_r_trhd_l, r20
+0001aa 2ec5 mov max_r_trhd_h, r21
; определяем знак температуры
-0001ae f00e brts _NEGATE_TEMP
-0001af c004 rjmp _COMPARE
+0001ab f00e brts _NEGATE_TEMP
+0001ac c004 rjmp _COMPARE
_NEGATE_TEMP:
-0001b0 9500 com temp_r_l
-0001b1 9510 com temp_r_h
-0001b2 5f0f subi temp_r_l, low(-1)
-0001b3 4f1f sbci temp_r_h, high(-1)
+0001ad 9500 com temp_r_l
+0001ae 9510 com temp_r_h
+0001af 5f0f subi temp_r_l, low(-1)
+0001b0 4f1f sbci temp_r_h, high(-1)
_COMPARE:
; проверяем нижний порог
-0001b4 16b0 cp min_r_trhd_l, temp_r_l
-0001b5 06a1 cpc min_r_trhd_h, temp_r_h
-0001b6 f424 brge _MIN_THRESHOLD ; TEMP <= MIN
+0001b1 16b0 cp min_r_trhd_l, temp_r_l
+0001b2 06a1 cpc min_r_trhd_h, temp_r_h
+0001b3 f424 brge _MIN_THRESHOLD ; TEMP <= MIN
; проверяем верхний порог
-0001b7 150d cp temp_r_l, max_r_trhd_l
-0001b8 051c cpc temp_r_h, max_r_trhd_h
-0001b9 f44c brge _MAX_THRESHOLD ; TEMP >= TOP
-0001ba c00f rjmp _COMPARSION_EXIT
+0001b4 150d cp temp_r_l, max_r_trhd_l
+0001b5 051c cpc temp_r_h, max_r_trhd_h
+0001b6 f44c brge _MAX_THRESHOLD ; TEMP >= TOP
+0001b7 c00f rjmp _COMPARSION_EXIT
_MIN_THRESHOLD:
; определяем режим работы
-0001bb 9140 006e lds r20, SETTING_MODE
-0001bd 2344 tst r20
-0001be f411 brne PC+3
-0001bf 9890 relay_off
-0001c0 c001 rjmp PC+2
-0001c1 9a90 relay_on
-0001c2 c007 rjmp _COMPARSION_EXIT
+0001b8 9140 006e lds r20, SETTING_MODE
+0001ba 2344 tst r20
+0001bb f411 brne PC+3
+0001bc 9890 relay_off
+0001bd c001 rjmp PC+2
+0001be 9a90 relay_on
+0001bf c007 rjmp _COMPARSION_EXIT
_MAX_THRESHOLD:
-0001c3 9140 006e lds r20, SETTING_MODE
-0001c5 2344 tst r20
-0001c6 f411 brne PC+3
-0001c7 9a90 relay_on
-0001c8 c001 rjmp PC+2
-0001c9 9890 relay_off
+0001c0 9140 006e lds r20, SETTING_MODE
+0001c2 2344 tst r20
+0001c3 f411 brne PC+3
+0001c4 9a90 relay_on
+0001c5 c001 rjmp PC+2
+0001c6 9890 relay_off
_COMPARSION_EXIT:
-0001ca 917f pop r23
-0001cb 915f pop r21
-0001cc 914f pop r20
-0001cd 913f pop r19
-0001ce 912f pop r18
-0001cf 911f pop r17
-0001d0 910f pop r16
-0001d1 9508 ret
+0001c7 917f pop r23
+0001c8 915f pop r21
+0001c9 914f pop r20
+0001ca 913f pop r19
+0001cb 912f pop r18
+0001cc 911f pop r17
+0001cd 910f pop r16
+0001ce 9508 ret
//
//
TEMP_UPD:
-0001d2 931f push r17
-0001d3 d061 rcall TEMP_CONV
-0001d4 e152
-0001d5 e535
-0001d6 eb4d
-0001d7 d1e8 DELAY24 751000
-0001d8 d012 rcall TEMP_RD
+0001cf 931f push r17
+0001d0 d061 rcall TEMP_CONV
+0001d1 e152
+0001d2 e535
+0001d3 eb4d
+0001d4 d1f8 DELAY24 751000
+0001d5 d012 rcall TEMP_RD
; обновляем данные в ячейках
-0001d9 9110 0068 lds r17, TEMP_L
-0001db 2f81 mov DISP_NUM_L, r17
-0001dc 9110 0069 lds r17, TEMP_H
-0001de 2f91 mov DISP_NUM_H, r17
-0001df 911f pop r17
-0001e0 9508 ret
+0001d6 9110 0068 lds r17, TEMP_L
+0001d8 2f81 mov DISP_NUM_L, r17
+0001d9 9110 0069 lds r17, TEMP_H
+0001db 2f91 mov DISP_NUM_H, r17
+0001dc 911f pop r17
+0001dd 9508 ret
//
//
RD_F_CODE:
-0001e1 930f push r16
+0001de 930f push r16
-0001e2 d148 rcall OW_PRESENCE
-0001e3 e303 ldi r16, DS18B20_CMD_READROM
-0001e4 2e80 mov OW_CMD_r, r16
-0001e5 d15a rcall OW_SEND_BYTE
+0001df d149 rcall OW_PRESENCE
+0001e0 e303 ldi r16, DS18B20_CMD_READROM
+0001e1 2e80 mov OW_CMD_r, r16
+0001e2 d15b rcall OW_SEND_BYTE
-0001e6 e6af ldi XL, LOW(DEVICE_FAMILY_CODE)
-0001e7 e0b0 ldi XH, HIGH(DEVICE_FAMILY_CODE)
-0001e8 d176 rcall OW_RD_BYTE
+0001e3 e6af ldi XL, LOW(DEVICE_FAMILY_CODE)
+0001e4 e0b0 ldi XH, HIGH(DEVICE_FAMILY_CODE)
+0001e5 d177 rcall OW_RD_BYTE
-0001e9 910f pop r16
-0001ea 9508 ret//
+0001e6 910f pop r16
+0001e7 9508 ret//
//
TEMP_RD:
-0001eb 930f push r16
-0001ec 931f push r17
-0001ed 932f push r18
-0001ee 933f push r19
-0001ef 934f push r20
+0001e8 930f push r16
+0001e9 931f push r17
+0001ea 932f push r18
+0001eb 933f push r19
+0001ec 934f push r20
-0001f0 d13a rcall OW_PRESENCE
-0001f1 ff70 sbrs OWFR, OWPRF
-0001f2 c03c rjmp _TEMP_RD_EXIT
+0001ed d13b rcall OW_PRESENCE
+0001ee ff70 sbrs OWFR, OWPRF
+0001ef c03c rjmp _TEMP_RD_EXIT
-0001f3 ec0c ldi r16, DS18B20_CMD_SKIPROM
+0001f0 ec0c ldi r16, DS18B20_CMD_SKIPROM
+0001f1 2e80 mov OW_CMD_r, r16
+0001f2 d14b rcall OW_SEND_BYTE
+
+0001f3 eb0e ldi r16, DS18B20_CMD_RSCRATCHPAD
0001f4 2e80 mov OW_CMD_r, r16
-0001f5 d14a rcall OW_SEND_BYTE
+0001f5 d148 rcall OW_SEND_BYTE
-0001f6 eb0e ldi r16, DS18B20_CMD_RSCRATCHPAD
-0001f7 2e80 mov OW_CMD_r, r16
-0001f8 d147 rcall OW_SEND_BYTE
+0001f6 e6a8 ldi XL, LOW(TEMP_L)
+0001f7 e0b0 ldi XH, HIGH(TEMP_L)
+0001f8 d164 rcall OW_RD_BYTE
-0001f9 e6a8 ldi XL, LOW(TEMP_L)
-0001fa e0b0 ldi XH, HIGH(TEMP_L)
-0001fb d163 rcall OW_RD_BYTE
+0001f9 e6a9 ldi XL, LOW(TEMP_H)
+0001fa e0b0 ldi XH, HIGH(TEMP_H)
+0001fb d161 rcall OW_RD_BYTE
-0001fc e6a9 ldi XL, LOW(TEMP_H)
-0001fd e0b0 ldi XH, HIGH(TEMP_H)
-0001fe d160 rcall OW_RD_BYTE
+0001fc 9110 0068 lds r17, TEMP_L
+0001fe 9120 0069 lds r18, TEMP_H
-0001ff 9110 0068 lds r17, TEMP_L
-000201 9120 0069 lds r18, TEMP_H
-
-000203 932f push r18
-000204 7f28 cbr r18, (1<<0) | (1<<1) | (1<<2) ; убираем ненужные биты на время (интересуют последних битов в TEMP_H)
-000205 3f28 cpi r18, 0xf8 ; проверяется является ли число минусовой
-000206 f011 breq _TEMP_RD_TO_UNSIGNED ; если да то конвертируем в беззнаковое число
-000207 94e8 clt
-000208 c007 rjmp _TEMP_RD_CONTINUE ; если нет то преобразуем значение АЦП в температуру (делим на 16)
+000200 932f push r18
+000201 7f28 cbr r18, (1<<0) | (1<<1) | (1<<2) ; убираем ненужные биты на время (интересуют последних битов в TEMP_H)
+000202 3f28 cpi r18, 0xf8 ; проверяется является ли число минусовой
+000203 f011 breq _TEMP_RD_TO_UNSIGNED ; если да то конвертируем в беззнаковое число
+000204 94e8 clt
+000205 c007 rjmp _TEMP_RD_CONTINUE ; если нет то преобразуем значение АЦП в температуру (делим на 16)
_TEMP_RD_TO_UNSIGNED:
-000209 912f pop r18
-00020a 9468 set
-00020b 9510 com r17
-00020c 9520 com r18
-00020d 5f1f subi r17, low(-1)
-00020e 4f2f sbci r18, high(-1)
+000206 912f pop r18
+000207 9468 set
+000208 9510 com r17
+000209 9520 com r18
+00020a 5f1f subi r17, low(-1)
+00020b 4f2f sbci r18, high(-1)
; ldi r19, 1
; add r17, r19
; ldi r19, 0
; adc r18, r19
-00020f c001 rjmp PC+2
+00020c c001 rjmp PC+2
_TEMP_RD_CONTINUE: ; Температура = Число с АЦП / 16 (сдвиг вправо 4)
-000210 912f pop r18
-000211 9526 lsr r18
-000212 9517 ror r17
-000213 9526 lsr r18
-000214 9517 ror r17
-000215 9526 lsr r18
-000216 9517 ror r17
-000217 9526 lsr r18
-000218 9517 ror r17
+00020d 912f pop r18
+00020e 9526 lsr r18
+00020f 9517 ror r17
+000210 9526 lsr r18
+000211 9517 ror r17
+000212 9526 lsr r18
+000213 9517 ror r17
+000214 9526 lsr r18
+000215 9517 ror r17
_TEMP_RD_END:
-000219 9130 0068 lds r19, TEMP_L
-00021b f40e brtc PC+2
-00021c 9531 neg r19 ; переводим в беззнаковое число если минус
+000216 9130 0068 lds r19, TEMP_L
+000218 f40e brtc PC+2
+000219 9531 neg r19 ; переводим в беззнаковое число если минус
; далее происходит такое для получения дробной части:
; ((n<<3) + (n<<1))>>4 или (n*10)/16
-00021d 2f43 mov r20, r19
-00021e 703f andi r19, 0x0f
-00021f 2f43 mov r20, r19
-000220 0f33 lsl r19
-000221 0f33 lsl r19
-000222 0f33 lsl r19
+00021a 2f43 mov r20, r19
+00021b 703f andi r19, 0x0f
+00021c 2f43 mov r20, r19
+00021d 0f33 lsl r19
+00021e 0f33 lsl r19
+00021f 0f33 lsl r19
-000223 0f44 lsl r20
+000220 0f44 lsl r20
-000224 0f34 add r19, r20
+000221 0f34 add r19, r20
+000222 9536 lsr r19
+000223 9536 lsr r19
+000224 9536 lsr r19
000225 9536 lsr r19
-000226 9536 lsr r19
-000227 9536 lsr r19
-000228 9536 lsr r19
; записываем данные
-000229 9310 0068 sts TEMP_L, r17
-00022b 9320 0069 sts TEMP_H, r18
-00022d 9330 006a sts TEMP_F, r19
+000226 9310 0068 sts TEMP_L, r17
+000228 9320 0069 sts TEMP_H, r18
+00022a 9330 006a sts TEMP_F, r19
_TEMP_RD_EXIT:
-00022f 914f pop r20
-000230 913f pop r19
-000231 912f pop r18
-000232 911f pop r17
-000233 910f pop r16
-000234 9508 ret
+00022c 914f pop r20
+00022d 913f pop r19
+00022e 912f pop r18
+00022f 911f pop r17
+000230 910f pop r16
+000231 9508 ret
;
TEMP_CONV:
-000235 930f push r16
+000232 930f push r16
-000236 d0f4 rcall OW_PRESENCE
-000237 ff70 sbrs OWFR, OWPRF
-000238 c006 rjmp _TEMP_CONV_EXIT
+000233 d0f5 rcall OW_PRESENCE
+000234 ff70 sbrs OWFR, OWPRF
+000235 c006 rjmp _TEMP_CONV_EXIT
-000239 ec0c ldi r16, DS18B20_CMD_SKIPROM
+000236 ec0c ldi r16, DS18B20_CMD_SKIPROM
+000237 2e80 mov OW_CMD_r, r16
+000238 d105 rcall OW_SEND_BYTE
+
+000239 e404 ldi r16, DS18B20_CMD_CONVERTTEMP
00023a 2e80 mov OW_CMD_r, r16
-00023b d104 rcall OW_SEND_BYTE
-
-00023c e404 ldi r16, DS18B20_CMD_CONVERTTEMP
-00023d 2e80 mov OW_CMD_r, r16
-00023e d101 rcall OW_SEND_BYTE
+00023b d102 rcall OW_SEND_BYTE
_TEMP_CONV_EXIT:
-00023f 910f pop r16
-000240 9508 ret
+00023c 910f pop r16
+00023d 9508 ret
//
//
; **** ОТПРАВКА БАЙТА В СДВИГОВЫЙ РЕГИСТР *************************
USI_TRANSMIT:
-000241 930f push r16
-000242 920f push r0
-000243 b80f out USIDR, r0 ; Байт для отправки всегда находится в регистре r0. Помещаем данные в регистр USIDR.
+00023e 930f push r16
+00023f 920f push r0
+000240 b80f out USIDR, r0 ; Байт для отправки всегда находится в регистре r0. Помещаем данные в регистр USIDR.
; Enable USI Overflow Interrupt Flag (will be 0 if transfer is not compeleted)
-000244 e400 ldi TEMP_REG_A, (1< USI Clock Source Select
; USICLK <--------------> USI Clock Strobe
; USITC <--------------> USI Toggle Clock (Enable clock generation)
-000246 e10b ldi TEMP_REG_A, (1<
BUTTON_PROCESS:
-00024f 930f push r16
+00024c 930f push r16
_SW_CHECK_ON_0:
-000250 9bb4 sbis SW_PIN, SW_SET_PIN
-000251 c001 rjmp _SW_SET_0
-000252 c01c rjmp _SW_CHECK_ON_1
+00024d 9bb4 sbis SW_PIN, SW_SET_PIN
+00024e c001 rjmp _SW_SET_0
+00024f c01c rjmp _SW_CHECK_ON_1
_SW_SET_0:
-000253 9100 0071 lds r16, SW_DATA
-000255 2300 tst r16
-000256 f409 brne _SW_SET_FROM_0_TO_1
-000257 c017 rjmp _SW_CHECK_ON_1
+000250 9100 0071 lds r16, SW_DATA
+000252 2300 tst r16
+000253 f409 brne _SW_SET_FROM_0_TO_1
+000254 c017 rjmp _SW_CHECK_ON_1
_SW_SET_FROM_0_TO_1:
-000258 2700 clr r16
-000259 9300 0071 sts SW_DATA, r16
-00025b d150 rcall DEBOUNCE_SW
-00025c 9463 inc REPROGRAM_STEP_r
-00025d 2d16 mov r17, REPROGRAM_STEP_r
-00025e 3014 cpi r17, 4
-00025f f414 brge _SAVE_SETTINGS
-000260 d13d rcall BEEP_SHORT
-000261 c00d rjmp _SW_CHECK_ON_1
+000255 2700 clr r16
+000256 9300 0071 sts SW_DATA, r16
+000258 d160 rcall DEBOUNCE_SW
+000259 9463 inc REPROGRAM_STEP_r
+00025a 2d16 mov r17, REPROGRAM_STEP_r
+00025b 3014 cpi r17, 4
+00025c f414 brge _SAVE_SETTINGS
+00025d d14d rcall BEEP_SHORT
+00025e c00d rjmp _SW_CHECK_ON_1
_SAVE_SETTINGS:
-000262 e010
-000263 bf19 outi r17, TIMSK, (0<
REPROGRAM_SETTINGS:
-00027d 930f push r16
-00027e 931f push r17
-00027f 932f push r18
-000280 933f push r19
-000281 934f push r20
+00027a 930f push r16
+00027b 931f push r17
+00027c 932f push r18
+00027d 933f push r19
+00027e 934f push r20
-000282 2d06 mov r16, REPROGRAM_STEP_r
-000283 2300 tst r16
-000284 f009 breq _INTO
-000285 c004 rjmp _REPROGRAM_SETTINGS_LOOP
+00027f 2d06 mov r16, REPROGRAM_STEP_r
+000280 2300 tst r16
+000281 f009 breq _INTO
+000282 c004 rjmp _REPROGRAM_SETTINGS_LOOP
_INTO:
-000286 9890 relay_off
-000287 9a96 sbi PORTD, LED_PGM_PIN
-000288 d115 rcall BEEP_SHORT
-000289 9463 inc REPROGRAM_STEP_r
+000283 9890 relay_off
+000284 9a96 sbi PORTD, LED_PGM_PIN
+000285 d125 rcall BEEP_SHORT
+000286 9463 inc REPROGRAM_STEP_r
_REPROGRAM_SETTINGS_LOOP:
-00028a dfc4 rcall BUTTON_PROCESS
+000287 dfc4 rcall BUTTON_PROCESS
_CHECK_STEP:
-00028b 3001 cpi r16, 1
-00028c f029 breq _STEP_1
-00028d 3002 cpi r16, 2
-00028e f149 breq _STEP_2
-00028f 3003 cpi r16, 3
-000290 f131 breq _S3_JMP
-000291 c093 rjmp _REPROGRAM_SETTINGS_END
+000288 3001 cpi r16, 1
+000289 f029 breq _STEP_1
+00028a 3002 cpi r16, 2
+00028b f151 breq _STEP_2
+00028c 3003 cpi r16, 3
+00028d f139 breq _S3_JMP
+00028e c094 rjmp _REPROGRAM_SETTINGS_END
//
_STEP_1: ; установка и отображение гистерезиса
-000292 d0e6 rcall DISPLAY_UPD_DIGITS
+00028f d0e7 rcall DISPLAY_UPD_DIGITS
_S1_CHECK_PLUS:
-000293 9bb2 sbis SW_PIN, SW_PLUS_PIN
-000294 c004 rjmp _INCREASE_HYST
-000295 c000 rjmp _S1_CHECK_MINUS
+000290 9bb2 sbis SW_PIN, SW_PLUS_PIN
+000291 c004 rjmp _INCREASE_HYST
+000292 c000 rjmp _S1_CHECK_MINUS
_S1_CHECK_MINUS:
-000296 9bb3 sbis SW_PIN, SW_MINUS_PIN
-000297 c00a rjmp _DECREASE_HYST
-000298 c011 rjmp _SHOW_HYST
+000293 9bb3 sbis SW_PIN, SW_MINUS_PIN
+000294 c00a rjmp _DECREASE_HYST
+000295 c011 rjmp _SHOW_HYST
_INCREASE_HYST:
-000299 d112 rcall DEBOUNCE_SW
-00029a 9110 006d lds r17, SETTING_HYST
-00029c 3c18 cpi r17, MAX_HYST
-00029d f009 breq PC+2
-00029e 9513 inc r17
-00029f 9310 006d sts SETTING_HYST, r17
-0002a1 c008 rjmp _SHOW_HYST
+000296 d122 rcall DEBOUNCE_SW
+000297 9110 006d lds r17, SETTING_HYST
+000299 3c18 cpi r17, MAX_HYST
+00029a f009 breq PC+2
+00029b 9513 inc r17
+00029c 9310 006d sts SETTING_HYST, r17
+00029e c008 rjmp _SHOW_HYST
_DECREASE_HYST:
-0002a2 d109 rcall DEBOUNCE_SW
-0002a3 9110 006d lds r17, SETTING_HYST
-0002a5 3011 cpi r17, MIN_HYST
-0002a6 f009 breq PC+2
-0002a7 951a dec r17
-0002a8 9310 006d sts SETTING_HYST, r17
+00029f d119 rcall DEBOUNCE_SW
+0002a0 9110 006d lds r17, SETTING_HYST
+0002a2 3011 cpi r17, MIN_HYST
+0002a3 f009 breq PC+2
+0002a4 951a dec r17
+0002a5 9310 006d sts SETTING_HYST, r17
_SHOW_HYST:
-0002aa 930f push dd8u
-0002ab 931f push dv8u
-0002ac 9100 006d lds dd8u, SETTING_HYST
-0002ae e01a ldi dv8u, 10
-0002af de48 rcall div8u
-0002b0 2f80 mov DISP_NUM_L, dres8u
-0002b1 2799 clr DISP_NUM_H ; гистерезис 8 битный так что ноль пишем в старший байт
-0002b2 92f0 0066 sts DIGITS+3, drem8u
-0002b4 911f pop dv8u
-0002b5 910f pop dd8u
-0002b6 c06e rjmp _REPROGRAM_SETTINGS_END
+0002a7 94e8 clt
+0002a8 930f push dd8u
+0002a9 931f push dv8u
+0002aa 9100 006d lds dd8u, SETTING_HYST
+0002ac e01a ldi dv8u, 10
+0002ad de47 rcall div8u
+0002ae 2f80 mov DISP_NUM_L, dres8u
+0002af 2799 clr DISP_NUM_H ; гистерезис 8 битный так что ноль пишем в старший байт
+0002b0 92f0 0066 sts DIGITS+3, drem8u
+0002b2 911f pop dv8u
+0002b3 910f pop dd8u
+0002b4 c06e rjmp _REPROGRAM_SETTINGS_END
//
_S3_JMP: ; просто прыжок на _STEP_3
-0002b7 c047 rjmp _STEP_3
+0002b5 c047 rjmp _STEP_3
//
_STEP_2:
-0002b8 d0c0 rcall DISPLAY_UPD_DIGITS
+0002b6 d0c0 rcall DISPLAY_UPD_DIGITS
_S2_CHECK_PLUS:
-0002b9 9bb2 sbis SW_PIN, SW_PLUS_PIN
-0002ba c004 rjmp _INCREASE_TEMP
-0002bb c000 rjmp _S2_CHECK_MINUS
+0002b7 9bb2 sbis SW_PIN, SW_PLUS_PIN
+0002b8 c004 rjmp _INCREASE_TEMP
+0002b9 c000 rjmp _S2_CHECK_MINUS
_S2_CHECK_MINUS:
-0002bc 9bb3 sbis SW_PIN, SW_MINUS_PIN
-0002bd c013 rjmp _DECREASE_TEMP
-0002be c021 rjmp _SHOW_TEMP
+0002ba 9bb3 sbis SW_PIN, SW_MINUS_PIN
+0002bb c013 rjmp _DECREASE_TEMP
+0002bc c021 rjmp _SHOW_TEMP
_INCREASE_TEMP:
-0002bf d0ec rcall DEBOUNCE_SW
-0002c0 9110 006c lds r17, SETTING_TEMP_L
-0002c2 9120 006b lds r18, SETTING_TEMP_H
-0002c4 3b10 cpi r17, MAX_TEMP_L
-0002c5 e034 ldi r19, MAX_TEMP_H
-0002c6 0723 cpc r18, r19
-0002c7 f031 breq PC+7
-0002c8 e03a ldi r19, 10
-0002c9 0f13 add r17, r19
-0002ca 2733 clr r19
-0002cb 1f23 adc r18, r19
-0002cc 9310 006c sts SETTING_TEMP_L, r17
-0002ce 9320 006b sts SETTING_TEMP_H, r18
-0002d0 c00f rjmp _SHOW_TEMP
+0002bd d0fb rcall DEBOUNCE_SW
+0002be 9110 006c lds r17, SETTING_TEMP_L
+0002c0 9120 006b lds r18, SETTING_TEMP_H
+0002c2 3b10 cpi r17, MAX_TEMP_L
+0002c3 e034 ldi r19, MAX_TEMP_H
+0002c4 0723 cpc r18, r19
+0002c5 f031 breq PC+7
+0002c6 e03a ldi r19, 10
+0002c7 0f13 add r17, r19
+0002c8 2733 clr r19
+0002c9 1f23 adc r18, r19
+0002ca 9310 006c sts SETTING_TEMP_L, r17
+0002cc 9320 006b sts SETTING_TEMP_H, r18
+0002ce c00f rjmp _SHOW_TEMP
_DECREASE_TEMP:
-0002d1 d0da rcall DEBOUNCE_SW
-0002d2 9110 006c lds r17, SETTING_TEMP_L
-0002d4 9120 006b lds r18, SETTING_TEMP_H
-0002d6 301c cpi r17, MIN_TEMP_L
-0002d7 ef3e ldi r19, MIN_TEMP_H
-0002d8 0723 cpc r18, r19
-0002d9 f011 breq PC+3
+0002cf d0e9 rcall DEBOUNCE_SW
+0002d0 9110 006c lds r17, SETTING_TEMP_L
+0002d2 9120 006b lds r18, SETTING_TEMP_H
+0002d4 301c cpi r17, MIN_TEMP_L
+0002d5 ef3e ldi r19, MIN_TEMP_H
+0002d6 0723 cpc r18, r19
+0002d7 f011 breq PC+3
__DECREASE:
-0002da 501a subi r17, 10
-0002db 4020 sbci r18, 0
-0002dc 9310 006c sts SETTING_TEMP_L, r17
-0002de 9320 006b sts SETTING_TEMP_H, r18
+0002d8 501a subi r17, 10
+0002d9 4020 sbci r18, 0
+0002da 9310 006c sts SETTING_TEMP_L, r17
+0002dc 9320 006b sts SETTING_TEMP_H, r18
_SHOW_TEMP:
-0002e0 930f push dd16uL
-0002e1 931f push dd16uH
-0002e2 932f push dv16uL
-0002e3 933f push dv16uH
+0002de 930f push dd16uL
+0002df 931f push dd16uH
+0002e0 932f push dv16uL
+0002e1 933f push dv16uH
-0002e4 9100 006c lds dd16uL, SETTING_TEMP_L
-0002e6 9110 006b lds dd16uH, SETTING_TEMP_H
-0002e8 2f21 mov r18, dd16uH
-0002e9 7820 andi r18, (1<<7)
-0002ea f411 brne _NEGATE_SET_TEMP
-0002eb 94e8 clt
-0002ec c005 rjmp _DIVIDE_SET_TEMP
+0002e2 9100 006c lds dd16uL, SETTING_TEMP_L
+0002e4 9110 006b lds dd16uH, SETTING_TEMP_H
+0002e6 2f21 mov r18, dd16uH
+0002e7 7820 andi r18, (1<<7)
+0002e8 f411 brne _NEGATE_SET_TEMP
+0002e9 94e8 clt
+0002ea c005 rjmp _DIVIDE_SET_TEMP
_NEGATE_SET_TEMP:
-0002ed 9468 set
-0002ee 9500
-0002ef 9510
-0002f0 5f0f
-0002f1 4f1f com16 dd16uL, dd16uH
+0002eb 9468 set
+0002ec 9500
+0002ed 9510
+0002ee 5f0f
+0002ef 4f1f com16 dd16uL, dd16uH
_DIVIDE_SET_TEMP:
-0002f2 e02a ldi dv16uL, LOW(10)
-0002f3 e030 ldi dv16uH, HIGH(10)
-0002f4 ddf0 rcall div16u
-0002f5 2f80 mov DISP_NUM_L, dres16uL
-0002f6 2f91 mov DISP_NUM_H, dres16uH
+0002f0 e02a ldi dv16uL, LOW(10)
+0002f1 e030 ldi dv16uH, HIGH(10)
+0002f2 ddef rcall div16u
+0002f3 2f80 mov DISP_NUM_L, dres16uL
+0002f4 2f91 mov DISP_NUM_H, dres16uH
-0002f7 e00a ldi r16, 10
-0002f8 9300 0066 sts DIGITS+3, r16 ; значок градуса
+0002f5 e00a ldi r16, 10
+0002f6 9300 0066 sts DIGITS+3, r16 ; значок градуса
-0002fa 913f pop dv16uH
-0002fb 912f pop dv16uL
-0002fc 911f pop dd16uH
-0002fd 910f pop dd16uL
-0002fe c026 rjmp _REPROGRAM_SETTINGS_END
+0002f8 913f pop dv16uH
+0002f9 912f pop dv16uL
+0002fa 911f pop dd16uH
+0002fb 910f pop dd16uL
+0002fc c026 rjmp _REPROGRAM_SETTINGS_END
//
//
_STEP_3:
-0002ff 94e8 clt
+0002fd 94e8 clt
_S3_CHECK_PLUS:
-000300 9bb2 sbis SW_PIN, SW_PLUS_PIN
-000301 c004 rjmp _SET_HEAT_MODE
-000302 c000 rjmp _S3_CHECK_MINUS
+0002fe 9bb2 sbis SW_PIN, SW_PLUS_PIN
+0002ff c004 rjmp _SET_HEAT_MODE
+000300 c000 rjmp _S3_CHECK_MINUS
_S3_CHECK_MINUS:
-000303 9bb3 sbis SW_PIN, SW_MINUS_PIN
-000304 c006 rjmp _SET_COOLING_MODE
-000305 c009 rjmp _SHOW_MODE
+000301 9bb3 sbis SW_PIN, SW_MINUS_PIN
+000302 c006 rjmp _SET_COOLING_MODE
+000303 c009 rjmp _SHOW_MODE
_SET_HEAT_MODE:
-000306 d0a5 rcall DEBOUNCE_SW
-000307 e011 ldi r17, HEAT_MODE
-000308 9310 006e sts SETTING_MODE, r17
-00030a c004 rjmp _SHOW_MODE
+000304 d0b4 rcall DEBOUNCE_SW
+000305 e011 ldi r17, HEAT_MODE
+000306 9310 006e sts SETTING_MODE, r17
+000308 c004 rjmp _SHOW_MODE
_SET_COOLING_MODE:
-00030b d0a0 rcall DEBOUNCE_SW
-00030c e010 ldi r17, COOLING_MODE
-00030d 9310 006e sts SETTING_MODE, r17
+000309 d0af rcall DEBOUNCE_SW
+00030a e010 ldi r17, COOLING_MODE
+00030b 9310 006e sts SETTING_MODE, r17
_SHOW_MODE:
-00030f 2711 clr r17
-000310 2f81 mov DISP_NUM_L, r17
-000311 2f91 mov DISP_NUM_H, r17
-000312 e01e ldi r17, 14
-000313 9310 0063 sts DIGITS, r17
-000315 9310 0064 sts DIGITS+1, r17
-000317 9310 0065 sts DIGITS+2, r17
-000319 9120 006e lds r18, SETTING_MODE
-00031b 2322 tst r18
-00031c f009 breq _SHOW_COOLING
-00031d c004 rjmp _SHOW_HEATING
+00030d 2711 clr r17
+00030e 2f81 mov DISP_NUM_L, r17
+00030f 2f91 mov DISP_NUM_H, r17
+000310 e01e ldi r17, 14
+000311 9310 0063 sts DIGITS, r17
+000313 9310 0064 sts DIGITS+1, r17
+000315 9310 0065 sts DIGITS+2, r17
+000317 9120 006e lds r18, SETTING_MODE
+000319 2322 tst r18
+00031a f009 breq _SHOW_COOLING
+00031b c004 rjmp _SHOW_HEATING
_SHOW_COOLING:
-00031e e01c ldi r17, 12
-00031f 9310 0066 sts DIGITS+3, r17
-000321 c003 rjmp _REPROGRAM_SETTINGS_END
+00031c e01c ldi r17, 12
+00031d 9310 0066 sts DIGITS+3, r17
+00031f c003 rjmp _REPROGRAM_SETTINGS_END
_SHOW_HEATING:
-000322 e01d ldi r17, 13
-000323 9310 0066 sts DIGITS+3, r17
+000320 e01d ldi r17, 13
+000321 9310 0066 sts DIGITS+3, r17
//
_REPROGRAM_SETTINGS_END:
-000325 914f pop r20
-000326 913f pop r19
-000327 912f pop r18
-000328 911f pop r17
-000329 910f pop r16
-00032a 9508 ret
+000323 914f pop r20
+000324 913f pop r19
+000325 912f pop r18
+000326 911f pop r17
+000327 910f pop r16
+000328 9508 ret
//
//
//
; **** ОПРОС ПРИСУТСТВИЯ УСТРОЙСТВА ******************************
OW_PRESENCE:
-00032b 94f8 cli
-00032c 9ab9 ow_pull
-00032d e033
-00032e eb4e
-00032f d08c DELAY16 480
-000330 98b9 ow_release
-000331 e030
-000332 e84a
-000333 d088 DELAY16 70
-000334 d005 rcall OW_CHECK_PRESENCE
-000335 e033
-000336 e342
-000337 d084 DELAY16 410
-000338 9478 sei
-000339 9508 ret
+000329 94f8 cli
+00032a 9ab9 ow_pull
+00032b e033
+00032c eb4e
+00032d d09b DELAY16 480
+00032e 98b9 ow_release
+00032f e030
+000330 e84a
+000331 d097 DELAY16 70
+000332 d005 rcall OW_CHECK_PRESENCE
+000333 e033
+000334 e342
+000335 d093 DELAY16 410
+000336 9478 sei
+000337 9508 ret
//
//
@@ -2079,83 +2073,83 @@ main.asm(319): Including file 'mpy16u.asm'
; Если подчиненное устройство притянет шину, то устанавливаем флаг OWPRF в единицу в регистре флагов
;
OW_CHECK_PRESENCE:
-00033a 9bb1 sbis OW_PIN, OW_LINE
-00033b 6071 sbr OWFR, (1<
//
OW_SEND_BYTE:
-000340 94f8 cli
-000341 930f push r16
-000342 931f push r17
-000343 2d08 mov r16, OW_CMD_r
-000344 e018 ldi r17, 8
+00033e 94f8 cli
+00033f 930f push r16
+000340 931f push r17
+000341 2d08 mov r16, OW_CMD_r
+000342 e018 ldi r17, 8
_OW_SEND_BYTE_LOOP:
-000345 9506 lsr r16
-000346 f408 brcc _OW_SEND_0
-000347 f048 brcs _OW_SEND_1
+000343 9506 lsr r16
+000344 f408 brcc _OW_SEND_0
+000345 f048 brcs _OW_SEND_1
_OW_SEND_0:
-000348 9ab9 ow_pull
-000349 e030
-00034a e746
-00034b d070 DELAY16 60
-00034c 98b9 ow_release
-00034d e030
-00034e e142
-00034f d06c DELAY16 10
-000350 c008 rjmp _OW_SEND_BYTE_END
+000346 9ab9 ow_pull
+000347 e030
+000348 e746
+000349 d07f DELAY16 60
+00034a 98b9 ow_release
+00034b e030
+00034c e142
+00034d d07b DELAY16 10
+00034e c008 rjmp _OW_SEND_BYTE_END
_OW_SEND_1:
-000351 9ab9 ow_pull
-000352 e030
-000353 e04a
-000354 d067 DELAY16 6
-000355 98b9 ow_release
-000356 e030
-000357 e74e
-000358 d063 DELAY16 64
+00034f 9ab9 ow_pull
+000350 e030
+000351 e04a
+000352 d076 DELAY16 6
+000353 98b9 ow_release
+000354 e030
+000355 e74e
+000356 d072 DELAY16 64
_OW_SEND_BYTE_END:
-000359 951a dec r17
-00035a f751 brne _OW_SEND_BYTE_LOOP
-00035b 911f pop r17
-00035c 910f pop r16
-00035d 9478 sei
-00035e 9508 ret
+000357 951a dec r17
+000358 f751 brne _OW_SEND_BYTE_LOOP
+000359 911f pop r17
+00035a 910f pop r16
+00035b 9478 sei
+00035c 9508 ret
//
//
OW_RD_BYTE:
-00035f 94f8 cli
-000360 930f push r16
-000361 931f push r17
-000362 2700 clr r16
-000363 e018 ldi r17, 8
+00035d 94f8 cli
+00035e 930f push r16
+00035f 931f push r17
+000360 2700 clr r16
+000361 e018 ldi r17, 8
_OW_RD_BYTE_LP:
-000364 9506 lsr r16
-000365 9ab9 ow_pull
-000366 e030
-000367 e04a
-000368 d053 DELAY16 6
-000369 98b9 ow_release
-00036a e030
-00036b e140
-00036c d04f DELAY16 9
-00036d 99b1 sbic OW_PIN, OW_LINE
-00036e 6800 sbr r16, (1<<7)
-00036f e030
-000370 e64c
-000371 d04a DELAY16 55
-000372 951a dec r17
-000373 f781 brne _OW_RD_BYTE_LP
-000374 930c st X, r16
-000375 911f pop r17
-000376 910f pop r16
-000377 9478 sei
-000378 9508 ret
+000362 9506 lsr r16
+000363 9ab9 ow_pull
+000364 e030
+000365 e04a
+000366 d062 DELAY16 6
+000367 98b9 ow_release
+000368 e030
+000369 e140
+00036a d05e DELAY16 9
+00036b 99b1 sbic OW_PIN, OW_LINE
+00036c 6800 sbr r16, (1<<7)
+00036d e030
+00036e e64c
+00036f d059 DELAY16 55
+000370 951a dec r17
+000371 f781 brne _OW_RD_BYTE_LP
+000372 930c st X, r16
+000373 911f pop r17
+000374 910f pop r16
+000375 9478 sei
+000376 9508 ret
//
//
@@ -2164,138 +2158,158 @@ main.asm(319): Including file 'mpy16u.asm'
; Описание: Перемещает цифры числа в соответствующие ячейки памяти в SRAM
; путем деления этого числа несколько раз
DISPLAY_UPD_DIGITS:
-000379 930f push r16
-00037a 935f push r21
-00037b e053 ldi r21, 3
+000377 930f push r16
+000378 935f push r21
+000379 e053 ldi r21, 3
; инициализация указателя (за каждый проход цикла будет инкрементироваться)
-00037c e6a3 ldi XL, LOW(DIGITS)
-00037d e0b0 ldi XH, HIGH(DIGITS)
+00037a e6a3 ldi XL, LOW(DIGITS)
+00037b e0b0 ldi XH, HIGH(DIGITS)
.equ dividend = SRAM_TEMP_1 ; число которе будем делить
.equ divisor = 10 ; на что делим
; загружаем число которое хотим поделить в адрес SRAM делимого
-00037e 9380 0061 sts dividend, DISP_NUM_L
-000380 9390 0062 sts dividend+1, DISP_NUM_H
+00037c 9380 0061 sts dividend, DISP_NUM_L
+00037e 9390 0062 sts dividend+1, DISP_NUM_H
; четыре раза производим деление для получения остатков
DIV_LOOP:
; заполняем нужные регистры
-000382 9100 0061 lds dd16uL, dividend
-000384 9110 0062 lds dd16uH, dividend+1
-000386 e02a ldi dv16uL, LOW(divisor)
-000387 e030 ldi dv16uH, HIGH(divisor)
+000380 9100 0061 lds dd16uL, dividend
+000382 9110 0062 lds dd16uH, dividend+1
+000384 e02a ldi dv16uL, LOW(divisor)
+000385 e030 ldi dv16uH, HIGH(divisor)
-000388 dd5c rcall div16u ; делим
+000386 dd5b rcall div16u ; делим
-000389 92ed st X+, drem16uL ; сохраняем остаток в ячейку по указателю и увеличиваем его
+000387 92ed st X+, drem16uL ; сохраняем остаток в ячейку по указателю и увеличиваем его
; обновляем делимое
-00038a 9300 0061 sts dividend, dres16uL
-00038c 9310 0062 sts dividend+1, dres16uH
+000388 9300 0061 sts dividend, dres16uL
+00038a 9310 0062 sts dividend+1, dres16uH
-00038e 955a dec r21 ; декрементируем счетчик цикла
-00038f f791 brne DIV_LOOP ; делим еще раз если не 0
-000390 915f pop r21
-000391 910f pop r16
-000392 9508 ret
+00038c 955a dec r21 ; декрементируем счетчик цикла
+00038d f791 brne DIV_LOOP ; делим еще раз если не 0
+00038e 915f pop r21
+00038f 910f pop r16
+000390 9508 ret
//
//
; **** ЗАГРУЖАЕТ НУЖНЫЙ АДРЕС СИМВОЛА В R0 ***********************
DISPLAY_DECODER:
-000393 930f push r16
-000394 931f push r17
+000391 930f push r16
+000392 931f push r17
-000395 e8ea ldi ZL, LOW(2*DISPLAY_SYMBOLS)
-000396 e0f7 ldi ZH, HIGH(2*DISPLAY_SYMBOLS)
+000393 eae4 ldi ZL, LOW(2*DISPLAY_SYMBOLS)
+000394 e0f7 ldi ZH, HIGH(2*DISPLAY_SYMBOLS)
-000397 2711 clr TEMP_REG_B
-000398 0fe0 add ZL, TEMP_REG_A
-000399 1ff1 adc ZH, TEMP_REG_B
+000395 2711 clr TEMP_REG_B
+000396 0fe0 add ZL, TEMP_REG_A
+000397 1ff1 adc ZH, TEMP_REG_B
-00039a 9004 lpm r0, Z
-00039b 911f pop r17
-00039c 910f pop r16
-00039d 9508 ret
+000398 9004 lpm r0, Z
+
+000399 9100 0067 lds r16, CURRENT_DIGIT
+00039b 3002 cpi r16, 2
+00039c f009 breq _DOT_ON
+00039d c00a rjmp _DISPLAY_DECODER_EXIT
+ _DOT_ON:
+00039e 2d00 mov r16, r0
+00039f 770f cbr r16, (1<<7)
+0003a0 2e00 mov r0, r16
+
+0003a1 2d06 mov r16, REPROGRAM_STEP_r
+0003a2 3002 cpi r16, 2
+0003a3 f40c brge _DOT_OFF
+0003a4 c003 rjmp _DISPLAY_DECODER_EXIT
+ _DOT_OFF:
+0003a5 2d00 mov r16, r0
+0003a6 6800 sbr r16, (1<<7)
+0003a7 2e00 mov r0, r16
+
+ _DISPLAY_DECODER_EXIT:
+0003a8 911f pop r17
+0003a9 910f pop r16
+0003aa 9508 ret
//
//
BEEP_SHORT:
-00039e 9ac5 sbi BUZZER_PORT, BUZZER_PIN
-00039f e053
-0003a0 ea39
-0003a1 e74d
-0003a2 d01d DELAY24 150000
-0003a3 98c5 cbi BUZZER_PORT, BUZZER_PIN
-0003a4 9508 ret
+0003ab 9ac5 sbi BUZZER_PORT, BUZZER_PIN
+0003ac e053
+0003ad ea39
+0003ae e74d
+0003af d01d DELAY24 150000
+0003b0 98c5 cbi BUZZER_PORT, BUZZER_PIN
+0003b1 9508 ret
//
//
BEEP_LONG:
-0003a5 9ac5 sbi BUZZER_PORT, BUZZER_PIN
-0003a6 e05c
-0003a7 e334
-0003a8 ef4d
-0003a9 d016 DELAY24 500000
-0003aa 98c5 cbi BUZZER_PORT, BUZZER_PIN
-0003ab 9508 ret
+0003b2 9ac5 sbi BUZZER_PORT, BUZZER_PIN
+0003b3 e05c
+0003b4 e334
+0003b5 ef4d
+0003b6 d016 DELAY24 500000
+0003b7 98c5 cbi BUZZER_PORT, BUZZER_PIN
+0003b8 9508 ret
//
//
DEBOUNCE_SW:
-0003ac 930f push r16
-0003ad 931f push r17
-0003ae 932f push r18
+0003b9 930f push r16
+0003ba 931f push r17
+0003bb 932f push r18
-0003af e02a ldi r18, 10
+0003bc e02a ldi r18, 10
_loop_2:
-0003b0 ef1f ldi r17, 255
+0003bd ef1f ldi r17, 255
_loop_0:
-0003b1 ef0f ldi r16, 255
+0003be ef0f ldi r16, 255
_dec_0:
-0003b2 950a dec r16
-0003b3 f7f1 brne _dec_0
+0003bf 950a dec r16
+0003c0 f7f1 brne _dec_0
_loop_1:
-0003b4 951a dec r17
-0003b5 f7d9 brne _loop_0
+0003c1 951a dec r17
+0003c2 f7d9 brne _loop_0
_loop_3:
-0003b6 952a dec r18
-0003b7 f7c1 brne _loop_2
+0003c3 952a dec r18
+0003c4 f7c1 brne _loop_2
-0003b8 912f pop r18
-0003b9 911f pop r17
-0003ba 910f pop r16
-0003bb 9508 ret//
+0003c5 912f pop r18
+0003c6 911f pop r17
+0003c7 910f pop r16
+0003c8 9508 ret//
//
DELAY_LOOP_16:
-0003bc 5041 subi DELAY_8_r, 1
-0003bd 4030 sbci DELAY_16_r, 0
-0003be f7e8 brcc DELAY_LOOP_16
-0003bf 9508 ret
+0003c9 5041 subi DELAY_8_r, 1
+0003ca 4030 sbci DELAY_16_r, 0
+0003cb f7e8 brcc DELAY_LOOP_16
+0003cc 9508 ret
//
//
DELAY_LOOP_24:
-0003c0 5041 subi DELAY_8_r, 1
-0003c1 4030 sbci DELAY_16_r, 0
-0003c2 4050 sbci DELAY_24_r, 0
-0003c3 f7e0 brcc DELAY_LOOP_24
-0003c4 9508 ret
+0003cd 5041 subi DELAY_8_r, 1
+0003ce 4030 sbci DELAY_16_r, 0
+0003cf 4050 sbci DELAY_24_r, 0
+0003d0 f7e0 brcc DELAY_LOOP_24
+0003d1 9508 ret
//
//
DISPLAY_SYMBOLS:
; HGFEDCBA HGFEDCBA
-0003c5 f9c0 .DB 0b11000000, 0b11111001 ; 0, 1
-0003c6 b0a4 .DB 0b10100100, 0b10110000 ; 2, 3
-0003c7 9299 .DB 0b10011001, 0b10010010 ; 4, 5
-0003c8 f882 .DB 0b10000010, 0b11111000 ; 6, 7
-0003c9 9080 .DB 0b10000000, 0b10010000 ; 8, 9
-0003ca bf9c .DB 0b10011100, 0b10111111 ; °, -
-0003cb 89c6 .DB 0b11000110, 0b10001001 ; C, H
+0003d2 f9c0 .DB 0b11000000, 0b11111001 ; 0, 1
+0003d3 b0a4 .DB 0b10100100, 0b10110000 ; 2, 3
+0003d4 9299 .DB 0b10011001, 0b10010010 ; 4, 5
+0003d5 f882 .DB 0b10000010, 0b11111000 ; 6, 7
+0003d6 9080 .DB 0b10000000, 0b10010000 ; 8, 9
+0003d7 bf9c .DB 0b10011100, 0b10111111 ; °, -
+0003d8 89c6 .DB 0b11000110, 0b10001001 ; C, H
//
//
@@ -2363,9 +2377,9 @@ counted separately from r26..r31 here.
.dseg memory usage only counts static data declared with .byte
"ATtiny2313A" register use summary:
-x : 2 y : 0 z : 1 r0 : 6 r1 : 2 r2 : 0 r3 : 16 r4 : 16
-r5 : 6 r6 : 6 r7 : 0 r8 : 6 r9 : 0 r10: 2 r11: 2 r12: 2
-r13: 2 r14: 5 r15: 11 r16: 213 r17: 119 r18: 53 r19: 59 r20: 53
+x : 2 y : 0 z : 1 r0 : 8 r1 : 2 r2 : 0 r3 : 16 r4 : 16
+r5 : 6 r6 : 7 r7 : 0 r8 : 6 r9 : 0 r10: 2 r11: 2 r12: 2
+r13: 2 r14: 5 r15: 11 r16: 220 r17: 119 r18: 53 r19: 59 r20: 53
r21: 24 r22: 5 r23: 10 r24: 6 r25: 6 r26: 4 r27: 4 r28: 0
r29: 0 r30: 2 r31: 2
Registers used: 29 out of 35 (82.9%)
@@ -2373,18 +2387,18 @@ Registers used: 29 out of 35 (82.9%)
"ATtiny2313A" instruction use summary:
.lds : 0 .sts : 0 adc : 6 add : 8 adiw : 0 and : 0
andi : 4 asr : 0 bclr : 0 bld : 0 brbc : 0 brbs : 0
-brcc : 6 brcs : 1 break : 0 breq : 14 brge : 4 brhc : 0
+brcc : 6 brcs : 1 break : 0 breq : 15 brge : 5 brhc : 0
brhs : 0 brid : 0 brie : 0 brlo : 0 brlt : 0 brmi : 0
brne : 23 brpl : 0 brsh : 0 brtc : 1 brts : 2 brvc : 0
brvs : 0 bset : 0 bst : 0 cbi : 29 cbr : 3 clc : 2
-clh : 0 cli : 5 cln : 0 clr : 18 cls : 0 clt : 3
-clv : 0 clz : 0 com : 6 cp : 2 cpc : 4 cpi : 19
+clh : 0 cli : 5 cln : 0 clr : 18 cls : 0 clt : 4
+clv : 0 clz : 0 com : 6 cp : 2 cpc : 4 cpi : 21
cpse : 0 dec : 11 eor : 0 icall : 0 ijmp : 0 in : 5
-inc : 4 ld : 0 ldd : 0 ldi : 118 lds : 43 lpm : 2
-lsl : 4 lsr : 11 mov : 55 movw : 0 neg : 1 nop : 0
+inc : 4 ld : 0 ldd : 0 ldi : 118 lds : 44 lpm : 2
+lsl : 4 lsr : 11 mov : 58 movw : 0 neg : 1 nop : 0
or : 1 ori : 0 out : 26 pop : 56 push : 55 rcall : 82
-ret : 28 reti : 3 rjmp : 61 rol : 6 ror : 9 sbc : 2
-sbci : 7 sbi : 17 sbic : 5 sbis : 10 sbiw : 0 sbr : 2
+ret : 28 reti : 3 rjmp : 63 rol : 6 ror : 9 sbc : 2
+sbci : 7 sbi : 17 sbic : 5 sbis : 10 sbiw : 0 sbr : 3
sbrc : 0 sbrs : 2 sec : 2 seh : 0 sei : 5 sen : 0
ser : 2 ses : 0 set : 2 sev : 0 sez : 0 sleep : 0
spm : 0 st : 2 std : 0 sts : 48 sub : 5 subi : 6
@@ -2394,7 +2408,7 @@ Instructions used: 56 out of 105 (53.3%)
"ATtiny2313A" memory use summary [bytes]:
Segment Begin End Code Data Used Size Use%
---------------------------------------------------------------
-[.cseg] 0x000000 0x000798 1910 14 1924 2048 93.9%
+[.cseg] 0x000000 0x0007b2 1936 14 1950 2048 95.2%
[.dseg] 0x000060 0x000072 0 18 18 128 14.1%
[.eseg] 0x000030 0x000058 0 40 40 128 31.3%
diff --git a/dist/default/production/attiny2313a_thermostat.X.production.map b/dist/default/production/attiny2313a_thermostat.X.production.map
index 6f9a56f..2198b4e 100644
--- a/dist/default/production/attiny2313a_thermostat.X.production.map
+++ b/dist/default/production/attiny2313a_thermostat.X.production.map
@@ -1,5 +1,5 @@
-AVRASM ver. 2.2.7 main.asm Fri Jun 30 21:37:26 2023
+AVRASM ver. 2.2.7 main.asm Sat Jul 01 12:22:06 2023
EQU SIGNATURE_000 0000001e
@@ -563,7 +563,7 @@ DSEG SETTING_MODE 0000006e
DSEG DEVICE_FAMILY_CODE 0000006f
DSEG PROGRAM_STEPS 00000070
DSEG SW_DATA 00000071
-CSEG RESET_vect 00000070
+CSEG RESET_vect 0000006d
CSEG PCINT0_vect 0000000e
CSEG TIMER0_COMPA_vect 0000001b
CSEG _PCINT0_vect_end 00000017
@@ -571,31 +571,31 @@ CSEG _INTO_PROGRAM_STATE 00000014
CSEG _CLR_CURRENT_DIGIT 00000027
CSEG _indicate_1 0000002a
CSEG _indicate_2 0000003c
-CSEG DISPLAY_DECODER 00000393
-CSEG USI_TRANSMIT 00000241
+CSEG DISPLAY_DECODER 00000391
+CSEG USI_TRANSMIT 0000023e
CSEG _indicate_3 0000004e
-CSEG _indicate_4 0000005b
-CSEG _indicate_exit 00000065
-CSEG MCU_INIT 00000072
-CSEG EEP_RD_BYTE 0000017d
-CSEG _INIT_PARAMS 00000098
-CSEG _FIRST_TIME_RUN 00000096
-CSEG INIT_DEFAULT_PARAMS 00000133
-CSEG _CONTINUE_INIT 000000ac
-CSEG RD_F_CODE 000001e1
-CSEG ERR_FAMILY_CODE 000000be
-CSEG START_PROGRAM 000000c3
-CSEG BEEP_LONG 000003a5
-CSEG BEEP_SHORT 0000039e
-CSEG LOOP 000000c6
-CSEG _STATE_DEFAULT 000000c8
-CSEG _STATE_PROGRAM 000000d4
-CSEG TEMP_UPD 000001d2
-CSEG DISPLAY_UPD_DIGITS 00000379
-CSEG TEMP_COMPARSION 00000185
-CSEG TEMP_SEND_UART 00000115
-CSEG _STATE_ERROR 000000d7
-CSEG REPROGRAM_SETTINGS 0000027d
+CSEG _indicate_4 00000058
+CSEG _indicate_exit 00000062
+CSEG MCU_INIT 0000006f
+CSEG EEP_RD_BYTE 0000017a
+CSEG _INIT_PARAMS 00000095
+CSEG _FIRST_TIME_RUN 00000093
+CSEG INIT_DEFAULT_PARAMS 00000130
+CSEG _CONTINUE_INIT 000000a9
+CSEG RD_F_CODE 000001de
+CSEG ERR_FAMILY_CODE 000000bb
+CSEG START_PROGRAM 000000c0
+CSEG BEEP_LONG 000003b2
+CSEG BEEP_SHORT 000003ab
+CSEG LOOP 000000c3
+CSEG _STATE_DEFAULT 000000c5
+CSEG _STATE_PROGRAM 000000d1
+CSEG TEMP_UPD 000001cf
+CSEG DISPLAY_UPD_DIGITS 00000377
+CSEG TEMP_COMPARSION 00000182
+CSEG TEMP_SEND_UART 00000112
+CSEG _STATE_ERROR 000000d4
+CSEG REPROGRAM_SETTINGS 0000027a
DEF drem16uL r14
DEF drem16uH r15
DEF dres16uL r16
@@ -605,19 +605,19 @@ DEF dd16uH r17
DEF dv16uL r18
DEF dv16uH r19
DEF dcnt16u r20
-CSEG div16u 000000e5
-CSEG d16u_1 000000e8
-CSEG d16u_2 000000ed
-CSEG d16u_3 000000f6
+CSEG div16u 000000e2
+CSEG d16u_1 000000e5
+CSEG d16u_2 000000ea
+CSEG d16u_3 000000f3
DEF drem8u r15
DEF dres8u r16
DEF dd8u r16
DEF dv8u r17
DEF dcnt8u r18
-CSEG div8u 000000f8
-CSEG d8u_1 000000fa
-CSEG d8u_2 000000fe
-CSEG d8u_3 00000104
+CSEG div8u 000000f5
+CSEG d8u_1 000000f7
+CSEG d8u_2 000000fb
+CSEG d8u_3 00000101
DEF mc16uL r16
DEF mc16uH r17
DEF mp16uL r18
@@ -627,91 +627,94 @@ DEF m16u1 r19
DEF m16u2 r20
DEF m16u3 r21
DEF mcnt16u r22
-CSEG mpy16u 00000106
-CSEG m16u_1 0000010b
-CSEG noad8 0000010e
-CSEG UART_WR_BYTE 0000012f
-CSEG _TEMP_SEND_UART_L 00000129
-CSEG EEP_WR_BYTE 00000170
-CSEG WRITE_PARAMS_TO_EEP 00000155
-CSEG _EEP_WR_BYTE_LP 00000172
-CSEG _EEP_RD_BYTE_LP 0000017e
+CSEG mpy16u 00000103
+CSEG m16u_1 00000108
+CSEG noad8 0000010b
+CSEG UART_WR_BYTE 0000012c
+CSEG _TEMP_SEND_UART_L 00000126
+CSEG EEP_WR_BYTE 0000016d
+CSEG WRITE_PARAMS_TO_EEP 00000152
+CSEG _EEP_WR_BYTE_LP 0000016f
+CSEG _EEP_RD_BYTE_LP 0000017b
DEF temp_r_l r16
DEF temp_r_h r17
DEF min_r_trhd_l r11
DEF min_r_trhd_h r10
DEF max_r_trhd_l r13
DEF max_r_trhd_h r12
-CSEG _NEGATE_TEMP 000001b0
-CSEG _COMPARE 000001b4
-CSEG _MIN_THRESHOLD 000001bb
-CSEG _MAX_THRESHOLD 000001c3
-CSEG _COMPARSION_EXIT 000001ca
-CSEG TEMP_CONV 00000235
-CSEG DELAY_LOOP_24 000003c0
-CSEG TEMP_RD 000001eb
-CSEG OW_PRESENCE 0000032b
-CSEG OW_SEND_BYTE 00000340
-CSEG OW_RD_BYTE 0000035f
-CSEG _TEMP_RD_EXIT 0000022f
-CSEG _TEMP_RD_TO_UNSIGNED 00000209
-CSEG _TEMP_RD_CONTINUE 00000210
-CSEG _TEMP_RD_END 00000219
-CSEG _TEMP_CONV_EXIT 0000023f
-CSEG _USI_TRANSMIT_LOOP 00000247
-CSEG BUTTON_PROCESS 0000024f
-CSEG _SW_CHECK_ON_0 00000250
-CSEG _SW_SET_0 00000253
-CSEG _SW_CHECK_ON_1 0000026f
-CSEG _SW_SET_FROM_0_TO_1 00000258
-CSEG DEBOUNCE_SW 000003ac
-CSEG _SAVE_SETTINGS 00000262
-CSEG _SW_SET_1 00000272
-CSEG _BUTTON_PROCESS_END 0000027b
-CSEG _SW_SET_FROM_1_TO_0 00000277
-CSEG _INTO 00000286
-CSEG _REPROGRAM_SETTINGS_LOOP 0000028a
-CSEG _CHECK_STEP 0000028b
-CSEG _STEP_1 00000292
-CSEG _STEP_2 000002b8
-CSEG _S3_JMP 000002b7
-CSEG _REPROGRAM_SETTINGS_END 00000325
-CSEG _S1_CHECK_PLUS 00000293
-CSEG _INCREASE_HYST 00000299
-CSEG _S1_CHECK_MINUS 00000296
-CSEG _DECREASE_HYST 000002a2
-CSEG _SHOW_HYST 000002aa
-CSEG _STEP_3 000002ff
-CSEG _S2_CHECK_PLUS 000002b9
-CSEG _INCREASE_TEMP 000002bf
-CSEG _S2_CHECK_MINUS 000002bc
-CSEG _DECREASE_TEMP 000002d1
-CSEG _SHOW_TEMP 000002e0
-CSEG __DECREASE 000002da
-CSEG _NEGATE_SET_TEMP 000002ed
-CSEG _DIVIDE_SET_TEMP 000002f2
-CSEG _S3_CHECK_PLUS 00000300
-CSEG _SET_HEAT_MODE 00000306
-CSEG _S3_CHECK_MINUS 00000303
-CSEG _SET_COOLING_MODE 0000030b
-CSEG _SHOW_MODE 0000030f
-CSEG _SHOW_COOLING 0000031e
-CSEG _SHOW_HEATING 00000322
-CSEG DELAY_LOOP_16 000003bc
-CSEG OW_CHECK_PRESENCE 0000033a
-CSEG _EXIT 0000033f
-CSEG _OW_SEND_BYTE_LOOP 00000345
-CSEG _OW_SEND_0 00000348
-CSEG _OW_SEND_1 00000351
-CSEG _OW_SEND_BYTE_END 00000359
-CSEG _OW_RD_BYTE_LP 00000364
+CSEG _NEGATE_TEMP 000001ad
+CSEG _COMPARE 000001b1
+CSEG _MIN_THRESHOLD 000001b8
+CSEG _MAX_THRESHOLD 000001c0
+CSEG _COMPARSION_EXIT 000001c7
+CSEG TEMP_CONV 00000232
+CSEG DELAY_LOOP_24 000003cd
+CSEG TEMP_RD 000001e8
+CSEG OW_PRESENCE 00000329
+CSEG OW_SEND_BYTE 0000033e
+CSEG OW_RD_BYTE 0000035d
+CSEG _TEMP_RD_EXIT 0000022c
+CSEG _TEMP_RD_TO_UNSIGNED 00000206
+CSEG _TEMP_RD_CONTINUE 0000020d
+CSEG _TEMP_RD_END 00000216
+CSEG _TEMP_CONV_EXIT 0000023c
+CSEG _USI_TRANSMIT_LOOP 00000244
+CSEG BUTTON_PROCESS 0000024c
+CSEG _SW_CHECK_ON_0 0000024d
+CSEG _SW_SET_0 00000250
+CSEG _SW_CHECK_ON_1 0000026c
+CSEG _SW_SET_FROM_0_TO_1 00000255
+CSEG DEBOUNCE_SW 000003b9
+CSEG _SAVE_SETTINGS 0000025f
+CSEG _SW_SET_1 0000026f
+CSEG _BUTTON_PROCESS_END 00000278
+CSEG _SW_SET_FROM_1_TO_0 00000274
+CSEG _INTO 00000283
+CSEG _REPROGRAM_SETTINGS_LOOP 00000287
+CSEG _CHECK_STEP 00000288
+CSEG _STEP_1 0000028f
+CSEG _STEP_2 000002b6
+CSEG _S3_JMP 000002b5
+CSEG _REPROGRAM_SETTINGS_END 00000323
+CSEG _S1_CHECK_PLUS 00000290
+CSEG _INCREASE_HYST 00000296
+CSEG _S1_CHECK_MINUS 00000293
+CSEG _DECREASE_HYST 0000029f
+CSEG _SHOW_HYST 000002a7
+CSEG _STEP_3 000002fd
+CSEG _S2_CHECK_PLUS 000002b7
+CSEG _INCREASE_TEMP 000002bd
+CSEG _S2_CHECK_MINUS 000002ba
+CSEG _DECREASE_TEMP 000002cf
+CSEG _SHOW_TEMP 000002de
+CSEG __DECREASE 000002d8
+CSEG _NEGATE_SET_TEMP 000002eb
+CSEG _DIVIDE_SET_TEMP 000002f0
+CSEG _S3_CHECK_PLUS 000002fe
+CSEG _SET_HEAT_MODE 00000304
+CSEG _S3_CHECK_MINUS 00000301
+CSEG _SET_COOLING_MODE 00000309
+CSEG _SHOW_MODE 0000030d
+CSEG _SHOW_COOLING 0000031c
+CSEG _SHOW_HEATING 00000320
+CSEG DELAY_LOOP_16 000003c9
+CSEG OW_CHECK_PRESENCE 00000338
+CSEG _EXIT 0000033d
+CSEG _OW_SEND_BYTE_LOOP 00000343
+CSEG _OW_SEND_0 00000346
+CSEG _OW_SEND_1 0000034f
+CSEG _OW_SEND_BYTE_END 00000357
+CSEG _OW_RD_BYTE_LP 00000362
EQU dividend 00000061
EQU divisor 0000000a
-CSEG DIV_LOOP 00000382
-CSEG DISPLAY_SYMBOLS 000003c5
-CSEG _loop_2 000003b0
-CSEG _loop_0 000003b1
-CSEG _dec_0 000003b2
-CSEG _loop_1 000003b4
-CSEG _loop_3 000003b6
+CSEG DIV_LOOP 00000380
+CSEG DISPLAY_SYMBOLS 000003d2
+CSEG _DOT_ON 0000039e
+CSEG _DISPLAY_DECODER_EXIT 000003a8
+CSEG _DOT_OFF 000003a5
+CSEG _loop_2 000003bd
+CSEG _loop_0 000003be
+CSEG _dec_0 000003bf
+CSEG _loop_1 000003c1
+CSEG _loop_3 000003c3
ESEG INFO 00000030
diff --git a/dist/default/production/attiny2313a_thermostat.X.production.obj b/dist/default/production/attiny2313a_thermostat.X.production.obj
index 8edf977..c2997a3 100644
Binary files a/dist/default/production/attiny2313a_thermostat.X.production.obj and b/dist/default/production/attiny2313a_thermostat.X.production.obj differ
diff --git a/dist/default/production/attiny2313a_thermostat.X.production.tmp b/dist/default/production/attiny2313a_thermostat.X.production.tmp
index 4e0e75e..607cead 100644
--- a/dist/default/production/attiny2313a_thermostat.X.production.tmp
+++ b/dist/default/production/attiny2313a_thermostat.X.production.tmp
@@ -40,7 +40,7 @@
main.asm35
main.asm36
main.asm37
- main.asm183
+ main.asm180
main.asm61
main.asm84
<_PCINT0_vect_end>main.asm75
@@ -48,31 +48,31 @@
<_CLR_CURRENT_DIGIT>main.asm98
<_indicate_1>main.asm102
<_indicate_2>main.asm122
- main.asm1135
- main.asm725
+ main.asm1129
+ main.asm718
<_indicate_3>main.asm140
- <_indicate_4>main.asm155
- <_indicate_exit>main.asm167
- main.asm189
- main.asm460
- <_INIT_PARAMS>main.asm230
- <_FIRST_TIME_RUN>main.asm227
- main.asm368
- <_CONTINUE_INIT>main.asm251
- main.asm591
- main.asm272
- main.asm277
- main.asm1161
- main.asm1153
- main.asm284
- <_STATE_DEFAULT>main.asm287
- <_STATE_PROGRAM>main.asm299
- main.asm575
- main.asm1094
- main.asm477
- main.asm322
- <_STATE_ERROR>main.asm303
- main.asm810
+ <_indicate_4>main.asm152
+ <_indicate_exit>main.asm164
+ main.asm186
+ main.asm453
+ <_INIT_PARAMS>main.asm224
+ <_FIRST_TIME_RUN>main.asm221
+ main.asm361
+ <_CONTINUE_INIT>main.asm245
+ main.asm584
+ main.asm266
+ main.asm271
+ main.asm1175
+ main.asm1167
+ main.asm278
+ <_STATE_DEFAULT>main.asm280
+ <_STATE_PROGRAM>main.asm292
+ main.asm568
+ main.asm1088
+ main.asm470
+ main.asm315
+ <_STATE_ERROR>main.asm296
+ main.asm803
div16u.asm32
div16u.asm36
div16u.asm42
@@ -84,82 +84,85 @@
mpy16u.asm31
mpy16u.asm37
mpy16u.asm40
- main.asm360
- <_TEMP_SEND_UART_L>main.asm349
- main.asm435
- main.asm406
- <_EEP_WR_BYTE_LP>main.asm438
- <_EEP_RD_BYTE_LP>main.asm462
- <_NEGATE_TEMP>main.asm531
- <_COMPARE>main.asm537
- <_MIN_THRESHOLD>main.asm547
- <_MAX_THRESHOLD>main.asm556
- <_COMPARSION_EXIT>main.asm563
- main.asm703
- main.asm1203
- main.asm607
- main.asm1007
- main.asm1034
- main.asm1065
- <_TEMP_RD_EXIT>main.asm695
- <_TEMP_RD_TO_UNSIGNED>main.asm644
- <_TEMP_RD_CONTINUE>main.asm657
- <_TEMP_RD_END>main.asm667
- <_TEMP_CONV_EXIT>main.asm718
- <_USI_TRANSMIT_LOOP>main.asm744
- main.asm758
- <_SW_CHECK_ON_0>main.asm760
- <_SW_SET_0>main.asm764
- <_SW_CHECK_ON_1>main.asm791
- <_SW_SET_FROM_0_TO_1>main.asm769
- main.asm1169
- <_SAVE_SETTINGS>main.asm779
- <_SW_SET_1>main.asm795
- <_BUTTON_PROCESS_END>main.asm804
- <_SW_SET_FROM_1_TO_0>main.asm800
- <_INTO>main.asm821
- <_REPROGRAM_SETTINGS_LOOP>main.asm826
- <_CHECK_STEP>main.asm828
- <_STEP_1>main.asm838
- <_STEP_2>main.asm881
- <_S3_JMP>main.asm877
- <_REPROGRAM_SETTINGS_END>main.asm995
- <_S1_CHECK_PLUS>main.asm840
- <_INCREASE_HYST>main.asm848
- <_S1_CHECK_MINUS>main.asm844
- <_DECREASE_HYST>main.asm856
- <_SHOW_HYST>main.asm863
- <_STEP_3>main.asm954
- <_S2_CHECK_PLUS>main.asm883
- <_INCREASE_TEMP>main.asm891
- <_S2_CHECK_MINUS>main.asm887
- <_DECREASE_TEMP>main.asm906
- <_SHOW_TEMP>main.asm919
- <__DECREASE>main.asm914
- <_NEGATE_SET_TEMP>main.asm932
- <_DIVIDE_SET_TEMP>main.asm936
- <_S3_CHECK_PLUS>main.asm956
- <_SET_HEAT_MODE>main.asm964
- <_S3_CHECK_MINUS>main.asm960
- <_SET_COOLING_MODE>main.asm969
- <_SHOW_MODE>main.asm973
- <_SHOW_COOLING>main.asm986
- <_SHOW_HEATING>main.asm990
- main.asm1195
- main.asm1023
- <_EXIT>main.asm1029
- <_OW_SEND_BYTE_LOOP>main.asm1040
- <_OW_SEND_0>main.asm1044
- <_OW_SEND_1>main.asm1050
- <_OW_SEND_BYTE_END>main.asm1055
- <_OW_RD_BYTE_LP>main.asm1071
- main.asm1111
- main.asm1212
- <_loop_2>main.asm1175
- <_loop_0>main.asm1177
- <_dec_0>main.asm1179
- <_loop_1>main.asm1182
- <_loop_3>main.asm1185
- main.asm1230
+ main.asm353
+ <_TEMP_SEND_UART_L>main.asm342
+ main.asm428
+ main.asm399
+ <_EEP_WR_BYTE_LP>main.asm431
+ <_EEP_RD_BYTE_LP>main.asm455
+ <_NEGATE_TEMP>main.asm524
+ <_COMPARE>main.asm530
+ <_MIN_THRESHOLD>main.asm540
+ <_MAX_THRESHOLD>main.asm549
+ <_COMPARSION_EXIT>main.asm556
+ main.asm696
+ main.asm1217
+ main.asm600
+ main.asm1001
+ main.asm1028
+ main.asm1059
+ <_TEMP_RD_EXIT>main.asm688
+ <_TEMP_RD_TO_UNSIGNED>main.asm637
+ <_TEMP_RD_CONTINUE>main.asm650
+ <_TEMP_RD_END>main.asm660
+ <_TEMP_CONV_EXIT>main.asm711
+ <_USI_TRANSMIT_LOOP>main.asm737
+ main.asm751
+ <_SW_CHECK_ON_0>main.asm753
+ <_SW_SET_0>main.asm757
+ <_SW_CHECK_ON_1>main.asm784
+ <_SW_SET_FROM_0_TO_1>main.asm762
+ main.asm1183
+ <_SAVE_SETTINGS>main.asm772
+ <_SW_SET_1>main.asm788
+ <_BUTTON_PROCESS_END>main.asm797
+ <_SW_SET_FROM_1_TO_0>main.asm793
+ <_INTO>main.asm814
+ <_REPROGRAM_SETTINGS_LOOP>main.asm819
+ <_CHECK_STEP>main.asm821
+ <_STEP_1>main.asm831
+ <_STEP_2>main.asm875
+ <_S3_JMP>main.asm871
+ <_REPROGRAM_SETTINGS_END>main.asm989
+ <_S1_CHECK_PLUS>main.asm833
+ <_INCREASE_HYST>main.asm841
+ <_S1_CHECK_MINUS>main.asm837
+ <_DECREASE_HYST>main.asm849
+ <_SHOW_HYST>main.asm856
+ <_STEP_3>main.asm948
+ <_S2_CHECK_PLUS>main.asm877
+ <_INCREASE_TEMP>main.asm885
+ <_S2_CHECK_MINUS>main.asm881
+ <_DECREASE_TEMP>main.asm900
+ <_SHOW_TEMP>main.asm913
+ <__DECREASE>main.asm908
+ <_NEGATE_SET_TEMP>main.asm926
+ <_DIVIDE_SET_TEMP>main.asm930
+ <_S3_CHECK_PLUS>main.asm950
+ <_SET_HEAT_MODE>main.asm958
+ <_S3_CHECK_MINUS>main.asm954
+ <_SET_COOLING_MODE>main.asm963
+ <_SHOW_MODE>main.asm967
+ <_SHOW_COOLING>main.asm980
+ <_SHOW_HEATING>main.asm984
+ main.asm1209
+ main.asm1017
+ <_EXIT>main.asm1023
+ <_OW_SEND_BYTE_LOOP>main.asm1034
+ <_OW_SEND_0>main.asm1038
+ <_OW_SEND_1>main.asm1044
+ <_OW_SEND_BYTE_END>main.asm1049
+ <_OW_RD_BYTE_LP>main.asm1065
+ main.asm1105
+ main.asm1226
+ <_DOT_ON>main.asm1146
+ <_DISPLAY_DECODER_EXIT>main.asm1160
+ <_DOT_OFF>main.asm1155
+ <_loop_2>main.asm1189
+ <_loop_0>main.asm1191
+ <_dec_0>main.asm1193
+ <_loop_1>main.asm1196
+ <_loop_3>main.asm1199
+ main.asm1244
diff --git a/div16u.hex b/div16u.hex
deleted file mode 100644
index 915f9d9..0000000
--- a/div16u.hex
+++ /dev/null
@@ -1,5 +0,0 @@
-:020000020000FC
-:10000000EE24FF1841E1001F111F4A9509F40895DD
-:10001000EE1CFF1CE21AF30A20F4E20EF31E889491
-:06002000F2CF0894F0CFBE
-:00000001FF
diff --git a/div8u.hex b/div8u.hex
deleted file mode 100644
index ab56053..0000000
--- a/div8u.hex
+++ /dev/null
@@ -1,4 +0,0 @@
-:020000020000FC
-:10000000FF1829E0001F2A9509F40895FF1CF11A32
-:0C00100018F4F10E8894F6CF0894F4CF99
-:00000001FF
diff --git a/main.asm b/main.asm
index 81ef9fa..9596b68 100644
--- a/main.asm
+++ b/main.asm
@@ -147,9 +147,6 @@ _indicate_3:
sbi PORTD, DIGIT_3_PIN
lds TEMP_REG_A, DIGITS
rcall DISPLAY_DECODER
- mov r16, r0
- cbr r16, (1<<7)
- mov r0, r16
rcall USI_TRANSMIT
_indicate_4:
@@ -197,9 +194,6 @@ MCU_INIT:
outi r16, TCCR0B, (1<