diff --git a/dist/default/production/attiny2313a_thermostat.X.production.hex b/dist/default/production/attiny2313a_thermostat.X.production.hex index 6cd9ddc..7016ccb 100644 --- a/dist/default/production/attiny2313a_thermostat.X.production.hex +++ b/dist/default/production/attiny2313a_thermostat.X.production.hex @@ -1,63 +1,64 @@ :020000020000FC -:0200000069C0D5 +:0200000073C0CB :0200160018953B :10001A0015C00F931F932F933F930FB7B49908C03E :10002A0020916000203009F003C011E010936000B5 :10003A000FBF3F912F911F910F9118954F935F9387 -:10004A000F935FB74091670045300CF403C0442713 -:10005A0040936700403081F49398949895980EF0F5 -:10006A0002C00BE002C000916500002311F0929AD1 -:10007A0001C092985ED1D9D0413041F492989498B7 -:10008A009598939A0091640054D1CFD0423059F494 -:10009A00929893989598949A009163004AD1002D6A -:1000AA000F77002EC2D0433041F4929893989498D7 -:1000BA00959A00916C003DD1B8D043954093670062 -:1000CA005FBF0F915F914F9118950FED0DBF0EE72E -:1000DA0001BB01EE07BB0CE108BB02E000BF05E073 -:1000EA0003BF09E106BF01E009BF00E20BBF0CE153 -:1000FA0000BD11241092670000E000936000002701 -:10010A0000936A0000936B0000EF00936C001CD10F -:10011A0080E090E000916000003079F4F0D070FD4A -:10012A00969A70FF969877D01AD119D12AD0109141 -:10013A006A00812F10916B00912F013011F4DFD0EA -:10014A0080D0023039F71BE01093630010936400EB -:10015A0010936500109366000000DCCFEE24FF18B0 -:10016A0041E1001F111F4A9509F40895EE1CFF1C76 -:10017A00E21AF30A20F4E20EF31E8894F2CF0894EE -:10018A00F0CF0F931F932F933F934F9368D00CECAC -:10019A00802E7AD00EEB802E77D0AAE6B0E095D0EA -:1001AA00ABE6B0E092D010916A0020916B002F93D9 -:1001BA00287F283F11F0E89409C02F916894109580 -:1001CA00209531E0130F30E0231F01C02F912695AF -:1001DA001795269517952695179526951795309173 -:1001EA006A000EF43195432F3F70432F330F330FBC -:1001FA00330F440F340F369536953695369510934E -:10020A006A0020936B0030936C004F913F912F91BD -:10021A001F910F9108950F9322D00CEC802E34D0A9 -:10022A0004E4802E31D00F9108950F930FB800E4A3 -:10023A000EB90BE10DB9769BFDCFC09AC0980F910C -:10024A0008950F938CD0B29B0196B39B0197B49BF0 -:10025A0001C003C000E0009360000F910895F89474 -:10026A00B99A33E04EEB8BD0B99830E04AE887D0A0 -:10027A0005D033E042E383D078940895B19B71604E -:10028A0002C0B1997E7F08950F931F93082D18E03D -:10029A00069508F458F0F894B99A30E046E76FD01A -:1002AA00B99830E042E16BD078940AC0F894B99AD0 -:1002BA0030E04AE064D0B99830E04EE760D07894F4 -:1002CA001A9531F71F910F9108950F931F930027E5 -:1002DA0018E0F8940695B99A30E04AE050D0B998F7 -:1002EA0030E040E14CD0B199006830E04CE647D0AC -:1002FA001A9581F70C9378941F910F910895F894A9 -:10030A005F9354E0A3E6B0E08093610090936200AB -:10031A0000916100109162002AE030E01FDFED9247 -:10032A0000936100109362005A9591F75F91789457 -:10033A0008950F931F93E0EBF3E01127E00FF11FED -:10034A0004901F910F910895C59A1DD0C5980895DC -:10035A00C59A19D018D017D016D0C59808950F93FA -:10036A001F932F932AE01FEF0FEF0A95F1F71A95C3 -:10037A00D9F72A95C1F72F911F910F9108954150EE -:10038A003040E8F708950F931F932F9326E00FEF5D -:10039A001FEF1A95F1F70A95D9F72A95C1F72F9108 -:1003AA001F910F910895C0F9A4B0999282F8809094 -:0203BA009CBFE6 +:10004A000F931F935FB74091670045300CF403C0CC +:10005A00442740936700403081F493989498959888 +:10006A000EF002C00BE002C000916500002311F0FF +:10007A00929A01C0929867D1E2D0413081F4929865 +:10008A00949895980091640030916500032B11F0C3 +:10009A00939A01C093980091640055D1D0D0423010 +:1000AA0059F4929893989598949A009163004BD139 +:1000BA00002D0F77002EC3D0433041F492989398C5 +:1000CA009498959A00916C003ED1B9D0439540938B +:1000DA0067005FBF1F910F915F914F9118950FEDC8 +:1000EA000DBF0EE701BB01EE07BB0CE108BB02E046 +:1000FA0000BF05E003BF09E106BF01E009BF00E256 +:10010A000BBF0CE100BD11241092670000E00093C0 +:10011A006000002700936A0000936B0000EF0093D1 +:10012A006C001CD180E090E000916000003079F40E +:10013A00F0D070FD969A70FF969877D01AD119D19F +:10014A002AD010916A00812F10916B00912F0130F3 +:10015A0011F4DFD080D0023039F71BE0109363002E +:10016A001093640010936500109366000000DCCFC2 +:10017A00EE24FF1841E1001F111F4A9509F4089562 +:10018A00EE1CFF1CE21AF30A20F4E20EF31E889416 +:10019A00F2CF0894F0CF0F931F932F933F934F936F +:1001AA0068D00CEC802E7AD00EEB802E77D0AAE69F +:1001BA00B0E095D0ABE6B0E092D010916A00209101 +:1001CA006B002F93287F283F11F0E89409C02F91E4 +:1001DA0068941095209531E0130F30E0231F01C079 +:1001EA002F91269517952695179526951795269555 +:1001FA00179530916A000EF43195432F3F70432FC3 +:10020A00330F330F330F440F340F36953695369527 +:10021A00369510936A0020936B0030936C004F91CF +:10022A003F912F911F910F9108950F9322D00CECBB +:10023A00802E34D004E4802E31D00F9108950F938C +:10024A000FB800E40EB90BE10DB9769BFDCFC09A49 +:10025A00C0980F9108950F938CD0B29B0196B39BCF +:10026A000197B49B01C003C000E0009360000F91A6 +:10027A000895F894B99A33E04EEB8BD0B99830E0F0 +:10028A004AE887D005D033E042E383D078940895D2 +:10029A00B19B716002C0B1997E7F08950F931F933D +:1002AA00082D18E0069508F458F0F894B99A30E049 +:1002BA0046E76FD0B99830E042E16BD078940AC033 +:1002CA00F894B99A30E04AE064D0B99830E04EE741 +:1002DA0060D078941A9531F71F910F9108950F9372 +:1002EA001F93002718E0F8940695B99A30E04AE07F +:1002FA0050D0B99830E040E14CD0B199006830E074 +:10030A004CE647D01A9581F70C9378941F910F9178 +:10031A000895F8945F9354E0A3E6B0E080936100F7 +:10032A009093620000916100109162002AE030E02F +:10033A001FDFED9200936100109362005A9591F7C6 +:10034A005F91789408950F931F93E4ECF3E01127DB +:10035A00E00FF11F04901F910F910895C59A1DD0C7 +:10036A00C5980895C59A19D018D017D016D0C5982F +:10037A0008950F931F932F932AE01FEF0FEF0A950B +:10038A00F1F71A95D9F72A95C1F72F911F910F9175 +:10039A00089541503040E8F708950F931F932F9323 +:1003AA0026E00FEF1FEF1A95F1F70A95D9F72A956C +:1003BA00C1F72F911F910F910895C0F9A4B0999296 +:0603CA0082F880909CBF48 :00000001FF diff --git a/dist/default/production/attiny2313a_thermostat.X.production.lss b/dist/default/production/attiny2313a_thermostat.X.production.lss index 47a6df3..06e1810 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 06:32:38 2023 +AVRASM ver. 2.2.7 main.asm Thu Jun 22 12:07:49 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(276): Including file 'div16u.asm' +main.asm(275): Including file 'div16u.asm' div16u.asm(22): warning: Register r16 already defined by the .DEF directive -main.asm(276): 'div16u.asm' included form here +main.asm(275): 'div16u.asm' included form here div16u.asm(23): warning: Register r17 already defined by the .DEF directive -main.asm(276): 'div16u.asm' included form here +main.asm(275): 'div16u.asm' included form here div16u.asm(24): warning: Register r16 already defined by the .DEF directive -main.asm(276): 'div16u.asm' included form here +main.asm(275): 'div16u.asm' included form here div16u.asm(25): warning: Register r17 already defined by the .DEF directive -main.asm(276): 'div16u.asm' included form here +main.asm(275): 'div16u.asm' included form here div16u.asm(27): warning: Register r19 already defined by the .DEF directive -main.asm(276): 'div16u.asm' included form here +main.asm(275): 'div16u.asm' included form here div16u.asm(28): warning: Register r20 already defined by the .DEF directive -main.asm(276): 'div16u.asm' included form here +main.asm(275): '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(276): Including file 'div16u.asm' +main.asm(275): Including file 'div16u.asm' ; @@ -817,7 +817,7 @@ main.asm(276): Including file 'div16u.asm' .MACRO DELAY16 ldi DELAY_16_r, HIGH(@0*F_CPU/4-2) ldi DELAY_8_r, LOW(@0*F_CPU/4-2) - rcall DELAY_LOOP_16 + rcall DELAY_LOOP_16 // @@ -843,7 +843,7 @@ main.asm(276): Including file 'div16u.asm' // .ORG 0x00 -000000 c069 rjmp RESET_vect +000000 c073 rjmp RESET_vect .ORG 0x000B ; rjmp PCINT0_vect @@ -893,151 +893,150 @@ main.asm(276): Including file 'div16u.asm' 000023 934f push r20 000024 935f push r21 000025 930f push r16 -000026 b75f in r21, SREG +000026 931f push r17 +000027 b75f in r21, SREG -000027 9140 0067 lds r20, CURRENT_DIGIT -000029 3045 cpi r20, 5 -00002a f40c brge _CLR_CURRENT_DIGIT ; сброс активного разряда если >= 5 -00002b 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: ; сброс текущего активного разряда в ноль -00002c 2744 clr r20 -00002d 9340 0067 sts CURRENT_DIGIT, r20 +00002d 2744 clr r20 +00002e 9340 0067 sts CURRENT_DIGIT, r20 _indicate_1: -00002f 3040 cpi r20, 0 -000030 f481 brne _indicate_2 +000030 3040 cpi r20, 0 +000031 f481 brne _indicate_2 -000031 9893 cbi PORTD, DIGIT_2_PIN -000032 9894 cbi PORTD, DIGIT_3_PIN -000033 9895 cbi PORTD, DIGIT_4_PIN - ; lds TEMP_REG_A, DIGITS+2 -000034 f00e brts PC+2 -000035 c002 rjmp PC+3 -000036 e00b ldi TEMP_REG_A, 11 ; // - -000037 c002 rjmp PC+3 -000038 9100 0065 lds TEMP_REG_A, DIGITS+2 -00003a 2300 tst TEMP_REG_A -00003b f011 breq PC+3 -00003c 9a92 sbi PORTD, DIGIT_1_PIN -00003d c001 rjmp PC+2 -00003e 9892 cbi PORTD, DIGIT_1_PIN - ; lds TEMP_REG_A, DIGITS+2 -00003f d15e rcall DISPLAY_DECODER -000040 d0d9 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 d167 rcall DISPLAY_DECODER +000041 d0e2 rcall USI_TRANSMIT _indicate_2: -000041 3041 cpi r20, 1 -000042 f441 brne _indicate_3 +000042 3041 cpi r20, 1 +000043 f481 brne _indicate_3 -000043 9892 cbi PORTD, DIGIT_1_PIN -000044 9894 cbi PORTD, DIGIT_3_PIN -000045 9895 cbi PORTD, DIGIT_4_PIN - ; lds TEMP_REG_A, DIGITS+1 - ; tst TEMP_REG_A - ; breq PC+3 -000046 9a93 sbi PORTD, DIGIT_2_PIN - ; rjmp PC+2 - ; cbi PORTD, DIGIT_1_PIN +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 d154 rcall DISPLAY_DECODER -00004a d0cf rcall USI_TRANSMIT +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 d155 rcall DISPLAY_DECODER +000053 d0d0 rcall USI_TRANSMIT _indicate_3: -00004b 3042 cpi r20, 2 -00004c f459 brne _indicate_4 +000054 3042 cpi r20, 2 +000055 f459 brne _indicate_4 -00004d 9892 cbi PORTD, DIGIT_1_PIN -00004e 9893 cbi PORTD, DIGIT_2_PIN -00004f 9895 cbi PORTD, DIGIT_4_PIN -000050 9a94 sbi PORTD, DIGIT_3_PIN -000051 9100 0063 lds TEMP_REG_A, DIGITS -000053 d14a 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 d14b rcall DISPLAY_DECODER ; зажигаем точку -000054 2d00 mov r16, r0 -000055 770f cbr r16, (1<<7) -000056 2e00 mov r0, r16 -000057 d0c2 rcall USI_TRANSMIT +00005d 2d00 mov r16, r0 +00005e 770f cbr r16, (1<<7) +00005f 2e00 mov r0, r16 +000060 d0c3 rcall USI_TRANSMIT _indicate_4: -000058 3043 cpi r20, 3 -000059 f441 brne _indicate_exit +000061 3043 cpi r20, 3 +000062 f441 brne _indicate_exit -00005a 9892 cbi PORTD, DIGIT_1_PIN -00005b 9893 cbi PORTD, DIGIT_2_PIN -00005c 9894 cbi PORTD, DIGIT_3_PIN -00005d 9a95 sbi PORTD, DIGIT_4_PIN -00005e 9100 006c lds TEMP_REG_A, TEMP_F -000060 d13d rcall DISPLAY_DECODER -000061 d0b8 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 d13e rcall DISPLAY_DECODER +00006a d0b9 rcall USI_TRANSMIT _indicate_exit: -000062 9543 inc r20 -000063 9340 0067 sts CURRENT_DIGIT, r20 -000065 bf5f out SREG, r21 +00006b 9543 inc r20 +00006c 9340 0067 sts CURRENT_DIGIT, r20 +00006e bf5f out SREG, r21 -000066 910f pop r16 -000067 915f pop r21 -000068 914f pop r20 -000069 9518 reti +00006f 911f pop r17 +000070 910f pop r16 +000071 915f pop r21 +000072 914f pop r20 +000073 9518 reti ;// ; **** СТАРТ ПРОГРАММЫ ******************************************* RESET_vect: -00006a ed0f ldi TEMP_REG_A, LOW(RAMEND) -00006b bf0d out SPL, TEMP_REG_A +000074 ed0f ldi TEMP_REG_A, LOW(RAMEND) +000075 bf0d out SPL, TEMP_REG_A // ; **** ПРОЦЕСС ИНИЦИАЛИЗАЦИИ МК ********************************** MCU_INIT: ; **** ИНИЦИАЛИЗАЦИЯ ПИНОВ ************************************* -00006c e70e -00006d bb01 outi r16, DDRD, (1< @@ -1046,43 +1045,43 @@ main.asm(276): Including file 'div16u.asm' ; **** ГЛАВНЫЙ ЦИКЛ ********************************************** LOOP: ; rcall DISPLAY_UPD_DIGITS -00008f 9100 0060 lds r16, MCU_STATE ; получаем текущее состояние МК +000099 9100 0060 lds r16, MCU_STATE ; получаем текущее состояние МК _STATE_DEFAULT: -000091 3000 cpi r16, MCU_STATE_DEFAULT -000092 f479 brne _STATE_PROGRAM -000093 d0f0 rcall DISPLAY_UPD_DIGITS -000094 fd70 sbrc OWFR, OWPRF -000095 9a96 sbi PORTD, PD6 -000096 ff70 sbrs OWFR, OWPRF -000097 9896 cbi PORTD, PD6 +00009b 3000 cpi r16, MCU_STATE_DEFAULT +00009c f479 brne _STATE_PROGRAM +00009d d0f0 rcall DISPLAY_UPD_DIGITS +00009e fd70 sbrc OWFR, OWPRF +00009f 9a96 sbi PORTD, PD6 +0000a0 ff70 sbrs OWFR, OWPRF +0000a1 9896 cbi PORTD, PD6 -000098 d077 rcall TEMP_CONV -000099 d11a rcall DEBOUNCE_SW -00009a d119 rcall DEBOUNCE_SW -00009b d02a rcall TEMP_RD +0000a2 d077 rcall TEMP_CONV +0000a3 d11a rcall DEBOUNCE_SW +0000a4 d119 rcall DEBOUNCE_SW +0000a5 d02a rcall TEMP_RD -00009c 9110 006a lds r17, TEMP_L -00009e 2f81 mov DISP_NUM_L, r17 -00009f 9110 006b lds r17, TEMP_H -0000a1 2f91 mov DISP_NUM_H, r17 +0000a6 9110 006a lds r17, TEMP_L +0000a8 2f81 mov DISP_NUM_L, r17 +0000a9 9110 006b lds r17, TEMP_H +0000ab 2f91 mov DISP_NUM_H, r17 _STATE_PROGRAM: -0000a2 3001 cpi r16, MCU_STATE_PROGRAM -0000a3 f411 brne _STATE_ERROR -0000a4 d0df rcall DISPLAY_UPD_DIGITS -0000a5 d080 rcall SW_CHECK_PROCESS +0000ac 3001 cpi r16, MCU_STATE_PROGRAM +0000ad f411 brne _STATE_ERROR +0000ae d0df rcall DISPLAY_UPD_DIGITS +0000af d080 rcall SW_CHECK_PROCESS _STATE_ERROR: -0000a6 3002 cpi r16, MCU_STATE_ERROR -0000a7 f739 brne LOOP -0000a8 e01b ldi r17, 11 -0000a9 9310 0063 sts DIGITS, r17 -0000ab 9310 0064 sts DIGITS+1, r17 -0000ad 9310 0065 sts DIGITS+2, r17 -0000af 9310 0066 sts DIGITS+3, r17 -0000b1 0000 nop +0000b0 3002 cpi r16, MCU_STATE_ERROR +0000b1 f739 brne LOOP +0000b2 e01b ldi r17, 11 +0000b3 9310 0063 sts DIGITS, r17 +0000b5 9310 0064 sts DIGITS+1, r17 +0000b7 9310 0065 sts DIGITS+2, r17 +0000b9 9310 0066 sts DIGITS+3, r17 +0000bb 0000 nop -0000b2 cfdc rjmp LOOP +0000bc cfdc rjmp LOOP // @@ -1120,148 +1119,148 @@ main.asm(276): Including file 'div16u.asm' ;***** Code div16u: -0000b3 24ee clr drem16uL ; clear remainder Low byte -0000b4 18ff sub drem16uH,drem16uH ; clear remainder High byte and carry -0000b5 e141 ldi dcnt16u,17 ; init loop counter +0000bd 24ee clr drem16uL ; clear remainder Low byte +0000be 18ff sub drem16uH,drem16uH ; clear remainder High byte and carry +0000bf e141 ldi dcnt16u,17 ; init loop counter d16u_1: -0000b6 1f00 rol dd16uL ; shift left dividend -0000b7 1f11 rol dd16uH -0000b8 954a dec dcnt16u ; decrement counter -0000b9 f409 brne d16u_2 ; if done -0000ba 9508 ret ; return +0000c0 1f00 rol dd16uL ; shift left dividend +0000c1 1f11 rol dd16uH +0000c2 954a dec dcnt16u ; decrement counter +0000c3 f409 brne d16u_2 ; if done +0000c4 9508 ret ; return d16u_2: -0000bb 1cee rol drem16uL ; shift dividend into remainder -0000bc 1cff rol drem16uH -0000bd 1ae2 sub drem16uL,dv16uL ; remainder = remainder - divisor -0000be 0af3 sbc drem16uH,dv16uH -0000bf f420 brcc d16u_3 ; if result negative -0000c0 0ee2 add drem16uL,dv16uL ; restore remainder -0000c1 1ef3 adc drem16uH,dv16uH -0000c2 9488 clc ; clear carry to be shifted into result -0000c3 cff2 rjmp d16u_1 ; else +0000c5 1cee rol drem16uL ; shift dividend into remainder +0000c6 1cff rol drem16uH +0000c7 1ae2 sub drem16uL,dv16uL ; remainder = remainder - divisor +0000c8 0af3 sbc drem16uH,dv16uH +0000c9 f420 brcc d16u_3 ; if result negative +0000ca 0ee2 add drem16uL,dv16uL ; restore remainder +0000cb 1ef3 adc drem16uH,dv16uH +0000cc 9488 clc ; clear carry to be shifted into result +0000cd cff2 rjmp d16u_1 ; else d16u_3: -0000c4 9408 sec ; set carry to be shifted into result -0000c5 cff0 +0000ce 9408 sec ; set carry to be shifted into result +0000cf cff0 // TEMP_RD: -0000c6 930f push r16 -0000c7 931f push r17 -0000c8 932f push r18 -0000c9 933f push r19 -0000ca 934f push r20 +0000d0 930f push r16 +0000d1 931f push r17 +0000d2 932f push r18 +0000d3 933f push r19 +0000d4 934f push r20 ; cli -0000cb d068 rcall OW_PRESENCE -0000cc ec0c ldi r16, DS18B20_CMD_SKIPROM -0000cd 2e80 mov OW_CMD_r, r16 -0000ce d07a rcall OW_SEND_BYTE +0000d5 d068 rcall OW_PRESENCE +0000d6 ec0c ldi r16, DS18B20_CMD_SKIPROM +0000d7 2e80 mov OW_CMD_r, r16 +0000d8 d07a rcall OW_SEND_BYTE -0000cf eb0e ldi r16, DS18B20_CMD_RSCRATCHPAD -0000d0 2e80 mov OW_CMD_r, r16 -0000d1 d077 rcall OW_SEND_BYTE +0000d9 eb0e ldi r16, DS18B20_CMD_RSCRATCHPAD +0000da 2e80 mov OW_CMD_r, r16 +0000db d077 rcall OW_SEND_BYTE -0000d2 e6aa ldi XL, LOW(TEMP_L) -0000d3 e0b0 ldi XH, HIGH(TEMP_L) -0000d4 d095 rcall OW_RD_BYTE +0000dc e6aa ldi XL, LOW(TEMP_L) +0000dd e0b0 ldi XH, HIGH(TEMP_L) +0000de d095 rcall OW_RD_BYTE -0000d5 e6ab ldi XL, LOW(TEMP_H) -0000d6 e0b0 ldi XH, HIGH(TEMP_H) -0000d7 d092 rcall OW_RD_BYTE +0000df e6ab ldi XL, LOW(TEMP_H) +0000e0 e0b0 ldi XH, HIGH(TEMP_H) +0000e1 d092 rcall OW_RD_BYTE -0000d8 9110 006a lds r17, TEMP_L -0000da 9120 006b lds r18, TEMP_H +0000e2 9110 006a lds r17, TEMP_L +0000e4 9120 006b lds r18, TEMP_H -0000dc 932f push r18 -0000dd 7f28 cbr r18, (1<<0) | (1<<1) | (1<<2) ; убираем ненужные биты на время (интересуют последних битов в TEMP_H) -0000de 3f28 cpi r18, 0xf8 ; проверяется является ли число минусовой -0000df f011 breq _TEMP_RD_TO_UNSIGNED ; если да то конвертируем в беззнаковое число -0000e0 94e8 clt -0000e1 c009 rjmp _TEMP_RD_CONTINUE ; если нет то преобразуем значение АЦП в температуру (делим на 16) +0000e6 932f push r18 +0000e7 7f28 cbr r18, (1<<0) | (1<<1) | (1<<2) ; убираем ненужные биты на время (интересуют последних битов в TEMP_H) +0000e8 3f28 cpi r18, 0xf8 ; проверяется является ли число минусовой +0000e9 f011 breq _TEMP_RD_TO_UNSIGNED ; если да то конвертируем в беззнаковое число +0000ea 94e8 clt +0000eb c009 rjmp _TEMP_RD_CONTINUE ; если нет то преобразуем значение АЦП в температуру (делим на 16) _TEMP_RD_TO_UNSIGNED: -0000e2 912f pop r18 -0000e3 9468 set -0000e4 9510 com r17 -0000e5 9520 com r18 -0000e6 e031 ldi r19, 1 -0000e7 0f13 add r17, r19 -0000e8 e030 ldi r19, 0 -0000e9 1f23 adc r18, r19 -0000ea c001 rjmp PC+2 +0000ec 912f pop r18 +0000ed 9468 set +0000ee 9510 com r17 +0000ef 9520 com r18 +0000f0 e031 ldi r19, 1 +0000f1 0f13 add r17, r19 +0000f2 e030 ldi r19, 0 +0000f3 1f23 adc r18, r19 +0000f4 c001 rjmp PC+2 _TEMP_RD_CONTINUE: ; Температура = Число с АЦП / 16 (сдвиг вправо 4) -0000eb 912f pop r18 -0000ec 9526 lsr r18 -0000ed 9517 ror r17 -0000ee 9526 lsr r18 -0000ef 9517 ror r17 -0000f0 9526 lsr r18 -0000f1 9517 ror r17 -0000f2 9526 lsr r18 -0000f3 9517 ror r17 +0000f5 912f pop r18 +0000f6 9526 lsr r18 +0000f7 9517 ror r17 +0000f8 9526 lsr r18 +0000f9 9517 ror r17 +0000fa 9526 lsr r18 +0000fb 9517 ror r17 +0000fc 9526 lsr r18 +0000fd 9517 ror r17 _TEMP_RD_END: -0000f4 9130 006a lds r19, TEMP_L -0000f6 f40e brtc PC+2 -0000f7 9531 neg r19 ; переводим в беззнаковое число если минус +0000fe 9130 006a lds r19, TEMP_L +000100 f40e brtc PC+2 +000101 9531 neg r19 ; переводим в беззнаковое число если минус ; далее происходит такое для получения дробной части: ; ((n<<3) + (n<<1))>>4 или (n*10)/16 -0000f8 2f43 mov r20, r19 -0000f9 703f andi r19, 0x0f -0000fa 2f43 mov r20, r19 -0000fb 0f33 lsl r19 -0000fc 0f33 lsl r19 -0000fd 0f33 lsl r19 +000102 2f43 mov r20, r19 +000103 703f andi r19, 0x0f +000104 2f43 mov r20, r19 +000105 0f33 lsl r19 +000106 0f33 lsl r19 +000107 0f33 lsl r19 -0000fe 0f44 lsl r20 +000108 0f44 lsl r20 -0000ff 0f34 add r19, r20 +000109 0f34 add r19, r20 -000100 9536 lsr r19 -000101 9536 lsr r19 -000102 9536 lsr r19 -000103 9536 lsr r19 +00010a 9536 lsr r19 +00010b 9536 lsr r19 +00010c 9536 lsr r19 +00010d 9536 lsr r19 ; записываем данные -000104 9310 006a sts TEMP_L, r17 -000106 9320 006b sts TEMP_H, r18 -000108 9330 006c sts TEMP_F, r19 - - ; sei -00010a 914f pop r20 -00010b 913f pop r19 -00010c 912f pop r18 -00010d 911f pop r17 -00010e 910f pop r16 -00010f 9508 ret - ; - TEMP_CONV: -000110 930f push r16 - ; cli - -000111 d022 rcall OW_PRESENCE -000112 ec0c ldi r16, DS18B20_CMD_SKIPROM -000113 2e80 mov OW_CMD_r, r16 -000114 d034 rcall OW_SEND_BYTE - -000115 e404 ldi r16, DS18B20_CMD_CONVERTTEMP -000116 2e80 mov OW_CMD_r, r16 -000117 d031 rcall OW_SEND_BYTE +00010e 9310 006a sts TEMP_L, r17 +000110 9320 006b sts TEMP_H, r18 +000112 9330 006c sts TEMP_F, r19 ; sei +000114 914f pop r20 +000115 913f pop r19 +000116 912f pop r18 +000117 911f pop r17 000118 910f pop r16 000119 9508 ret + ; + TEMP_CONV: +00011a 930f push r16 + ; cli + +00011b d022 rcall OW_PRESENCE +00011c ec0c ldi r16, DS18B20_CMD_SKIPROM +00011d 2e80 mov OW_CMD_r, r16 +00011e d034 rcall OW_SEND_BYTE + +00011f e404 ldi r16, DS18B20_CMD_CONVERTTEMP +000120 2e80 mov OW_CMD_r, r16 +000121 d031 rcall OW_SEND_BYTE + + ; sei +000122 910f pop r16 +000123 9508 ret // // ; **** ОТПРАВКА БАЙТА В СДВИГОВЫЙ РЕГИСТР ************************* USI_TRANSMIT: -00011a 930f push r16 -00011b b80f out USIDR, r0 ; Байт для отправки всегда находится в регистре r0. Помещаем данные в регистр USIDR. +000124 930f push r16 +000125 b80f out USIDR, r0 ; Байт для отправки всегда находится в регистре r0. Помещаем данные в регистр USIDR. ; Enable USI Overflow Interrupt Flag (will be 0 if transfer is not compeleted) -00011c e400 ldi TEMP_REG_A, (1< USI Clock Source Select ; USICLK <--------------> USI Clock Strobe ; USITC <--------------> USI Toggle Clock (Enable clock generation) -00011e e10b ldi TEMP_REG_A, (1< +00012c 9ac0 sbi PORTB, USI_LATCH_PIN +00012d 98c0 cbi PORTB, USI_LATCH_PIN +00012e 910f pop r16 +00012f 9508 ret// // SW_CHECK_PROCESS: -000126 930f push r16 -000127 d08c rcall DEBOUNCE_SW -000128 9bb2 sbis SW_PIN, SW_PLUS_PIN -000129 9601 adiw DISP_NUM_L, 1 +000130 930f push r16 +000131 d08c rcall DEBOUNCE_SW +000132 9bb2 sbis SW_PIN, SW_PLUS_PIN +000133 9601 adiw DISP_NUM_L, 1 -00012a 9bb3 sbis SW_PIN, SW_MINUS_PIN -00012b 9701 sbiw DISP_NUM_L, 1 +000134 9bb3 sbis SW_PIN, SW_MINUS_PIN +000135 9701 sbiw DISP_NUM_L, 1 -00012c 9bb4 sbis SW_PIN, SW_SET_PIN -00012d c001 rjmp _INTO_DEFAULT_STATE -00012e c003 rjmp _SW_CHECK_PROCESS_END +000136 9bb4 sbis SW_PIN, SW_SET_PIN +000137 c001 rjmp _INTO_DEFAULT_STATE +000138 c003 rjmp _SW_CHECK_PROCESS_END _INTO_DEFAULT_STATE: -00012f e000 ldi r16, MCU_STATE_DEFAULT -000130 9300 0060 sts MCU_STATE, r16 +000139 e000 ldi r16, MCU_STATE_DEFAULT +00013a 9300 0060 sts MCU_STATE, r16 _SW_CHECK_PROCESS_END: -000132 910f pop r16 -000133 9508 ret +00013c 910f pop r16 +00013d 9508 ret // // // ; **** ОПРОС ПРИСУТСТВИЯ УСТРОЙСТВА ****************************** OW_PRESENCE: -000134 94f8 cli -000135 9ab9 ow_pull -000136 e033 -000137 eb4e -000138 d08b DELAY16 480 -000139 98b9 ow_release -00013a e030 -00013b e84a -00013c d087 DELAY16 70 -00013d d005 rcall OW_CHECK_PRESENCE -00013e e033 -00013f e342 -000140 d083 DELAY16 410 -000141 9478 sei -000142 9508 ret +00013e 94f8 cli +00013f 9ab9 ow_pull +000140 e033 +000141 eb4e +000142 d08b DELAY16 480 +000143 98b9 ow_release +000144 e030 +000145 e84a +000146 d087 DELAY16 70 +000147 d005 rcall OW_CHECK_PRESENCE +000148 e033 +000149 e342 +00014a d083 DELAY16 410 +00014b 9478 sei +00014c 9508 ret // // @@ -1333,85 +1332,85 @@ main.asm(276): Including file 'div16u.asm' ; Если подчиненное устройство притянет шину, то устанавливаем флаг OWPRF в единицу в регистре флагов ; OW_CHECK_PRESENCE: -000143 9bb1 sbis OW_PIN, OW_LINE -000144 6071 sbr OWFR, (1< // OW_SEND_BYTE: -000149 930f push r16 -00014a 931f push r17 -00014b 2d08 mov r16, OW_CMD_r -00014c e018 ldi r17, 8 +000153 930f push r16 +000154 931f push r17 +000155 2d08 mov r16, OW_CMD_r +000156 e018 ldi r17, 8 _OW_SEND_BYTE_LOOP: -00014d 9506 lsr r16 -00014e f408 brcc _OW_SEND_0 -00014f f058 brcs _OW_SEND_1 +000157 9506 lsr r16 +000158 f408 brcc _OW_SEND_0 +000159 f058 brcs _OW_SEND_1 _OW_SEND_0: -000150 94f8 cli -000151 9ab9 ow_pull -000152 e030 -000153 e746 -000154 d06f DELAY16 60 -000155 98b9 ow_release -000156 e030 -000157 e142 -000158 d06b DELAY16 10 -000159 9478 sei -00015a c00a rjmp _OW_SEND_BYTE_END +00015a 94f8 cli +00015b 9ab9 ow_pull +00015c e030 +00015d e746 +00015e d06f DELAY16 60 +00015f 98b9 ow_release +000160 e030 +000161 e142 +000162 d06b DELAY16 10 +000163 9478 sei +000164 c00a rjmp _OW_SEND_BYTE_END _OW_SEND_1: -00015b 94f8 cli -00015c 9ab9 ow_pull -00015d e030 -00015e e04a -00015f d064 DELAY16 6 -000160 98b9 ow_release -000161 e030 -000162 e74e -000163 d060 DELAY16 64 -000164 9478 sei +000165 94f8 cli +000166 9ab9 ow_pull +000167 e030 +000168 e04a +000169 d064 DELAY16 6 +00016a 98b9 ow_release +00016b e030 +00016c e74e +00016d d060 DELAY16 64 +00016e 9478 sei _OW_SEND_BYTE_END: -000165 951a dec r17 -000166 f731 brne _OW_SEND_BYTE_LOOP -000167 911f pop r17 -000168 910f pop r16 -000169 9508 ret +00016f 951a dec r17 +000170 f731 brne _OW_SEND_BYTE_LOOP +000171 911f pop r17 +000172 910f pop r16 +000173 9508 ret // // OW_RD_BYTE: -00016a 930f push r16 -00016b 931f push r17 -00016c 2700 clr r16 -00016d e018 ldi r17, 8 -00016e 94f8 cli +000174 930f push r16 +000175 931f push r17 +000176 2700 clr r16 +000177 e018 ldi r17, 8 +000178 94f8 cli _OW_RD_BYTE_LP: -00016f 9506 lsr r16 -000170 9ab9 ow_pull -000171 e030 -000172 e04a -000173 d050 DELAY16 6 -000174 98b9 ow_release -000175 e030 -000176 e140 -000177 d04c DELAY16 9 -000178 99b1 sbic OW_PIN, OW_LINE -000179 6800 sbr r16, (1<<7) -00017a e030 -00017b e64c -00017c d047 DELAY16 55 -00017d 951a dec r17 -00017e f781 brne _OW_RD_BYTE_LP -00017f 930c st X, r16 -000180 9478 sei -000181 911f pop r17 -000182 910f pop r16 -000183 9508 ret +000179 9506 lsr r16 +00017a 9ab9 ow_pull +00017b e030 +00017c e04a +00017d d050 DELAY16 6 +00017e 98b9 ow_release +00017f e030 +000180 e140 +000181 d04c DELAY16 9 +000182 99b1 sbic OW_PIN, OW_LINE +000183 6800 sbr r16, (1<<7) +000184 e030 +000185 e64c +000186 d047 DELAY16 55 +000187 951a dec r17 +000188 f781 brne _OW_RD_BYTE_LP +000189 930c st X, r16 +00018a 9478 sei +00018b 911f pop r17 +00018c 910f pop r16 +00018d 9508 ret // @@ -1422,146 +1421,146 @@ main.asm(276): Including file 'div16u.asm' ; Описание: Перемещает цифры числа в соответствующие ячейки памяти в SRAM ; путем деления этого числа несколько раз DISPLAY_UPD_DIGITS: -000184 94f8 cli -000185 935f push r21 -000186 e054 ldi r21, 4 ; (4 раза делим) т.к индикатор четырех разрядный +00018e 94f8 cli +00018f 935f push r21 +000190 e054 ldi r21, 4 ; (4 раза делим) т.к индикатор четырех разрядный ; инициализация указателя (за каждый проход цикла будет инкрементироваться) -000187 e6a3 ldi XL, LOW(DIGITS) -000188 e0b0 ldi XH, HIGH(DIGITS) +000191 e6a3 ldi XL, LOW(DIGITS) +000192 e0b0 ldi XH, HIGH(DIGITS) .equ dividend = SRAM_TEMP_1 ; число которе будем делить .equ divisor = 10 ; на что делим ; загружаем число которое хотим поделить в адрес SRAM делимого -000189 9380 0061 sts dividend, DISP_NUM_L -00018b 9390 0062 sts dividend+1, DISP_NUM_H +000193 9380 0061 sts dividend, DISP_NUM_L +000195 9390 0062 sts dividend+1, DISP_NUM_H ; четыре раза производим деление для получения остатков DIV_LOOP: ; заполняем нужные регистры -00018d 9100 0061 lds dd16uL, dividend -00018f 9110 0062 lds dd16uH, dividend+1 -000191 e02a ldi dv16uL, LOW(divisor) -000192 e030 ldi dv16uH, HIGH(divisor) +000197 9100 0061 lds dd16uL, dividend +000199 9110 0062 lds dd16uH, dividend+1 +00019b e02a ldi dv16uL, LOW(divisor) +00019c e030 ldi dv16uH, HIGH(divisor) -000193 df1f rcall div16u ; делим +00019d df1f rcall div16u ; делим -000194 92ed st X+, drem16uL ; сохраняем остаток в ячейку по указателю и увеличиваем его +00019e 92ed st X+, drem16uL ; сохраняем остаток в ячейку по указателю и увеличиваем его ; обновляем делимое -000195 9300 0061 sts dividend, dres16uL -000197 9310 0062 sts dividend+1, dres16uH +00019f 9300 0061 sts dividend, dres16uL +0001a1 9310 0062 sts dividend+1, dres16uH -000199 955a dec r21 ; декрементируем счетчик цикла -00019a f791 brne DIV_LOOP ; делим еще раз если не 0 -00019b 915f pop r21 -00019c 9478 sei -00019d 9508 ret +0001a3 955a dec r21 ; декрементируем счетчик цикла +0001a4 f791 brne DIV_LOOP ; делим еще раз если не 0 +0001a5 915f pop r21 +0001a6 9478 sei +0001a7 9508 ret // // ; **** ЗАГРУЖАЕТ НУЖНЫЙ АДРЕС СИМВОЛА В R0 *********************** DISPLAY_DECODER: -00019e 930f push r16 -00019f 931f push r17 -0001a0 ebe0 ldi ZL, LOW(2*DISPLAY_SYMBOLS) -0001a1 e0f3 ldi ZH, HIGH(2*DISPLAY_SYMBOLS) +0001a8 930f push r16 +0001a9 931f push r17 +0001aa ece4 ldi ZL, LOW(2*DISPLAY_SYMBOLS) +0001ab e0f3 ldi ZH, HIGH(2*DISPLAY_SYMBOLS) -0001a2 2711 clr TEMP_REG_B -0001a3 0fe0 add ZL, TEMP_REG_A -0001a4 1ff1 adc ZH, TEMP_REG_B +0001ac 2711 clr TEMP_REG_B +0001ad 0fe0 add ZL, TEMP_REG_A +0001ae 1ff1 adc ZH, TEMP_REG_B -0001a5 9004 lpm r0, Z -0001a6 911f pop r17 -0001a7 910f pop r16 -0001a8 9508 ret// +0001af 9004 lpm r0, Z +0001b0 911f pop r17 +0001b1 910f pop r16 +0001b2 9508 ret// // BEEP_SHORT: -0001a9 9ac5 sbi BUZZER_PORT, BUZZER_PIN -0001aa d01d rcall DELAY -0001ab 98c5 cbi BUZZER_PORT, BUZZER_PIN -0001ac 9508 ret +0001b3 9ac5 sbi BUZZER_PORT, BUZZER_PIN +0001b4 d01d rcall DELAY +0001b5 98c5 cbi BUZZER_PORT, BUZZER_PIN +0001b6 9508 ret // // BEEP_LONG: -0001ad 9ac5 sbi BUZZER_PORT, BUZZER_PIN -0001ae d019 rcall DELAY -0001af d018 rcall DELAY -0001b0 d017 rcall DELAY -0001b1 d016 rcall DELAY -0001b2 98c5 cbi BUZZER_PORT, BUZZER_PIN -0001b3 9508 ret// +0001b7 9ac5 sbi BUZZER_PORT, BUZZER_PIN +0001b8 d019 rcall DELAY +0001b9 d018 rcall DELAY +0001ba d017 rcall DELAY +0001bb d016 rcall DELAY +0001bc 98c5 cbi BUZZER_PORT, BUZZER_PIN +0001bd 9508 ret// // DEBOUNCE_SW: -0001b4 930f push r16 -0001b5 931f push r17 -0001b6 932f push r18 +0001be 930f push r16 +0001bf 931f push r17 +0001c0 932f push r18 -0001b7 e02a ldi r18, 10 +0001c1 e02a ldi r18, 10 _loop_2: -0001b8 ef1f ldi r17, 255 +0001c2 ef1f ldi r17, 255 _loop_0: -0001b9 ef0f ldi r16, 255 +0001c3 ef0f ldi r16, 255 _dec_0: -0001ba 950a dec r16 -0001bb f7f1 brne _dec_0 +0001c4 950a dec r16 +0001c5 f7f1 brne _dec_0 _loop_1: -0001bc 951a dec r17 -0001bd f7d9 brne _loop_0 +0001c6 951a dec r17 +0001c7 f7d9 brne _loop_0 _loop_3: -0001be 952a dec r18 -0001bf f7c1 brne _loop_2 +0001c8 952a dec r18 +0001c9 f7c1 brne _loop_2 -0001c0 912f pop r18 -0001c1 911f pop r17 -0001c2 910f pop r16 -0001c3 9508 ret// +0001ca 912f pop r18 +0001cb 911f pop r17 +0001cc 910f pop r16 +0001cd 9508 ret// // DELAY_LOOP_16: -0001c4 5041 subi DELAY_8_r, 1 -0001c5 4030 sbci DELAY_16_r, 0 -0001c6 f7e8 brcc DELAY_LOOP_16 -0001c7 9508 ret// +0001ce 5041 subi DELAY_8_r, 1 +0001cf 4030 sbci DELAY_16_r, 0 +0001d0 f7e8 brcc DELAY_LOOP_16 +0001d1 9508 ret// // DELAY: -0001c8 930f push r16 -0001c9 931f push r17 -0001ca 932f push r18 +0001d2 930f push r16 +0001d3 931f push r17 +0001d4 932f push r18 -0001cb e026 ldi r18, 6 +0001d5 e026 ldi r18, 6 _DELAY_0: -0001cc ef0f ldi r16, 255 +0001d6 ef0f ldi r16, 255 _DELAY_1: -0001cd ef1f ldi r17, 255 +0001d7 ef1f ldi r17, 255 _DELAY_2: -0001ce 951a dec r17 -0001cf f7f1 brne _DELAY_2 +0001d8 951a dec r17 +0001d9 f7f1 brne _DELAY_2 -0001d0 950a dec r16 -0001d1 f7d9 brne _DELAY_1 -0001d2 952a dec r18 -0001d3 f7c1 brne _DELAY_0 +0001da 950a dec r16 +0001db f7d9 brne _DELAY_1 +0001dc 952a dec r18 +0001dd f7c1 brne _DELAY_0 -0001d4 912f pop r18 -0001d5 911f pop r17 -0001d6 910f pop r16 -0001d7 9508 ret // +0001de 912f pop r18 +0001df 911f pop r17 +0001e0 910f pop r16 +0001e1 9508 ret // // DISPLAY_SYMBOLS: ; HGFEDCBA HGFEDCBA -0001d8 f9c0 .DB 0b11000000, 0b11111001 ; 0, 1 -0001d9 b0a4 .DB 0b10100100, 0b10110000 ; 2, 3 -0001da 9299 .DB 0b10011001, 0b10010010 ; 4, 5 -0001db f882 .DB 0b10000010, 0b11111000 ; 6, 7 -0001dc 9080 .DB 0b10000000, 0b10010000 ; 8, 9 -0001dd bf9c .DB 0b10011100, 0b10111111 ; °, -// +0001e2 f9c0 .DB 0b11000000, 0b11111001 ; 0, 1 +0001e3 b0a4 .DB 0b10100100, 0b10110000 ; 2, 3 +0001e4 9299 .DB 0b10011001, 0b10010010 ; 4, 5 +0001e5 f882 .DB 0b10000010, 0b11111000 ; 6, 7 +0001e6 9080 .DB 0b10000000, 0b10010000 ; 8, 9 +0001e7 bf9c .DB 0b10011100, 0b10111111 ; °, -// // @@ -1589,7 +1588,7 @@ 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: 92 r17: 46 r18: 30 r19: 36 r20: 31 +r13: 0 r14: 5 r15: 5 r16: 94 r17: 48 r18: 30 r19: 38 r20: 31 r21: 8 r22: 0 r23: 4 r24: 5 r25: 3 r26: 3 r27: 3 r28: 0 r29: 0 r30: 2 r31: 2 Registers used: 20 out of 35 (57.1%) @@ -1597,28 +1596,28 @@ 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 : 3 brge : 1 brhc : 0 +brcc : 3 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 : 21 cbr : 3 clc : 1 +brvs : 0 bset : 0 bst : 0 cbi : 22 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 : 14 lpm : 2 +inc : 1 ld : 0 ldd : 0 ldi : 66 lds : 16 lpm : 2 lsl : 4 lsr : 10 mov : 11 movw : 0 neg : 1 nop : 1 -or : 0 ori : 0 out : 15 pop : 30 push : 29 rcall : 42 -ret : 16 reti : 3 rjmp : 18 rol : 4 ror : 4 sbc : 1 +or : 1 ori : 0 out : 15 pop : 31 push : 30 rcall : 42 +ret : 16 reti : 3 rjmp : 19 rol : 4 ror : 4 sbc : 1 sbci : 1 sbi : 12 sbic : 3 sbis : 5 sbiw : 1 sbr : 2 sbrc : 1 sbrs : 1 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 swap : 0 tst : 1 wdr : 0 -Instructions used: 56 out of 105 (53.3%) +Instructions used: 57 out of 105 (54.3%) "ATtiny2313A" memory use summary [bytes]: Segment Begin End Code Data Used Size Use% --------------------------------------------------------------- -[.cseg] 0x000000 0x0003bc 922 12 934 2048 45.6% +[.cseg] 0x000000 0x0003d0 942 12 954 2048 46.6% [.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 18072d8..5be080a 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 06:32:38 2023 +AVRASM ver. 2.2.7 main.asm Thu Jun 22 12:07:49 2023 EQU SIGNATURE_000 0000001e @@ -533,31 +533,30 @@ DSEG HYSTERESIS 00000069 DSEG TEMP_L 0000006a DSEG TEMP_H 0000006b DSEG TEMP_F 0000006c -CSEG RESET_vect 0000006a +CSEG RESET_vect 00000074 CSEG TIMER0_COMPA_vect 00000023 CSEG PCINT0_vect 0000000e CSEG _PCINT0_vect_end 0000001d CSEG _INTO_PROGRAM_STATE 0000001a -CSEG _CLR_CURRENT_DIGIT 0000002c -CSEG _indicate_1 0000002f -CSEG _indicate_2 00000041 -CSEG DISPLAY_DECODER 0000019e -CSEG USI_TRANSMIT 0000011a -CSEG _indicate_3 0000004b -CSEG _indicate_4 00000058 -CSEG _indicate_exit 00000062 -CSEG MCU_INIT 0000006c -CSEG continue 0000007e -CSEG BEEP_SHORT 000001a9 -CSEG LOOP 0000008f -CSEG _STATE_DEFAULT 00000091 -CSEG _STATE_PROGRAM 000000a2 -CSEG DISPLAY_UPD_DIGITS 00000184 -CSEG TEMP_CONV 00000110 -CSEG DEBOUNCE_SW 000001b4 -CSEG TEMP_RD 000000c6 -CSEG _STATE_ERROR 000000a6 -CSEG SW_CHECK_PROCESS 00000126 +CSEG _CLR_CURRENT_DIGIT 0000002d +CSEG _indicate_1 00000030 +CSEG _indicate_2 00000042 +CSEG DISPLAY_DECODER 000001a8 +CSEG USI_TRANSMIT 00000124 +CSEG _indicate_3 00000054 +CSEG _indicate_4 00000061 +CSEG _indicate_exit 0000006b +CSEG MCU_INIT 00000076 +CSEG BEEP_SHORT 000001b3 +CSEG LOOP 00000099 +CSEG _STATE_DEFAULT 0000009b +CSEG _STATE_PROGRAM 000000ac +CSEG DISPLAY_UPD_DIGITS 0000018e +CSEG TEMP_CONV 0000011a +CSEG DEBOUNCE_SW 000001be +CSEG TEMP_RD 000000d0 +CSEG _STATE_ERROR 000000b0 +CSEG SW_CHECK_PROCESS 00000130 DEF drem16uL r14 DEF drem16uH r15 DEF dres16uL r16 @@ -567,38 +566,38 @@ DEF dd16uH r17 DEF dv16uL r18 DEF dv16uH r19 DEF dcnt16u r20 -CSEG div16u 000000b3 -CSEG d16u_1 000000b6 -CSEG d16u_2 000000bb -CSEG d16u_3 000000c4 -CSEG OW_PRESENCE 00000134 -CSEG OW_SEND_BYTE 00000149 -CSEG OW_RD_BYTE 0000016a -CSEG _TEMP_RD_TO_UNSIGNED 000000e2 -CSEG _TEMP_RD_CONTINUE 000000eb -CSEG _TEMP_RD_END 000000f4 -CSEG _USI_TRANSMIT_LOOP 0000011f -CSEG _INTO_DEFAULT_STATE 0000012f -CSEG _SW_CHECK_PROCESS_END 00000132 -CSEG DELAY_LOOP_16 000001c4 -CSEG OW_CHECK_PRESENCE 00000143 -CSEG _EXIT 00000148 -CSEG _OW_SEND_BYTE_LOOP 0000014d -CSEG _OW_SEND_0 00000150 -CSEG _OW_SEND_1 0000015b -CSEG _OW_SEND_BYTE_END 00000165 -CSEG _OW_RD_BYTE_LP 0000016f +CSEG div16u 000000bd +CSEG d16u_1 000000c0 +CSEG d16u_2 000000c5 +CSEG d16u_3 000000ce +CSEG OW_PRESENCE 0000013e +CSEG OW_SEND_BYTE 00000153 +CSEG OW_RD_BYTE 00000174 +CSEG _TEMP_RD_TO_UNSIGNED 000000ec +CSEG _TEMP_RD_CONTINUE 000000f5 +CSEG _TEMP_RD_END 000000fe +CSEG _USI_TRANSMIT_LOOP 00000129 +CSEG _INTO_DEFAULT_STATE 00000139 +CSEG _SW_CHECK_PROCESS_END 0000013c +CSEG DELAY_LOOP_16 000001ce +CSEG OW_CHECK_PRESENCE 0000014d +CSEG _EXIT 00000152 +CSEG _OW_SEND_BYTE_LOOP 00000157 +CSEG _OW_SEND_0 0000015a +CSEG _OW_SEND_1 00000165 +CSEG _OW_SEND_BYTE_END 0000016f +CSEG _OW_RD_BYTE_LP 00000179 EQU dividend 00000061 EQU divisor 0000000a -CSEG DIV_LOOP 0000018d -CSEG DISPLAY_SYMBOLS 000001d8 -CSEG DELAY 000001c8 -CSEG BEEP_LONG 000001ad -CSEG _loop_2 000001b8 -CSEG _loop_0 000001b9 -CSEG _dec_0 000001ba -CSEG _loop_1 000001bc -CSEG _loop_3 000001be -CSEG _DELAY_0 000001cc -CSEG _DELAY_1 000001cd -CSEG _DELAY_2 000001ce +CSEG DIV_LOOP 00000197 +CSEG DISPLAY_SYMBOLS 000001e2 +CSEG DELAY 000001d2 +CSEG BEEP_LONG 000001b7 +CSEG _loop_2 000001c2 +CSEG _loop_0 000001c3 +CSEG _dec_0 000001c4 +CSEG _loop_1 000001c6 +CSEG _loop_3 000001c8 +CSEG _DELAY_0 000001d6 +CSEG _DELAY_1 000001d7 +CSEG _DELAY_2 000001d8 diff --git a/dist/default/production/attiny2313a_thermostat.X.production.obj b/dist/default/production/attiny2313a_thermostat.X.production.obj index b2a0b3e..d45c382 100644 Binary files a/dist/default/production/attiny2313a_thermostat.X.production.obj and b/dist/default/production/attiny2313a_thermostat.X.production.obj differ diff --git a/dist/default/production/attiny2313a_thermostat.X.production.tmp b/dist/default/production/attiny2313a_thermostat.X.production.tmp index 976137a..175e2ef 100644 --- a/dist/default/production/attiny2313a_thermostat.X.production.tmp +++ b/dist/default/production/attiny2313a_thermostat.X.production.tmp @@ -33,63 +33,62 @@ main.asm30 main.asm31 main.asm32 - main.asm182 + main.asm183 main.asm88 main.asm53 <_PCINT0_vect_end>main.asm78 <_INTO_PROGRAM_STATE>main.asm74 - <_CLR_CURRENT_DIGIT>main.asm99 - <_indicate_1>main.asm103 - <_indicate_2>main.asm125 - main.asm578 - main.asm391 + <_CLR_CURRENT_DIGIT>main.asm100 + <_indicate_1>main.asm104 + <_indicate_2>main.asm124 + main.asm577 + main.asm390 <_indicate_3>main.asm142 <_indicate_4>main.asm158 <_indicate_exit>main.asm170 - main.asm188 - main.asm211 - main.asm594 - main.asm233 - <_STATE_DEFAULT>main.asm237 - <_STATE_PROGRAM>main.asm256 - main.asm537 - main.asm371 - main.asm612 - main.asm279 - <_STATE_ERROR>main.asm261 - main.asm422 + main.asm189 + main.asm593 + main.asm232 + <_STATE_DEFAULT>main.asm236 + <_STATE_PROGRAM>main.asm255 + main.asm536 + main.asm370 + main.asm611 + main.asm278 + <_STATE_ERROR>main.asm260 + main.asm421 div16u.asm32 div16u.asm36 div16u.asm42 div16u.asm52 - main.asm446 - main.asm473 - main.asm506 - <_TEMP_RD_TO_UNSIGNED>main.asm314 - <_TEMP_RD_CONTINUE>main.asm325 - <_TEMP_RD_END>main.asm335 - <_USI_TRANSMIT_LOOP>main.asm409 - <_INTO_DEFAULT_STATE>main.asm435 - <_SW_CHECK_PROCESS_END>main.asm438 - main.asm638 - main.asm462 - <_EXIT>main.asm468 - <_OW_SEND_BYTE_LOOP>main.asm478 - <_OW_SEND_0>main.asm482 - <_OW_SEND_1>main.asm490 - <_OW_SEND_BYTE_END>main.asm497 - <_OW_RD_BYTE_LP>main.asm512 - main.asm554 - main.asm670 - main.asm645 - main.asm602 - <_loop_2>main.asm618 - <_loop_0>main.asm620 - <_dec_0>main.asm622 - <_loop_1>main.asm625 - <_loop_3>main.asm628 - <_DELAY_0>main.asm651 - <_DELAY_1>main.asm653 - <_DELAY_2>main.asm655 + main.asm445 + main.asm472 + main.asm505 + <_TEMP_RD_TO_UNSIGNED>main.asm313 + <_TEMP_RD_CONTINUE>main.asm324 + <_TEMP_RD_END>main.asm334 + <_USI_TRANSMIT_LOOP>main.asm408 + <_INTO_DEFAULT_STATE>main.asm434 + <_SW_CHECK_PROCESS_END>main.asm437 + main.asm637 + main.asm461 + <_EXIT>main.asm467 + <_OW_SEND_BYTE_LOOP>main.asm477 + <_OW_SEND_0>main.asm481 + <_OW_SEND_1>main.asm489 + <_OW_SEND_BYTE_END>main.asm496 + <_OW_RD_BYTE_LP>main.asm511 + main.asm553 + main.asm669 + main.asm644 + main.asm601 + <_loop_2>main.asm617 + <_loop_0>main.asm619 + <_dec_0>main.asm621 + <_loop_1>main.asm624 + <_loop_3>main.asm627 + <_DELAY_0>main.asm650 + <_DELAY_1>main.asm652 + <_DELAY_2>main.asm654 diff --git a/macros.asm b/macros.asm index 52eb242..b2af9f6 100644 --- a/macros.asm +++ b/macros.asm @@ -20,5 +20,5 @@ .MACRO DELAY16 ldi DELAY_16_r, HIGH(@0*F_CPU/4-2) ldi DELAY_8_r, LOW(@0*F_CPU/4-2) - rcall DELAY_LOOP_16 + rcall DELAY_LOOP_16 .ENDMACRO \ No newline at end of file diff --git a/main.asm b/main.asm index ce8102b..98a5158 100644 --- a/main.asm +++ b/main.asm @@ -89,6 +89,7 @@ TIMER0_COMPA_vect: push r20 push r21 push r16 + push r17 in r21, SREG lds r20, CURRENT_DIGIT @@ -107,7 +108,6 @@ _indicate_1: cbi PORTD, DIGIT_2_PIN cbi PORTD, DIGIT_3_PIN cbi PORTD, DIGIT_4_PIN -; lds TEMP_REG_A, DIGITS+2 brts PC+2 rjmp PC+3 ldi TEMP_REG_A, 11 ; // - @@ -118,7 +118,6 @@ _indicate_1: sbi PORTD, DIGIT_1_PIN rjmp PC+2 cbi PORTD, DIGIT_1_PIN -; lds TEMP_REG_A, DIGITS+2 rcall DISPLAY_DECODER rcall USI_TRANSMIT @@ -129,12 +128,13 @@ _indicate_2: cbi PORTD, DIGIT_1_PIN cbi PORTD, DIGIT_3_PIN cbi PORTD, DIGIT_4_PIN -; lds TEMP_REG_A, DIGITS+1 -; tst TEMP_REG_A -; breq PC+3 - sbi PORTD, DIGIT_2_PIN -; rjmp PC+2 -; cbi PORTD, DIGIT_1_PIN + lds TEMP_REG_A, DIGITS+1 + lds r19, DIGITS+2 + or TEMP_REG_A, r19 + breq PC+3 + sbi PORTD, DIGIT_2_PIN + rjmp PC+2 + cbi PORTD, DIGIT_2_PIN lds TEMP_REG_A, DIGITS+1 rcall DISPLAY_DECODER rcall USI_TRANSMIT @@ -172,6 +172,7 @@ _indicate_exit: sts CURRENT_DIGIT, r20 out SREG, r21 + pop r17 pop r16 pop r21 pop r20 @@ -207,8 +208,6 @@ MCU_INIT: ; outi r16, UCSRB, (1<