From 29c3c316aa35a5a4430cbbefbb9ff109e7ce842a Mon Sep 17 00:00:00 2001 From: sergeyyarkov Date: Fri, 23 Jun 2023 16:43:04 +0300 Subject: [PATCH] refactor --- NOTES.md | 1 - definitions.asm | 1 + .../attiny2313a_thermostat.X.production.hex | 123 +-- .../attiny2313a_thermostat.X.production.lss | 983 +++++++++--------- .../attiny2313a_thermostat.X.production.map | 117 ++- .../attiny2313a_thermostat.X.production.obj | Bin 4462 -> 4534 bytes .../attiny2313a_thermostat.X.production.tmp | 106 +- macros.asm | 33 +- main.asm | 59 +- main.hex | 117 +-- 10 files changed, 782 insertions(+), 758 deletions(-) diff --git a/NOTES.md b/NOTES.md index 6a46825..e03e012 100644 --- a/NOTES.md +++ b/NOTES.md @@ -1,7 +1,6 @@ ОСНОВНОЕ: -- сделать подпрограмму, которая будет проверять флаг включен сейчас индикатор или выключен и вызывать ее в гл.цикле - сделать подпрограмму, которая будет проверять текущую температуру с уставкой учитывая гистерезис - сделать подпрограмму, которя будет опрашивать кнопки и в зависимости от нажатия переключють состояние программы - сделать программу, которая будет сохранять уставку температуры и гистерезис в EEPROM (перед инициализации МК diff --git a/definitions.asm b/definitions.asm index 70aac6c..de2c775 100644 --- a/definitions.asm +++ b/definitions.asm @@ -4,6 +4,7 @@ .DEF TEMP_REG_B = r17 .DEF DELAY_16_r = r19 .DEF DELAY_8_r = r20 +.DEF DELAY_24_r = r21 .DEF DISP_NUM_L = r24 ; LSB числа которое сейчас на индикаторе .DEF DISP_NUM_H = r25 ; MSB числа которое сейчас на индикаторе diff --git a/dist/default/production/attiny2313a_thermostat.X.production.hex b/dist/default/production/attiny2313a_thermostat.X.production.hex index 946dcce..516688e 100644 --- a/dist/default/production/attiny2313a_thermostat.X.production.hex +++ b/dist/default/production/attiny2313a_thermostat.X.production.hex @@ -1,64 +1,65 @@ :020000020000FC -:0200000074C0CA +:0200000073C0CB :0200160018953B -:10001A0016C018950F931F932F933F930FB7B49958 -:10002A0008C020916000203009F003C011E010934D -:10003A0060000FBF3F912F911F910F9118954F9319 -:10004A005F930F931F935FB74091670045300CF49D -:10005A0003C0442740936700403081F493989498F2 -:10006A0095980EF002C00BE002C0009165000023D3 -:10007A0011F0929A01C0929867D1E2D0413081F48E -:10008A009298949895980091640030916500032B9A -:10009A0011F0939A01C093980091640055D1D0D081 -:1000AA00423059F4929893989598949A00916300E3 -:1000BA004BD1002D0F77002EC3D0433041F49298D4 -:1000CA0093989498959A00916C003ED1B9D0439533 -:1000DA00409367005FBF1F910F915F914F911895F1 -:1000EA000FED0DBF0FE701BB01EE07BB0CE108BB2B -:1000FA0002E000BF05E003BF09E106BF00E20BBF53 -:10010A000CE100BD11241092670000E0009360002A -:10011A00002700936A0000936B0000EF00936C00C5 -:10012A001ED180E090E000916000003081F4969842 -:10013A00F1D07CD01FD11ED12FD010916A00812F0F -:10014A0010916B00912F0F9301E009BF0F910130BD -:10015A0019F49698DFD080D0023029F7969A1BE0DE -:10016A001093630010936400109365001093660067 -:10017A00DACFEE24FF1841E1001F111F4A9509F456 -:10018A000895EE1CFF1CE21AF30A20F4E20EF31E95 -:10019A008894F2CF0894F0CF0F931F932F933F9335 -:1001AA004F9368D00CEC802E7AD00EEB802E77D04D -:1001BA00AAE6B0E095D0ABE6B0E092D010916A0022 -:1001CA0020916B002F93287F283F11F0E89409C0F3 -:1001DA002F9168941095209531E0130F30E0231F7A -:1001EA0001C02F912695179526951795269517954F -:1001FA002695179530916A000EF43195432F3F707A -:10020A00432F330F330F330F440F340F3695369580 -:10021A003695369510936A0020936B0030936C00E4 -:10022A004F913F912F911F910F9108950F9322D0D3 -:10023A000CEC802E34D004E4802E31D00F91089536 -:10024A000F930FB800E40EB90BE10DB9769BFDCF01 -:10025A00C09AC0980F9108950F938CD0B29B0196C3 -:10026A00B39B0197B49B01C003C000E000936000F8 -:10027A000F910895F894B99A33E04EEB8BD0B99860 -:10028A0030E04AE887D005D033E042E383D078945F -:10029A000895B19B716002C0B1997E7F08950F9352 -:1002AA001F93082D18E0069508F458F0F894B99AA7 -:1002BA0030E046E76FD0B99830E042E16BD07894ED -:1002CA000AC0F894B99A30E04AE064D0B99830E0AC -:1002DA004EE760D078941A9531F71F910F910895DF -:1002EA000F931F93002718E0F8940695B99A30E007 -:1002FA004AE050D0B99830E040E14CD0B19900685A -:10030A0030E04CE647D01A9581F70C9378941F9108 -:10031A000F910895F8945F9354E0A3E6B0E08093B8 -:10032A0061009093620000916100109162002AE0DE -:10033A0030E01FDFED9200936100109362005A953E -:10034A0091F75F91789408950F931F93E6ECF3E089 -:10035A001127E00FF11F04901F910F910895C59A7C -:10036A001DD0C5980895C59A19D018D017D016D09F -:10037A00C59808950F931F932F932AE01FEF0FEF4D -:10038A000A95F1F71A95D9F72A95C1F72F911F9176 -:10039A000F91089541503040E8F708950F931F9345 -:1003AA002F9326E00FEF1FEF1A95F1F70A95D9F769 -:1003BA002A95C1F72F911F910F910895C0F9A4B002 -:0803CA00999282F880909CBF1B +:10001A0015C00F931F932F933F930FB7B49908C03E +:10002A0020916000203009F003C011E010936000B5 +:10003A000FBF3F912F911F910F9118954F935F9387 +:10004A000F931F935FB74091670045300CF403C0CC +:10005A00442740936700403081F493989498959888 +:10006A000EF002C00BE002C000916500002311F0FF +:10007A00929A01C092986BD1E6D0413081F492985D +:10008A00949895980091640030916500032B11F0C3 +:10009A00939A01C093980091640059D1D4D0423008 +:1000AA0059F4929893989598949A009163004FD135 +:1000BA00002D0F77002EC7D0433041F492989398C1 +:1000CA009498959A00916C0042D1BDD04395409383 +:1000DA0067005FBF1F910F915F914F9118950FEDC8 +:1000EA000DBF0FE701BB01EE07BB0CE108BB02E045 +:1000FA0000BF05E003BF09E106BF00E20BBF0CE148 +:10010A0000BD11241092670000E0009360000027F0 +:10011A0000936A0000936B0000EF00936C0022D1F9 +:10012A0080E090E000916000003029F49698F5D0C4 +:10013A0027D001E009BF013019F49698EED08FD08C +:10014A00023081F7969A1BE01093630010936400C3 +:10015A001093650010936600E5CFEE24FF1841E185 +:10016A00001F111F4A9509F40895EE1CFF1CE21A9C +:10017A00F30A20F4E20EF31E8894F2CF0894F0CF2B +:10018A001F9357D052E13DE84DEF0BD108D01091A3 +:10019A006A00812F10916B00912F1F9108950F9380 +:1001AA001F932F933F934F9368D00CEC802E7AD0F5 +:1001BA000EEB802E77D0AAE6B0E095D0ABE6B0E0A1 +:1001CA0092D010916A0020916B002F93287F283FCC +:1001DA0011F0E89409C02F9168941095209531E0A8 +:1001EA00130F30E0231F01C02F91269517952695EE +:1001FA001795269517952695179530916A000EF44E +:10020A003195432F3F70432F330F330F330F440F72 +:10021A00340F369536953695369510936A002093A5 +:10022A006B0030936C004F913F912F911F910F916A +:10023A0008950F9322D00CEC802E34D004E4802E43 +:10024A0031D00F9108950F930FB800E40EB90BE166 +:10025A000DB9769BFDCFC09AC0980F9108950F9360 +:10026A008CD0B29B0196B39B0197B49B01C003C08B +:10027A0000E0009360000F910895F894B99A33E072 +:10028A004EEB8BD0B99830E04AE887D005D033E0FE +:10029A0042E383D078940895B19B716002C0B1990A +:1002AA007E7F08950F931F93082D18E0069508F492 +:1002BA0058F0F894B99A30E046E76FD0B99830E030 +:1002CA0042E16BD078940AC0F894B99A30E04AE0D7 +:1002DA0064D0B99830E04EE760D078941A9531F737 +:1002EA001F910F9108950F931F93002718E0F89418 +:1002FA000695B99A30E04AE050D0B99830E040E12A +:10030A004CD0B199006830E04CE647D01A9581F795 +:10031A000C9378941F910F910895F8945F9354E089 +:10032A00A3E6B0E0809361009093620000916100BF +:10033A00109162002AE030E010DFED920093610034 +:10034A00109362005A9591F75F91789408950F93EC +:10035A001F93E6EDF3E01127E00FF11F04901F91C0 +:10036A000F910895C59A22D0C5980895C59A1ED0AE +:10037A001DD01CD01BD0C59808950F931F932F939F +:10038A002AE01FEF0FEF0A95F1F71A95D9F72A9588 +:10039A00C1F72F911F910F91089541503040E8F70E +:1003AA000895415030405040E0F708950F931F934D +:1003BA002F9326E00FEF1FEF1A95F1F70A95D9F759 +:1003CA002A95C1F72F911F910F910895C0F9A4B0F2 +:0803DA00999282F880909CBF0B :00000001FF diff --git a/dist/default/production/attiny2313a_thermostat.X.production.lss b/dist/default/production/attiny2313a_thermostat.X.production.lss index 01ee9b7..36c17bb 100644 --- a/dist/default/production/attiny2313a_thermostat.X.production.lss +++ b/dist/default/production/attiny2313a_thermostat.X.production.lss @@ -1,26 +1,26 @@ -AVRASM ver. 2.2.7 main.asm Thu Jun 22 18:27:57 2023 +AVRASM ver. 2.2.7 main.asm Fri Jun 23 16:35:36 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(277): Including file 'div16u.asm' +main.asm(265): Including file 'div16u.asm' div16u.asm(22): warning: Register r16 already defined by the .DEF directive -main.asm(277): 'div16u.asm' included form here +main.asm(265): 'div16u.asm' included form here div16u.asm(23): warning: Register r17 already defined by the .DEF directive -main.asm(277): 'div16u.asm' included form here +main.asm(265): 'div16u.asm' included form here div16u.asm(24): warning: Register r16 already defined by the .DEF directive -main.asm(277): 'div16u.asm' included form here +main.asm(265): 'div16u.asm' included form here div16u.asm(25): warning: Register r17 already defined by the .DEF directive -main.asm(277): 'div16u.asm' included form here +main.asm(265): 'div16u.asm' included form here div16u.asm(27): warning: Register r19 already defined by the .DEF directive -main.asm(277): 'div16u.asm' included form here +main.asm(265): 'div16u.asm' included form here div16u.asm(28): warning: Register r20 already defined by the .DEF directive -main.asm(277): 'div16u.asm' included form here +main.asm(265): 'div16u.asm' included form here [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(277): Including file 'div16u.asm' +main.asm(265): Including file 'div16u.asm' ; @@ -742,6 +742,7 @@ main.asm(277): Including file 'div16u.asm' .DEF TEMP_REG_B = r17 .DEF DELAY_16_r = r19 .DEF DELAY_8_r = r20 + .DEF DELAY_24_r = r21 .DEF DISP_NUM_L = r24 ; LSB числа которое сейчас на индикаторе .DEF DISP_NUM_H = r25 ; MSB числа которое сейчас на индикаторе @@ -797,22 +798,22 @@ main.asm(277): Including file 'div16u.asm' .EQU MCU_STATE_PROGRAM = 0x01 ; Режим настройки параметров в EEPROM .INCLUDE "macros.asm" - ldi @0, @2 - out @1, @0 + ldi @0, @2 + out @1, @0 .ENDMACRO .MACRO display_load - ldi DISP_NUM_L, LOW(@0) - ldi DISP_NUM_H, HIGH(@0) + ldi DISP_NUM_L, LOW(@0) + ldi DISP_NUM_H, HIGH(@0) .ENDMACRO .MACRO ow_pull - sbi OW_DDR, OW_LINE + sbi OW_DDR, OW_LINE .ENDMACRO .MACRO ow_release - cbi OW_DDR, OW_LINE + cbi OW_DDR, OW_LINE .ENDMACRO .MACRO relay_on @@ -822,23 +823,18 @@ main.asm(277): Including file 'div16u.asm' .MACRO relay_off cbi RELAY_PORT, RELAY_PIN .ENDMACRO - - .MACRO display_on - push r16 - outi r16, TIMSK, (1< @@ -864,24 +860,23 @@ main.asm(277): Including file 'div16u.asm' // .ORG 0x00 -000000 c074 rjmp RESET_vect +000000 c073 rjmp RESET_vect .ORG 0x000B ; rjmp PCINT0_vect 00000b 9518 reti .ORG 0x000D -00000d c016 rjmp TIMER0_COMPA_vect +00000d c015 rjmp TIMER0_COMPA_vect // // PCINT0_vect: -00000e 9518 reti -00000f 930f push r16 -000010 931f push r17 -000011 932f push r18 -000012 933f push r19 -000013 b70f in r16, SREG +00000e 930f push r16 +00000f 931f push r17 +000010 932f push r18 +000011 933f push r19 +000012 b70f in r16, SREG ; display_off @@ -891,174 +886,174 @@ main.asm(277): Including file 'div16u.asm' ; and r17, r18 ; cp r17, r18 ; breq _PCINT0_vect_end -000014 99b4 sbic SW_PIN, SW_SET_PIN -000015 c008 rjmp _PCINT0_vect_end +000013 99b4 sbic SW_PIN, SW_SET_PIN +000014 c008 rjmp _PCINT0_vect_end -000016 9120 0060 lds r18, MCU_STATE -000018 3020 cpi r18, MCU_STATE_DEFAULT -000019 f009 breq _INTO_PROGRAM_STATE -00001a c003 rjmp _PCINT0_vect_end +000015 9120 0060 lds r18, MCU_STATE +000017 3020 cpi r18, MCU_STATE_DEFAULT +000018 f009 breq _INTO_PROGRAM_STATE +000019 c003 rjmp _PCINT0_vect_end _INTO_PROGRAM_STATE: -00001b e011 ldi r17, MCU_STATE_PROGRAM -00001c 9310 0060 sts MCU_STATE, r17 +00001a e011 ldi r17, MCU_STATE_PROGRAM +00001b 9310 0060 sts MCU_STATE, r17 _PCINT0_vect_end: -00001e bf0f out SREG, r16 -00001f 913f pop r19 -000020 912f pop r18 -000021 911f pop r17 -000022 910f pop r16 -000023 9518 reti// +00001d bf0f out SREG, r16 +00001e 913f pop r19 +00001f 912f pop r18 +000020 911f pop r17 +000021 910f pop r16 +000022 9518 reti// // ; **** ДИНАМИЧЕСКАЯ ИНДИКАЦИЯ ************************************ TIMER0_COMPA_vect: -000024 934f push r20 -000025 935f push r21 -000026 930f push r16 -000027 931f push r17 -000028 b75f in r21, SREG +000023 934f push r20 +000024 935f push r21 +000025 930f push r16 +000026 931f push r17 +000027 b75f in r21, SREG -000029 9140 0067 lds r20, CURRENT_DIGIT -00002b 3045 cpi r20, 5 -00002c f40c brge _CLR_CURRENT_DIGIT ; сброс активного разряда если >= 5 -00002d c003 rjmp _indicate_1 +000028 9140 0067 lds r20, CURRENT_DIGIT +00002a 3045 cpi r20, 5 +00002b f40c brge _CLR_CURRENT_DIGIT ; сброс активного разряда если >= 5 +00002c c003 rjmp _indicate_1 _CLR_CURRENT_DIGIT: ; сброс текущего активного разряда в ноль -00002e 2744 clr r20 -00002f 9340 0067 sts CURRENT_DIGIT, r20 +00002d 2744 clr r20 +00002e 9340 0067 sts CURRENT_DIGIT, r20 _indicate_1: -000031 3040 cpi r20, 0 -000032 f481 brne _indicate_2 +000030 3040 cpi r20, 0 +000031 f481 brne _indicate_2 -000033 9893 cbi PORTD, DIGIT_2_PIN -000034 9894 cbi PORTD, DIGIT_3_PIN -000035 9895 cbi PORTD, DIGIT_4_PIN -000036 f00e brts PC+2 -000037 c002 rjmp PC+3 -000038 e00b ldi TEMP_REG_A, 11 ; // - -000039 c002 rjmp PC+3 -00003a 9100 0065 lds TEMP_REG_A, DIGITS+2 -00003c 2300 tst TEMP_REG_A -00003d f011 breq PC+3 -00003e 9a92 sbi PORTD, DIGIT_1_PIN -00003f c001 rjmp PC+2 -000040 9892 cbi PORTD, DIGIT_1_PIN -000041 d167 rcall DISPLAY_DECODER -000042 d0e2 rcall USI_TRANSMIT +000032 9893 cbi PORTD, DIGIT_2_PIN +000033 9894 cbi PORTD, DIGIT_3_PIN +000034 9895 cbi PORTD, DIGIT_4_PIN +000035 f00e brts PC+2 +000036 c002 rjmp PC+3 +000037 e00b ldi TEMP_REG_A, 11 ; // - +000038 c002 rjmp PC+3 +000039 9100 0065 lds TEMP_REG_A, DIGITS+2 +00003b 2300 tst TEMP_REG_A +00003c f011 breq PC+3 +00003d 9a92 sbi PORTD, DIGIT_1_PIN +00003e c001 rjmp PC+2 +00003f 9892 cbi PORTD, DIGIT_1_PIN +000040 d16b rcall DISPLAY_DECODER +000041 d0e6 rcall USI_TRANSMIT _indicate_2: -000043 3041 cpi r20, 1 -000044 f481 brne _indicate_3 +000042 3041 cpi r20, 1 +000043 f481 brne _indicate_3 -000045 9892 cbi PORTD, DIGIT_1_PIN -000046 9894 cbi PORTD, DIGIT_3_PIN -000047 9895 cbi PORTD, DIGIT_4_PIN -000048 9100 0064 lds TEMP_REG_A, DIGITS+1 -00004a 9130 0065 lds r19, DIGITS+2 -00004c 2b03 or TEMP_REG_A, r19 -00004d f011 breq PC+3 -00004e 9a93 sbi PORTD, DIGIT_2_PIN -00004f c001 rjmp PC+2 -000050 9893 cbi PORTD, DIGIT_2_PIN -000051 9100 0064 lds TEMP_REG_A, DIGITS+1 -000053 d155 rcall DISPLAY_DECODER -000054 d0d0 rcall USI_TRANSMIT +000044 9892 cbi PORTD, DIGIT_1_PIN +000045 9894 cbi PORTD, DIGIT_3_PIN +000046 9895 cbi PORTD, DIGIT_4_PIN +000047 9100 0064 lds TEMP_REG_A, DIGITS+1 +000049 9130 0065 lds r19, DIGITS+2 +00004b 2b03 or TEMP_REG_A, r19 +00004c f011 breq PC+3 +00004d 9a93 sbi PORTD, DIGIT_2_PIN +00004e c001 rjmp PC+2 +00004f 9893 cbi PORTD, DIGIT_2_PIN +000050 9100 0064 lds TEMP_REG_A, DIGITS+1 +000052 d159 rcall DISPLAY_DECODER +000053 d0d4 rcall USI_TRANSMIT _indicate_3: -000055 3042 cpi r20, 2 -000056 f459 brne _indicate_4 +000054 3042 cpi r20, 2 +000055 f459 brne _indicate_4 -000057 9892 cbi PORTD, DIGIT_1_PIN -000058 9893 cbi PORTD, DIGIT_2_PIN -000059 9895 cbi PORTD, DIGIT_4_PIN -00005a 9a94 sbi PORTD, DIGIT_3_PIN -00005b 9100 0063 lds TEMP_REG_A, DIGITS -00005d d14b rcall DISPLAY_DECODER +000056 9892 cbi PORTD, DIGIT_1_PIN +000057 9893 cbi PORTD, DIGIT_2_PIN +000058 9895 cbi PORTD, DIGIT_4_PIN +000059 9a94 sbi PORTD, DIGIT_3_PIN +00005a 9100 0063 lds TEMP_REG_A, DIGITS +00005c d14f rcall DISPLAY_DECODER ; зажигаем точку -00005e 2d00 mov r16, r0 -00005f 770f cbr r16, (1<<7) -000060 2e00 mov r0, r16 -000061 d0c3 rcall USI_TRANSMIT +00005d 2d00 mov r16, r0 +00005e 770f cbr r16, (1<<7) +00005f 2e00 mov r0, r16 +000060 d0c7 rcall USI_TRANSMIT _indicate_4: -000062 3043 cpi r20, 3 -000063 f441 brne _indicate_exit +000061 3043 cpi r20, 3 +000062 f441 brne _indicate_exit -000064 9892 cbi PORTD, DIGIT_1_PIN -000065 9893 cbi PORTD, DIGIT_2_PIN -000066 9894 cbi PORTD, DIGIT_3_PIN -000067 9a95 sbi PORTD, DIGIT_4_PIN -000068 9100 006c lds TEMP_REG_A, TEMP_F -00006a d13e rcall DISPLAY_DECODER -00006b d0b9 rcall USI_TRANSMIT +000063 9892 cbi PORTD, DIGIT_1_PIN +000064 9893 cbi PORTD, DIGIT_2_PIN +000065 9894 cbi PORTD, DIGIT_3_PIN +000066 9a95 sbi PORTD, DIGIT_4_PIN +000067 9100 006c lds TEMP_REG_A, TEMP_F +000069 d142 rcall DISPLAY_DECODER +00006a d0bd rcall USI_TRANSMIT _indicate_exit: -00006c 9543 inc r20 -00006d 9340 0067 sts CURRENT_DIGIT, r20 -00006f bf5f out SREG, r21 +00006b 9543 inc r20 +00006c 9340 0067 sts CURRENT_DIGIT, r20 +00006e bf5f out SREG, r21 -000070 911f pop r17 -000071 910f pop r16 -000072 915f pop r21 -000073 914f pop r20 -000074 9518 reti +00006f 911f pop r17 +000070 910f pop r16 +000071 915f pop r21 +000072 914f pop r20 +000073 9518 reti ;// ; **** СТАРТ ПРОГРАММЫ ******************************************* RESET_vect: -000075 ed0f ldi TEMP_REG_A, LOW(RAMEND) -000076 bf0d out SPL, TEMP_REG_A +000074 ed0f ldi TEMP_REG_A, LOW(RAMEND) +000075 bf0d out SPL, TEMP_REG_A // ; **** ПРОЦЕСС ИНИЦИАЛИЗАЦИИ МК ********************************** MCU_INIT: ; **** ИНИЦИАЛИЗАЦИЯ ПИНОВ ************************************* -000077 e70f -000078 bb01 outi r16, DDRD, (1< @@ -1067,46 +1062,33 @@ main.asm(277): Including file 'div16u.asm' ; **** ГЛАВНЫЙ ЦИКЛ ********************************************** LOOP: ; rcall DISPLAY_UPD_DIGITS -000098 9100 0060 lds r16, MCU_STATE ; получаем текущее состояние МК - +000097 9100 0060 lds r16, MCU_STATE ; получаем текущее состояние МК + _STATE_DEFAULT: -00009a 3000 cpi r16, MCU_STATE_DEFAULT -00009b f481 brne _STATE_PROGRAM -00009c 9896 cbi LED_ERR_PORT, LED_ERR_PIN -00009d d0f1 rcall DISPLAY_UPD_DIGITS - -00009e d07c rcall TEMP_CONV -00009f d11f rcall DEBOUNCE_SW -0000a0 d11e rcall DEBOUNCE_SW -0000a1 d02f rcall TEMP_RD - -0000a2 9110 006a lds r17, TEMP_L -0000a4 2f81 mov DISP_NUM_L, r17 -0000a5 9110 006b lds r17, TEMP_H -0000a7 2f91 mov DISP_NUM_H, r17 - -0000a8 930f -0000a9 e001 -0000aa bf09 -0000ab 910f display_on - +000099 3000 cpi r16, MCU_STATE_DEFAULT +00009a f429 brne _STATE_PROGRAM +00009b 9896 cbi LED_ERR_PORT, LED_ERR_PIN +00009c d0f5 rcall DISPLAY_UPD_DIGITS +00009d d027 rcall TEMP_UPD +00009e e001 +00009f bf09 outi r16, TIMSK, (1< @@ -1144,148 +1126,167 @@ main.asm(277): Including file 'div16u.asm' ;***** Code div16u: -0000be 24ee clr drem16uL ; clear remainder Low byte -0000bf 18ff sub drem16uH,drem16uH ; clear remainder High byte and carry -0000c0 e141 ldi dcnt16u,17 ; init loop counter +0000b2 24ee clr drem16uL ; clear remainder Low byte +0000b3 18ff sub drem16uH,drem16uH ; clear remainder High byte and carry +0000b4 e141 ldi dcnt16u,17 ; init loop counter d16u_1: -0000c1 1f00 rol dd16uL ; shift left dividend -0000c2 1f11 rol dd16uH -0000c3 954a dec dcnt16u ; decrement counter -0000c4 f409 brne d16u_2 ; if done -0000c5 9508 ret ; return +0000b5 1f00 rol dd16uL ; shift left dividend +0000b6 1f11 rol dd16uH +0000b7 954a dec dcnt16u ; decrement counter +0000b8 f409 brne d16u_2 ; if done +0000b9 9508 ret ; return d16u_2: -0000c6 1cee rol drem16uL ; shift dividend into remainder -0000c7 1cff rol drem16uH -0000c8 1ae2 sub drem16uL,dv16uL ; remainder = remainder - divisor -0000c9 0af3 sbc drem16uH,dv16uH -0000ca f420 brcc d16u_3 ; if result negative -0000cb 0ee2 add drem16uL,dv16uL ; restore remainder -0000cc 1ef3 adc drem16uH,dv16uH -0000cd 9488 clc ; clear carry to be shifted into result -0000ce cff2 rjmp d16u_1 ; else +0000ba 1cee rol drem16uL ; shift dividend into remainder +0000bb 1cff rol drem16uH +0000bc 1ae2 sub drem16uL,dv16uL ; remainder = remainder - divisor +0000bd 0af3 sbc drem16uH,dv16uH +0000be f420 brcc d16u_3 ; if result negative +0000bf 0ee2 add drem16uL,dv16uL ; restore remainder +0000c0 1ef3 adc drem16uH,dv16uH +0000c1 9488 clc ; clear carry to be shifted into result +0000c2 cff2 rjmp d16u_1 ; else d16u_3: -0000cf 9408 sec ; set carry to be shifted into result -0000d0 cff0 - // +0000c3 9408 sec ; set carry to be shifted into result +0000c4 cff0 + // + TEMP_UPD: +0000c5 931f push r17 +0000c6 d057 rcall TEMP_CONV +0000c7 e152 +0000c8 e83d +0000c9 ef4d +0000ca d10b DELAY24 760000 +0000cb d008 rcall TEMP_RD + + ; обновляем данные в ячейках +0000cc 9110 006a lds r17, TEMP_L +0000ce 2f81 mov DISP_NUM_L, r17 +0000cf 9110 006b lds r17, TEMP_H +0000d1 2f91 mov DISP_NUM_H, r17 +0000d2 911f pop r17 +0000d3 9508 ret// + + + // TEMP_RD: -0000d1 930f push r16 -0000d2 931f push r17 -0000d3 932f push r18 -0000d4 933f push r19 -0000d5 934f push r20 +0000d4 930f push r16 +0000d5 931f push r17 +0000d6 932f push r18 +0000d7 933f push r19 +0000d8 934f push r20 ; cli -0000d6 d068 rcall OW_PRESENCE -0000d7 ec0c ldi r16, DS18B20_CMD_SKIPROM -0000d8 2e80 mov OW_CMD_r, r16 -0000d9 d07a rcall OW_SEND_BYTE - -0000da eb0e ldi r16, DS18B20_CMD_RSCRATCHPAD +0000d9 d068 rcall OW_PRESENCE +0000da ec0c ldi r16, DS18B20_CMD_SKIPROM 0000db 2e80 mov OW_CMD_r, r16 -0000dc d077 rcall OW_SEND_BYTE +0000dc d07a rcall OW_SEND_BYTE -0000dd e6aa ldi XL, LOW(TEMP_L) -0000de e0b0 ldi XH, HIGH(TEMP_L) -0000df d095 rcall OW_RD_BYTE +0000dd eb0e ldi r16, DS18B20_CMD_RSCRATCHPAD +0000de 2e80 mov OW_CMD_r, r16 +0000df d077 rcall OW_SEND_BYTE -0000e0 e6ab ldi XL, LOW(TEMP_H) -0000e1 e0b0 ldi XH, HIGH(TEMP_H) -0000e2 d092 rcall OW_RD_BYTE +0000e0 e6aa ldi XL, LOW(TEMP_L) +0000e1 e0b0 ldi XH, HIGH(TEMP_L) +0000e2 d095 rcall OW_RD_BYTE -0000e3 9110 006a lds r17, TEMP_L -0000e5 9120 006b lds r18, TEMP_H +0000e3 e6ab ldi XL, LOW(TEMP_H) +0000e4 e0b0 ldi XH, HIGH(TEMP_H) +0000e5 d092 rcall OW_RD_BYTE -0000e7 932f push r18 -0000e8 7f28 cbr r18, (1<<0) | (1<<1) | (1<<2) ; убираем ненужные биты на время (интересуют последних битов в TEMP_H) -0000e9 3f28 cpi r18, 0xf8 ; проверяется является ли число минусовой -0000ea f011 breq _TEMP_RD_TO_UNSIGNED ; если да то конвертируем в беззнаковое число -0000eb 94e8 clt -0000ec c009 rjmp _TEMP_RD_CONTINUE ; если нет то преобразуем значение АЦП в температуру (делим на 16) +0000e6 9110 006a lds r17, TEMP_L +0000e8 9120 006b lds r18, TEMP_H + +0000ea 932f push r18 +0000eb 7f28 cbr r18, (1<<0) | (1<<1) | (1<<2) ; убираем ненужные биты на время (интересуют последних битов в TEMP_H) +0000ec 3f28 cpi r18, 0xf8 ; проверяется является ли число минусовой +0000ed f011 breq _TEMP_RD_TO_UNSIGNED ; если да то конвертируем в беззнаковое число +0000ee 94e8 clt +0000ef c009 rjmp _TEMP_RD_CONTINUE ; если нет то преобразуем значение АЦП в температуру (делим на 16) _TEMP_RD_TO_UNSIGNED: -0000ed 912f pop r18 -0000ee 9468 set -0000ef 9510 com r17 -0000f0 9520 com r18 -0000f1 e031 ldi r19, 1 -0000f2 0f13 add r17, r19 -0000f3 e030 ldi r19, 0 -0000f4 1f23 adc r18, r19 -0000f5 c001 rjmp PC+2 +0000f0 912f pop r18 +0000f1 9468 set +0000f2 9510 com r17 +0000f3 9520 com r18 +0000f4 e031 ldi r19, 1 +0000f5 0f13 add r17, r19 +0000f6 e030 ldi r19, 0 +0000f7 1f23 adc r18, r19 +0000f8 c001 rjmp PC+2 _TEMP_RD_CONTINUE: ; Температура = Число с АЦП / 16 (сдвиг вправо 4) -0000f6 912f pop r18 -0000f7 9526 lsr r18 -0000f8 9517 ror r17 -0000f9 9526 lsr r18 -0000fa 9517 ror r17 -0000fb 9526 lsr r18 -0000fc 9517 ror r17 -0000fd 9526 lsr r18 -0000fe 9517 ror r17 +0000f9 912f pop r18 +0000fa 9526 lsr r18 +0000fb 9517 ror r17 +0000fc 9526 lsr r18 +0000fd 9517 ror r17 +0000fe 9526 lsr r18 +0000ff 9517 ror r17 +000100 9526 lsr r18 +000101 9517 ror r17 _TEMP_RD_END: -0000ff 9130 006a lds r19, TEMP_L -000101 f40e brtc PC+2 -000102 9531 neg r19 ; переводим в беззнаковое число если минус +000102 9130 006a lds r19, TEMP_L +000104 f40e brtc PC+2 +000105 9531 neg r19 ; переводим в беззнаковое число если минус ; далее происходит такое для получения дробной части: ; ((n<<3) + (n<<1))>>4 или (n*10)/16 -000103 2f43 mov r20, r19 -000104 703f andi r19, 0x0f -000105 2f43 mov r20, r19 -000106 0f33 lsl r19 -000107 0f33 lsl r19 -000108 0f33 lsl r19 +000106 2f43 mov r20, r19 +000107 703f andi r19, 0x0f +000108 2f43 mov r20, r19 +000109 0f33 lsl r19 +00010a 0f33 lsl r19 +00010b 0f33 lsl r19 -000109 0f44 lsl r20 +00010c 0f44 lsl r20 -00010a 0f34 add r19, r20 +00010d 0f34 add r19, r20 -00010b 9536 lsr r19 -00010c 9536 lsr r19 -00010d 9536 lsr r19 00010e 9536 lsr r19 +00010f 9536 lsr r19 +000110 9536 lsr r19 +000111 9536 lsr r19 ; записываем данные -00010f 9310 006a sts TEMP_L, r17 -000111 9320 006b sts TEMP_H, r18 -000113 9330 006c sts TEMP_F, r19 +000112 9310 006a sts TEMP_L, r17 +000114 9320 006b sts TEMP_H, r18 +000116 9330 006c sts TEMP_F, r19 ; sei -000115 914f pop r20 -000116 913f pop r19 -000117 912f pop r18 -000118 911f pop r17 -000119 910f pop r16 -00011a 9508 ret +000118 914f pop r20 +000119 913f pop r19 +00011a 912f pop r18 +00011b 911f pop r17 +00011c 910f pop r16 +00011d 9508 ret ; TEMP_CONV: -00011b 930f push r16 +00011e 930f push r16 ; cli -00011c d022 rcall OW_PRESENCE -00011d ec0c ldi r16, DS18B20_CMD_SKIPROM -00011e 2e80 mov OW_CMD_r, r16 -00011f d034 rcall OW_SEND_BYTE - -000120 e404 ldi r16, DS18B20_CMD_CONVERTTEMP +00011f d022 rcall OW_PRESENCE +000120 ec0c ldi r16, DS18B20_CMD_SKIPROM 000121 2e80 mov OW_CMD_r, r16 -000122 d031 rcall OW_SEND_BYTE +000122 d034 rcall OW_SEND_BYTE + +000123 e404 ldi r16, DS18B20_CMD_CONVERTTEMP +000124 2e80 mov OW_CMD_r, r16 +000125 d031 rcall OW_SEND_BYTE ; sei -000123 910f pop r16 -000124 9508 ret +000126 910f pop r16 +000127 9508 ret // // ; **** ОТПРАВКА БАЙТА В СДВИГОВЫЙ РЕГИСТР ************************* USI_TRANSMIT: -000125 930f push r16 -000126 b80f out USIDR, r0 ; Байт для отправки всегда находится в регистре r0. Помещаем данные в регистр USIDR. +000128 930f push r16 +000129 b80f out USIDR, r0 ; Байт для отправки всегда находится в регистре r0. Помещаем данные в регистр USIDR. ; Enable USI Overflow Interrupt Flag (will be 0 if transfer is not compeleted) -000127 e400 ldi TEMP_REG_A, (1< USI Clock Source Select ; USICLK <--------------> USI Clock Strobe ; USITC <--------------> USI Toggle Clock (Enable clock generation) -000129 e10b ldi TEMP_REG_A, (1< +000130 9ac0 sbi PORTB, USI_LATCH_PIN +000131 98c0 cbi PORTB, USI_LATCH_PIN +000132 910f pop r16 +000133 9508 ret// // SW_CHECK_PROCESS: -000131 930f push r16 -000132 d08c rcall DEBOUNCE_SW -000133 9bb2 sbis SW_PIN, SW_PLUS_PIN -000134 9601 adiw DISP_NUM_L, 1 +000134 930f push r16 +000135 d08c rcall DEBOUNCE_SW +000136 9bb2 sbis SW_PIN, SW_PLUS_PIN +000137 9601 adiw DISP_NUM_L, 1 -000135 9bb3 sbis SW_PIN, SW_MINUS_PIN -000136 9701 sbiw DISP_NUM_L, 1 +000138 9bb3 sbis SW_PIN, SW_MINUS_PIN +000139 9701 sbiw DISP_NUM_L, 1 -000137 9bb4 sbis SW_PIN, SW_SET_PIN -000138 c001 rjmp _INTO_DEFAULT_STATE -000139 c003 rjmp _SW_CHECK_PROCESS_END +00013a 9bb4 sbis SW_PIN, SW_SET_PIN +00013b c001 rjmp _INTO_DEFAULT_STATE +00013c c003 rjmp _SW_CHECK_PROCESS_END _INTO_DEFAULT_STATE: -00013a e000 ldi r16, MCU_STATE_DEFAULT -00013b 9300 0060 sts MCU_STATE, r16 +00013d e000 ldi r16, MCU_STATE_DEFAULT +00013e 9300 0060 sts MCU_STATE, r16 _SW_CHECK_PROCESS_END: -00013d 910f pop r16 -00013e 9508 ret +000140 910f pop r16 +000141 9508 ret // // // ; **** ОПРОС ПРИСУТСТВИЯ УСТРОЙСТВА ****************************** OW_PRESENCE: -00013f 94f8 cli -000140 9ab9 ow_pull -000141 e033 -000142 eb4e -000143 d08b DELAY16 480 -000144 98b9 ow_release -000145 e030 -000146 e84a -000147 d087 DELAY16 70 -000148 d005 rcall OW_CHECK_PRESENCE -000149 e033 -00014a e342 -00014b d083 DELAY16 410 -00014c 9478 sei -00014d 9508 ret +000142 94f8 cli +000143 9ab9 ow_pull +000144 e033 +000145 eb4e +000146 d08b DELAY16 480 +000147 98b9 ow_release +000148 e030 +000149 e84a +00014a d087 DELAY16 70 +00014b d005 rcall OW_CHECK_PRESENCE +00014c e033 +00014d e342 +00014e d083 DELAY16 410 +00014f 9478 sei +000150 9508 ret // // @@ -1357,85 +1358,85 @@ main.asm(277): Including file 'div16u.asm' ; Если подчиненное устройство притянет шину, то устанавливаем флаг OWPRF в единицу в регистре флагов ; OW_CHECK_PRESENCE: -00014e 9bb1 sbis OW_PIN, OW_LINE -00014f 6071 sbr OWFR, (1< // OW_SEND_BYTE: -000154 930f push r16 -000155 931f push r17 -000156 2d08 mov r16, OW_CMD_r -000157 e018 ldi r17, 8 +000157 930f push r16 +000158 931f push r17 +000159 2d08 mov r16, OW_CMD_r +00015a e018 ldi r17, 8 _OW_SEND_BYTE_LOOP: -000158 9506 lsr r16 -000159 f408 brcc _OW_SEND_0 -00015a f058 brcs _OW_SEND_1 +00015b 9506 lsr r16 +00015c f408 brcc _OW_SEND_0 +00015d f058 brcs _OW_SEND_1 _OW_SEND_0: -00015b 94f8 cli -00015c 9ab9 ow_pull -00015d e030 -00015e e746 -00015f d06f DELAY16 60 -000160 98b9 ow_release -000161 e030 -000162 e142 -000163 d06b DELAY16 10 -000164 9478 sei -000165 c00a rjmp _OW_SEND_BYTE_END +00015e 94f8 cli +00015f 9ab9 ow_pull +000160 e030 +000161 e746 +000162 d06f DELAY16 60 +000163 98b9 ow_release +000164 e030 +000165 e142 +000166 d06b DELAY16 10 +000167 9478 sei +000168 c00a rjmp _OW_SEND_BYTE_END _OW_SEND_1: -000166 94f8 cli -000167 9ab9 ow_pull -000168 e030 -000169 e04a -00016a d064 DELAY16 6 -00016b 98b9 ow_release -00016c e030 -00016d e74e -00016e d060 DELAY16 64 -00016f 9478 sei +000169 94f8 cli +00016a 9ab9 ow_pull +00016b e030 +00016c e04a +00016d d064 DELAY16 6 +00016e 98b9 ow_release +00016f e030 +000170 e74e +000171 d060 DELAY16 64 +000172 9478 sei _OW_SEND_BYTE_END: -000170 951a dec r17 -000171 f731 brne _OW_SEND_BYTE_LOOP -000172 911f pop r17 -000173 910f pop r16 -000174 9508 ret +000173 951a dec r17 +000174 f731 brne _OW_SEND_BYTE_LOOP +000175 911f pop r17 +000176 910f pop r16 +000177 9508 ret // // OW_RD_BYTE: -000175 930f push r16 -000176 931f push r17 -000177 2700 clr r16 -000178 e018 ldi r17, 8 -000179 94f8 cli +000178 930f push r16 +000179 931f push r17 +00017a 2700 clr r16 +00017b e018 ldi r17, 8 +00017c 94f8 cli _OW_RD_BYTE_LP: -00017a 9506 lsr r16 -00017b 9ab9 ow_pull -00017c e030 -00017d e04a -00017e d050 DELAY16 6 -00017f 98b9 ow_release -000180 e030 -000181 e140 -000182 d04c DELAY16 9 -000183 99b1 sbic OW_PIN, OW_LINE -000184 6800 sbr r16, (1<<7) -000185 e030 -000186 e64c -000187 d047 DELAY16 55 -000188 951a dec r17 -000189 f781 brne _OW_RD_BYTE_LP -00018a 930c st X, r16 -00018b 9478 sei -00018c 911f pop r17 -00018d 910f pop r16 -00018e 9508 ret +00017d 9506 lsr r16 +00017e 9ab9 ow_pull +00017f e030 +000180 e04a +000181 d050 DELAY16 6 +000182 98b9 ow_release +000183 e030 +000184 e140 +000185 d04c DELAY16 9 +000186 99b1 sbic OW_PIN, OW_LINE +000187 6800 sbr r16, (1<<7) +000188 e030 +000189 e64c +00018a d047 DELAY16 55 +00018b 951a dec r17 +00018c f781 brne _OW_RD_BYTE_LP +00018d 930c st X, r16 +00018e 9478 sei +00018f 911f pop r17 +000190 910f pop r16 +000191 9508 ret // @@ -1446,146 +1447,154 @@ main.asm(277): Including file 'div16u.asm' ; Описание: Перемещает цифры числа в соответствующие ячейки памяти в SRAM ; путем деления этого числа несколько раз DISPLAY_UPD_DIGITS: -00018f 94f8 cli -000190 935f push r21 -000191 e054 ldi r21, 4 ; (4 раза делим) т.к индикатор четырех разрядный +000192 94f8 cli +000193 935f push r21 +000194 e054 ldi r21, 4 ; (4 раза делим) т.к индикатор четырех разрядный ; инициализация указателя (за каждый проход цикла будет инкрементироваться) -000192 e6a3 ldi XL, LOW(DIGITS) -000193 e0b0 ldi XH, HIGH(DIGITS) +000195 e6a3 ldi XL, LOW(DIGITS) +000196 e0b0 ldi XH, HIGH(DIGITS) .equ dividend = SRAM_TEMP_1 ; число которе будем делить .equ divisor = 10 ; на что делим ; загружаем число которое хотим поделить в адрес SRAM делимого -000194 9380 0061 sts dividend, DISP_NUM_L -000196 9390 0062 sts dividend+1, DISP_NUM_H +000197 9380 0061 sts dividend, DISP_NUM_L +000199 9390 0062 sts dividend+1, DISP_NUM_H ; четыре раза производим деление для получения остатков DIV_LOOP: ; заполняем нужные регистры -000198 9100 0061 lds dd16uL, dividend -00019a 9110 0062 lds dd16uH, dividend+1 -00019c e02a ldi dv16uL, LOW(divisor) -00019d e030 ldi dv16uH, HIGH(divisor) +00019b 9100 0061 lds dd16uL, dividend +00019d 9110 0062 lds dd16uH, dividend+1 +00019f e02a ldi dv16uL, LOW(divisor) +0001a0 e030 ldi dv16uH, HIGH(divisor) -00019e df1f rcall div16u ; делим +0001a1 df10 rcall div16u ; делим -00019f 92ed st X+, drem16uL ; сохраняем остаток в ячейку по указателю и увеличиваем его +0001a2 92ed st X+, drem16uL ; сохраняем остаток в ячейку по указателю и увеличиваем его ; обновляем делимое -0001a0 9300 0061 sts dividend, dres16uL -0001a2 9310 0062 sts dividend+1, dres16uH +0001a3 9300 0061 sts dividend, dres16uL +0001a5 9310 0062 sts dividend+1, dres16uH -0001a4 955a dec r21 ; декрементируем счетчик цикла -0001a5 f791 brne DIV_LOOP ; делим еще раз если не 0 -0001a6 915f pop r21 -0001a7 9478 sei -0001a8 9508 ret +0001a7 955a dec r21 ; декрементируем счетчик цикла +0001a8 f791 brne DIV_LOOP ; делим еще раз если не 0 +0001a9 915f pop r21 +0001aa 9478 sei +0001ab 9508 ret // // ; **** ЗАГРУЖАЕТ НУЖНЫЙ АДРЕС СИМВОЛА В R0 *********************** DISPLAY_DECODER: -0001a9 930f push r16 -0001aa 931f push r17 -0001ab ece6 ldi ZL, LOW(2*DISPLAY_SYMBOLS) -0001ac e0f3 ldi ZH, HIGH(2*DISPLAY_SYMBOLS) +0001ac 930f push r16 +0001ad 931f push r17 +0001ae ede6 ldi ZL, LOW(2*DISPLAY_SYMBOLS) +0001af e0f3 ldi ZH, HIGH(2*DISPLAY_SYMBOLS) -0001ad 2711 clr TEMP_REG_B -0001ae 0fe0 add ZL, TEMP_REG_A -0001af 1ff1 adc ZH, TEMP_REG_B +0001b0 2711 clr TEMP_REG_B +0001b1 0fe0 add ZL, TEMP_REG_A +0001b2 1ff1 adc ZH, TEMP_REG_B -0001b0 9004 lpm r0, Z -0001b1 911f pop r17 -0001b2 910f pop r16 -0001b3 9508 ret// +0001b3 9004 lpm r0, Z +0001b4 911f pop r17 +0001b5 910f pop r16 +0001b6 9508 ret// // BEEP_SHORT: -0001b4 9ac5 sbi BUZZER_PORT, BUZZER_PIN -0001b5 d01d rcall DELAY -0001b6 98c5 cbi BUZZER_PORT, BUZZER_PIN -0001b7 9508 ret +0001b7 9ac5 sbi BUZZER_PORT, BUZZER_PIN +0001b8 d022 rcall DELAY +0001b9 98c5 cbi BUZZER_PORT, BUZZER_PIN +0001ba 9508 ret // // BEEP_LONG: -0001b8 9ac5 sbi BUZZER_PORT, BUZZER_PIN -0001b9 d019 rcall DELAY -0001ba d018 rcall DELAY -0001bb d017 rcall DELAY -0001bc d016 rcall DELAY -0001bd 98c5 cbi BUZZER_PORT, BUZZER_PIN -0001be 9508 ret// +0001bb 9ac5 sbi BUZZER_PORT, BUZZER_PIN +0001bc d01e rcall DELAY +0001bd d01d rcall DELAY +0001be d01c rcall DELAY +0001bf d01b rcall DELAY +0001c0 98c5 cbi BUZZER_PORT, BUZZER_PIN +0001c1 9508 ret// // DEBOUNCE_SW: -0001bf 930f push r16 -0001c0 931f push r17 -0001c1 932f push r18 +0001c2 930f push r16 +0001c3 931f push r17 +0001c4 932f push r18 -0001c2 e02a ldi r18, 10 +0001c5 e02a ldi r18, 10 _loop_2: -0001c3 ef1f ldi r17, 255 +0001c6 ef1f ldi r17, 255 _loop_0: -0001c4 ef0f ldi r16, 255 +0001c7 ef0f ldi r16, 255 _dec_0: -0001c5 950a dec r16 -0001c6 f7f1 brne _dec_0 +0001c8 950a dec r16 +0001c9 f7f1 brne _dec_0 _loop_1: -0001c7 951a dec r17 -0001c8 f7d9 brne _loop_0 +0001ca 951a dec r17 +0001cb f7d9 brne _loop_0 _loop_3: -0001c9 952a dec r18 -0001ca f7c1 brne _loop_2 +0001cc 952a dec r18 +0001cd f7c1 brne _loop_2 -0001cb 912f pop r18 -0001cc 911f pop r17 -0001cd 910f pop r16 -0001ce 9508 ret// +0001ce 912f pop r18 +0001cf 911f pop r17 +0001d0 910f pop r16 +0001d1 9508 ret// // DELAY_LOOP_16: -0001cf 5041 subi DELAY_8_r, 1 -0001d0 4030 sbci DELAY_16_r, 0 -0001d1 f7e8 brcc DELAY_LOOP_16 -0001d2 9508 ret// +0001d2 5041 subi DELAY_8_r, 1 +0001d3 4030 sbci DELAY_16_r, 0 +0001d4 f7e8 brcc DELAY_LOOP_16 +0001d5 9508 ret + // + + DELAY_LOOP_24: +0001d6 5041 subi DELAY_8_r, 1 +0001d7 4030 sbci DELAY_16_r, 0 +0001d8 4050 sbci DELAY_24_r, 0 +0001d9 f7e0 brcc DELAY_LOOP_24 +0001da 9508 ret // DELAY: -0001d3 930f push r16 -0001d4 931f push r17 -0001d5 932f push r18 +0001db 930f push r16 +0001dc 931f push r17 +0001dd 932f push r18 -0001d6 e026 ldi r18, 6 +0001de e026 ldi r18, 6 _DELAY_0: -0001d7 ef0f ldi r16, 255 +0001df ef0f ldi r16, 255 _DELAY_1: -0001d8 ef1f ldi r17, 255 +0001e0 ef1f ldi r17, 255 _DELAY_2: -0001d9 951a dec r17 -0001da f7f1 brne _DELAY_2 +0001e1 951a dec r17 +0001e2 f7f1 brne _DELAY_2 -0001db 950a dec r16 -0001dc f7d9 brne _DELAY_1 -0001dd 952a dec r18 -0001de f7c1 brne _DELAY_0 +0001e3 950a dec r16 +0001e4 f7d9 brne _DELAY_1 +0001e5 952a dec r18 +0001e6 f7c1 brne _DELAY_0 -0001df 912f pop r18 -0001e0 911f pop r17 -0001e1 910f pop r16 -0001e2 9508 ret // +0001e7 912f pop r18 +0001e8 911f pop r17 +0001e9 910f pop r16 +0001ea 9508 ret // // DISPLAY_SYMBOLS: ; HGFEDCBA HGFEDCBA -0001e3 f9c0 .DB 0b11000000, 0b11111001 ; 0, 1 -0001e4 b0a4 .DB 0b10100100, 0b10110000 ; 2, 3 -0001e5 9299 .DB 0b10011001, 0b10010010 ; 4, 5 -0001e6 f882 .DB 0b10000010, 0b11111000 ; 6, 7 -0001e7 9080 .DB 0b10000000, 0b10010000 ; 8, 9 -0001e8 bf9c .DB 0b10011100, 0b10111111 ; °, -// +0001eb f9c0 .DB 0b11000000, 0b11111001 ; 0, 1 +0001ec b0a4 .DB 0b10100100, 0b10110000 ; 2, 3 +0001ed 9299 .DB 0b10011001, 0b10010010 ; 4, 5 +0001ee f882 .DB 0b10000010, 0b11111000 ; 6, 7 +0001ef 9080 .DB 0b10000000, 0b10010000 ; 8, 9 +0001f0 bf9c .DB 0b10011100, 0b10111111 ; °, -// // @@ -1613,36 +1622,36 @@ counted separately from r26..r31 here. "ATtiny2313A" register use summary: x : 2 y : 0 z : 1 r0 : 4 r1 : 2 r2 : 0 r3 : 0 r4 : 0 r5 : 0 r6 : 0 r7 : 0 r8 : 5 r9 : 0 r10: 0 r11: 0 r12: 0 -r13: 0 r14: 5 r15: 5 r16: 96 r17: 48 r18: 30 r19: 38 r20: 31 -r21: 8 r22: 0 r23: 2 r24: 5 r25: 3 r26: 3 r27: 3 r28: 0 +r13: 0 r14: 5 r15: 5 r16: 94 r17: 50 r18: 30 r19: 40 r20: 33 +r21: 10 r22: 0 r23: 2 r24: 5 r25: 3 r26: 3 r27: 3 r28: 0 r29: 0 r30: 2 r31: 2 Registers used: 20 out of 35 (57.1%) "ATtiny2313A" instruction use summary: .lds : 0 .sts : 0 adc : 3 add : 4 adiw : 1 and : 0 andi : 1 asr : 0 bclr : 0 bld : 0 brbc : 0 brbs : 0 -brcc : 3 brcs : 1 break : 0 breq : 4 brge : 1 brhc : 0 +brcc : 4 brcs : 1 break : 0 breq : 4 brge : 1 brhc : 0 brhs : 0 brid : 0 brie : 0 brlo : 0 brlt : 0 brmi : 0 brne : 17 brpl : 0 brsh : 0 brtc : 1 brts : 1 brvc : 0 brvs : 0 bset : 0 bst : 0 cbi : 23 cbr : 3 clc : 1 clh : 0 cli : 5 cln : 0 clr : 6 cls : 0 clt : 1 clv : 0 clz : 0 com : 2 cp : 0 cpc : 0 cpi : 10 cpse : 0 dec : 10 eor : 0 icall : 0 ijmp : 0 in : 2 -inc : 1 ld : 0 ldd : 0 ldi : 66 lds : 16 lpm : 2 +inc : 1 ld : 0 ldd : 0 ldi : 69 lds : 16 lpm : 2 lsl : 4 lsr : 10 mov : 11 movw : 0 neg : 1 nop : 0 or : 1 ori : 0 out : 15 pop : 32 push : 31 rcall : 42 -ret : 16 reti : 4 rjmp : 19 rol : 4 ror : 4 sbc : 1 -sbci : 1 sbi : 12 sbic : 3 sbis : 5 sbiw : 1 sbr : 2 +ret : 18 reti : 3 rjmp : 19 rol : 4 ror : 4 sbc : 1 +sbci : 3 sbi : 12 sbic : 3 sbis : 5 sbiw : 1 sbr : 2 sbrc : 0 sbrs : 0 sec : 1 seh : 0 sei : 5 sen : 0 ser : 0 ses : 0 set : 1 sev : 0 sez : 0 sleep : 0 -spm : 0 st : 2 std : 0 sts : 20 sub : 2 subi : 1 +spm : 0 st : 2 std : 0 sts : 20 sub : 2 subi : 2 swap : 0 tst : 1 wdr : 0 Instructions used: 54 out of 105 (51.4%) "ATtiny2313A" memory use summary [bytes]: Segment Begin End Code Data Used Size Use% --------------------------------------------------------------- -[.cseg] 0x000000 0x0003d2 944 12 956 2048 46.7% +[.cseg] 0x000000 0x0003e2 960 12 972 2048 47.5% [.dseg] 0x000060 0x00006d 0 13 13 128 10.2% [.eseg] 0x000000 0x000000 0 0 0 128 0.0% diff --git a/dist/default/production/attiny2313a_thermostat.X.production.map b/dist/default/production/attiny2313a_thermostat.X.production.map index 6af3a49..2997244 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 22 18:27:57 2023 +AVRASM ver. 2.2.7 main.asm Fri Jun 23 16:35:36 2023 EQU SIGNATURE_000 0000001e @@ -483,6 +483,7 @@ DEF TEMP_REG_A r16 DEF TEMP_REG_B r17 DEF DELAY_16_r r19 DEF DELAY_8_r r20 +DEF DELAY_24_r r21 DEF DISP_NUM_L r24 DEF DISP_NUM_H r25 EQU DIGIT_1_PIN 00000002 @@ -534,30 +535,28 @@ DSEG HYSTERESIS 00000069 DSEG TEMP_L 0000006a DSEG TEMP_H 0000006b DSEG TEMP_F 0000006c -CSEG RESET_vect 00000075 -CSEG TIMER0_COMPA_vect 00000024 +CSEG RESET_vect 00000074 +CSEG TIMER0_COMPA_vect 00000023 CSEG PCINT0_vect 0000000e -CSEG _PCINT0_vect_end 0000001e -CSEG _INTO_PROGRAM_STATE 0000001b -CSEG _CLR_CURRENT_DIGIT 0000002e -CSEG _indicate_1 00000031 -CSEG _indicate_2 00000043 -CSEG DISPLAY_DECODER 000001a9 -CSEG USI_TRANSMIT 00000125 -CSEG _indicate_3 00000055 -CSEG _indicate_4 00000062 -CSEG _indicate_exit 0000006c -CSEG MCU_INIT 00000077 -CSEG BEEP_SHORT 000001b4 -CSEG LOOP 00000098 -CSEG _STATE_DEFAULT 0000009a -CSEG _STATE_PROGRAM 000000ac -CSEG DISPLAY_UPD_DIGITS 0000018f -CSEG TEMP_CONV 0000011b -CSEG DEBOUNCE_SW 000001bf -CSEG TEMP_RD 000000d1 -CSEG _STATE_ERROR 000000b1 -CSEG SW_CHECK_PROCESS 00000131 +CSEG _PCINT0_vect_end 0000001d +CSEG _INTO_PROGRAM_STATE 0000001a +CSEG _CLR_CURRENT_DIGIT 0000002d +CSEG _indicate_1 00000030 +CSEG _indicate_2 00000042 +CSEG DISPLAY_DECODER 000001ac +CSEG USI_TRANSMIT 00000128 +CSEG _indicate_3 00000054 +CSEG _indicate_4 00000061 +CSEG _indicate_exit 0000006b +CSEG MCU_INIT 00000076 +CSEG BEEP_SHORT 000001b7 +CSEG LOOP 00000097 +CSEG _STATE_DEFAULT 00000099 +CSEG _STATE_PROGRAM 000000a0 +CSEG DISPLAY_UPD_DIGITS 00000192 +CSEG TEMP_UPD 000000c5 +CSEG _STATE_ERROR 000000a5 +CSEG SW_CHECK_PROCESS 00000134 DEF drem16uL r14 DEF drem16uH r15 DEF dres16uL r16 @@ -567,38 +566,42 @@ DEF dd16uH r17 DEF dv16uL r18 DEF dv16uH r19 DEF dcnt16u r20 -CSEG div16u 000000be -CSEG d16u_1 000000c1 -CSEG d16u_2 000000c6 -CSEG d16u_3 000000cf -CSEG OW_PRESENCE 0000013f -CSEG OW_SEND_BYTE 00000154 -CSEG OW_RD_BYTE 00000175 -CSEG _TEMP_RD_TO_UNSIGNED 000000ed -CSEG _TEMP_RD_CONTINUE 000000f6 -CSEG _TEMP_RD_END 000000ff -CSEG _USI_TRANSMIT_LOOP 0000012a -CSEG _INTO_DEFAULT_STATE 0000013a -CSEG _SW_CHECK_PROCESS_END 0000013d -CSEG DELAY_LOOP_16 000001cf -CSEG OW_CHECK_PRESENCE 0000014e -CSEG _EXIT 00000153 -CSEG _OW_SEND_BYTE_LOOP 00000158 -CSEG _OW_SEND_0 0000015b -CSEG _OW_SEND_1 00000166 -CSEG _OW_SEND_BYTE_END 00000170 -CSEG _OW_RD_BYTE_LP 0000017a +CSEG div16u 000000b2 +CSEG d16u_1 000000b5 +CSEG d16u_2 000000ba +CSEG d16u_3 000000c3 +CSEG TEMP_CONV 0000011e +CSEG DELAY_LOOP_24 000001d6 +CSEG TEMP_RD 000000d4 +CSEG OW_PRESENCE 00000142 +CSEG OW_SEND_BYTE 00000157 +CSEG OW_RD_BYTE 00000178 +CSEG _TEMP_RD_TO_UNSIGNED 000000f0 +CSEG _TEMP_RD_CONTINUE 000000f9 +CSEG _TEMP_RD_END 00000102 +CSEG _USI_TRANSMIT_LOOP 0000012d +CSEG DEBOUNCE_SW 000001c2 +CSEG _INTO_DEFAULT_STATE 0000013d +CSEG _SW_CHECK_PROCESS_END 00000140 +CSEG DELAY_LOOP_16 000001d2 +CSEG OW_CHECK_PRESENCE 00000151 +CSEG _EXIT 00000156 +CSEG _OW_SEND_BYTE_LOOP 0000015b +CSEG _OW_SEND_0 0000015e +CSEG _OW_SEND_1 00000169 +CSEG _OW_SEND_BYTE_END 00000173 +CSEG _OW_RD_BYTE_LP 0000017d EQU dividend 00000061 EQU divisor 0000000a -CSEG DIV_LOOP 00000198 -CSEG DISPLAY_SYMBOLS 000001e3 -CSEG DELAY 000001d3 -CSEG BEEP_LONG 000001b8 -CSEG _loop_2 000001c3 -CSEG _loop_0 000001c4 -CSEG _dec_0 000001c5 -CSEG _loop_1 000001c7 -CSEG _loop_3 000001c9 -CSEG _DELAY_0 000001d7 -CSEG _DELAY_1 000001d8 -CSEG _DELAY_2 000001d9 +CSEG DIV_LOOP 0000019b +CSEG DISPLAY_SYMBOLS 000001eb +CSEG DELAY 000001db +CSEG BEEP_LONG 000001bb +CSEG _loop_2 000001c6 +CSEG _loop_0 000001c7 +CSEG _dec_0 000001c8 +CSEG _loop_1 000001ca +CSEG _loop_3 000001cc +CSEG _DELAY_0 000001df +CSEG _DELAY_1 000001e0 +CSEG _DELAY_2 000001e1 diff --git a/dist/default/production/attiny2313a_thermostat.X.production.obj b/dist/default/production/attiny2313a_thermostat.X.production.obj index e12b9c2bd37862b9bda05e12ff73e9d5ada332f9..a826e10f7670469726378dc2db4053251ffacc5a 100644 GIT binary patch literal 4534 zcmXBX30zgh7r^l|)6?9E)HFA6NzH{t)U-6gU31@eK}10X6%p4Gcgywhc#5Fru37Gy znHgA_m6n&%_VQthmK!RCZU6qi!~1-k$CtVDX6Bqb_Z}1p3=@$WWlKd384%oe+@!eJ zl;ExjQ{w29+!-QG_*vdtT_gll%&jUC4k~#9L|TIYPmsuS;0aHtNE;C7=^)Y;Jb8jK z&x6VvkBM{!RdUOSbOBY}!6MzjQxfe*wJ>_R(^I{$tVj>=bnas!JwXj$ph#~})ANK# zA5crbrKp|568%9PH;WDcL2kA&5Cpr~*dS2X&6vTUo<=bQ)c5oi83`JA#)^yr&uBQK zK|>8^3}|$MOZ=0@?nsds@T^Sqqe&PcjH9P%Q3a7$&`h^F9yD)6m<*E;PozjZ2-RN| zVPW)42H`~uMW%ojnI4fO5RsW7G8MGU^omRatqLoNOb4xVtw=I>&R1T9+aYbVCk3>1 z^D&e5yl}G=FVyEFmDa8>P-GTppOr2$8@!lnMCO1Fne@yBk$G%p9*A-ZMCOBzVNoIr zKquW{8tANp7lAIi!^NPh?r;g{rmHWdb=SZZJ=`3mWuT|-NAXfq(y|=%(*3Ley|W1U zRnSNG^BU-@NmvQ`>4d9j{dGdcfV|-%tHD6$lE@k`D6FH1jvHLWCH5vmbcgIshUz@* zO@`?X*Ms3%^ltzo^c$J9k$STfqw+Wa8^P%2d}Pzc%;ErS0%Jq?*i4Id&WUURF=3rV zwt;a)g z)Eo4iA=k4`@u8S~myZu*%VNPj37F}iVd3qM-a8?ydbmj|SDG`@oS%W~4OZ>7tooD$nSfL>+UiI_f_MMhpd z5g+jS(nPMZvGu-ner(YDb&Hm%iz+s9oaHVptLRw~oisa>b5#g7IlqhC2b&#s_5f`0 zG1)`f>p7%Fu{DejhRL>~r$zn%+x6?kV28uBkHAi6t;nBXR~QNZ8|*G#DDn^3lf~eF z!CqfYk^g}=^zHW_*r&%>@g_YiBJviGObPaDkLm!=U!*TgJspkpowY zd76S#wV0ijP$Z`kmo&4vb+{A`&Sb1`Nel47#Ro2l z03T*Bb1U%C#X>RVz*%0)h9fN>J43}(0_XAvhzTInPj0sNVU7QdL{^bL)A0E;9H7|(X4*w#EWSFzQ0{Tj3)DkkTfxx%paY(VlN~us%?sde#!WHpz`fkEV%md33ag0(_cMqq z3Ow+#R!8vA%MzVHkuO|KXYhMKWiegAAHFa#T|seBeKFm@qg*4VJNQ#4dSj7UPxB{@Nd`4E zQ8PeIJ&-A&7PY|41hw^Krh+0vtye%jhs`el^{=_aECdbo z(jxGTLw**6hC1^y&`4)q4jSvstHHDHfHk1WH9p+5rYA{nI%t+(Ud$%Y{A5KjuY-{6 zR54pY=*54 zkxP_FGkC!(VknVjh<=O8XohO)u7F|sYSOTWH|J757~!if<|-KJEiFcG-l!rjT?eBJ zhlwcwV>I@gV64XeD_f1$xPAjMH@f;U&Y9{*tj2zeOXGFSZ4j4FT#5+}2U{^w*>nA=Fi(q-n6DEkHh9v+Qg=)y|JfX?0Ar? zUylQ4^y?GA2O7mB@S#RA8GJ;gwo|}a&1w?(_#T(0fphm5oD4qkmJ^!-J}o93EefCM zv6%(V7k?*qHn`yB>vO^9#b?CM17A>6tX7AM8nRXgM?+o!@^n9G;LCndVwZrgBDs}I z!KLDxVwZu-I!3F**E(h;_(sR90^dgV6RY*&yJGUZ27IrB*Mc83K<>TyQ3K2XKWTto z@UyR>*bU%{#;fE4ZcsZUfgf!0n(w1Ka^_Xn?!GO$~52 z_*Dbca`T(+XD_(*XRcVSGPe)y6ng;NN#7_|tIXX;i^LuR_tvF}Jq!wSHiY(v;aA~jLQ+CX!qlW0C95RH RFpZz%6H>!l&n)Sc{{yPWyAA*V literal 4462 zcmXBX2Y3`k6u|K}%YpQOg$@Zts^l*8PC_SC=^!N`1QH;HB!mtDRC>8w4pP8ElcGo! z5H&$Wu(GkBNV@Pj!Q-BuB3-}} zCuq|ZJehS&q%U|Xue?YXQ9}Ajzcy=Oq+A~FD5@@RF zOa{#~9V(^y39b>Kg*#MaDrhM){AlGOmndqUDXuIs4Ybx!b?Snf^%02yPEV*vEO6;l ziVznyvq78UGrb~nK!>8LB1xcQo+XkDI{7MzurAVBYvzJ3 zZZ4^mt~#`$TVpQsDBX*gvH74!cDl#{&@<17ECivM)GPvF`2@BY^s;Y?ECIb;VIpau zk4DHp>8p)bf_@s|^Ps;*_yQQ9qrXTQs577lce_MZfk7INVsI;_Wi=S0@vH$uvq^a^ z7^d;81H*L^)`MrY!wr-X+M!}(KFhZejIwQ!O<=UEmk1%rnBwswJSbx|LPC;p+Rqj+ zUL)KJCS((HCU{PJ&Z11zRZ~pLXJ2K5$*s9;qfD8{2G|ZFbicnuiL}p(ybPwgdW-A; zQN_&9PB2Xe-3_93&^=(f&d+OLMmD4G1u;74K1!@Ex?*O250U*~mVHX(0GREi=Yt^5 z6Dsm1h}YesNXTXT9Ri8EjgNpix{Z&5BsaH?fn@hEk>emmH}+d#?tR*v2C2DKMBV}O z?ojhSb3Okw7sY~~xtygeJpGs-iwfArA5gRSba_9P_}F9Tsacv!ABttZvLY8iT5cIX zmKRhI`G}eox#j#=$v%=#sd+w^y{dRYd;Sc(_%62;tD007`I--_)2oSG0&6s7#abVi zZz=0^VJ}nGON1XAn(^rhWuxA@O4%ec{n)HE*C=k8@kO&P6ByZX`#5lkqJ53C0Cx=~@7*<@4l(Z1TLd(%? z8q=p7^VJno5gg|QYgjurQnaY}30UGg?x^HQAF8s1lIxaoepd+|Fl zq$ck*`Pm^2L2j-89MTBn6@)pYF*p+_4tW~9A6VTXO~F}jxI=WMKPax?kmlf=x4c7I zfDh}@Pb+Y~9{oH6F4Vc{5dHRkRPm9c^pN_vILIN)xqMQUTQ2Zv18#+Y&oWj!qz(A| z;x7(q3od5Rb9-Q4ED}=#Hu!=gz|;X>a-x~K;44lvQxAO2!C~ryOLmNyAn?t- z%3?IZZ-bdd${-A`4;Xo6StmL_=Bo+m~VyjHkhjOKOScSuZ2aKrYB(FA>k z2gGPz1$s+gMmOzrF`Cycc8k$;ZnKd}@x41pjOJCy{wc*Bjkz5)cb7F6qY3`d6LbJS z@)9;3!A}`?#dHGq@+yew4DNGinr`6d4D#v@9(Wmx_mvcR8KNh6=nD}O3VsQALQEKV ziX)(i%JYt0bw zkJbzY|7y)J@E?bZc~*qoPVNd*%=C@`mY2Xrf-=tDV#WeTBI`8{l+~K?pj<#(F%!UJ ziswLi#Y9jcppTfzpkhEfF%h7Ww}Y6ept2$gR8ep$nW~Ct5TJWL22|5{6xBUJVq(GL zx)zEjJj6T`Jjwf~6i@NSHgVL{;OB~o2Q_t~5^w2Ag5XTB12}c8 zoxr7I?E)b>)?U!YUN2@JXq$6H%zn^r3)|)ZXrFUb%p0J?R%#A{jycD~90HwmYaIri z`K@J+fG$2R$0=QT&zrX>-6X<~?mGHOYI^ACr$En)-^JvC(CkxU&d^twj}5?qXnOrL z)Q{fwIzRek(uO0_^wk~C$!PlB4fmtJy~>XPc3Cm!=y0I+^C4}*Z}swHkiF86!5Q<# zoTtqY4dVhBnsZo;4TeR`5t9#w=kZ$p0z8|=tuMidWlP0;1xD&qm%u2Ux+`F`zM8Ir zF|E0E4UF~G5_27l^Oh5%GcvxITLoZ3(Ks6suIoh2{d+>4qveda~Di4ATLFf&Bj(t)4YD5!|1$VbiQYP59)UR}Y~x~(q~DZZL9(v$Zy-e{ zilf%d)rtBWr0PWd1LpC%HUCoP>qPwr77(f>U?DSRA+v~>tulNUA6VtV3);8>jbALJjbfGE-;dSgWmTlj znv&&WRRU{0mBr$yHS5UTssh%NsZ|whAX6&wta~J9t%Eoxo1*N3qL0L98xdcZpl9 zu3!(pX{~PHHO;*{*sGcL0Q*=|s}I=Enp%CqfqR8w^#iZ_9*NZ-ywR+>SOdYq0H0Xl z;LX5?VsW^bLz^994FQLBGKYdAI+>g)=BN%a930C&C)Ox%+^#RyXz*4hHDkaDZ8H{} z)HV~rDZ92RwDSYgmmVB^SW)4!G)5`Vx@qOygZ%?J}x;U);#bD zXNsk#!>5|Eo(`XB%8S6~8qZ>Iad?+n5~5;a6P;nB zQexv5OzG2axU+4rD>$Tmh%+)Zi7uS6@lg{~;@h+hX&W{zdU`M)g}<@!u_>_$@yVs5 T#6{ALpVMMfLpsbYt(E@)4l=1W diff --git a/dist/default/production/attiny2313a_thermostat.X.production.tmp b/dist/default/production/attiny2313a_thermostat.X.production.tmp index 9079a64..2c26816 100644 --- a/dist/default/production/attiny2313a_thermostat.X.production.tmp +++ b/dist/default/production/attiny2313a_thermostat.X.production.tmp @@ -33,62 +33,64 @@ main.asm30 main.asm31 main.asm32 - main.asm186 - main.asm91 + main.asm185 + main.asm90 main.asm53 - <_PCINT0_vect_end>main.asm81 - <_INTO_PROGRAM_STATE>main.asm77 - <_CLR_CURRENT_DIGIT>main.asm103 - <_indicate_1>main.asm107 - <_indicate_2>main.asm127 - main.asm579 - main.asm392 - <_indicate_3>main.asm145 - <_indicate_4>main.asm161 - <_indicate_exit>main.asm173 - main.asm192 - main.asm595 - main.asm234 - <_STATE_DEFAULT>main.asm238 - <_STATE_PROGRAM>main.asm256 - main.asm538 - main.asm372 - main.asm613 - main.asm280 - <_STATE_ERROR>main.asm262 - main.asm423 + <_PCINT0_vect_end>main.asm80 + <_INTO_PROGRAM_STATE>main.asm76 + <_CLR_CURRENT_DIGIT>main.asm102 + <_indicate_1>main.asm106 + <_indicate_2>main.asm126 + main.asm583 + main.asm396 + <_indicate_3>main.asm144 + <_indicate_4>main.asm160 + <_indicate_exit>main.asm172 + main.asm191 + main.asm599 + main.asm233 + <_STATE_DEFAULT>main.asm237 + <_STATE_PROGRAM>main.asm244 + main.asm542 + main.asm268 + <_STATE_ERROR>main.asm250 + main.asm427 div16u.asm32 div16u.asm36 div16u.asm42 div16u.asm52 - main.asm447 - main.asm474 - main.asm507 - <_TEMP_RD_TO_UNSIGNED>main.asm315 - <_TEMP_RD_CONTINUE>main.asm326 - <_TEMP_RD_END>main.asm336 - <_USI_TRANSMIT_LOOP>main.asm410 - <_INTO_DEFAULT_STATE>main.asm436 - <_SW_CHECK_PROCESS_END>main.asm439 - main.asm639 - main.asm463 - <_EXIT>main.asm469 - <_OW_SEND_BYTE_LOOP>main.asm479 - <_OW_SEND_0>main.asm483 - <_OW_SEND_1>main.asm491 - <_OW_SEND_BYTE_END>main.asm498 - <_OW_RD_BYTE_LP>main.asm513 - main.asm555 - main.asm671 - main.asm646 - main.asm603 - <_loop_2>main.asm619 - <_loop_0>main.asm621 - <_dec_0>main.asm623 - <_loop_1>main.asm626 - <_loop_3>main.asm629 - <_DELAY_0>main.asm652 - <_DELAY_1>main.asm654 - <_DELAY_2>main.asm656 + main.asm376 + main.asm650 + main.asm284 + main.asm451 + main.asm478 + main.asm511 + <_TEMP_RD_TO_UNSIGNED>main.asm319 + <_TEMP_RD_CONTINUE>main.asm330 + <_TEMP_RD_END>main.asm340 + <_USI_TRANSMIT_LOOP>main.asm414 + main.asm617 + <_INTO_DEFAULT_STATE>main.asm440 + <_SW_CHECK_PROCESS_END>main.asm443 + main.asm643 + main.asm467 + <_EXIT>main.asm473 + <_OW_SEND_BYTE_LOOP>main.asm483 + <_OW_SEND_0>main.asm487 + <_OW_SEND_1>main.asm495 + <_OW_SEND_BYTE_END>main.asm502 + <_OW_RD_BYTE_LP>main.asm517 + main.asm559 + main.asm683 + main.asm658 + main.asm607 + <_loop_2>main.asm623 + <_loop_0>main.asm625 + <_dec_0>main.asm627 + <_loop_1>main.asm630 + <_loop_3>main.asm633 + <_DELAY_0>main.asm664 + <_DELAY_1>main.asm666 + <_DELAY_2>main.asm668 diff --git a/macros.asm b/macros.asm index 01a1bad..6a7ed0d 100644 --- a/macros.asm +++ b/macros.asm @@ -1,20 +1,20 @@ .MACRO outi - ldi @0, @2 - out @1, @0 + ldi @0, @2 + out @1, @0 .ENDMACRO .MACRO display_load - ldi DISP_NUM_L, LOW(@0) - ldi DISP_NUM_H, HIGH(@0) + ldi DISP_NUM_L, LOW(@0) + ldi DISP_NUM_H, HIGH(@0) .ENDMACRO .MACRO ow_pull - sbi OW_DDR, OW_LINE + sbi OW_DDR, OW_LINE .ENDMACRO .MACRO ow_release - cbi OW_DDR, OW_LINE + cbi OW_DDR, OW_LINE .ENDMACRO .MACRO relay_on @@ -24,21 +24,16 @@ .MACRO relay_off cbi RELAY_PORT, RELAY_PIN .ENDMACRO - -.MACRO display_on - push r16 - outi r16, TIMSK, (1< @@ -51,7 +52,6 @@ TEMP_F: .BYTE 1 ; Дробная часть // PCINT0_vect: - reti push r16 push r17 push r18 @@ -203,13 +203,13 @@ MCU_INIT: ; **** ПРЕРЫВАНИЕ ПО ИЗМЕНЕНИЮ СОСТОЯНИЯ ПИНОВ ****************** outi r16, GIMSK, (1< ; **** ПОДПРОГРАММЫ ********************************************** .INCLUDE "div16u.asm" - -// + +// +TEMP_UPD: + push r17 + rcall TEMP_CONV + DELAY24 760000 + rcall TEMP_RD + + ; обновляем данные в ячейках + lds r17, TEMP_L + mov DISP_NUM_L, r17 + lds r17, TEMP_H + mov DISP_NUM_H, r17 + pop r17 + ret +// + +// TEMP_RD: push r16 push r17 @@ -640,7 +645,15 @@ DELAY_LOOP_16: subi DELAY_8_r, 1 sbci DELAY_16_r, 0 brcc DELAY_LOOP_16 - ret// + ret +// + +DELAY_LOOP_24: + subi DELAY_8_r, 1 + sbci DELAY_16_r, 0 + sbci DELAY_24_r, 0 + brcc DELAY_LOOP_24 + ret // DELAY: diff --git a/main.hex b/main.hex index 6d5fbfe..c0ad2b7 100644 --- a/main.hex +++ b/main.hex @@ -1,64 +1,65 @@ :020000020000FC -:0200000072C0CC +:0200000073C0CB :0200160018953B :10001A0015C00F931F932F933F930FB7B49908C03E :10002A0020916000203009F003C011E010936000B5 :10003A000FBF3F912F911F910F9118954F935F9387 -:10004A000F935FB74091670045300CF403C0442713 -:10005A0040936700403081F49398949895980EF0F5 -:10006A0002C00BE002C000916500002311F0929AD1 -:10007A0001C0929867D1E2D0413089F4929894985D -:10008A0095980091630010916400012319F000C053 -:10009A00939A01C092980091640054D1CFD0423013 -:1000AA0059F4929893989598949A009163004AD13A -:1000BA00002D0F77002EC2D0433041F492989398C6 -:1000CA009498959A00916C003DD1B8D0439540938D -:1000DA0067005FBF0F915F914F9118950FED0DBFAC -:1000EA000EE701BB01EE07BB0CE108BB02E000BF53 -:1000FA0005E003BF09E106BF01E009BF00E20BBF4B -:10010A000CE100BD11241092670000E0009360002A -:10011A00002700936A0000936B0000EF00936C00C5 -:10012A001CD180E090E000916000003079F4F0D0BA -:10013A0070FD969A70FF969877D01AD119D12AD065 -:10014A0010916A00812F10916B00912F013011F4E8 -:10015A00DFD080D0023039F71BE010936300109390 -:10016A00640010936500109366000000DCCFEE2453 -:10017A00FF1841E1001F111F4A9509F40895EE1C6A -:10018A00FF1CE21AF30A20F4E20EF31E8894F2CF5F -:10019A000894F0CF0F931F932F933F934F9368D0F8 -:1001AA000CEC802E7AD00EEB802E77D0AAE6B0E047 -:1001BA0095D0ABE6B0E092D010916A0020916B0026 -:1001CA002F93287F283F11F0E89409C02F91689453 -:1001DA001095209531E0130F30E0231F01C02F91B5 -:1001EA002695179526951795269517952695179569 -:1001FA0030916A000EF43195432F3F70432F330F2D -:10020A00330F330F440F340F36953695369536959E -:10021A0010936A0020936B0030936C004F913F91CA -:10022A002F911F910F9108950F9322D00CEC802EDD -:10023A0034D004E4802E31D00F9108950F930FB873 -:10024A0000E40EB90BE10DB9769BFDCFC09AC098B8 -:10025A000F9108950F938CD0B29B0196B39B01978F -:10026A00B49B01C003C000E0009360000F910895A1 -:10027A00F894B99A33E04EEB8BD0B99830E04AE85B -:10028A0087D005D033E042E383D078940895B19BB8 -:10029A00716002C0B1997E7F08950F931F93082D54 -:1002AA0018E0069508F458F0F894B99A30E046E751 -:1002BA006FD0B99830E042E16BD078940AC0F894D4 -:1002CA00B99A30E04AE064D0B99830E04EE760D09D -:1002DA0078941A9531F71F910F9108950F931F93F0 -:1002EA00002718E0F8940695B99A30E04AE050D011 -:1002FA00B99830E040E14CD0B199006830E04CE662 -:10030A0047D01A9581F70C9378941F910F9108950D -:10031A00F8945F9354E0A3E6B0E080936100909371 -:10032A00620000916100109162002AE030E01FDF54 -:10033A00ED9200936100109362005A9591F75F91D4 -:10034A00789408950F931F93E2ECF3E01127E00FDE -:10035A00F11F04901F910F910895C59A1DD0C59859 -:10036A000895C59A19D018D017D016D0C5980895EF -:10037A000F931F932F932AE01FEF0FEF0A95F1F7C0 -:10038A001A95D9F72A95C1F72F911F910F910895C0 -:10039A0041503040E8F708950F931F932F9326E0BA -:1003AA000FEF1FEF1A95F1F70A95D9F72A95C1F7BA -:1003BA002F911F910F910895C0F9A4B0999282F8D4 -:0403CA0080909CBFC4 +:10004A000F931F935FB74091670045300CF403C0CC +:10005A00442740936700403081F493989498959888 +:10006A000EF002C00BE002C000916500002311F0FF +:10007A00929A01C092986AD1E5D0413081F492985F +:10008A00949895980091640030916500032B11F0C3 +:10009A00939A01C093980091640058D1D3D042300A +:1000AA0059F4929893989598949A009163004ED136 +:1000BA00002D0F77002EC6D0433041F492989398C2 +:1000CA009498959A00916C0041D1BCD04395409385 +:1000DA0067005FBF1F910F915F914F9118950FEDC8 +:1000EA000DBF0FE701BB01EE07BB0CE108BB02E045 +:1000FA0000BF05E003BF09E106BF01E009BF00E256 +:10010A000BBF0CE100BD37E04EE746D11124109237 +:10011A00670000E000936000002700936A000093E4 +:10012A006B0000EF00936C001CD180E090E000911E +:10013A006000003071F49698EFD07AD052E13DE831 +:10014A004DEF2ED12BD010916A00812F10916B00A8 +:10015A00912F013019F49698DFD080D0023039F708 +:10016A00969A1BE010936300109364001093650045 +:10017A0010936600DCCFEE24FF1841E1001F111F27 +:10018A004A9509F40895EE1CFF1CE21AF30A20F4BA +:10019A00E20EF31E8894F2CF0894F0CF0F931F93C8 +:1001AA002F933F934F9368D00CEC802E7AD00EEBAE +:1001BA00802E77D0AAE6B0E095D0ABE6B0E092D038 +:1001CA0010916A0020916B002F93287F283F11F02D +:1001DA00E89409C02F9168941095209531E0130F87 +:1001EA0030E0231F01C02F91269517952695179564 +:1001FA00269517952695179530916A000EF4319534 +:10020A00432F3F70432F330F330F330F440F340FF5 +:10021A00369536953695369510936A0020936B007D +:10022A0030936C004F913F912F911F910F91089538 +:10023A000F9322D00CEC802E34D004E4802E31D0DF +:10024A000F9108950F930FB800E40EB90BE10DB9A1 +:10025A00769BFDCFC09AC0980F9108950F938CD0CA +:10026A00B29B0196B39B0197B49B01C003C000E007 +:10027A00009360000F910895F894B99A33E04EEB19 +:10028A008BD0B99830E04AE887D005D033E042E312 +:10029A0083D078940895B19B716002C0B1997E7F32 +:1002AA0008950F931F93082D18E0069508F458F047 +:1002BA00F894B99A30E046E76FD0B99830E042E155 +:1002CA006BD078940AC0F894B99A30E04AE064D0C6 +:1002DA00B99830E04EE760D078941A9531F71F91BB +:1002EA000F9108950F931F93002718E0F89406952D +:1002FA00B99A30E04AE050D0B99830E040E14CD0A9 +:10030A00B199006830E04CE647D01A9581F70C9312 +:10031A0078941F910F910895F8945F9354E0A3E69F +:10032A00B0E08093610090936200009161001091A7 +:10033A0062002AE030E01FDFED9200936100109323 +:10034A0062005A9591F75F91789408950F931F93DD +:10035A00E4EDF3E01127E00FF11F04901F910F91D4 +:10036A000895C59A22D0C5980895C59A1ED01DD061 +:10037A001CD01BD0C59808950F931F932F932AE082 +:10038A001FEF0FEF0A95F1F71A95D9F72A95C1F7DA +:10039A002F911F910F91089541503040E8F7089529 +:1003AA00415030405040E0F708950F931F932F9328 +:1003BA0026E00FEF1FEF1A95F1F70A95D9F72A955C +:1003CA00C1F72F911F910F910895C0F9A4B0999286 +:0603DA0082F880909CBF38 :00000001FF