diff --git a/definitions.asm b/definitions.asm
index 10439e0..7622e98 100644
--- a/definitions.asm
+++ b/definitions.asm
@@ -1,4 +1,4 @@
-.EQU F_CPU = 8 ; 8 Mhz
+.EQU F_CPU = 8 ; 8 Mhz (для задержки)
.DEF TEMP_REG_A = r16
.DEF TEMP_REG_B = r17
diff --git a/dist/default/production/attiny2313a_thermostat.X.production.hex b/dist/default/production/attiny2313a_thermostat.X.production.hex
index 17bbcc1..e00c816 100644
--- a/dist/default/production/attiny2313a_thermostat.X.production.hex
+++ b/dist/default/production/attiny2313a_thermostat.X.production.hex
@@ -2,46 +2,48 @@
:0200000049C0F5
:10001A0000C04F935F930F935FB7409167004530DD
:10002A000CF403C0442740936700403041F493988E
-:10003A0094989598929A0091660016D19FD0413073
-:10004A0041F4929894989598939A009165000CD1EE
-:10005A0095D0423041F4929893989598949A009149
-:10006A00640002D18BD0433041F4929893989498CB
-:10007A00959A00916300F8D081D043954093670028
+:10003A0094989598929A009166002BD1B6D0413047
+:10004A0041F4929894989598939A0091650021D1D9
+:10005A00ACD0423041F4929893989598949A009132
+:10006A00640017D1A2D0433041F49298939894989F
+:10007A00959A009163000DD198D0439540936700FB
:10008A005FBF0F915F914F9118950FED0DBF0EE76E
:10009A0001BB01EC07BB0CE108BB02E000BF05E0B5
:1000AA0003BF09E106BF01E009BF112410926700EE
-:1000BA0000E000936000002700936A0080E090E06F
-:1000CA0051D0DDD0DCD0DBD0DAD03FD000916A004D
-:1000DA00802F90E000916000003079F4ABD070FD81
-:1000EA00969A70FF96983ED0CAD0C9D0C8D0C7D0C9
-:1000FA002CD010916A00812F90E0013011F49AD02F
-:10010A0049D0023039F71BE0109363001093640062
-:10011A0010936500109366000000DCCFEE24FF18F0
-:10012A0041E1001F111F4A9509F40895EE1CFF1CB6
-:10013A00E21AF30A20F4E20EF31E8894F2CF08942E
-:10014A00F0CF41503040E8F708950F93F89428D043
-:10015A000CEC802E38D00EEB802E35D051D078940E
-:10016A000F9108950F93F8941BD00CEC802E2BD08E
-:10017A0004E4802E28D078940F9108950F930FB835
-:10018A0000E40EB90BE10DB9769BFDCFC09AC09879
-:10019A000F91089574D0B29B0196B39B019708956D
-:1001AA00B99A33E04EEBCDDFB99830E04AE8C9DFBF
-:1001BA0004D033E042E3C5DF0895B19B716002C009
-:1001CA00B1997E7F08950F931F93082D18E0069525
-:1001DA0008F448F0B99A30E046E7B3DFB99830E05E
-:1001EA0042E1AFDF08C0B99A30E04AE0AADFB99825
-:1001FA0030E04EE7A6DF1A9551F71F910F91089547
-:10020A000F931F9308E0B99A30E04AE09ADFB99851
-:10021A0030E040E196DF10916A001695B1991068B6
-:10022A0010936A0030E04CE68CDF0A9561F71F9163
-:10023A000F910895F8945F9354E0A3E6B0E0809399
-:10024A0061009093620000916100109162002AE0BF
-:10025A0030E064DFED9200936100109362005A95DA
-:10026A0091F75F91789408950F931F93E4ECF2E06D
-:10027A001127E00FF11F04901F910F9108950F931A
-:10028A001F932F932AE01FEF0FEF0A95F1F71A95A4
-:10029A00D9F72A95C1F72F911F910F9108950F93BE
-:1002AA001F930FEF1FEF1A95000000000000D9F707
-:1002BA000A95C1F71F910F910895C0F9A4B09992B8
-:0602CA0082F880909CBF49
+:1000BA0000E000936000002700936A0000936B0041
+:1000CA0080E090E000916A00802F90E0009160004B
+:1000DA00003089F4C4D070FD969A70FF969859D072
+:1000EA00E3D0E2D0E1D0E0D02ED010916A00812F87
+:1000FA0010916B00912F013011F4B1D062D002300F
+:10010A0029F71BE0109363001093640010936500B5
+:10011A00109366000000DACFEE24FF1841E1001FB9
+:10012A00111F4A9509F40895EE1CFF1CE21AF30AFE
+:10013A0020F4E20EF31E8894F2CF0894F0CF4150D7
+:10014A003040E8F708950F931F932F93F8943FD008
+:10015A000CEC802E4FD00EEB802E4CD0AAE6B0E0ED
+:10016A0066D0ABE6B0E063D010916A0020916B00D4
+:10017A0026951795269517952695179526951795D9
+:10018A0010936A0020936B0078942F911F910F911E
+:10019A0008950F93F8941BD00CEC802E2BD004E416
+:1001AA00802E28D078940F9108950F930FB800E409
+:1001BA000EB90BE10DB9769BFDCFC09AC0980F918D
+:1001CA00089572D0B29B0196B39B01970895B99A8C
+:1001DA0033E04EEBB4DFB99830E04AE8B0DF04D040
+:1001EA0033E042E3ACDF0895B19B716002C0B1997C
+:1001FA007E7F08950F931F93082D18E0069508F443
+:10020A0048F0B99A30E046E79ADFB99830E042E11F
+:10021A0096DF08C0B99A30E04AE091DFB99830E039
+:10022A004EE78DDF1A9551F71F910F9108950F939D
+:10023A001F93002718E00695B99A30E04AE07FDF5D
+:10024A00B99830E040E17BDFB199006830E04CE6D4
+:10025A0076DF1A9581F70C931F910F910895F89400
+:10026A005F9354E0A3E6B0E080936100909362004C
+:10027A0000916100109162002AE030E04DDFED92BA
+:10028A0000936100109362005A9591F75F917894F8
+:10029A0008950F931F93EEEEF2E01127E00FF11F7E
+:1002AA0004901F910F9108950F931F932F932AE0A3
+:1002BA001FEF0FEF0A95F1F71A95D9F72A95C1F7AB
+:1002CA002F911F910F9108950F931F930FEF1FEF17
+:1002DA001A95000000000000D9F70A95C1F71F918E
+:1002EA000F910895C0F9A4B0999282F880909CBFAA
:00000001FF
diff --git a/dist/default/production/attiny2313a_thermostat.X.production.lss b/dist/default/production/attiny2313a_thermostat.X.production.lss
index e329c15..b9f6519 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 Mon Jun 19 15:34:12 2023
+AVRASM ver. 2.2.7 main.asm Mon Jun 19 19:48:15 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(244): Including file 'div16u.asm'
+main.asm(215): Including file 'div16u.asm'
div16u.asm(22): warning: Register r16 already defined by the .DEF directive
-main.asm(244): 'div16u.asm' included form here
+main.asm(215): 'div16u.asm' included form here
div16u.asm(23): warning: Register r17 already defined by the .DEF directive
-main.asm(244): 'div16u.asm' included form here
+main.asm(215): 'div16u.asm' included form here
div16u.asm(24): warning: Register r16 already defined by the .DEF directive
-main.asm(244): 'div16u.asm' included form here
+main.asm(215): 'div16u.asm' included form here
div16u.asm(25): warning: Register r17 already defined by the .DEF directive
-main.asm(244): 'div16u.asm' included form here
+main.asm(215): 'div16u.asm' included form here
div16u.asm(27): warning: Register r19 already defined by the .DEF directive
-main.asm(244): 'div16u.asm' included form here
+main.asm(215): 'div16u.asm' included form here
div16u.asm(28): warning: Register r20 already defined by the .DEF directive
-main.asm(244): 'div16u.asm' included form here
+main.asm(215): '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(244): Including file 'div16u.asm'
+main.asm(215): Including file 'div16u.asm'
;
@@ -826,7 +826,8 @@ main.asm(244): Including file 'div16u.asm'
000067 CURRENT_DIGIT: .BYTE 1 ; Номер разряда индикатора, который сейчас горит
000068 SW_FLAGS: .BYTE 1 ; Состояние кнопок
000069 HYSTERESIS: .BYTE 1 ; Отклонение температуры от уставки
-00006a OW_RECEIVE: .BYTE 1
+00006a TEMP_L: .BYTE 1
+00006b TEMP_H: .BYTE 1
;//
@@ -869,8 +870,8 @@ main.asm(244): Including file 'div16u.asm'
00001e 9895 cbi PORTD, DIGIT_4_PIN
00001f 9a92 sbi PORTD, DIGIT_1_PIN
000020 9100 0066 lds TEMP_REG_A, DIGITS+3
-000022 d116 rcall DISPLAY_DECODER
-000023 d09f rcall USI_TRANSMIT
+000022 d12b rcall DISPLAY_DECODER
+000023 d0b6 rcall USI_TRANSMIT
_indicate_2:
000024 3041 cpi r20, 1
@@ -881,8 +882,8 @@ main.asm(244): Including file 'div16u.asm'
000028 9895 cbi PORTD, DIGIT_4_PIN
000029 9a93 sbi PORTD, DIGIT_2_PIN
00002a 9100 0065 lds TEMP_REG_A, DIGITS+2
-00002c d10c rcall DISPLAY_DECODER
-00002d d095 rcall USI_TRANSMIT
+00002c d121 rcall DISPLAY_DECODER
+00002d d0ac rcall USI_TRANSMIT
_indicate_3:
00002e 3042 cpi r20, 2
@@ -893,8 +894,8 @@ main.asm(244): Including file 'div16u.asm'
000032 9895 cbi PORTD, DIGIT_4_PIN
000033 9a94 sbi PORTD, DIGIT_3_PIN
000034 9100 0064 lds TEMP_REG_A, DIGITS+1
-000036 d102 rcall DISPLAY_DECODER
-000037 d08b rcall USI_TRANSMIT
+000036 d117 rcall DISPLAY_DECODER
+000037 d0a2 rcall USI_TRANSMIT
_indicate_4:
000038 3043 cpi r20, 3
@@ -905,8 +906,8 @@ main.asm(244): Including file 'div16u.asm'
00003c 9894 cbi PORTD, DIGIT_3_PIN
00003d 9a95 sbi PORTD, DIGIT_4_PIN
00003e 9100 0063 lds TEMP_REG_A, DIGITS
-000040 d0f8 rcall DISPLAY_DECODER
-000041 d081 rcall USI_TRANSMIT
+000040 d10d rcall DISPLAY_DECODER
+000041 d098 rcall USI_TRANSMIT
_indicate_exit:
000042 9543 inc r20
@@ -958,46 +959,15 @@ main.asm(244): Including file 'div16u.asm'
00005e 9300 0060 sts MCU_STATE, r16 ; переводим МК сразу в режим измерения температуры
000060 2700 clr r16
-000061 9300 006a sts OW_RECEIVE, r16
+000061 9300 006a sts TEMP_L, r16
+000063 9300 006b sts TEMP_H, r16
-000063 e080
-000064 e090 display_load 0 ; загружаем число, которое нужно показать на индикатор
-
- ; ldi r16, 0b10000000
- ; lsr r16
- ; sbr r16, (1<<7)
-
- ; sbrc OWFR, OWPRF
-
- ; ldi r16, DS18B20_CMD_SKIPROM
- ; mov r8, r16
- ; rcall OW_PRESENCE
- ; rcall OW_SEND_BYTE
- ;
- ; ldi r16, DS18B20_CMD_RSCRATCHPAD
- ; mov r8, r16
- ;;; rcall OW_PRESENCE
- ; rcall OW_SEND_BYTE
- ;
- ; rcall OW_RD_BYTE
- ;; rcall OW_RD_BYTE
- ; rcall TEMP_CONV
- ; rcall OW_PRESENCE
-
-000065 d051 rcall TEMP_CONV
-
-000066 d0dd rcall DEBOUNCE_SW
-000067 d0dc rcall DEBOUNCE_SW
-000068 d0db rcall DEBOUNCE_SW
-000069 d0da rcall DEBOUNCE_SW
-
-00006a d03f rcall TEMP_RD
-
-
-
-00006b 9100 006a lds r16, OW_RECEIVE
-00006d 2f80 mov DISP_NUM_L, r16
-00006e e090 ldi DISP_NUM_H, 0
+000065 e080
+000066 e090 display_load 0 ; загружаем число, которое нужно показать на индикатор
+
+000067 9100 006a lds r16, TEMP_L
+000069 2f80 mov DISP_NUM_L, r16
+00006a e090 ldi DISP_NUM_H, 0
; sei
@@ -1007,43 +977,44 @@ main.asm(244): Including file 'div16u.asm'
; **** ГЛАВНЫЙ ЦИКЛ **********************************************
LOOP:
; rcall DISPLAY_UPD_DIGITS
-00006f 9100 0060 lds r16, MCU_STATE ; получаем текущее состояние МК
+00006b 9100 0060 lds r16, MCU_STATE ; получаем текущее состояние МК
_STATE_DEFAULT:
-000071 3000 cpi r16, MCU_STATE_DEFAULT
-000072 f479 brne _STATE_PROGRAM
-000073 d0ab rcall DISPLAY_UPD_DIGITS
- ; rcall TEMP_RD
-000074 fd70 sbrc OWFR, OWPRF
-000075 9a96 sbi PORTD, PD6
-000076 ff70 sbrs OWFR, OWPRF
-000077 9896 cbi PORTD, PD6
-000078 d03e rcall TEMP_CONV
-000079 d0ca rcall DEBOUNCE_SW
-00007a d0c9 rcall DEBOUNCE_SW
-00007b d0c8 rcall DEBOUNCE_SW
-00007c d0c7 rcall DEBOUNCE_SW
-00007d d02c rcall TEMP_RD
-00007e 9110 006a lds r17, OW_RECEIVE
-000080 2f81 mov DISP_NUM_L, r17
-000081 e090 ldi DISP_NUM_H, 0
+00006d 3000 cpi r16, MCU_STATE_DEFAULT
+00006e f489 brne _STATE_PROGRAM
+00006f d0c4 rcall DISPLAY_UPD_DIGITS
+000070 fd70 sbrc OWFR, OWPRF
+000071 9a96 sbi PORTD, PD6
+000072 ff70 sbrs OWFR, OWPRF
+000073 9896 cbi PORTD, PD6
+
+000074 d059 rcall TEMP_CONV
+000075 d0e3 rcall DEBOUNCE_SW
+000076 d0e2 rcall DEBOUNCE_SW
+000077 d0e1 rcall DEBOUNCE_SW
+000078 d0e0 rcall DEBOUNCE_SW
+000079 d02e rcall TEMP_RD
+00007a 9110 006a lds r17, TEMP_L
+00007c 2f81 mov DISP_NUM_L, r17
+00007d 9110 006b lds r17, TEMP_H
+00007f 2f91 mov DISP_NUM_H, r17
_STATE_PROGRAM:
-000082 3001 cpi r16, MCU_STATE_PROGRAM
-000083 f411 brne _STATE_ERROR
-000084 d09a rcall DISPLAY_UPD_DIGITS
-000085 d049 rcall SW_CHECK_PROCESS
+000080 3001 cpi r16, MCU_STATE_PROGRAM
+000081 f411 brne _STATE_ERROR
+000082 d0b1 rcall DISPLAY_UPD_DIGITS
+000083 d062 rcall SW_CHECK_PROCESS
_STATE_ERROR:
-000086 3002 cpi r16, MCU_STATE_ERROR
-000087 f739 brne LOOP
-000088 e01b ldi r17, 11
-000089 9310 0063 sts DIGITS, r17
-00008b 9310 0064 sts DIGITS+1, r17
-00008d 9310 0065 sts DIGITS+2, r17
-00008f 9310 0066 sts DIGITS+3, r17
-000091 0000 nop
+000084 3002 cpi r16, MCU_STATE_ERROR
+000085 f729 brne LOOP
+000086 e01b ldi r17, 11
+000087 9310 0063 sts DIGITS, r17
+000089 9310 0064 sts DIGITS+1, r17
+00008b 9310 0065 sts DIGITS+2, r17
+00008d 9310 0066 sts DIGITS+3, r17
+00008f 0000 nop
-000092 cfdc rjmp LOOP
+000090 cfda rjmp LOOP
//
@@ -1081,82 +1052,108 @@ main.asm(244): Including file 'div16u.asm'
;***** Code
div16u:
-000093 24ee clr drem16uL ; clear remainder Low byte
-000094 18ff sub drem16uH,drem16uH ; clear remainder High byte and carry
-000095 e141 ldi dcnt16u,17 ; init loop counter
+000091 24ee clr drem16uL ; clear remainder Low byte
+000092 18ff sub drem16uH,drem16uH ; clear remainder High byte and carry
+000093 e141 ldi dcnt16u,17 ; init loop counter
d16u_1:
-000096 1f00 rol dd16uL ; shift left dividend
-000097 1f11 rol dd16uH
-000098 954a dec dcnt16u ; decrement counter
-000099 f409 brne d16u_2 ; if done
-00009a 9508 ret ; return
+000094 1f00 rol dd16uL ; shift left dividend
+000095 1f11 rol dd16uH
+000096 954a dec dcnt16u ; decrement counter
+000097 f409 brne d16u_2 ; if done
+000098 9508 ret ; return
d16u_2:
-00009b 1cee rol drem16uL ; shift dividend into remainder
-00009c 1cff rol drem16uH
-00009d 1ae2 sub drem16uL,dv16uL ; remainder = remainder - divisor
-00009e 0af3 sbc drem16uH,dv16uH
-00009f f420 brcc d16u_3 ; if result negative
-0000a0 0ee2 add drem16uL,dv16uL ; restore remainder
-0000a1 1ef3 adc drem16uH,dv16uH
-0000a2 9488 clc ; clear carry to be shifted into result
-0000a3 cff2 rjmp d16u_1 ; else
+000099 1cee rol drem16uL ; shift dividend into remainder
+00009a 1cff rol drem16uH
+00009b 1ae2 sub drem16uL,dv16uL ; remainder = remainder - divisor
+00009c 0af3 sbc drem16uH,dv16uH
+00009d f420 brcc d16u_3 ; if result negative
+00009e 0ee2 add drem16uL,dv16uL ; restore remainder
+00009f 1ef3 adc drem16uH,dv16uH
+0000a0 9488 clc ; clear carry to be shifted into result
+0000a1 cff2 rjmp d16u_1 ; else
d16u_3:
-0000a4 9408 sec ; set carry to be shifted into result
-0000a5 cff0
+0000a2 9408 sec ; set carry to be shifted into result
+0000a3 cff0
DELAY_LOOP_16:
-0000a6 5041 subi DELAY_8_r, 1
-0000a7 4030 sbci DELAY_16_r, 0
-0000a8 f7e8 brcc DELAY_LOOP_16
-0000a9 9508 ret
+0000a4 5041 subi DELAY_8_r, 1
+0000a5 4030 sbci DELAY_16_r, 0
+0000a6 f7e8 brcc DELAY_LOOP_16
+0000a7 9508 ret
//
TEMP_RD:
-0000aa 930f push r16
+0000a8 930f push r16
+0000a9 931f push r17
+0000aa 932f push r18
0000ab 94f8 cli
-0000ac d028 rcall OW_PRESENCE
+0000ac d03f rcall OW_PRESENCE
0000ad ec0c ldi r16, DS18B20_CMD_SKIPROM
0000ae 2e80 mov OW_CMD_r, r16
-0000af d038 rcall OW_SEND_BYTE
+0000af d04f rcall OW_SEND_BYTE
0000b0 eb0e ldi r16, DS18B20_CMD_RSCRATCHPAD
0000b1 2e80 mov OW_CMD_r, r16
-0000b2 d035 rcall OW_SEND_BYTE
+0000b2 d04c rcall OW_SEND_BYTE
-0000b3 d051 rcall OW_RD_BYTE
+0000b3 e6aa ldi XL, LOW(TEMP_L)
+0000b4 e0b0 ldi XH, HIGH(TEMP_L)
+0000b5 d066 rcall OW_RD_BYTE
-0000b4 9478 sei
-0000b5 910f pop r16
-0000b6 9508 ret
+0000b6 e6ab ldi XL, LOW(TEMP_H)
+0000b7 e0b0 ldi XH, HIGH(TEMP_H)
+0000b8 d063 rcall OW_RD_BYTE
+
+0000b9 9110 006a lds r17, TEMP_L
+0000bb 9120 006b lds r18, TEMP_H
+
+0000bd 9526 lsr r18
+0000be 9517 ror r17
+0000bf 9526 lsr r18
+0000c0 9517 ror r17
+0000c1 9526 lsr r18
+0000c2 9517 ror r17
+0000c3 9526 lsr r18
+0000c4 9517 ror r17
+
+0000c5 9310 006a sts TEMP_L, r17
+0000c7 9320 006b sts TEMP_H, r18
+
+
+0000c9 9478 sei
+0000ca 912f pop r18
+0000cb 911f pop r17
+0000cc 910f pop r16
+0000cd 9508 ret
;
TEMP_CONV:
-0000b7 930f push r16
-0000b8 94f8 cli
+0000ce 930f push r16
+0000cf 94f8 cli
-0000b9 d01b rcall OW_PRESENCE
-0000ba ec0c ldi r16, DS18B20_CMD_SKIPROM
-0000bb 2e80 mov OW_CMD_r, r16
-0000bc d02b rcall OW_SEND_BYTE
+0000d0 d01b rcall OW_PRESENCE
+0000d1 ec0c ldi r16, DS18B20_CMD_SKIPROM
+0000d2 2e80 mov OW_CMD_r, r16
+0000d3 d02b rcall OW_SEND_BYTE
-0000bd e404 ldi r16, DS18B20_CMD_CONVERTTEMP
-0000be 2e80 mov OW_CMD_r, r16
-0000bf d028 rcall OW_SEND_BYTE
+0000d4 e404 ldi r16, DS18B20_CMD_CONVERTTEMP
+0000d5 2e80 mov OW_CMD_r, r16
+0000d6 d028 rcall OW_SEND_BYTE
-0000c0 9478 sei
-0000c1 910f pop r16
-0000c2 9508 ret
+0000d7 9478 sei
+0000d8 910f pop r16
+0000d9 9508 ret
//
//
; **** ОТПРАВКА БАЙТА В СДВИГОВЫЙ РЕГИСТР *************************
USI_TRANSMIT:
-0000c3 930f push r16
-0000c4 b80f out USIDR, r0 ; Байт для отправки всегда находится в регистре r0. Помещаем данные в регистр USIDR.
+0000da 930f push r16
+0000db b80f out USIDR, r0 ; Байт для отправки всегда находится в регистре r0. Помещаем данные в регистр USIDR.
; Enable USI Overflow Interrupt Flag (will be 0 if transfer is not compeleted)
-0000c5 e400 ldi TEMP_REG_A, (1< USI Clock Source Select
; USICLK <--------------> USI Clock Strobe
; USITC <--------------> USI Toggle Clock (Enable clock generation)
-0000c7 e10b ldi TEMP_REG_A, (1<
+0000e2 9ac0 sbi PORTB, USI_LATCH_PIN
+0000e3 98c0 cbi PORTB, USI_LATCH_PIN
+0000e4 910f pop r16
+0000e5 9508 ret//
//
SW_CHECK_PROCESS:
-0000cf d074 rcall DEBOUNCE_SW
-0000d0 9bb2 sbis SW_PIN, SW_PLUS_PIN
-0000d1 9601 adiw DISP_NUM_L, 1
+0000e6 d072 rcall DEBOUNCE_SW
+0000e7 9bb2 sbis SW_PIN, SW_PLUS_PIN
+0000e8 9601 adiw DISP_NUM_L, 1
-0000d2 9bb3 sbis SW_PIN, SW_MINUS_PIN
-0000d3 9701 sbiw DISP_NUM_L, 1
-0000d4 9508 ret//
+0000e9 9bb3 sbis SW_PIN, SW_MINUS_PIN
+0000ea 9701 sbiw DISP_NUM_L, 1
+0000eb 9508 ret//
//
//
; **** ОПРОС ПРИСУТСТВИЯ УСТРОЙСТВА ******************************
OW_PRESENCE:
-0000d5 9ab9 ow_pull
-0000d6 e033
-0000d7 eb4e
-0000d8 dfcd DELAY16 480
-0000d9 98b9 ow_release
-0000da e030
-0000db e84a
-0000dc dfc9 DELAY16 70
-0000dd d004 rcall OW_CHECK_PRESENCE
-0000de e033
-0000df e342
-0000e0 dfc5 DELAY16 410
-0000e1 9508 ret
+0000ec 9ab9 ow_pull
+0000ed e033
+0000ee eb4e
+0000ef dfb4 DELAY16 480
+0000f0 98b9 ow_release
+0000f1 e030
+0000f2 e84a
+0000f3 dfb0 DELAY16 70
+0000f4 d004 rcall OW_CHECK_PRESENCE
+0000f5 e033
+0000f6 e342
+0000f7 dfac DELAY16 410
+0000f8 9508 ret
//
//
@@ -1216,79 +1213,99 @@ main.asm(244): Including file 'div16u.asm'
; Если подчиненное устройство притянет шину, то устанавливаем флаг OWPRF в единицу в регистре флагов
;
OW_CHECK_PRESENCE:
-0000e2 9bb1 sbis OW_PIN, OW_LINE
-0000e3 6071 sbr OWFR, (1<
//
OW_SEND_BYTE:
-0000e8 930f push r16
-0000e9 931f push r17
-0000ea 2d08 mov r16, OW_CMD_r
-0000eb e018 ldi r17, 8
+0000ff 930f push r16
+000100 931f push r17
+000101 2d08 mov r16, OW_CMD_r
+000102 e018 ldi r17, 8
_OW_SEND_BYTE_LOOP:
-0000ec 9506 lsr r16
-0000ed f408 brcc _OW_SEND_0
-0000ee f048 brcs _OW_SEND_1
+000103 9506 lsr r16
+000104 f408 brcc _OW_SEND_0
+000105 f048 brcs _OW_SEND_1
_OW_SEND_0:
-0000ef 9ab9 ow_pull
-0000f0 e030
-0000f1 e746
-0000f2 dfb3 DELAY16 60
-0000f3 98b9 ow_release
-0000f4 e030
-0000f5 e142
-0000f6 dfaf DELAY16 10
-0000f7 c008 rjmp _OW_SEND_BYTE_END
+000106 9ab9 ow_pull
+000107 e030
+000108 e746
+000109 df9a DELAY16 60
+00010a 98b9 ow_release
+00010b e030
+00010c e142
+00010d df96 DELAY16 10
+00010e c008 rjmp _OW_SEND_BYTE_END
_OW_SEND_1:
-0000f8 9ab9 ow_pull
-0000f9 e030
-0000fa e04a
-0000fb dfaa DELAY16 6
-0000fc 98b9 ow_release
-0000fd e030
-0000fe e74e
-0000ff dfa6 DELAY16 64
+00010f 9ab9 ow_pull
+000110 e030
+000111 e04a
+000112 df91 DELAY16 6
+000113 98b9 ow_release
+000114 e030
+000115 e74e
+000116 df8d DELAY16 64
_OW_SEND_BYTE_END:
-000100 951a dec r17
-000101 f751 brne _OW_SEND_BYTE_LOOP
-000102 911f pop r17
-000103 910f pop r16
-000104 9508 ret
+000117 951a dec r17
+000118 f751 brne _OW_SEND_BYTE_LOOP
+000119 911f pop r17
+00011a 910f pop r16
+00011b 9508 ret
//
//
+ ;OW_RD_BYTE:
+ ; push r16
+ ; push r17
+ ; ldi r16, 8
+ ;_OW_RD_BYTE_LP:
+ ; ow_pull
+ ; DELAY16 6
+ ; ow_release
+ ; DELAY16 9
+ ; lds r17, TEMP_L
+ ; lsr r17
+ ; sbic OW_PIN, OW_LINE
+ ; sbr r17, (1<<7)
+ ; sts TEMP_L, r17
+ ; DELAY16 55
+ ; dec r16
+ ; brne _OW_RD_BYTE_LP
+ ; pop r17
+ ; pop r16
+ ; ret
OW_RD_BYTE:
-000105 930f push r16
-000106 931f push r17
-000107 e008 ldi r16, 8
+00011c 930f push r16
+00011d 931f push r17
+00011e 2700 clr r16
+00011f e018 ldi r17, 8
_OW_RD_BYTE_LP:
-000108 9ab9 ow_pull
-000109 e030
-00010a e04a
-00010b df9a DELAY16 6
-00010c 98b9 ow_release
-00010d e030
-00010e e140
-00010f df96 DELAY16 9
-000110 9110 006a lds r17, OW_RECEIVE
-000112 9516 lsr r17
-000113 99b1 sbic OW_PIN, OW_LINE
-000114 6810 sbr r17, (1<<7)
-000115 9310 006a sts OW_RECEIVE, r17
-000117 e030
-000118 e64c
-000119 df8c DELAY16 55
-00011a 950a dec r16
-00011b f761 brne _OW_RD_BYTE_LP
-00011c 911f pop r17
-00011d 910f pop r16
-00011e 9508 ret
+000120 9506 lsr r16
+000121 9ab9 ow_pull
+000122 e030
+000123 e04a
+000124 df7f DELAY16 6
+000125 98b9 ow_release
+000126 e030
+000127 e140
+000128 df7b DELAY16 9
+000129 99b1 sbic OW_PIN, OW_LINE
+00012a 6800 sbr r16, (1<<7)
+00012b e030
+00012c e64c
+00012d df76 DELAY16 55
+00012e 951a dec r17
+00012f f781 brne _OW_RD_BYTE_LP
+000130 930c st X, r16
+000131 911f pop r17
+000132 910f pop r16
+000133 9508 ret
//
@@ -1300,122 +1317,122 @@ main.asm(244): Including file 'div16u.asm'
; Описание: Перемещает цифры числа в соответствующие ячейки памяти в SRAM
; путем деления этого числа несколько раз
DISPLAY_UPD_DIGITS:
-00011f 94f8 cli
-000120 935f push r21
-000121 e054 ldi r21, 4 ; (4 раза делим) т.к индикатор четырех разрядный
+000134 94f8 cli
+000135 935f push r21
+000136 e054 ldi r21, 4 ; (4 раза делим) т.к индикатор четырех разрядный
; инициализация указателя (за каждый проход цикла будет инкрементироваться)
-000122 e6a3 ldi XL, LOW(DIGITS)
-000123 e0b0 ldi XH, HIGH(DIGITS)
+000137 e6a3 ldi XL, LOW(DIGITS)
+000138 e0b0 ldi XH, HIGH(DIGITS)
.equ dividend = SRAM_TEMP_1 ; число которе будем делить
.equ divisor = 10 ; на что делим
; загружаем число которое хотим поделить в адрес SRAM делимого
-000124 9380 0061 sts dividend, DISP_NUM_L
-000126 9390 0062 sts dividend+1, DISP_NUM_H
+000139 9380 0061 sts dividend, DISP_NUM_L
+00013b 9390 0062 sts dividend+1, DISP_NUM_H
; четыре раза производим деление для получения остатков
DIV_LOOP:
; заполняем нужные регистры
-000128 9100 0061 lds dd16uL, dividend
-00012a 9110 0062 lds dd16uH, dividend+1
-00012c e02a ldi dv16uL, LOW(divisor)
-00012d e030 ldi dv16uH, HIGH(divisor)
+00013d 9100 0061 lds dd16uL, dividend
+00013f 9110 0062 lds dd16uH, dividend+1
+000141 e02a ldi dv16uL, LOW(divisor)
+000142 e030 ldi dv16uH, HIGH(divisor)
-00012e df64 rcall div16u ; делим
+000143 df4d rcall div16u ; делим
-00012f 92ed st X+, drem16uL ; сохраняем остаток в ячейку по указателю и увеличиваем его
+000144 92ed st X+, drem16uL ; сохраняем остаток в ячейку по указателю и увеличиваем его
; обновляем делимое
-000130 9300 0061 sts dividend, dres16uL
-000132 9310 0062 sts dividend+1, dres16uH
+000145 9300 0061 sts dividend, dres16uL
+000147 9310 0062 sts dividend+1, dres16uH
-000134 955a dec r21 ; декрементируем счетчик цикла
-000135 f791 brne DIV_LOOP ; делим еще раз если не 0
-000136 915f pop r21
-000137 9478 sei
-000138 9508 ret
+000149 955a dec r21 ; декрементируем счетчик цикла
+00014a f791 brne DIV_LOOP ; делим еще раз если не 0
+00014b 915f pop r21
+00014c 9478 sei
+00014d 9508 ret
//
//
; **** ЗАГРУЖАЕТ НУЖНЫЙ АДРЕС СИМВОЛА В R0 ***********************
DISPLAY_DECODER:
-000139 930f push r16
-00013a 931f push r17
-00013b ece4 ldi ZL, LOW(2*DISPLAY_SYMBOLS)
-00013c e0f2 ldi ZH, HIGH(2*DISPLAY_SYMBOLS)
+00014e 930f push r16
+00014f 931f push r17
+000150 eeee ldi ZL, LOW(2*DISPLAY_SYMBOLS)
+000151 e0f2 ldi ZH, HIGH(2*DISPLAY_SYMBOLS)
-00013d 2711 clr TEMP_REG_B
-00013e 0fe0 add ZL, TEMP_REG_A
-00013f 1ff1 adc ZH, TEMP_REG_B
+000152 2711 clr TEMP_REG_B
+000153 0fe0 add ZL, TEMP_REG_A
+000154 1ff1 adc ZH, TEMP_REG_B
-000140 9004 lpm r0, Z
-000141 911f pop r17
-000142 910f pop r16
-000143 9508 ret//
+000155 9004 lpm r0, Z
+000156 911f pop r17
+000157 910f pop r16
+000158 9508 ret//
//
DEBOUNCE_SW:
-000144 930f push r16
-000145 931f push r17
-000146 932f push r18
+000159 930f push r16
+00015a 931f push r17
+00015b 932f push r18
-000147 e02a ldi r18, 10
+00015c e02a ldi r18, 10
_loop_2:
-000148 ef1f ldi r17, 255
+00015d ef1f ldi r17, 255
_loop_0:
-000149 ef0f ldi r16, 255
+00015e ef0f ldi r16, 255
_dec_0:
-00014a 950a dec r16
-00014b f7f1 brne _dec_0
+00015f 950a dec r16
+000160 f7f1 brne _dec_0
_loop_1:
-00014c 951a dec r17
-00014d f7d9 brne _loop_0
+000161 951a dec r17
+000162 f7d9 brne _loop_0
_loop_3:
-00014e 952a dec r18
-00014f f7c1 brne _loop_2
+000163 952a dec r18
+000164 f7c1 brne _loop_2
-000150 912f pop r18
-000151 911f pop r17
-000152 910f pop r16
-000153 9508 ret//
+000165 912f pop r18
+000166 911f pop r17
+000167 910f pop r16
+000168 9508 ret//
//
DELAY:
-000154 930f push r16
-000155 931f push r17
+000169 930f push r16
+00016a 931f push r17
-000156 ef0f ldi r16, 255
+00016b ef0f ldi r16, 255
_DELAY_1:
-000157 ef1f ldi r17, 255
+00016c ef1f ldi r17, 255
_DELAY_2:
-000158 951a dec r17
-000159 0000 nop
-00015a 0000 nop
-00015b 0000 nop
-00015c f7d9 brne _DELAY_2
+00016d 951a dec r17
+00016e 0000 nop
+00016f 0000 nop
+000170 0000 nop
+000171 f7d9 brne _DELAY_2
-00015d 950a dec r16
-00015e f7c1 brne _DELAY_1
+000172 950a dec r16
+000173 f7c1 brne _DELAY_1
-00015f 911f pop r17
-000160 910f pop r16
-000161 9508 ret //
+000174 911f pop r17
+000175 910f pop r16
+000176 9508 ret //
//
DISPLAY_SYMBOLS:
; HGFEDCBA HGFEDCBA
-000162 f9c0 .DB 0b11000000, 0b11111001 ; 0, 1
-000163 b0a4 .DB 0b10100100, 0b10110000 ; 2, 3
-000164 9299 .DB 0b10011001, 0b10010010 ; 4, 5
-000165 f882 .DB 0b10000010, 0b11111000 ; 6, 7
-000166 9080 .DB 0b10000000, 0b10010000 ; 8, 9
-000167 bf9c .DB 0b10011100, 0b10111111 ; °, -//
+000177 f9c0 .DB 0b11000000, 0b11111001 ; 0, 1
+000178 b0a4 .DB 0b10100100, 0b10110000 ; 2, 3
+000179 9299 .DB 0b10011001, 0b10010010 ; 4, 5
+00017a f882 .DB 0b10000010, 0b11111000 ; 6, 7
+00017b 9080 .DB 0b10000000, 0b10010000 ; 8, 9
+00017c bf9c .DB 0b10011100, 0b10111111 ; °, -//
//
@@ -1441,10 +1458,10 @@ counted separately from r26..r31 here.
.dseg memory usage only counts static data declared with .byte
"ATtiny2313A" register use summary:
-x : 1 y : 0 z : 1 r0 : 2 r1 : 2 r2 : 0 r3 : 0 r4 : 0
+x : 2 y : 0 z : 1 r0 : 2 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: 72 r17: 32 r18: 7 r19: 14 r20: 25
-r21: 8 r22: 0 r23: 4 r24: 6 r25: 4 r26: 1 r27: 1 r28: 0
+r13: 0 r14: 5 r15: 5 r16: 75 r17: 40 r18: 15 r19: 14 r20: 25
+r21: 8 r22: 0 r23: 4 r24: 6 r25: 4 r26: 3 r27: 3 r28: 0
r29: 0 r30: 2 r31: 2
Registers used: 20 out of 35 (57.1%)
@@ -1455,25 +1472,25 @@ brcc : 3 brcs : 1 break : 0 breq : 0 brge : 1 brhc : 0
brhs : 0 brid : 0 brie : 0 brlo : 0 brlt : 0 brmi : 0
brne : 16 brpl : 0 brsh : 0 brtc : 0 brts : 0 brvc : 0
brvs : 0 bset : 0 bst : 0 cbi : 18 cbr : 1 clc : 1
-clh : 0 cli : 3 cln : 0 clr : 5 cls : 0 clt : 0
+clh : 0 cli : 3 cln : 0 clr : 6 cls : 0 clt : 0
clv : 0 clz : 0 com : 0 cp : 0 cpc : 0 cpi : 8
cpse : 0 dec : 9 eor : 0 icall : 0 ijmp : 0 in : 1
-inc : 1 ld : 0 ldd : 0 ldi : 55 lds : 11 lpm : 2
-lsl : 0 lsr : 2 mov : 7 movw : 0 neg : 0 nop : 4
-or : 0 ori : 0 out : 12 pop : 18 push : 18 rcall : 43
-ret : 14 reti : 1 rjmp : 9 rol : 4 ror : 0 sbc : 1
+inc : 1 ld : 0 ldd : 0 ldi : 58 lds : 13 lpm : 2
+lsl : 0 lsr : 6 mov : 8 movw : 0 neg : 0 nop : 4
+or : 0 ori : 0 out : 12 pop : 20 push : 20 rcall : 38
+ret : 14 reti : 1 rjmp : 9 rol : 4 ror : 4 sbc : 1
sbci : 1 sbi : 10 sbic : 2 sbis : 4 sbiw : 1 sbr : 2
sbrc : 1 sbrs : 1 sec : 1 seh : 0 sei : 3 sen : 0
ser : 0 ses : 0 set : 0 sev : 0 sez : 0 sleep : 0
-spm : 0 st : 1 std : 0 sts : 14 sub : 2 subi : 1
+spm : 0 st : 2 std : 0 sts : 16 sub : 2 subi : 1
swap : 0 tst : 0 wdr : 0
-Instructions used: 45 out of 105 (42.9%)
+Instructions used: 46 out of 105 (43.8%)
"ATtiny2313A" memory use summary [bytes]:
Segment Begin End Code Data Used Size Use%
---------------------------------------------------------------
-[.cseg] 0x000000 0x0002d0 684 12 696 2048 34.0%
-[.dseg] 0x000060 0x00006b 0 11 11 128 8.6%
+[.cseg] 0x000000 0x0002fa 726 12 738 2048 36.0%
+[.dseg] 0x000060 0x00006c 0 12 12 128 9.4%
[.eseg] 0x000000 0x000000 0 0 0 128 0.0%
Assembly complete, 0 errors, 6 warnings
diff --git a/dist/default/production/attiny2313a_thermostat.X.production.map b/dist/default/production/attiny2313a_thermostat.X.production.map
index 8ae9bcf..013e25a 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 Mon Jun 19 15:34:12 2023
+AVRASM ver. 2.2.7 main.asm Mon Jun 19 19:48:15 2023
EQU SIGNATURE_000 0000001e
@@ -527,27 +527,28 @@ DSEG DIGITS 00000063
DSEG CURRENT_DIGIT 00000067
DSEG SW_FLAGS 00000068
DSEG HYSTERESIS 00000069
-DSEG OW_RECEIVE 0000006a
+DSEG TEMP_L 0000006a
+DSEG TEMP_H 0000006b
CSEG RESET_vect 0000004a
CSEG TIMER0_COMPA_vect 0000000e
CSEG _CLR_CURRENT_DIGIT 00000017
CSEG _indicate_1 0000001a
CSEG _indicate_2 00000024
-CSEG DISPLAY_DECODER 00000139
-CSEG USI_TRANSMIT 000000c3
+CSEG DISPLAY_DECODER 0000014e
+CSEG USI_TRANSMIT 000000da
CSEG _indicate_3 0000002e
CSEG _indicate_4 00000038
CSEG _indicate_exit 00000042
CSEG MCU_INIT 0000004c
-CSEG TEMP_CONV 000000b7
-CSEG DEBOUNCE_SW 00000144
-CSEG TEMP_RD 000000aa
-CSEG LOOP 0000006f
-CSEG _STATE_DEFAULT 00000071
-CSEG _STATE_PROGRAM 00000082
-CSEG DISPLAY_UPD_DIGITS 0000011f
-CSEG _STATE_ERROR 00000086
-CSEG SW_CHECK_PROCESS 000000cf
+CSEG LOOP 0000006b
+CSEG _STATE_DEFAULT 0000006d
+CSEG _STATE_PROGRAM 00000080
+CSEG DISPLAY_UPD_DIGITS 00000134
+CSEG TEMP_CONV 000000ce
+CSEG DEBOUNCE_SW 00000159
+CSEG TEMP_RD 000000a8
+CSEG _STATE_ERROR 00000084
+CSEG SW_CHECK_PROCESS 000000e6
DEF drem16uL r14
DEF drem16uH r15
DEF dres16uL r16
@@ -557,31 +558,31 @@ DEF dd16uH r17
DEF dv16uL r18
DEF dv16uH r19
DEF dcnt16u r20
-CSEG div16u 00000093
-CSEG d16u_1 00000096
-CSEG d16u_2 0000009b
-CSEG d16u_3 000000a4
-CSEG DELAY_LOOP_16 000000a6
-CSEG OW_PRESENCE 000000d5
-CSEG OW_SEND_BYTE 000000e8
-CSEG OW_RD_BYTE 00000105
-CSEG _USI_TRANSMIT_LOOP 000000c8
-CSEG OW_CHECK_PRESENCE 000000e2
-CSEG _EXIT 000000e7
-CSEG _OW_SEND_BYTE_LOOP 000000ec
-CSEG _OW_SEND_0 000000ef
-CSEG _OW_SEND_1 000000f8
-CSEG _OW_SEND_BYTE_END 00000100
-CSEG _OW_RD_BYTE_LP 00000108
+CSEG div16u 00000091
+CSEG d16u_1 00000094
+CSEG d16u_2 00000099
+CSEG d16u_3 000000a2
+CSEG DELAY_LOOP_16 000000a4
+CSEG OW_PRESENCE 000000ec
+CSEG OW_SEND_BYTE 000000ff
+CSEG OW_RD_BYTE 0000011c
+CSEG _USI_TRANSMIT_LOOP 000000df
+CSEG OW_CHECK_PRESENCE 000000f9
+CSEG _EXIT 000000fe
+CSEG _OW_SEND_BYTE_LOOP 00000103
+CSEG _OW_SEND_0 00000106
+CSEG _OW_SEND_1 0000010f
+CSEG _OW_SEND_BYTE_END 00000117
+CSEG _OW_RD_BYTE_LP 00000120
EQU dividend 00000061
EQU divisor 0000000a
-CSEG DIV_LOOP 00000128
-CSEG DISPLAY_SYMBOLS 00000162
-CSEG _loop_2 00000148
-CSEG _loop_0 00000149
-CSEG _dec_0 0000014a
-CSEG _loop_1 0000014c
-CSEG _loop_3 0000014e
-CSEG DELAY 00000154
-CSEG _DELAY_1 00000157
-CSEG _DELAY_2 00000158
+CSEG DIV_LOOP 0000013d
+CSEG DISPLAY_SYMBOLS 00000177
+CSEG _loop_2 0000015d
+CSEG _loop_0 0000015e
+CSEG _dec_0 0000015f
+CSEG _loop_1 00000161
+CSEG _loop_3 00000163
+CSEG DELAY 00000169
+CSEG _DELAY_1 0000016c
+CSEG _DELAY_2 0000016d
diff --git a/dist/default/production/attiny2313a_thermostat.X.production.obj b/dist/default/production/attiny2313a_thermostat.X.production.obj
index 1fbb5f1..9c2c5dd 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 34bc037..9b0e9cc 100644
--- a/dist/default/production/attiny2313a_thermostat.X.production.tmp
+++ b/dist/default/production/attiny2313a_thermostat.X.production.tmp
@@ -30,52 +30,53 @@
main.asm27
main.asm28
main.asm29
- main.asm30
- main.asm124
- main.asm49
- <_CLR_CURRENT_DIGIT>main.asm60
- <_indicate_1>main.asm64
- <_indicate_2>main.asm76
- main.asm464
- main.asm293
- <_indicate_3>main.asm88
- <_indicate_4>main.asm100
- <_indicate_exit>main.asm112
- main.asm130
- main.asm272
- main.asm481
- main.asm253
- main.asm201
- <_STATE_DEFAULT>main.asm205
- <_STATE_PROGRAM>main.asm224
- main.asm422
- <_STATE_ERROR>main.asm229
- main.asm325
+ main.asm30
+ main.asm31
+ main.asm125
+ main.asm50
+ <_CLR_CURRENT_DIGIT>main.asm61
+ <_indicate_1>main.asm65
+ <_indicate_2>main.asm77
+ main.asm481
+ main.asm290
+ <_indicate_3>main.asm89
+ <_indicate_4>main.asm101
+ <_indicate_exit>main.asm113
+ main.asm131
+ main.asm171
+ <_STATE_DEFAULT>main.asm175
+ <_STATE_PROGRAM>main.asm195
+ main.asm439
+ main.asm269
+ main.asm498
+ main.asm224
+ <_STATE_ERROR>main.asm200
+ main.asm322
div16u.asm32
div16u.asm36
div16u.asm42
div16u.asm52
- main.asm246
- main.asm338
- main.asm363
- main.asm392
- <_USI_TRANSMIT_LOOP>main.asm311
- main.asm352
- <_EXIT>main.asm358
- <_OW_SEND_BYTE_LOOP>main.asm368
- <_OW_SEND_0>main.asm372
- <_OW_SEND_1>main.asm378
- <_OW_SEND_BYTE_END>main.asm383
- <_OW_RD_BYTE_LP>main.asm396
- main.asm439
- main.asm531
- <_loop_2>main.asm487
- <_loop_0>main.asm489
- <_dec_0>main.asm491
- <_loop_1>main.asm494
- <_loop_3>main.asm497
- main.asm508
- <_DELAY_1>main.asm513
- <_DELAY_2>main.asm515
+ main.asm217
+ main.asm335
+ main.asm360
+ main.asm409
+ <_USI_TRANSMIT_LOOP>main.asm308
+ main.asm349
+ <_EXIT>main.asm355
+ <_OW_SEND_BYTE_LOOP>main.asm365
+ <_OW_SEND_0>main.asm369
+ <_OW_SEND_1>main.asm375
+ <_OW_SEND_BYTE_END>main.asm380
+ <_OW_RD_BYTE_LP>main.asm414
+ main.asm456
+ main.asm548
+ <_loop_2>main.asm504
+ <_loop_0>main.asm506
+ <_dec_0>main.asm508
+ <_loop_1>main.asm511
+ <_loop_3>main.asm514
+ main.asm525
+ <_DELAY_1>main.asm530
+ <_DELAY_2>main.asm532
diff --git a/main.asm b/main.asm
index b65c5be..aa56dca 100644
--- a/main.asm
+++ b/main.asm
@@ -27,7 +27,8 @@ DIGITS: .BYTE 4 ; Ячейки, где хранят
CURRENT_DIGIT: .BYTE 1 ; Номер разряда индикатора, который сейчас горит
SW_FLAGS: .BYTE 1 ; Состояние кнопок
HYSTERESIS: .BYTE 1 ; Отклонение температуры от уставки
-OW_RECEIVE: .BYTE 1
+TEMP_L: .BYTE 1
+TEMP_H: .BYTE 1
;//
@@ -152,43 +153,12 @@ MCU_INIT:
sts MCU_STATE, r16 ; переводим МК сразу в режим измерения температуры
clr r16
- sts OW_RECEIVE, r16
+ sts TEMP_L, r16
+ sts TEMP_H, r16
display_load 0 ; загружаем число, которое нужно показать на индикатор
-
-; ldi r16, 0b10000000
-; lsr r16
-; sbr r16, (1<<7)
-
-; sbrc OWFR, OWPRF
-
-; ldi r16, DS18B20_CMD_SKIPROM
-; mov r8, r16
-; rcall OW_PRESENCE
-; rcall OW_SEND_BYTE
-;
-; ldi r16, DS18B20_CMD_RSCRATCHPAD
-; mov r8, r16
-;;; rcall OW_PRESENCE
-; rcall OW_SEND_BYTE
-;
-; rcall OW_RD_BYTE
-;; rcall OW_RD_BYTE
-; rcall TEMP_CONV
-; rcall OW_PRESENCE
-
- rcall TEMP_CONV
-
- rcall DEBOUNCE_SW
- rcall DEBOUNCE_SW
- rcall DEBOUNCE_SW
- rcall DEBOUNCE_SW
-
- rcall TEMP_RD
-
-
-
- lds r16, OW_RECEIVE
+
+ lds r16, TEMP_L
mov DISP_NUM_L, r16
ldi DISP_NUM_H, 0
@@ -206,20 +176,21 @@ _STATE_DEFAULT:
cpi r16, MCU_STATE_DEFAULT
brne _STATE_PROGRAM
rcall DISPLAY_UPD_DIGITS
-; rcall TEMP_RD
sbrc OWFR, OWPRF
sbi PORTD, PD6
sbrs OWFR, OWPRF
cbi PORTD, PD6
+
rcall TEMP_CONV
rcall DEBOUNCE_SW
rcall DEBOUNCE_SW
rcall DEBOUNCE_SW
rcall DEBOUNCE_SW
rcall TEMP_RD
- lds r17, OW_RECEIVE
+ lds r17, TEMP_L
mov DISP_NUM_L, r17
- ldi DISP_NUM_H, 0
+ lds r17, TEMP_H
+ mov DISP_NUM_H, r17
_STATE_PROGRAM:
cpi r16, MCU_STATE_PROGRAM
@@ -252,6 +223,8 @@ DELAY_LOOP_16:
//
TEMP_RD:
push r16
+ push r17
+ push r18
cli
rcall OW_PRESENCE
@@ -263,9 +236,33 @@ TEMP_RD:
mov OW_CMD_r, r16
rcall OW_SEND_BYTE
+ ldi XL, LOW(TEMP_L)
+ ldi XH, HIGH(TEMP_L)
rcall OW_RD_BYTE
+ ldi XL, LOW(TEMP_H)
+ ldi XH, HIGH(TEMP_H)
+ rcall OW_RD_BYTE
+
+ lds r17, TEMP_L
+ lds r18, TEMP_H
+
+ lsr r18
+ ror r17
+ lsr r18
+ ror r17
+ lsr r18
+ ror r17
+ lsr r18
+ ror r17
+
+ sts TEMP_L, r17
+ sts TEMP_H, r18
+
+
sei
+ pop r18
+ pop r17
pop r16
ret
;
@@ -362,7 +359,7 @@ _EXIT:
//
OW_SEND_BYTE:
push r16
- push r17
+ push r17
mov r16, OW_CMD_r
ldi r17, 8
_OW_SEND_BYTE_LOOP:
@@ -392,20 +389,20 @@ _OW_SEND_BYTE_END:
OW_RD_BYTE:
push r16
push r17
- ldi r16, 8
+ clr r16
+ ldi r17, 8
_OW_RD_BYTE_LP:
+ lsr r16
ow_pull
DELAY16 6
ow_release
DELAY16 9
- lds r17, OW_RECEIVE
- lsr r17
sbic OW_PIN, OW_LINE
- sbr r17, (1<<7)
- sts OW_RECEIVE, r17
+ sbr r16, (1<<7)
DELAY16 55
- dec r16
+ dec r17
brne _OW_RD_BYTE_LP
+ st X, r16
pop r17
pop r16
ret
diff --git a/main.hex b/main.hex
index 5619d00..bb289c9 100644
--- a/main.hex
+++ b/main.hex
@@ -2,43 +2,46 @@
:0200000049C0F5
:10001A0000C04F935F930F935FB7409167004530DD
:10002A000CF403C0442740936700403041F493988E
-:10003A0094989598929A00916600FED087D04130A4
-:10004A0041F4929894989598939A00916500F4D007
-:10005A007DD0423041F4929893989598949A009161
-:10006A006400EAD073D0433041F4929893989498FC
-:10007A00959A00916300E0D069D043954093670058
+:10003A0094989598929A0091660015D19FD0413074
+:10004A0041F4929894989598939A009165000BD1EF
+:10005A0095D0423041F4929893989598949A009149
+:10006A00640001D18BD0433041F4929893989498CC
+:10007A00959A00916300F7D081D043954093670029
:10008A005FBF0F915F914F9118950FED0DBF0EE76E
:10009A0001BB01EC07BB0CE108BB02E000BF05E0B5
:1000AA0003BF09E106BF01E009BF112410926700EE
:1000BA0000E000936000002700936A0080E090E06F
-:1000CA00C6D056D00CEC802E66D004E4802E63D0C5
-:1000DA004FD00CEC802E5FD00EEB802E5CD00091BE
-:1000EA006A00802F90E000916000003039F48AD0D5
-:1000FA0070FD969A70FF9698AAD0A9D0013011F493
-:10010A0081D030D0023079F71BE01093630010934E
-:10011A00640010936500109366000000E4CFEE249B
-:10012A00FF1841E1001F111F4A9509F40895EE1CBA
-:10013A00FF1CE21AF30A20F4E20EF31E8894F2CFAF
-:10014A000894F0CF41503040E8F708950F930FB864
-:10015A0000E40EB90BE10DB9769BFDCFC09AC098A9
-:10016A000F91089574D0B29B0196B39B019708959D
-:10017A00B99A33E04EEBE6DFB99830E04AE8E2DFBD
-:10018A0004D033E042E3DEDF0895B19B716002C020
-:10019A00B1997E7F08950F931F93082D18E0069555
-:1001AA0008F448F0B99A30E046E7CCDFB99830E075
-:1001BA0042E1C8DF08C0B99A30E04AE0C3DFB99823
-:1001CA0030E04EE7BFDF1A9551F71F910F9108955E
-:1001DA000F931F9308E0B99A30E04AE0B3DFB99869
-:1001EA0030E040E1AFDF10916A001695B1991068CE
-:1001FA0010936A0030E04CE6A5DF0A9561F71F917B
-:10020A000F910895F8945F9354E0A3E6B0E08093C9
-:10021A0061009093620000916100109162002AE0EF
-:10022A0030E07DDFED9200936100109362005A95F1
-:10023A0091F75F91789408950F931F93E4E9F2E0A0
-:10024A001127E00FF11F04901F910F9108950F934A
-:10025A001F932F932AE01FEF0FEF0A95F1F71A95D4
-:10026A00D9F72A95C1F72F911F910F9108950F93EE
-:10027A001F930FEF1FEF1A95000000000000D9F737
-:10028A000A95C1F71F910F910895C0F9A4B09992E8
-:06029A0082F880909CBF79
+:1000CA0051D0DCD0DBD0DAD0D9D03FD000916A0051
+:1000DA00802F90E000916000003079F4AAD070FD82
+:1000EA00969A70FF96983ED0C9D0C8D0C7D0C6D0CD
+:1000FA002CD010916A00812F90E0013011F499D030
+:10010A0049D0023039F71BE0109363001093640062
+:10011A0010936500109366000000DCCFEE24FF18F0
+:10012A0041E1001F111F4A9509F40895EE1CFF1CB6
+:10013A00E21AF30A20F4E20EF31E8894F2CF08942E
+:10014A00F0CF41503040E8F708950F93F89428D043
+:10015A000CEC802E38D00EEB802E35D050D078940F
+:10016A000F9108950F93F8941BD00CEC802E2BD08E
+:10017A0004E4802E28D078940F9108950F930FB835
+:10018A0000E40EB90BE10DB9769BFDCFC09AC09879
+:10019A000F91089573D0B29B0196B39B019708956E
+:1001AA00B99A33E04EEBCDDFB99830E04AE8C9DFBF
+:1001BA0004D033E042E3C5DF0895B19B716002C009
+:1001CA00B1997E7F08950F931F93082D017049F00E
+:1001DA00B99A30E04AE0B5DFB99830E04EE7B1DFCE
+:1001EA0008C0B99A30E046E7ACDFB99830E042E19E
+:1001FA00A8DF8694882049F71F910F9108950F93DD
+:10020A001F9308E0B99A30E04AE09BDFB99830E0E2
+:10021A0040E197DF10916A001695B1991068109322
+:10022A006A0030E04CE68DDF0A9561F71F910F9165
+:10023A000895F8945F9354E0A3E6B0E080936100D8
+:10024A009093620000916100109162002AE030E010
+:10025A0065DFED9200936100109362005A9591F761
+:10026A005F91789408950F931F93E2ECF2E01127BF
+:10027A00E00FF11F04901F910F9108950F931F93A0
+:10028A002F932AE01FEF0FEF0A95F1F71A95D9F786
+:10029A002A95C1F72F911F910F9108950F931F93DC
+:1002AA000FEF1FEF1A95000000000000D9F70A951A
+:1002BA00C1F71F910F910895C0F9A4B0999282F8DD
+:0402CA0080909CBFC5
:00000001FF