From 8ab7e43d8c0644918f2ac02e63e7b3168bec8113 Mon Sep 17 00:00:00 2001 From: sergeyyarkov Date: Sat, 1 Jul 2023 14:47:18 +0300 Subject: [PATCH] refactor --- .../attiny2313a_thermostat.X.production.hex | 247 +-- .../attiny2313a_thermostat.X.production.lss | 1835 +++++++++-------- .../attiny2313a_thermostat.X.production.map | 247 +-- .../attiny2313a_thermostat.X.production.obj | Bin 8956 -> 9055 bytes .../attiny2313a_thermostat.X.production.tmp | 255 +-- main.asm | 25 +- nbproject/Makefile-genesis.properties | 4 +- nbproject/configurations.xml | 4 +- 8 files changed, 1319 insertions(+), 1298 deletions(-) diff --git a/dist/default/production/attiny2313a_thermostat.X.production.hex b/dist/default/production/attiny2313a_thermostat.X.production.hex index 50d084c..1c52cc8 100644 --- a/dist/default/production/attiny2313a_thermostat.X.production.hex +++ b/dist/default/production/attiny2313a_thermostat.X.production.hex @@ -1,127 +1,128 @@ :020000020000FC -:020000006CC0D2 +:0200000071C0CD :02000800189549 :0200160002C026 -:10001A000DC00F931F930FB716B31C7019F411E09C -:10002A00109360000FBF1F910F9118950F931F93A4 -:10003A002F933F934F935F935FB74091670045308B -:10004A000CF403C0442740936700403081F493982E -:10005A00949895980EF002C00BE002C000916500DA -:10006A00002311F0929A01C0929856D302D24130DD -:10007A0081F4929894989598009164003091650063 -: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 +:10001A0012C00F931F930FB716B31C7041F41091BF +:10002A006000103009F003C011E0109360000FBFA8 +:10003A001F910F9118950F931F932F933F934F93EF +:10004A005F935FB74091670045300CF403C04427C3 +:10005A0040936700403081F49398949895980EF0F5 +:10006A0002C00BE002C000916500002311F0929AD1 +:10007A0001C0929856D302D2413081F49298949852 +:10008A0095980091640030916500032B11F0939AC2 +:10009A0001C093980091640044D3F0D1423041F4F6 +:1000AA00929893989598949A009163003AD3E6D1DE +:1000BA00433041F4929893989498959A00916600E7 +:1000CA0030D3DCD14395409367005FBF5F914F9176 +:1000DA003F912F911F910F9118950FED0DBF0FE7CB +:1000EA0001BB01EE07BB0CE108BB02E000BF05E063 +:1000FA0003BF03E206BF00E20BBF0CE100BD03E34E +:10010A0009B900E002B908E00AB906E003B9112406 +:10011A001092670000E00093600004E0302EEAD0FD +:10012A00042D003111F09CD014C000E0302EE2D032 +:10013A0040926B0001E0302EDDD040926C0002E06C +:10014A00302ED8D040926D0003E0302ED3D04092AA +:10015A006E000027009368000093690000EF009387 +:10016A006A000FEF00937100662428D100916F0096 +:10017A00083209F405C012E010936000F9D201C0F8 +:10018A00F0D280E090E000916000003051F42091BC +:10019A006A002093660003D1AAD2B4D011E019BF35 +:1001AA0041D0013009F4A6D1023069F71BE010935F +:1001BA00630010936400109365001093660011E0C9 +:1001CA0019BFE1CFEE24FF1841E1001F111F4A9524 +:1001DA0009F40895EE1CFF1CE21AF30A20F4E20E59 +:1001EA00F31E8894F2CF0894F0CFFF1829E0001F7D +:1001FA002A9509F40895FF1CF11A18F4F10E88944F +:10020A00F6CF0894F4CF5527442760E13695279511 +:10021A0010F4400F511F57954795379527956A95C2 +:10022A00B9F708950F931F9300916800502E14D0C8 +:10023A0000916A00502E10D000B30170502E0CD0DD +:10024A0004E0502E09D00027502E1CE005D01A9544 +:10025A00E9F71F910F9108955D9BFECF5CB8089551 +:10026A0001E000936B00402E00E0302E36D00CE205 +:10027A0000936C00402E01E0302E2FD005E0009351 +:10028A006D00402E02E0302E28D001E000936E006F +:10029A00402E03E0302E21D000E1402E04E0302E23 +:1002AA001CD008950F9300916B00402E00E0302E71 +:1002BA0014D000916C00402E01E0302E0ED0009137 +:1002CA006D00402E02E0302E08D000916E00402EC4 +:1002DA0003E0302E02D00F910895F8940F93E1991C +:1002EA00FECF00E00CBB3EBA4DBAE29AE19A0F91FA +:1002FA0078940895F894E199FECF3EBAE09A4DB207 +:10030A00789408950F931F932F933F934F935F937E +:10031A007F9300916800109169002AE030E073DF52 +:10032A00022F132F20916A003327020F131F4091C7 +:10033A006C0050916B0060916D004F935F9377272B +:10034A00461B570BB42EA52E5F914F917727460F68 +:10035A00571FD42EC52E0EF004C0009510950F5FBE +:10036A001F4FB016A10624F40D151C054CF40FC03E +:10037A0040916E00442311F4909801C0909A07C0EE +:10038A0040916E00442311F4909A01C090987F9195 +:10039A005F914F913F912F911F910F9108951F9354 +:1003AA0061D052E135E54DEBFED112D010916800D3 +:1003BA00812F10916900912F1F9108950F9349D1B0 +:1003CA0003E3802E5BD1AFE6B0E077D10F910895B9 +:1003DA000F931F932F933F934F933BD170FF3CC0D2 +:1003EA000CEC802E4BD10EEB802E48D1A8E6B0E063 +:1003FA0064D1A9E6B0E061D110916800209169004A +:10040A002F93287F283F11F0E89407C02F91689412 +:10041A00109520951F5F2F4F01C02F912695179594 +:10042A002695179526951795269517953091680064 +:10043A000EF43195432F3F70432F330F330F330F91 +:10044A00440F340F369536953695369510936800D5 +:10045A002093690030936A004F913F912F911F9129 +:10046A000F9108950F93F5D070FF06C00CEC802E03 +:10047A0005D104E4802E02D10F9108950F930F92B3 +:10048A000FB800E40EB90BE10DB9769BFDCFC09A07 +:10049A00C0980F900F9108950F93B49B01C01CC090 +:1004AA0000917100002309F417C00027009371001E +:1004BA0066D16394162D143014F453D10DC010E094 +:1004CA0019BF92989398949895986624EBDE50D128 +:1004DA00969810E010936000B49901C009C0009189 +:1004EA007100002309F004C00FEF0093710047D197 +:1004FA000F9108950F931F932F933F934F93062DB8 +:10050A00002309F004C09098969A2BD16394C4DF13 +:10051A00013029F0023051F1033039F194C0E7D0AB +:10052A00B29B04C000C0B39B0AC011C028D110916D +:10053A006D00183C09F0139510936D0008C01FD187 +:10054A0010916D00113009F01A9510936D00E8941E +:10055A000F931F9300916D001AE047DE802F9927B1 +:10056A00F09266001F910F916EC047C0C0D0B29B37 +:10057A0004C000C0B39B13C021C001D110916C000C +:10058A0020916B00103B34E0230731F03AE0130F5F +:10059A003327231F10936C0020936B000FC0EFD0FA +:1005AA0010916C0020916B001C303EEF230711F074 +:1005BA001A50204010936C0020936B000F931F93E6 +:1005CA002F933F9300916C0010916B00212F20789C +:1005DA0011F4E89405C06894009510950F5F1F4FB9 +:1005EA002AE030E0EFDD802F912F0AE000936600C9 +:1005FA003F912F911F910F9126C0E894B29B04C09E +:10060A0000C0B39B06C009C0BAD011E010936E00B7 +:10061A0004C0B5D010E010936E001127812F912FDE +:10062A001EE01093630010936400109365002091FC +:10063A006E00222309F004C01CE01093660003C078 +:10064A001DE0109366004F913F912F911F910F91DA +:10065A000895F894B99A33E04EEBA1D0B99830E0F6 +:10066A004AE89DD005D033E042E399D078940895C2 +:10067A00B19B716002C0B1997E7F0895F8940F937F +:10068A001F93082D18E0069508F448F0B99A30E04F +:10069A0046E785D0B99830E042E181D008C0B99ADE +:1006AA0030E04AE07CD0B99830E04EE778D01A952D +:1006BA0051F71F910F9178940895F8940F931F930F +:1006CA00002718E00695B99A30E04AE068D0B99850 +:1006DA0030E040E164D0B199006830E04CE65FD088 +:1006EA001A9581F70C931F910F91789408950F939F +:1006FA005F9353E0A3E6B0E08093610090936200B9 +:10070A0000916100109162002AE030E05BDDED9219 +:10071A0000936100109362005A9591F75F910F91CF +:10072A0008950F931F93EAEBF7E01127E00FF11FEB +:10073A00049000916700023009F010C0002D0F7775 +:10074A00002E062D02302CF400916000023029F0B0 +:10075A0005C0002D0068002E01C0FBCF1F910F912C +:10076A000895C59A53E039EA4DE71DD0C598089512 +:10077A00C59A5CE034E34DEF16D0C59808950F93FF +:10078A001F932F932AE01FEF0FEF0A95F1F71A959F +:10079A00D9F72A95C1F72F911F910F9108954150CA +:1007AA003040E8F70895415030405040E0F708954E +:0E07BA00C0F9A4B0999282F880909CBFC689C5 :00000001FF diff --git a/dist/default/production/attiny2313a_thermostat.X.production.lss b/dist/default/production/attiny2313a_thermostat.X.production.lss index 312490f..06dfaef 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 Sat Jul 01 12:22:06 2023 +AVRASM ver. 2.2.7 main.asm Sat Jul 01 13:22:52 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(310): Including file 'div16u.asm' +main.asm(312): Including file 'div16u.asm' div16u.asm(22): warning: Register r16 already defined by the .DEF directive -main.asm(310): 'div16u.asm' included form here +main.asm(312): 'div16u.asm' included form here div16u.asm(23): warning: Register r17 already defined by the .DEF directive -main.asm(310): 'div16u.asm' included form here +main.asm(312): 'div16u.asm' included form here div16u.asm(24): warning: Register r16 already defined by the .DEF directive -main.asm(310): 'div16u.asm' included form here +main.asm(312): 'div16u.asm' included form here div16u.asm(25): warning: Register r17 already defined by the .DEF directive -main.asm(310): 'div16u.asm' included form here +main.asm(312): 'div16u.asm' included form here div16u.asm(27): warning: Register r19 already defined by the .DEF directive -main.asm(310): 'div16u.asm' included form here +main.asm(312): 'div16u.asm' included form here div16u.asm(28): warning: Register r20 already defined by the .DEF directive -main.asm(310): 'div16u.asm' included form here -main.asm(311): Including file 'div8u.asm' +main.asm(312): 'div16u.asm' included form here +main.asm(313): Including file 'div8u.asm' div8u.asm(18): warning: Register r15 already defined by the .DEF directive -main.asm(311): 'div8u.asm' included form here +main.asm(313): 'div8u.asm' included form here div8u.asm(19): warning: Register r16 already defined by the .DEF directive -main.asm(311): 'div8u.asm' included form here +main.asm(313): 'div8u.asm' included form here div8u.asm(20): warning: Register r16 already defined by the .DEF directive -main.asm(311): 'div8u.asm' included form here +main.asm(313): 'div8u.asm' included form here div8u.asm(21): warning: Register r17 already defined by the .DEF directive -main.asm(311): 'div8u.asm' included form here +main.asm(313): 'div8u.asm' included form here div8u.asm(22): warning: Register r18 already defined by the .DEF directive -main.asm(311): 'div8u.asm' included form here -main.asm(312): Including file 'mpy16u.asm' +main.asm(313): 'div8u.asm' included form here +main.asm(314): Including file 'mpy16u.asm' mpy16u.asm(19): warning: Register r16 already defined by the .DEF directive -main.asm(312): 'mpy16u.asm' included form here +main.asm(314): 'mpy16u.asm' included form here mpy16u.asm(20): warning: Register r17 already defined by the .DEF directive -main.asm(312): 'mpy16u.asm' included form here +main.asm(314): 'mpy16u.asm' included form here mpy16u.asm(21): warning: Register r18 already defined by the .DEF directive -main.asm(312): 'mpy16u.asm' included form here +main.asm(314): 'mpy16u.asm' included form here mpy16u.asm(22): warning: Register r19 already defined by the .DEF directive -main.asm(312): 'mpy16u.asm' included form here +main.asm(314): 'mpy16u.asm' included form here mpy16u.asm(23): warning: Register r18 already defined by the .DEF directive -main.asm(312): 'mpy16u.asm' included form here +main.asm(314): 'mpy16u.asm' included form here mpy16u.asm(24): warning: Register r19 already defined by the .DEF directive -main.asm(312): 'mpy16u.asm' included form here +main.asm(314): 'mpy16u.asm' included form here mpy16u.asm(25): warning: Register r20 already defined by the .DEF directive -main.asm(312): 'mpy16u.asm' included form here +main.asm(314): 'mpy16u.asm' included form here mpy16u.asm(26): warning: Register r21 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 +main.asm(314): 'mpy16u.asm' included form here +main.asm(481): warning: Register r16 already defined by the .DEF directive +main.asm(482): 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(310): Including file 'div16u.asm' -main.asm(311): Including file 'div8u.asm' -main.asm(312): Including file 'mpy16u.asm' +main.asm(312): Including file 'div16u.asm' +main.asm(313): Including file 'div8u.asm' +main.asm(314): Including file 'mpy16u.asm' ; @@ -761,9 +761,9 @@ main.asm(312): Including file 'mpy16u.asm' ; Device Datasheet: http://ww1.microchip.com/downloads/en/DeviceDoc/doc8246.pdf ; Assembler: AVR macro assembler 2.2.7 ; Clock frequency: 8 MHz External Crystal Oscillator - ; Fuses: lfuse: 0xCF, hfuse: 0x9F, efuse: 0xFF, lock: 0xFF + ; Fuses: lfuse: 0xCF, hfuse: 0xDF, efuse: 0xFF, lock: 0xFF ; - ; Written by Sergey Yarkov 22.01.2023 + ; Written by Sergey Yarkov 05.07.2023 .LIST @@ -909,7 +909,6 @@ main.asm(312): Including file 'mpy16u.asm' ldi DELAY_8_r, LOW(@0*F_CPU/5-3) rcall DELAY_LOOP_24 - // ; **** СЕГМЕНТ ДАННЫХ ******************************************** .DSEG @@ -938,7 +937,7 @@ main.asm(312): Including file 'mpy16u.asm' // .ORG 0x00 -000000 c06c rjmp RESET_vect +000000 c071 rjmp RESET_vect .ORG 0x04 000004 9518 reti @@ -947,7 +946,7 @@ main.asm(312): Including file 'mpy16u.asm' 00000b c002 rjmp PCINT0_vect .ORG 0x000D -00000d c00d rjmp TIMER0_COMPA_vect +00000d c012 rjmp TIMER0_COMPA_vect // @@ -960,261 +959,264 @@ main.asm(312): Including file 'mpy16u.asm' ; если нажаты две кнопки то входим в режим программирования 000012 701c andi r17, (1< // ; **** ДИНАМИЧЕСКАЯ ИНДИКАЦИЯ ************************************ TIMER0_COMPA_vect: -00001b 930f push r16 -00001c 931f push r17 -00001d 932f push r18 -00001e 933f push r19 -00001f 934f push r20 -000020 935f push r21 -000021 b75f in r21, SREG +000020 930f push r16 +000021 931f push r17 +000022 932f push r18 +000023 933f push r19 +000024 934f push r20 +000025 935f push r21 +000026 b75f in r21, SREG -000022 9140 0067 lds r20, CURRENT_DIGIT -000024 3045 cpi r20, 5 -000025 f40c brge _CLR_CURRENT_DIGIT ; сброс активного разряда если >= 5 -000026 c003 rjmp _indicate_1 +000027 9140 0067 lds r20, CURRENT_DIGIT +000029 3045 cpi r20, 5 +00002a f40c brge _CLR_CURRENT_DIGIT ; сброс активного разряда если >= 5 +00002b c003 rjmp _indicate_1 _CLR_CURRENT_DIGIT: ; сброс текущего активного разряда в ноль -000027 2744 clr r20 -000028 9340 0067 sts CURRENT_DIGIT, r20 +00002c 2744 clr r20 +00002d 9340 0067 sts CURRENT_DIGIT, r20 _indicate_1: -00002a 3040 cpi r20, 0 -00002b f481 brne _indicate_2 +00002f 3040 cpi r20, 0 +000030 f481 brne _indicate_2 -00002c 9893 cbi PORTD, DIGIT_2_PIN -00002d 9894 cbi PORTD, DIGIT_3_PIN -00002e 9895 cbi PORTD, DIGIT_4_PIN -00002f f00e brts PC+2 -000030 c002 rjmp PC+3 -000031 e00b ldi TEMP_REG_A, 11 ; // - -000032 c002 rjmp PC+3 -000033 9100 0065 lds TEMP_REG_A, DIGITS+2 -000035 2300 tst TEMP_REG_A -000036 f011 breq PC+3 -000037 9a92 sbi PORTD, DIGIT_1_PIN -000038 c001 rjmp PC+2 -000039 9892 cbi PORTD, DIGIT_1_PIN -00003a d356 rcall DISPLAY_DECODER -00003b d202 rcall USI_TRANSMIT +000031 9893 cbi PORTD, DIGIT_2_PIN +000032 9894 cbi PORTD, DIGIT_3_PIN +000033 9895 cbi PORTD, DIGIT_4_PIN +000034 f00e brts PC+2 +000035 c002 rjmp PC+3 +000036 e00b ldi TEMP_REG_A, 11 ; // - +000037 c002 rjmp PC+3 +000038 9100 0065 lds TEMP_REG_A, DIGITS+2 +00003a 2300 tst TEMP_REG_A +00003b f011 breq PC+3 +00003c 9a92 sbi PORTD, DIGIT_1_PIN +00003d c001 rjmp PC+2 +00003e 9892 cbi PORTD, DIGIT_1_PIN +00003f d356 rcall DISPLAY_DECODER +000040 d202 rcall USI_TRANSMIT _indicate_2: -00003c 3041 cpi r20, 1 -00003d f481 brne _indicate_3 +000041 3041 cpi r20, 1 +000042 f481 brne _indicate_3 -00003e 9892 cbi PORTD, DIGIT_1_PIN -00003f 9894 cbi PORTD, DIGIT_3_PIN -000040 9895 cbi PORTD, DIGIT_4_PIN -000041 9100 0064 lds TEMP_REG_A, DIGITS+1 -000043 9130 0065 lds r19, DIGITS+2 -000045 2b03 or TEMP_REG_A, r19 -000046 f011 breq PC+3 -000047 9a93 sbi PORTD, DIGIT_2_PIN -000048 c001 rjmp PC+2 -000049 9893 cbi PORTD, DIGIT_2_PIN -00004a 9100 0064 lds TEMP_REG_A, DIGITS+1 -00004c d344 rcall DISPLAY_DECODER -00004d d1f0 rcall USI_TRANSMIT +000043 9892 cbi PORTD, DIGIT_1_PIN +000044 9894 cbi PORTD, DIGIT_3_PIN +000045 9895 cbi PORTD, DIGIT_4_PIN +000046 9100 0064 lds TEMP_REG_A, DIGITS+1 +000048 9130 0065 lds r19, DIGITS+2 +00004a 2b03 or TEMP_REG_A, r19 +00004b f011 breq PC+3 +00004c 9a93 sbi PORTD, DIGIT_2_PIN +00004d c001 rjmp PC+2 +00004e 9893 cbi PORTD, DIGIT_2_PIN +00004f 9100 0064 lds TEMP_REG_A, DIGITS+1 +000051 d344 rcall DISPLAY_DECODER +000052 d1f0 rcall USI_TRANSMIT _indicate_3: -00004e 3042 cpi r20, 2 -00004f f441 brne _indicate_4 +000053 3042 cpi r20, 2 +000054 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 d33a rcall DISPLAY_DECODER -000057 d1e6 rcall USI_TRANSMIT +000055 9892 cbi PORTD, DIGIT_1_PIN +000056 9893 cbi PORTD, DIGIT_2_PIN +000057 9895 cbi PORTD, DIGIT_4_PIN +000058 9a94 sbi PORTD, DIGIT_3_PIN +000059 9100 0063 lds TEMP_REG_A, DIGITS +00005b d33a rcall DISPLAY_DECODER +00005c d1e6 rcall USI_TRANSMIT _indicate_4: -000058 3043 cpi r20, 3 -000059 f441 brne _indicate_exit +00005d 3043 cpi r20, 3 +00005e f441 brne _indicate_exit -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 +00005f 9892 cbi PORTD, DIGIT_1_PIN +000060 9893 cbi PORTD, DIGIT_2_PIN +000061 9894 cbi PORTD, DIGIT_3_PIN +000062 9a95 sbi PORTD, DIGIT_4_PIN +000063 9100 0066 lds TEMP_REG_A, DIGITS+3 +000065 d330 rcall DISPLAY_DECODER +000066 d1dc rcall USI_TRANSMIT _indicate_exit: -000062 9543 inc r20 -000063 9340 0067 sts CURRENT_DIGIT, r20 +000067 9543 inc r20 +000068 9340 0067 sts CURRENT_DIGIT, r20 -000065 bf5f out SREG, r21 +00006a bf5f out SREG, r21 -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 +00006b 915f pop r21 +00006c 914f pop r20 +00006d 913f pop r19 +00006e 912f pop r18 +00006f 911f pop r17 +000070 910f pop r16 +000071 9518 reti ;// ; **** СТАРТ ПРОГРАММЫ ******************************************* RESET_vect: -00006d ed0f ldi TEMP_REG_A, LOW(RAMEND) -00006e bf0d out SPL, TEMP_REG_A +000072 ed0f ldi TEMP_REG_A, LOW(RAMEND) +000073 bf0d out SPL, TEMP_REG_A // ; **** ПРОЦЕСС ИНИЦИАЛИЗАЦИИ МК ********************************** MCU_INIT: ; **** ИНИЦИАЛИЗАЦИЯ ПИНОВ ************************************* -00006f e70f -000070 bb01 outi r16, DDRD, (1< // ; **** ГЛАВНЫЙ ЦИКЛ ********************************************** LOOP: -0000c3 9100 0060 lds r16, MCU_STATE ; получаем текущее состояние МК +0000c8 9100 0060 lds r16, MCU_STATE ; получаем текущее состояние МК _STATE_DEFAULT: -0000c5 3000 cpi r16, MCU_STATE_DEFAULT -0000c6 f451 brne _STATE_PROGRAM +0000ca 3000 cpi r16, MCU_STATE_DEFAULT +0000cb f451 brne _STATE_PROGRAM -0000c7 9120 006a lds r18, TEMP_F -0000c9 9320 0066 sts DIGITS+3, r18 +0000cc 9120 006a lds r18, TEMP_F +0000ce 9320 0066 sts DIGITS+3, r18 -0000cb d103 rcall TEMP_UPD ; обновление данных о температуре -0000cc d2aa rcall DISPLAY_UPD_DIGITS -0000cd d0b4 rcall TEMP_COMPARSION ; логика термостата -0000ce e011 -0000cf bf19 outi r17, TIMSK, (1< - ; **** ПОДПРОГРАММЫ ********************************************** .INCLUDE "div16u.asm" @@ -1249,29 +1251,29 @@ main.asm(312): Including file 'mpy16u.asm' ;***** Code div16u: -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 +0000e7 24ee clr drem16uL ; clear remainder Low byte +0000e8 18ff sub drem16uH,drem16uH ; clear remainder High byte and carry +0000e9 e141 ldi dcnt16u,17 ; init loop counter d16u_1: -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 +0000ea 1f00 rol dd16uL ; shift left dividend +0000eb 1f11 rol dd16uH +0000ec 954a dec dcnt16u ; decrement counter +0000ed f409 brne d16u_2 ; if done +0000ee 9508 ret ; return d16u_2: -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 +0000ef 1cee rol drem16uL ; shift dividend into remainder +0000f0 1cff rol drem16uH +0000f1 1ae2 sub drem16uL,dv16uL ; remainder = remainder - divisor +0000f2 0af3 sbc drem16uH,dv16uH +0000f3 f420 brcc d16u_3 ; if result negative +0000f4 0ee2 add drem16uL,dv16uL ; restore remainder +0000f5 1ef3 adc drem16uH,dv16uH +0000f6 9488 clc ; clear carry to be shifted into result +0000f7 cff2 rjmp d16u_1 ; else d16u_3: -0000f3 9408 sec ; set carry to be shifted into result +0000f8 9408 sec ; set carry to be shifted into result .INCLUDE "div8u.asm" -0000f4 cff0 +0000f9 cff0 ;* ;* "div8u" - 8/8 Bit Unsigned Division ;* @@ -1296,21 +1298,21 @@ main.asm(312): Including file 'mpy16u.asm' ;***** Code -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 +0000fa 18ff div8u: sub drem8u,drem8u ;clear remainder and carry +0000fb e029 ldi dcnt8u,9 ;init loop counter +0000fc 1f00 d8u_1: rol dd8u ;shift left dividend +0000fd 952a dec dcnt8u ;decrement counter +0000fe f409 brne d8u_2 ;if done +0000ff 9508 ret ; return +000100 1cff d8u_2: rol drem8u ;shift dividend into remainder +000101 1af1 sub drem8u,dv8u ;remainder = remainder - divisor +000102 f418 brcc d8u_3 ;if result negative +000103 0ef1 add drem8u,dv8u ; restore remainder +000104 9488 clc ; clear carry to be shifted into result +000105 cff6 rjmp d8u_1 ;else +000106 9408 d8u_3: sec ; set carry to be shifted into result .INCLUDE "mpy16u.asm" -000102 cff4 +000107 cff4 ;* ;* "mpy16u" - 16x16 Bit Unsigned Multiplication ;* @@ -1340,186 +1342,186 @@ main.asm(312): Including file 'mpy16u.asm' ;***** Code -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 +000108 2755 mpy16u: clr m16u3 ;clear 2 highest bytes of result +000109 2744 clr m16u2 +00010a e160 ldi mcnt16u,16 ;init loop counter +00010b 9536 lsr mp16uH +00010c 9527 ror mp16uL -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 +00010d f410 m16u_1: brcc noad8 ;if bit 0 of multiplier set +00010e 0f40 add m16u2,mc16uL ;add multiplicand Low to byte 2 of res +00010f 1f51 adc m16u3,mc16uH ;add multiplicand high to byte 3 of res +000110 9557 noad8: ror m16u3 ;shift right result byte 3 +000111 9547 ror m16u2 ;rotate right result byte 2 +000112 9537 ror m16u1 ;rotate result byte 1 and multiplier High +000113 9527 ror m16u0 ;rotate result byte 0 and multiplier Low +000114 956a dec mcnt16u ;decrement loop counter +000115 f7b9 brne m16u_1 ;if not done, loop more +000116 9508 // TEMP_SEND_UART: -000112 930f push r16 -000113 931f push r17 +000117 930f push r16 +000118 931f push r17 ; целая часть -000114 9100 0068 lds r16, TEMP_L -000116 2e50 mov r5, r16 -000117 d014 rcall UART_WR_BYTE +000119 9100 0068 lds r16, TEMP_L +00011b 2e50 mov r5, r16 +00011c d014 rcall UART_WR_BYTE ; дробная часть -000118 9100 006a lds r16, TEMP_F -00011a 2e50 mov r5, r16 -00011b d010 rcall UART_WR_BYTE +00011d 9100 006a lds r16, TEMP_F +00011f 2e50 mov r5, r16 +000120 d010 rcall UART_WR_BYTE ; состояние реле -00011c b300 in r16, PIND -00011d 7001 andi r16, (1< // UART_WR_BYTE: -00012c 9b5d sbis UCSRA, UDRE -00012d cffe rjmp UART_WR_BYTE -00012e b85c out UDR, r5 -00012f 9508 ret +000131 9b5d sbis UCSRA, UDRE +000132 cffe rjmp UART_WR_BYTE +000133 b85c out UDR, r5 +000134 9508 ret // // INIT_DEFAULT_PARAMS: -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 +000135 e001 ldi r16, DEFAULT_SETTING_TEMP_H +000136 9300 006b sts SETTING_TEMP_H, r16 ; уставка HIGH +000138 2e40 mov EEP_D_r, r16 +000139 e000 ldi r16, EEP_SETTING_TEMP_H +00013a 2e30 mov EEP_A_r, r16 +00013b d036 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 +00013c e20c ldi r16, DEFAULT_SETTING_TEMP_L +00013d 9300 006c sts SETTING_TEMP_L, r16 ; уставка LOW +00013f 2e40 mov EEP_D_r, r16 +000140 e001 ldi r16, EEP_SETTING_TEMP_L +000141 2e30 mov EEP_A_r, r16 +000142 d02f 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 +000143 e005 ldi r16, DEFAULT_SETTING_HYST +000144 9300 006d sts SETTING_HYST, r16 ; гистерезис +000146 2e40 mov EEP_D_r, r16 +000147 e002 ldi r16, EEP_SETTING_HYST +000148 2e30 mov EEP_A_r, r16 +000149 d028 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 - -00014c e100 ldi r16, 0x10 +00014a e001 ldi r16, DEFAULT_SETTING_MODE +00014b 9300 006e sts SETTING_MODE, r16 ; режим 00014d 2e40 mov EEP_D_r, r16 -00014e e004 ldi r16, EEP_FIRST_TIME_RUN +00014e e003 ldi r16, EEP_SETTING_MODE 00014f 2e30 mov EEP_A_r, r16 -000150 d01c rcall EEP_WR_BYTE -000151 9508 ret +000150 d021 rcall EEP_WR_BYTE + +000151 e100 ldi r16, 0x10 +000152 2e40 mov EEP_D_r, r16 +000153 e004 ldi r16, EEP_FIRST_TIME_RUN +000154 2e30 mov EEP_A_r, r16 +000155 d01c rcall EEP_WR_BYTE +000156 9508 ret // // WRITE_PARAMS_TO_EEP: -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 +000157 930f push r16 +000158 9100 006b lds r16, SETTING_TEMP_H ; уставка HIGH +00015a 2e40 mov EEP_D_r, r16 +00015b e000 ldi r16, EEP_SETTING_TEMP_H +00015c 2e30 mov EEP_A_r, r16 +00015d d014 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 +00015e 9100 006c lds r16, SETTING_TEMP_L ; уставка LOW +000160 2e40 mov EEP_D_r, r16 +000161 e001 ldi r16, EEP_SETTING_TEMP_L +000162 2e30 mov EEP_A_r, r16 +000163 d00e 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 +000164 9100 006d lds r16, SETTING_HYST ; гистерезис +000166 2e40 mov EEP_D_r, r16 +000167 e002 ldi r16, EEP_SETTING_HYST +000168 2e30 mov EEP_A_r, r16 +000169 d008 rcall EEP_WR_BYTE -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// +00016a 9100 006e lds r16, SETTING_MODE ; режим +00016c 2e40 mov EEP_D_r, r16 +00016d e003 ldi r16, EEP_SETTING_MODE +00016e 2e30 mov EEP_A_r, r16 +00016f d002 rcall EEP_WR_BYTE +000170 910f pop r16 +000171 9508 ret// // EEP_WR_BYTE: -00016d 94f8 cli -00016e 930f push r16 +000172 94f8 cli +000173 930f push r16 _EEP_WR_BYTE_LP: ; ждем завершения предыдущей записи -00016f 99e1 sbic EECR, EEPE -000170 cffe rjmp _EEP_WR_BYTE_LP +000174 99e1 sbic EECR, EEPE +000175 cffe rjmp _EEP_WR_BYTE_LP ; режим программирования - атомарный -000171 e000 ldi r16, (0< +000183 9ae0 sbi EECR, EERE +000184 b24d in EEP_D_r, EEDR +000185 9478 sei +000186 9508 ret// // TEMP_COMPARSION: -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 +000187 930f push r16 +000188 931f push r17 +000189 932f push r18 +00018a 933f push r19 +00018b 934f push r20 +00018c 935f push r21 +00018d 937f push r23 .DEF temp_r_l = r16 .DEF temp_r_h = r17 @@ -1530,247 +1532,247 @@ main.asm(312): Including file 'mpy16u.asm' .DEF max_r_trhd_l = r13 .DEF max_r_trhd_h = r12 ; умножаем температуру на 10 -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 +00018e 9100 0068 lds mc16uL, TEMP_L // r16 +000190 9110 0069 lds mc16uH, TEMP_H // r17 +000192 e02a ldi mp16uL, LOW(10) +000193 e030 ldi mp16uH, HIGH(10) +000194 df73 rcall mpy16u +000195 2f02 mov temp_r_l, m16u0 ; L +000196 2f13 mov temp_r_h, m16u1 ; H ; добавляем дробную часть -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 +000197 9120 006a lds r18, TEMP_F +000199 2733 clr r19 +00019a 0f02 add temp_r_l, r18 +00019b 1f13 adc temp_r_h, r19 ; определяем нижний и верхний пороги -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 +00019c 9140 006c lds r20, SETTING_TEMP_L +00019e 9150 006b lds r21, SETTING_TEMP_H +0001a0 9160 006d lds r22, SETTING_HYST +0001a2 934f push r20 +0001a3 935f push r21 +0001a4 2777 clr r23 +0001a5 1b46 sub r20, r22 +0001a6 0b57 sbc r21, r23 +0001a7 2eb4 mov min_r_trhd_l, r20 +0001a8 2ea5 mov min_r_trhd_h, r21 +0001a9 915f pop r21 +0001aa 914f pop r20 +0001ab 2777 clr r23 +0001ac 0f46 add r20, r22 +0001ad 1f57 adc r21, r23 +0001ae 2ed4 mov max_r_trhd_l, r20 +0001af 2ec5 mov max_r_trhd_h, r21 ; определяем знак температуры -0001ab f00e brts _NEGATE_TEMP -0001ac c004 rjmp _COMPARE +0001b0 f00e brts _NEGATE_TEMP +0001b1 c004 rjmp _COMPARE _NEGATE_TEMP: -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) +0001b2 9500 com temp_r_l +0001b3 9510 com temp_r_h +0001b4 5f0f subi temp_r_l, low(-1) +0001b5 4f1f sbci temp_r_h, high(-1) _COMPARE: ; проверяем нижний порог -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 +0001b6 16b0 cp min_r_trhd_l, temp_r_l +0001b7 06a1 cpc min_r_trhd_h, temp_r_h +0001b8 f424 brge _MIN_THRESHOLD ; TEMP <= MIN ; проверяем верхний порог -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 +0001b9 150d cp temp_r_l, max_r_trhd_l +0001ba 051c cpc temp_r_h, max_r_trhd_h +0001bb f44c brge _MAX_THRESHOLD ; TEMP >= TOP +0001bc c00f rjmp _COMPARSION_EXIT _MIN_THRESHOLD: ; определяем режим работы -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 +0001bd 9140 006e lds r20, SETTING_MODE +0001bf 2344 tst r20 +0001c0 f411 brne PC+3 +0001c1 9890 relay_off +0001c2 c001 rjmp PC+2 +0001c3 9a90 relay_on +0001c4 c007 rjmp _COMPARSION_EXIT _MAX_THRESHOLD: -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 +0001c5 9140 006e lds r20, SETTING_MODE +0001c7 2344 tst r20 +0001c8 f411 brne PC+3 +0001c9 9a90 relay_on +0001ca c001 rjmp PC+2 +0001cb 9890 relay_off _COMPARSION_EXIT: -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 +0001cc 917f pop r23 +0001cd 915f pop r21 +0001ce 914f pop r20 +0001cf 913f pop r19 +0001d0 912f pop r18 +0001d1 911f pop r17 +0001d2 910f pop r16 +0001d3 9508 ret // // TEMP_UPD: -0001cf 931f push r17 -0001d0 d061 rcall TEMP_CONV -0001d1 e152 -0001d2 e535 -0001d3 eb4d -0001d4 d1f8 DELAY24 751000 -0001d5 d012 rcall TEMP_RD +0001d4 931f push r17 +0001d5 d061 rcall TEMP_CONV +0001d6 e152 +0001d7 e535 +0001d8 eb4d +0001d9 d1fe DELAY24 751000 +0001da d012 rcall TEMP_RD ; обновляем данные в ячейках -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 +0001db 9110 0068 lds r17, TEMP_L +0001dd 2f81 mov DISP_NUM_L, r17 +0001de 9110 0069 lds r17, TEMP_H +0001e0 2f91 mov DISP_NUM_H, r17 +0001e1 911f pop r17 +0001e2 9508 ret // // RD_F_CODE: -0001de 930f push r16 +0001e3 930f push r16 -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 +0001e4 d149 rcall OW_PRESENCE +0001e5 e303 ldi r16, DS18B20_CMD_READROM +0001e6 2e80 mov OW_CMD_r, r16 +0001e7 d15b rcall OW_SEND_BYTE -0001e3 e6af ldi XL, LOW(DEVICE_FAMILY_CODE) -0001e4 e0b0 ldi XH, HIGH(DEVICE_FAMILY_CODE) -0001e5 d177 rcall OW_RD_BYTE +0001e8 e6af ldi XL, LOW(DEVICE_FAMILY_CODE) +0001e9 e0b0 ldi XH, HIGH(DEVICE_FAMILY_CODE) +0001ea d177 rcall OW_RD_BYTE -0001e6 910f pop r16 -0001e7 9508 ret// +0001eb 910f pop r16 +0001ec 9508 ret// // TEMP_RD: -0001e8 930f push r16 -0001e9 931f push r17 -0001ea 932f push r18 -0001eb 933f push r19 -0001ec 934f push r20 +0001ed 930f push r16 +0001ee 931f push r17 +0001ef 932f push r18 +0001f0 933f push r19 +0001f1 934f push r20 -0001ed d13b rcall OW_PRESENCE -0001ee ff70 sbrs OWFR, OWPRF -0001ef c03c rjmp _TEMP_RD_EXIT +0001f2 d13b rcall OW_PRESENCE +0001f3 ff70 sbrs OWFR, OWPRF +0001f4 c03c rjmp _TEMP_RD_EXIT -0001f0 ec0c ldi r16, DS18B20_CMD_SKIPROM -0001f1 2e80 mov OW_CMD_r, r16 -0001f2 d14b rcall OW_SEND_BYTE +0001f5 ec0c ldi r16, DS18B20_CMD_SKIPROM +0001f6 2e80 mov OW_CMD_r, r16 +0001f7 d14b rcall OW_SEND_BYTE -0001f3 eb0e ldi r16, DS18B20_CMD_RSCRATCHPAD -0001f4 2e80 mov OW_CMD_r, r16 -0001f5 d148 rcall OW_SEND_BYTE +0001f8 eb0e ldi r16, DS18B20_CMD_RSCRATCHPAD +0001f9 2e80 mov OW_CMD_r, r16 +0001fa d148 rcall OW_SEND_BYTE -0001f6 e6a8 ldi XL, LOW(TEMP_L) -0001f7 e0b0 ldi XH, HIGH(TEMP_L) -0001f8 d164 rcall OW_RD_BYTE +0001fb e6a8 ldi XL, LOW(TEMP_L) +0001fc e0b0 ldi XH, HIGH(TEMP_L) +0001fd d164 rcall OW_RD_BYTE -0001f9 e6a9 ldi XL, LOW(TEMP_H) -0001fa e0b0 ldi XH, HIGH(TEMP_H) -0001fb d161 rcall OW_RD_BYTE +0001fe e6a9 ldi XL, LOW(TEMP_H) +0001ff e0b0 ldi XH, HIGH(TEMP_H) +000200 d161 rcall OW_RD_BYTE -0001fc 9110 0068 lds r17, TEMP_L -0001fe 9120 0069 lds r18, TEMP_H +000201 9110 0068 lds r17, TEMP_L +000203 9120 0069 lds r18, TEMP_H -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) +000205 932f push r18 +000206 7f28 cbr r18, (1<<0) | (1<<1) | (1<<2) ; убираем ненужные биты на время (интересуют последних битов в TEMP_H) +000207 3f28 cpi r18, 0xf8 ; проверяется является ли число минусовой +000208 f011 breq _TEMP_RD_TO_UNSIGNED ; если да то конвертируем в беззнаковое число +000209 94e8 clt +00020a c007 rjmp _TEMP_RD_CONTINUE ; если нет то преобразуем значение АЦП в температуру (делим на 16) _TEMP_RD_TO_UNSIGNED: -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) +00020b 912f pop r18 +00020c 9468 set +00020d 9510 com r17 +00020e 9520 com r18 +00020f 5f1f subi r17, low(-1) +000210 4f2f sbci r18, high(-1) ; ldi r19, 1 ; add r17, r19 ; ldi r19, 0 ; adc r18, r19 -00020c c001 rjmp PC+2 +000211 c001 rjmp PC+2 _TEMP_RD_CONTINUE: ; Температура = Число с АЦП / 16 (сдвиг вправо 4) -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 +000212 912f pop r18 +000213 9526 lsr r18 +000214 9517 ror r17 +000215 9526 lsr r18 +000216 9517 ror r17 +000217 9526 lsr r18 +000218 9517 ror r17 +000219 9526 lsr r18 +00021a 9517 ror r17 _TEMP_RD_END: -000216 9130 0068 lds r19, TEMP_L -000218 f40e brtc PC+2 -000219 9531 neg r19 ; переводим в беззнаковое число если минус +00021b 9130 0068 lds r19, TEMP_L +00021d f40e brtc PC+2 +00021e 9531 neg r19 ; переводим в беззнаковое число если минус ; далее происходит такое для получения дробной части: ; ((n<<3) + (n<<1))>>4 или (n*10)/16 -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 +00021f 2f43 mov r20, r19 +000220 703f andi r19, 0x0f +000221 2f43 mov r20, r19 +000222 0f33 lsl r19 +000223 0f33 lsl r19 +000224 0f33 lsl r19 -000220 0f44 lsl r20 +000225 0f44 lsl r20 -000221 0f34 add r19, r20 +000226 0f34 add r19, r20 -000222 9536 lsr r19 -000223 9536 lsr r19 -000224 9536 lsr r19 -000225 9536 lsr r19 +000227 9536 lsr r19 +000228 9536 lsr r19 +000229 9536 lsr r19 +00022a 9536 lsr r19 ; записываем данные -000226 9310 0068 sts TEMP_L, r17 -000228 9320 0069 sts TEMP_H, r18 -00022a 9330 006a sts TEMP_F, r19 +00022b 9310 0068 sts TEMP_L, r17 +00022d 9320 0069 sts TEMP_H, r18 +00022f 9330 006a sts TEMP_F, r19 _TEMP_RD_EXIT: -00022c 914f pop r20 -00022d 913f pop r19 -00022e 912f pop r18 -00022f 911f pop r17 -000230 910f pop r16 -000231 9508 ret +000231 914f pop r20 +000232 913f pop r19 +000233 912f pop r18 +000234 911f pop r17 +000235 910f pop r16 +000236 9508 ret ; TEMP_CONV: -000232 930f push r16 +000237 930f push r16 -000233 d0f5 rcall OW_PRESENCE -000234 ff70 sbrs OWFR, OWPRF -000235 c006 rjmp _TEMP_CONV_EXIT +000238 d0f5 rcall OW_PRESENCE +000239 ff70 sbrs OWFR, OWPRF +00023a c006 rjmp _TEMP_CONV_EXIT -000236 ec0c ldi r16, DS18B20_CMD_SKIPROM -000237 2e80 mov OW_CMD_r, r16 -000238 d105 rcall OW_SEND_BYTE +00023b ec0c ldi r16, DS18B20_CMD_SKIPROM +00023c 2e80 mov OW_CMD_r, r16 +00023d d105 rcall OW_SEND_BYTE -000239 e404 ldi r16, DS18B20_CMD_CONVERTTEMP -00023a 2e80 mov OW_CMD_r, r16 -00023b d102 rcall OW_SEND_BYTE +00023e e404 ldi r16, DS18B20_CMD_CONVERTTEMP +00023f 2e80 mov OW_CMD_r, r16 +000240 d102 rcall OW_SEND_BYTE _TEMP_CONV_EXIT: -00023c 910f pop r16 -00023d 9508 ret +000241 910f pop r16 +000242 9508 ret // // ; **** ОТПРАВКА БАЙТА В СДВИГОВЫЙ РЕГИСТР ************************* USI_TRANSMIT: -00023e 930f push r16 -00023f 920f push r0 -000240 b80f out USIDR, r0 ; Байт для отправки всегда находится в регистре r0. Помещаем данные в регистр USIDR. +000243 930f push r16 +000244 920f push r0 +000245 b80f out USIDR, r0 ; Байт для отправки всегда находится в регистре r0. Помещаем данные в регистр USIDR. ; Enable USI Overflow Interrupt Flag (will be 0 if transfer is not compeleted) -000241 e400 ldi TEMP_REG_A, (1< USI Clock Source Select ; USICLK <--------------> USI Clock Strobe ; USITC <--------------> USI Toggle Clock (Enable clock generation) -000243 e10b ldi TEMP_REG_A, (1< + // BUTTON_PROCESS: -00024c 930f push r16 +000251 930f push r16 _SW_CHECK_ON_0: -00024d 9bb4 sbis SW_PIN, SW_SET_PIN -00024e c001 rjmp _SW_SET_0 -00024f c01c rjmp _SW_CHECK_ON_1 +000252 9bb4 sbis SW_PIN, SW_SET_PIN +000253 c001 rjmp _SW_SET_0 +000254 c01c rjmp _SW_CHECK_ON_1 _SW_SET_0: -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 +000255 9100 0071 lds r16, SW_DATA +000257 2300 tst r16 +000258 f409 brne _SW_SET_FROM_0_TO_1 +000259 c017 rjmp _SW_CHECK_ON_1 _SW_SET_FROM_0_TO_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 +00025a 2700 clr r16 +00025b 9300 0071 sts SW_DATA, r16 +00025d d166 rcall DEBOUNCE_SW +00025e 9463 inc REPROGRAM_STEP_r +00025f 2d16 mov r17, REPROGRAM_STEP_r +000260 3014 cpi r17, 4 +000261 f414 brge _SAVE_SETTINGS +000262 d153 rcall BEEP_SHORT +000263 c00d rjmp _SW_CHECK_ON_1 _SAVE_SETTINGS: -00025f e010 -000260 bf19 outi r17, TIMSK, (0< // REPROGRAM_SETTINGS: -00027a 930f push r16 -00027b 931f push r17 -00027c 932f push r18 -00027d 933f push r19 -00027e 934f push r20 +00027f 930f push r16 +000280 931f push r17 +000281 932f push r18 +000282 933f push r19 +000283 934f push r20 -00027f 2d06 mov r16, REPROGRAM_STEP_r -000280 2300 tst r16 -000281 f009 breq _INTO -000282 c004 rjmp _REPROGRAM_SETTINGS_LOOP +000284 2d06 mov r16, REPROGRAM_STEP_r +000285 2300 tst r16 +000286 f009 breq _INTO +000287 c004 rjmp _REPROGRAM_SETTINGS_LOOP _INTO: -000283 9890 relay_off -000284 9a96 sbi PORTD, LED_PGM_PIN -000285 d125 rcall BEEP_SHORT -000286 9463 inc REPROGRAM_STEP_r +000288 9890 relay_off +000289 9a96 sbi PORTD, LED_PGM_PIN +00028a d12b rcall BEEP_SHORT +00028b 9463 inc REPROGRAM_STEP_r _REPROGRAM_SETTINGS_LOOP: -000287 dfc4 rcall BUTTON_PROCESS +00028c dfc4 rcall BUTTON_PROCESS _CHECK_STEP: -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 +00028d 3001 cpi r16, 1 +00028e f029 breq _STEP_1 +00028f 3002 cpi r16, 2 +000290 f151 breq _STEP_2 +000291 3003 cpi r16, 3 +000292 f139 breq _S3_JMP +000293 c094 rjmp _REPROGRAM_SETTINGS_END // _STEP_1: ; установка и отображение гистерезиса -00028f d0e7 rcall DISPLAY_UPD_DIGITS +000294 d0e7 rcall DISPLAY_UPD_DIGITS _S1_CHECK_PLUS: -000290 9bb2 sbis SW_PIN, SW_PLUS_PIN -000291 c004 rjmp _INCREASE_HYST -000292 c000 rjmp _S1_CHECK_MINUS +000295 9bb2 sbis SW_PIN, SW_PLUS_PIN +000296 c004 rjmp _INCREASE_HYST +000297 c000 rjmp _S1_CHECK_MINUS _S1_CHECK_MINUS: -000293 9bb3 sbis SW_PIN, SW_MINUS_PIN -000294 c00a rjmp _DECREASE_HYST -000295 c011 rjmp _SHOW_HYST +000298 9bb3 sbis SW_PIN, SW_MINUS_PIN +000299 c00a rjmp _DECREASE_HYST +00029a c011 rjmp _SHOW_HYST _INCREASE_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 +00029b d128 rcall DEBOUNCE_SW +00029c 9110 006d lds r17, SETTING_HYST +00029e 3c18 cpi r17, MAX_HYST +00029f f009 breq PC+2 +0002a0 9513 inc r17 +0002a1 9310 006d sts SETTING_HYST, r17 +0002a3 c008 rjmp _SHOW_HYST _DECREASE_HYST: -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 +0002a4 d11f rcall DEBOUNCE_SW +0002a5 9110 006d lds r17, SETTING_HYST +0002a7 3011 cpi r17, MIN_HYST +0002a8 f009 breq PC+2 +0002a9 951a dec r17 +0002aa 9310 006d sts SETTING_HYST, r17 _SHOW_HYST: -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 +0002ac 94e8 clt +0002ad 930f push dd8u +0002ae 931f push dv8u +0002af 9100 006d lds dd8u, SETTING_HYST +0002b1 e01a ldi dv8u, 10 +0002b2 de47 rcall div8u +0002b3 2f80 mov DISP_NUM_L, dres8u +0002b4 2799 clr DISP_NUM_H ; гистерезис 8 битный так что ноль пишем в старший байт +0002b5 92f0 0066 sts DIGITS+3, drem8u +0002b7 911f pop dv8u +0002b8 910f pop dd8u +0002b9 c06e rjmp _REPROGRAM_SETTINGS_END // _S3_JMP: ; просто прыжок на _STEP_3 -0002b5 c047 rjmp _STEP_3 +0002ba c047 rjmp _STEP_3 // _STEP_2: -0002b6 d0c0 rcall DISPLAY_UPD_DIGITS +0002bb d0c0 rcall DISPLAY_UPD_DIGITS _S2_CHECK_PLUS: -0002b7 9bb2 sbis SW_PIN, SW_PLUS_PIN -0002b8 c004 rjmp _INCREASE_TEMP -0002b9 c000 rjmp _S2_CHECK_MINUS +0002bc 9bb2 sbis SW_PIN, SW_PLUS_PIN +0002bd c004 rjmp _INCREASE_TEMP +0002be c000 rjmp _S2_CHECK_MINUS _S2_CHECK_MINUS: -0002ba 9bb3 sbis SW_PIN, SW_MINUS_PIN -0002bb c013 rjmp _DECREASE_TEMP -0002bc c021 rjmp _SHOW_TEMP +0002bf 9bb3 sbis SW_PIN, SW_MINUS_PIN +0002c0 c013 rjmp _DECREASE_TEMP +0002c1 c021 rjmp _SHOW_TEMP _INCREASE_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 +0002c2 d101 rcall DEBOUNCE_SW +0002c3 9110 006c lds r17, SETTING_TEMP_L +0002c5 9120 006b lds r18, SETTING_TEMP_H +0002c7 3b10 cpi r17, MAX_TEMP_L +0002c8 e034 ldi r19, MAX_TEMP_H +0002c9 0723 cpc r18, r19 +0002ca f031 breq PC+7 +0002cb e03a ldi r19, 10 +0002cc 0f13 add r17, r19 +0002cd 2733 clr r19 +0002ce 1f23 adc r18, r19 +0002cf 9310 006c sts SETTING_TEMP_L, r17 +0002d1 9320 006b sts SETTING_TEMP_H, r18 +0002d3 c00f rjmp _SHOW_TEMP _DECREASE_TEMP: -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 +0002d4 d0ef rcall DEBOUNCE_SW +0002d5 9110 006c lds r17, SETTING_TEMP_L +0002d7 9120 006b lds r18, SETTING_TEMP_H +0002d9 301c cpi r17, MIN_TEMP_L +0002da ef3e ldi r19, MIN_TEMP_H +0002db 0723 cpc r18, r19 +0002dc f011 breq PC+3 __DECREASE: -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 +0002dd 501a subi r17, 10 +0002de 4020 sbci r18, 0 +0002df 9310 006c sts SETTING_TEMP_L, r17 +0002e1 9320 006b sts SETTING_TEMP_H, r18 _SHOW_TEMP: -0002de 930f push dd16uL -0002df 931f push dd16uH -0002e0 932f push dv16uL -0002e1 933f push dv16uH +0002e3 930f push dd16uL +0002e4 931f push dd16uH +0002e5 932f push dv16uL +0002e6 933f push dv16uH -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 +0002e7 9100 006c lds dd16uL, SETTING_TEMP_L +0002e9 9110 006b lds dd16uH, SETTING_TEMP_H +0002eb 2f21 mov r18, dd16uH +0002ec 7820 andi r18, (1<<7) +0002ed f411 brne _NEGATE_SET_TEMP +0002ee 94e8 clt +0002ef c005 rjmp _DIVIDE_SET_TEMP _NEGATE_SET_TEMP: -0002eb 9468 set -0002ec 9500 -0002ed 9510 -0002ee 5f0f -0002ef 4f1f com16 dd16uL, dd16uH +0002f0 9468 set +0002f1 9500 +0002f2 9510 +0002f3 5f0f +0002f4 4f1f com16 dd16uL, dd16uH _DIVIDE_SET_TEMP: -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 +0002f5 e02a ldi dv16uL, LOW(10) +0002f6 e030 ldi dv16uH, HIGH(10) +0002f7 ddef rcall div16u +0002f8 2f80 mov DISP_NUM_L, dres16uL +0002f9 2f91 mov DISP_NUM_H, dres16uH -0002f5 e00a ldi r16, 10 -0002f6 9300 0066 sts DIGITS+3, r16 ; значок градуса +0002fa e00a ldi r16, 10 +0002fb 9300 0066 sts DIGITS+3, r16 ; значок градуса -0002f8 913f pop dv16uH -0002f9 912f pop dv16uL -0002fa 911f pop dd16uH -0002fb 910f pop dd16uL -0002fc c026 rjmp _REPROGRAM_SETTINGS_END +0002fd 913f pop dv16uH +0002fe 912f pop dv16uL +0002ff 911f pop dd16uH +000300 910f pop dd16uL +000301 c026 rjmp _REPROGRAM_SETTINGS_END // // _STEP_3: -0002fd 94e8 clt +000302 94e8 clt _S3_CHECK_PLUS: -0002fe 9bb2 sbis SW_PIN, SW_PLUS_PIN -0002ff c004 rjmp _SET_HEAT_MODE -000300 c000 rjmp _S3_CHECK_MINUS +000303 9bb2 sbis SW_PIN, SW_PLUS_PIN +000304 c004 rjmp _SET_HEAT_MODE +000305 c000 rjmp _S3_CHECK_MINUS _S3_CHECK_MINUS: -000301 9bb3 sbis SW_PIN, SW_MINUS_PIN -000302 c006 rjmp _SET_COOLING_MODE -000303 c009 rjmp _SHOW_MODE +000306 9bb3 sbis SW_PIN, SW_MINUS_PIN +000307 c006 rjmp _SET_COOLING_MODE +000308 c009 rjmp _SHOW_MODE _SET_HEAT_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: -000309 d0af rcall DEBOUNCE_SW -00030a e010 ldi r17, COOLING_MODE +000309 d0ba rcall DEBOUNCE_SW +00030a e011 ldi r17, HEAT_MODE 00030b 9310 006e sts SETTING_MODE, r17 +00030d c004 rjmp _SHOW_MODE + _SET_COOLING_MODE: +00030e d0b5 rcall DEBOUNCE_SW +00030f e010 ldi r17, COOLING_MODE +000310 9310 006e sts SETTING_MODE, r17 _SHOW_MODE: -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 +000312 2711 clr r17 +000313 2f81 mov DISP_NUM_L, r17 +000314 2f91 mov DISP_NUM_H, r17 +000315 e01e ldi r17, 14 +000316 9310 0063 sts DIGITS, r17 +000318 9310 0064 sts DIGITS+1, r17 +00031a 9310 0065 sts DIGITS+2, r17 +00031c 9120 006e lds r18, SETTING_MODE +00031e 2322 tst r18 +00031f f009 breq _SHOW_COOLING +000320 c004 rjmp _SHOW_HEATING _SHOW_COOLING: -00031c e01c ldi r17, 12 -00031d 9310 0066 sts DIGITS+3, r17 -00031f c003 rjmp _REPROGRAM_SETTINGS_END +000321 e01c ldi r17, 12 +000322 9310 0066 sts DIGITS+3, r17 +000324 c003 rjmp _REPROGRAM_SETTINGS_END _SHOW_HEATING: -000320 e01d ldi r17, 13 -000321 9310 0066 sts DIGITS+3, r17 +000325 e01d ldi r17, 13 +000326 9310 0066 sts DIGITS+3, r17 // _REPROGRAM_SETTINGS_END: -000323 914f pop r20 -000324 913f pop r19 -000325 912f pop r18 -000326 911f pop r17 -000327 910f pop r16 -000328 9508 ret +000328 914f pop r20 +000329 913f pop r19 +00032a 912f pop r18 +00032b 911f pop r17 +00032c 910f pop r16 +00032d 9508 ret // // // ; **** ОПРОС ПРИСУТСТВИЯ УСТРОЙСТВА ****************************** OW_PRESENCE: -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 +00032e 94f8 cli +00032f 9ab9 ow_pull +000330 e033 +000331 eb4e +000332 d0a1 DELAY16 480 +000333 98b9 ow_release +000334 e030 +000335 e84a +000336 d09d DELAY16 70 +000337 d005 rcall OW_CHECK_PRESENCE +000338 e033 +000339 e342 +00033a d099 DELAY16 410 +00033b 9478 sei +00033c 9508 ret // // @@ -2073,83 +2075,83 @@ main.asm(312): Including file 'mpy16u.asm' ; Если подчиненное устройство притянет шину, то устанавливаем флаг OWPRF в единицу в регистре флагов ; OW_CHECK_PRESENCE: -000338 9bb1 sbis OW_PIN, OW_LINE -000339 6071 sbr OWFR, (1< // OW_SEND_BYTE: -00033e 94f8 cli -00033f 930f push r16 -000340 931f push r17 -000341 2d08 mov r16, OW_CMD_r -000342 e018 ldi r17, 8 +000343 94f8 cli +000344 930f push r16 +000345 931f push r17 +000346 2d08 mov r16, OW_CMD_r +000347 e018 ldi r17, 8 _OW_SEND_BYTE_LOOP: -000343 9506 lsr r16 -000344 f408 brcc _OW_SEND_0 -000345 f048 brcs _OW_SEND_1 +000348 9506 lsr r16 +000349 f408 brcc _OW_SEND_0 +00034a f048 brcs _OW_SEND_1 _OW_SEND_0: -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: -00034f 9ab9 ow_pull +00034b 9ab9 ow_pull +00034c e030 +00034d e746 +00034e d085 DELAY16 60 +00034f 98b9 ow_release 000350 e030 -000351 e04a -000352 d076 DELAY16 6 -000353 98b9 ow_release -000354 e030 -000355 e74e -000356 d072 DELAY16 64 +000351 e142 +000352 d081 DELAY16 10 +000353 c008 rjmp _OW_SEND_BYTE_END + _OW_SEND_1: +000354 9ab9 ow_pull +000355 e030 +000356 e04a +000357 d07c DELAY16 6 +000358 98b9 ow_release +000359 e030 +00035a e74e +00035b d078 DELAY16 64 _OW_SEND_BYTE_END: -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 +00035c 951a dec r17 +00035d f751 brne _OW_SEND_BYTE_LOOP +00035e 911f pop r17 +00035f 910f pop r16 +000360 9478 sei +000361 9508 ret // // OW_RD_BYTE: -00035d 94f8 cli -00035e 930f push r16 -00035f 931f push r17 -000360 2700 clr r16 -000361 e018 ldi r17, 8 +000362 94f8 cli +000363 930f push r16 +000364 931f push r17 +000365 2700 clr r16 +000366 e018 ldi r17, 8 _OW_RD_BYTE_LP: -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) +000367 9506 lsr r16 +000368 9ab9 ow_pull +000369 e030 +00036a e04a +00036b d068 DELAY16 6 +00036c 98b9 ow_release 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 +00036e e140 +00036f d064 DELAY16 9 +000370 99b1 sbic OW_PIN, OW_LINE +000371 6800 sbr r16, (1<<7) +000372 e030 +000373 e64c +000374 d05f DELAY16 55 +000375 951a dec r17 +000376 f781 brne _OW_RD_BYTE_LP +000377 930c st X, r16 +000378 911f pop r17 +000379 910f pop r16 +00037a 9478 sei +00037b 9508 ret // // @@ -2158,158 +2160,165 @@ main.asm(312): Including file 'mpy16u.asm' ; Описание: Перемещает цифры числа в соответствующие ячейки памяти в SRAM ; путем деления этого числа несколько раз DISPLAY_UPD_DIGITS: -000377 930f push r16 -000378 935f push r21 -000379 e053 ldi r21, 3 +00037c 930f push r16 +00037d 935f push r21 +00037e e053 ldi r21, 3 ; инициализация указателя (за каждый проход цикла будет инкрементироваться) -00037a e6a3 ldi XL, LOW(DIGITS) -00037b e0b0 ldi XH, HIGH(DIGITS) +00037f e6a3 ldi XL, LOW(DIGITS) +000380 e0b0 ldi XH, HIGH(DIGITS) .equ dividend = SRAM_TEMP_1 ; число которе будем делить .equ divisor = 10 ; на что делим ; загружаем число которое хотим поделить в адрес SRAM делимого -00037c 9380 0061 sts dividend, DISP_NUM_L -00037e 9390 0062 sts dividend+1, DISP_NUM_H +000381 9380 0061 sts dividend, DISP_NUM_L +000383 9390 0062 sts dividend+1, DISP_NUM_H ; четыре раза производим деление для получения остатков DIV_LOOP: ; заполняем нужные регистры -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) +000385 9100 0061 lds dd16uL, dividend +000387 9110 0062 lds dd16uH, dividend+1 +000389 e02a ldi dv16uL, LOW(divisor) +00038a e030 ldi dv16uH, HIGH(divisor) -000386 dd5b rcall div16u ; делим +00038b dd5b rcall div16u ; делим -000387 92ed st X+, drem16uL ; сохраняем остаток в ячейку по указателю и увеличиваем его +00038c 92ed st X+, drem16uL ; сохраняем остаток в ячейку по указателю и увеличиваем его ; обновляем делимое -000388 9300 0061 sts dividend, dres16uL -00038a 9310 0062 sts dividend+1, dres16uH +00038d 9300 0061 sts dividend, dres16uL +00038f 9310 0062 sts dividend+1, dres16uH -00038c 955a dec r21 ; декрементируем счетчик цикла -00038d f791 brne DIV_LOOP ; делим еще раз если не 0 -00038e 915f pop r21 -00038f 910f pop r16 -000390 9508 ret +000391 955a dec r21 ; декрементируем счетчик цикла +000392 f791 brne DIV_LOOP ; делим еще раз если не 0 +000393 915f pop r21 +000394 910f pop r16 +000395 9508 ret // - // + // ; **** ЗАГРУЖАЕТ НУЖНЫЙ АДРЕС СИМВОЛА В R0 *********************** DISPLAY_DECODER: -000391 930f push r16 -000392 931f push r17 +000396 930f push r16 +000397 931f push r17 -000393 eae4 ldi ZL, LOW(2*DISPLAY_SYMBOLS) -000394 e0f7 ldi ZH, HIGH(2*DISPLAY_SYMBOLS) +000398 ebea ldi ZL, LOW(2*DISPLAY_SYMBOLS) +000399 e0f7 ldi ZH, HIGH(2*DISPLAY_SYMBOLS) -000395 2711 clr TEMP_REG_B -000396 0fe0 add ZL, TEMP_REG_A -000397 1ff1 adc ZH, TEMP_REG_B +00039a 2711 clr TEMP_REG_B +00039b 0fe0 add ZL, TEMP_REG_A +00039c 1ff1 adc ZH, TEMP_REG_B -000398 9004 lpm r0, Z +00039d 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 +00039e 9100 0067 lds r16, CURRENT_DIGIT +0003a0 3002 cpi r16, 2 +0003a1 f009 breq _DOT_ON +0003a2 c010 rjmp _DISPLAY_DECODER_EXIT _DOT_ON: -00039e 2d00 mov r16, r0 -00039f 770f cbr r16, (1<<7) -0003a0 2e00 mov r0, r16 +0003a3 2d00 mov r16, r0 +0003a4 770f cbr r16, (1<<7) +0003a5 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 +0003a6 2d06 mov r16, REPROGRAM_STEP_r +0003a7 3002 cpi r16, 2 +0003a8 f42c brge _DOT_OFF +0003a9 9100 0060 lds r16, MCU_STATE +0003ab 3002 cpi r16, MCU_STATE_ERROR +0003ac f029 breq _ERR_DOT_OFF +0003ad c005 rjmp _DISPLAY_DECODER_EXIT _DOT_OFF: -0003a5 2d00 mov r16, r0 -0003a6 6800 sbr r16, (1<<7) -0003a7 2e00 mov r0, r16 - +0003ae 2d00 mov r16, r0 +0003af 6800 sbr r16, (1<<7) +0003b0 2e00 mov r0, r16 +0003b1 c001 rjmp _DISPLAY_DECODER_EXIT + + _ERR_DOT_OFF: +0003b2 cffb rjmp _DOT_OFF + _DISPLAY_DECODER_EXIT: -0003a8 911f pop r17 -0003a9 910f pop r16 -0003aa 9508 ret +0003b3 911f pop r17 +0003b4 910f pop r16 +0003b5 9508 ret // // BEEP_SHORT: -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 +0003b6 9ac5 sbi BUZZER_PORT, BUZZER_PIN +0003b7 e053 +0003b8 ea39 +0003b9 e74d +0003ba d01d DELAY24 150000 +0003bb 98c5 cbi BUZZER_PORT, BUZZER_PIN +0003bc 9508 ret // // BEEP_LONG: -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 +0003bd 9ac5 sbi BUZZER_PORT, BUZZER_PIN +0003be e05c +0003bf e334 +0003c0 ef4d +0003c1 d016 DELAY24 500000 +0003c2 98c5 cbi BUZZER_PORT, BUZZER_PIN +0003c3 9508 ret // // DEBOUNCE_SW: -0003b9 930f push r16 -0003ba 931f push r17 -0003bb 932f push r18 +0003c4 930f push r16 +0003c5 931f push r17 +0003c6 932f push r18 -0003bc e02a ldi r18, 10 +0003c7 e02a ldi r18, 10 _loop_2: -0003bd ef1f ldi r17, 255 +0003c8 ef1f ldi r17, 255 _loop_0: -0003be ef0f ldi r16, 255 +0003c9 ef0f ldi r16, 255 _dec_0: -0003bf 950a dec r16 -0003c0 f7f1 brne _dec_0 +0003ca 950a dec r16 +0003cb f7f1 brne _dec_0 _loop_1: -0003c1 951a dec r17 -0003c2 f7d9 brne _loop_0 +0003cc 951a dec r17 +0003cd f7d9 brne _loop_0 _loop_3: -0003c3 952a dec r18 -0003c4 f7c1 brne _loop_2 +0003ce 952a dec r18 +0003cf f7c1 brne _loop_2 -0003c5 912f pop r18 -0003c6 911f pop r17 -0003c7 910f pop r16 -0003c8 9508 ret// +0003d0 912f pop r18 +0003d1 911f pop r17 +0003d2 910f pop r16 +0003d3 9508 ret// // DELAY_LOOP_16: -0003c9 5041 subi DELAY_8_r, 1 -0003ca 4030 sbci DELAY_16_r, 0 -0003cb f7e8 brcc DELAY_LOOP_16 -0003cc 9508 ret +0003d4 5041 subi DELAY_8_r, 1 +0003d5 4030 sbci DELAY_16_r, 0 +0003d6 f7e8 brcc DELAY_LOOP_16 +0003d7 9508 ret // // DELAY_LOOP_24: -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 +0003d8 5041 subi DELAY_8_r, 1 +0003d9 4030 sbci DELAY_16_r, 0 +0003da 4050 sbci DELAY_24_r, 0 +0003db f7e0 brcc DELAY_LOOP_24 +0003dc 9508 ret // // DISPLAY_SYMBOLS: ; HGFEDCBA HGFEDCBA -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 +0003dd f9c0 .DB 0b11000000, 0b11111001 ; 0, 1 +0003de b0a4 .DB 0b10100100, 0b10110000 ; 2, 3 +0003df 9299 .DB 0b10011001, 0b10010010 ; 4, 5 +0003e0 f882 .DB 0b10000010, 0b11111000 ; 6, 7 +0003e1 9080 .DB 0b10000000, 0b10010000 ; 8, 9 +0003e2 bf9c .DB 0b10011100, 0b10111111 ; °, - +0003e3 89c6 .DB 0b11000110, 0b10001001 ; C, H // // @@ -2379,7 +2388,7 @@ counted separately from r26..r31 here. "ATtiny2313A" register use summary: 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 +r13: 2 r14: 5 r15: 11 r16: 222 r17: 121 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%) @@ -2387,17 +2396,17 @@ 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 : 15 brge : 5 brhc : 0 +brcc : 6 brcs : 1 break : 0 breq : 17 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 : 4 -clv : 0 clz : 0 com : 6 cp : 2 cpc : 4 cpi : 21 +clv : 0 clz : 0 com : 6 cp : 2 cpc : 4 cpi : 23 cpse : 0 dec : 11 eor : 0 icall : 0 ijmp : 0 in : 5 -inc : 4 ld : 0 ldd : 0 ldi : 118 lds : 44 lpm : 2 +inc : 4 ld : 0 ldd : 0 ldi : 118 lds : 46 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 : 63 rol : 6 ror : 9 sbc : 2 +ret : 28 reti : 3 rjmp : 66 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 @@ -2408,7 +2417,7 @@ Instructions used: 56 out of 105 (53.3%) "ATtiny2313A" memory use summary [bytes]: Segment Begin End Code Data Used Size Use% --------------------------------------------------------------- -[.cseg] 0x000000 0x0007b2 1936 14 1950 2048 95.2% +[.cseg] 0x000000 0x0007c8 1958 14 1972 2048 96.3% [.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 2198b4e..039d96f 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 Sat Jul 01 12:22:06 2023 +AVRASM ver. 2.2.7 main.asm Sat Jul 01 13:22:52 2023 EQU SIGNATURE_000 0000001e @@ -563,39 +563,39 @@ DSEG SETTING_MODE 0000006e DSEG DEVICE_FAMILY_CODE 0000006f DSEG PROGRAM_STEPS 00000070 DSEG SW_DATA 00000071 -CSEG RESET_vect 0000006d +CSEG RESET_vect 00000072 CSEG PCINT0_vect 0000000e -CSEG TIMER0_COMPA_vect 0000001b -CSEG _PCINT0_vect_end 00000017 -CSEG _INTO_PROGRAM_STATE 00000014 -CSEG _CLR_CURRENT_DIGIT 00000027 -CSEG _indicate_1 0000002a -CSEG _indicate_2 0000003c -CSEG DISPLAY_DECODER 00000391 -CSEG USI_TRANSMIT 0000023e -CSEG _indicate_3 0000004e -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 +CSEG TIMER0_COMPA_vect 00000020 +CSEG _PCINT0_vect_end 0000001c +CSEG _INTO_PROGRAM_STATE 00000019 +CSEG _CLR_CURRENT_DIGIT 0000002c +CSEG _indicate_1 0000002f +CSEG _indicate_2 00000041 +CSEG DISPLAY_DECODER 00000396 +CSEG USI_TRANSMIT 00000243 +CSEG _indicate_3 00000053 +CSEG _indicate_4 0000005d +CSEG _indicate_exit 00000067 +CSEG MCU_INIT 00000074 +CSEG EEP_RD_BYTE 0000017f +CSEG _INIT_PARAMS 0000009a +CSEG _FIRST_TIME_RUN 00000098 +CSEG INIT_DEFAULT_PARAMS 00000135 +CSEG _CONTINUE_INIT 000000ae +CSEG RD_F_CODE 000001e3 +CSEG ERR_FAMILY_CODE 000000c0 +CSEG START_PROGRAM 000000c5 +CSEG BEEP_LONG 000003bd +CSEG BEEP_SHORT 000003b6 +CSEG LOOP 000000c8 +CSEG _STATE_DEFAULT 000000ca +CSEG _STATE_PROGRAM 000000d6 +CSEG TEMP_UPD 000001d4 +CSEG DISPLAY_UPD_DIGITS 0000037c +CSEG TEMP_COMPARSION 00000187 +CSEG TEMP_SEND_UART 00000117 +CSEG _STATE_ERROR 000000d9 +CSEG REPROGRAM_SETTINGS 0000027f 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 000000e2 -CSEG d16u_1 000000e5 -CSEG d16u_2 000000ea -CSEG d16u_3 000000f3 +CSEG div16u 000000e7 +CSEG d16u_1 000000ea +CSEG d16u_2 000000ef +CSEG d16u_3 000000f8 DEF drem8u r15 DEF dres8u r16 DEF dd8u r16 DEF dv8u r17 DEF dcnt8u r18 -CSEG div8u 000000f5 -CSEG d8u_1 000000f7 -CSEG d8u_2 000000fb -CSEG d8u_3 00000101 +CSEG div8u 000000fa +CSEG d8u_1 000000fc +CSEG d8u_2 00000100 +CSEG d8u_3 00000106 DEF mc16uL r16 DEF mc16uH r17 DEF mp16uL r18 @@ -627,94 +627,95 @@ DEF m16u1 r19 DEF m16u2 r20 DEF m16u3 r21 DEF mcnt16u r22 -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 +CSEG mpy16u 00000108 +CSEG m16u_1 0000010d +CSEG noad8 00000110 +CSEG UART_WR_BYTE 00000131 +CSEG _TEMP_SEND_UART_L 0000012b +CSEG EEP_WR_BYTE 00000172 +CSEG WRITE_PARAMS_TO_EEP 00000157 +CSEG _EEP_WR_BYTE_LP 00000174 +CSEG _EEP_RD_BYTE_LP 00000180 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 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 +CSEG _NEGATE_TEMP 000001b2 +CSEG _COMPARE 000001b6 +CSEG _MIN_THRESHOLD 000001bd +CSEG _MAX_THRESHOLD 000001c5 +CSEG _COMPARSION_EXIT 000001cc +CSEG TEMP_CONV 00000237 +CSEG DELAY_LOOP_24 000003d8 +CSEG TEMP_RD 000001ed +CSEG OW_PRESENCE 0000032e +CSEG OW_SEND_BYTE 00000343 +CSEG OW_RD_BYTE 00000362 +CSEG _TEMP_RD_EXIT 00000231 +CSEG _TEMP_RD_TO_UNSIGNED 0000020b +CSEG _TEMP_RD_CONTINUE 00000212 +CSEG _TEMP_RD_END 0000021b +CSEG _TEMP_CONV_EXIT 00000241 +CSEG _USI_TRANSMIT_LOOP 00000249 +CSEG BUTTON_PROCESS 00000251 +CSEG _SW_CHECK_ON_0 00000252 +CSEG _SW_SET_0 00000255 +CSEG _SW_CHECK_ON_1 00000271 +CSEG _SW_SET_FROM_0_TO_1 0000025a +CSEG DEBOUNCE_SW 000003c4 +CSEG _SAVE_SETTINGS 00000264 +CSEG _SW_SET_1 00000274 +CSEG _BUTTON_PROCESS_END 0000027d +CSEG _SW_SET_FROM_1_TO_0 00000279 +CSEG _INTO 00000288 +CSEG _REPROGRAM_SETTINGS_LOOP 0000028c +CSEG _CHECK_STEP 0000028d +CSEG _STEP_1 00000294 +CSEG _STEP_2 000002bb +CSEG _S3_JMP 000002ba +CSEG _REPROGRAM_SETTINGS_END 00000328 +CSEG _S1_CHECK_PLUS 00000295 +CSEG _INCREASE_HYST 0000029b +CSEG _S1_CHECK_MINUS 00000298 +CSEG _DECREASE_HYST 000002a4 +CSEG _SHOW_HYST 000002ac +CSEG _STEP_3 00000302 +CSEG _S2_CHECK_PLUS 000002bc +CSEG _INCREASE_TEMP 000002c2 +CSEG _S2_CHECK_MINUS 000002bf +CSEG _DECREASE_TEMP 000002d4 +CSEG _SHOW_TEMP 000002e3 +CSEG __DECREASE 000002dd +CSEG _NEGATE_SET_TEMP 000002f0 +CSEG _DIVIDE_SET_TEMP 000002f5 +CSEG _S3_CHECK_PLUS 00000303 +CSEG _SET_HEAT_MODE 00000309 +CSEG _S3_CHECK_MINUS 00000306 +CSEG _SET_COOLING_MODE 0000030e +CSEG _SHOW_MODE 00000312 +CSEG _SHOW_COOLING 00000321 +CSEG _SHOW_HEATING 00000325 +CSEG DELAY_LOOP_16 000003d4 +CSEG OW_CHECK_PRESENCE 0000033d +CSEG _EXIT 00000342 +CSEG _OW_SEND_BYTE_LOOP 00000348 +CSEG _OW_SEND_0 0000034b +CSEG _OW_SEND_1 00000354 +CSEG _OW_SEND_BYTE_END 0000035c +CSEG _OW_RD_BYTE_LP 00000367 EQU dividend 00000061 EQU divisor 0000000a -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 +CSEG DIV_LOOP 00000385 +CSEG DISPLAY_SYMBOLS 000003dd +CSEG _DOT_ON 000003a3 +CSEG _DISPLAY_DECODER_EXIT 000003b3 +CSEG _DOT_OFF 000003ae +CSEG _ERR_DOT_OFF 000003b2 +CSEG _loop_2 000003c8 +CSEG _loop_0 000003c9 +CSEG _dec_0 000003ca +CSEG _loop_1 000003cc +CSEG _loop_3 000003ce ESEG INFO 00000030 diff --git a/dist/default/production/attiny2313a_thermostat.X.production.obj b/dist/default/production/attiny2313a_thermostat.X.production.obj index c2997a340521ca12acda1e8cbf8a81ca88ddafdf..183b8733918a5e5f0fd4c54d60ef898de358f7d8 100644 GIT binary patch literal 9055 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 diff --git a/dist/default/production/attiny2313a_thermostat.X.production.tmp b/dist/default/production/attiny2313a_thermostat.X.production.tmp index 607cead..b8c3bfa 100644 --- a/dist/default/production/attiny2313a_thermostat.X.production.tmp +++ b/dist/default/production/attiny2313a_thermostat.X.production.tmp @@ -26,53 +26,53 @@ dist/default/production/attiny2313a_thermostat.X.production.lss - main.asm24 - main.asm25 - main.asm26 - main.asm27 - main.asm28 - main.asm29 - main.asm30 - main.asm31 - main.asm32 - main.asm33 - main.asm34 - main.asm35 - main.asm36 - main.asm37 - main.asm180 - main.asm61 - main.asm84 - <_PCINT0_vect_end>main.asm75 - <_INTO_PROGRAM_STATE>main.asm71 - <_CLR_CURRENT_DIGIT>main.asm98 - <_indicate_1>main.asm102 - <_indicate_2>main.asm122 - main.asm1129 - main.asm718 - <_indicate_3>main.asm140 - <_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 + main.asm23 + main.asm24 + main.asm25 + main.asm26 + main.asm27 + main.asm28 + main.asm29 + main.asm30 + main.asm31 + main.asm32 + main.asm33 + main.asm34 + main.asm35 + main.asm36 + main.asm183 + main.asm60 + main.asm87 + <_PCINT0_vect_end>main.asm78 + <_INTO_PROGRAM_STATE>main.asm74 + <_CLR_CURRENT_DIGIT>main.asm101 + <_indicate_1>main.asm105 + <_indicate_2>main.asm125 + main.asm1131 + main.asm720 + <_indicate_3>main.asm143 + <_indicate_4>main.asm155 + <_indicate_exit>main.asm167 + main.asm189 + main.asm455 + <_INIT_PARAMS>main.asm227 + <_FIRST_TIME_RUN>main.asm224 + main.asm363 + <_CONTINUE_INIT>main.asm248 + main.asm586 + main.asm269 + main.asm274 + main.asm1184 + main.asm1176 + main.asm281 + <_STATE_DEFAULT>main.asm283 + <_STATE_PROGRAM>main.asm295 + main.asm570 + main.asm1090 + main.asm472 + main.asm317 + <_STATE_ERROR>main.asm299 + main.asm805 div16u.asm32 div16u.asm36 div16u.asm42 @@ -84,85 +84,86 @@ mpy16u.asm31 mpy16u.asm37 mpy16u.asm40 - 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 + main.asm355 + <_TEMP_SEND_UART_L>main.asm344 + main.asm430 + main.asm401 + <_EEP_WR_BYTE_LP>main.asm433 + <_EEP_RD_BYTE_LP>main.asm457 + <_NEGATE_TEMP>main.asm526 + <_COMPARE>main.asm532 + <_MIN_THRESHOLD>main.asm542 + <_MAX_THRESHOLD>main.asm551 + <_COMPARSION_EXIT>main.asm558 + main.asm698 + main.asm1226 + main.asm602 + main.asm1003 + main.asm1030 + main.asm1061 + <_TEMP_RD_EXIT>main.asm690 + <_TEMP_RD_TO_UNSIGNED>main.asm639 + <_TEMP_RD_CONTINUE>main.asm652 + <_TEMP_RD_END>main.asm662 + <_TEMP_CONV_EXIT>main.asm713 + <_USI_TRANSMIT_LOOP>main.asm739 + main.asm754 + <_SW_CHECK_ON_0>main.asm756 + <_SW_SET_0>main.asm760 + <_SW_CHECK_ON_1>main.asm787 + <_SW_SET_FROM_0_TO_1>main.asm765 + main.asm1192 + <_SAVE_SETTINGS>main.asm775 + <_SW_SET_1>main.asm791 + <_BUTTON_PROCESS_END>main.asm800 + <_SW_SET_FROM_1_TO_0>main.asm796 + <_INTO>main.asm816 + <_REPROGRAM_SETTINGS_LOOP>main.asm821 + <_CHECK_STEP>main.asm823 + <_STEP_1>main.asm833 + <_STEP_2>main.asm877 + <_S3_JMP>main.asm873 + <_REPROGRAM_SETTINGS_END>main.asm991 + <_S1_CHECK_PLUS>main.asm835 + <_INCREASE_HYST>main.asm843 + <_S1_CHECK_MINUS>main.asm839 + <_DECREASE_HYST>main.asm851 + <_SHOW_HYST>main.asm858 + <_STEP_3>main.asm950 + <_S2_CHECK_PLUS>main.asm879 + <_INCREASE_TEMP>main.asm887 + <_S2_CHECK_MINUS>main.asm883 + <_DECREASE_TEMP>main.asm902 + <_SHOW_TEMP>main.asm915 + <__DECREASE>main.asm910 + <_NEGATE_SET_TEMP>main.asm928 + <_DIVIDE_SET_TEMP>main.asm932 + <_S3_CHECK_PLUS>main.asm952 + <_SET_HEAT_MODE>main.asm960 + <_S3_CHECK_MINUS>main.asm956 + <_SET_COOLING_MODE>main.asm965 + <_SHOW_MODE>main.asm969 + <_SHOW_COOLING>main.asm982 + <_SHOW_HEATING>main.asm986 + main.asm1218 + main.asm1019 + <_EXIT>main.asm1025 + <_OW_SEND_BYTE_LOOP>main.asm1036 + <_OW_SEND_0>main.asm1040 + <_OW_SEND_1>main.asm1046 + <_OW_SEND_BYTE_END>main.asm1051 + <_OW_RD_BYTE_LP>main.asm1067 + main.asm1107 + main.asm1235 + <_DOT_ON>main.asm1148 + <_DISPLAY_DECODER_EXIT>main.asm1169 + <_DOT_OFF>main.asm1160 + <_ERR_DOT_OFF>main.asm1166 + <_loop_2>main.asm1198 + <_loop_0>main.asm1200 + <_dec_0>main.asm1202 + <_loop_1>main.asm1205 + <_loop_3>main.asm1208 + main.asm1253 diff --git a/main.asm b/main.asm index 9596b68..4c60087 100644 --- a/main.asm +++ b/main.asm @@ -6,16 +6,15 @@ ; Device Datasheet: http://ww1.microchip.com/downloads/en/DeviceDoc/doc8246.pdf ; Assembler: AVR macro assembler 2.2.7 ; Clock frequency: 8 MHz External Crystal Oscillator -; Fuses: lfuse: 0xCF, hfuse: 0x9F, efuse: 0xFF, lock: 0xFF +; Fuses: lfuse: 0xCF, hfuse: 0xDF, efuse: 0xFF, lock: 0xFF ; -; Written by Sergey Yarkov 22.01.2023 +; Written by Sergey Yarkov 05.07.2023 .LIST .INCLUDE "definitions.asm" .INCLUDE "macros.asm" - // ; **** СЕГМЕНТ ДАННЫХ ******************************************** .DSEG @@ -68,6 +67,10 @@ PCINT0_vect: andi r17, (1< - ; **** ПОДПРОГРАММЫ ********************************************** .INCLUDE "div16u.asm" .INCLUDE "div8u.asm" @@ -748,6 +750,7 @@ _USI_TRANSMIT_LOOP: ; Execute loop when USIOIF is 0 ret // +// BUTTON_PROCESS: push r16 _SW_CHECK_ON_0: @@ -796,8 +799,7 @@ _SW_SET_FROM_1_TO_0: rcall DEBOUNCE_SW _BUTTON_PROCESS_END: pop r16 - ret - + ret// // REPROGRAM_SETTINGS: @@ -1124,7 +1126,7 @@ DIV_LOOP: ret // -// + // ; **** ЗАГРУЖАЕТ НУЖНЫЙ АДРЕС СИМВОЛА В R0 *********************** DISPLAY_DECODER: push r16 @@ -1151,12 +1153,19 @@ _DOT_ON: mov r16, REPROGRAM_STEP_r cpi r16, 2 brge _DOT_OFF + lds r16, MCU_STATE + cpi r16, MCU_STATE_ERROR + breq _ERR_DOT_OFF rjmp _DISPLAY_DECODER_EXIT _DOT_OFF: mov r16, r0 sbr r16, (1<<7) mov r0, r16 - + rjmp _DISPLAY_DECODER_EXIT + +_ERR_DOT_OFF: + rjmp _DOT_OFF + _DISPLAY_DECODER_EXIT: pop r17 pop r16 diff --git a/nbproject/Makefile-genesis.properties b/nbproject/Makefile-genesis.properties index dd9fb85..3c13d27 100644 --- a/nbproject/Makefile-genesis.properties +++ b/nbproject/Makefile-genesis.properties @@ -1,11 +1,11 @@ # -#Fri Jun 30 15:31:30 MSK 2023 +#Sat Jul 01 12:39:06 MSK 2023 default.languagetoolchain.version=2.2.7 default.Pack.dfplocation=/home/sergeyyarkov/.mchp_packs/Microchip/ATtiny_DFP/3.0.151 conf.ids=default default.languagetoolchain.dir=/usr/bin host.id=cf4f-twrn-b -configurations-xml=85db3bcfcc45f311e22a744cb34722f8 +configurations-xml=040280617941767982f8dcc1d84c63cc default.com-microchip-mplab-nbide-toolchain-avrasm-AVRASMLanguageToolchain.md5=0e94da8ed93e9650ffef50929833a79f default.com-microchip-mplab-mdbcore-snap-SnapToolImpl.md5=eaa336cefb7fc46db8b50b7b2b6e54ca com-microchip-mplab-nbide-embedded-makeproject-MakeProject.md5=6e02ca5e9f5042ffd365b42ab82d3a9b diff --git a/nbproject/configurations.xml b/nbproject/configurations.xml index 0841790..f2876a4 100644 --- a/nbproject/configurations.xml +++ b/nbproject/configurations.xml @@ -87,7 +87,7 @@ value="ToolFirmwareOption.UseLatest"/> - + @@ -164,7 +164,7 @@ value="ToolFirmwareOption.UseLatest"/> - +