diff --git a/firmware/dist/default/production/firmware.production.hex b/firmware/dist/default/production/firmware.production.hex index 1c52cc8..5c4c6ca 100644 --- a/firmware/dist/default/production/firmware.production.hex +++ b/firmware/dist/default/production/firmware.production.hex @@ -8,26 +8,26 @@ :10004A005F935FB74091670045300CF403C04427C3 :10005A0040936700403081F49398949895980EF0F5 :10006A0002C00BE002C000916500002311F0929AD1 -:10007A0001C0929856D302D2413081F49298949852 +:10007A0001C092986CD318D2413081F49298949826 :10008A0095980091640030916500032B11F0939AC2 -:10009A0001C093980091640044D3F0D1423041F4F6 -:1000AA00929893989598949A009163003AD3E6D1DE +:10009A0001C09398009164005AD306D2423041F4C9 +:1000AA00929893989598949A0091630050D3FCD1B2 :1000BA00433041F4929893989498959A00916600E7 -:1000CA0030D3DCD14395409367005FBF5F914F9176 +:1000CA0046D3F2D14395409367005FBF5F914F914A :1000DA003F912F911F910F9118950FED0DBF0FE7CB :1000EA0001BB01EE07BB0CE108BB02E000BF05E063 :1000FA0003BF03E206BF00E20BBF0CE100BD03E34E :10010A0009B900E002B908E00AB906E003B9112406 -:10011A001092670000E00093600004E0302EEAD0FD -:10012A00042D003111F09CD014C000E0302EE2D032 -:10013A0040926B0001E0302EDDD040926C0002E06C -:10014A00302ED8D040926D0003E0302ED3D04092AA +:10011A001092670000E00093600004E0302E00D1E6 +:10012A00042D003111F0B2D014C000E0302EF8D006 +:10013A0040926B0001E0302EF3D040926C0002E056 +:10014A00302EEED040926D0003E0302EE9D040927E :10015A006E000027009368000093690000EF009387 -:10016A006A000FEF00937100662428D100916F0096 -:10017A00083209F405C012E010936000F9D201C0F8 -:10018A00F0D280E090E000916000003051F42091BC -:10019A006A002093660003D1AAD2B4D011E019BF35 -:1001AA0041D0013009F4A6D1023069F71BE010935F +:10016A006A000FEF0093710066243ED100916F0080 +:10017A00083209F405C012E0109360000FD301C0E1 +:10018A0006D380E090E000916000003051F42091A5 +:10019A006A002093660019D1C0D2CAD011E019BFF3 +:1001AA0041D0013009F4BCD1023069F71BE0109349 :1001BA00630010936400109365001093660011E0C9 :1001CA0019BFE1CFEE24FF1841E1001F111F4A9524 :1001DA0009F40895EE1CFF1CE21AF30A20F4E20E59 @@ -35,94 +35,97 @@ :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 +:10022A00B9F708950F931F9300916800502E2AD0B2 +:10023A0000916A00502E26D000B30170502E22D0B1 +:10024A0000916D00502E1ED000916B00502E1AD0D6 +:10025A0000916C00502E16D000916E00502E12D0D4 +:10026A0000916000502E0ED05FB60CD004E0502EE4 +:10027A0009D00027502E16E005D01A95E9F71F91EC +:10028A000F9108955D9BFECF5CB8089501E000933D +:10029A006B00402E00E0302E36D00CE200936C004A +:1002AA00402E01E0302E2FD005E000936D00402E45 +:1002BA0002E0302E28D001E000936E00402E03E0C9 +:1002CA00302E21D000E1402E04E0302E1CD00895BB +:1002DA000F9300916B00402E00E0302E14D0009155 +:1002EA006C00402E01E0302E0ED000916D00402EA1 +:1002FA0002E0302E08D000916E00402E03E0302E2E +:10030A0002D00F910895F8940F93E199FECF00E07F +:10031A000CBB3EBA4DBAE29AE19A0F9178940895CD +:10032A00F894E199FECF3EBAE09A4DB278940895D6 +:10033A000F931F932F933F934F935F937F93009154 +:10034A006800109169002AE030E05DDF022F132F68 +:10035A0020916A003327020F131F40916C005091BD +:10036A006B0060916D004F935F937727461B570B85 +:10037A00B42EA52E5F914F917727460F571FD42E83 +:10038A00C52E0EF004C0009510950F5F1F4FB016D2 +:10039A00A10624F40D151C054CF40FC040916E0003 +:1003AA00442311F4909801C0909A07C040916E00BE +:1003BA00442311F4909A01C090987F915F914F91D4 +:1003CA003F912F911F910F9108951F9361D052E190 +:1003DA0035E54DEBFED112D010916800812F1091B6 +:1003EA006900912F1F9108950F9349D103E3802E3D +:1003FA005BD1AFE6B0E077D10F9108950F931F93C9 +:10040A002F933F934F933BD170FF3CC00CEC802E4F +:10041A004BD10EEB802E48D1A8E6B0E064D1A9E614 +:10042A00B0E061D110916800209169002F93287F74 +:10043A00283F11F0E89407C02F91689410952095F1 +:10044A001F5F2F4F01C02F91269517952695179557 +:10045A002695179526951795309168000EF43195D3 +:10046A00432F3F70432F330F330F330F440F340F93 +:10047A00369536953695369510936800209369001F +:10048A0030936A004F913F912F911F910F910895D8 +:10049A000F93F5D070FF06C00CEC802E05D104E452 +:1004AA00802E02D10F9108950F930F920FB800E496 +:1004BA000EB90BE10DB9769BFDCFC09AC0980F908B +:1004CA000F9108950F93B49B01C01CC00091710055 +:1004DA00002309F417C000270093710066D16394C2 +:1004EA00162D143014F453D10DC010E019BF929890 +:1004FA009398949895986624EBDE50D1969810E0DC +:10050A0010936000B49901C009C0009171000023E2 +:10051A0009F004C00FEF0093710047D10F910895BD +:10052A000F931F932F933F934F93062D002309F0A8 +:10053A0004C09098969A2BD16394C4DF013029F0B5 +:10054A00023051F1033039F194C0E7D0B29B04C0B4 +:10055A0000C0B39B0AC011C028D110916D00183C8D +:10056A0009F0139510936D0008C01FD110916D000A +:10057A00113009F01A9510936D00E8940F931F93A8 +:10058A0000916D001AE031DE802F9927F092660003 +:10059A001F910F916EC047C0C0D0B29B04C000C06B +:1005AA00B39B13C021C001D110916C0020916B0044 +:1005BA00103B34E0230731F03AE0130F3327231FAF +:1005CA0010936C0020936B000FC0EFD010916C0059 +:1005DA0020916B001C303EEF230711F01A50204087 +:1005EA0010936C0020936B000F931F932F933F93EC +:1005FA0000916C0010916B00212F207811F4E8947F +:10060A0005C06894009510950F5F1F4F2AE030E0EF +:10061A00D9DD802F912F0AE0009366003F912F9138 +:10062A001F910F9126C0E894B29B04C000C0B39BEF +:10063A0006C009C0BAD011E010936E0004C0B5D04C +:10064A0010E010936E001127812F912F1EE0109356 +:10065A006300109364001093650020916E002223BA +:10066A0009F004C01CE01093660003C01DE010935B +:10067A0066004F913F912F911F910F910895F89421 +:10068A00B99A33E04EEBA1D0B99830E04AE89DD050 +:10069A0005D033E042E399D078940895B19B716014 +:1006AA0002C0B1997E7F0895F8940F931F93082D85 +:1006BA0018E0069508F448F0B99A30E046E785D084 +:1006CA00B99830E042E181D008C0B99A30E04AE0F6 +:1006DA007CD0B99830E04EE778D01A9551F71F913F +:1006EA000F9178940895F8940F931F93002718E0B8 +:1006FA000695B99A30E04AE068D0B99830E040E10E +:10070A0064D0B199006830E04CE65FD01A9581F761 +:10071A000C931F910F91789408950F935F9353E070 +:10072A00A3E6B0E0809361009093620000916100BB +:10073A00109162002AE030E045DDED9200936100FD +:10074A00109362005A9591F75F910F9108950F9354 +:10075A001F93E6EEF7E01127E00FF11F04900091D6 +:10076A006700023009F010C0002D0F77002E062D09 +:10077A0002302CF400916000023029F005C0002DEF +:10078A000068002E01C0FBCF1F910F910895C59AF2 +:10079A0053E039EA4DE71DD0C5980895C59A5CE043 +:1007AA0034E34DEF16D0C59808950F931F932F93F6 +:1007BA002AE01FEF0FEF0A95F1F71A95D9F72A9554 +:1007CA00C1F72F911F910F91089541503040E8F7DA +:1007DA000895415030405040E0F70895C0F9A4B060 +:0A07EA00999282F880909CBFC689A6 :00000001FF diff --git a/firmware/dist/default/production/firmware.production.lss b/firmware/dist/default/production/firmware.production.lss index f8e6417..cb38287 100644 --- a/firmware/dist/default/production/firmware.production.lss +++ b/firmware/dist/default/production/firmware.production.lss @@ -1,5 +1,5 @@ -AVRASM ver. 2.2.7 main.asm Sat Jul 01 18:14:26 2023 +AVRASM ver. 2.2.7 main.asm Sat Jul 01 19:34:07 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' @@ -45,8 +45,8 @@ mpy16u.asm(25): warning: Register r20 already defined by the .DEF directive main.asm(314): 'mpy16u.asm' included form here mpy16u.asm(26): warning: Register r21 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 +main.asm(510): warning: Register r16 already defined by the .DEF directive +main.asm(511): 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' @@ -1013,8 +1013,8 @@ main.asm(314): Including file 'mpy16u.asm' 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 +00003f d36c rcall DISPLAY_DECODER +000040 d218 rcall USI_TRANSMIT _indicate_2: 000041 3041 cpi r20, 1 @@ -1031,8 +1031,8 @@ main.asm(314): Including file 'mpy16u.asm' 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 +000051 d35a rcall DISPLAY_DECODER +000052 d206 rcall USI_TRANSMIT _indicate_3: 000053 3042 cpi r20, 2 @@ -1043,8 +1043,8 @@ main.asm(314): Including file 'mpy16u.asm' 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 +00005b d350 rcall DISPLAY_DECODER +00005c d1fc rcall USI_TRANSMIT _indicate_4: 00005d 3043 cpi r20, 3 @@ -1055,8 +1055,8 @@ main.asm(314): Including file 'mpy16u.asm' 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 +000065 d346 rcall DISPLAY_DECODER +000066 d1f2 rcall USI_TRANSMIT _indicate_exit: 000067 9543 inc r20 @@ -1123,32 +1123,32 @@ main.asm(314): Including file 'mpy16u.asm' ; проверяем впервые ли запускаем устройство 000092 e004 ldi r16, EEP_FIRST_TIME_RUN 000093 2e30 mov EEP_A_r, r16 -000094 d0ea rcall EEP_RD_BYTE +000094 d100 rcall EEP_RD_BYTE 000095 2d04 mov r16, EEP_D_r 000096 3100 cpi r16, 0x10 ; 0x10 - зарезервированное число которое говорит о том что устройство запускается НЕ впервые 000097 f011 breq _INIT_PARAMS _FIRST_TIME_RUN: ; если устройство запускается впервые то записываем в EEPROM и ОЗУ стандартные параметры -000098 d09c rcall INIT_DEFAULT_PARAMS +000098 d0b2 rcall INIT_DEFAULT_PARAMS 000099 c014 rjmp _CONTINUE_INIT _INIT_PARAMS: ; иначе берем из EEPROM настройки и записываем в ОЗУ 00009a e000 ldi r16, EEP_SETTING_TEMP_H 00009b 2e30 mov EEP_A_r, r16 -00009c d0e2 rcall EEP_RD_BYTE +00009c d0f8 rcall EEP_RD_BYTE 00009d 9240 006b sts SETTING_TEMP_H, EEP_D_r 00009f e001 ldi r16, EEP_SETTING_TEMP_L 0000a0 2e30 mov EEP_A_r, r16 -0000a1 d0dd rcall EEP_RD_BYTE +0000a1 d0f3 rcall EEP_RD_BYTE 0000a2 9240 006c sts SETTING_TEMP_L, EEP_D_r 0000a4 e002 ldi r16, EEP_SETTING_HYST 0000a5 2e30 mov EEP_A_r, r16 -0000a6 d0d8 rcall EEP_RD_BYTE +0000a6 d0ee rcall EEP_RD_BYTE 0000a7 9240 006d sts SETTING_HYST, EEP_D_r 0000a9 e003 ldi r16, EEP_SETTING_MODE 0000aa 2e30 mov EEP_A_r, r16 -0000ab d0d3 rcall EEP_RD_BYTE +0000ab d0e9 rcall EEP_RD_BYTE 0000ac 9240 006e sts SETTING_MODE, EEP_D_r _CONTINUE_INIT: @@ -1165,7 +1165,7 @@ main.asm(314): Including file 'mpy16u.asm' ; **** СТАРТУЕМ ************************************************ -0000ba d128 rcall RD_F_CODE ; проверяем что датчик есть на шине +0000ba d13e rcall RD_F_CODE ; проверяем что датчик есть на шине 0000bb 9100 006f lds r16, DEVICE_FAMILY_CODE 0000bd 3208 cpi r16, 0x28 ; код семейства для DS18B20 = 0x28 @@ -1175,10 +1175,10 @@ main.asm(314): Including file 'mpy16u.asm' ERR_FAMILY_CODE: 0000c0 e012 ldi r17, MCU_STATE_ERROR 0000c1 9310 0060 sts MCU_STATE, r17 -0000c3 d2f9 rcall BEEP_LONG +0000c3 d30f rcall BEEP_LONG 0000c4 c001 rjmp PC+2 START_PROGRAM: -0000c5 d2f0 rcall BEEP_SHORT +0000c5 d306 rcall BEEP_SHORT 0000c6 e080 0000c7 e090 display_load 0 // @@ -1194,16 +1194,16 @@ main.asm(314): Including file 'mpy16u.asm' 0000cc 9120 006a lds r18, TEMP_F 0000ce 9320 0066 sts DIGITS+3, r18 -0000d0 d103 rcall TEMP_UPD ; обновление данных о температуре -0000d1 d2aa rcall DISPLAY_UPD_DIGITS -0000d2 d0b4 rcall TEMP_COMPARSION ; логика термостата +0000d0 d119 rcall TEMP_UPD ; обновление данных о температуре +0000d1 d2c0 rcall DISPLAY_UPD_DIGITS +0000d2 d0ca rcall TEMP_COMPARSION ; логика термостата 0000d3 e011 0000d4 bf19 outi r17, TIMSK, (1< // UART_WR_BYTE: -000131 9b5d sbis UCSRA, UDRE -000132 cffe rjmp UART_WR_BYTE -000133 b85c out UDR, r5 -000134 9508 ret +000147 9b5d sbis UCSRA, UDRE +000148 cffe rjmp UART_WR_BYTE +000149 b85c out UDR, r5 +00014a 9508 ret // // INIT_DEFAULT_PARAMS: -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 +00014b e001 ldi r16, DEFAULT_SETTING_TEMP_H +00014c 9300 006b sts SETTING_TEMP_H, r16 ; уставка HIGH +00014e 2e40 mov EEP_D_r, r16 +00014f e000 ldi r16, EEP_SETTING_TEMP_H +000150 2e30 mov EEP_A_r, r16 +000151 d036 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 +000152 e20c ldi r16, DEFAULT_SETTING_TEMP_L +000153 9300 006c sts SETTING_TEMP_L, r16 ; уставка LOW +000155 2e40 mov EEP_D_r, r16 +000156 e001 ldi r16, EEP_SETTING_TEMP_L +000157 2e30 mov EEP_A_r, r16 +000158 d02f 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 +000159 e005 ldi r16, DEFAULT_SETTING_HYST +00015a 9300 006d sts SETTING_HYST, r16 ; гистерезис +00015c 2e40 mov EEP_D_r, r16 +00015d e002 ldi r16, EEP_SETTING_HYST +00015e 2e30 mov EEP_A_r, r16 +00015f d028 rcall EEP_WR_BYTE -00014a e001 ldi r16, DEFAULT_SETTING_MODE -00014b 9300 006e sts SETTING_MODE, r16 ; режим -00014d 2e40 mov EEP_D_r, r16 -00014e e003 ldi r16, EEP_SETTING_MODE -00014f 2e30 mov EEP_A_r, r16 -000150 d021 rcall EEP_WR_BYTE +000160 e001 ldi r16, DEFAULT_SETTING_MODE +000161 9300 006e sts SETTING_MODE, r16 ; режим +000163 2e40 mov EEP_D_r, r16 +000164 e003 ldi r16, EEP_SETTING_MODE +000165 2e30 mov EEP_A_r, r16 +000166 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 +000167 e100 ldi r16, 0x10 +000168 2e40 mov EEP_D_r, r16 +000169 e004 ldi r16, EEP_FIRST_TIME_RUN +00016a 2e30 mov EEP_A_r, r16 +00016b d01c rcall EEP_WR_BYTE +00016c 9508 ret // // WRITE_PARAMS_TO_EEP: -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 +00016d 930f push r16 +00016e 9100 006b lds r16, SETTING_TEMP_H ; уставка HIGH +000170 2e40 mov EEP_D_r, r16 +000171 e000 ldi r16, EEP_SETTING_TEMP_H +000172 2e30 mov EEP_A_r, r16 +000173 d014 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 +000174 9100 006c lds r16, SETTING_TEMP_L ; уставка LOW +000176 2e40 mov EEP_D_r, r16 +000177 e001 ldi r16, EEP_SETTING_TEMP_L +000178 2e30 mov EEP_A_r, r16 +000179 d00e 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 +00017a 9100 006d lds r16, SETTING_HYST ; гистерезис +00017c 2e40 mov EEP_D_r, r16 +00017d e002 ldi r16, EEP_SETTING_HYST +00017e 2e30 mov EEP_A_r, r16 +00017f d008 rcall EEP_WR_BYTE -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// +000180 9100 006e lds r16, SETTING_MODE ; режим +000182 2e40 mov EEP_D_r, r16 +000183 e003 ldi r16, EEP_SETTING_MODE +000184 2e30 mov EEP_A_r, r16 +000185 d002 rcall EEP_WR_BYTE +000186 910f pop r16 +000187 9508 ret// // EEP_WR_BYTE: -000172 94f8 cli -000173 930f push r16 +000188 94f8 cli +000189 930f push r16 _EEP_WR_BYTE_LP: ; ждем завершения предыдущей записи -000174 99e1 sbic EECR, EEPE -000175 cffe rjmp _EEP_WR_BYTE_LP +00018a 99e1 sbic EECR, EEPE +00018b cffe rjmp _EEP_WR_BYTE_LP ; режим программирования - атомарный -000176 e000 ldi r16, (0< +000199 9ae0 sbi EECR, EERE +00019a b24d in EEP_D_r, EEDR +00019b 9478 sei +00019c 9508 ret// // TEMP_COMPARSION: -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 +00019d 930f push r16 +00019e 931f push r17 +00019f 932f push r18 +0001a0 933f push r19 +0001a1 934f push r20 +0001a2 935f push r21 +0001a3 937f push r23 .DEF temp_r_l = r16 .DEF temp_r_h = r17 @@ -1532,247 +1561,247 @@ main.asm(314): Including file 'mpy16u.asm' .DEF max_r_trhd_l = r13 .DEF max_r_trhd_h = r12 ; умножаем температуру на 10 -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 +0001a4 9100 0068 lds mc16uL, TEMP_L // r16 +0001a6 9110 0069 lds mc16uH, TEMP_H // r17 +0001a8 e02a ldi mp16uL, LOW(10) +0001a9 e030 ldi mp16uH, HIGH(10) +0001aa df5d rcall mpy16u +0001ab 2f02 mov temp_r_l, m16u0 ; L +0001ac 2f13 mov temp_r_h, m16u1 ; H ; добавляем дробную часть -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 +0001ad 9120 006a lds r18, TEMP_F +0001af 2733 clr r19 +0001b0 0f02 add temp_r_l, r18 +0001b1 1f13 adc temp_r_h, r19 ; определяем нижний и верхний пороги -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 +0001b2 9140 006c lds r20, SETTING_TEMP_L +0001b4 9150 006b lds r21, SETTING_TEMP_H +0001b6 9160 006d lds r22, SETTING_HYST +0001b8 934f push r20 +0001b9 935f push r21 +0001ba 2777 clr r23 +0001bb 1b46 sub r20, r22 +0001bc 0b57 sbc r21, r23 +0001bd 2eb4 mov min_r_trhd_l, r20 +0001be 2ea5 mov min_r_trhd_h, r21 +0001bf 915f pop r21 +0001c0 914f pop r20 +0001c1 2777 clr r23 +0001c2 0f46 add r20, r22 +0001c3 1f57 adc r21, r23 +0001c4 2ed4 mov max_r_trhd_l, r20 +0001c5 2ec5 mov max_r_trhd_h, r21 ; определяем знак температуры -0001b0 f00e brts _NEGATE_TEMP -0001b1 c004 rjmp _COMPARE +0001c6 f00e brts _NEGATE_TEMP +0001c7 c004 rjmp _COMPARE _NEGATE_TEMP: -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) +0001c8 9500 com temp_r_l +0001c9 9510 com temp_r_h +0001ca 5f0f subi temp_r_l, low(-1) +0001cb 4f1f sbci temp_r_h, high(-1) _COMPARE: ; проверяем нижний порог -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 +0001cc 16b0 cp min_r_trhd_l, temp_r_l +0001cd 06a1 cpc min_r_trhd_h, temp_r_h +0001ce f424 brge _MIN_THRESHOLD ; TEMP <= MIN ; проверяем верхний порог -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 +0001cf 150d cp temp_r_l, max_r_trhd_l +0001d0 051c cpc temp_r_h, max_r_trhd_h +0001d1 f44c brge _MAX_THRESHOLD ; TEMP >= TOP +0001d2 c00f rjmp _COMPARSION_EXIT _MIN_THRESHOLD: ; определяем режим работы -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 +0001d3 9140 006e lds r20, SETTING_MODE +0001d5 2344 tst r20 +0001d6 f411 brne PC+3 +0001d7 9890 relay_off +0001d8 c001 rjmp PC+2 +0001d9 9a90 relay_on +0001da c007 rjmp _COMPARSION_EXIT _MAX_THRESHOLD: -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 +0001db 9140 006e lds r20, SETTING_MODE +0001dd 2344 tst r20 +0001de f411 brne PC+3 +0001df 9a90 relay_on +0001e0 c001 rjmp PC+2 +0001e1 9890 relay_off _COMPARSION_EXIT: -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 +0001e2 917f pop r23 +0001e3 915f pop r21 +0001e4 914f pop r20 +0001e5 913f pop r19 +0001e6 912f pop r18 +0001e7 911f pop r17 +0001e8 910f pop r16 +0001e9 9508 ret // // TEMP_UPD: -0001d4 931f push r17 -0001d5 d061 rcall TEMP_CONV -0001d6 e152 -0001d7 e535 -0001d8 eb4d -0001d9 d1fe DELAY24 751000 -0001da d012 rcall TEMP_RD +0001ea 931f push r17 +0001eb d061 rcall TEMP_CONV +0001ec e152 +0001ed e535 +0001ee eb4d +0001ef d1fe DELAY24 751000 +0001f0 d012 rcall TEMP_RD ; обновляем данные в ячейках -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 +0001f1 9110 0068 lds r17, TEMP_L +0001f3 2f81 mov DISP_NUM_L, r17 +0001f4 9110 0069 lds r17, TEMP_H +0001f6 2f91 mov DISP_NUM_H, r17 +0001f7 911f pop r17 +0001f8 9508 ret // // RD_F_CODE: -0001e3 930f push r16 +0001f9 930f push r16 -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 +0001fa d149 rcall OW_PRESENCE +0001fb e303 ldi r16, DS18B20_CMD_READROM +0001fc 2e80 mov OW_CMD_r, r16 +0001fd d15b rcall OW_SEND_BYTE -0001e8 e6af ldi XL, LOW(DEVICE_FAMILY_CODE) -0001e9 e0b0 ldi XH, HIGH(DEVICE_FAMILY_CODE) -0001ea d177 rcall OW_RD_BYTE +0001fe e6af ldi XL, LOW(DEVICE_FAMILY_CODE) +0001ff e0b0 ldi XH, HIGH(DEVICE_FAMILY_CODE) +000200 d177 rcall OW_RD_BYTE -0001eb 910f pop r16 -0001ec 9508 ret// +000201 910f pop r16 +000202 9508 ret// // TEMP_RD: -0001ed 930f push r16 -0001ee 931f push r17 -0001ef 932f push r18 -0001f0 933f push r19 -0001f1 934f push r20 - -0001f2 d13b rcall OW_PRESENCE -0001f3 ff70 sbrs OWFR, OWPRF -0001f4 c03c rjmp _TEMP_RD_EXIT - -0001f5 ec0c ldi r16, DS18B20_CMD_SKIPROM -0001f6 2e80 mov OW_CMD_r, r16 -0001f7 d14b rcall OW_SEND_BYTE - -0001f8 eb0e ldi r16, DS18B20_CMD_RSCRATCHPAD -0001f9 2e80 mov OW_CMD_r, r16 -0001fa d148 rcall OW_SEND_BYTE - -0001fb e6a8 ldi XL, LOW(TEMP_L) -0001fc e0b0 ldi XH, HIGH(TEMP_L) -0001fd d164 rcall OW_RD_BYTE - -0001fe e6a9 ldi XL, LOW(TEMP_H) -0001ff e0b0 ldi XH, HIGH(TEMP_H) -000200 d161 rcall OW_RD_BYTE - -000201 9110 0068 lds r17, TEMP_L -000203 9120 0069 lds r18, TEMP_H - +000203 930f push r16 +000204 931f push r17 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) +000206 933f push r19 +000207 934f push r20 + +000208 d13b rcall OW_PRESENCE +000209 ff70 sbrs OWFR, OWPRF +00020a c03c rjmp _TEMP_RD_EXIT + +00020b ec0c ldi r16, DS18B20_CMD_SKIPROM +00020c 2e80 mov OW_CMD_r, r16 +00020d d14b rcall OW_SEND_BYTE + +00020e eb0e ldi r16, DS18B20_CMD_RSCRATCHPAD +00020f 2e80 mov OW_CMD_r, r16 +000210 d148 rcall OW_SEND_BYTE + +000211 e6a8 ldi XL, LOW(TEMP_L) +000212 e0b0 ldi XH, HIGH(TEMP_L) +000213 d164 rcall OW_RD_BYTE + +000214 e6a9 ldi XL, LOW(TEMP_H) +000215 e0b0 ldi XH, HIGH(TEMP_H) +000216 d161 rcall OW_RD_BYTE + +000217 9110 0068 lds r17, TEMP_L +000219 9120 0069 lds r18, TEMP_H + +00021b 932f push r18 +00021c 7f28 cbr r18, (1<<0) | (1<<1) | (1<<2) ; убираем ненужные биты на время (интересуют последних битов в TEMP_H) +00021d 3f28 cpi r18, 0xf8 ; проверяется является ли число минусовой +00021e f011 breq _TEMP_RD_TO_UNSIGNED ; если да то конвертируем в беззнаковое число +00021f 94e8 clt +000220 c007 rjmp _TEMP_RD_CONTINUE ; если нет то преобразуем значение АЦП в температуру (делим на 16) _TEMP_RD_TO_UNSIGNED: -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) +000221 912f pop r18 +000222 9468 set +000223 9510 com r17 +000224 9520 com r18 +000225 5f1f subi r17, low(-1) +000226 4f2f sbci r18, high(-1) ; ldi r19, 1 ; add r17, r19 ; ldi r19, 0 ; adc r18, r19 -000211 c001 rjmp PC+2 +000227 c001 rjmp PC+2 _TEMP_RD_CONTINUE: ; Температура = Число с АЦП / 16 (сдвиг вправо 4) -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 +000228 912f pop r18 +000229 9526 lsr r18 +00022a 9517 ror r17 +00022b 9526 lsr r18 +00022c 9517 ror r17 +00022d 9526 lsr r18 +00022e 9517 ror r17 +00022f 9526 lsr r18 +000230 9517 ror r17 _TEMP_RD_END: -00021b 9130 0068 lds r19, TEMP_L -00021d f40e brtc PC+2 -00021e 9531 neg r19 ; переводим в беззнаковое число если минус +000231 9130 0068 lds r19, TEMP_L +000233 f40e brtc PC+2 +000234 9531 neg r19 ; переводим в беззнаковое число если минус ; далее происходит такое для получения дробной части: ; ((n<<3) + (n<<1))>>4 или (n*10)/16 -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 +000235 2f43 mov r20, r19 +000236 703f andi r19, 0x0f +000237 2f43 mov r20, r19 +000238 0f33 lsl r19 +000239 0f33 lsl r19 +00023a 0f33 lsl r19 -000225 0f44 lsl r20 +00023b 0f44 lsl r20 -000226 0f34 add r19, r20 +00023c 0f34 add r19, r20 -000227 9536 lsr r19 -000228 9536 lsr r19 -000229 9536 lsr r19 -00022a 9536 lsr r19 +00023d 9536 lsr r19 +00023e 9536 lsr r19 +00023f 9536 lsr r19 +000240 9536 lsr r19 ; записываем данные -00022b 9310 0068 sts TEMP_L, r17 -00022d 9320 0069 sts TEMP_H, r18 -00022f 9330 006a sts TEMP_F, r19 +000241 9310 0068 sts TEMP_L, r17 +000243 9320 0069 sts TEMP_H, r18 +000245 9330 006a sts TEMP_F, r19 _TEMP_RD_EXIT: -000231 914f pop r20 -000232 913f pop r19 -000233 912f pop r18 -000234 911f pop r17 -000235 910f pop r16 -000236 9508 ret +000247 914f pop r20 +000248 913f pop r19 +000249 912f pop r18 +00024a 911f pop r17 +00024b 910f pop r16 +00024c 9508 ret ; TEMP_CONV: -000237 930f push r16 +00024d 930f push r16 -000238 d0f5 rcall OW_PRESENCE -000239 ff70 sbrs OWFR, OWPRF -00023a c006 rjmp _TEMP_CONV_EXIT +00024e d0f5 rcall OW_PRESENCE +00024f ff70 sbrs OWFR, OWPRF +000250 c006 rjmp _TEMP_CONV_EXIT -00023b ec0c ldi r16, DS18B20_CMD_SKIPROM -00023c 2e80 mov OW_CMD_r, r16 -00023d d105 rcall OW_SEND_BYTE +000251 ec0c ldi r16, DS18B20_CMD_SKIPROM +000252 2e80 mov OW_CMD_r, r16 +000253 d105 rcall OW_SEND_BYTE -00023e e404 ldi r16, DS18B20_CMD_CONVERTTEMP -00023f 2e80 mov OW_CMD_r, r16 -000240 d102 rcall OW_SEND_BYTE +000254 e404 ldi r16, DS18B20_CMD_CONVERTTEMP +000255 2e80 mov OW_CMD_r, r16 +000256 d102 rcall OW_SEND_BYTE _TEMP_CONV_EXIT: -000241 910f pop r16 -000242 9508 ret +000257 910f pop r16 +000258 9508 ret // // ; **** ОТПРАВКА БАЙТА В СДВИГОВЫЙ РЕГИСТР ************************* USI_TRANSMIT: -000243 930f push r16 -000244 920f push r0 -000245 b80f out USIDR, r0 ; Байт для отправки всегда находится в регистре r0. Помещаем данные в регистр USIDR. +000259 930f push r16 +00025a 920f push r0 +00025b b80f out USIDR, r0 ; Байт для отправки всегда находится в регистре r0. Помещаем данные в регистр USIDR. ; Enable USI Overflow Interrupt Flag (will be 0 if transfer is not compeleted) -000246 e400 ldi TEMP_REG_A, (1< USI Clock Source Select ; USICLK <--------------> USI Clock Strobe ; USITC <--------------> USI Toggle Clock (Enable clock generation) -000248 e10b ldi TEMP_REG_A, (1< // BUTTON_PROCESS: -000251 930f push r16 +000267 930f push r16 _SW_CHECK_ON_0: -000252 9bb4 sbis SW_PIN, SW_SET_PIN -000253 c001 rjmp _SW_SET_0 -000254 c01c rjmp _SW_CHECK_ON_1 +000268 9bb4 sbis SW_PIN, SW_SET_PIN +000269 c001 rjmp _SW_SET_0 +00026a c01c rjmp _SW_CHECK_ON_1 _SW_SET_0: -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 +00026b 9100 0071 lds r16, SW_DATA +00026d 2300 tst r16 +00026e f409 brne _SW_SET_FROM_0_TO_1 +00026f c017 rjmp _SW_CHECK_ON_1 _SW_SET_FROM_0_TO_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 +000270 2700 clr r16 +000271 9300 0071 sts SW_DATA, r16 +000273 d166 rcall DEBOUNCE_SW +000274 9463 inc REPROGRAM_STEP_r +000275 2d16 mov r17, REPROGRAM_STEP_r +000276 3014 cpi r17, 4 +000277 f414 brge _SAVE_SETTINGS +000278 d153 rcall BEEP_SHORT +000279 c00d rjmp _SW_CHECK_ON_1 _SAVE_SETTINGS: -000264 e010 -000265 bf19 outi r17, TIMSK, (0< +000293 910f pop r16 +000294 9508 ret// // REPROGRAM_SETTINGS: -00027f 930f push r16 -000280 931f push r17 -000281 932f push r18 -000282 933f push r19 -000283 934f push r20 +000295 930f push r16 +000296 931f push r17 +000297 932f push r18 +000298 933f push r19 +000299 934f push r20 -000284 2d06 mov r16, REPROGRAM_STEP_r -000285 2300 tst r16 -000286 f009 breq _INTO -000287 c004 rjmp _REPROGRAM_SETTINGS_LOOP +00029a 2d06 mov r16, REPROGRAM_STEP_r +00029b 2300 tst r16 +00029c f009 breq _INTO +00029d c004 rjmp _REPROGRAM_SETTINGS_LOOP _INTO: -000288 9890 relay_off -000289 9a96 sbi PORTD, LED_PGM_PIN -00028a d12b rcall BEEP_SHORT -00028b 9463 inc REPROGRAM_STEP_r +00029e 9890 relay_off +00029f 9a96 sbi PORTD, LED_PGM_PIN +0002a0 d12b rcall BEEP_SHORT +0002a1 9463 inc REPROGRAM_STEP_r _REPROGRAM_SETTINGS_LOOP: -00028c dfc4 rcall BUTTON_PROCESS +0002a2 dfc4 rcall BUTTON_PROCESS _CHECK_STEP: -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 +0002a3 3001 cpi r16, 1 +0002a4 f029 breq _STEP_1 +0002a5 3002 cpi r16, 2 +0002a6 f151 breq _STEP_2 +0002a7 3003 cpi r16, 3 +0002a8 f139 breq _S3_JMP +0002a9 c094 rjmp _REPROGRAM_SETTINGS_END // _STEP_1: ; установка и отображение гистерезиса -000294 d0e7 rcall DISPLAY_UPD_DIGITS +0002aa d0e7 rcall DISPLAY_UPD_DIGITS _S1_CHECK_PLUS: -000295 9bb2 sbis SW_PIN, SW_PLUS_PIN -000296 c004 rjmp _INCREASE_HYST -000297 c000 rjmp _S1_CHECK_MINUS +0002ab 9bb2 sbis SW_PIN, SW_PLUS_PIN +0002ac c004 rjmp _INCREASE_HYST +0002ad c000 rjmp _S1_CHECK_MINUS _S1_CHECK_MINUS: -000298 9bb3 sbis SW_PIN, SW_MINUS_PIN -000299 c00a rjmp _DECREASE_HYST -00029a c011 rjmp _SHOW_HYST +0002ae 9bb3 sbis SW_PIN, SW_MINUS_PIN +0002af c00a rjmp _DECREASE_HYST +0002b0 c011 rjmp _SHOW_HYST _INCREASE_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 +0002b1 d128 rcall DEBOUNCE_SW +0002b2 9110 006d lds r17, SETTING_HYST +0002b4 3c18 cpi r17, MAX_HYST +0002b5 f009 breq PC+2 +0002b6 9513 inc r17 +0002b7 9310 006d sts SETTING_HYST, r17 +0002b9 c008 rjmp _SHOW_HYST _DECREASE_HYST: -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 +0002ba d11f rcall DEBOUNCE_SW +0002bb 9110 006d lds r17, SETTING_HYST +0002bd 3011 cpi r17, MIN_HYST +0002be f009 breq PC+2 +0002bf 951a dec r17 +0002c0 9310 006d sts SETTING_HYST, r17 _SHOW_HYST: -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 +0002c2 94e8 clt +0002c3 930f push dd8u +0002c4 931f push dv8u +0002c5 9100 006d lds dd8u, SETTING_HYST +0002c7 e01a ldi dv8u, 10 +0002c8 de31 rcall div8u +0002c9 2f80 mov DISP_NUM_L, dres8u +0002ca 2799 clr DISP_NUM_H ; гистерезис 8 битный так что ноль пишем в старший байт +0002cb 92f0 0066 sts DIGITS+3, drem8u +0002cd 911f pop dv8u +0002ce 910f pop dd8u +0002cf c06e rjmp _REPROGRAM_SETTINGS_END // _S3_JMP: ; просто прыжок на _STEP_3 -0002ba c047 rjmp _STEP_3 +0002d0 c047 rjmp _STEP_3 // _STEP_2: -0002bb d0c0 rcall DISPLAY_UPD_DIGITS +0002d1 d0c0 rcall DISPLAY_UPD_DIGITS _S2_CHECK_PLUS: -0002bc 9bb2 sbis SW_PIN, SW_PLUS_PIN -0002bd c004 rjmp _INCREASE_TEMP -0002be c000 rjmp _S2_CHECK_MINUS +0002d2 9bb2 sbis SW_PIN, SW_PLUS_PIN +0002d3 c004 rjmp _INCREASE_TEMP +0002d4 c000 rjmp _S2_CHECK_MINUS _S2_CHECK_MINUS: -0002bf 9bb3 sbis SW_PIN, SW_MINUS_PIN -0002c0 c013 rjmp _DECREASE_TEMP -0002c1 c021 rjmp _SHOW_TEMP +0002d5 9bb3 sbis SW_PIN, SW_MINUS_PIN +0002d6 c013 rjmp _DECREASE_TEMP +0002d7 c021 rjmp _SHOW_TEMP _INCREASE_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 +0002d8 d101 rcall DEBOUNCE_SW +0002d9 9110 006c lds r17, SETTING_TEMP_L +0002db 9120 006b lds r18, SETTING_TEMP_H +0002dd 3b10 cpi r17, MAX_TEMP_L +0002de e034 ldi r19, MAX_TEMP_H +0002df 0723 cpc r18, r19 +0002e0 f031 breq PC+7 +0002e1 e03a ldi r19, 10 +0002e2 0f13 add r17, r19 +0002e3 2733 clr r19 +0002e4 1f23 adc r18, r19 +0002e5 9310 006c sts SETTING_TEMP_L, r17 +0002e7 9320 006b sts SETTING_TEMP_H, r18 +0002e9 c00f rjmp _SHOW_TEMP _DECREASE_TEMP: -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 +0002ea d0ef rcall DEBOUNCE_SW +0002eb 9110 006c lds r17, SETTING_TEMP_L +0002ed 9120 006b lds r18, SETTING_TEMP_H +0002ef 301c cpi r17, MIN_TEMP_L +0002f0 ef3e ldi r19, MIN_TEMP_H +0002f1 0723 cpc r18, r19 +0002f2 f011 breq PC+3 __DECREASE: -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 +0002f3 501a subi r17, 10 +0002f4 4020 sbci r18, 0 +0002f5 9310 006c sts SETTING_TEMP_L, r17 +0002f7 9320 006b sts SETTING_TEMP_H, r18 _SHOW_TEMP: -0002e3 930f push dd16uL -0002e4 931f push dd16uH -0002e5 932f push dv16uL -0002e6 933f push dv16uH +0002f9 930f push dd16uL +0002fa 931f push dd16uH +0002fb 932f push dv16uL +0002fc 933f push dv16uH -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 +0002fd 9100 006c lds dd16uL, SETTING_TEMP_L +0002ff 9110 006b lds dd16uH, SETTING_TEMP_H +000301 2f21 mov r18, dd16uH +000302 7820 andi r18, (1<<7) +000303 f411 brne _NEGATE_SET_TEMP +000304 94e8 clt +000305 c005 rjmp _DIVIDE_SET_TEMP _NEGATE_SET_TEMP: -0002f0 9468 set -0002f1 9500 -0002f2 9510 -0002f3 5f0f -0002f4 4f1f com16 dd16uL, dd16uH +000306 9468 set +000307 9500 +000308 9510 +000309 5f0f +00030a 4f1f com16 dd16uL, dd16uH _DIVIDE_SET_TEMP: -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 +00030b e02a ldi dv16uL, LOW(10) +00030c e030 ldi dv16uH, HIGH(10) +00030d ddd9 rcall div16u +00030e 2f80 mov DISP_NUM_L, dres16uL +00030f 2f91 mov DISP_NUM_H, dres16uH -0002fa e00a ldi r16, 10 -0002fb 9300 0066 sts DIGITS+3, r16 ; значок градуса +000310 e00a ldi r16, 10 +000311 9300 0066 sts DIGITS+3, r16 ; значок градуса -0002fd 913f pop dv16uH -0002fe 912f pop dv16uL -0002ff 911f pop dd16uH -000300 910f pop dd16uL -000301 c026 rjmp _REPROGRAM_SETTINGS_END +000313 913f pop dv16uH +000314 912f pop dv16uL +000315 911f pop dd16uH +000316 910f pop dd16uL +000317 c026 rjmp _REPROGRAM_SETTINGS_END // // _STEP_3: -000302 94e8 clt +000318 94e8 clt _S3_CHECK_PLUS: -000303 9bb2 sbis SW_PIN, SW_PLUS_PIN -000304 c004 rjmp _SET_HEAT_MODE -000305 c000 rjmp _S3_CHECK_MINUS +000319 9bb2 sbis SW_PIN, SW_PLUS_PIN +00031a c004 rjmp _SET_HEAT_MODE +00031b c000 rjmp _S3_CHECK_MINUS _S3_CHECK_MINUS: -000306 9bb3 sbis SW_PIN, SW_MINUS_PIN -000307 c006 rjmp _SET_COOLING_MODE -000308 c009 rjmp _SHOW_MODE +00031c 9bb3 sbis SW_PIN, SW_MINUS_PIN +00031d c006 rjmp _SET_COOLING_MODE +00031e c009 rjmp _SHOW_MODE _SET_HEAT_MODE: -000309 d0ba rcall DEBOUNCE_SW -00030a e011 ldi r17, HEAT_MODE -00030b 9310 006e sts SETTING_MODE, r17 -00030d c004 rjmp _SHOW_MODE +00031f d0ba rcall DEBOUNCE_SW +000320 e011 ldi r17, HEAT_MODE +000321 9310 006e sts SETTING_MODE, r17 +000323 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 +000324 d0b5 rcall DEBOUNCE_SW +000325 e010 ldi r17, COOLING_MODE +000326 9310 006e sts SETTING_MODE, r17 _SHOW_MODE: -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 +000328 2711 clr r17 +000329 2f81 mov DISP_NUM_L, r17 +00032a 2f91 mov DISP_NUM_H, r17 +00032b e01e ldi r17, 14 +00032c 9310 0063 sts DIGITS, r17 +00032e 9310 0064 sts DIGITS+1, r17 +000330 9310 0065 sts DIGITS+2, r17 +000332 9120 006e lds r18, SETTING_MODE +000334 2322 tst r18 +000335 f009 breq _SHOW_COOLING +000336 c004 rjmp _SHOW_HEATING _SHOW_COOLING: -000321 e01c ldi r17, 12 -000322 9310 0066 sts DIGITS+3, r17 -000324 c003 rjmp _REPROGRAM_SETTINGS_END +000337 e01c ldi r17, 12 +000338 9310 0066 sts DIGITS+3, r17 +00033a c003 rjmp _REPROGRAM_SETTINGS_END _SHOW_HEATING: -000325 e01d ldi r17, 13 -000326 9310 0066 sts DIGITS+3, r17 +00033b e01d ldi r17, 13 +00033c 9310 0066 sts DIGITS+3, r17 // _REPROGRAM_SETTINGS_END: -000328 914f pop r20 -000329 913f pop r19 -00032a 912f pop r18 -00032b 911f pop r17 -00032c 910f pop r16 -00032d 9508 ret +00033e 914f pop r20 +00033f 913f pop r19 +000340 912f pop r18 +000341 911f pop r17 +000342 910f pop r16 +000343 9508 ret // // // ; **** ОПРОС ПРИСУТСТВИЯ УСТРОЙСТВА ****************************** OW_PRESENCE: -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 +000344 94f8 cli +000345 9ab9 ow_pull +000346 e033 +000347 eb4e +000348 d0a1 DELAY16 480 +000349 98b9 ow_release +00034a e030 +00034b e84a +00034c d09d DELAY16 70 +00034d d005 rcall OW_CHECK_PRESENCE +00034e e033 +00034f e342 +000350 d099 DELAY16 410 +000351 9478 sei +000352 9508 ret // // @@ -2075,83 +2104,83 @@ main.asm(314): Including file 'mpy16u.asm' ; Если подчиненное устройство притянет шину, то устанавливаем флаг OWPRF в единицу в регистре флагов ; OW_CHECK_PRESENCE: -00033d 9bb1 sbis OW_PIN, OW_LINE -00033e 6071 sbr OWFR, (1< // OW_SEND_BYTE: -000343 94f8 cli -000344 930f push r16 -000345 931f push r17 -000346 2d08 mov r16, OW_CMD_r -000347 e018 ldi r17, 8 +000359 94f8 cli +00035a 930f push r16 +00035b 931f push r17 +00035c 2d08 mov r16, OW_CMD_r +00035d e018 ldi r17, 8 _OW_SEND_BYTE_LOOP: -000348 9506 lsr r16 -000349 f408 brcc _OW_SEND_0 -00034a f048 brcs _OW_SEND_1 +00035e 9506 lsr r16 +00035f f408 brcc _OW_SEND_0 +000360 f048 brcs _OW_SEND_1 _OW_SEND_0: -00034b 9ab9 ow_pull -00034c e030 -00034d e746 -00034e d085 DELAY16 60 -00034f 98b9 ow_release -000350 e030 -000351 e142 -000352 d081 DELAY16 10 -000353 c008 rjmp _OW_SEND_BYTE_END +000361 9ab9 ow_pull +000362 e030 +000363 e746 +000364 d085 DELAY16 60 +000365 98b9 ow_release +000366 e030 +000367 e142 +000368 d081 DELAY16 10 +000369 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 +00036a 9ab9 ow_pull +00036b e030 +00036c e04a +00036d d07c DELAY16 6 +00036e 98b9 ow_release +00036f e030 +000370 e74e +000371 d078 DELAY16 64 _OW_SEND_BYTE_END: -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 +000372 951a dec r17 +000373 f751 brne _OW_SEND_BYTE_LOOP +000374 911f pop r17 +000375 910f pop r16 +000376 9478 sei +000377 9508 ret // // OW_RD_BYTE: -000362 94f8 cli -000363 930f push r16 -000364 931f push r17 -000365 2700 clr r16 -000366 e018 ldi r17, 8 +000378 94f8 cli +000379 930f push r16 +00037a 931f push r17 +00037b 2700 clr r16 +00037c e018 ldi r17, 8 _OW_RD_BYTE_LP: -000367 9506 lsr r16 -000368 9ab9 ow_pull -000369 e030 -00036a e04a -00036b d068 DELAY16 6 -00036c 98b9 ow_release -00036d e030 -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 +00037d 9506 lsr r16 +00037e 9ab9 ow_pull +00037f e030 +000380 e04a +000381 d068 DELAY16 6 +000382 98b9 ow_release +000383 e030 +000384 e140 +000385 d064 DELAY16 9 +000386 99b1 sbic OW_PIN, OW_LINE +000387 6800 sbr r16, (1<<7) +000388 e030 +000389 e64c +00038a d05f DELAY16 55 +00038b 951a dec r17 +00038c f781 brne _OW_RD_BYTE_LP +00038d 930c st X, r16 +00038e 911f pop r17 +00038f 910f pop r16 +000390 9478 sei +000391 9508 ret // // @@ -2160,165 +2189,165 @@ main.asm(314): Including file 'mpy16u.asm' ; Описание: Перемещает цифры числа в соответствующие ячейки памяти в SRAM ; путем деления этого числа несколько раз DISPLAY_UPD_DIGITS: -00037c 930f push r16 -00037d 935f push r21 -00037e e053 ldi r21, 3 +000392 930f push r16 +000393 935f push r21 +000394 e053 ldi r21, 3 ; инициализация указателя (за каждый проход цикла будет инкрементироваться) -00037f e6a3 ldi XL, LOW(DIGITS) -000380 e0b0 ldi XH, HIGH(DIGITS) +000395 e6a3 ldi XL, LOW(DIGITS) +000396 e0b0 ldi XH, HIGH(DIGITS) .equ dividend = SRAM_TEMP_1 ; число которе будем делить .equ divisor = 10 ; на что делим ; загружаем число которое хотим поделить в адрес SRAM делимого -000381 9380 0061 sts dividend, DISP_NUM_L -000383 9390 0062 sts dividend+1, DISP_NUM_H +000397 9380 0061 sts dividend, DISP_NUM_L +000399 9390 0062 sts dividend+1, DISP_NUM_H ; четыре раза производим деление для получения остатков DIV_LOOP: ; заполняем нужные регистры -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) +00039b 9100 0061 lds dd16uL, dividend +00039d 9110 0062 lds dd16uH, dividend+1 +00039f e02a ldi dv16uL, LOW(divisor) +0003a0 e030 ldi dv16uH, HIGH(divisor) -00038b dd5b rcall div16u ; делим +0003a1 dd45 rcall div16u ; делим -00038c 92ed st X+, drem16uL ; сохраняем остаток в ячейку по указателю и увеличиваем его +0003a2 92ed st X+, drem16uL ; сохраняем остаток в ячейку по указателю и увеличиваем его ; обновляем делимое -00038d 9300 0061 sts dividend, dres16uL -00038f 9310 0062 sts dividend+1, dres16uH +0003a3 9300 0061 sts dividend, dres16uL +0003a5 9310 0062 sts dividend+1, dres16uH -000391 955a dec r21 ; декрементируем счетчик цикла -000392 f791 brne DIV_LOOP ; делим еще раз если не 0 -000393 915f pop r21 -000394 910f pop r16 -000395 9508 ret +0003a7 955a dec r21 ; декрементируем счетчик цикла +0003a8 f791 brne DIV_LOOP ; делим еще раз если не 0 +0003a9 915f pop r21 +0003aa 910f pop r16 +0003ab 9508 ret // - // + // ; **** ЗАГРУЖАЕТ НУЖНЫЙ АДРЕС СИМВОЛА В R0 *********************** DISPLAY_DECODER: -000396 930f push r16 -000397 931f push r17 +0003ac 930f push r16 +0003ad 931f push r17 -000398 ebea ldi ZL, LOW(2*DISPLAY_SYMBOLS) -000399 e0f7 ldi ZH, HIGH(2*DISPLAY_SYMBOLS) +0003ae eee6 ldi ZL, LOW(2*DISPLAY_SYMBOLS) +0003af e0f7 ldi ZH, HIGH(2*DISPLAY_SYMBOLS) -00039a 2711 clr TEMP_REG_B -00039b 0fe0 add ZL, TEMP_REG_A -00039c 1ff1 adc ZH, TEMP_REG_B +0003b0 2711 clr TEMP_REG_B +0003b1 0fe0 add ZL, TEMP_REG_A +0003b2 1ff1 adc ZH, TEMP_REG_B -00039d 9004 lpm r0, Z +0003b3 9004 lpm r0, Z -00039e 9100 0067 lds r16, CURRENT_DIGIT -0003a0 3002 cpi r16, 2 -0003a1 f009 breq _DOT_ON -0003a2 c010 rjmp _DISPLAY_DECODER_EXIT +0003b4 9100 0067 lds r16, CURRENT_DIGIT +0003b6 3002 cpi r16, 2 +0003b7 f009 breq _DOT_ON +0003b8 c010 rjmp _DISPLAY_DECODER_EXIT _DOT_ON: -0003a3 2d00 mov r16, r0 -0003a4 770f cbr r16, (1<<7) -0003a5 2e00 mov r0, r16 +0003b9 2d00 mov r16, r0 +0003ba 770f cbr r16, (1<<7) +0003bb 2e00 mov r0, r16 -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 +0003bc 2d06 mov r16, REPROGRAM_STEP_r +0003bd 3002 cpi r16, 2 +0003be f42c brge _DOT_OFF +0003bf 9100 0060 lds r16, MCU_STATE +0003c1 3002 cpi r16, MCU_STATE_ERROR +0003c2 f029 breq _ERR_DOT_OFF +0003c3 c005 rjmp _DISPLAY_DECODER_EXIT _DOT_OFF: -0003ae 2d00 mov r16, r0 -0003af 6800 sbr r16, (1<<7) -0003b0 2e00 mov r0, r16 -0003b1 c001 rjmp _DISPLAY_DECODER_EXIT +0003c4 2d00 mov r16, r0 +0003c5 6800 sbr r16, (1<<7) +0003c6 2e00 mov r0, r16 +0003c7 c001 rjmp _DISPLAY_DECODER_EXIT _ERR_DOT_OFF: -0003b2 cffb rjmp _DOT_OFF +0003c8 cffb rjmp _DOT_OFF _DISPLAY_DECODER_EXIT: -0003b3 911f pop r17 -0003b4 910f pop r16 -0003b5 9508 ret +0003c9 911f pop r17 +0003ca 910f pop r16 +0003cb 9508 ret // // BEEP_SHORT: -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 +0003cc 9ac5 sbi BUZZER_PORT, BUZZER_PIN +0003cd e053 +0003ce ea39 +0003cf e74d +0003d0 d01d DELAY24 150000 +0003d1 98c5 cbi BUZZER_PORT, BUZZER_PIN +0003d2 9508 ret // // BEEP_LONG: -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 +0003d3 9ac5 sbi BUZZER_PORT, BUZZER_PIN +0003d4 e05c +0003d5 e334 +0003d6 ef4d +0003d7 d016 DELAY24 500000 +0003d8 98c5 cbi BUZZER_PORT, BUZZER_PIN +0003d9 9508 ret // // DEBOUNCE_SW: -0003c4 930f push r16 -0003c5 931f push r17 -0003c6 932f push r18 +0003da 930f push r16 +0003db 931f push r17 +0003dc 932f push r18 -0003c7 e02a ldi r18, 10 +0003dd e02a ldi r18, 10 _loop_2: -0003c8 ef1f ldi r17, 255 +0003de ef1f ldi r17, 255 _loop_0: -0003c9 ef0f ldi r16, 255 +0003df ef0f ldi r16, 255 _dec_0: -0003ca 950a dec r16 -0003cb f7f1 brne _dec_0 +0003e0 950a dec r16 +0003e1 f7f1 brne _dec_0 _loop_1: -0003cc 951a dec r17 -0003cd f7d9 brne _loop_0 +0003e2 951a dec r17 +0003e3 f7d9 brne _loop_0 _loop_3: -0003ce 952a dec r18 -0003cf f7c1 brne _loop_2 +0003e4 952a dec r18 +0003e5 f7c1 brne _loop_2 -0003d0 912f pop r18 -0003d1 911f pop r17 -0003d2 910f pop r16 -0003d3 9508 ret// +0003e6 912f pop r18 +0003e7 911f pop r17 +0003e8 910f pop r16 +0003e9 9508 ret// // DELAY_LOOP_16: -0003d4 5041 subi DELAY_8_r, 1 -0003d5 4030 sbci DELAY_16_r, 0 -0003d6 f7e8 brcc DELAY_LOOP_16 -0003d7 9508 ret +0003ea 5041 subi DELAY_8_r, 1 +0003eb 4030 sbci DELAY_16_r, 0 +0003ec f7e8 brcc DELAY_LOOP_16 +0003ed 9508 ret // // DELAY_LOOP_24: -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 +0003ee 5041 subi DELAY_8_r, 1 +0003ef 4030 sbci DELAY_16_r, 0 +0003f0 4050 sbci DELAY_24_r, 0 +0003f1 f7e0 brcc DELAY_LOOP_24 +0003f2 9508 ret // // DISPLAY_SYMBOLS: ; HGFEDCBA HGFEDCBA -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 +0003f3 f9c0 .DB 0b11000000, 0b11111001 ; 0, 1 +0003f4 b0a4 .DB 0b10100100, 0b10110000 ; 2, 3 +0003f5 9299 .DB 0b10011001, 0b10010010 ; 4, 5 +0003f6 f882 .DB 0b10000010, 0b11111000 ; 6, 7 +0003f7 9080 .DB 0b10000000, 0b10010000 ; 8, 9 +0003f8 bf9c .DB 0b10011100, 0b10111111 ; °, - +0003f9 89c6 .DB 0b11000110, 0b10001001 ; C, H // // @@ -2387,8 +2416,8 @@ 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: 222 r17: 121 r18: 53 r19: 59 r20: 53 +r5 : 12 r6 : 7 r7 : 0 r8 : 6 r9 : 0 r10: 2 r11: 2 r12: 2 +r13: 2 r14: 5 r15: 11 r16: 232 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%) @@ -2402,10 +2431,10 @@ 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 : 23 -cpse : 0 dec : 11 eor : 0 icall : 0 ijmp : 0 in : 5 -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 +cpse : 0 dec : 11 eor : 0 icall : 0 ijmp : 0 in : 6 +inc : 4 ld : 0 ldd : 0 ldi : 118 lds : 51 lpm : 2 +lsl : 4 lsr : 11 mov : 63 movw : 0 neg : 1 nop : 0 +or : 1 ori : 0 out : 26 pop : 56 push : 55 rcall : 88 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 @@ -2417,7 +2446,7 @@ Instructions used: 56 out of 105 (53.3%) "ATtiny2313A" memory use summary [bytes]: Segment Begin End Code Data Used Size Use% --------------------------------------------------------------- -[.cseg] 0x000000 0x0007c8 1958 14 1972 2048 96.3% +[.cseg] 0x000000 0x0007f4 2002 14 2016 2048 98.4% [.dseg] 0x000060 0x000072 0 18 18 128 14.1% [.eseg] 0x000030 0x000058 0 40 40 128 31.3% diff --git a/firmware/dist/default/production/firmware.production.map b/firmware/dist/default/production/firmware.production.map index bbe76bd..28c4989 100644 --- a/firmware/dist/default/production/firmware.production.map +++ b/firmware/dist/default/production/firmware.production.map @@ -1,5 +1,5 @@ -AVRASM ver. 2.2.7 main.asm Sat Jul 01 18:14:26 2023 +AVRASM ver. 2.2.7 main.asm Sat Jul 01 19:34:07 2023 EQU SIGNATURE_000 0000001e @@ -571,31 +571,31 @@ 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 DISPLAY_DECODER 000003ac +CSEG USI_TRANSMIT 00000259 CSEG _indicate_3 00000053 CSEG _indicate_4 0000005d CSEG _indicate_exit 00000067 CSEG MCU_INIT 00000074 -CSEG EEP_RD_BYTE 0000017f +CSEG EEP_RD_BYTE 00000195 CSEG _INIT_PARAMS 0000009a CSEG _FIRST_TIME_RUN 00000098 -CSEG INIT_DEFAULT_PARAMS 00000135 +CSEG INIT_DEFAULT_PARAMS 0000014b CSEG _CONTINUE_INIT 000000ae -CSEG RD_F_CODE 000001e3 +CSEG RD_F_CODE 000001f9 CSEG ERR_FAMILY_CODE 000000c0 CSEG START_PROGRAM 000000c5 -CSEG BEEP_LONG 000003bd -CSEG BEEP_SHORT 000003b6 +CSEG BEEP_LONG 000003d3 +CSEG BEEP_SHORT 000003cc 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_UPD 000001ea +CSEG DISPLAY_UPD_DIGITS 00000392 +CSEG TEMP_COMPARSION 0000019d CSEG TEMP_SEND_UART 00000117 CSEG _STATE_ERROR 000000d9 -CSEG REPROGRAM_SETTINGS 0000027f +CSEG REPROGRAM_SETTINGS 00000295 DEF drem16uL r14 DEF drem16uH r15 DEF dres16uL r16 @@ -630,92 +630,92 @@ DEF mcnt16u r22 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 +CSEG UART_WR_BYTE 00000147 +CSEG _TEMP_SEND_UART_L 00000141 +CSEG EEP_WR_BYTE 00000188 +CSEG WRITE_PARAMS_TO_EEP 0000016d +CSEG _EEP_WR_BYTE_LP 0000018a +CSEG _EEP_RD_BYTE_LP 00000196 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 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 +CSEG _NEGATE_TEMP 000001c8 +CSEG _COMPARE 000001cc +CSEG _MIN_THRESHOLD 000001d3 +CSEG _MAX_THRESHOLD 000001db +CSEG _COMPARSION_EXIT 000001e2 +CSEG TEMP_CONV 0000024d +CSEG DELAY_LOOP_24 000003ee +CSEG TEMP_RD 00000203 +CSEG OW_PRESENCE 00000344 +CSEG OW_SEND_BYTE 00000359 +CSEG OW_RD_BYTE 00000378 +CSEG _TEMP_RD_EXIT 00000247 +CSEG _TEMP_RD_TO_UNSIGNED 00000221 +CSEG _TEMP_RD_CONTINUE 00000228 +CSEG _TEMP_RD_END 00000231 +CSEG _TEMP_CONV_EXIT 00000257 +CSEG _USI_TRANSMIT_LOOP 0000025f +CSEG BUTTON_PROCESS 00000267 +CSEG _SW_CHECK_ON_0 00000268 +CSEG _SW_SET_0 0000026b +CSEG _SW_CHECK_ON_1 00000287 +CSEG _SW_SET_FROM_0_TO_1 00000270 +CSEG DEBOUNCE_SW 000003da +CSEG _SAVE_SETTINGS 0000027a +CSEG _SW_SET_1 0000028a +CSEG _BUTTON_PROCESS_END 00000293 +CSEG _SW_SET_FROM_1_TO_0 0000028f +CSEG _INTO 0000029e +CSEG _REPROGRAM_SETTINGS_LOOP 000002a2 +CSEG _CHECK_STEP 000002a3 +CSEG _STEP_1 000002aa +CSEG _STEP_2 000002d1 +CSEG _S3_JMP 000002d0 +CSEG _REPROGRAM_SETTINGS_END 0000033e +CSEG _S1_CHECK_PLUS 000002ab +CSEG _INCREASE_HYST 000002b1 +CSEG _S1_CHECK_MINUS 000002ae +CSEG _DECREASE_HYST 000002ba +CSEG _SHOW_HYST 000002c2 +CSEG _STEP_3 00000318 +CSEG _S2_CHECK_PLUS 000002d2 +CSEG _INCREASE_TEMP 000002d8 +CSEG _S2_CHECK_MINUS 000002d5 +CSEG _DECREASE_TEMP 000002ea +CSEG _SHOW_TEMP 000002f9 +CSEG __DECREASE 000002f3 +CSEG _NEGATE_SET_TEMP 00000306 +CSEG _DIVIDE_SET_TEMP 0000030b +CSEG _S3_CHECK_PLUS 00000319 +CSEG _SET_HEAT_MODE 0000031f +CSEG _S3_CHECK_MINUS 0000031c +CSEG _SET_COOLING_MODE 00000324 +CSEG _SHOW_MODE 00000328 +CSEG _SHOW_COOLING 00000337 +CSEG _SHOW_HEATING 0000033b +CSEG DELAY_LOOP_16 000003ea +CSEG OW_CHECK_PRESENCE 00000353 +CSEG _EXIT 00000358 +CSEG _OW_SEND_BYTE_LOOP 0000035e +CSEG _OW_SEND_0 00000361 +CSEG _OW_SEND_1 0000036a +CSEG _OW_SEND_BYTE_END 00000372 +CSEG _OW_RD_BYTE_LP 0000037d EQU dividend 00000061 EQU divisor 0000000a -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 +CSEG DIV_LOOP 0000039b +CSEG DISPLAY_SYMBOLS 000003f3 +CSEG _DOT_ON 000003b9 +CSEG _DISPLAY_DECODER_EXIT 000003c9 +CSEG _DOT_OFF 000003c4 +CSEG _ERR_DOT_OFF 000003c8 +CSEG _loop_2 000003de +CSEG _loop_0 000003df +CSEG _dec_0 000003e0 +CSEG _loop_1 000003e2 +CSEG _loop_3 000003e4 ESEG INFO 00000030 diff --git a/firmware/dist/default/production/firmware.production.obj b/firmware/dist/default/production/firmware.production.obj index 183b873..03864a1 100644 Binary files a/firmware/dist/default/production/firmware.production.obj and b/firmware/dist/default/production/firmware.production.obj differ diff --git a/firmware/dist/default/production/firmware.production.tmp b/firmware/dist/default/production/firmware.production.tmp index cb76b5b..87989d5 100644 --- a/firmware/dist/default/production/firmware.production.tmp +++ b/firmware/dist/default/production/firmware.production.tmp @@ -48,31 +48,31 @@ <_CLR_CURRENT_DIGIT>main.asm101 <_indicate_1>main.asm105 <_indicate_2>main.asm125 - main.asm1131 - main.asm720 + main.asm1160 + main.asm749 <_indicate_3>main.asm143 <_indicate_4>main.asm155 <_indicate_exit>main.asm167 main.asm189 - main.asm455 + main.asm484 <_INIT_PARAMS>main.asm227 <_FIRST_TIME_RUN>main.asm224 - main.asm363 + main.asm392 <_CONTINUE_INIT>main.asm248 - main.asm586 + main.asm615 main.asm269 main.asm274 - main.asm1184 - main.asm1176 + main.asm1213 + main.asm1205 main.asm281 <_STATE_DEFAULT>main.asm283 <_STATE_PROGRAM>main.asm295 - main.asm570 - main.asm1090 - main.asm472 + main.asm599 + main.asm1119 + main.asm501 main.asm317 <_STATE_ERROR>main.asm299 - main.asm805 + main.asm834 div16u.asm32 div16u.asm36 div16u.asm42 @@ -84,86 +84,86 @@ mpy16u.asm31 mpy16u.asm37 mpy16u.asm40 - 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 + main.asm384 + <_TEMP_SEND_UART_L>main.asm373 + main.asm459 + main.asm430 + <_EEP_WR_BYTE_LP>main.asm462 + <_EEP_RD_BYTE_LP>main.asm486 + <_NEGATE_TEMP>main.asm555 + <_COMPARE>main.asm561 + <_MIN_THRESHOLD>main.asm571 + <_MAX_THRESHOLD>main.asm580 + <_COMPARSION_EXIT>main.asm587 + main.asm727 + main.asm1255 + main.asm631 + main.asm1032 + main.asm1059 + main.asm1090 + <_TEMP_RD_EXIT>main.asm719 + <_TEMP_RD_TO_UNSIGNED>main.asm668 + <_TEMP_RD_CONTINUE>main.asm681 + <_TEMP_RD_END>main.asm691 + <_TEMP_CONV_EXIT>main.asm742 + <_USI_TRANSMIT_LOOP>main.asm768 + main.asm783 + <_SW_CHECK_ON_0>main.asm785 + <_SW_SET_0>main.asm789 + <_SW_CHECK_ON_1>main.asm816 + <_SW_SET_FROM_0_TO_1>main.asm794 + main.asm1221 + <_SAVE_SETTINGS>main.asm804 + <_SW_SET_1>main.asm820 + <_BUTTON_PROCESS_END>main.asm829 + <_SW_SET_FROM_1_TO_0>main.asm825 + <_INTO>main.asm845 + <_REPROGRAM_SETTINGS_LOOP>main.asm850 + <_CHECK_STEP>main.asm852 + <_STEP_1>main.asm862 + <_STEP_2>main.asm906 + <_S3_JMP>main.asm902 + <_REPROGRAM_SETTINGS_END>main.asm1020 + <_S1_CHECK_PLUS>main.asm864 + <_INCREASE_HYST>main.asm872 + <_S1_CHECK_MINUS>main.asm868 + <_DECREASE_HYST>main.asm880 + <_SHOW_HYST>main.asm887 + <_STEP_3>main.asm979 + <_S2_CHECK_PLUS>main.asm908 + <_INCREASE_TEMP>main.asm916 + <_S2_CHECK_MINUS>main.asm912 + <_DECREASE_TEMP>main.asm931 + <_SHOW_TEMP>main.asm944 + <__DECREASE>main.asm939 + <_NEGATE_SET_TEMP>main.asm957 + <_DIVIDE_SET_TEMP>main.asm961 + <_S3_CHECK_PLUS>main.asm981 + <_SET_HEAT_MODE>main.asm989 + <_S3_CHECK_MINUS>main.asm985 + <_SET_COOLING_MODE>main.asm994 + <_SHOW_MODE>main.asm998 + <_SHOW_COOLING>main.asm1011 + <_SHOW_HEATING>main.asm1015 + main.asm1247 + main.asm1048 + <_EXIT>main.asm1054 + <_OW_SEND_BYTE_LOOP>main.asm1065 + <_OW_SEND_0>main.asm1069 + <_OW_SEND_1>main.asm1075 + <_OW_SEND_BYTE_END>main.asm1080 + <_OW_RD_BYTE_LP>main.asm1096 + main.asm1136 + main.asm1264 + <_DOT_ON>main.asm1177 + <_DISPLAY_DECODER_EXIT>main.asm1198 + <_DOT_OFF>main.asm1189 + <_ERR_DOT_OFF>main.asm1195 + <_loop_2>main.asm1227 + <_loop_0>main.asm1229 + <_dec_0>main.asm1231 + <_loop_1>main.asm1234 + <_loop_3>main.asm1237 + main.asm1282 diff --git a/firmware/main.asm b/firmware/main.asm index 977b608..1cae023 100644 --- a/firmware/main.asm +++ b/firmware/main.asm @@ -334,13 +334,42 @@ TEMP_SEND_UART: mov r5, r16 rcall UART_WR_BYTE + ; гистерезис + lds r16, SETTING_HYST + mov r5, r16 + rcall UART_WR_BYTE + + ; уставка HIGH + lds r16, SETTING_TEMP_H + mov r5, r16 + rcall UART_WR_BYTE + + ; уставка LOW + lds r16, SETTING_TEMP_L + mov r5, r16 + rcall UART_WR_BYTE + + ; режим работы + lds r16, SETTING_MODE + mov r5, r16 + rcall UART_WR_BYTE + + ; состояние МК + lds r16, MCU_STATE + mov r5, r16 + rcall UART_WR_BYTE + + ; статусный регистр МК + in r5, SREG + rcall UART_WR_BYTE + ldi r16, 0x04 ; EOT (End Of Transmission) mov r5, r16 rcall UART_WR_BYTE clr r16 mov r5, r16 - ldi r17, 12 + ldi r17, 6 _TEMP_SEND_UART_L: rcall UART_WR_BYTE dec r17 @@ -1126,7 +1155,7 @@ DIV_LOOP: ret // - // +// ; **** ЗАГРУЖАЕТ НУЖНЫЙ АДРЕС СИМВОЛА В R0 *********************** DISPLAY_DECODER: push r16 diff --git a/software/index.html b/software/index.html new file mode 100644 index 0000000..5f21a35 --- /dev/null +++ b/software/index.html @@ -0,0 +1,183 @@ + + + + + + Thermostat - Terminal View + + + +
+

Terminal View

+

+ Github URL: + + sergeyyarkov/attiny2313a_thermostat + +

+
+ + +
+
+

Data

+

+ Temperature: --°C
+ Relay Status: Off
+

+
+

Parameters

+

+ Hysteresis: --°C
+ Temperature: --°C
+ Mode: --
+ Min: --°C
+ Max: --°C +

+
+
+ + +