From f4112a7d6493c163cb8893ee957d8d11a955f516 Mon Sep 17 00:00:00 2001 From: sergeyyarkov Date: Fri, 30 Jun 2023 17:03:16 +0300 Subject: [PATCH] save setting to eeprom --- .../attiny2313a_thermostat.X.production.hex | 204 +- .../attiny2313a_thermostat.X.production.lss | 1642 +++++++++-------- .../attiny2313a_thermostat.X.production.map | 228 +-- .../attiny2313a_thermostat.X.production.obj | Bin 7858 -> 8767 bytes .../attiny2313a_thermostat.X.production.tmp | 201 +- 5 files changed, 1229 insertions(+), 1046 deletions(-) diff --git a/dist/default/production/attiny2313a_thermostat.X.production.hex b/dist/default/production/attiny2313a_thermostat.X.production.hex index 415a9d1..fcda695 100644 --- a/dist/default/production/attiny2313a_thermostat.X.production.hex +++ b/dist/default/production/attiny2313a_thermostat.X.production.hex @@ -7,106 +7,118 @@ :10003A002F933F934F935F935FB74091670045308B :10004A000CF403C0442740936700403081F493982E :10005A00949895980EF002C00BE002C000916500DA -:10006A00002311F0929A01C09298DBD29BD14130C1 +:10006A00002311F0929A01C0929850D305D24130E0 :10007A0081F4929894989598009164003091650063 -:10008A00032B11F0939A01C0939800916400C9D28E -:10009A0089D1423059F4929893989598949A0091FC -:1000AA006300BFD2002D0F77002E7CD1433041F47C -:1000BA00929893989498959A00916600B2D272D1C8 +:10008A00032B11F0939A01C09398009164003ED318 +:10009A00F3D1423059F4929893989598949A009192 +:1000AA00630034D3002D0F77002EE6D1433041F49C +:1000BA00929893989498959A0091660027D3DCD1E8 :1000CA004395409367005FBF5F914F913F912F9196 :1000DA001F910F9118950FED0DBF0FE701BB01EEB0 :1000EA0007BB0CE108BB02E000BF05E003BF03E267 :1000FA0006BF00E20BBF0CE100BD03E309B900E053 :10010A0002B908E00AB906E003B91124109267009F -:10011A0000E0009360000CE200936C0001E00093A1 -:10012A006B0005E000936D0001E000936E0000276C -:10013A00009368000093690000EF00936A000FEFD4 -:10014A00009371006624CED000916F00083209F442 -:10015A0005C012E01093600076D201C06DD280E033 -:10016A0090E00091600043D2003051F496982091BB -:10017A006A0020936600A7D059D011E019BF38D081 -:10018A00013011F4969848D1023059F7969AE9CF7E -:10019A00EE24FF1841E1001F111F4A9509F4089542 -:1001AA00EE1CFF1CE21AF30A20F4E20EF31E8894F6 -:1001BA00F2CF0894F0CFFF1829E0001F2A9509F41E -:1001CA000895FF1CF11A18F4F10E8894F6CF0894DA -:1001DA00F4CF5527442760E13695279510F4400F50 -:1001EA00511F57954795379527956A95B9F70895F9 -:1001FA000F931F9300916800502E14D000916A004B -:10020A00502E10D000B30170502E0CD004E0502EA6 -:10021A0009D00027502E1CE005D01A95E9F71F9146 -:10022A000F9108955D9BFECF5CB808950F931F93BD -:10023A002F933F934F935F937F93009168001091A0 -:10024A0069002AE030E0C5DF022F132F20916A00EF -:10025A003327020F131F40916C0050916B0060917D -:10026A006D004F935F937727461B570BB42EA52E2D -:10027A005F914F917727460F571FD42EC52E0EF048 -:10028A0004C0009510950F5F1F4FB016A10624F405 -:10029A000D151C054CF40FC040916E00442311F457 -:1002AA00909801C0909A07C040916E00442311F4BF -:1002BA00909A01C090987F915F914F913F912F91B1 -:1002CA001F910F9108951F9361D052E135E54DEBCF -:1002DA00D5D112D010916800812F10916900912F09 -:1002EA001F9108950F9335D103E3802E47D1AFE6CE -:1002FA00B0E063D10F9108950F931F932F933F930B -:10030A004F9327D170FF3CC00CEC802E37D10EEBF7 -:10031A00802E34D1A8E6B0E050D1A9E6B0E04DD1A4 -:10032A0010916800209169002F93287F283F11F0CF -:10033A00E89407C02F916894109520951F5F2F4F5E -:10034A0001C02F91269517952695179526951795ED -:10035A0026951795309168000EF43195432F3F701A -:10036A00432F330F330F330F440F340F369536951F -:10037A0036953695109368002093690030936A0089 -:10038A004F913F912F911F910F9108950F93E1D0B3 -:10039A0070FF06C00CEC802EF1D004E4802EEED063 -:1003AA000F9108950F930F920FB800E40EB90BE165 -:1003BA000DB9769BFDCFC09AC0980F900F91089502 -:1003CA000F93B49B01C01AC000917100002309F475 -:1003DA0015C00027009371003DD16394162D143087 -:1003EA0014F42AD10BC010E019BF929893989498EC -:1003FA009598662428D110E010936000B49901C042 -:10040A0009C000917100002309F004C00FEF0093A6 -:10041A00710020D10F9108950F931F932F933F934B -:10042A004F93062D002309F002C006D16394C8DF5A -:10043A00013029F0023049F1033031F184C0000063 -:10044A00B29B04C000C0B39B0AC011C003D1109173 -:10045A006D00183C09F0139510936D0008C0FAD08E -:10046A0010916D00113009F01A9510936D000F93D9 -:10047A001F9300916D001AE09EDE802F9927F0925B -:10048A0066001F910F915FC03FC00000B29B04C07D -:10049A0000C0B39B0FC019C0DDD010916C00209131 -:1004AA006B003AE0130F3327231F10936C0020933D -:1004BA006B000BC0CFD010916C0020916B001A50CA -:1004CA00204010936C0020936B000F931F932F937F -:1004DA003F9300916C0010916B00212F207811F44A -:1004EA00E89405C06894009510950F5F1F4F2AE0A5 -:1004FA0030E04EDE802F912F0AE0009366003F9194 -:10050A002F911F910F911FC0E894B29B04C000C0A5 -:10051A00B39B06C009C09ED011E010936E0004C0C0 -:10052A0099D010E010936E001127812F912F2091FE -:10053A006E00222309F004C01CE01093660003C079 -:10054A001DE0109366004F913F912F911F910F91DB -:10055A000895F894B99A33E04EEB8CD0B99830E00C -:10056A004AE888D005D033E042E384D078940895ED -:10057A00B19B716002C0B1997E7F0895F8940F9380 -:10058A001F93082D18E0069508F448F0B99A30E050 -:10059A0046E770D0B99830E042E16CD008C0B99A09 -:1005AA0030E04AE067D0B99830E04EE763D01A9558 -:1005BA0051F71F910F9178940895F8940F931F9310 -:1005CA00002718E00695B99A30E04AE053D0B99866 -:1005DA0030E040E14FD0B199006830E04CE64AD0B3 -:1005EA001A9581F70C931F910F91789408950F93A0 -:1005FA005F9353E0A3E6B0E08093610090936200BA -:10060A0000916100109162002AE030E0C1DDED92B4 -:10061A0000936100109362005A9591F75F910F91D0 -:10062A0008950F931F93E0EBF6E01127E00FF11FF7 -:10063A0004901F910F910895C59A53E039EA4DE746 -:10064A001DD0C5980895C59A5CE034E34DEF16D0E5 -:10065A00C59808950F931F932F932AE01FEF0FEF6A -:10066A000A95F1F71A95D9F72A95C1F72F911F9193 -:10067A000F91089541503040E8F7089541503040B5 -:10068A005040E0F708950F931F932F9326E00FEF42 -:10069A001FEF1A95F1F70A95D9F72A95C1F72F9105 -:1006AA001F910F910895C0F9A4B0999282F8809091 -:0406BA009CBFC68992 +:10011A0000E00093600004E0302EEAD0042D0031A4 +:10012A0011F09CD014C000E0302EE2D040926B0057 +:10013A0001E0302EDDD040926C0002E0302ED8D0A3 +:10014A0040926D0003E0302ED3D040926E0000271B +:10015A00009368000093690000EF00936A000FEFB4 +:10016A0000937100662428D100916F00083209F4C7 +:10017A0005C012E010936000DBD201C0D2D280E049 +:10018A0090E000916000003051F420916A002093C1 +:10019A00660003D1A1D2B4D011E019BF41D0013019 +:1001AA0009F4A6D1023069F71BE01093630010939B +:1001BA006400109365001093660011E019BFE1CF47 +:1001CA00EE24FF1841E1001F111F4A9509F4089512 +:1001DA00EE1CFF1CE21AF30A20F4E20EF31E8894C6 +:1001EA00F2CF0894F0CFFF1829E0001F2A9509F4EE +:1001FA000895FF1CF11A18F4F10E8894F6CF0894AA +:10020A00F4CF5527442760E13695279510F4400F1F +:10021A00511F57954795379527956A95B9F70895C8 +:10022A000F931F9300916800502E14D000916A001A +:10023A00502E10D000B30170502E0CD004E0502E76 +:10024A0009D00027502E1CE005D01A95E9F71F9116 +:10025A000F9108955D9BFECF5CB8089501E000936D +:10026A006B00402E00E0302E36D00CE200936C007A +:10027A00402E01E0302E2FD005E000936D00402E75 +:10028A0002E0302E28D001E000936E00402E03E0F9 +:10029A00302E21D000E1402E04E0302E1CD00895EB +:1002AA000F9300916B00402E00E0302E14D0009185 +:1002BA006C00402E01E0302E0ED000916D00402ED1 +:1002CA0002E0302E08D000916E00402E03E0302E5E +:1002DA0002D00F910895F8940F93E199FECF00E0B0 +:1002EA000CBB3EBA4DBAE29AE19A0F9178940895FE +:1002FA00F894E199FECF3EBAE09A4DB27894089507 +:10030A000F931F932F933F934F935F937F93009184 +:10031A006800109169002AE030E073DF022F132F82 +:10032A0020916A003327020F131F40916C005091ED +:10033A006B0060916D004F935F937727461B570BB5 +:10034A00B42EA52E5F914F917727460F571FD42EB3 +:10035A00C52E0EF004C0009510950F5F1F4FB01602 +:10036A00A10624F40D151C054CF40FC040916E0033 +:10037A00442311F4909801C0909A07C040916E00EE +:10038A00442311F4909A01C090987F915F914F9104 +:10039A003F912F911F910F9108951F9361D052E1C0 +:1003AA0035E54DEBE0D112D010916800812F109104 +:1003BA006900912F1F9108950F9340D103E3802E76 +:1003CA0052D1AFE6B0E06ED10F9108950F931F930B +:1003DA002F933F934F9332D170FF3CC00CEC802E89 +:1003EA0042D10EEB802E3FD1A8E6B0E05BD1A9E660 +:1003FA00B0E058D110916800209169002F93287FAE +:10040A00283F11F0E89407C02F9168941095209521 +:10041A001F5F2F4F01C02F91269517952695179587 +:10042A002695179526951795309168000EF4319503 +:10043A00432F3F70432F330F330F330F440F340FC3 +:10044A00369536953695369510936800209369004F +:10045A0030936A004F913F912F911F910F91089508 +:10046A000F93ECD070FF06C00CEC802EFCD004E495 +:10047A00802EF9D00F9108950F930F920FB800E4D0 +:10048A000EB90BE10DB9769BFDCFC09AC0980F90BB +:10049A000F9108950F93B49B01C01CC00091710085 +:1004AA00002309F417C000270093710048D1639410 +:1004BA00162D143014F435D10DC010E019BF9298DE +:1004CA009398949895986624EBDE32D1969810E02A +:1004DA0010936000B49901C009C000917100002313 +:1004EA0009F004C00FEF0093710029D10F9108950C +:1004FA000F931F932F933F934F93062D002309F0D9 +:10050A0004C09098969A0DD16394C4DF013029F003 +:10051A00023049F1033031F18BC0DED0B29B04C006 +:10052A0000C0B39B0AC011C00AD110916D00183CDB +:10053A0009F0139510936D0008C001D110916D0058 +:10054A00113009F01A9510936D000F931F930091C3 +:10055A006D001AE048DE802F9927F09266001F91FD +:10056A000F9166C03FC0B8D0B29B04C000C0B39B15 +:10057A000FC019C0E4D010916C0020916B003AE0D2 +:10058A00130F3327231F10936C0020936B000BC0AB +:10059A00D6D010916C0020916B001A502040109315 +:1005AA006C0020936B000F931F932F933F9300913E +:1005BA006C0010916B00212F207811F4E89405C08B +:1005CA006894009510950F5F1F4F2AE030E0F8DD20 +:1005DA00802F912F0AE0009366003F912F911F917F +:1005EA000F9126C0E894B29B04C000C0B39B06C01A +:1005FA0009C0A5D011E010936E0004C0A0D010E08D +:10060A0010936E001127812F912F112710936300E9 +:10061A00109364001093650020916E00222309F064 +:10062A0004C01CE01093660003C01DE0109366002E +:10063A004F913F912F911F910F910895F894B99A74 +:10064A0033E04EEB8CD0B99830E04AE888D005D038 +:10065A0033E042E384D078940895B19B716002C07C +:10066A00B1997E7F0895F8940F931F93082D18E08F +:10067A00069508F448F0B99A30E046E770D0B99880 +:10068A0030E042E16CD008C0B99A30E04AE067D065 +:10069A00B99830E04EE763D01A9551F71F910F9140 +:1006AA0078940895F8940F931F93002718E00695FD +:1006BA00B99A30E04AE053D0B99830E040E14FD0DF +:1006CA00B199006830E04CE64AD01A9581F70C934C +:1006DA001F910F91789408950F935F9353E0A3E6C7 +:1006EA00B0E08093610090936200009161001091E4 +:1006FA0062002AE030E064DDED920093610010931D +:10070A0062005A9591F75F910F9108950F931F9385 +:10071A00EAE7F7E01127E00FF11F04901F910F910C +:10072A000895C59A53E039EA4DE71DD0C598089552 +:10073A00C59A5CE034E34DEF16D0C59808950F933F +:10074A001F932F932AE01FEF0FEF0A95F1F71A95DF +:10075A00D9F72A95C1F72F911F910F91089541500A +:10076A003040E8F70895415030405040E0F708958E +:0E077A00C0F9A4B0999282F880909CBFC68905 :00000001FF diff --git a/dist/default/production/attiny2313a_thermostat.X.production.lss b/dist/default/production/attiny2313a_thermostat.X.production.lss index 19eb142..cb40921 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 Thu Jun 29 23:01:33 2023 +AVRASM ver. 2.2.7 main.asm Fri Jun 30 16:51:54 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(295): Including file 'div16u.asm' +main.asm(329): Including file 'div16u.asm' div16u.asm(22): warning: Register r16 already defined by the .DEF directive -main.asm(295): 'div16u.asm' included form here +main.asm(329): 'div16u.asm' included form here div16u.asm(23): warning: Register r17 already defined by the .DEF directive -main.asm(295): 'div16u.asm' included form here +main.asm(329): 'div16u.asm' included form here div16u.asm(24): warning: Register r16 already defined by the .DEF directive -main.asm(295): 'div16u.asm' included form here +main.asm(329): 'div16u.asm' included form here div16u.asm(25): warning: Register r17 already defined by the .DEF directive -main.asm(295): 'div16u.asm' included form here +main.asm(329): 'div16u.asm' included form here div16u.asm(27): warning: Register r19 already defined by the .DEF directive -main.asm(295): 'div16u.asm' included form here +main.asm(329): 'div16u.asm' included form here div16u.asm(28): warning: Register r20 already defined by the .DEF directive -main.asm(295): 'div16u.asm' included form here -main.asm(296): Including file 'div8u.asm' +main.asm(329): 'div16u.asm' included form here +main.asm(330): Including file 'div8u.asm' div8u.asm(18): warning: Register r15 already defined by the .DEF directive -main.asm(296): 'div8u.asm' included form here +main.asm(330): 'div8u.asm' included form here div8u.asm(19): warning: Register r16 already defined by the .DEF directive -main.asm(296): 'div8u.asm' included form here +main.asm(330): 'div8u.asm' included form here div8u.asm(20): warning: Register r16 already defined by the .DEF directive -main.asm(296): 'div8u.asm' included form here +main.asm(330): 'div8u.asm' included form here div8u.asm(21): warning: Register r17 already defined by the .DEF directive -main.asm(296): 'div8u.asm' included form here +main.asm(330): 'div8u.asm' included form here div8u.asm(22): warning: Register r18 already defined by the .DEF directive -main.asm(296): 'div8u.asm' included form here -main.asm(297): Including file 'mpy16u.asm' +main.asm(330): 'div8u.asm' included form here +main.asm(331): Including file 'mpy16u.asm' mpy16u.asm(19): warning: Register r16 already defined by the .DEF directive -main.asm(297): 'mpy16u.asm' included form here +main.asm(331): 'mpy16u.asm' included form here mpy16u.asm(20): warning: Register r17 already defined by the .DEF directive -main.asm(297): 'mpy16u.asm' included form here +main.asm(331): 'mpy16u.asm' included form here mpy16u.asm(21): warning: Register r18 already defined by the .DEF directive -main.asm(297): 'mpy16u.asm' included form here +main.asm(331): 'mpy16u.asm' included form here mpy16u.asm(22): warning: Register r19 already defined by the .DEF directive -main.asm(297): 'mpy16u.asm' included form here +main.asm(331): 'mpy16u.asm' included form here mpy16u.asm(23): warning: Register r18 already defined by the .DEF directive -main.asm(297): 'mpy16u.asm' included form here +main.asm(331): 'mpy16u.asm' included form here mpy16u.asm(24): warning: Register r19 already defined by the .DEF directive -main.asm(297): 'mpy16u.asm' included form here +main.asm(331): 'mpy16u.asm' included form here mpy16u.asm(25): warning: Register r20 already defined by the .DEF directive -main.asm(297): 'mpy16u.asm' included form here +main.asm(331): 'mpy16u.asm' included form here mpy16u.asm(26): warning: Register r21 already defined by the .DEF directive -main.asm(297): 'mpy16u.asm' included form here -main.asm(354): warning: Register r16 already defined by the .DEF directive -main.asm(355): warning: Register r17 already defined by the .DEF directive +main.asm(331): 'mpy16u.asm' included form here +main.asm(498): warning: Register r16 already defined by the .DEF directive +main.asm(499): 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(295): Including file 'div16u.asm' -main.asm(296): Including file 'div8u.asm' -main.asm(297): Including file 'mpy16u.asm' +main.asm(329): Including file 'div16u.asm' +main.asm(330): Including file 'div8u.asm' +main.asm(331): Including file 'mpy16u.asm' ; @@ -777,6 +777,8 @@ main.asm(297): Including file 'mpy16u.asm' .DEF DELAY_24_r = r21 .DEF DISP_NUM_L = r24 ; LSB числа которое сейчас на индикаторе .DEF DISP_NUM_H = r25 ; MSB числа которое сейчас на индикаторе + .DEF EEP_A_r = r3 + .DEF EEP_D_r = r4 .DEF REPROGRAM_STEP_r = r6 .EQU DIGIT_1_PIN = PD2 ; Пин разряда индикатора 1 @@ -784,8 +786,8 @@ main.asm(297): Including file 'mpy16u.asm' .EQU DIGIT_3_PIN = PD4 ; Пин разряда индикатора 3 .EQU DIGIT_4_PIN = PD5 ; Пин разряда индикатора 4 - .EQU LED_ERR_PIN = PD6 ; Светодиод который говорит о том, что МК в состоянии ошибки - .EQU LED_ERR_PORT = PORTD + .EQU LED_PGM_PIN = PD6 ; Светодиод который говорит о том, что МК в состоянии настройки + .EQU LED_PGM_PORT = PORTD .EQU OW_LINE = PB1 ; Пин шины 1-Wire .EQU OW_DDR = DDRB @@ -847,6 +849,12 @@ main.asm(297): Including file 'mpy16u.asm' .EQU DEFAULT_SETTING_TEMP_L = LOW(DEFAULT_TEMP) .EQU DEFAULT_SETTING_TEMP_H = HIGH(DEFAULT_TEMP) .EQU DEFAULT_SETTING_HYST = DEFAULT_HYST + .EQU DEFAULT_SETTING_MODE = DEFAULT_MODE + + .EQU EEP_SETTING_TEMP_H = 0x00 + .EQU EEP_SETTING_TEMP_L = 0x01 + .EQU EEP_SETTING_HYST = 0x02 + .EQU EEP_SETTING_MODE = 0x03 .INCLUDE "macros.asm" ldi @0, @2 @@ -997,8 +1005,8 @@ main.asm(297): Including file 'mpy16u.asm' 000037 9a92 sbi PORTD, DIGIT_1_PIN 000038 c001 rjmp PC+2 000039 9892 cbi PORTD, DIGIT_1_PIN -00003a d2db rcall DISPLAY_DECODER -00003b d19b rcall USI_TRANSMIT +00003a d350 rcall DISPLAY_DECODER +00003b d205 rcall USI_TRANSMIT _indicate_2: 00003c 3041 cpi r20, 1 @@ -1015,8 +1023,8 @@ main.asm(297): Including file 'mpy16u.asm' 000048 c001 rjmp PC+2 000049 9893 cbi PORTD, DIGIT_2_PIN 00004a 9100 0064 lds TEMP_REG_A, DIGITS+1 -00004c d2c9 rcall DISPLAY_DECODER -00004d d189 rcall USI_TRANSMIT +00004c d33e rcall DISPLAY_DECODER +00004d d1f3 rcall USI_TRANSMIT _indicate_3: 00004e 3042 cpi r20, 2 @@ -1027,12 +1035,11 @@ main.asm(297): Including file 'mpy16u.asm' 000052 9895 cbi PORTD, DIGIT_4_PIN 000053 9a94 sbi PORTD, DIGIT_3_PIN 000054 9100 0063 lds TEMP_REG_A, DIGITS -000056 d2bf rcall DISPLAY_DECODER - ; зажигаем точку +000056 d334 rcall DISPLAY_DECODER 000057 2d00 mov r16, r0 000058 770f cbr r16, (1<<7) 000059 2e00 mov r0, r16 -00005a d17c rcall USI_TRANSMIT +00005a d1e6 rcall USI_TRANSMIT _indicate_4: 00005b 3043 cpi r20, 3 @@ -1043,8 +1050,8 @@ main.asm(297): Including file 'mpy16u.asm' 00005f 9894 cbi PORTD, DIGIT_3_PIN 000060 9a95 sbi PORTD, DIGIT_4_PIN 000061 9100 0066 lds TEMP_REG_A, DIGITS+3 -000063 d2b2 rcall DISPLAY_DECODER -000064 d172 rcall USI_TRANSMIT +000063 d327 rcall DISPLAY_DECODER +000064 d1dc rcall USI_TRANSMIT _indicate_exit: 000065 9543 inc r20 @@ -1071,7 +1078,7 @@ main.asm(297): Including file 'mpy16u.asm' MCU_INIT: ; **** ИНИЦИАЛИЗАЦИЯ ПИНОВ ************************************* 000072 e70f -000073 bb01 outi r16, DDRD, (1< // ; **** ГЛАВНЫЙ ЦИКЛ ********************************************** LOOP: -0000b6 9100 0060 lds r16, MCU_STATE ; получаем текущее состояние МК -0000b8 d243 rcall DISPLAY_UPD_DIGITS +0000c6 9100 0060 lds r16, MCU_STATE ; получаем текущее состояние МК + ; rcall DISPLAY_UPD_DIGITS _STATE_DEFAULT: -0000b9 3000 cpi r16, MCU_STATE_DEFAULT -0000ba f451 brne _STATE_PROGRAM -0000bb 9896 cbi LED_ERR_PORT, LED_ERR_PIN +0000c8 3000 cpi r16, MCU_STATE_DEFAULT +0000c9 f451 brne _STATE_PROGRAM -0000bc 9120 006a lds r18, TEMP_F -0000be 9320 0066 sts DIGITS+3, r18 +0000ca 9120 006a lds r18, TEMP_F +0000cc 9320 0066 sts DIGITS+3, r18 -0000c0 d0a7 rcall TEMP_UPD ; обновление данных о температуре -0000c1 d059 rcall TEMP_COMPARSION ; логика термостата -0000c2 e011 -0000c3 bf19 outi r17, TIMSK, (1< @@ -1220,29 +1263,29 @@ main.asm(297): Including file 'mpy16u.asm' ;***** Code div16u: -0000cd 24ee clr drem16uL ; clear remainder Low byte -0000ce 18ff sub drem16uH,drem16uH ; clear remainder High byte and carry -0000cf e141 ldi dcnt16u,17 ; init loop counter +0000e5 24ee clr drem16uL ; clear remainder Low byte +0000e6 18ff sub drem16uH,drem16uH ; clear remainder High byte and carry +0000e7 e141 ldi dcnt16u,17 ; init loop counter d16u_1: -0000d0 1f00 rol dd16uL ; shift left dividend -0000d1 1f11 rol dd16uH -0000d2 954a dec dcnt16u ; decrement counter -0000d3 f409 brne d16u_2 ; if done -0000d4 9508 ret ; return +0000e8 1f00 rol dd16uL ; shift left dividend +0000e9 1f11 rol dd16uH +0000ea 954a dec dcnt16u ; decrement counter +0000eb f409 brne d16u_2 ; if done +0000ec 9508 ret ; return d16u_2: -0000d5 1cee rol drem16uL ; shift dividend into remainder -0000d6 1cff rol drem16uH -0000d7 1ae2 sub drem16uL,dv16uL ; remainder = remainder - divisor -0000d8 0af3 sbc drem16uH,dv16uH -0000d9 f420 brcc d16u_3 ; if result negative -0000da 0ee2 add drem16uL,dv16uL ; restore remainder -0000db 1ef3 adc drem16uH,dv16uH -0000dc 9488 clc ; clear carry to be shifted into result -0000dd cff2 rjmp d16u_1 ; else +0000ed 1cee rol drem16uL ; shift dividend into remainder +0000ee 1cff rol drem16uH +0000ef 1ae2 sub drem16uL,dv16uL ; remainder = remainder - divisor +0000f0 0af3 sbc drem16uH,dv16uH +0000f1 f420 brcc d16u_3 ; if result negative +0000f2 0ee2 add drem16uL,dv16uL ; restore remainder +0000f3 1ef3 adc drem16uH,dv16uH +0000f4 9488 clc ; clear carry to be shifted into result +0000f5 cff2 rjmp d16u_1 ; else d16u_3: -0000de 9408 sec ; set carry to be shifted into result +0000f6 9408 sec ; set carry to be shifted into result .INCLUDE "div8u.asm" -0000df cff0 +0000f7 cff0 ;* ;* "div8u" - 8/8 Bit Unsigned Division ;* @@ -1267,21 +1310,21 @@ main.asm(297): Including file 'mpy16u.asm' ;***** Code -0000e0 18ff div8u: sub drem8u,drem8u ;clear remainder and carry -0000e1 e029 ldi dcnt8u,9 ;init loop counter -0000e2 1f00 d8u_1: rol dd8u ;shift left dividend -0000e3 952a dec dcnt8u ;decrement counter -0000e4 f409 brne d8u_2 ;if done -0000e5 9508 ret ; return -0000e6 1cff d8u_2: rol drem8u ;shift dividend into remainder -0000e7 1af1 sub drem8u,dv8u ;remainder = remainder - divisor -0000e8 f418 brcc d8u_3 ;if result negative -0000e9 0ef1 add drem8u,dv8u ; restore remainder -0000ea 9488 clc ; clear carry to be shifted into result -0000eb cff6 rjmp d8u_1 ;else -0000ec 9408 d8u_3: sec ; set carry to be shifted into result +0000f8 18ff div8u: sub drem8u,drem8u ;clear remainder and carry +0000f9 e029 ldi dcnt8u,9 ;init loop counter +0000fa 1f00 d8u_1: rol dd8u ;shift left dividend +0000fb 952a dec dcnt8u ;decrement counter +0000fc f409 brne d8u_2 ;if done +0000fd 9508 ret ; return +0000fe 1cff d8u_2: rol drem8u ;shift dividend into remainder +0000ff 1af1 sub drem8u,dv8u ;remainder = remainder - divisor +000100 f418 brcc d8u_3 ;if result negative +000101 0ef1 add drem8u,dv8u ; restore remainder +000102 9488 clc ; clear carry to be shifted into result +000103 cff6 rjmp d8u_1 ;else +000104 9408 d8u_3: sec ; set carry to be shifted into result .INCLUDE "mpy16u.asm" -0000ed cff4 +000105 cff4 ;* ;* "mpy16u" - 16x16 Bit Unsigned Multiplication ;* @@ -1311,76 +1354,186 @@ main.asm(297): Including file 'mpy16u.asm' ;***** Code -0000ee 2755 mpy16u: clr m16u3 ;clear 2 highest bytes of result -0000ef 2744 clr m16u2 -0000f0 e160 ldi mcnt16u,16 ;init loop counter -0000f1 9536 lsr mp16uH -0000f2 9527 ror mp16uL +000106 2755 mpy16u: clr m16u3 ;clear 2 highest bytes of result +000107 2744 clr m16u2 +000108 e160 ldi mcnt16u,16 ;init loop counter +000109 9536 lsr mp16uH +00010a 9527 ror mp16uL -0000f3 f410 m16u_1: brcc noad8 ;if bit 0 of multiplier set -0000f4 0f40 add m16u2,mc16uL ;add multiplicand Low to byte 2 of res -0000f5 1f51 adc m16u3,mc16uH ;add multiplicand high to byte 3 of res -0000f6 9557 noad8: ror m16u3 ;shift right result byte 3 -0000f7 9547 ror m16u2 ;rotate right result byte 2 -0000f8 9537 ror m16u1 ;rotate result byte 1 and multiplier High -0000f9 9527 ror m16u0 ;rotate result byte 0 and multiplier Low -0000fa 956a dec mcnt16u ;decrement loop counter -0000fb f7b9 brne m16u_1 ;if not done, loop more -0000fc 9508 +00010b f410 m16u_1: brcc noad8 ;if bit 0 of multiplier set +00010c 0f40 add m16u2,mc16uL ;add multiplicand Low to byte 2 of res +00010d 1f51 adc m16u3,mc16uH ;add multiplicand high to byte 3 of res +00010e 9557 noad8: ror m16u3 ;shift right result byte 3 +00010f 9547 ror m16u2 ;rotate right result byte 2 +000110 9537 ror m16u1 ;rotate result byte 1 and multiplier High +000111 9527 ror m16u0 ;rotate result byte 0 and multiplier Low +000112 956a dec mcnt16u ;decrement loop counter +000113 f7b9 brne m16u_1 ;if not done, loop more +000114 9508 // TEMP_SEND_UART: -0000fd 930f push r16 -0000fe 931f push r17 +000115 930f push r16 +000116 931f push r17 ; целая часть -0000ff 9100 0068 lds r16, TEMP_L -000101 2e50 mov r5, r16 -000102 d014 rcall UART_WR_BYTE +000117 9100 0068 lds r16, TEMP_L +000119 2e50 mov r5, r16 +00011a d014 rcall UART_WR_BYTE ; дробная часть -000103 9100 006a lds r16, TEMP_F -000105 2e50 mov r5, r16 -000106 d010 rcall UART_WR_BYTE +00011b 9100 006a lds r16, TEMP_F +00011d 2e50 mov r5, r16 +00011e d010 rcall UART_WR_BYTE ; состояние реле -000107 b300 in r16, PIND -000108 7001 andi r16, (1< // UART_WR_BYTE: -000117 9b5d sbis UCSRA, UDRE -000118 cffe rjmp UART_WR_BYTE -000119 b85c out UDR, r5 -00011a 9508 ret// - +00012f 9b5d sbis UCSRA, UDRE +000130 cffe rjmp UART_WR_BYTE +000131 b85c out UDR, r5 +000132 9508 ret + // + + // + INIT_DEFAULT_PARAMS: +000133 e001 ldi r16, DEFAULT_SETTING_TEMP_H +000134 9300 006b sts SETTING_TEMP_H, r16 ; уставка HIGH +000136 2e40 mov EEP_D_r, r16 +000137 e000 ldi r16, EEP_SETTING_TEMP_H +000138 2e30 mov EEP_A_r, r16 +000139 d036 rcall EEP_WR_BYTE + +00013a e20c ldi r16, DEFAULT_SETTING_TEMP_L +00013b 9300 006c sts SETTING_TEMP_L, r16 ; уставка LOW +00013d 2e40 mov EEP_D_r, r16 +00013e e001 ldi r16, EEP_SETTING_TEMP_L +00013f 2e30 mov EEP_A_r, r16 +000140 d02f rcall EEP_WR_BYTE + +000141 e005 ldi r16, DEFAULT_SETTING_HYST +000142 9300 006d sts SETTING_HYST, r16 ; гистерезис +000144 2e40 mov EEP_D_r, r16 +000145 e002 ldi r16, EEP_SETTING_HYST +000146 2e30 mov EEP_A_r, r16 +000147 d028 rcall EEP_WR_BYTE + +000148 e001 ldi r16, DEFAULT_SETTING_MODE +000149 9300 006e sts SETTING_MODE, r16 ; режим +00014b 2e40 mov EEP_D_r, r16 +00014c e003 ldi r16, EEP_SETTING_MODE +00014d 2e30 mov EEP_A_r, r16 +00014e d021 rcall EEP_WR_BYTE + +00014f e100 ldi r16, 0x10 +000150 2e40 mov EEP_D_r, r16 +000151 e004 ldi r16, EEP_FIRST_TIME_RUN +000152 2e30 mov EEP_A_r, r16 +000153 d01c rcall EEP_WR_BYTE +000154 9508 ret + // + + // + WRITE_PARAMS_TO_EEP: +000155 930f push r16 +000156 9100 006b lds r16, SETTING_TEMP_H ; уставка HIGH +000158 2e40 mov EEP_D_r, r16 +000159 e000 ldi r16, EEP_SETTING_TEMP_H +00015a 2e30 mov EEP_A_r, r16 +00015b d014 rcall EEP_WR_BYTE + +00015c 9100 006c lds r16, SETTING_TEMP_L ; уставка LOW +00015e 2e40 mov EEP_D_r, r16 +00015f e001 ldi r16, EEP_SETTING_TEMP_L +000160 2e30 mov EEP_A_r, r16 +000161 d00e rcall EEP_WR_BYTE + +000162 9100 006d lds r16, SETTING_HYST ; гистерезис +000164 2e40 mov EEP_D_r, r16 +000165 e002 ldi r16, EEP_SETTING_HYST +000166 2e30 mov EEP_A_r, r16 +000167 d008 rcall EEP_WR_BYTE + +000168 9100 006e lds r16, SETTING_MODE ; режим +00016a 2e40 mov EEP_D_r, r16 +00016b e003 ldi r16, EEP_SETTING_MODE +00016c 2e30 mov EEP_A_r, r16 +00016d d002 rcall EEP_WR_BYTE +00016e 910f pop r16 +00016f 9508 ret// + + // + EEP_WR_BYTE: +000170 94f8 cli +000171 930f push r16 + _EEP_WR_BYTE_LP: + ; ждем завершения предыдущей записи +000172 99e1 sbic EECR, EEPE +000173 cffe rjmp _EEP_WR_BYTE_LP + + ; режим программирования - атомарный +000174 e000 ldi r16, (0< + // TEMP_COMPARSION: -00011b 930f push r16 -00011c 931f push r17 -00011d 932f push r18 -00011e 933f push r19 -00011f 934f push r20 -000120 935f push r21 -000121 937f push r23 +000185 930f push r16 +000186 931f push r17 +000187 932f push r18 +000188 933f push r19 +000189 934f push r20 +00018a 935f push r21 +00018b 937f push r23 .DEF temp_r_l = r16 .DEF temp_r_h = r17 @@ -1391,246 +1544,247 @@ main.asm(297): Including file 'mpy16u.asm' .DEF max_r_trhd_l = r13 .DEF max_r_trhd_h = r12 ; умножаем температуру на 10 -000122 9100 0068 lds mc16uL, TEMP_L // r16 -000124 9110 0069 lds mc16uH, TEMP_H // r17 -000126 e02a ldi mp16uL, LOW(10) -000127 e030 ldi mp16uH, HIGH(10) -000128 dfc5 rcall mpy16u -000129 2f02 mov temp_r_l, m16u0 ; L -00012a 2f13 mov temp_r_h, m16u1 ; H +00018c 9100 0068 lds mc16uL, TEMP_L // r16 +00018e 9110 0069 lds mc16uH, TEMP_H // r17 +000190 e02a ldi mp16uL, LOW(10) +000191 e030 ldi mp16uH, HIGH(10) +000192 df73 rcall mpy16u +000193 2f02 mov temp_r_l, m16u0 ; L +000194 2f13 mov temp_r_h, m16u1 ; H ; добавляем дробную часть -00012b 9120 006a lds r18, TEMP_F -00012d 2733 clr r19 -00012e 0f02 add temp_r_l, r18 -00012f 1f13 adc temp_r_h, r19 +000195 9120 006a lds r18, TEMP_F +000197 2733 clr r19 +000198 0f02 add temp_r_l, r18 +000199 1f13 adc temp_r_h, r19 ; определяем нижний и верхний пороги -000130 9140 006c lds r20, SETTING_TEMP_L -000132 9150 006b lds r21, SETTING_TEMP_H -000134 9160 006d lds r22, SETTING_HYST -000136 934f push r20 -000137 935f push r21 -000138 2777 clr r23 -000139 1b46 sub r20, r22 -00013a 0b57 sbc r21, r23 -00013b 2eb4 mov min_r_trhd_l, r20 -00013c 2ea5 mov min_r_trhd_h, r21 -00013d 915f pop r21 -00013e 914f pop r20 -00013f 2777 clr r23 -000140 0f46 add r20, r22 -000141 1f57 adc r21, r23 -000142 2ed4 mov max_r_trhd_l, r20 -000143 2ec5 mov max_r_trhd_h, r21 +00019a 9140 006c lds r20, SETTING_TEMP_L +00019c 9150 006b lds r21, SETTING_TEMP_H +00019e 9160 006d lds r22, SETTING_HYST +0001a0 934f push r20 +0001a1 935f push r21 +0001a2 2777 clr r23 +0001a3 1b46 sub r20, r22 +0001a4 0b57 sbc r21, r23 +0001a5 2eb4 mov min_r_trhd_l, r20 +0001a6 2ea5 mov min_r_trhd_h, r21 +0001a7 915f pop r21 +0001a8 914f pop r20 +0001a9 2777 clr r23 +0001aa 0f46 add r20, r22 +0001ab 1f57 adc r21, r23 +0001ac 2ed4 mov max_r_trhd_l, r20 +0001ad 2ec5 mov max_r_trhd_h, r21 ; определяем знак температуры -000144 f00e brts _NEGATE_TEMP -000145 c004 rjmp _COMPARE +0001ae f00e brts _NEGATE_TEMP +0001af c004 rjmp _COMPARE _NEGATE_TEMP: -000146 9500 com temp_r_l -000147 9510 com temp_r_h -000148 5f0f subi temp_r_l, low(-1) -000149 4f1f sbci temp_r_h, high(-1) +0001b0 9500 com temp_r_l +0001b1 9510 com temp_r_h +0001b2 5f0f subi temp_r_l, low(-1) +0001b3 4f1f sbci temp_r_h, high(-1) _COMPARE: ; проверяем нижний порог -00014a 16b0 cp min_r_trhd_l, temp_r_l -00014b 06a1 cpc min_r_trhd_h, temp_r_h -00014c f424 brge _MIN_THRESHOLD ; TEMP <= MIN +0001b4 16b0 cp min_r_trhd_l, temp_r_l +0001b5 06a1 cpc min_r_trhd_h, temp_r_h +0001b6 f424 brge _MIN_THRESHOLD ; TEMP <= MIN ; проверяем верхний порог -00014d 150d cp temp_r_l, max_r_trhd_l -00014e 051c cpc temp_r_h, max_r_trhd_h -00014f f44c brge _MAX_THRESHOLD ; TEMP >= TOP -000150 c00f rjmp _COMPARSION_EXIT +0001b7 150d cp temp_r_l, max_r_trhd_l +0001b8 051c cpc temp_r_h, max_r_trhd_h +0001b9 f44c brge _MAX_THRESHOLD ; TEMP >= TOP +0001ba c00f rjmp _COMPARSION_EXIT _MIN_THRESHOLD: ; определяем режим работы -000151 9140 006e lds r20, SETTING_MODE -000153 2344 tst r20 -000154 f411 brne PC+3 -000155 9890 relay_off -000156 c001 rjmp PC+2 -000157 9a90 relay_on -000158 c007 rjmp _COMPARSION_EXIT +0001bb 9140 006e lds r20, SETTING_MODE +0001bd 2344 tst r20 +0001be f411 brne PC+3 +0001bf 9890 relay_off +0001c0 c001 rjmp PC+2 +0001c1 9a90 relay_on +0001c2 c007 rjmp _COMPARSION_EXIT _MAX_THRESHOLD: -000159 9140 006e lds r20, SETTING_MODE -00015b 2344 tst r20 -00015c f411 brne PC+3 -00015d 9a90 relay_on -00015e c001 rjmp PC+2 -00015f 9890 relay_off +0001c3 9140 006e lds r20, SETTING_MODE +0001c5 2344 tst r20 +0001c6 f411 brne PC+3 +0001c7 9a90 relay_on +0001c8 c001 rjmp PC+2 +0001c9 9890 relay_off _COMPARSION_EXIT: -000160 917f pop r23 -000161 915f pop r21 -000162 914f pop r20 -000163 913f pop r19 -000164 912f pop r18 -000165 911f pop r17 -000166 910f pop r16 -000167 9508 ret// +0001ca 917f pop r23 +0001cb 915f pop r21 +0001cc 914f pop r20 +0001cd 913f pop r19 +0001ce 912f pop r18 +0001cf 911f pop r17 +0001d0 910f pop r16 +0001d1 9508 ret + // // TEMP_UPD: -000168 931f push r17 -000169 d061 rcall TEMP_CONV -00016a e152 -00016b e535 -00016c eb4d -00016d d1d5 DELAY24 751000 -00016e d012 rcall TEMP_RD +0001d2 931f push r17 +0001d3 d061 rcall TEMP_CONV +0001d4 e152 +0001d5 e535 +0001d6 eb4d +0001d7 d1e0 DELAY24 751000 +0001d8 d012 rcall TEMP_RD ; обновляем данные в ячейках -00016f 9110 0068 lds r17, TEMP_L -000171 2f81 mov DISP_NUM_L, r17 -000172 9110 0069 lds r17, TEMP_H -000174 2f91 mov DISP_NUM_H, r17 -000175 911f pop r17 -000176 9508 ret +0001d9 9110 0068 lds r17, TEMP_L +0001db 2f81 mov DISP_NUM_L, r17 +0001dc 9110 0069 lds r17, TEMP_H +0001de 2f91 mov DISP_NUM_H, r17 +0001df 911f pop r17 +0001e0 9508 ret // // RD_F_CODE: -000177 930f push r16 +0001e1 930f push r16 -000178 d135 rcall OW_PRESENCE -000179 e303 ldi r16, DS18B20_CMD_READROM -00017a 2e80 mov OW_CMD_r, r16 -00017b d147 rcall OW_SEND_BYTE +0001e2 d140 rcall OW_PRESENCE +0001e3 e303 ldi r16, DS18B20_CMD_READROM +0001e4 2e80 mov OW_CMD_r, r16 +0001e5 d152 rcall OW_SEND_BYTE -00017c e6af ldi XL, LOW(DEVICE_FAMILY_CODE) -00017d e0b0 ldi XH, HIGH(DEVICE_FAMILY_CODE) -00017e d163 rcall OW_RD_BYTE +0001e6 e6af ldi XL, LOW(DEVICE_FAMILY_CODE) +0001e7 e0b0 ldi XH, HIGH(DEVICE_FAMILY_CODE) +0001e8 d16e rcall OW_RD_BYTE -00017f 910f pop r16 -000180 9508 ret// +0001e9 910f pop r16 +0001ea 9508 ret// // TEMP_RD: -000181 930f push r16 -000182 931f push r17 -000183 932f push r18 -000184 933f push r19 -000185 934f push r20 +0001eb 930f push r16 +0001ec 931f push r17 +0001ed 932f push r18 +0001ee 933f push r19 +0001ef 934f push r20 -000186 d127 rcall OW_PRESENCE -000187 ff70 sbrs OWFR, OWPRF -000188 c03c rjmp _TEMP_RD_EXIT +0001f0 d132 rcall OW_PRESENCE +0001f1 ff70 sbrs OWFR, OWPRF +0001f2 c03c rjmp _TEMP_RD_EXIT -000189 ec0c ldi r16, DS18B20_CMD_SKIPROM -00018a 2e80 mov OW_CMD_r, r16 -00018b d137 rcall OW_SEND_BYTE +0001f3 ec0c ldi r16, DS18B20_CMD_SKIPROM +0001f4 2e80 mov OW_CMD_r, r16 +0001f5 d142 rcall OW_SEND_BYTE -00018c eb0e ldi r16, DS18B20_CMD_RSCRATCHPAD -00018d 2e80 mov OW_CMD_r, r16 -00018e d134 rcall OW_SEND_BYTE +0001f6 eb0e ldi r16, DS18B20_CMD_RSCRATCHPAD +0001f7 2e80 mov OW_CMD_r, r16 +0001f8 d13f rcall OW_SEND_BYTE -00018f e6a8 ldi XL, LOW(TEMP_L) -000190 e0b0 ldi XH, HIGH(TEMP_L) -000191 d150 rcall OW_RD_BYTE +0001f9 e6a8 ldi XL, LOW(TEMP_L) +0001fa e0b0 ldi XH, HIGH(TEMP_L) +0001fb d15b rcall OW_RD_BYTE -000192 e6a9 ldi XL, LOW(TEMP_H) -000193 e0b0 ldi XH, HIGH(TEMP_H) -000194 d14d rcall OW_RD_BYTE +0001fc e6a9 ldi XL, LOW(TEMP_H) +0001fd e0b0 ldi XH, HIGH(TEMP_H) +0001fe d158 rcall OW_RD_BYTE -000195 9110 0068 lds r17, TEMP_L -000197 9120 0069 lds r18, TEMP_H +0001ff 9110 0068 lds r17, TEMP_L +000201 9120 0069 lds r18, TEMP_H -000199 932f push r18 -00019a 7f28 cbr r18, (1<<0) | (1<<1) | (1<<2) ; убираем ненужные биты на время (интересуют последних битов в TEMP_H) -00019b 3f28 cpi r18, 0xf8 ; проверяется является ли число минусовой -00019c f011 breq _TEMP_RD_TO_UNSIGNED ; если да то конвертируем в беззнаковое число -00019d 94e8 clt -00019e c007 rjmp _TEMP_RD_CONTINUE ; если нет то преобразуем значение АЦП в температуру (делим на 16) +000203 932f push r18 +000204 7f28 cbr r18, (1<<0) | (1<<1) | (1<<2) ; убираем ненужные биты на время (интересуют последних битов в TEMP_H) +000205 3f28 cpi r18, 0xf8 ; проверяется является ли число минусовой +000206 f011 breq _TEMP_RD_TO_UNSIGNED ; если да то конвертируем в беззнаковое число +000207 94e8 clt +000208 c007 rjmp _TEMP_RD_CONTINUE ; если нет то преобразуем значение АЦП в температуру (делим на 16) _TEMP_RD_TO_UNSIGNED: -00019f 912f pop r18 -0001a0 9468 set -0001a1 9510 com r17 -0001a2 9520 com r18 -0001a3 5f1f subi r17, low(-1) -0001a4 4f2f sbci r18, high(-1) +000209 912f pop r18 +00020a 9468 set +00020b 9510 com r17 +00020c 9520 com r18 +00020d 5f1f subi r17, low(-1) +00020e 4f2f sbci r18, high(-1) ; ldi r19, 1 ; add r17, r19 ; ldi r19, 0 ; adc r18, r19 -0001a5 c001 rjmp PC+2 +00020f c001 rjmp PC+2 _TEMP_RD_CONTINUE: ; Температура = Число с АЦП / 16 (сдвиг вправо 4) -0001a6 912f pop r18 -0001a7 9526 lsr r18 -0001a8 9517 ror r17 -0001a9 9526 lsr r18 -0001aa 9517 ror r17 -0001ab 9526 lsr r18 -0001ac 9517 ror r17 -0001ad 9526 lsr r18 -0001ae 9517 ror r17 +000210 912f pop r18 +000211 9526 lsr r18 +000212 9517 ror r17 +000213 9526 lsr r18 +000214 9517 ror r17 +000215 9526 lsr r18 +000216 9517 ror r17 +000217 9526 lsr r18 +000218 9517 ror r17 _TEMP_RD_END: -0001af 9130 0068 lds r19, TEMP_L -0001b1 f40e brtc PC+2 -0001b2 9531 neg r19 ; переводим в беззнаковое число если минус +000219 9130 0068 lds r19, TEMP_L +00021b f40e brtc PC+2 +00021c 9531 neg r19 ; переводим в беззнаковое число если минус ; далее происходит такое для получения дробной части: ; ((n<<3) + (n<<1))>>4 или (n*10)/16 -0001b3 2f43 mov r20, r19 -0001b4 703f andi r19, 0x0f -0001b5 2f43 mov r20, r19 -0001b6 0f33 lsl r19 -0001b7 0f33 lsl r19 -0001b8 0f33 lsl r19 +00021d 2f43 mov r20, r19 +00021e 703f andi r19, 0x0f +00021f 2f43 mov r20, r19 +000220 0f33 lsl r19 +000221 0f33 lsl r19 +000222 0f33 lsl r19 -0001b9 0f44 lsl r20 +000223 0f44 lsl r20 -0001ba 0f34 add r19, r20 +000224 0f34 add r19, r20 -0001bb 9536 lsr r19 -0001bc 9536 lsr r19 -0001bd 9536 lsr r19 -0001be 9536 lsr r19 +000225 9536 lsr r19 +000226 9536 lsr r19 +000227 9536 lsr r19 +000228 9536 lsr r19 ; записываем данные -0001bf 9310 0068 sts TEMP_L, r17 -0001c1 9320 0069 sts TEMP_H, r18 -0001c3 9330 006a sts TEMP_F, r19 +000229 9310 0068 sts TEMP_L, r17 +00022b 9320 0069 sts TEMP_H, r18 +00022d 9330 006a sts TEMP_F, r19 _TEMP_RD_EXIT: -0001c5 914f pop r20 -0001c6 913f pop r19 -0001c7 912f pop r18 -0001c8 911f pop r17 -0001c9 910f pop r16 -0001ca 9508 ret +00022f 914f pop r20 +000230 913f pop r19 +000231 912f pop r18 +000232 911f pop r17 +000233 910f pop r16 +000234 9508 ret ; TEMP_CONV: -0001cb 930f push r16 +000235 930f push r16 -0001cc d0e1 rcall OW_PRESENCE -0001cd ff70 sbrs OWFR, OWPRF -0001ce c006 rjmp _TEMP_CONV_EXIT +000236 d0ec rcall OW_PRESENCE +000237 ff70 sbrs OWFR, OWPRF +000238 c006 rjmp _TEMP_CONV_EXIT -0001cf ec0c ldi r16, DS18B20_CMD_SKIPROM -0001d0 2e80 mov OW_CMD_r, r16 -0001d1 d0f1 rcall OW_SEND_BYTE +000239 ec0c ldi r16, DS18B20_CMD_SKIPROM +00023a 2e80 mov OW_CMD_r, r16 +00023b d0fc rcall OW_SEND_BYTE -0001d2 e404 ldi r16, DS18B20_CMD_CONVERTTEMP -0001d3 2e80 mov OW_CMD_r, r16 -0001d4 d0ee rcall OW_SEND_BYTE +00023c e404 ldi r16, DS18B20_CMD_CONVERTTEMP +00023d 2e80 mov OW_CMD_r, r16 +00023e d0f9 rcall OW_SEND_BYTE _TEMP_CONV_EXIT: -0001d5 910f pop r16 -0001d6 9508 ret +00023f 910f pop r16 +000240 9508 ret // // ; **** ОТПРАВКА БАЙТА В СДВИГОВЫЙ РЕГИСТР ************************* USI_TRANSMIT: -0001d7 930f push r16 -0001d8 920f push r0 -0001d9 b80f out USIDR, r0 ; Байт для отправки всегда находится в регистре r0. Помещаем данные в регистр USIDR. +000241 930f push r16 +000242 920f push r0 +000243 b80f out USIDR, r0 ; Байт для отправки всегда находится в регистре r0. Помещаем данные в регистр USIDR. ; Enable USI Overflow Interrupt Flag (will be 0 if transfer is not compeleted) -0001da e400 ldi TEMP_REG_A, (1< USI Clock Source Select ; USICLK <--------------> USI Clock Strobe ; USITC <--------------> USI Toggle Clock (Enable clock generation) -0001dc e10b ldi TEMP_REG_A, (1< BUTTON_PROCESS: -0001e5 930f push r16 +00024f 930f push r16 _SW_CHECK_ON_0: -0001e6 9bb4 sbis SW_PIN, SW_SET_PIN -0001e7 c001 rjmp _SW_SET_0 -0001e8 c01a rjmp _SW_CHECK_ON_1 +000250 9bb4 sbis SW_PIN, SW_SET_PIN +000251 c001 rjmp _SW_SET_0 +000252 c01c rjmp _SW_CHECK_ON_1 _SW_SET_0: -0001e9 9100 0071 lds r16, SW_DATA -0001eb 2300 tst r16 -0001ec f409 brne _SW_SET_FROM_0_TO_1 -0001ed c015 rjmp _SW_CHECK_ON_1 +000253 9100 0071 lds r16, SW_DATA +000255 2300 tst r16 +000256 f409 brne _SW_SET_FROM_0_TO_1 +000257 c017 rjmp _SW_CHECK_ON_1 _SW_SET_FROM_0_TO_1: -0001ee 2700 clr r16 -0001ef 9300 0071 sts SW_DATA, r16 -0001f1 d13d rcall DEBOUNCE_SW -0001f2 9463 inc REPROGRAM_STEP_r -0001f3 2d16 mov r17, REPROGRAM_STEP_r -0001f4 3014 cpi r17, 4 -0001f5 f414 brge _SAVE_SETTINGS -0001f6 d12a rcall BEEP_SHORT -0001f7 c00b rjmp _SW_CHECK_ON_1 +000258 2700 clr r16 +000259 9300 0071 sts SW_DATA, r16 +00025b d148 rcall DEBOUNCE_SW +00025c 9463 inc REPROGRAM_STEP_r +00025d 2d16 mov r17, REPROGRAM_STEP_r +00025e 3014 cpi r17, 4 +00025f f414 brge _SAVE_SETTINGS +000260 d135 rcall BEEP_SHORT +000261 c00d rjmp _SW_CHECK_ON_1 _SAVE_SETTINGS: -0001f8 e010 -0001f9 bf19 outi r17, TIMSK, (0< REPROGRAM_SETTINGS: -000211 930f push r16 -000212 931f push r17 -000213 932f push r18 -000214 933f push r19 -000215 934f push r20 +00027d 930f push r16 +00027e 931f push r17 +00027f 932f push r18 +000280 933f push r19 +000281 934f push r20 -000216 2d06 mov r16, REPROGRAM_STEP_r -000217 2300 tst r16 -000218 f009 breq _INTO -000219 c002 rjmp _REPROGRAM_SETTINGS_LOOP +000282 2d06 mov r16, REPROGRAM_STEP_r +000283 2300 tst r16 +000284 f009 breq _INTO +000285 c004 rjmp _REPROGRAM_SETTINGS_LOOP _INTO: -00021a d106 rcall BEEP_SHORT -00021b 9463 inc REPROGRAM_STEP_r +000286 9890 relay_off +000287 9a96 sbi PORTD, LED_PGM_PIN +000288 d10d rcall BEEP_SHORT +000289 9463 inc REPROGRAM_STEP_r _REPROGRAM_SETTINGS_LOOP: -00021c dfc8 rcall BUTTON_PROCESS +00028a dfc4 rcall BUTTON_PROCESS _CHECK_STEP: -00021d 3001 cpi r16, 1 -00021e f029 breq _STEP_1 -00021f 3002 cpi r16, 2 -000220 f149 breq _STEP_2 -000221 3003 cpi r16, 3 -000222 f131 breq _S3_JMP -000223 c084 rjmp _REPROGRAM_SETTINGS_END +00028b 3001 cpi r16, 1 +00028c f029 breq _STEP_1 +00028d 3002 cpi r16, 2 +00028e f149 breq _STEP_2 +00028f 3003 cpi r16, 3 +000290 f131 breq _S3_JMP +000291 c08b rjmp _REPROGRAM_SETTINGS_END // _STEP_1: ; установка и отображение гистерезиса -000224 0000 nop +000292 d0de rcall DISPLAY_UPD_DIGITS _S1_CHECK_PLUS: -000225 9bb2 sbis SW_PIN, SW_PLUS_PIN -000226 c004 rjmp _INCREASE_HYST -000227 c000 rjmp _S1_CHECK_MINUS +000293 9bb2 sbis SW_PIN, SW_PLUS_PIN +000294 c004 rjmp _INCREASE_HYST +000295 c000 rjmp _S1_CHECK_MINUS _S1_CHECK_MINUS: -000228 9bb3 sbis SW_PIN, SW_MINUS_PIN -000229 c00a rjmp _DECREASE_HYST -00022a c011 rjmp _SHOW_HYST +000296 9bb3 sbis SW_PIN, SW_MINUS_PIN +000297 c00a rjmp _DECREASE_HYST +000298 c011 rjmp _SHOW_HYST _INCREASE_HYST: -00022b d103 rcall DEBOUNCE_SW -00022c 9110 006d lds r17, SETTING_HYST -00022e 3c18 cpi r17, MAX_HYST -00022f f009 breq PC+2 -000230 9513 inc r17 -000231 9310 006d sts SETTING_HYST, r17 -000233 c008 rjmp _SHOW_HYST +000299 d10a rcall DEBOUNCE_SW +00029a 9110 006d lds r17, SETTING_HYST +00029c 3c18 cpi r17, MAX_HYST +00029d f009 breq PC+2 +00029e 9513 inc r17 +00029f 9310 006d sts SETTING_HYST, r17 +0002a1 c008 rjmp _SHOW_HYST _DECREASE_HYST: -000234 d0fa rcall DEBOUNCE_SW -000235 9110 006d lds r17, SETTING_HYST -000237 3011 cpi r17, MIN_HYST -000238 f009 breq PC+2 -000239 951a dec r17 -00023a 9310 006d sts SETTING_HYST, r17 +0002a2 d101 rcall DEBOUNCE_SW +0002a3 9110 006d lds r17, SETTING_HYST +0002a5 3011 cpi r17, MIN_HYST +0002a6 f009 breq PC+2 +0002a7 951a dec r17 +0002a8 9310 006d sts SETTING_HYST, r17 _SHOW_HYST: -00023c 930f push dd8u -00023d 931f push dv8u -00023e 9100 006d lds dd8u, SETTING_HYST -000240 e01a ldi dv8u, 10 -000241 de9e rcall div8u -000242 2f80 mov DISP_NUM_L, dres8u -000243 2799 clr DISP_NUM_H ; гистерезис 8 битный так что ноль пишем в старший байт -000244 92f0 0066 sts DIGITS+3, drem8u -000246 911f pop dv8u -000247 910f pop dd8u -000248 c05f rjmp _REPROGRAM_SETTINGS_END +0002aa 930f push dd8u +0002ab 931f push dv8u +0002ac 9100 006d lds dd8u, SETTING_HYST +0002ae e01a ldi dv8u, 10 +0002af de48 rcall div8u +0002b0 2f80 mov DISP_NUM_L, dres8u +0002b1 2799 clr DISP_NUM_H ; гистерезис 8 битный так что ноль пишем в старший байт +0002b2 92f0 0066 sts DIGITS+3, drem8u +0002b4 911f pop dv8u +0002b5 910f pop dd8u +0002b6 c066 rjmp _REPROGRAM_SETTINGS_END // _S3_JMP: ; просто прыжок на _STEP_3 -000249 c03f rjmp _STEP_3 +0002b7 c03f rjmp _STEP_3 // _STEP_2: -00024a 0000 nop +0002b8 d0b8 rcall DISPLAY_UPD_DIGITS _S2_CHECK_PLUS: -00024b 9bb2 sbis SW_PIN, SW_PLUS_PIN -00024c c004 rjmp _INCREASE_TEMP -00024d c000 rjmp _S2_CHECK_MINUS +0002b9 9bb2 sbis SW_PIN, SW_PLUS_PIN +0002ba c004 rjmp _INCREASE_TEMP +0002bb c000 rjmp _S2_CHECK_MINUS _S2_CHECK_MINUS: -00024e 9bb3 sbis SW_PIN, SW_MINUS_PIN -00024f c00f rjmp _DECREASE_TEMP -000250 c019 rjmp _SHOW_TEMP +0002bc 9bb3 sbis SW_PIN, SW_MINUS_PIN +0002bd c00f rjmp _DECREASE_TEMP +0002be c019 rjmp _SHOW_TEMP _INCREASE_TEMP: -000251 d0dd rcall DEBOUNCE_SW -000252 9110 006c lds r17, SETTING_TEMP_L -000254 9120 006b lds r18, SETTING_TEMP_H -000256 e03a ldi r19, 10 -000257 0f13 add r17, r19 -000258 2733 clr r19 -000259 1f23 adc r18, r19 -00025a 9310 006c sts SETTING_TEMP_L, r17 -00025c 9320 006b sts SETTING_TEMP_H, r18 -00025e c00b rjmp _SHOW_TEMP +0002bf d0e4 rcall DEBOUNCE_SW +0002c0 9110 006c lds r17, SETTING_TEMP_L +0002c2 9120 006b lds r18, SETTING_TEMP_H +0002c4 e03a ldi r19, 10 +0002c5 0f13 add r17, r19 +0002c6 2733 clr r19 +0002c7 1f23 adc r18, r19 +0002c8 9310 006c sts SETTING_TEMP_L, r17 +0002ca 9320 006b sts SETTING_TEMP_H, r18 +0002cc c00b rjmp _SHOW_TEMP _DECREASE_TEMP: -00025f d0cf rcall DEBOUNCE_SW -000260 9110 006c lds r17, SETTING_TEMP_L -000262 9120 006b lds r18, SETTING_TEMP_H -000264 501a subi r17, 10 -000265 4020 sbci r18, 0 -000266 9310 006c sts SETTING_TEMP_L, r17 -000268 9320 006b sts SETTING_TEMP_H, r18 +0002cd d0d6 rcall DEBOUNCE_SW +0002ce 9110 006c lds r17, SETTING_TEMP_L +0002d0 9120 006b lds r18, SETTING_TEMP_H +0002d2 501a subi r17, 10 +0002d3 4020 sbci r18, 0 +0002d4 9310 006c sts SETTING_TEMP_L, r17 +0002d6 9320 006b sts SETTING_TEMP_H, r18 _SHOW_TEMP: -00026a 930f push dd16uL -00026b 931f push dd16uH -00026c 932f push dv16uL -00026d 933f push dv16uH +0002d8 930f push dd16uL +0002d9 931f push dd16uH +0002da 932f push dv16uL +0002db 933f push dv16uH -00026e 9100 006c lds dd16uL, SETTING_TEMP_L -000270 9110 006b lds dd16uH, SETTING_TEMP_H -000272 2f21 mov r18, dd16uH -000273 7820 andi r18, (1<<7) -000274 f411 brne _NEGATE_SET_TEMP -000275 94e8 clt -000276 c005 rjmp _DIVIDE_SET_TEMP +0002dc 9100 006c lds dd16uL, SETTING_TEMP_L +0002de 9110 006b lds dd16uH, SETTING_TEMP_H +0002e0 2f21 mov r18, dd16uH +0002e1 7820 andi r18, (1<<7) +0002e2 f411 brne _NEGATE_SET_TEMP +0002e3 94e8 clt +0002e4 c005 rjmp _DIVIDE_SET_TEMP _NEGATE_SET_TEMP: -000277 9468 set -000278 9500 -000279 9510 -00027a 5f0f -00027b 4f1f com16 dd16uL, dd16uH +0002e5 9468 set +0002e6 9500 +0002e7 9510 +0002e8 5f0f +0002e9 4f1f com16 dd16uL, dd16uH _DIVIDE_SET_TEMP: -00027c e02a ldi dv16uL, LOW(10) -00027d e030 ldi dv16uH, HIGH(10) -00027e de4e rcall div16u -00027f 2f80 mov DISP_NUM_L, dres16uL -000280 2f91 mov DISP_NUM_H, dres16uH +0002ea e02a ldi dv16uL, LOW(10) +0002eb e030 ldi dv16uH, HIGH(10) +0002ec ddf8 rcall div16u +0002ed 2f80 mov DISP_NUM_L, dres16uL +0002ee 2f91 mov DISP_NUM_H, dres16uH -000281 e00a ldi r16, 10 -000282 9300 0066 sts DIGITS+3, r16 ; значок градуса +0002ef e00a ldi r16, 10 +0002f0 9300 0066 sts DIGITS+3, r16 ; значок градуса -000284 913f pop dv16uH -000285 912f pop dv16uL -000286 911f pop dd16uH -000287 910f pop dd16uL -000288 c01f rjmp _REPROGRAM_SETTINGS_END +0002f2 913f pop dv16uH +0002f3 912f pop dv16uL +0002f4 911f pop dd16uH +0002f5 910f pop dd16uL +0002f6 c026 rjmp _REPROGRAM_SETTINGS_END // // _STEP_3: -000289 94e8 clt +0002f7 94e8 clt _S3_CHECK_PLUS: -00028a 9bb2 sbis SW_PIN, SW_PLUS_PIN -00028b c004 rjmp _SET_HEAT_MODE -00028c c000 rjmp _S3_CHECK_MINUS +0002f8 9bb2 sbis SW_PIN, SW_PLUS_PIN +0002f9 c004 rjmp _SET_HEAT_MODE +0002fa c000 rjmp _S3_CHECK_MINUS _S3_CHECK_MINUS: -00028d 9bb3 sbis SW_PIN, SW_MINUS_PIN -00028e c006 rjmp _SET_COOLING_MODE -00028f c009 rjmp _SHOW_MODE +0002fb 9bb3 sbis SW_PIN, SW_MINUS_PIN +0002fc c006 rjmp _SET_COOLING_MODE +0002fd c009 rjmp _SHOW_MODE _SET_HEAT_MODE: -000290 d09e rcall DEBOUNCE_SW -000291 e011 ldi r17, HEAT_MODE -000292 9310 006e sts SETTING_MODE, r17 -000294 c004 rjmp _SHOW_MODE +0002fe d0a5 rcall DEBOUNCE_SW +0002ff e011 ldi r17, HEAT_MODE +000300 9310 006e sts SETTING_MODE, r17 +000302 c004 rjmp _SHOW_MODE _SET_COOLING_MODE: -000295 d099 rcall DEBOUNCE_SW -000296 e010 ldi r17, COOLING_MODE -000297 9310 006e sts SETTING_MODE, r17 +000303 d0a0 rcall DEBOUNCE_SW +000304 e010 ldi r17, COOLING_MODE +000305 9310 006e sts SETTING_MODE, r17 _SHOW_MODE: -000299 2711 clr r17 -00029a 2f81 mov DISP_NUM_L, r17 -00029b 2f91 mov DISP_NUM_H, r17 -00029c 9120 006e lds r18, SETTING_MODE -00029e 2322 tst r18 -00029f f009 breq _SHOW_COOLING -0002a0 c004 rjmp _SHOW_HEATING +000307 2711 clr r17 +000308 2f81 mov DISP_NUM_L, r17 +000309 2f91 mov DISP_NUM_H, r17 +00030a 2711 clr r17 +00030b 9310 0063 sts DIGITS, r17 +00030d 9310 0064 sts DIGITS+1, r17 +00030f 9310 0065 sts DIGITS+2, r17 +000311 9120 006e lds r18, SETTING_MODE +000313 2322 tst r18 +000314 f009 breq _SHOW_COOLING +000315 c004 rjmp _SHOW_HEATING _SHOW_COOLING: -0002a1 e01c ldi r17, 12 -0002a2 9310 0066 sts DIGITS+3, r17 -0002a4 c003 rjmp _REPROGRAM_SETTINGS_END +000316 e01c ldi r17, 12 +000317 9310 0066 sts DIGITS+3, r17 +000319 c003 rjmp _REPROGRAM_SETTINGS_END _SHOW_HEATING: -0002a5 e01d ldi r17, 13 -0002a6 9310 0066 sts DIGITS+3, r17 +00031a e01d ldi r17, 13 +00031b 9310 0066 sts DIGITS+3, r17 // _REPROGRAM_SETTINGS_END: -0002a8 914f pop r20 -0002a9 913f pop r19 -0002aa 912f pop r18 -0002ab 911f pop r17 -0002ac 910f pop r16 -0002ad 9508 ret +00031d 914f pop r20 +00031e 913f pop r19 +00031f 912f pop r18 +000320 911f pop r17 +000321 910f pop r16 +000322 9508 ret // - - ;DBG_LED_TOGGLE: - ; push r18 - ; push r19 - ; in r18, PIND - ; ldi r19, (1< // ; **** ОПРОС ПРИСУТСТВИЯ УСТРОЙСТВА ****************************** OW_PRESENCE: -0002ae 94f8 cli -0002af 9ab9 ow_pull -0002b0 e033 -0002b1 eb4e -0002b2 d08c DELAY16 480 -0002b3 98b9 ow_release -0002b4 e030 -0002b5 e84a -0002b6 d088 DELAY16 70 -0002b7 d005 rcall OW_CHECK_PRESENCE -0002b8 e033 -0002b9 e342 -0002ba d084 DELAY16 410 -0002bb 9478 sei -0002bc 9508 ret +000323 94f8 cli +000324 9ab9 ow_pull +000325 e033 +000326 eb4e +000327 d08c DELAY16 480 +000328 98b9 ow_release +000329 e030 +00032a e84a +00032b d088 DELAY16 70 +00032c d005 rcall OW_CHECK_PRESENCE +00032d e033 +00032e e342 +00032f d084 DELAY16 410 +000330 9478 sei +000331 9508 ret // // @@ -1926,83 +2077,83 @@ main.asm(297): Including file 'mpy16u.asm' ; Если подчиненное устройство притянет шину, то устанавливаем флаг OWPRF в единицу в регистре флагов ; OW_CHECK_PRESENCE: -0002bd 9bb1 sbis OW_PIN, OW_LINE -0002be 6071 sbr OWFR, (1< // OW_SEND_BYTE: -0002c3 94f8 cli -0002c4 930f push r16 -0002c5 931f push r17 -0002c6 2d08 mov r16, OW_CMD_r -0002c7 e018 ldi r17, 8 +000338 94f8 cli +000339 930f push r16 +00033a 931f push r17 +00033b 2d08 mov r16, OW_CMD_r +00033c e018 ldi r17, 8 _OW_SEND_BYTE_LOOP: -0002c8 9506 lsr r16 -0002c9 f408 brcc _OW_SEND_0 -0002ca f048 brcs _OW_SEND_1 +00033d 9506 lsr r16 +00033e f408 brcc _OW_SEND_0 +00033f f048 brcs _OW_SEND_1 _OW_SEND_0: -0002cb 9ab9 ow_pull -0002cc e030 -0002cd e746 -0002ce d070 DELAY16 60 -0002cf 98b9 ow_release -0002d0 e030 -0002d1 e142 -0002d2 d06c DELAY16 10 -0002d3 c008 rjmp _OW_SEND_BYTE_END +000340 9ab9 ow_pull +000341 e030 +000342 e746 +000343 d070 DELAY16 60 +000344 98b9 ow_release +000345 e030 +000346 e142 +000347 d06c DELAY16 10 +000348 c008 rjmp _OW_SEND_BYTE_END _OW_SEND_1: -0002d4 9ab9 ow_pull -0002d5 e030 -0002d6 e04a -0002d7 d067 DELAY16 6 -0002d8 98b9 ow_release -0002d9 e030 -0002da e74e -0002db d063 DELAY16 64 +000349 9ab9 ow_pull +00034a e030 +00034b e04a +00034c d067 DELAY16 6 +00034d 98b9 ow_release +00034e e030 +00034f e74e +000350 d063 DELAY16 64 _OW_SEND_BYTE_END: -0002dc 951a dec r17 -0002dd f751 brne _OW_SEND_BYTE_LOOP -0002de 911f pop r17 -0002df 910f pop r16 -0002e0 9478 sei -0002e1 9508 ret +000351 951a dec r17 +000352 f751 brne _OW_SEND_BYTE_LOOP +000353 911f pop r17 +000354 910f pop r16 +000355 9478 sei +000356 9508 ret // // OW_RD_BYTE: -0002e2 94f8 cli -0002e3 930f push r16 -0002e4 931f push r17 -0002e5 2700 clr r16 -0002e6 e018 ldi r17, 8 +000357 94f8 cli +000358 930f push r16 +000359 931f push r17 +00035a 2700 clr r16 +00035b e018 ldi r17, 8 _OW_RD_BYTE_LP: -0002e7 9506 lsr r16 -0002e8 9ab9 ow_pull -0002e9 e030 -0002ea e04a -0002eb d053 DELAY16 6 -0002ec 98b9 ow_release -0002ed e030 -0002ee e140 -0002ef d04f DELAY16 9 -0002f0 99b1 sbic OW_PIN, OW_LINE -0002f1 6800 sbr r16, (1<<7) -0002f2 e030 -0002f3 e64c -0002f4 d04a DELAY16 55 -0002f5 951a dec r17 -0002f6 f781 brne _OW_RD_BYTE_LP -0002f7 930c st X, r16 -0002f8 911f pop r17 -0002f9 910f pop r16 -0002fa 9478 sei -0002fb 9508 ret +00035c 9506 lsr r16 +00035d 9ab9 ow_pull +00035e e030 +00035f e04a +000360 d053 DELAY16 6 +000361 98b9 ow_release +000362 e030 +000363 e140 +000364 d04f DELAY16 9 +000365 99b1 sbic OW_PIN, OW_LINE +000366 6800 sbr r16, (1<<7) +000367 e030 +000368 e64c +000369 d04a DELAY16 55 +00036a 951a dec r17 +00036b f781 brne _OW_RD_BYTE_LP +00036c 930c st X, r16 +00036d 911f pop r17 +00036e 910f pop r16 +00036f 9478 sei +000370 9508 ret // // @@ -2011,163 +2162,138 @@ main.asm(297): Including file 'mpy16u.asm' ; Описание: Перемещает цифры числа в соответствующие ячейки памяти в SRAM ; путем деления этого числа несколько раз DISPLAY_UPD_DIGITS: -0002fc 930f push r16 -0002fd 935f push r21 -0002fe e053 ldi r21, 3 +000371 930f push r16 +000372 935f push r21 +000373 e053 ldi r21, 3 ; инициализация указателя (за каждый проход цикла будет инкрементироваться) -0002ff e6a3 ldi XL, LOW(DIGITS) -000300 e0b0 ldi XH, HIGH(DIGITS) +000374 e6a3 ldi XL, LOW(DIGITS) +000375 e0b0 ldi XH, HIGH(DIGITS) .equ dividend = SRAM_TEMP_1 ; число которе будем делить .equ divisor = 10 ; на что делим ; загружаем число которое хотим поделить в адрес SRAM делимого -000301 9380 0061 sts dividend, DISP_NUM_L -000303 9390 0062 sts dividend+1, DISP_NUM_H +000376 9380 0061 sts dividend, DISP_NUM_L +000378 9390 0062 sts dividend+1, DISP_NUM_H ; четыре раза производим деление для получения остатков DIV_LOOP: ; заполняем нужные регистры -000305 9100 0061 lds dd16uL, dividend -000307 9110 0062 lds dd16uH, dividend+1 -000309 e02a ldi dv16uL, LOW(divisor) -00030a e030 ldi dv16uH, HIGH(divisor) +00037a 9100 0061 lds dd16uL, dividend +00037c 9110 0062 lds dd16uH, dividend+1 +00037e e02a ldi dv16uL, LOW(divisor) +00037f e030 ldi dv16uH, HIGH(divisor) -00030b ddc1 rcall div16u ; делим +000380 dd64 rcall div16u ; делим -00030c 92ed st X+, drem16uL ; сохраняем остаток в ячейку по указателю и увеличиваем его +000381 92ed st X+, drem16uL ; сохраняем остаток в ячейку по указателю и увеличиваем его ; обновляем делимое -00030d 9300 0061 sts dividend, dres16uL -00030f 9310 0062 sts dividend+1, dres16uH +000382 9300 0061 sts dividend, dres16uL +000384 9310 0062 sts dividend+1, dres16uH -000311 955a dec r21 ; декрементируем счетчик цикла -000312 f791 brne DIV_LOOP ; делим еще раз если не 0 -000313 915f pop r21 -000314 910f pop r16 -000315 9508 ret +000386 955a dec r21 ; декрементируем счетчик цикла +000387 f791 brne DIV_LOOP ; делим еще раз если не 0 +000388 915f pop r21 +000389 910f pop r16 +00038a 9508 ret // // ; **** ЗАГРУЖАЕТ НУЖНЫЙ АДРЕС СИМВОЛА В R0 *********************** DISPLAY_DECODER: -000316 930f push r16 -000317 931f push r17 +00038b 930f push r16 +00038c 931f push r17 -000318 ebe0 ldi ZL, LOW(2*DISPLAY_SYMBOLS) -000319 e0f6 ldi ZH, HIGH(2*DISPLAY_SYMBOLS) +00038d e7ea ldi ZL, LOW(2*DISPLAY_SYMBOLS) +00038e e0f7 ldi ZH, HIGH(2*DISPLAY_SYMBOLS) -00031a 2711 clr TEMP_REG_B -00031b 0fe0 add ZL, TEMP_REG_A -00031c 1ff1 adc ZH, TEMP_REG_B +00038f 2711 clr TEMP_REG_B +000390 0fe0 add ZL, TEMP_REG_A +000391 1ff1 adc ZH, TEMP_REG_B -00031d 9004 lpm r0, Z -00031e 911f pop r17 -00031f 910f pop r16 -000320 9508 ret +000392 9004 lpm r0, Z +000393 911f pop r17 +000394 910f pop r16 +000395 9508 ret // // BEEP_SHORT: -000321 9ac5 sbi BUZZER_PORT, BUZZER_PIN -000322 e053 -000323 ea39 -000324 e74d -000325 d01d DELAY24 150000 -000326 98c5 cbi BUZZER_PORT, BUZZER_PIN -000327 9508 ret +000396 9ac5 sbi BUZZER_PORT, BUZZER_PIN +000397 e053 +000398 ea39 +000399 e74d +00039a d01d DELAY24 150000 +00039b 98c5 cbi BUZZER_PORT, BUZZER_PIN +00039c 9508 ret // // BEEP_LONG: -000328 9ac5 sbi BUZZER_PORT, BUZZER_PIN -000329 e05c -00032a e334 -00032b ef4d -00032c d016 DELAY24 500000 -00032d 98c5 cbi BUZZER_PORT, BUZZER_PIN -00032e 9508 ret +00039d 9ac5 sbi BUZZER_PORT, BUZZER_PIN +00039e e05c +00039f e334 +0003a0 ef4d +0003a1 d016 DELAY24 500000 +0003a2 98c5 cbi BUZZER_PORT, BUZZER_PIN +0003a3 9508 ret // // DEBOUNCE_SW: -00032f 930f push r16 -000330 931f push r17 -000331 932f push r18 +0003a4 930f push r16 +0003a5 931f push r17 +0003a6 932f push r18 -000332 e02a ldi r18, 10 +0003a7 e02a ldi r18, 10 _loop_2: -000333 ef1f ldi r17, 255 +0003a8 ef1f ldi r17, 255 _loop_0: -000334 ef0f ldi r16, 255 +0003a9 ef0f ldi r16, 255 _dec_0: -000335 950a dec r16 -000336 f7f1 brne _dec_0 +0003aa 950a dec r16 +0003ab f7f1 brne _dec_0 _loop_1: -000337 951a dec r17 -000338 f7d9 brne _loop_0 +0003ac 951a dec r17 +0003ad f7d9 brne _loop_0 _loop_3: -000339 952a dec r18 -00033a f7c1 brne _loop_2 +0003ae 952a dec r18 +0003af f7c1 brne _loop_2 -00033b 912f pop r18 -00033c 911f pop r17 -00033d 910f pop r16 -00033e 9508 ret// +0003b0 912f pop r18 +0003b1 911f pop r17 +0003b2 910f pop r16 +0003b3 9508 ret// // DELAY_LOOP_16: -00033f 5041 subi DELAY_8_r, 1 -000340 4030 sbci DELAY_16_r, 0 -000341 f7e8 brcc DELAY_LOOP_16 -000342 9508 ret +0003b4 5041 subi DELAY_8_r, 1 +0003b5 4030 sbci DELAY_16_r, 0 +0003b6 f7e8 brcc DELAY_LOOP_16 +0003b7 9508 ret // // DELAY_LOOP_24: -000343 5041 subi DELAY_8_r, 1 -000344 4030 sbci DELAY_16_r, 0 -000345 4050 sbci DELAY_24_r, 0 -000346 f7e0 brcc DELAY_LOOP_24 -000347 9508 ret +0003b8 5041 subi DELAY_8_r, 1 +0003b9 4030 sbci DELAY_16_r, 0 +0003ba 4050 sbci DELAY_24_r, 0 +0003bb f7e0 brcc DELAY_LOOP_24 +0003bc 9508 ret // - // - DELAY: -000348 930f push r16 -000349 931f push r17 -00034a 932f push r18 - -00034b e026 ldi r18, 6 - _DELAY_0: -00034c ef0f ldi r16, 255 - _DELAY_1: -00034d ef1f ldi r17, 255 - _DELAY_2: -00034e 951a dec r17 -00034f f7f1 brne _DELAY_2 - -000350 950a dec r16 -000351 f7d9 brne _DELAY_1 -000352 952a dec r18 -000353 f7c1 brne _DELAY_0 - -000354 912f pop r18 -000355 911f pop r17 -000356 910f pop r16 -000357 9508 ret // - // DISPLAY_SYMBOLS: ; HGFEDCBA HGFEDCBA -000358 f9c0 .DB 0b11000000, 0b11111001 ; 0, 1 -000359 b0a4 .DB 0b10100100, 0b10110000 ; 2, 3 -00035a 9299 .DB 0b10011001, 0b10010010 ; 4, 5 -00035b f882 .DB 0b10000010, 0b11111000 ; 6, 7 -00035c 9080 .DB 0b10000000, 0b10010000 ; 8, 9 -00035d bf9c .DB 0b10011100, 0b10111111 ; °, - -00035e 89c6 .DB 0b11000110, 0b10001001 ; C, H +0003bd f9c0 .DB 0b11000000, 0b11111001 ; 0, 1 +0003be b0a4 .DB 0b10100100, 0b10110000 ; 2, 3 +0003bf 9299 .DB 0b10011001, 0b10010010 ; 4, 5 +0003c0 f882 .DB 0b10000010, 0b11111000 ; 6, 7 +0003c1 9080 .DB 0b10000000, 0b10010000 ; 8, 9 +0003c2 bf9c .DB 0b10011100, 0b10111111 ; °, - +0003c3 89c6 .DB 0b11000110, 0b10001001 ; C, H // // @@ -2176,11 +2302,47 @@ main.asm(297): Including file 'mpy16u.asm' ; **** СЕГМЕНТ EEPROM ******************************************** .ESEG -000000 E_SETTING_TEMP_H: .BYTE 1 -000001 E_SETTING_TEMP_L: .BYTE 1 -000002 E_SETTING_HYST: .BYTE 1 -000003 E_SETTING_MODE: .BYTE 1 -000004 E_FIRST_TIME_RUN: .BYTE 1 + .ORG 0x30 +000030 41 +000031 56 +000032 52 +000033 20 +000034 54 +000035 68 +000036 65 +000037 72 +000038 6d +000039 6f +00003a 73 +00003b 74 +00003c 61 +00003d 74 +00003e 2e +00003f 20 +000040 57 +000041 72 +000042 69 +000043 74 +000044 74 +000045 65 +000046 6e +000047 20 +000048 62 +000049 79 +00004a 20 +00004b 53 +00004c 65 +00004d 72 +00004e 67 +00004f 65 +000050 79 +000051 20 +000052 59 +000053 61 +000054 72 +000055 6b +000056 6f +000057 76 INFO: .DB "AVR Thermostat. Written by Sergey Yarkov" ; @@ -2199,39 +2361,39 @@ counted separately from r26..r31 here. .dseg memory usage only counts static data declared with .byte "ATtiny2313A" register use summary: -x : 2 y : 0 z : 1 r0 : 6 r1 : 2 r2 : 0 r3 : 0 r4 : 0 +x : 2 y : 0 z : 1 r0 : 6 r1 : 2 r2 : 0 r3 : 16 r4 : 16 r5 : 6 r6 : 6 r7 : 0 r8 : 6 r9 : 0 r10: 2 r11: 2 r12: 2 -r13: 2 r14: 5 r15: 11 r16: 167 r17: 110 r18: 55 r19: 55 r20: 53 +r13: 2 r14: 5 r15: 11 r16: 213 r17: 117 r18: 51 r19: 55 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: 27 out of 35 (77.1%) +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 : 11 brge : 4 brhc : 0 +brcc : 6 brcs : 1 break : 0 breq : 12 brge : 4 brhc : 0 brhs : 0 brid : 0 brie : 0 brlo : 0 brlt : 0 brmi : 0 -brne : 26 brpl : 0 brsh : 0 brtc : 1 brts : 2 brvc : 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 : 3 cln : 0 clr : 18 cls : 0 clt : 3 -clv : 0 clz : 0 com : 6 cp : 2 cpc : 2 cpi : 16 -cpse : 0 dec : 14 eor : 0 icall : 0 ijmp : 0 in : 4 -inc : 4 ld : 0 ldd : 0 ldi : 100 lds : 39 lpm : 2 -lsl : 4 lsr : 11 mov : 31 movw : 0 neg : 1 nop : 2 -or : 1 ori : 0 out : 21 pop : 57 push : 56 rcall : 64 -ret : 25 reti : 3 rjmp : 58 rol : 6 ror : 9 sbc : 2 -sbci : 7 sbi : 14 sbic : 3 sbis : 10 sbiw : 0 sbr : 2 -sbrc : 0 sbrs : 2 sec : 2 seh : 0 sei : 3 sen : 0 +clh : 0 cli : 5 cln : 0 clr : 19 cls : 0 clt : 3 +clv : 0 clz : 0 com : 6 cp : 2 cpc : 2 cpi : 17 +cpse : 0 dec : 11 eor : 0 icall : 0 ijmp : 0 in : 5 +inc : 4 ld : 0 ldd : 0 ldi : 115 lds : 43 lpm : 2 +lsl : 4 lsr : 11 mov : 55 movw : 0 neg : 1 nop : 0 +or : 1 ori : 0 out : 26 pop : 56 push : 55 rcall : 82 +ret : 28 reti : 3 rjmp : 61 rol : 6 ror : 9 sbc : 2 +sbci : 7 sbi : 17 sbic : 5 sbis : 10 sbiw : 0 sbr : 2 +sbrc : 0 sbrs : 2 sec : 2 seh : 0 sei : 5 sen : 0 ser : 2 ses : 0 set : 2 sev : 0 sez : 0 sleep : 0 -spm : 0 st : 2 std : 0 sts : 37 sub : 5 subi : 6 +spm : 0 st : 2 std : 0 sts : 48 sub : 5 subi : 6 swap : 0 tst : 7 wdr : 0 -Instructions used: 57 out of 105 (54.3%) +Instructions used: 56 out of 105 (53.3%) "ATtiny2313A" memory use summary [bytes]: Segment Begin End Code Data Used Size Use% --------------------------------------------------------------- -[.cseg] 0x000000 0x0006be 1692 14 1706 2048 83.3% +[.cseg] 0x000000 0x000788 1894 14 1908 2048 93.2% [.dseg] 0x000060 0x000072 0 18 18 128 14.1% -[.eseg] 0x000000 0x000005 0 5 5 128 3.9% +[.eseg] 0x000030 0x000058 0 40 40 128 31.3% Assembly complete, 0 errors, 21 warnings diff --git a/dist/default/production/attiny2313a_thermostat.X.production.map b/dist/default/production/attiny2313a_thermostat.X.production.map index bd5befe..3323986 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 Thu Jun 29 23:01:33 2023 +AVRASM ver. 2.2.7 main.asm Fri Jun 30 16:51:54 2023 EQU SIGNATURE_000 0000001e @@ -486,13 +486,15 @@ DEF DELAY_8_r r20 DEF DELAY_24_r r21 DEF DISP_NUM_L r24 DEF DISP_NUM_H r25 +DEF EEP_A_r r3 +DEF EEP_D_r r4 DEF REPROGRAM_STEP_r r6 EQU DIGIT_1_PIN 00000002 EQU DIGIT_2_PIN 00000003 EQU DIGIT_3_PIN 00000004 EQU DIGIT_4_PIN 00000005 -EQU LED_ERR_PIN 00000006 -EQU LED_ERR_PORT 00000012 +EQU LED_PGM_PIN 00000006 +EQU LED_PGM_PORT 00000012 EQU OW_LINE 00000001 EQU OW_DDR 00000017 EQU OW_PIN 00000016 @@ -538,6 +540,11 @@ EQU DEFAULT_SETTING_TEMP_L 0000002c EQU DEFAULT_SETTING_TEMP_H 00000001 EQU DEFAULT_SETTING_HYST 00000005 EQU DEFAULT_SETTING_MODE 00000001 +EQU EEP_SETTING_TEMP_H 00000000 +EQU EEP_SETTING_TEMP_L 00000001 +EQU EEP_SETTING_HYST 00000002 +EQU EEP_SETTING_MODE 00000003 +EQU EEP_FIRST_TIME_RUN 00000004 DSEG MCU_STATE 00000060 DSEG SRAM_TEMP_1 00000061 DSEG DIGITS 00000063 @@ -560,26 +567,31 @@ CSEG _INTO_PROGRAM_STATE 00000014 CSEG _CLR_CURRENT_DIGIT 00000027 CSEG _indicate_1 0000002a CSEG _indicate_2 0000003c -CSEG DISPLAY_DECODER 00000316 -CSEG USI_TRANSMIT 000001d7 +CSEG DISPLAY_DECODER 0000038b +CSEG USI_TRANSMIT 00000241 CSEG _indicate_3 0000004e CSEG _indicate_4 0000005b CSEG _indicate_exit 00000065 CSEG MCU_INIT 00000072 -CSEG RD_F_CODE 00000177 -CSEG ERR_FAMILY_CODE 000000ae -CSEG START_PROGRAM 000000b3 -CSEG BEEP_LONG 00000328 -CSEG BEEP_SHORT 00000321 -CSEG LOOP 000000b6 -CSEG DISPLAY_UPD_DIGITS 000002fc -CSEG _STATE_DEFAULT 000000b9 -CSEG _STATE_PROGRAM 000000c5 -CSEG TEMP_UPD 00000168 -CSEG TEMP_COMPARSION 0000011b -CSEG TEMP_SEND_UART 000000fd -CSEG _STATE_ERROR 000000c9 -CSEG REPROGRAM_SETTINGS 00000211 +CSEG EEP_RD_BYTE 0000017d +CSEG _INIT_PARAMS 00000098 +CSEG _FIRST_TIME_RUN 00000096 +CSEG INIT_DEFAULT_PARAMS 00000133 +CSEG _CONTINUE_INIT 000000ac +CSEG RD_F_CODE 000001e1 +CSEG ERR_FAMILY_CODE 000000be +CSEG START_PROGRAM 000000c3 +CSEG BEEP_LONG 0000039d +CSEG BEEP_SHORT 00000396 +CSEG LOOP 000000c6 +CSEG _STATE_DEFAULT 000000c8 +CSEG _STATE_PROGRAM 000000d4 +CSEG TEMP_UPD 000001d2 +CSEG DISPLAY_UPD_DIGITS 00000371 +CSEG TEMP_COMPARSION 00000185 +CSEG TEMP_SEND_UART 00000115 +CSEG _STATE_ERROR 000000d7 +CSEG REPROGRAM_SETTINGS 0000027d DEF drem16uL r14 DEF drem16uH r15 DEF dres16uL r16 @@ -589,19 +601,19 @@ DEF dd16uH r17 DEF dv16uL r18 DEF dv16uH r19 DEF dcnt16u r20 -CSEG div16u 000000cd -CSEG d16u_1 000000d0 -CSEG d16u_2 000000d5 -CSEG d16u_3 000000de +CSEG div16u 000000e5 +CSEG d16u_1 000000e8 +CSEG d16u_2 000000ed +CSEG d16u_3 000000f6 DEF drem8u r15 DEF dres8u r16 DEF dd8u r16 DEF dv8u r17 DEF dcnt8u r18 -CSEG div8u 000000e0 -CSEG d8u_1 000000e2 -CSEG d8u_2 000000e6 -CSEG d8u_3 000000ec +CSEG div8u 000000f8 +CSEG d8u_1 000000fa +CSEG d8u_2 000000fe +CSEG d8u_3 00000104 DEF mc16uL r16 DEF mc16uH r17 DEF mp16uL r18 @@ -611,94 +623,90 @@ DEF m16u1 r19 DEF m16u2 r20 DEF m16u3 r21 DEF mcnt16u r22 -CSEG mpy16u 000000ee -CSEG m16u_1 000000f3 -CSEG noad8 000000f6 -CSEG UART_WR_BYTE 00000117 -CSEG _TEMP_SEND_UART_L 00000111 +CSEG mpy16u 00000106 +CSEG m16u_1 0000010b +CSEG noad8 0000010e +CSEG UART_WR_BYTE 0000012f +CSEG _TEMP_SEND_UART_L 00000129 +CSEG EEP_WR_BYTE 00000170 +CSEG WRITE_PARAMS_TO_EEP 00000155 +CSEG _EEP_WR_BYTE_LP 00000172 +CSEG _EEP_RD_BYTE_LP 0000017e 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 00000146 -CSEG _COMPARE 0000014a -CSEG _MIN_THRESHOLD 00000151 -CSEG _MAX_THRESHOLD 00000159 -CSEG _COMPARSION_EXIT 00000160 -CSEG TEMP_CONV 000001cb -CSEG DELAY_LOOP_24 00000343 -CSEG TEMP_RD 00000181 -CSEG OW_PRESENCE 000002ae -CSEG OW_SEND_BYTE 000002c3 -CSEG OW_RD_BYTE 000002e2 -CSEG _TEMP_RD_EXIT 000001c5 -CSEG _TEMP_RD_TO_UNSIGNED 0000019f -CSEG _TEMP_RD_CONTINUE 000001a6 -CSEG _TEMP_RD_END 000001af -CSEG _TEMP_CONV_EXIT 000001d5 -CSEG _USI_TRANSMIT_LOOP 000001dd -CSEG BUTTON_PROCESS 000001e5 -CSEG _SW_CHECK_ON_0 000001e6 -CSEG _SW_SET_0 000001e9 -CSEG _SW_CHECK_ON_1 00000203 -CSEG _SW_SET_FROM_0_TO_1 000001ee -CSEG DEBOUNCE_SW 0000032f -CSEG _SAVE_SETTINGS 000001f8 -CSEG _SW_SET_1 00000206 -CSEG _BUTTON_PROCESS_END 0000020f -CSEG _SW_SET_FROM_1_TO_0 0000020b -CSEG _INTO 0000021a -CSEG _REPROGRAM_SETTINGS_LOOP 0000021c -CSEG _CHECK_STEP 0000021d -CSEG _STEP_1 00000224 -CSEG _STEP_2 0000024a -CSEG _S3_JMP 00000249 -CSEG _REPROGRAM_SETTINGS_END 000002a8 -CSEG _S1_CHECK_PLUS 00000225 -CSEG _INCREASE_HYST 0000022b -CSEG _S1_CHECK_MINUS 00000228 -CSEG _DECREASE_HYST 00000234 -CSEG _SHOW_HYST 0000023c -CSEG _STEP_3 00000289 -CSEG _S2_CHECK_PLUS 0000024b -CSEG _INCREASE_TEMP 00000251 -CSEG _S2_CHECK_MINUS 0000024e -CSEG _DECREASE_TEMP 0000025f -CSEG _SHOW_TEMP 0000026a -CSEG _NEGATE_SET_TEMP 00000277 -CSEG _DIVIDE_SET_TEMP 0000027c -CSEG _S3_CHECK_PLUS 0000028a -CSEG _SET_HEAT_MODE 00000290 -CSEG _S3_CHECK_MINUS 0000028d -CSEG _SET_COOLING_MODE 00000295 -CSEG _SHOW_MODE 00000299 -CSEG _SHOW_COOLING 000002a1 -CSEG _SHOW_HEATING 000002a5 -CSEG DELAY_LOOP_16 0000033f -CSEG OW_CHECK_PRESENCE 000002bd -CSEG _EXIT 000002c2 -CSEG _OW_SEND_BYTE_LOOP 000002c8 -CSEG _OW_SEND_0 000002cb -CSEG _OW_SEND_1 000002d4 -CSEG _OW_SEND_BYTE_END 000002dc -CSEG _OW_RD_BYTE_LP 000002e7 +CSEG _NEGATE_TEMP 000001b0 +CSEG _COMPARE 000001b4 +CSEG _MIN_THRESHOLD 000001bb +CSEG _MAX_THRESHOLD 000001c3 +CSEG _COMPARSION_EXIT 000001ca +CSEG TEMP_CONV 00000235 +CSEG DELAY_LOOP_24 000003b8 +CSEG TEMP_RD 000001eb +CSEG OW_PRESENCE 00000323 +CSEG OW_SEND_BYTE 00000338 +CSEG OW_RD_BYTE 00000357 +CSEG _TEMP_RD_EXIT 0000022f +CSEG _TEMP_RD_TO_UNSIGNED 00000209 +CSEG _TEMP_RD_CONTINUE 00000210 +CSEG _TEMP_RD_END 00000219 +CSEG _TEMP_CONV_EXIT 0000023f +CSEG _USI_TRANSMIT_LOOP 00000247 +CSEG BUTTON_PROCESS 0000024f +CSEG _SW_CHECK_ON_0 00000250 +CSEG _SW_SET_0 00000253 +CSEG _SW_CHECK_ON_1 0000026f +CSEG _SW_SET_FROM_0_TO_1 00000258 +CSEG DEBOUNCE_SW 000003a4 +CSEG _SAVE_SETTINGS 00000262 +CSEG _SW_SET_1 00000272 +CSEG _BUTTON_PROCESS_END 0000027b +CSEG _SW_SET_FROM_1_TO_0 00000277 +CSEG _INTO 00000286 +CSEG _REPROGRAM_SETTINGS_LOOP 0000028a +CSEG _CHECK_STEP 0000028b +CSEG _STEP_1 00000292 +CSEG _STEP_2 000002b8 +CSEG _S3_JMP 000002b7 +CSEG _REPROGRAM_SETTINGS_END 0000031d +CSEG _S1_CHECK_PLUS 00000293 +CSEG _INCREASE_HYST 00000299 +CSEG _S1_CHECK_MINUS 00000296 +CSEG _DECREASE_HYST 000002a2 +CSEG _SHOW_HYST 000002aa +CSEG _STEP_3 000002f7 +CSEG _S2_CHECK_PLUS 000002b9 +CSEG _INCREASE_TEMP 000002bf +CSEG _S2_CHECK_MINUS 000002bc +CSEG _DECREASE_TEMP 000002cd +CSEG _SHOW_TEMP 000002d8 +CSEG _NEGATE_SET_TEMP 000002e5 +CSEG _DIVIDE_SET_TEMP 000002ea +CSEG _S3_CHECK_PLUS 000002f8 +CSEG _SET_HEAT_MODE 000002fe +CSEG _S3_CHECK_MINUS 000002fb +CSEG _SET_COOLING_MODE 00000303 +CSEG _SHOW_MODE 00000307 +CSEG _SHOW_COOLING 00000316 +CSEG _SHOW_HEATING 0000031a +CSEG DELAY_LOOP_16 000003b4 +CSEG OW_CHECK_PRESENCE 00000332 +CSEG _EXIT 00000337 +CSEG _OW_SEND_BYTE_LOOP 0000033d +CSEG _OW_SEND_0 00000340 +CSEG _OW_SEND_1 00000349 +CSEG _OW_SEND_BYTE_END 00000351 +CSEG _OW_RD_BYTE_LP 0000035c EQU dividend 00000061 EQU divisor 0000000a -CSEG DIV_LOOP 00000305 -CSEG DISPLAY_SYMBOLS 00000358 -CSEG _loop_2 00000333 -CSEG _loop_0 00000334 -CSEG _dec_0 00000335 -CSEG _loop_1 00000337 -CSEG _loop_3 00000339 -CSEG DELAY 00000348 -CSEG _DELAY_0 0000034c -CSEG _DELAY_1 0000034d -CSEG _DELAY_2 0000034e -ESEG E_SETTING_TEMP_H 00000000 -ESEG E_SETTING_TEMP_L 00000001 -ESEG E_SETTING_HYST 00000002 -ESEG E_SETTING_MODE 00000003 -ESEG E_FIRST_TIME_RUN 00000004 +CSEG DIV_LOOP 0000037a +CSEG DISPLAY_SYMBOLS 000003bd +CSEG _loop_2 000003a8 +CSEG _loop_0 000003a9 +CSEG _dec_0 000003aa +CSEG _loop_1 000003ac +CSEG _loop_3 000003ae +ESEG INFO 00000030 diff --git a/dist/default/production/attiny2313a_thermostat.X.production.obj b/dist/default/production/attiny2313a_thermostat.X.production.obj index 219fb49bbe0a2f29a88cde2f0efd448b0de27f45..0dfd38b7a644dd6839a6c7ba94ee5738bb8684e9 100644 GIT binary patch literal 8767 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 WButNLIL%iI8~ZgOan}DA%KrhP^5UKV literal 7858 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.asm35 main.asm36 main.asm37 - main.asm184 + main.asm183 main.asm61 main.asm84 <_PCINT0_vect_end>main.asm75 @@ -48,26 +48,31 @@ <_CLR_CURRENT_DIGIT>main.asm98 <_indicate_1>main.asm102 <_indicate_2>main.asm122 - main.asm996 - main.asm592 + main.asm1138 + main.asm737 <_indicate_3>main.asm140 - <_indicate_4>main.asm156 - <_indicate_exit>main.asm168 - main.asm190 - main.asm458 - main.asm254 - main.asm259 - main.asm1022 - main.asm1014 - main.asm266 - main.asm955 - <_STATE_DEFAULT>main.asm269 - <_STATE_PROGRAM>main.asm281 - main.asm442 - main.asm345 - main.asm300 - <_STATE_ERROR>main.asm286 - main.asm675 + <_indicate_4>main.asm155 + <_indicate_exit>main.asm167 + main.asm189 + main.asm472 + <_INIT_PARAMS>main.asm230 + <_FIRST_TIME_RUN>main.asm227 + main.asm380 + <_CONTINUE_INIT>main.asm263 + main.asm603 + main.asm284 + main.asm289 + main.asm1164 + main.asm1156 + main.asm296 + <_STATE_DEFAULT>main.asm299 + <_STATE_PROGRAM>main.asm311 + main.asm587 + main.asm1097 + main.asm489 + main.asm334 + <_STATE_ERROR>main.asm315 + main.asm822 div16u.asm32 div16u.asm36 div16u.asm42 @@ -79,85 +84,81 @@ mpy16u.asm31 mpy16u.asm37 mpy16u.asm40 - main.asm338 - <_TEMP_SEND_UART_L>main.asm327 - <_NEGATE_TEMP>main.asm399 - <_COMPARE>main.asm405 - <_MIN_THRESHOLD>main.asm415 - <_MAX_THRESHOLD>main.asm424 - <_COMPARSION_EXIT>main.asm431 - main.asm570 - main.asm1064 - main.asm474 - main.asm868 - main.asm895 - main.asm926 - <_TEMP_RD_EXIT>main.asm562 - <_TEMP_RD_TO_UNSIGNED>main.asm511 - <_TEMP_RD_CONTINUE>main.asm524 - <_TEMP_RD_END>main.asm534 - <_TEMP_CONV_EXIT>main.asm585 - <_USI_TRANSMIT_LOOP>main.asm611 - main.asm625 - <_SW_CHECK_ON_0>main.asm627 - <_SW_SET_0>main.asm631 - <_SW_CHECK_ON_1>main.asm656 - <_SW_SET_FROM_0_TO_1>main.asm636 - main.asm1030 - <_SAVE_SETTINGS>main.asm646 - <_SW_SET_1>main.asm660 - <_BUTTON_PROCESS_END>main.asm669 - <_SW_SET_FROM_1_TO_0>main.asm665 - <_INTO>main.asm686 - <_REPROGRAM_SETTINGS_LOOP>main.asm689 - <_CHECK_STEP>main.asm691 - <_STEP_1>main.asm701 - <_STEP_2>main.asm744 - <_S3_JMP>main.asm740 - <_REPROGRAM_SETTINGS_END>main.asm845 - <_S1_CHECK_PLUS>main.asm703 - <_INCREASE_HYST>main.asm711 - <_S1_CHECK_MINUS>main.asm707 - <_DECREASE_HYST>main.asm719 - <_SHOW_HYST>main.asm726 - <_STEP_3>main.asm808 - <_S2_CHECK_PLUS>main.asm746 - <_INCREASE_TEMP>main.asm754 - <_S2_CHECK_MINUS>main.asm750 - <_DECREASE_TEMP>main.asm765 - <_SHOW_TEMP>main.asm773 - <_NEGATE_SET_TEMP>main.asm786 - <_DIVIDE_SET_TEMP>main.asm790 - <_S3_CHECK_PLUS>main.asm810 - <_SET_HEAT_MODE>main.asm818 - <_S3_CHECK_MINUS>main.asm814 - <_SET_COOLING_MODE>main.asm823 - <_SHOW_MODE>main.asm827 - <_SHOW_COOLING>main.asm836 - <_SHOW_HEATING>main.asm840 - main.asm1056 - main.asm884 - <_EXIT>main.asm890 - <_OW_SEND_BYTE_LOOP>main.asm901 - <_OW_SEND_0>main.asm905 - <_OW_SEND_1>main.asm911 - <_OW_SEND_BYTE_END>main.asm916 - <_OW_RD_BYTE_LP>main.asm932 - main.asm972 - main.asm1098 - <_loop_2>main.asm1036 - <_loop_0>main.asm1038 - <_dec_0>main.asm1040 - <_loop_1>main.asm1043 - <_loop_3>main.asm1046 - main.asm1073 - <_DELAY_0>main.asm1079 - <_DELAY_1>main.asm1081 - <_DELAY_2>main.asm1083 - main.asm1115 - main.asm1116 - main.asm1117 - main.asm1118 - main.asm1119 + main.asm372 + <_TEMP_SEND_UART_L>main.asm361 + main.asm447 + main.asm418 + <_EEP_WR_BYTE_LP>main.asm450 + <_EEP_RD_BYTE_LP>main.asm474 + <_NEGATE_TEMP>main.asm543 + <_COMPARE>main.asm549 + <_MIN_THRESHOLD>main.asm559 + <_MAX_THRESHOLD>main.asm568 + <_COMPARSION_EXIT>main.asm575 + main.asm715 + main.asm1206 + main.asm619 + main.asm1010 + main.asm1037 + main.asm1068 + <_TEMP_RD_EXIT>main.asm707 + <_TEMP_RD_TO_UNSIGNED>main.asm656 + <_TEMP_RD_CONTINUE>main.asm669 + <_TEMP_RD_END>main.asm679 + <_TEMP_CONV_EXIT>main.asm730 + <_USI_TRANSMIT_LOOP>main.asm756 + main.asm770 + <_SW_CHECK_ON_0>main.asm772 + <_SW_SET_0>main.asm776 + <_SW_CHECK_ON_1>main.asm803 + <_SW_SET_FROM_0_TO_1>main.asm781 + main.asm1172 + <_SAVE_SETTINGS>main.asm791 + <_SW_SET_1>main.asm807 + <_BUTTON_PROCESS_END>main.asm816 + <_SW_SET_FROM_1_TO_0>main.asm812 + <_INTO>main.asm833 + <_REPROGRAM_SETTINGS_LOOP>main.asm838 + <_CHECK_STEP>main.asm840 + <_STEP_1>main.asm850 + <_STEP_2>main.asm893 + <_S3_JMP>main.asm889 + <_REPROGRAM_SETTINGS_END>main.asm998 + <_S1_CHECK_PLUS>main.asm852 + <_INCREASE_HYST>main.asm860 + <_S1_CHECK_MINUS>main.asm856 + <_DECREASE_HYST>main.asm868 + <_SHOW_HYST>main.asm875 + <_STEP_3>main.asm957 + <_S2_CHECK_PLUS>main.asm895 + <_INCREASE_TEMP>main.asm903 + <_S2_CHECK_MINUS>main.asm899 + <_DECREASE_TEMP>main.asm914 + <_SHOW_TEMP>main.asm922 + <_NEGATE_SET_TEMP>main.asm935 + <_DIVIDE_SET_TEMP>main.asm939 + <_S3_CHECK_PLUS>main.asm959 + <_SET_HEAT_MODE>main.asm967 + <_S3_CHECK_MINUS>main.asm963 + <_SET_COOLING_MODE>main.asm972 + <_SHOW_MODE>main.asm976 + <_SHOW_COOLING>main.asm989 + <_SHOW_HEATING>main.asm993 + main.asm1198 + main.asm1026 + <_EXIT>main.asm1032 + <_OW_SEND_BYTE_LOOP>main.asm1043 + <_OW_SEND_0>main.asm1047 + <_OW_SEND_1>main.asm1053 + <_OW_SEND_BYTE_END>main.asm1058 + <_OW_RD_BYTE_LP>main.asm1074 + main.asm1114 + main.asm1215 + <_loop_2>main.asm1178 + <_loop_0>main.asm1180 + <_dec_0>main.asm1182 + <_loop_1>main.asm1185 + <_loop_3>main.asm1188 + main.asm1233