From 82795afc1331756940ad192d4e648b7955e8088c Mon Sep 17 00:00:00 2001 From: sergeyyarkov Date: Sat, 1 Jul 2023 12:22:27 +0300 Subject: [PATCH] fixed dot --- .../attiny2313a_thermostat.X.production.hex | 232 +-- .../attiny2313a_thermostat.X.production.lss | 1714 +++++++++-------- .../attiny2313a_thermostat.X.production.map | 229 +-- .../attiny2313a_thermostat.X.production.obj | Bin 8839 -> 8956 bytes .../attiny2313a_thermostat.X.production.tmp | 207 +- div16u.hex | 5 - div8u.hex | 4 - main.asm | 30 +- main.hex | 231 +-- mpy16u.hex | 4 - 10 files changed, 1341 insertions(+), 1315 deletions(-) delete mode 100644 div16u.hex delete mode 100644 div8u.hex delete mode 100644 mpy16u.hex 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 8edf977fd8073fe2b3b7652b4a269513b0e32f04..c2997a340521ca12acda1e8cbf8a81ca88ddafdf 100644 GIT binary patch literal 8956 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 literal 8839 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.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<