diff --git a/NOTES.md b/NOTES.md
index 21cffd9..0f0d3c5 100644
--- a/NOTES.md
+++ b/NOTES.md
@@ -1,10 +1,2 @@
-
-ОСНОВНОЕ:
-
-- сделать подпрограмму, которя будет опрашивать кнопки и в зависимости от нажатия переключють состояние программы
-- сделать программу, которая будет сохранять уставку температуры и гистерезис в EEPROM (перед инициализации МК
- необходимо чтобы данные брались из EEPROM и записывались в соответствующие ячейки)
-
-ДОПОЛНИТЕЛЬНО (если хватит памяти):
-
-- отправлять данные температуры в UART ("целая-часть:дробная-часть\n")
\ No newline at end of file
+- сделать программу, которая будет сохранять уставку температуры, гистерезис и режим работы в EEPROM
+ (перед инициализации МК необходимо чтобы данные брались из EEPROM и записывались в соответствующие ячейки)
\ No newline at end of file
diff --git a/definitions.asm b/definitions.asm
index da92917..9169a85 100644
--- a/definitions.asm
+++ b/definitions.asm
@@ -7,6 +7,7 @@
.DEF DELAY_24_r = r21
.DEF DISP_NUM_L = r24 ; LSB числа которое сейчас на индикаторе
.DEF DISP_NUM_H = r25 ; MSB числа которое сейчас на индикаторе
+.DEF REPROGRAM_STEP_r = r6
.EQU DIGIT_1_PIN = PD2 ; Пин разряда индикатора 1
.EQU DIGIT_2_PIN = PD3 ; Пин разряда индикатора 2
@@ -63,7 +64,7 @@
; **** СТАНДАРТНЫЕ ПАРАМЕТРЫ ***********************************
; Отдельно задается целая и дробная часть в точности до десятых
-.EQU DEFAULT_TEMP = 300 ; 30 градусов
+.EQU DEFAULT_TEMP = 315 ; 30 градусов
.EQU DEFAULT_HYST = 5 ; 0.5 градусов гистерезис
.EQU HEAT_MODE = 1
diff --git a/dist/default/production/attiny2313a_thermostat.X.production.hex b/dist/default/production/attiny2313a_thermostat.X.production.hex
index bdbddf4..4feccc2 100644
--- a/dist/default/production/attiny2313a_thermostat.X.production.hex
+++ b/dist/default/production/attiny2313a_thermostat.X.production.hex
@@ -1,85 +1,105 @@
:020000020000FC
-:0200000073C0CB
-:0200160018953B
-:10001A0015C00F931F932F933F930FB7B49908C03E
-:10002A0020916000203009F003C011E010936000B5
-:10003A000FBF3F912F911F910F9118954F935F9387
-:10004A000F931F935FB74091670045300CF403C0CC
-:10005A00442740936700403081F493989498959888
-:10006A000EF002C00BE002C000916500002311F0FF
-:10007A00929A01C092980FD28CD1413081F4929811
-:10008A00949895980091640030916500032B11F0C3
-:10009A00939A01C0939800916400FDD17AD14230BD
-:1000AA0059F4929893989598949A00916300F3D191
-:1000BA00002D0F77002E6DD1433041F4929893981A
-:1000CA009498959A00916B00E6D163D14395409339
-:1000DA0067005FBF1F910F915F914F9118950FEDC8
-:1000EA000DBF0FE701BB01EE07BB0CE108BB02E045
-:1000FA0000BF05E003BF09E106BF00E20BBF0CE148
-:10010A0000BD03E309B900E002B908E00AB906E054
-:10011A0003B911241092670000E0009360000CE21A
-:10012A0000936D0001E000936C0005E000936E00FF
-:10013A0001E000936F0000270093690000936A00B2
-:10014A0000EF00936B00C5D000917000083209F4EB
-:10015A0005C012E010936000ADD101C0A7D180E0C4
-:10016A0090E000916000003039F496987AD1A2D0DC
-:10017A0001E009BF50D039D0013019F4969871D1F5
-:10018A0014D1023071F7969AECCFEE24FF1841E1B0
-:10019A00001F111F4A9509F40895EE1CFF1CE21A6C
-:1001AA00F30A20F4E20EF31E8894F2CF0894F0CFFB
-:1001BA00FF1829E0001F2A9509F40895FF1CF11A77
-:1001CA0018F4F10E8894F6CF0894F4CF55274427F3
-:1001DA0060E13695279510F4400F511F57954795C2
-:1001EA00379527956A95B9F708950F930091690095
-:1001FA00502E0DD000916B00502E09D000B3017023
-:10020A00502E05D004E0502E02D00F9108955D9B28
-:10021A00FECF5CB808950F931F932F933F934F938C
-:10022A005F930091690010916A002AE030E0CEDF06
-:10023A00022F132F20916B003327020F131F1093E5
-:10024A0071000093720040916D0050916C006091B2
-:10025A006E004F935F937727461B570BB42EA52E3C
-:10026A005F914F917727460F571FD42EC52E0EF058
-:10027A0004C0009510950F5F1F4FB016A10624F415
-:10028A000D151C054CF40FC040916F00442311F466
-:10029A00909801C0909A07C040916F00442311F4CE
-:1002AA00909A01C090985F914F913F912F911F9121
-:1002BA000F9108951F9361D053E137E84DEF15D19F
-:1002CA0012D010916900812F10916A00912F1F910D
-:1002DA0008950F9378D003E3802E8AD0A0E7B0E088
-:1002EA00A6D00F9108950F931F932F933F934F9387
-:1002FA006AD070FF3CC00CEC802E7AD00EEB802EB8
-:10030A0077D0A9E6B0E093D0AAE6B0E090D01091F9
-:10031A00690020916A002F93287F283F11F0E89402
-:10032A0007C02F916894109520951F5F2F4F01C029
-:10033A002F91269517952695179526951795269503
-:10034A001795309169000EF43195432F3F70432F72
-:10035A00330F330F330F440F340F369536953695D6
-:10036A0036951093690020936A0030936B004F9181
-:10037A003F912F911F910F9108950F9324D070FFF1
-:10038A0006C00CEC802E34D004E4802E31D00F91BC
-:10039A0008950F930FB800E40EB90BE10DB9769BDF
-:1003AA00FDCFC09AC0980F9108950F938AD0B29B3F
-:1003BA000196B39B0197B49B01C003C000E0009370
-:1003CA0060000F910895F894B99A33E04EEB89D002
-:1003DA00B99830E04AE885D005D033E042E381D0CD
-:1003EA0078940895B19B716002C0B1997E7F089597
-:1003FA000F931F93F894082D18E0069508F448F017
-:10040A00B99A30E046E76DD0B99830E042E169D058
-:10041A0008C0B99A30E04AE064D0B99830E04EE7B3
-:10042A0060D01A9551F778941F910F9108950F9300
-:10043A001F93F894002718E00695B99A30E04AE02D
-:10044A0050D0B99830E040E14CD0B199006830E022
-:10045A004CE647D01A9581F70C9378941F910F9127
-:10046A000895F8945F9354E0A3E6B0E080936100A6
-:10047A009093620000916100109162002AE030E0DE
-:10048A0084DEED9200936100109362005A9591F711
-:10049A005F91789408950F931F93EEE1F5E0112789
-:1004AA00E00FF11F04901F910F910895C59A22D071
-:1004BA00C5980895C59A1ED01DD01CD01BD0C598CA
-:1004CA0008950F931F932F932AE01FEF0FEF0A95BA
-:1004DA00F1F71A95D9F72A95C1F72F911F910F9124
-:1004EA00089541503040E8F7089541503040504057
-:1004FA00E0F708950F931F932F9326E00FEF1FEF56
-:10050A001A95F1F70A95D9F72A95C1F72F911F91F4
-:10051A000F910895C0F9A4B0999282F880909CBF77
+:020000006FC0CF
+:02000800189549
+:0200160002C026
+:10001A000DC00F931F930FB716B31C7019F411E09C
+:10002A00109360000FBF1F910F9118950F931F93A4
+:10003A002F933F934F935F935FB74091670045308B
+:10004A000CF403C0442740936700403081F493982E
+:10005A00949895980EF002C00BE002C000916500DA
+:10006A00002311F0929A01C09298A3D29BD14130F9
+:10007A0081F4929894989598009164003091650063
+:10008A00032B11F0939A01C093980091640091D2C6
+:10009A0089D1423059F4929893989598949A0091FC
+:1000AA00630087D2002D0F77002E7CD1433041F4B4
+:1000BA00929893989498959A009166007AD272D100
+:1000CA004395409367005FBF5F914F913F912F9196
+:1000DA001F910F9118950FED0DBF0FE701BB01EEB0
+:1000EA0007BB0CE108BB02E000BF05E003BF09E162
+:1000FA0006BF00E20BBF0CE100BD03E309B900E053
+:10010A0002B908E00AB906E003B91124109267009F
+:10011A0000E0009360000BE300936C0001E00093A1
+:10012A006B0005E000936D0001E000936E0000276C
+:10013A00009368000093690000EF00936A000FEFD4
+:10014A00009371006624CED000916F00083209F442
+:10015A0005C012E0109360003ED201C035D280E0A3
+:10016A0090E0009160000BD2003051F496982091F3
+:10017A006A0020936600A7D059D011E019BF38D081
+:10018A00013011F4969842D1023059F7969AE9CF84
+:10019A00EE24FF1841E1001F111F4A9509F4089542
+:1001AA00EE1CFF1CE21AF30A20F4E20EF31E8894F6
+:1001BA00F2CF0894F0CFFF1829E0001F2A9509F41E
+:1001CA000895FF1CF11A18F4F10E8894F6CF0894DA
+:1001DA00F4CF5527442760E13695279510F4400F50
+:1001EA00511F57954795379527956A95B9F70895F9
+:1001FA000F931F9300916800502E14D000916A004B
+:10020A00502E10D000B30170502E0CD004E0502EA6
+:10021A0009D00027502E1CE005D01A95E9F71F9146
+:10022A000F9108955D9BFECF5CB808950F931F93BD
+:10023A002F933F934F935F937F93009168001091A0
+:10024A0069002AE030E0C5DF022F132F20916A00EF
+:10025A003327020F131F40916C0050916B0060917D
+:10026A006D004F935F937727461B570BB42EA52E2D
+:10027A005F914F917727460F571FD42EC52E0EF048
+:10028A0004C0009510950F5F1F4FB016A10624F405
+:10029A000D151C054CF40FC040916E00442311F457
+:1002AA00909801C0909A07C040916E00442311F4BF
+:1002BA00909A01C090987F915F914F913F912F91B1
+:1002CA001F910F9108951F9361D052E135E54DEBCF
+:1002DA009DD112D010916800812F10916900912F41
+:1002EA001F9108950F93FDD003E3802E0FD1AFE63F
+:1002FA00B0E02BD10F9108950F931F932F933F9343
+:10030A004F93EFD070FF3CC00CEC802EFFD00EEB69
+:10031A00802EFCD0A8E6B0E018D1A9E6B0E015D14D
+:10032A0010916800209169002F93287F283F11F0CF
+:10033A00E89407C02F916894109520951F5F2F4F5E
+:10034A0001C02F91269517952695179526951795ED
+:10035A0026951795309168000EF43195432F3F701A
+:10036A00432F330F330F330F440F340F369536951F
+:10037A0036953695109368002093690030936A0089
+:10038A004F913F912F911F910F9108950F93A9D0EB
+:10039A0070FF06C00CEC802EB9D004E4802EB6D0D3
+:1003AA000F9108950F930F920FB800E40EB90BE165
+:1003BA000DB9769BFDCFC09AC0980F900F91089502
+:1003CA000F93B49B01C014C000917100002309F47B
+:1003DA000FC000270093710005D16394162D1430C5
+:1003EA0014F4F2D005C06624F6D010E01093600031
+:1003FA00B49901C009C000917100002309F004C03A
+:10040A000FEF00937100EED00F9108950F931F9391
+:10041A002F933F934F93062D002309F002C0639454
+:10042A00D3D0CEDF013019F0023011F154C00000F0
+:10043A00B29B04C000C0B39B08C00DC0D3D01091BA
+:10044A006D00139510936D0006C0CCD010916D000D
+:10045A001A9510936D000F931F9300916D001AE087
+:10046A00AADE802F9927F09266001F910F9133C060
+:10047A000000B29B04C000C0B39B0FC019C0B2D029
+:10048A0010916C0020916B0031E0130F3327231F6A
+:10049A0010936C0020936B000BC0A4D010916C00D9
+:1004AA0020916B001150204010936C0020936B0038
+:1004BA000F931F932F933F9300916C0010916B0041
+:1004CA002AE030E065DE802F912FE09266003F91AE
+:1004DA002F911F910F914F913F912F911F910F9142
+:1004EA000895F894B99A33E04EEB8CD0B99830E07D
+:1004FA004AE888D005D033E042E384D0789408955E
+:10050A00B19B716002C0B1997E7F0895F8940F93F0
+:10051A001F93082D18E0069508F448F0B99A30E0C0
+:10052A0046E770D0B99830E042E16CD008C0B99A79
+:10053A0030E04AE067D0B99830E04EE763D01A95C8
+:10054A0051F71F910F9178940895F8940F931F9380
+:10055A00002718E00695B99A30E04AE053D0B998D6
+:10056A0030E040E14FD0B199006830E04CE64AD023
+:10057A001A9581F70C931F910F91789408950F9310
+:10058A005F9353E0A3E6B0E080936100909362002A
+:10059A0000916100109162002AE030E0F9DDED92ED
+:1005AA0000936100109362005A9591F75F910F9141
+:1005BA0008950F931F93E0E4F6E01127E00FF11F6F
+:1005CA0004901F910F910895C59A53E039EA4DE7B7
+:1005DA001DD0C5980895C59A5CE034E34DEF16D056
+:1005EA00C59808950F931F932F932AE01FEF0FEFDB
+:1005FA000A95F1F71A95D9F72A95C1F72F911F9104
+:10060A000F91089541503040E8F708954150304025
+:10061A005040E0F708950F931F932F9326E00FEFB2
+:10062A001FEF1A95F1F70A95D9F72A95C1F72F9175
+:10063A001F910F910895C0F9A4B0999282F8809001
+:04064A009CBFC68902
:00000001FF
diff --git a/dist/default/production/attiny2313a_thermostat.X.production.lss b/dist/default/production/attiny2313a_thermostat.X.production.lss
index 826590b..0176919 100644
--- a/dist/default/production/attiny2313a_thermostat.X.production.lss
+++ b/dist/default/production/attiny2313a_thermostat.X.production.lss
@@ -1,5 +1,5 @@
-AVRASM ver. 2.2.7 main.asm Mon Jun 26 12:19:45 2023
+AVRASM ver. 2.2.7 main.asm Thu Jun 29 14:17:58 2023
[builtin](2): Including file '/home/sergeyyarkov/.mchp_packs/Microchip/ATtiny_DFP/3.0.151/avrasm/inc\tn2313Adef.inc'
main.asm(15): Including file 'definitions.asm'
@@ -45,8 +45,8 @@ mpy16u.asm(25): warning: Register r20 already defined by the .DEF directive
main.asm(297): 'mpy16u.asm' included form here
mpy16u.asm(26): warning: Register r21 already defined by the .DEF directive
main.asm(297): 'mpy16u.asm' included form here
-main.asm(352): warning: Register r16 already defined by the .DEF directive
-main.asm(353): warning: Register r17 already defined by the .DEF directive
+main.asm(354): warning: Register r16 already defined by the .DEF directive
+main.asm(355): warning: Register r17 already defined by the .DEF directive
[builtin](2): Including file '/home/sergeyyarkov/.mchp_packs/Microchip/ATtiny_DFP/3.0.151/avrasm/inc\tn2313Adef.inc'
main.asm(15): Including file 'definitions.asm'
main.asm(16): Including file 'macros.asm'
@@ -777,6 +777,7 @@ main.asm(297): Including file 'mpy16u.asm'
.DEF DELAY_24_r = r21
.DEF DISP_NUM_L = r24 ; LSB числа которое сейчас на индикаторе
.DEF DISP_NUM_H = r25 ; MSB числа которое сейчас на индикаторе
+ .DEF REPROGRAM_STEP_r = r6
.EQU DIGIT_1_PIN = PD2 ; Пин разряда индикатора 1
.EQU DIGIT_2_PIN = PD3 ; Пин разряда индикатора 2
@@ -833,7 +834,7 @@ main.asm(297): Including file 'mpy16u.asm'
; **** СТАНДАРТНЫЕ ПАРАМЕТРЫ ***********************************
; Отдельно задается целая и дробная часть в точности до десятых
- .EQU DEFAULT_TEMP = 300 ; 30 градусов
+ .EQU DEFAULT_TEMP = 315 ; 30 градусов
.EQU DEFAULT_HYST = 5 ; 0.5 градусов гистерезис
.EQU HEAT_MODE = 1
@@ -894,17 +895,16 @@ main.asm(297): Including file 'mpy16u.asm'
000061 SRAM_TEMP_1: .BYTE 2 ; Хранения временного 16-бит числа в ячейке
000063 DIGITS: .BYTE 4 ; Ячейки, где хранятся символы, для вывода на индикатор
000067 CURRENT_DIGIT: .BYTE 1 ; Номер разряда индикатора, который сейчас горит
-000068 SW_FLAGS: .BYTE 1 ; Состояние кнопок
-000069 TEMP_L: .BYTE 1 ; Младший байт температуры
-00006a TEMP_H: .BYTE 1 ; Старший байт температуры
-00006b TEMP_F: .BYTE 1 ; Дробная часть
-00006c SETTING_TEMP_H: .BYTE 1 ; Уставка температуры (старший байт)
-00006d SETTING_TEMP_L: .BYTE 1 ; Уставка температуры (младший байт)
-00006e SETTING_HYST: .BYTE 1 ; Гистерезис: отклонение от уставки
-00006f SETTING_MODE: .BYTE 1 ; Режим работы: '1' - нагрев; '0' - 'охлаждение'
-000070 DEVICE_FAMILY_CODE: .BYTE 1 ; Должно быть 0x10 для DS18B20
-000071 SRAM_TEMP_2: .BYTE 1
-000072 SRAM_TEMP_3: .BYTE 1
+000068 TEMP_L: .BYTE 1 ; Младший байт температуры
+000069 TEMP_H: .BYTE 1 ; Старший байт температуры
+00006a TEMP_F: .BYTE 1 ; Дробная часть
+00006b SETTING_TEMP_H: .BYTE 1 ; Уставка температуры (старший байт)
+00006c SETTING_TEMP_L: .BYTE 1 ; Уставка температуры (младший байт)
+00006d SETTING_HYST: .BYTE 1 ; Гистерезис: отклонение от уставки
+00006e SETTING_MODE: .BYTE 1 ; Режим работы: '1' - нагрев; '0' - 'охлаждение'
+00006f DEVICE_FAMILY_CODE: .BYTE 1 ; Должно быть 0x10 для DS18B20
+000070 PROGRAM_STEPS: .BYTE 1 ; Текущий "шаг" для настройки (0 - ничего; 1 - уставка T; 2 - гистерезис)
+000071 SW_DATA: .BYTE 1
;//
@@ -914,219 +914,221 @@ main.asm(297): Including file 'mpy16u.asm'
//
.ORG 0x00
-000000 c073 rjmp RESET_vect
+000000 c06f rjmp RESET_vect
+
+ .ORG 0x04
+000004 9518 reti
.ORG 0x000B
- ; rjmp PCINT0_vect
-00000b 9518 reti
+00000b c002 rjmp PCINT0_vect
.ORG 0x000D
-00000d c015 rjmp TIMER0_COMPA_vect
+00000d c00d rjmp TIMER0_COMPA_vect
+
//
//
PCINT0_vect:
00000e 930f push r16
00000f 931f push r17
-000010 932f push r18
-000011 933f push r19
-000012 b70f in r16, SREG
+000010 b70f in r16, SREG
+000011 b316 in r17, SW_PIN
- ; display_off
-
- ; in r17, SW_PIN
- ; clr r18
- ; ldi r18, (1<
+000017 bf0f out SREG, r16
+000018 911f pop r17
+000019 910f pop r16
+00001a 9518 reti
+ //
//
; **** ДИНАМИЧЕСКАЯ ИНДИКАЦИЯ ************************************
TIMER0_COMPA_vect:
-000023 934f push r20
-000024 935f push r21
-000025 930f push r16
-000026 931f push r17
-000027 b75f in r21, SREG
+00001b 930f push r16
+00001c 931f push r17
+00001d 932f push r18
+00001e 933f push r19
+00001f 934f push r20
+000020 935f push r21
+000021 b75f in r21, SREG
-000028 9140 0067 lds r20, CURRENT_DIGIT
-00002a 3045 cpi r20, 5
-00002b f40c brge _CLR_CURRENT_DIGIT ; сброс активного разряда если >= 5
-00002c c003 rjmp _indicate_1
+000022 9140 0067 lds r20, CURRENT_DIGIT
+000024 3045 cpi r20, 5
+000025 f40c brge _CLR_CURRENT_DIGIT ; сброс активного разряда если >= 5
+000026 c003 rjmp _indicate_1
_CLR_CURRENT_DIGIT: ; сброс текущего активного разряда в ноль
-00002d 2744 clr r20
-00002e 9340 0067 sts CURRENT_DIGIT, r20
+000027 2744 clr r20
+000028 9340 0067 sts CURRENT_DIGIT, r20
_indicate_1:
-000030 3040 cpi r20, 0
-000031 f481 brne _indicate_2
+00002a 3040 cpi r20, 0
+00002b f481 brne _indicate_2
-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 d20f rcall DISPLAY_DECODER
-000041 d18c rcall USI_TRANSMIT
+00002c 9893 cbi PORTD, DIGIT_2_PIN
+00002d 9894 cbi PORTD, DIGIT_3_PIN
+00002e 9895 cbi PORTD, DIGIT_4_PIN
+00002f f00e brts PC+2
+000030 c002 rjmp PC+3
+000031 e00b ldi TEMP_REG_A, 11 ; // -
+000032 c002 rjmp PC+3
+000033 9100 0065 lds TEMP_REG_A, DIGITS+2
+000035 2300 tst TEMP_REG_A
+000036 f011 breq PC+3
+000037 9a92 sbi PORTD, DIGIT_1_PIN
+000038 c001 rjmp PC+2
+000039 9892 cbi PORTD, DIGIT_1_PIN
+00003a d2a3 rcall DISPLAY_DECODER
+00003b d19b rcall USI_TRANSMIT
_indicate_2:
-000042 3041 cpi r20, 1
-000043 f481 brne _indicate_3
+00003c 3041 cpi r20, 1
+00003d f481 brne _indicate_3
-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 d1fd rcall DISPLAY_DECODER
-000053 d17a rcall USI_TRANSMIT
+00003e 9892 cbi PORTD, DIGIT_1_PIN
+00003f 9894 cbi PORTD, DIGIT_3_PIN
+000040 9895 cbi PORTD, DIGIT_4_PIN
+000041 9100 0064 lds TEMP_REG_A, DIGITS+1
+000043 9130 0065 lds r19, DIGITS+2
+000045 2b03 or TEMP_REG_A, r19
+000046 f011 breq PC+3
+000047 9a93 sbi PORTD, DIGIT_2_PIN
+000048 c001 rjmp PC+2
+000049 9893 cbi PORTD, DIGIT_2_PIN
+00004a 9100 0064 lds TEMP_REG_A, DIGITS+1
+00004c d291 rcall DISPLAY_DECODER
+00004d d189 rcall USI_TRANSMIT
_indicate_3:
-000054 3042 cpi r20, 2
-000055 f459 brne _indicate_4
+00004e 3042 cpi r20, 2
+00004f f459 brne _indicate_4
-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 d1f3 rcall DISPLAY_DECODER
+000050 9892 cbi PORTD, DIGIT_1_PIN
+000051 9893 cbi PORTD, DIGIT_2_PIN
+000052 9895 cbi PORTD, DIGIT_4_PIN
+000053 9a94 sbi PORTD, DIGIT_3_PIN
+000054 9100 0063 lds TEMP_REG_A, DIGITS
+000056 d287 rcall DISPLAY_DECODER
; зажигаем точку
-00005d 2d00 mov r16, r0
-00005e 770f cbr r16, (1<<7)
-00005f 2e00 mov r0, r16
-000060 d16d rcall USI_TRANSMIT
+000057 2d00 mov r16, r0
+000058 770f cbr r16, (1<<7)
+000059 2e00 mov r0, r16
+00005a d17c rcall USI_TRANSMIT
_indicate_4:
-000061 3043 cpi r20, 3
-000062 f441 brne _indicate_exit
+00005b 3043 cpi r20, 3
+00005c f441 brne _indicate_exit
-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 006b lds TEMP_REG_A, TEMP_F
-000069 d1e6 rcall DISPLAY_DECODER
-00006a d163 rcall USI_TRANSMIT
+00005d 9892 cbi PORTD, DIGIT_1_PIN
+00005e 9893 cbi PORTD, DIGIT_2_PIN
+00005f 9894 cbi PORTD, DIGIT_3_PIN
+000060 9a95 sbi PORTD, DIGIT_4_PIN
+000061 9100 0066 lds TEMP_REG_A, DIGITS+3
+000063 d27a rcall DISPLAY_DECODER
+000064 d172 rcall USI_TRANSMIT
_indicate_exit:
-00006b 9543 inc r20
-00006c 9340 0067 sts CURRENT_DIGIT, r20
-00006e bf5f out SREG, r21
+000065 9543 inc r20
+000066 9340 0067 sts CURRENT_DIGIT, r20
-00006f 911f pop r17
-000070 910f pop r16
-000071 915f pop r21
-000072 914f pop r20
-000073 9518 reti
+000068 bf5f out SREG, r21
+
+000069 915f pop r21
+00006a 914f pop r20
+00006b 913f pop r19
+00006c 912f pop r18
+00006d 911f pop r17
+00006e 910f pop r16
+00006f 9518 reti
;//
; **** СТАРТ ПРОГРАММЫ *******************************************
RESET_vect:
-000074 ed0f ldi TEMP_REG_A, LOW(RAMEND)
-000075 bf0d out SPL, TEMP_REG_A
+000070 ed0f ldi TEMP_REG_A, LOW(RAMEND)
+000071 bf0d out SPL, TEMP_REG_A
//
; **** ПРОЦЕСС ИНИЦИАЛИЗАЦИИ МК **********************************
MCU_INIT:
; **** ИНИЦИАЛИЗАЦИЯ ПИНОВ *************************************
-000076 e70f
-000077 bb01 outi r16, DDRD, (1<
//
; **** ГЛАВНЫЙ ЦИКЛ **********************************************
LOOP:
- ; rcall DISPLAY_UPD_DIGITS
0000b6 9100 0060 lds r16, MCU_STATE ; получаем текущее состояние МК
-
+0000b8 d20b rcall DISPLAY_UPD_DIGITS
_STATE_DEFAULT:
-0000b8 3000 cpi r16, MCU_STATE_DEFAULT
-0000b9 f439 brne _STATE_PROGRAM
-0000ba 9896 cbi LED_ERR_PORT, LED_ERR_PIN
-0000bb d17a rcall DISPLAY_UPD_DIGITS
-0000bc d0a2 rcall TEMP_UPD ; обновление данных о температуре
-0000bd e001
-0000be bf09 outi r16, TIMSK, (1<
@@ -1208,29 +1209,29 @@ main.asm(297): Including file 'mpy16u.asm'
;***** Code
div16u:
-0000ca 24ee clr drem16uL ; clear remainder Low byte
-0000cb 18ff sub drem16uH,drem16uH ; clear remainder High byte and carry
-0000cc e141 ldi dcnt16u,17 ; init loop counter
+0000cd 24ee clr drem16uL ; clear remainder Low byte
+0000ce 18ff sub drem16uH,drem16uH ; clear remainder High byte and carry
+0000cf e141 ldi dcnt16u,17 ; init loop counter
d16u_1:
-0000cd 1f00 rol dd16uL ; shift left dividend
-0000ce 1f11 rol dd16uH
-0000cf 954a dec dcnt16u ; decrement counter
-0000d0 f409 brne d16u_2 ; if done
-0000d1 9508 ret ; return
+0000d0 1f00 rol dd16uL ; shift left dividend
+0000d1 1f11 rol dd16uH
+0000d2 954a dec dcnt16u ; decrement counter
+0000d3 f409 brne d16u_2 ; if done
+0000d4 9508 ret ; return
d16u_2:
-0000d2 1cee rol drem16uL ; shift dividend into remainder
-0000d3 1cff rol drem16uH
-0000d4 1ae2 sub drem16uL,dv16uL ; remainder = remainder - divisor
-0000d5 0af3 sbc drem16uH,dv16uH
-0000d6 f420 brcc d16u_3 ; if result negative
-0000d7 0ee2 add drem16uL,dv16uL ; restore remainder
-0000d8 1ef3 adc drem16uH,dv16uH
-0000d9 9488 clc ; clear carry to be shifted into result
-0000da cff2 rjmp d16u_1 ; else
+0000d5 1cee rol drem16uL ; shift dividend into remainder
+0000d6 1cff rol drem16uH
+0000d7 1ae2 sub drem16uL,dv16uL ; remainder = remainder - divisor
+0000d8 0af3 sbc drem16uH,dv16uH
+0000d9 f420 brcc d16u_3 ; if result negative
+0000da 0ee2 add drem16uL,dv16uL ; restore remainder
+0000db 1ef3 adc drem16uH,dv16uH
+0000dc 9488 clc ; clear carry to be shifted into result
+0000dd cff2 rjmp d16u_1 ; else
d16u_3:
-0000db 9408 sec ; set carry to be shifted into result
+0000de 9408 sec ; set carry to be shifted into result
.INCLUDE "div8u.asm"
-0000dc cff0
+0000df cff0
;*
;* "div8u" - 8/8 Bit Unsigned Division
;*
@@ -1255,21 +1256,21 @@ main.asm(297): Including file 'mpy16u.asm'
;***** Code
-0000dd 18ff div8u: sub drem8u,drem8u ;clear remainder and carry
-0000de e029 ldi dcnt8u,9 ;init loop counter
-0000df 1f00 d8u_1: rol dd8u ;shift left dividend
-0000e0 952a dec dcnt8u ;decrement counter
-0000e1 f409 brne d8u_2 ;if done
-0000e2 9508 ret ; return
-0000e3 1cff d8u_2: rol drem8u ;shift dividend into remainder
-0000e4 1af1 sub drem8u,dv8u ;remainder = remainder - divisor
-0000e5 f418 brcc d8u_3 ;if result negative
-0000e6 0ef1 add drem8u,dv8u ; restore remainder
-0000e7 9488 clc ; clear carry to be shifted into result
-0000e8 cff6 rjmp d8u_1 ;else
-0000e9 9408 d8u_3: sec ; set carry to be shifted into result
+0000e0 18ff div8u: sub drem8u,drem8u ;clear remainder and carry
+0000e1 e029 ldi dcnt8u,9 ;init loop counter
+0000e2 1f00 d8u_1: rol dd8u ;shift left dividend
+0000e3 952a dec dcnt8u ;decrement counter
+0000e4 f409 brne d8u_2 ;if done
+0000e5 9508 ret ; return
+0000e6 1cff d8u_2: rol drem8u ;shift dividend into remainder
+0000e7 1af1 sub drem8u,dv8u ;remainder = remainder - divisor
+0000e8 f418 brcc d8u_3 ;if result negative
+0000e9 0ef1 add drem8u,dv8u ; restore remainder
+0000ea 9488 clc ; clear carry to be shifted into result
+0000eb cff6 rjmp d8u_1 ;else
+0000ec 9408 d8u_3: sec ; set carry to be shifted into result
.INCLUDE "mpy16u.asm"
-0000ea cff4
+0000ed cff4
;*
;* "mpy16u" - 16x16 Bit Unsigned Multiplication
;*
@@ -1299,75 +1300,77 @@ main.asm(297): Including file 'mpy16u.asm'
;***** Code
-0000eb 2755 mpy16u: clr m16u3 ;clear 2 highest bytes of result
-0000ec 2744 clr m16u2
-0000ed e160 ldi mcnt16u,16 ;init loop counter
-0000ee 9536 lsr mp16uH
-0000ef 9527 ror mp16uL
+0000ee 2755 mpy16u: clr m16u3 ;clear 2 highest bytes of result
+0000ef 2744 clr m16u2
+0000f0 e160 ldi mcnt16u,16 ;init loop counter
+0000f1 9536 lsr mp16uH
+0000f2 9527 ror mp16uL
-0000f0 f410 m16u_1: brcc noad8 ;if bit 0 of multiplier set
-0000f1 0f40 add m16u2,mc16uL ;add multiplicand Low to byte 2 of res
-0000f2 1f51 adc m16u3,mc16uH ;add multiplicand high to byte 3 of res
-0000f3 9557 noad8: ror m16u3 ;shift right result byte 3
-0000f4 9547 ror m16u2 ;rotate right result byte 2
-0000f5 9537 ror m16u1 ;rotate result byte 1 and multiplier High
-0000f6 9527 ror m16u0 ;rotate result byte 0 and multiplier Low
-0000f7 956a dec mcnt16u ;decrement loop counter
-0000f8 f7b9 brne m16u_1 ;if not done, loop more
-0000f9 9508
+0000f3 f410 m16u_1: brcc noad8 ;if bit 0 of multiplier set
+0000f4 0f40 add m16u2,mc16uL ;add multiplicand Low to byte 2 of res
+0000f5 1f51 adc m16u3,mc16uH ;add multiplicand high to byte 3 of res
+0000f6 9557 noad8: ror m16u3 ;shift right result byte 3
+0000f7 9547 ror m16u2 ;rotate right result byte 2
+0000f8 9537 ror m16u1 ;rotate result byte 1 and multiplier High
+0000f9 9527 ror m16u0 ;rotate result byte 0 and multiplier Low
+0000fa 956a dec mcnt16u ;decrement loop counter
+0000fb f7b9 brne m16u_1 ;if not done, loop more
+0000fc 9508
//
TEMP_SEND_UART:
-0000fa 930f push r16
+0000fd 930f push r16
+0000fe 931f push r17
+
; целая часть
-0000fb 9100 0069 lds r16, TEMP_L
-0000fd 2e50 mov r5, r16
-0000fe d00d rcall UART_WR_BYTE
+0000ff 9100 0068 lds r16, TEMP_L
+000101 2e50 mov r5, r16
+000102 d014 rcall UART_WR_BYTE
; дробная часть
-0000ff 9100 006b lds r16, TEMP_F
-000101 2e50 mov r5, r16
-000102 d009 rcall UART_WR_BYTE
+000103 9100 006a lds r16, TEMP_F
+000105 2e50 mov r5, r16
+000106 d010 rcall UART_WR_BYTE
; состояние реле
-000103 b300 in r16, PIND
-000104 7001 andi r16, (1<
//
UART_WR_BYTE:
-00010c 9b5d sbis UCSRA, UDRE
-00010d cffe rjmp UART_WR_BYTE
-00010e b85c out UDR, r5
-00010f 9508 ret//
+000117 9b5d sbis UCSRA, UDRE
+000118 cffe rjmp UART_WR_BYTE
+000119 b85c out UDR, r5
+00011a 9508 ret//
//
TEMP_COMPARSION:
-000110 930f push r16
-000111 931f push r17
-000112 932f push r18
-000113 933f push r19
-000114 934f push r20
-000115 935f push r21
- ;
- ; lds dd8u, SETTING_HYST
- ; ldi dv8u, 10
- ; rcall div8u
- ;
- ; ; определение нижнего и верхнего порого срабатывания
- ; lds r19, SETTING_INT
- ; mov r20, r19
- ; sub r19, dres8u ; MIN = SET - HYST_INT
- ; add r20, dres8u ; MAX = SET + HYST_INT
- ;
+00011b 930f push r16
+00011c 931f push r17
+00011d 932f push r18
+00011e 933f push r19
+00011f 934f push r20
+000120 935f push r21
+000121 937f push r23
+
.DEF temp_r_l = r16
.DEF temp_r_h = r17
@@ -1377,250 +1380,246 @@ main.asm(297): Including file 'mpy16u.asm'
.DEF max_r_trhd_l = r13
.DEF max_r_trhd_h = r12
; умножаем температуру на 10
-000116 9100 0069 lds mc16uL, TEMP_L // r16
-000118 9110 006a lds mc16uH, TEMP_H // r17
-00011a e02a ldi mp16uL, LOW(10)
-00011b e030 ldi mp16uH, HIGH(10)
-00011c dfce rcall mpy16u
-00011d 2f02 mov temp_r_l, m16u0 ; L
-00011e 2f13 mov temp_r_h, m16u1 ; H
+000122 9100 0068 lds mc16uL, TEMP_L // r16
+000124 9110 0069 lds mc16uH, TEMP_H // r17
+000126 e02a ldi mp16uL, LOW(10)
+000127 e030 ldi mp16uH, HIGH(10)
+000128 dfc5 rcall mpy16u
+000129 2f02 mov temp_r_l, m16u0 ; L
+00012a 2f13 mov temp_r_h, m16u1 ; H
; добавляем дробную часть
-00011f 9120 006b lds r18, TEMP_F
-000121 2733 clr r19
-000122 0f02 add temp_r_l, r18
-000123 1f13 adc temp_r_h, r19
-000124 9310 0071 sts SRAM_TEMP_2, temp_r_h
-000126 9300 0072 sts SRAM_TEMP_3, temp_r_l
+00012b 9120 006a lds r18, TEMP_F
+00012d 2733 clr r19
+00012e 0f02 add temp_r_l, r18
+00012f 1f13 adc temp_r_h, r19
; определяем нижний и верхний пороги
-000128 9140 006d lds r20, SETTING_TEMP_L
-00012a 9150 006c lds r21, SETTING_TEMP_H
-00012c 9160 006e lds r22, SETTING_HYST
-00012e 934f push r20
-00012f 935f push r21
-000130 2777 clr r23
-000131 1b46 sub r20, r22
-000132 0b57 sbc r21, r23
-000133 2eb4 mov min_r_trhd_l, r20
-000134 2ea5 mov min_r_trhd_h, r21
-000135 915f pop r21
-000136 914f pop r20
-000137 2777 clr r23
-000138 0f46 add r20, r22
-000139 1f57 adc r21, r23
-00013a 2ed4 mov max_r_trhd_l, r20
-00013b 2ec5 mov max_r_trhd_h, r21
+000130 9140 006c lds r20, SETTING_TEMP_L
+000132 9150 006b lds r21, SETTING_TEMP_H
+000134 9160 006d lds r22, SETTING_HYST
+000136 934f push r20
+000137 935f push r21
+000138 2777 clr r23
+000139 1b46 sub r20, r22
+00013a 0b57 sbc r21, r23
+00013b 2eb4 mov min_r_trhd_l, r20
+00013c 2ea5 mov min_r_trhd_h, r21
+00013d 915f pop r21
+00013e 914f pop r20
+00013f 2777 clr r23
+000140 0f46 add r20, r22
+000141 1f57 adc r21, r23
+000142 2ed4 mov max_r_trhd_l, r20
+000143 2ec5 mov max_r_trhd_h, r21
; определяем знак температуры
-00013c f00e brts _NEGATE_TEMP
-00013d c004 rjmp _COMPARE
+000144 f00e brts _NEGATE_TEMP
+000145 c004 rjmp _COMPARE
_NEGATE_TEMP:
-00013e 9500 com temp_r_l
-00013f 9510 com temp_r_h
-000140 5f0f subi temp_r_l, low(-1)
-000141 4f1f sbci temp_r_h, high(-1)
+000146 9500 com temp_r_l
+000147 9510 com temp_r_h
+000148 5f0f subi temp_r_l, low(-1)
+000149 4f1f sbci temp_r_h, high(-1)
_COMPARE:
; проверяем нижний порог
-000142 16b0 cp min_r_trhd_l, temp_r_l
-000143 06a1 cpc min_r_trhd_h, temp_r_h
-000144 f424 brge _MIN_THRESHOLD ; TEMP <= MIN
+00014a 16b0 cp min_r_trhd_l, temp_r_l
+00014b 06a1 cpc min_r_trhd_h, temp_r_h
+00014c f424 brge _MIN_THRESHOLD ; TEMP <= MIN
; проверяем верхний порог
-000145 150d cp temp_r_l, max_r_trhd_l
-000146 051c cpc temp_r_h, max_r_trhd_h
-000147 f44c brge _MAX_THRESHOLD ; TEMP >= TOP
-000148 c00f rjmp _COMPARSION_EXIT
+00014d 150d cp temp_r_l, max_r_trhd_l
+00014e 051c cpc temp_r_h, max_r_trhd_h
+00014f f44c brge _MAX_THRESHOLD ; TEMP >= TOP
+000150 c00f rjmp _COMPARSION_EXIT
_MIN_THRESHOLD:
; определяем режим работы
-000149 9140 006f lds r20, SETTING_MODE
-00014b 2344 tst r20
-00014c f411 brne PC+3
-00014d 9890 relay_off
-00014e c001 rjmp PC+2
-00014f 9a90 relay_on
-000150 c007 rjmp _COMPARSION_EXIT
- _MAX_THRESHOLD:
-000151 9140 006f lds r20, SETTING_MODE
+000151 9140 006e lds r20, SETTING_MODE
000153 2344 tst r20
000154 f411 brne PC+3
-000155 9a90 relay_on
+000155 9890 relay_off
000156 c001 rjmp PC+2
-000157 9890 relay_off
+000157 9a90 relay_on
+000158 c007 rjmp _COMPARSION_EXIT
+ _MAX_THRESHOLD:
+000159 9140 006e lds r20, SETTING_MODE
+00015b 2344 tst r20
+00015c f411 brne PC+3
+00015d 9a90 relay_on
+00015e c001 rjmp PC+2
+00015f 9890 relay_off
_COMPARSION_EXIT:
-000158 915f pop r21
-000159 914f pop r20
-00015a 913f pop r19
-00015b 912f pop r18
-00015c 911f pop r17
-00015d 910f pop r16
-00015e 9508 ret//
+000160 917f pop r23
+000161 915f pop r21
+000162 914f pop r20
+000163 913f pop r19
+000164 912f pop r18
+000165 911f pop r17
+000166 910f pop r16
+000167 9508 ret//
//
TEMP_UPD:
-00015f 931f push r17
-000160 d061 rcall TEMP_CONV
-000161 e153
-000162 e837
-000163 ef4d
-000164 d115 DELAY24 800000
-000165 d012 rcall TEMP_RD
+000168 931f push r17
+000169 d061 rcall TEMP_CONV
+00016a e152
+00016b e535
+00016c eb4d
+00016d d19d DELAY24 751000
+00016e d012 rcall TEMP_RD
; обновляем данные в ячейках
-000166 9110 0069 lds r17, TEMP_L
-000168 2f81 mov DISP_NUM_L, r17
-000169 9110 006a lds r17, TEMP_H
-00016b 2f91 mov DISP_NUM_H, r17
-00016c 911f pop r17
-00016d 9508 ret
+00016f 9110 0068 lds r17, TEMP_L
+000171 2f81 mov DISP_NUM_L, r17
+000172 9110 0069 lds r17, TEMP_H
+000174 2f91 mov DISP_NUM_H, r17
+000175 911f pop r17
+000176 9508 ret
//
//
RD_F_CODE:
-00016e 930f push r16
+000177 930f push r16
-00016f d078 rcall OW_PRESENCE
-000170 e303 ldi r16, DS18B20_CMD_READROM
-000171 2e80 mov OW_CMD_r, r16
-000172 d08a rcall OW_SEND_BYTE
+000178 d0fd rcall OW_PRESENCE
+000179 e303 ldi r16, DS18B20_CMD_READROM
+00017a 2e80 mov OW_CMD_r, r16
+00017b d10f rcall OW_SEND_BYTE
-000173 e7a0 ldi XL, LOW(DEVICE_FAMILY_CODE)
-000174 e0b0 ldi XH, HIGH(DEVICE_FAMILY_CODE)
-000175 d0a6 rcall OW_RD_BYTE
+00017c e6af ldi XL, LOW(DEVICE_FAMILY_CODE)
+00017d e0b0 ldi XH, HIGH(DEVICE_FAMILY_CODE)
+00017e d12b rcall OW_RD_BYTE
-000176 910f pop r16
-000177 9508 ret//
+00017f 910f pop r16
+000180 9508 ret//
//
TEMP_RD:
-000178 930f push r16
-000179 931f push r17
-00017a 932f push r18
-00017b 933f push r19
-00017c 934f push r20
- ; cli
+000181 930f push r16
+000182 931f push r17
+000183 932f push r18
+000184 933f push r19
+000185 934f push r20
-00017d d06a rcall OW_PRESENCE
-00017e ff70 sbrs OWFR, OWPRF
-00017f c03c rjmp _TEMP_RD_EXIT
+000186 d0ef rcall OW_PRESENCE
+000187 ff70 sbrs OWFR, OWPRF
+000188 c03c rjmp _TEMP_RD_EXIT
-000180 ec0c ldi r16, DS18B20_CMD_SKIPROM
-000181 2e80 mov OW_CMD_r, r16
-000182 d07a rcall OW_SEND_BYTE
+000189 ec0c ldi r16, DS18B20_CMD_SKIPROM
+00018a 2e80 mov OW_CMD_r, r16
+00018b d0ff rcall OW_SEND_BYTE
-000183 eb0e ldi r16, DS18B20_CMD_RSCRATCHPAD
-000184 2e80 mov OW_CMD_r, r16
-000185 d077 rcall OW_SEND_BYTE
+00018c eb0e ldi r16, DS18B20_CMD_RSCRATCHPAD
+00018d 2e80 mov OW_CMD_r, r16
+00018e d0fc rcall OW_SEND_BYTE
-000186 e6a9 ldi XL, LOW(TEMP_L)
-000187 e0b0 ldi XH, HIGH(TEMP_L)
-000188 d093 rcall OW_RD_BYTE
+00018f e6a8 ldi XL, LOW(TEMP_L)
+000190 e0b0 ldi XH, HIGH(TEMP_L)
+000191 d118 rcall OW_RD_BYTE
-000189 e6aa ldi XL, LOW(TEMP_H)
-00018a e0b0 ldi XH, HIGH(TEMP_H)
-00018b d090 rcall OW_RD_BYTE
+000192 e6a9 ldi XL, LOW(TEMP_H)
+000193 e0b0 ldi XH, HIGH(TEMP_H)
+000194 d115 rcall OW_RD_BYTE
-00018c 9110 0069 lds r17, TEMP_L
-00018e 9120 006a lds r18, TEMP_H
+000195 9110 0068 lds r17, TEMP_L
+000197 9120 0069 lds r18, TEMP_H
-000190 932f push r18
-000191 7f28 cbr r18, (1<<0) | (1<<1) | (1<<2) ; убираем ненужные биты на время (интересуют последних битов в TEMP_H)
-000192 3f28 cpi r18, 0xf8 ; проверяется является ли число минусовой
-000193 f011 breq _TEMP_RD_TO_UNSIGNED ; если да то конвертируем в беззнаковое число
-000194 94e8 clt
-000195 c007 rjmp _TEMP_RD_CONTINUE ; если нет то преобразуем значение АЦП в температуру (делим на 16)
+000199 932f push r18
+00019a 7f28 cbr r18, (1<<0) | (1<<1) | (1<<2) ; убираем ненужные биты на время (интересуют последних битов в TEMP_H)
+00019b 3f28 cpi r18, 0xf8 ; проверяется является ли число минусовой
+00019c f011 breq _TEMP_RD_TO_UNSIGNED ; если да то конвертируем в беззнаковое число
+00019d 94e8 clt
+00019e c007 rjmp _TEMP_RD_CONTINUE ; если нет то преобразуем значение АЦП в температуру (делим на 16)
_TEMP_RD_TO_UNSIGNED:
-000196 912f pop r18
-000197 9468 set
-000198 9510 com r17
-000199 9520 com r18
-00019a 5f1f subi r17, low(-1)
-00019b 4f2f sbci r18, high(-1)
+00019f 912f pop r18
+0001a0 9468 set
+0001a1 9510 com r17
+0001a2 9520 com r18
+0001a3 5f1f subi r17, low(-1)
+0001a4 4f2f sbci r18, high(-1)
; ldi r19, 1
; add r17, r19
; ldi r19, 0
; adc r18, r19
-00019c c001 rjmp PC+2
+0001a5 c001 rjmp PC+2
_TEMP_RD_CONTINUE: ; Температура = Число с АЦП / 16 (сдвиг вправо 4)
-00019d 912f pop r18
-00019e 9526 lsr r18
-00019f 9517 ror r17
-0001a0 9526 lsr r18
-0001a1 9517 ror r17
-0001a2 9526 lsr r18
-0001a3 9517 ror r17
-0001a4 9526 lsr r18
-0001a5 9517 ror r17
+0001a6 912f pop r18
+0001a7 9526 lsr r18
+0001a8 9517 ror r17
+0001a9 9526 lsr r18
+0001aa 9517 ror r17
+0001ab 9526 lsr r18
+0001ac 9517 ror r17
+0001ad 9526 lsr r18
+0001ae 9517 ror r17
_TEMP_RD_END:
-0001a6 9130 0069 lds r19, TEMP_L
-0001a8 f40e brtc PC+2
-0001a9 9531 neg r19 ; переводим в беззнаковое число если минус
+0001af 9130 0068 lds r19, TEMP_L
+0001b1 f40e brtc PC+2
+0001b2 9531 neg r19 ; переводим в беззнаковое число если минус
; далее происходит такое для получения дробной части:
; ((n<<3) + (n<<1))>>4 или (n*10)/16
-0001aa 2f43 mov r20, r19
-0001ab 703f andi r19, 0x0f
-0001ac 2f43 mov r20, r19
-0001ad 0f33 lsl r19
-0001ae 0f33 lsl r19
-0001af 0f33 lsl r19
+0001b3 2f43 mov r20, r19
+0001b4 703f andi r19, 0x0f
+0001b5 2f43 mov r20, r19
+0001b6 0f33 lsl r19
+0001b7 0f33 lsl r19
+0001b8 0f33 lsl r19
-0001b0 0f44 lsl r20
+0001b9 0f44 lsl r20
-0001b1 0f34 add r19, r20
+0001ba 0f34 add r19, r20
-0001b2 9536 lsr r19
-0001b3 9536 lsr r19
-0001b4 9536 lsr r19
-0001b5 9536 lsr r19
+0001bb 9536 lsr r19
+0001bc 9536 lsr r19
+0001bd 9536 lsr r19
+0001be 9536 lsr r19
; записываем данные
-0001b6 9310 0069 sts TEMP_L, r17
-0001b8 9320 006a sts TEMP_H, r18
-0001ba 9330 006b sts TEMP_F, r19
+0001bf 9310 0068 sts TEMP_L, r17
+0001c1 9320 0069 sts TEMP_H, r18
+0001c3 9330 006a sts TEMP_F, r19
- ; sei
_TEMP_RD_EXIT:
-0001bc 914f pop r20
-0001bd 913f pop r19
-0001be 912f pop r18
-0001bf 911f pop r17
-0001c0 910f pop r16
-0001c1 9508 ret
+0001c5 914f pop r20
+0001c6 913f pop r19
+0001c7 912f pop r18
+0001c8 911f pop r17
+0001c9 910f pop r16
+0001ca 9508 ret
;
TEMP_CONV:
-0001c2 930f push r16
- ; cli
+0001cb 930f push r16
-0001c3 d024 rcall OW_PRESENCE
-0001c4 ff70 sbrs OWFR, OWPRF
-0001c5 c006 rjmp _TEMP_CONV_EXIT
+0001cc d0a9 rcall OW_PRESENCE
+0001cd ff70 sbrs OWFR, OWPRF
+0001ce c006 rjmp _TEMP_CONV_EXIT
-0001c6 ec0c ldi r16, DS18B20_CMD_SKIPROM
-0001c7 2e80 mov OW_CMD_r, r16
-0001c8 d034 rcall OW_SEND_BYTE
+0001cf ec0c ldi r16, DS18B20_CMD_SKIPROM
+0001d0 2e80 mov OW_CMD_r, r16
+0001d1 d0b9 rcall OW_SEND_BYTE
-0001c9 e404 ldi r16, DS18B20_CMD_CONVERTTEMP
-0001ca 2e80 mov OW_CMD_r, r16
-0001cb d031 rcall OW_SEND_BYTE
+0001d2 e404 ldi r16, DS18B20_CMD_CONVERTTEMP
+0001d3 2e80 mov OW_CMD_r, r16
+0001d4 d0b6 rcall OW_SEND_BYTE
- ; sei
_TEMP_CONV_EXIT:
-0001cc 910f pop r16
-0001cd 9508 ret
+0001d5 910f pop r16
+0001d6 9508 ret
//
//
; **** ОТПРАВКА БАЙТА В СДВИГОВЫЙ РЕГИСТР *************************
USI_TRANSMIT:
-0001ce 930f push r16
-0001cf b80f out USIDR, r0 ; Байт для отправки всегда находится в регистре r0. Помещаем данные в регистр USIDR.
+0001d7 930f push r16
+0001d8 920f push r0
+0001d9 b80f out USIDR, r0 ; Байт для отправки всегда находится в регистре r0. Помещаем данные в регистр USIDR.
; Enable USI Overflow Interrupt Flag (will be 0 if transfer is not compeleted)
-0001d0 e400 ldi TEMP_REG_A, (1< USI Clock Source Select
; USICLK <--------------> USI Clock Strobe
; USITC <--------------> USI Toggle Clock (Enable clock generation)
-0001d2 e10b ldi TEMP_REG_A, (1<
-
- //
- SW_CHECK_PROCESS:
-0001da 930f push r16
-0001db d08a rcall DEBOUNCE_SW
-0001dc 9bb2 sbis SW_PIN, SW_PLUS_PIN
-0001dd 9601 adiw DISP_NUM_L, 1
-
-0001de 9bb3 sbis SW_PIN, SW_MINUS_PIN
-0001df 9701 sbiw DISP_NUM_L, 1
-
-0001e0 9bb4 sbis SW_PIN, SW_SET_PIN
-0001e1 c001 rjmp _INTO_DEFAULT_STATE
-0001e2 c003 rjmp _SW_CHECK_PROCESS_END
-
- _INTO_DEFAULT_STATE:
-0001e3 e000 ldi r16, MCU_STATE_DEFAULT
-0001e4 9300 0060 sts MCU_STATE, r16
- _SW_CHECK_PROCESS_END:
-0001e6 910f pop r16
-0001e7 9508 ret
+0001e0 9ac0 sbi PORTB, USI_LATCH_PIN
+0001e1 98c0 cbi PORTB, USI_LATCH_PIN
+0001e2 900f pop r0
+0001e3 910f pop r16
+0001e4 9508 ret
//
+ BUTTON_PROCESS:
+0001e5 930f push r16
+ _SW_CHECK_ON_0:
+0001e6 9bb4 sbis SW_PIN, SW_SET_PIN
+0001e7 c001 rjmp _SW_SET_0
+0001e8 c014 rjmp _SW_CHECK_ON_1
+ _SW_SET_0:
+0001e9 9100 0071 lds r16, SW_DATA
+0001eb 2300 tst r16
+0001ec f409 brne _SW_SET_FROM_0_TO_1
+0001ed c00f rjmp _SW_CHECK_ON_1
+ _SW_SET_FROM_0_TO_1:
+0001ee 2700 clr r16
+0001ef 9300 0071 sts SW_DATA, r16
+0001f1 d105 rcall DEBOUNCE_SW
+0001f2 9463 inc REPROGRAM_STEP_r
+0001f3 2d16 mov r17, REPROGRAM_STEP_r
+0001f4 3014 cpi r17, 4
+0001f5 f414 brge _SAVE_SETTINGS
+0001f6 d0f2 rcall BEEP_SHORT
+0001f7 c005 rjmp _SW_CHECK_ON_1
+ _SAVE_SETTINGS:
+0001f8 2466 clr REPROGRAM_STEP_r
+0001f9 d0f6 rcall BEEP_LONG
+0001fa e010 ldi r17, MCU_STATE_DEFAULT
+0001fb 9310 0060 sts MCU_STATE, r17
+ _SW_CHECK_ON_1:
+0001fd 99b4 sbic SW_PIN, SW_SET_PIN
+0001fe c001 rjmp _SW_SET_1
+0001ff c009 rjmp _BUTTON_PROCESS_END
+ _SW_SET_1:
+000200 9100 0071 lds r16, SW_DATA
+000202 2300 tst r16
+000203 f009 breq _SW_SET_FROM_1_TO_0
+000204 c004 rjmp _BUTTON_PROCESS_END
+ _SW_SET_FROM_1_TO_0:
+000205 ef0f ser r16
+000206 9300 0071 sts SW_DATA, r16
+000208 d0ee rcall DEBOUNCE_SW
+ _BUTTON_PROCESS_END:
+000209 910f pop r16
+00020a 9508 ret
+
+
+ //
+ REPROGRAM_SETTINGS:
+00020b 930f push r16
+00020c 931f push r17
+00020d 932f push r18
+00020e 933f push r19
+00020f 934f push r20
+
+000210 2d06 mov r16, REPROGRAM_STEP_r
+000211 2300 tst r16
+000212 f009 breq _INTO
+000213 c002 rjmp _REPROGRAM_SETTINGS_LOOP
+ _INTO:
+000214 9463 inc REPROGRAM_STEP_r
+000215 d0d3 rcall BEEP_SHORT
+ _REPROGRAM_SETTINGS_LOOP:
+000216 dfce rcall BUTTON_PROCESS
+ _CHECK_STEP:
+000217 3001 cpi r16, 1
+000218 f019 breq _STEP_1
+000219 3002 cpi r16, 2
+00021a f111 breq _STEP_2
+00021b c054 rjmp _REPROGRAM_SETTINGS_END
+
+ _STEP_1: ; установка и отображение гистерезиса
+00021c 0000 nop
+ _S1_CHECK_PLUS:
+00021d 9bb2 sbis SW_PIN, SW_PLUS_PIN
+00021e c004 rjmp _INCREASE_HYST
+00021f c000 rjmp _S1_CHECK_MINUS
+ _S1_CHECK_MINUS:
+000220 9bb3 sbis SW_PIN, SW_MINUS_PIN
+000221 c008 rjmp _DECREASE_HYST
+000222 c00d rjmp _SHOW_HYST
+ _INCREASE_HYST:
+000223 d0d3 rcall DEBOUNCE_SW
+000224 9110 006d lds r17, SETTING_HYST
+000226 9513 inc r17
+000227 9310 006d sts SETTING_HYST, r17
+000229 c006 rjmp _SHOW_HYST
+ _DECREASE_HYST:
+00022a d0cc rcall DEBOUNCE_SW
+00022b 9110 006d lds r17, SETTING_HYST
+00022d 951a dec r17
+00022e 9310 006d sts SETTING_HYST, r17
+ _SHOW_HYST:
+000230 930f push dd8u
+000231 931f push dv8u
+000232 9100 006d lds dd8u, SETTING_HYST
+000234 e01a ldi dv8u, 10
+000235 deaa rcall div8u
+000236 2f80 mov DISP_NUM_L, dres8u
+000237 2799 clr DISP_NUM_H ; гистерезис 8 битный так что ноль пишем в старший байт
+000238 92f0 0066 sts DIGITS+3, drem8u
+00023a 911f pop dv8u
+00023b 910f pop dd8u
+00023c c033 rjmp _REPROGRAM_SETTINGS_END
+
+ _STEP_2:
+00023d 0000 nop
+ _S2_CHECK_PLUS:
+00023e 9bb2 sbis SW_PIN, SW_PLUS_PIN
+00023f c004 rjmp _INCREASE_TEMP
+000240 c000 rjmp _S2_CHECK_MINUS
+ _S2_CHECK_MINUS:
+000241 9bb3 sbis SW_PIN, SW_MINUS_PIN
+000242 c00f rjmp _DECREASE_TEMP
+000243 c019 rjmp _SHOW_TEMP
+ _INCREASE_TEMP:
+000244 d0b2 rcall DEBOUNCE_SW
+000245 9110 006c lds r17, SETTING_TEMP_L
+000247 9120 006b lds r18, SETTING_TEMP_H
+000249 e031 ldi r19, 1
+00024a 0f13 add r17, r19
+00024b 2733 clr r19
+00024c 1f23 adc r18, r19
+00024d 9310 006c sts SETTING_TEMP_L, r17
+00024f 9320 006b sts SETTING_TEMP_H, r18
+000251 c00b rjmp _SHOW_TEMP
+ _DECREASE_TEMP:
+000252 d0a4 rcall DEBOUNCE_SW
+000253 9110 006c lds r17, SETTING_TEMP_L
+000255 9120 006b lds r18, SETTING_TEMP_H
+000257 5011 subi r17, 1
+000258 4020 sbci r18, 0
+000259 9310 006c sts SETTING_TEMP_L, r17
+00025b 9320 006b sts SETTING_TEMP_H, r18
+ _SHOW_TEMP:
+00025d 930f push dd16uL
+00025e 931f push dd16uH
+00025f 932f push dv16uL
+000260 933f push dv16uH
+
+000261 9100 006c lds dd16uL, SETTING_TEMP_L
+000263 9110 006b lds dd16uH, SETTING_TEMP_H
+000265 e02a ldi dv16uL, LOW(10)
+000266 e030 ldi dv16uH, HIGH(10)
+000267 de65 rcall div16u
+000268 2f80 mov DISP_NUM_L, dres16uL
+000269 2f91 mov DISP_NUM_H, dres16uH
+00026a 92e0 0066 sts DIGITS+3, drem16uL
+
+00026c 913f pop dv16uH
+00026d 912f pop dv16uL
+00026e 911f pop dd16uH
+00026f 910f pop dd16uL
+ _REPROGRAM_SETTINGS_END:
+000270 914f pop r20
+000271 913f pop r19
+000272 912f pop r18
+000273 911f pop r17
+000274 910f pop r16
+000275 9508 ret
+ //
+
+ ;DBG_LED_TOGGLE:
+ ; push r18
+ ; push r19
+ ; in r18, PIND
+ ; ldi r19, (1<
- //
+ //
; **** ОПРОС ПРИСУТСТВИЯ УСТРОЙСТВА ******************************
OW_PRESENCE:
-0001e8 94f8 cli
-0001e9 9ab9 ow_pull
-0001ea e033
-0001eb eb4e
-0001ec d089 DELAY16 480
-0001ed 98b9 ow_release
-0001ee e030
-0001ef e84a
-0001f0 d085 DELAY16 70
-0001f1 d005 rcall OW_CHECK_PRESENCE
-0001f2 e033
-0001f3 e342
-0001f4 d081 DELAY16 410
-0001f5 9478 sei
-0001f6 9508 ret
+000276 94f8 cli
+000277 9ab9 ow_pull
+000278 e033
+000279 eb4e
+00027a d08c DELAY16 480
+00027b 98b9 ow_release
+00027c e030
+00027d e84a
+00027e d088 DELAY16 70
+00027f d005 rcall OW_CHECK_PRESENCE
+000280 e033
+000281 e342
+000282 d084 DELAY16 410
+000283 9478 sei
+000284 9508 ret
//
//
@@ -1692,83 +1841,83 @@ main.asm(297): Including file 'mpy16u.asm'
; Если подчиненное устройство притянет шину, то устанавливаем флаг OWPRF в единицу в регистре флагов
;
OW_CHECK_PRESENCE:
-0001f7 9bb1 sbis OW_PIN, OW_LINE
-0001f8 6071 sbr OWFR, (1<
//
OW_SEND_BYTE:
-0001fd 930f push r16
-0001fe 931f push r17
-0001ff 94f8 cli
-000200 2d08 mov r16, OW_CMD_r
-000201 e018 ldi r17, 8
+00028b 94f8 cli
+00028c 930f push r16
+00028d 931f push r17
+00028e 2d08 mov r16, OW_CMD_r
+00028f e018 ldi r17, 8
_OW_SEND_BYTE_LOOP:
-000202 9506 lsr r16
-000203 f408 brcc _OW_SEND_0
-000204 f048 brcs _OW_SEND_1
+000290 9506 lsr r16
+000291 f408 brcc _OW_SEND_0
+000292 f048 brcs _OW_SEND_1
_OW_SEND_0:
-000205 9ab9 ow_pull
-000206 e030
-000207 e746
-000208 d06d DELAY16 60
-000209 98b9 ow_release
-00020a e030
-00020b e142
-00020c d069 DELAY16 10
-00020d c008 rjmp _OW_SEND_BYTE_END
+000293 9ab9 ow_pull
+000294 e030
+000295 e746
+000296 d070 DELAY16 60
+000297 98b9 ow_release
+000298 e030
+000299 e142
+00029a d06c DELAY16 10
+00029b c008 rjmp _OW_SEND_BYTE_END
_OW_SEND_1:
-00020e 9ab9 ow_pull
-00020f e030
-000210 e04a
-000211 d064 DELAY16 6
-000212 98b9 ow_release
-000213 e030
-000214 e74e
-000215 d060 DELAY16 64
+00029c 9ab9 ow_pull
+00029d e030
+00029e e04a
+00029f d067 DELAY16 6
+0002a0 98b9 ow_release
+0002a1 e030
+0002a2 e74e
+0002a3 d063 DELAY16 64
_OW_SEND_BYTE_END:
-000216 951a dec r17
-000217 f751 brne _OW_SEND_BYTE_LOOP
-000218 9478 sei
-000219 911f pop r17
-00021a 910f pop r16
-00021b 9508 ret
+0002a4 951a dec r17
+0002a5 f751 brne _OW_SEND_BYTE_LOOP
+0002a6 911f pop r17
+0002a7 910f pop r16
+0002a8 9478 sei
+0002a9 9508 ret
//
//
OW_RD_BYTE:
-00021c 930f push r16
-00021d 931f push r17
-00021e 94f8 cli
-00021f 2700 clr r16
-000220 e018 ldi r17, 8
+0002aa 94f8 cli
+0002ab 930f push r16
+0002ac 931f push r17
+0002ad 2700 clr r16
+0002ae e018 ldi r17, 8
_OW_RD_BYTE_LP:
-000221 9506 lsr r16
-000222 9ab9 ow_pull
-000223 e030
-000224 e04a
-000225 d050 DELAY16 6
-000226 98b9 ow_release
-000227 e030
-000228 e140
-000229 d04c DELAY16 9
-00022a 99b1 sbic OW_PIN, OW_LINE
-00022b 6800 sbr r16, (1<<7)
-00022c e030
-00022d e64c
-00022e d047 DELAY16 55
-00022f 951a dec r17
-000230 f781 brne _OW_RD_BYTE_LP
-000231 930c st X, r16
-000232 9478 sei
-000233 911f pop r17
-000234 910f pop r16
-000235 9508 ret
+0002af 9506 lsr r16
+0002b0 9ab9 ow_pull
+0002b1 e030
+0002b2 e04a
+0002b3 d053 DELAY16 6
+0002b4 98b9 ow_release
+0002b5 e030
+0002b6 e140
+0002b7 d04f DELAY16 9
+0002b8 99b1 sbic OW_PIN, OW_LINE
+0002b9 6800 sbr r16, (1<<7)
+0002ba e030
+0002bb e64c
+0002bc d04a DELAY16 55
+0002bd 951a dec r17
+0002be f781 brne _OW_RD_BYTE_LP
+0002bf 930c st X, r16
+0002c0 911f pop r17
+0002c1 910f pop r16
+0002c2 9478 sei
+0002c3 9508 ret
//
//
@@ -1777,156 +1926,164 @@ main.asm(297): Including file 'mpy16u.asm'
; Описание: Перемещает цифры числа в соответствующие ячейки памяти в SRAM
; путем деления этого числа несколько раз
DISPLAY_UPD_DIGITS:
-000236 94f8 cli
-000237 935f push r21
-000238 e054 ldi r21, 4 ; (4 раза делим) т.к индикатор четырех разрядный
-
+0002c4 930f push r16
+0002c5 935f push r21
+0002c6 e053 ldi r21, 3
+
; инициализация указателя (за каждый проход цикла будет инкрементироваться)
-000239 e6a3 ldi XL, LOW(DIGITS)
-00023a e0b0 ldi XH, HIGH(DIGITS)
+0002c7 e6a3 ldi XL, LOW(DIGITS)
+0002c8 e0b0 ldi XH, HIGH(DIGITS)
.equ dividend = SRAM_TEMP_1 ; число которе будем делить
.equ divisor = 10 ; на что делим
; загружаем число которое хотим поделить в адрес SRAM делимого
-00023b 9380 0061 sts dividend, DISP_NUM_L
-00023d 9390 0062 sts dividend+1, DISP_NUM_H
+0002c9 9380 0061 sts dividend, DISP_NUM_L
+0002cb 9390 0062 sts dividend+1, DISP_NUM_H
; четыре раза производим деление для получения остатков
DIV_LOOP:
; заполняем нужные регистры
-00023f 9100 0061 lds dd16uL, dividend
-000241 9110 0062 lds dd16uH, dividend+1
-000243 e02a ldi dv16uL, LOW(divisor)
-000244 e030 ldi dv16uH, HIGH(divisor)
+0002cd 9100 0061 lds dd16uL, dividend
+0002cf 9110 0062 lds dd16uH, dividend+1
+0002d1 e02a ldi dv16uL, LOW(divisor)
+0002d2 e030 ldi dv16uH, HIGH(divisor)
-000245 de84 rcall div16u ; делим
+0002d3 ddf9 rcall div16u ; делим
-000246 92ed st X+, drem16uL ; сохраняем остаток в ячейку по указателю и увеличиваем его
+0002d4 92ed st X+, drem16uL ; сохраняем остаток в ячейку по указателю и увеличиваем его
; обновляем делимое
-000247 9300 0061 sts dividend, dres16uL
-000249 9310 0062 sts dividend+1, dres16uH
+0002d5 9300 0061 sts dividend, dres16uL
+0002d7 9310 0062 sts dividend+1, dres16uH
-00024b 955a dec r21 ; декрементируем счетчик цикла
-00024c f791 brne DIV_LOOP ; делим еще раз если не 0
-00024d 915f pop r21
-00024e 9478 sei
-00024f 9508 ret
+0002d9 955a dec r21 ; декрементируем счетчик цикла
+0002da f791 brne DIV_LOOP ; делим еще раз если не 0
+0002db 915f pop r21
+0002dc 910f pop r16
+0002dd 9508 ret
//
//
; **** ЗАГРУЖАЕТ НУЖНЫЙ АДРЕС СИМВОЛА В R0 ***********************
DISPLAY_DECODER:
-000250 930f push r16
-000251 931f push r17
-000252 e1ee ldi ZL, LOW(2*DISPLAY_SYMBOLS)
-000253 e0f5 ldi ZH, HIGH(2*DISPLAY_SYMBOLS)
+0002de 930f push r16
+0002df 931f push r17
+
+0002e0 e4e0 ldi ZL, LOW(2*DISPLAY_SYMBOLS)
+0002e1 e0f6 ldi ZH, HIGH(2*DISPLAY_SYMBOLS)
-000254 2711 clr TEMP_REG_B
-000255 0fe0 add ZL, TEMP_REG_A
-000256 1ff1 adc ZH, TEMP_REG_B
+0002e2 2711 clr TEMP_REG_B
+0002e3 0fe0 add ZL, TEMP_REG_A
+0002e4 1ff1 adc ZH, TEMP_REG_B
-000257 9004 lpm r0, Z
-000258 911f pop r17
-000259 910f pop r16
-00025a 9508 ret//
+0002e5 9004 lpm r0, Z
+0002e6 911f pop r17
+0002e7 910f pop r16
+0002e8 9508 ret
+ //
//
BEEP_SHORT:
-00025b 9ac5 sbi BUZZER_PORT, BUZZER_PIN
-00025c d022 rcall DELAY
-00025d 98c5 cbi BUZZER_PORT, BUZZER_PIN
-00025e 9508 ret
+0002e9 9ac5 sbi BUZZER_PORT, BUZZER_PIN
+0002ea e053
+0002eb ea39
+0002ec e74d
+0002ed d01d DELAY24 150000
+0002ee 98c5 cbi BUZZER_PORT, BUZZER_PIN
+0002ef 9508 ret
//
//
BEEP_LONG:
-00025f 9ac5 sbi BUZZER_PORT, BUZZER_PIN
-000260 d01e rcall DELAY
-000261 d01d rcall DELAY
-000262 d01c rcall DELAY
-000263 d01b rcall DELAY
-000264 98c5 cbi BUZZER_PORT, BUZZER_PIN
-000265 9508 ret//
+0002f0 9ac5 sbi BUZZER_PORT, BUZZER_PIN
+0002f1 e05c
+0002f2 e334
+0002f3 ef4d
+0002f4 d016 DELAY24 500000
+0002f5 98c5 cbi BUZZER_PORT, BUZZER_PIN
+0002f6 9508 ret
+ //
//
DEBOUNCE_SW:
-000266 930f push r16
-000267 931f push r17
-000268 932f push r18
+0002f7 930f push r16
+0002f8 931f push r17
+0002f9 932f push r18
-000269 e02a ldi r18, 10
+0002fa e02a ldi r18, 10
_loop_2:
-00026a ef1f ldi r17, 255
+0002fb ef1f ldi r17, 255
_loop_0:
-00026b ef0f ldi r16, 255
+0002fc ef0f ldi r16, 255
_dec_0:
-00026c 950a dec r16
-00026d f7f1 brne _dec_0
+0002fd 950a dec r16
+0002fe f7f1 brne _dec_0
_loop_1:
-00026e 951a dec r17
-00026f f7d9 brne _loop_0
+0002ff 951a dec r17
+000300 f7d9 brne _loop_0
_loop_3:
-000270 952a dec r18
-000271 f7c1 brne _loop_2
+000301 952a dec r18
+000302 f7c1 brne _loop_2
-000272 912f pop r18
-000273 911f pop r17
-000274 910f pop r16
-000275 9508 ret//
+000303 912f pop r18
+000304 911f pop r17
+000305 910f pop r16
+000306 9508 ret//
//
DELAY_LOOP_16:
-000276 5041 subi DELAY_8_r, 1
-000277 4030 sbci DELAY_16_r, 0
-000278 f7e8 brcc DELAY_LOOP_16
-000279 9508 ret
+000307 5041 subi DELAY_8_r, 1
+000308 4030 sbci DELAY_16_r, 0
+000309 f7e8 brcc DELAY_LOOP_16
+00030a 9508 ret
//
//
DELAY_LOOP_24:
-00027a 5041 subi DELAY_8_r, 1
-00027b 4030 sbci DELAY_16_r, 0
-00027c 4050 sbci DELAY_24_r, 0
-00027d f7e0 brcc DELAY_LOOP_24
-00027e 9508 ret
+00030b 5041 subi DELAY_8_r, 1
+00030c 4030 sbci DELAY_16_r, 0
+00030d 4050 sbci DELAY_24_r, 0
+00030e f7e0 brcc DELAY_LOOP_24
+00030f 9508 ret
//
//
DELAY:
-00027f 930f push r16
-000280 931f push r17
-000281 932f push r18
+000310 930f push r16
+000311 931f push r17
+000312 932f push r18
-000282 e026 ldi r18, 6
+000313 e026 ldi r18, 6
_DELAY_0:
-000283 ef0f ldi r16, 255
+000314 ef0f ldi r16, 255
_DELAY_1:
-000284 ef1f ldi r17, 255
+000315 ef1f ldi r17, 255
_DELAY_2:
-000285 951a dec r17
-000286 f7f1 brne _DELAY_2
+000316 951a dec r17
+000317 f7f1 brne _DELAY_2
-000287 950a dec r16
-000288 f7d9 brne _DELAY_1
-000289 952a dec r18
-00028a f7c1 brne _DELAY_0
+000318 950a dec r16
+000319 f7d9 brne _DELAY_1
+00031a 952a dec r18
+00031b f7c1 brne _DELAY_0
-00028b 912f pop r18
-00028c 911f pop r17
-00028d 910f pop r16
-00028e 9508 ret //
+00031c 912f pop r18
+00031d 911f pop r17
+00031e 910f pop r16
+00031f 9508 ret //
//
DISPLAY_SYMBOLS:
; HGFEDCBA HGFEDCBA
-00028f f9c0 .DB 0b11000000, 0b11111001 ; 0, 1
-000290 b0a4 .DB 0b10100100, 0b10110000 ; 2, 3
-000291 9299 .DB 0b10011001, 0b10010010 ; 4, 5
-000292 f882 .DB 0b10000010, 0b11111000 ; 6, 7
-000293 9080 .DB 0b10000000, 0b10010000 ; 8, 9
-000294 bf9c .DB 0b10011100, 0b10111111 ; °, -//
+000320 f9c0 .DB 0b11000000, 0b11111001 ; 0, 1
+000321 b0a4 .DB 0b10100100, 0b10110000 ; 2, 3
+000322 9299 .DB 0b10011001, 0b10010010 ; 4, 5
+000323 f882 .DB 0b10000010, 0b11111000 ; 6, 7
+000324 9080 .DB 0b10000000, 0b10010000 ; 8, 9
+000325 bf9c .DB 0b10011100, 0b10111111 ; °, -
+000326 89c6 .DB 0b11000110, 0b10001001 ; C, H
+ //
//
@@ -1952,39 +2109,39 @@ counted separately from r26..r31 here.
.dseg memory usage only counts static data declared with .byte
"ATtiny2313A" register use summary:
-x : 2 y : 0 z : 1 r0 : 4 r1 : 2 r2 : 0 r3 : 0 r4 : 0
-r5 : 5 r6 : 0 r7 : 0 r8 : 6 r9 : 0 r10: 2 r11: 2 r12: 2
-r13: 2 r14: 5 r15: 10 r16: 139 r17: 60 r18: 40 r19: 44 r20: 49
-r21: 22 r22: 5 r23: 8 r24: 5 r25: 3 r26: 4 r27: 4 r28: 0
+x : 2 y : 0 z : 1 r0 : 6 r1 : 2 r2 : 0 r3 : 0 r4 : 0
+r5 : 6 r6 : 6 r7 : 0 r8 : 6 r9 : 0 r10: 2 r11: 2 r12: 2
+r13: 2 r14: 6 r15: 11 r16: 162 r17: 92 r18: 51 r19: 55 r20: 53
+r21: 24 r22: 5 r23: 10 r24: 5 r25: 5 r26: 4 r27: 4 r28: 0
r29: 0 r30: 2 r31: 2
-Registers used: 26 out of 35 (74.3%)
+Registers used: 27 out of 35 (77.1%)
"ATtiny2313A" instruction use summary:
-.lds : 0 .sts : 0 adc : 5 add : 7 adiw : 1 and : 0
-andi : 2 asr : 0 bclr : 0 bld : 0 brbc : 0 brbs : 0
-brcc : 6 brcs : 1 break : 0 breq : 4 brge : 3 brhc : 0
+.lds : 0 .sts : 0 adc : 6 add : 8 adiw : 0 and : 0
+andi : 3 asr : 0 bclr : 0 bld : 0 brbc : 0 brbs : 0
+brcc : 6 brcs : 1 break : 0 breq : 7 brge : 4 brhc : 0
brhs : 0 brid : 0 brie : 0 brlo : 0 brlt : 0 brmi : 0
-brne : 22 brpl : 0 brsh : 0 brtc : 1 brts : 2 brvc : 0
+brne : 25 brpl : 0 brsh : 0 brtc : 1 brts : 2 brvc : 0
brvs : 0 bset : 0 bst : 0 cbi : 25 cbr : 3 clc : 2
-clh : 0 cli : 4 cln : 0 clr : 11 cls : 0 clt : 1
-clv : 0 clz : 0 com : 4 cp : 2 cpc : 2 cpi : 11
-cpse : 0 dec : 12 eor : 0 icall : 0 ijmp : 0 in : 3
-inc : 1 ld : 0 ldd : 0 ldi : 83 lds : 27 lpm : 2
-lsl : 4 lsr : 11 mov : 22 movw : 0 neg : 1 nop : 0
-or : 1 ori : 0 out : 20 pop : 42 push : 41 rcall : 54
-ret : 24 reti : 3 rjmp : 31 rol : 6 ror : 9 sbc : 2
-sbci : 5 sbi : 14 sbic : 3 sbis : 6 sbiw : 1 sbr : 2
-sbrc : 0 sbrs : 2 sec : 2 seh : 0 sei : 4 sen : 0
-ser : 0 ses : 0 set : 1 sev : 0 sez : 0 sleep : 0
-spm : 0 st : 2 std : 0 sts : 23 sub : 5 subi : 4
-swap : 0 tst : 3 wdr : 0
+clh : 0 cli : 3 cln : 0 clr : 17 cls : 0 clt : 1
+clv : 0 clz : 0 com : 4 cp : 2 cpc : 2 cpi : 13
+cpse : 0 dec : 14 eor : 0 icall : 0 ijmp : 0 in : 4
+inc : 4 ld : 0 ldd : 0 ldi : 94 lds : 38 lpm : 2
+lsl : 4 lsr : 11 mov : 28 movw : 0 neg : 1 nop : 2
+or : 1 ori : 0 out : 20 pop : 57 push : 56 rcall : 62
+ret : 25 reti : 3 rjmp : 48 rol : 6 ror : 9 sbc : 2
+sbci : 6 sbi : 14 sbic : 3 sbis : 8 sbiw : 0 sbr : 2
+sbrc : 0 sbrs : 2 sec : 2 seh : 0 sei : 3 sen : 0
+ser : 2 ses : 0 set : 1 sev : 0 sez : 0 sleep : 0
+spm : 0 st : 2 std : 0 sts : 33 sub : 5 subi : 5
+swap : 0 tst : 6 wdr : 0
Instructions used: 57 out of 105 (54.3%)
"ATtiny2313A" memory use summary [bytes]:
Segment Begin End Code Data Used Size Use%
---------------------------------------------------------------
-[.cseg] 0x000000 0x00052a 1288 12 1300 2048 63.5%
-[.dseg] 0x000060 0x000073 0 19 19 128 14.8%
+[.cseg] 0x000000 0x00064e 1580 14 1594 2048 77.8%
+[.dseg] 0x000060 0x000072 0 18 18 128 14.1%
[.eseg] 0x000000 0x000000 0 0 0 128 0.0%
Assembly complete, 0 errors, 21 warnings
diff --git a/dist/default/production/attiny2313a_thermostat.X.production.map b/dist/default/production/attiny2313a_thermostat.X.production.map
index 35d1183..0b1d957 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 26 12:19:45 2023
+AVRASM ver. 2.2.7 main.asm Thu Jun 29 14:17:58 2023
EQU SIGNATURE_000 0000001e
@@ -486,6 +486,7 @@ DEF DELAY_8_r r20
DEF DELAY_24_r r21
DEF DISP_NUM_L r24
DEF DISP_NUM_H r25
+DEF REPROGRAM_STEP_r r6
EQU DIGIT_1_PIN 00000002
EQU DIGIT_2_PIN 00000003
EQU DIGIT_3_PIN 00000004
@@ -526,12 +527,12 @@ EQU UART_TX_PIN 00000001
EQU MCU_STATE_DEFAULT 00000000
EQU MCU_STATE_PROGRAM 00000001
EQU MCU_STATE_ERROR 00000002
-EQU DEFAULT_TEMP 0000012c
+EQU DEFAULT_TEMP 0000013b
EQU DEFAULT_HYST 00000005
EQU HEAT_MODE 00000001
EQU COOLING_MODE 00000000
EQU DEFAULT_MODE 00000001
-EQU DEFAULT_SETTING_TEMP_L 0000002c
+EQU DEFAULT_SETTING_TEMP_L 0000003b
EQU DEFAULT_SETTING_TEMP_H 00000001
EQU DEFAULT_SETTING_HYST 00000005
EQU DEFAULT_SETTING_MODE 00000001
@@ -539,45 +540,44 @@ DSEG MCU_STATE 00000060
DSEG SRAM_TEMP_1 00000061
DSEG DIGITS 00000063
DSEG CURRENT_DIGIT 00000067
-DSEG SW_FLAGS 00000068
-DSEG TEMP_L 00000069
-DSEG TEMP_H 0000006a
-DSEG TEMP_F 0000006b
-DSEG SETTING_TEMP_H 0000006c
-DSEG SETTING_TEMP_L 0000006d
-DSEG SETTING_HYST 0000006e
-DSEG SETTING_MODE 0000006f
-DSEG DEVICE_FAMILY_CODE 00000070
-DSEG SRAM_TEMP_2 00000071
-DSEG SRAM_TEMP_3 00000072
-CSEG RESET_vect 00000074
-CSEG TIMER0_COMPA_vect 00000023
+DSEG TEMP_L 00000068
+DSEG TEMP_H 00000069
+DSEG TEMP_F 0000006a
+DSEG SETTING_TEMP_H 0000006b
+DSEG SETTING_TEMP_L 0000006c
+DSEG SETTING_HYST 0000006d
+DSEG SETTING_MODE 0000006e
+DSEG DEVICE_FAMILY_CODE 0000006f
+DSEG PROGRAM_STEPS 00000070
+DSEG SW_DATA 00000071
+CSEG RESET_vect 00000070
CSEG PCINT0_vect 0000000e
-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 00000250
-CSEG USI_TRANSMIT 000001ce
-CSEG _indicate_3 00000054
-CSEG _indicate_4 00000061
-CSEG _indicate_exit 0000006b
-CSEG MCU_INIT 00000076
-CSEG RD_F_CODE 0000016e
+CSEG TIMER0_COMPA_vect 0000001b
+CSEG _PCINT0_vect_end 00000017
+CSEG _INTO_PROGRAM_STATE 00000014
+CSEG _CLR_CURRENT_DIGIT 00000027
+CSEG _indicate_1 0000002a
+CSEG _indicate_2 0000003c
+CSEG DISPLAY_DECODER 000002de
+CSEG USI_TRANSMIT 000001d7
+CSEG _indicate_3 0000004e
+CSEG _indicate_4 0000005b
+CSEG _indicate_exit 00000065
+CSEG MCU_INIT 00000072
+CSEG RD_F_CODE 00000177
CSEG ERR_FAMILY_CODE 000000ae
CSEG START_PROGRAM 000000b3
-CSEG BEEP_LONG 0000025f
-CSEG BEEP_SHORT 0000025b
+CSEG BEEP_LONG 000002f0
+CSEG BEEP_SHORT 000002e9
CSEG LOOP 000000b6
-CSEG _STATE_DEFAULT 000000b8
-CSEG _STATE_PROGRAM 000000c1
-CSEG DISPLAY_UPD_DIGITS 00000236
-CSEG TEMP_UPD 0000015f
-CSEG TEMP_COMPARSION 00000110
-CSEG TEMP_SEND_UART 000000fa
-CSEG _STATE_ERROR 000000c6
-CSEG SW_CHECK_PROCESS 000001da
+CSEG DISPLAY_UPD_DIGITS 000002c4
+CSEG _STATE_DEFAULT 000000b9
+CSEG _STATE_PROGRAM 000000c5
+CSEG TEMP_UPD 00000168
+CSEG TEMP_COMPARSION 0000011b
+CSEG TEMP_SEND_UART 000000fd
+CSEG _STATE_ERROR 000000c9
+CSEG REPROGRAM_SETTINGS 0000020b
DEF drem16uL r14
DEF drem16uH r15
DEF dres16uL r16
@@ -587,19 +587,19 @@ DEF dd16uH r17
DEF dv16uL r18
DEF dv16uH r19
DEF dcnt16u r20
-CSEG div16u 000000ca
-CSEG d16u_1 000000cd
-CSEG d16u_2 000000d2
-CSEG d16u_3 000000db
+CSEG div16u 000000cd
+CSEG d16u_1 000000d0
+CSEG d16u_2 000000d5
+CSEG d16u_3 000000de
DEF drem8u r15
DEF dres8u r16
DEF dd8u r16
DEF dv8u r17
DEF dcnt8u r18
-CSEG div8u 000000dd
-CSEG d8u_1 000000df
-CSEG d8u_2 000000e3
-CSEG d8u_3 000000e9
+CSEG div8u 000000e0
+CSEG d8u_1 000000e2
+CSEG d8u_2 000000e6
+CSEG d8u_3 000000ec
DEF mc16uL r16
DEF mc16uH r17
DEF mp16uL r18
@@ -609,54 +609,78 @@ DEF m16u1 r19
DEF m16u2 r20
DEF m16u3 r21
DEF mcnt16u r22
-CSEG mpy16u 000000eb
-CSEG m16u_1 000000f0
-CSEG noad8 000000f3
-CSEG UART_WR_BYTE 0000010c
+CSEG mpy16u 000000ee
+CSEG m16u_1 000000f3
+CSEG noad8 000000f6
+CSEG UART_WR_BYTE 00000117
+CSEG _TEMP_SEND_UART_L 00000111
DEF temp_r_l r16
DEF temp_r_h r17
DEF min_r_trhd_l r11
DEF min_r_trhd_h r10
DEF max_r_trhd_l r13
DEF max_r_trhd_h r12
-CSEG _NEGATE_TEMP 0000013e
-CSEG _COMPARE 00000142
-CSEG _MIN_THRESHOLD 00000149
-CSEG _MAX_THRESHOLD 00000151
-CSEG _COMPARSION_EXIT 00000158
-CSEG TEMP_CONV 000001c2
-CSEG DELAY_LOOP_24 0000027a
-CSEG TEMP_RD 00000178
-CSEG OW_PRESENCE 000001e8
-CSEG OW_SEND_BYTE 000001fd
-CSEG OW_RD_BYTE 0000021c
-CSEG _TEMP_RD_EXIT 000001bc
-CSEG _TEMP_RD_TO_UNSIGNED 00000196
-CSEG _TEMP_RD_CONTINUE 0000019d
-CSEG _TEMP_RD_END 000001a6
-CSEG _TEMP_CONV_EXIT 000001cc
-CSEG _USI_TRANSMIT_LOOP 000001d3
-CSEG DEBOUNCE_SW 00000266
-CSEG _INTO_DEFAULT_STATE 000001e3
-CSEG _SW_CHECK_PROCESS_END 000001e6
-CSEG DELAY_LOOP_16 00000276
-CSEG OW_CHECK_PRESENCE 000001f7
-CSEG _EXIT 000001fc
-CSEG _OW_SEND_BYTE_LOOP 00000202
-CSEG _OW_SEND_0 00000205
-CSEG _OW_SEND_1 0000020e
-CSEG _OW_SEND_BYTE_END 00000216
-CSEG _OW_RD_BYTE_LP 00000221
+CSEG _NEGATE_TEMP 00000146
+CSEG _COMPARE 0000014a
+CSEG _MIN_THRESHOLD 00000151
+CSEG _MAX_THRESHOLD 00000159
+CSEG _COMPARSION_EXIT 00000160
+CSEG TEMP_CONV 000001cb
+CSEG DELAY_LOOP_24 0000030b
+CSEG TEMP_RD 00000181
+CSEG OW_PRESENCE 00000276
+CSEG OW_SEND_BYTE 0000028b
+CSEG OW_RD_BYTE 000002aa
+CSEG _TEMP_RD_EXIT 000001c5
+CSEG _TEMP_RD_TO_UNSIGNED 0000019f
+CSEG _TEMP_RD_CONTINUE 000001a6
+CSEG _TEMP_RD_END 000001af
+CSEG _TEMP_CONV_EXIT 000001d5
+CSEG _USI_TRANSMIT_LOOP 000001dd
+CSEG BUTTON_PROCESS 000001e5
+CSEG _SW_CHECK_ON_0 000001e6
+CSEG _SW_SET_0 000001e9
+CSEG _SW_CHECK_ON_1 000001fd
+CSEG _SW_SET_FROM_0_TO_1 000001ee
+CSEG DEBOUNCE_SW 000002f7
+CSEG _SAVE_SETTINGS 000001f8
+CSEG _SW_SET_1 00000200
+CSEG _BUTTON_PROCESS_END 00000209
+CSEG _SW_SET_FROM_1_TO_0 00000205
+CSEG _INTO 00000214
+CSEG _REPROGRAM_SETTINGS_LOOP 00000216
+CSEG _CHECK_STEP 00000217
+CSEG _STEP_1 0000021c
+CSEG _STEP_2 0000023d
+CSEG _REPROGRAM_SETTINGS_END 00000270
+CSEG _S1_CHECK_PLUS 0000021d
+CSEG _INCREASE_HYST 00000223
+CSEG _S1_CHECK_MINUS 00000220
+CSEG _DECREASE_HYST 0000022a
+CSEG _SHOW_HYST 00000230
+CSEG _S2_CHECK_PLUS 0000023e
+CSEG _INCREASE_TEMP 00000244
+CSEG _S2_CHECK_MINUS 00000241
+CSEG _DECREASE_TEMP 00000252
+CSEG _SHOW_TEMP 0000025d
+CSEG DELAY_LOOP_16 00000307
+CSEG OW_CHECK_PRESENCE 00000285
+CSEG _EXIT 0000028a
+CSEG _OW_SEND_BYTE_LOOP 00000290
+CSEG _OW_SEND_0 00000293
+CSEG _OW_SEND_1 0000029c
+CSEG _OW_SEND_BYTE_END 000002a4
+CSEG _OW_RD_BYTE_LP 000002af
EQU dividend 00000061
EQU divisor 0000000a
-CSEG DIV_LOOP 0000023f
-CSEG DISPLAY_SYMBOLS 0000028f
-CSEG DELAY 0000027f
-CSEG _loop_2 0000026a
-CSEG _loop_0 0000026b
-CSEG _dec_0 0000026c
-CSEG _loop_1 0000026e
-CSEG _loop_3 00000270
-CSEG _DELAY_0 00000283
-CSEG _DELAY_1 00000284
-CSEG _DELAY_2 00000285
+CSEG DIV_LOOP 000002cd
+CSEG DISPLAY_SYMBOLS 00000320
+CSEG _loop_2 000002fb
+CSEG _loop_0 000002fc
+CSEG _dec_0 000002fd
+CSEG _loop_1 000002ff
+CSEG _loop_3 00000301
+CSEG DELAY 00000310
+CSEG _DELAY_0 00000314
+CSEG _DELAY_1 00000315
+CSEG _DELAY_2 00000316
diff --git a/dist/default/production/attiny2313a_thermostat.X.production.obj b/dist/default/production/attiny2313a_thermostat.X.production.obj
index 14bbd60..5943883 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 49b312b..ee61d04 100644
--- a/dist/default/production/attiny2313a_thermostat.X.production.tmp
+++ b/dist/default/production/attiny2313a_thermostat.X.production.tmp
@@ -30,45 +30,44 @@
main.asm25
main.asm26
main.asm27
- main.asm28
- main.asm29
- main.asm30
- main.asm31
- main.asm32
- main.asm33
- main.asm34
- main.asm35
- main.asm36
- main.asm37
- main.asm38
- main.asm191
- main.asm96
- main.asm59
- <_PCINT0_vect_end>main.asm86
- <_INTO_PROGRAM_STATE>main.asm82
- <_CLR_CURRENT_DIGIT>main.asm108
- <_indicate_1>main.asm112
- <_indicate_2>main.asm132
- main.asm778
- main.asm595
- <_indicate_3>main.asm150
- <_indicate_4>main.asm166
- <_indicate_exit>main.asm178
- main.asm197
- main.asm457
- main.asm253
- main.asm258
- main.asm802
- main.asm794
- main.asm267
- <_STATE_DEFAULT>main.asm271
- <_STATE_PROGRAM>main.asm280
- main.asm737
- main.asm441
- main.asm334
+ main.asm28
+ main.asm29
+ main.asm30
+ main.asm31
+ main.asm32
+ main.asm33
+ main.asm34
+ main.asm35
+ main.asm36
+ main.asm37
+ main.asm184
+ main.asm61
+ main.asm84
+ <_PCINT0_vect_end>main.asm75
+ <_INTO_PROGRAM_STATE>main.asm71
+ <_CLR_CURRENT_DIGIT>main.asm98
+ <_indicate_1>main.asm102
+ <_indicate_2>main.asm122
+ main.asm926
+ main.asm592
+ <_indicate_3>main.asm140
+ <_indicate_4>main.asm156
+ <_indicate_exit>main.asm168
+ main.asm190
+ main.asm458
+ main.asm254
+ main.asm259
+ main.asm952
+ main.asm944
+ main.asm266
+ main.asm885
+ <_STATE_DEFAULT>main.asm269
+ <_STATE_PROGRAM>main.asm281
+ main.asm442
+ main.asm345
main.asm300
<_STATE_ERROR>main.asm286
- main.asm626
+ main.asm670
div16u.asm32
div16u.asm36
div16u.asm42
@@ -80,45 +79,69 @@
mpy16u.asm31
mpy16u.asm37
mpy16u.asm40
- main.asm327
+ main.asm338
+ <_TEMP_SEND_UART_L>main.asm327
<_NEGATE_TEMP>main.asm399
<_COMPARE>main.asm405
<_MIN_THRESHOLD>main.asm415
<_MAX_THRESHOLD>main.asm424
<_COMPARSION_EXIT>main.asm431
- main.asm571
- main.asm846
- main.asm473
- main.asm650
- main.asm677
- main.asm708
- <_TEMP_RD_EXIT>main.asm563
+ main.asm570
+ main.asm994
+ main.asm474
+ main.asm798
+ main.asm825
+ main.asm856
+ <_TEMP_RD_EXIT>main.asm562
<_TEMP_RD_TO_UNSIGNED>main.asm511
<_TEMP_RD_CONTINUE>main.asm524
<_TEMP_RD_END>main.asm534
- <_TEMP_CONV_EXIT>main.asm588
- <_USI_TRANSMIT_LOOP>main.asm613
- main.asm812
- <_INTO_DEFAULT_STATE>main.asm639
- <_SW_CHECK_PROCESS_END>main.asm642
- main.asm838
- main.asm666
- <_EXIT>main.asm672
- <_OW_SEND_BYTE_LOOP>main.asm683
- <_OW_SEND_0>main.asm687
- <_OW_SEND_1>main.asm693
- <_OW_SEND_BYTE_END>main.asm698
- <_OW_RD_BYTE_LP>main.asm714
- main.asm754
- main.asm880
- main.asm855
- <_loop_2>main.asm818
- <_loop_0>main.asm820
- <_dec_0>main.asm822
- <_loop_1>main.asm825
- <_loop_3>main.asm828
- <_DELAY_0>main.asm861
- <_DELAY_1>main.asm863
- <_DELAY_2>main.asm865
+ <_TEMP_CONV_EXIT>main.asm585
+ <_USI_TRANSMIT_LOOP>main.asm611
+ main.asm625
+ <_SW_CHECK_ON_0>main.asm627
+ <_SW_SET_0>main.asm631
+ <_SW_CHECK_ON_1>main.asm651
+ <_SW_SET_FROM_0_TO_1>main.asm636
+ main.asm960
+ <_SAVE_SETTINGS>main.asm646
+ <_SW_SET_1>main.asm655
+ <_BUTTON_PROCESS_END>main.asm664
+ <_SW_SET_FROM_1_TO_0>main.asm660
+ <_INTO>main.asm681
+ <_REPROGRAM_SETTINGS_LOOP>main.asm684
+ <_CHECK_STEP>main.asm686
+ <_STEP_1>main.asm693
+ <_STEP_2>main.asm727
+ <_REPROGRAM_SETTINGS_END>main.asm775
+ <_S1_CHECK_PLUS>main.asm695
+ <_INCREASE_HYST>main.asm703
+ <_S1_CHECK_MINUS>main.asm699
+ <_DECREASE_HYST>main.asm709
+ <_SHOW_HYST>main.asm714
+ <_S2_CHECK_PLUS>main.asm729
+ <_INCREASE_TEMP>main.asm737
+ <_S2_CHECK_MINUS>main.asm733
+ <_DECREASE_TEMP>main.asm748
+ <_SHOW_TEMP>main.asm756
+ main.asm986
+ main.asm814
+ <_EXIT>main.asm820
+ <_OW_SEND_BYTE_LOOP>main.asm831
+ <_OW_SEND_0>main.asm835
+ <_OW_SEND_1>main.asm841
+ <_OW_SEND_BYTE_END>main.asm846
+ <_OW_RD_BYTE_LP>main.asm862
+ main.asm902
+ main.asm1028
+ <_loop_2>main.asm966
+ <_loop_0>main.asm968
+ <_dec_0>main.asm970
+ <_loop_1>main.asm973
+ <_loop_3>main.asm976
+ main.asm1003
+ <_DELAY_0>main.asm1009
+ <_DELAY_1>main.asm1011
+ <_DELAY_2>main.asm1013
diff --git a/main.asm b/main.asm
index c78708d..dbc3e61 100644
--- a/main.asm
+++ b/main.asm
@@ -25,7 +25,6 @@ MCU_STATE: .BYTE 1 ; Текущее состояние
SRAM_TEMP_1: .BYTE 2 ; Хранения временного 16-бит числа в ячейке
DIGITS: .BYTE 4 ; Ячейки, где хранятся символы, для вывода на индикатор
CURRENT_DIGIT: .BYTE 1 ; Номер разряда индикатора, который сейчас горит
-SW_FLAGS: .BYTE 1 ; Состояние кнопок
TEMP_L: .BYTE 1 ; Младший байт температуры
TEMP_H: .BYTE 1 ; Старший байт температуры
TEMP_F: .BYTE 1 ; Дробная часть
@@ -34,8 +33,8 @@ SETTING_TEMP_L: .BYTE 1 ; Уставка температуры (млад
SETTING_HYST: .BYTE 1 ; Гистерезис: отклонение от уставки
SETTING_MODE: .BYTE 1 ; Режим работы: '1' - нагрев; '0' - 'охлаждение'
DEVICE_FAMILY_CODE: .BYTE 1 ; Должно быть 0x10 для DS18B20
-SRAM_TEMP_2: .BYTE 1
-SRAM_TEMP_3: .BYTE 1
+PROGRAM_STEPS: .BYTE 1 ; Текущий "шаг" для настройки (0 - ничего; 1 - уставка T; 2 - гистерезис)
+SW_DATA: .BYTE 1
;//
@@ -46,38 +45,28 @@ SRAM_TEMP_3: .BYTE 1
//
.ORG 0x00
rjmp RESET_vect
+
+.ORG 0x04
+ reti
.ORG 0x000B
-; rjmp PCINT0_vect
- reti
+ rjmp PCINT0_vect
.ORG 0x000D
rjmp TIMER0_COMPA_vect
+
//
//
PCINT0_vect:
push r16
push r17
- push r18
- push r19
in r16, SREG
+ in r17, SW_PIN
-; display_off
-
-; in r17, SW_PIN
-; clr r18
-; ldi r18, (1<
+ reti
+//
//
; **** ДИНАМИЧЕСКАЯ ИНДИКАЦИЯ ************************************
TIMER0_COMPA_vect:
- push r20
- push r21
- push r16
- push r17
+ push r16
+ push r17
+ push r18
+ push r19
+ push r20
+ push r21
in r21, SREG
lds r20, CURRENT_DIGIT
@@ -171,19 +161,22 @@ _indicate_4:
cbi PORTD, DIGIT_2_PIN
cbi PORTD, DIGIT_3_PIN
sbi PORTD, DIGIT_4_PIN
- lds TEMP_REG_A, TEMP_F
+ lds TEMP_REG_A, DIGITS+3
rcall DISPLAY_DECODER
rcall USI_TRANSMIT
_indicate_exit:
inc r20
sts CURRENT_DIGIT, r20
+
out SREG, r21
- pop r17
- pop r16
- pop r21
+ pop r21
pop r20
+ pop r19
+ pop r18
+ pop r17
+ pop r16
reti
;//
@@ -200,20 +193,23 @@ MCU_INIT:
outi r16, DDRB, (1<
//
; **** ГЛАВНЫЙ ЦИКЛ **********************************************
LOOP:
- ; rcall DISPLAY_UPD_DIGITS
lds r16, MCU_STATE ; получаем текущее состояние МК
-
+ rcall DISPLAY_UPD_DIGITS
_STATE_DEFAULT:
cpi r16, MCU_STATE_DEFAULT
brne _STATE_PROGRAM
cbi LED_ERR_PORT, LED_ERR_PIN
- rcall DISPLAY_UPD_DIGITS
+
+ lds r18, TEMP_F
+ sts DIGITS+3, r18
+
rcall TEMP_UPD ; обновление данных о температуре
- outi r16, TIMSK, (1<
TEMP_SEND_UART:
push r16
+ push r17
+
; целая часть
lds r16, TEMP_L
mov r5, r16
@@ -319,6 +321,15 @@ TEMP_SEND_UART:
mov r5, r16
rcall UART_WR_BYTE
+ clr r16
+ mov r5, r16
+ ldi r17, 12
+_TEMP_SEND_UART_L:
+ rcall UART_WR_BYTE
+ dec r17
+ brne _TEMP_SEND_UART_L
+
+ pop r17
pop r16
ret
//
@@ -338,17 +349,8 @@ TEMP_COMPARSION:
push r19
push r20
push r21
-;
-; lds dd8u, SETTING_HYST
-; ldi dv8u, 10
-; rcall div8u
-;
-; ; определение нижнего и верхнего порого срабатывания
-; lds r19, SETTING_INT
-; mov r20, r19
-; sub r19, dres8u ; MIN = SET - HYST_INT
-; add r20, dres8u ; MAX = SET + HYST_INT
-;
+ push r23
+
.DEF temp_r_l = r16
.DEF temp_r_h = r17
@@ -370,8 +372,6 @@ TEMP_COMPARSION:
clr r19
add temp_r_l, r18
adc temp_r_h, r19
- sts SRAM_TEMP_2, temp_r_h
- sts SRAM_TEMP_3, temp_r_l
; определяем нижний и верхний пороги
lds r20, SETTING_TEMP_L
@@ -429,6 +429,7 @@ _MAX_THRESHOLD:
rjmp PC+2
relay_off
_COMPARSION_EXIT:
+ pop r23
pop r21
pop r20
pop r19
@@ -441,7 +442,7 @@ _COMPARSION_EXIT:
TEMP_UPD:
push r17
rcall TEMP_CONV
- DELAY24 800000
+ DELAY24 751000
rcall TEMP_RD
; обновляем данные в ячейках
@@ -476,7 +477,6 @@ TEMP_RD:
push r18
push r19
push r20
-; cli
rcall OW_PRESENCE
sbrs OWFR, OWPRF
@@ -559,7 +559,6 @@ _TEMP_RD_END:
sts TEMP_H, r18
sts TEMP_F, r19
-; sei
_TEMP_RD_EXIT:
pop r20
pop r19
@@ -570,7 +569,6 @@ _TEMP_RD_EXIT:
;
TEMP_CONV:
push r16
-; cli
rcall OW_PRESENCE
sbrs OWFR, OWPRF
@@ -584,7 +582,6 @@ TEMP_CONV:
mov OW_CMD_r, r16
rcall OW_SEND_BYTE
-; sei
_TEMP_CONV_EXIT:
pop r16
ret
@@ -594,6 +591,7 @@ _TEMP_CONV_EXIT:
; **** ОТПРАВКА БАЙТА В СДВИГОВЫЙ РЕГИСТР *************************
USI_TRANSMIT:
push r16
+ push r0
out USIDR, r0 ; Байт для отправки всегда находится в регистре r0. Помещаем данные в регистр USIDR.
; Enable USI Overflow Interrupt Flag (will be 0 if transfer is not compeleted)
@@ -619,33 +617,183 @@ _USI_TRANSMIT_LOOP: ; Execute loop when USIOIF is 0
; This will copy byte from 74hc595 shift register into 74hc595 storage register
sbi PORTB, USI_LATCH_PIN
cbi PORTB, USI_LATCH_PIN
+ pop r0
pop r16
- ret//
+ ret
+//
-//
-SW_CHECK_PROCESS:
+BUTTON_PROCESS:
push r16
- rcall DEBOUNCE_SW
- sbis SW_PIN, SW_PLUS_PIN
- adiw DISP_NUM_L, 1
-
- sbis SW_PIN, SW_MINUS_PIN
- sbiw DISP_NUM_L, 1
-
+_SW_CHECK_ON_0:
sbis SW_PIN, SW_SET_PIN
- rjmp _INTO_DEFAULT_STATE
- rjmp _SW_CHECK_PROCESS_END
+ rjmp _SW_SET_0
+ rjmp _SW_CHECK_ON_1
+_SW_SET_0:
+ lds r16, SW_DATA
+ tst r16
+ brne _SW_SET_FROM_0_TO_1
+ rjmp _SW_CHECK_ON_1
+_SW_SET_FROM_0_TO_1:
+ clr r16
+ sts SW_DATA, r16
+ rcall DEBOUNCE_SW
+ inc REPROGRAM_STEP_r
+ mov r17, REPROGRAM_STEP_r
+ cpi r17, 4
+ brge _SAVE_SETTINGS
+ rcall BEEP_SHORT
+ rjmp _SW_CHECK_ON_1
+_SAVE_SETTINGS:
+ clr REPROGRAM_STEP_r
+ rcall BEEP_LONG
+ ldi r17, MCU_STATE_DEFAULT
+ sts MCU_STATE, r17
+_SW_CHECK_ON_1:
+ sbic SW_PIN, SW_SET_PIN
+ rjmp _SW_SET_1
+ rjmp _BUTTON_PROCESS_END
+_SW_SET_1:
+ lds r16, SW_DATA
+ tst r16
+ breq _SW_SET_FROM_1_TO_0
+ rjmp _BUTTON_PROCESS_END
+_SW_SET_FROM_1_TO_0:
+ ser r16
+ sts SW_DATA, r16
+ rcall DEBOUNCE_SW
+_BUTTON_PROCESS_END:
+ pop r16
+ ret
-_INTO_DEFAULT_STATE:
- ldi r16, MCU_STATE_DEFAULT
- sts MCU_STATE, r16
-_SW_CHECK_PROCESS_END:
+
+//
+REPROGRAM_SETTINGS:
+ push r16
+ push r17
+ push r18
+ push r19
+ push r20
+
+ mov r16, REPROGRAM_STEP_r
+ tst r16
+ breq _INTO
+ rjmp _REPROGRAM_SETTINGS_LOOP
+_INTO:
+ inc REPROGRAM_STEP_r
+ rcall BEEP_SHORT
+_REPROGRAM_SETTINGS_LOOP:
+ rcall BUTTON_PROCESS
+_CHECK_STEP:
+ cpi r16, 1
+ breq _STEP_1
+ cpi r16, 2
+ breq _STEP_2
+ rjmp _REPROGRAM_SETTINGS_END
+
+_STEP_1: ; установка и отображение гистерезиса
+ nop
+_S1_CHECK_PLUS:
+ sbis SW_PIN, SW_PLUS_PIN
+ rjmp _INCREASE_HYST
+ rjmp _S1_CHECK_MINUS
+_S1_CHECK_MINUS:
+ sbis SW_PIN, SW_MINUS_PIN
+ rjmp _DECREASE_HYST
+ rjmp _SHOW_HYST
+_INCREASE_HYST:
+ rcall DEBOUNCE_SW
+ lds r17, SETTING_HYST
+ inc r17
+ sts SETTING_HYST, r17
+ rjmp _SHOW_HYST
+_DECREASE_HYST:
+ rcall DEBOUNCE_SW
+ lds r17, SETTING_HYST
+ dec r17
+ sts SETTING_HYST, r17
+_SHOW_HYST:
+ push dd8u
+ push dv8u
+ lds dd8u, SETTING_HYST
+ ldi dv8u, 10
+ rcall div8u
+ mov DISP_NUM_L, dres8u
+ clr DISP_NUM_H ; гистерезис 8 битный так что ноль пишем в старший байт
+ sts DIGITS+3, drem8u
+ pop dv8u
+ pop dd8u
+ rjmp _REPROGRAM_SETTINGS_END
+
+_STEP_2:
+ nop
+_S2_CHECK_PLUS:
+ sbis SW_PIN, SW_PLUS_PIN
+ rjmp _INCREASE_TEMP
+ rjmp _S2_CHECK_MINUS
+_S2_CHECK_MINUS:
+ sbis SW_PIN, SW_MINUS_PIN
+ rjmp _DECREASE_TEMP
+ rjmp _SHOW_TEMP
+_INCREASE_TEMP:
+ rcall DEBOUNCE_SW
+ lds r17, SETTING_TEMP_L
+ lds r18, SETTING_TEMP_H
+ ldi r19, 1
+ add r17, r19
+ clr r19
+ adc r18, r19
+ sts SETTING_TEMP_L, r17
+ sts SETTING_TEMP_H, r18
+ rjmp _SHOW_TEMP
+_DECREASE_TEMP:
+ rcall DEBOUNCE_SW
+ lds r17, SETTING_TEMP_L
+ lds r18, SETTING_TEMP_H
+ subi r17, 1
+ sbci r18, 0
+ sts SETTING_TEMP_L, r17
+ sts SETTING_TEMP_H, r18
+_SHOW_TEMP:
+ push dd16uL
+ push dd16uH
+ push dv16uL
+ push dv16uH
+
+ lds dd16uL, SETTING_TEMP_L
+ lds dd16uH, SETTING_TEMP_H
+ ldi dv16uL, LOW(10)
+ ldi dv16uH, HIGH(10)
+ rcall div16u
+ mov DISP_NUM_L, dres16uL
+ mov DISP_NUM_H, dres16uH
+ sts DIGITS+3, drem16uL
+
+ pop dv16uH
+ pop dv16uL
+ pop dd16uH
+ pop dd16uL
+_REPROGRAM_SETTINGS_END:
+ pop r20
+ pop r19
+ pop r18
+ pop r17
pop r16
ret
//
+;DBG_LED_TOGGLE:
+; push r18
+; push r19
+; in r18, PIND
+; ldi r19, (1<
-//
+//
; **** ОПРОС ПРИСУТСТВИЯ УСТРОЙСТВА ******************************
OW_PRESENCE:
cli
@@ -675,9 +823,9 @@ _EXIT:
//
OW_SEND_BYTE:
+ cli
push r16
push r17
- cli
mov r16, OW_CMD_r
ldi r17, 8
_OW_SEND_BYTE_LOOP:
@@ -698,17 +846,17 @@ _OW_SEND_1:
_OW_SEND_BYTE_END:
dec r17
brne _OW_SEND_BYTE_LOOP
- sei
pop r17
pop r16
+ sei
ret
//
//
OW_RD_BYTE:
+ cli
push r16
push r17
- cli
clr r16
ldi r17, 8
_OW_RD_BYTE_LP:
@@ -723,9 +871,9 @@ _OW_RD_BYTE_LP:
dec r17
brne _OW_RD_BYTE_LP
st X, r16
- sei
pop r17
pop r16
+ sei
ret
//
//
@@ -735,10 +883,10 @@ _OW_RD_BYTE_LP:
; Описание: Перемещает цифры числа в соответствующие ячейки памяти в SRAM
; путем деления этого числа несколько раз
DISPLAY_UPD_DIGITS:
- cli
+ push r16
push r21
- ldi r21, 4 ; (4 раза делим) т.к индикатор четырех разрядный
-
+ ldi r21, 3
+
; инициализация указателя (за каждый проход цикла будет инкрементироваться)
ldi XL, LOW(DIGITS)
ldi XH, HIGH(DIGITS)
@@ -769,7 +917,7 @@ DIV_LOOP:
dec r21 ; декрементируем счетчик цикла
brne DIV_LOOP ; делим еще раз если не 0
pop r21
- sei
+ pop r16
ret
//
@@ -778,6 +926,7 @@ DIV_LOOP:
DISPLAY_DECODER:
push r16
push r17
+
ldi ZL, LOW(2*DISPLAY_SYMBOLS)
ldi ZH, HIGH(2*DISPLAY_SYMBOLS)
@@ -788,12 +937,13 @@ DISPLAY_DECODER:
lpm r0, Z
pop r17
pop r16
- ret//
+ ret
+//
//
BEEP_SHORT:
sbi BUZZER_PORT, BUZZER_PIN
- rcall DELAY
+ DELAY24 150000
cbi BUZZER_PORT, BUZZER_PIN
ret
//
@@ -801,12 +951,10 @@ BEEP_SHORT:
//
BEEP_LONG:
sbi BUZZER_PORT, BUZZER_PIN
- rcall DELAY
- rcall DELAY
- rcall DELAY
- rcall DELAY
+ DELAY24 500000
cbi BUZZER_PORT, BUZZER_PIN
- ret//
+ ret
+//
//
DEBOUNCE_SW:
@@ -884,7 +1032,9 @@ DISPLAY_SYMBOLS:
.DB 0b10011001, 0b10010010 ; 4, 5
.DB 0b10000010, 0b11111000 ; 6, 7
.DB 0b10000000, 0b10010000 ; 8, 9
- .DB 0b10011100, 0b10111111 ; °, -//
+ .DB 0b10011100, 0b10111111 ; °, -
+ .DB 0b11000110, 0b10001001 ; C, H
+//
//
diff --git a/main.hex b/main.hex
index 69e0737..ddfb46e 100644
--- a/main.hex
+++ b/main.hex
@@ -1,83 +1,98 @@
:020000020000FC
-:0200000073C0CB
-:0200160018953B
-:10001A0015C00F931F932F933F930FB7B49908C03E
-:10002A0020916000203009F003C011E010936000B5
-:10003A000FBF3F912F911F910F9118954F935F9387
-:10004A000F931F935FB74091670045300CF403C0CC
-:10005A00442740936700403081F493989498959888
-:10006A000EF002C00BE002C000916500002311F0FF
-:10007A00929A01C09298FED17BD1413081F4929834
-:10008A00949895980091640030916500032B11F0C3
-:10009A00939A01C0939800916400ECD169D14230DF
-:1000AA0059F4929893989598949A00916300E2D1A2
-:1000BA00002D0F77002E5CD1433041F4929893982B
-:1000CA009498959A00916B00D5D152D1439540935B
-:1000DA0067005FBF1F910F915F914F9118950FEDC8
-:1000EA000DBF0FE701BB01EE07BB0CE108BB02E045
-:1000FA0000BF05E003BF09E106BF00E20BBF0CE148
-:10010A0000BD11241092670000E0009360000CE229
-:10011A0000936D0001E000936C0005E000936E000F
-:10012A0001E000936F0000270093690000936A00C2
-:10013A0000EF00936B0053E137E84DEFC5D15CE067
-:10014A0034E34DEFC1D1B2D000917000083209F406
-:10015A0005C012E0109360009CD101C096D180E0E6
-:10016A0090E000916000003031F4969869D18BD00C
-:10017A0001E009BF39D0013019F4969861D104D150
-:10018A00023079F7969AEDCFEE24FF1841E1001F6D
-:10019A00111F4A9509F40895EE1CFF1CE21AF30A8E
-:1001AA0020F4E20EF31E8894F2CF0894F0CFFF18E1
-:1001BA0029E0001F2A9509F40895FF1CF11A18F482
-:1001CA00F10E8894F6CF0894F4CF5527442760E1BE
-:1001DA003695279510F4400F511F57954795379537
-:1001EA0027956A95B9F708950F931F932F933F9315
-:1001FA004F935F930091690010916A002AE030E002
-:10020A00E4DF022F132F20916B003327020F131FF5
-:10021A00109371000093720040916D0050916C0030
-:10022A0060916E004F935F937727461B570BB42E4E
-:10023A00A52E5F914F917727460F571FD42EC52EB3
-:10024A000EF004C0009510950F5F1F4FB016A1065F
-:10025A0024F40D151C054CF40FC040916F00442383
-:10026A0011F4909801C0909A07C040916F004423FE
-:10027A0011F4909A01C090985F914F913F912F91FC
-:10028A001F910F9108951F9367D05CE034E34DEFFF
-:10029A001BD15CE034E34DEF17D112D01091690005
-:1002AA00812F10916A00912F1F9108950F937AD090
-:1002BA0003E3802E8CD0A0E7B0E0A8D00F91089578
-:1002CA000F931F932F933F934F936CD070FF3EC0B1
-:1002DA000CEC802E7CD00EEB802E79D0A9E6B0E013
-:1002EA0095D0AAE6B0E092D01091690020916A00F8
-:1002FA002F93287F283F11F0E89409C02F91689422
-:10030A001095209531E0130F30E0231F01C02F9183
-:10031A002695179526951795269517952695179537
-:10032A00309169000EF43195432F3F70432F330FFC
-:10033A00330F330F440F340F36953695369536956D
-:10034A001093690020936A0030936B004F913F919C
-:10035A002F911F910F9108950F9324D070FF06C01B
-:10036A000CEC802E34D004E4802E31D00F91089505
-:10037A000F930FB800E40EB90BE10DB9769BFDCFD0
-:10038A00C09AC0980F9108950F938AD0B29B019694
-:10039A00B39B0197B49B01C003C000E000936000C7
-:1003AA000F910895F894B99A33E04EEB89D0B99831
-:1003BA0030E04AE885D005D033E042E381D0789432
-:1003CA000895B19B716002C0B1997E7F08950F9321
-:1003DA001F93F894082D18E0069508F448F0B99A86
-:1003EA0030E046E76DD0B99830E042E169D008C004
-:1003FA00B99A30E04AE064D0B99830E04EE760D06C
-:10040A001A9551F778941F910F9108950F931F939E
-:10041A00F894002718E00695B99A30E04AE050D0DF
-:10042A00B99830E040E14CD0B199006830E04CE630
-:10043A0047D01A9581F70C9378941F910F910895DC
-:10044A00F8945F9354E0A3E6B0E080936100909340
-:10045A00620000916100109162002AE030E094DEAF
-:10046A00ED9200936100109362005A9591F75F91A3
-:10047A00789408950F931F93ECEFF4E01127E00F9F
-:10048A00F11F04901F910F910895C59A22D0C59823
-:10049A000895C59A1ED01DD01CD01BD0C5980895AA
-:1004AA000F931F932F932AE01FEF0FEF0A95F1F78F
-:1004BA001A95D9F72A95C1F72F911F910F9108958F
-:1004CA0041503040E8F70895415030405040E0F73D
-:1004DA0008950F931F932F9326E00FEF1FEF1A959E
-:1004EA00F1F70A95D9F72A95C1F72F911F910F9124
-:0E04FA000895C0F9A4B0999282F880909CBF3A
+:020000007AC0C4
+:02000800189549
+:0200160002C026
+:10001A0018C00F931F932F933F930FB716B3212F37
+:10002A002C71309171002327209371001C7019F4F0
+:10003A0011E0109360000FBF3F912F911F910F9114
+:10004A0018950F931F932F933F934F935F935FB727
+:10005A004091670045300CF403C044274093670081
+:10006A00403081F49398949895980EF002C00BE072
+:10007A0002C000916500002311F0929A01C0929883
+:10008A0060D29BD1413081F49298949895980091CE
+:10009A00640030916500032B11F0939A01C0939884
+:1000AA00009164004ED289D1423059F492989398C3
+:1000BA009598949A0091630044D2002D0F77002EF0
+:1000CA007CD1433041F4929893989498959A0091F0
+:1000DA00660037D272D14395409367005FBF5F9144
+:1000EA004F913F912F911F910F9118950FED0DBFD1
+:1000FA000FE701BB01EE07BB0CE108BB02E000BF42
+:10010A0005E003BF09E106BF00E20BBF0CE100BD39
+:10011A0003E309B900E002B908E00AB906E003B945
+:10012A0011241092670000E0009360000CE2009333
+:10013A006C0001E000936B0005E000936D0001E0A4
+:10014A0000936E000027009368000093690000EF97
+:10015A0000936A0000E0009371006624CED00091FB
+:10016A006F00083209F405C012E010936000FBD159
+:10017A0001C0F2D180E090E000916000C8D1003067
+:10018A0051F4969820916A0020936600A7D011E056
+:10019A0019BF57D038D0013011F496981CD10230CB
+:1001AA0059F7969AE9CFEE24FF1841E1001F111F73
+:1001BA004A9509F40895EE1CFF1CE21AF30A20F48A
+:1001CA00E20EF31E8894F2CF0894F0CFFF1829E0CC
+:1001DA00001F2A9509F40895FF1CF11A18F4F10E6C
+:1001EA008894F6CF0894F4CF5527442760E13695D2
+:1001FA00279510F4400F511F579547953795279526
+:10020A006A95B9F708950F931F9300916800502ECD
+:10021A0014D000916A00502E10D000B30170502EF5
+:10022A000CD004E0502E09D00027502E1CE005D037
+:10023A001A95E9F71F910F9108955D9BFECF5CB85F
+:10024A0008950F931F932F933F934F935F937F9339
+:10025A0000916800109169002AE030E0C5DF022FA2
+:10026A00132F20916A003327020F131F40916C004D
+:10027A0050916B0060916D004F935F937727461BF7
+:10028A00570BB42EA52E5F914F917727460F571F14
+:10029A00D42EC52E0EF004C0009510950F5F1F4F87
+:1002AA00B016A10624F40D151C054CF40FC040919C
+:1002BA006E00442311F4909801C0909A07C04091AF
+:1002CA006E00442311F4909A01C090987F915F9137
+:1002DA004F913F912F911F910F9108951F9361D0D4
+:1002EA0052E135E54DEB5AD112D010916800812FB9
+:1002FA0010916900912F1F9108950F93BAD003E3CB
+:10030A00802ECCD0AFE6B0E0E8D00F9108950F93DD
+:10031A001F932F933F934F93ACD070FF3CC00CECCC
+:10032A00802EBCD00EEB802EB9D0A8E6B0E0D5D096
+:10033A00A9E6B0E0D2D010916800209169002F930D
+:10034A00287F283F11F0E89407C02F9168941095F0
+:10035A0020951F5F2F4F01C02F912695179526953F
+:10036A0017952695179526951795309168000EF4DE
+:10037A003195432F3F70432F330F330F330F440F01
+:10038A00340F369536953695369510936800209336
+:10039A00690030936A004F913F912F911F910F91FD
+:1003AA0008950F9366D070FF06C00CEC802E76D0AD
+:1003BA0004E4802E73D00F9108950F930F920FB813
+:1003CA0000E40EB90BE10DB9769BFDCFC09AC09837
+:1003DA000F900F9108950F931F932F93062D0023CB
+:1003EA0009F002C06394B8D0013009F00CC00F9331
+:1003FA001F9300916D001AE0E9DE802F9927F09291
+:10040A0066001F910F910091710004FF01C015C091
+:10041A00B49B01C02AC01091710010611093710041
+:10042A00A9D06394162D143011F096D01EC06624FC
+:10043A009AD010E01093600018C0B29B03C0B39B1F
+:10044A000BC013C057E032E54DEFA8D020916D00E4
+:10045A00239520936D0009C057E032E54DEF9ED0F9
+:10046A0020916D002A9520936D002F911F910F9175
+:10047A000895F894B99A33E04EEB8CD0B99830E0ED
+:10048A004AE888D005D033E042E384D078940895CE
+:10049A00B19B716002C0B1997E7F0895F8940F9361
+:1004AA001F93082D18E0069508F448F0B99A30E031
+:1004BA0046E770D0B99830E042E16CD008C0B99AEA
+:1004CA0030E04AE067D0B99830E04EE763D01A9539
+:1004DA0051F71F910F9178940895F8940F931F93F1
+:1004EA00002718E00695B99A30E04AE053D0B99847
+:1004FA0030E040E14FD0B199006830E04CE64AD094
+:10050A001A9581F70C931F910F91789408950F9380
+:10051A005F9353E0A3E6B0E080936100909362009A
+:10052A0000916100109162002AE030E03CDEED9219
+:10053A0000936100109362005A9591F75F910F91B1
+:10054A0008950F931F93E0EDF5E01127E00FF11FD7
+:10055A0004901F910F910895C59A53E039EA4DE727
+:10056A001DD0C5980895C59A5CE034E34DEF16D0C6
+:10057A00C59808950F931F932F932AE01FEF0FEF4B
+:10058A000A95F1F71A95D9F72A95C1F72F911F9174
+:10059A000F91089541503040E8F708954150304096
+:1005AA005040E0F708950F931F932F9326E00FEF23
+:1005BA001FEF1A95F1F70A95D9F72A95C1F72F91E6
+:1005CA001F910F910895C0F9A4B0999282F8809072
+:0405DA009CBFC68973
:00000001FF
diff --git a/nbproject/Makefile-genesis.properties b/nbproject/Makefile-genesis.properties
index 9b921d1..f7e7100 100644
--- a/nbproject/Makefile-genesis.properties
+++ b/nbproject/Makefile-genesis.properties
@@ -1,13 +1,13 @@
#
-#Sun Jun 25 21:34:52 MSK 2023
+#Wed Jun 28 17:31:11 MSK 2023
default.languagetoolchain.version=2.2.7
default.Pack.dfplocation=/home/sergeyyarkov/.mchp_packs/Microchip/ATtiny_DFP/3.0.151
-default.com-microchip-mplab-mdbcore-simulator-Simulator.md5=19e4dc0f223322f74cda227c3c12c71c
conf.ids=default
default.languagetoolchain.dir=/usr/bin
-host.id=2l3s-yrgx-1d
-configurations-xml=6a01ab9659d148a99244ed826cfd39c3
+host.id=cf4f-twrn-b
+configurations-xml=85db3bcfcc45f311e22a744cb34722f8
default.com-microchip-mplab-nbide-toolchain-avrasm-AVRASMLanguageToolchain.md5=0e94da8ed93e9650ffef50929833a79f
+default.com-microchip-mplab-mdbcore-snap-SnapToolImpl.md5=eaa336cefb7fc46db8b50b7b2b6e54ca
com-microchip-mplab-nbide-embedded-makeproject-MakeProject.md5=6e02ca5e9f5042ffd365b42ab82d3a9b
user-defined-mime-resolver-xml=none
proj.dir=/home/sergeyyarkov/Documents/Projects/Firmwares/AVR/attiny2313a_thermostat.X
diff --git a/nbproject/configurations.xml b/nbproject/configurations.xml
index 35c4e4e..0841790 100644
--- a/nbproject/configurations.xml
+++ b/nbproject/configurations.xml
@@ -33,7 +33,7 @@
ATtiny2313A
- Simulator
+ snap
AVRASM
2.2.7
2
@@ -79,949 +79,52 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -1036,6 +139,10 @@
-
+
+
+
+
-
@@ -1044,7 +151,58 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/nbproject/private/configurations.xml b/nbproject/private/configurations.xml
index 91b0ab4..8f81bb3 100644
--- a/nbproject/private/configurations.xml
+++ b/nbproject/private/configurations.xml
@@ -4,7 +4,7 @@
0
-
+ :=MPLABComm-USB-Microchip:=<vid>03EB:=<pid>2180:=<rev>0100:=<man>Microchip Technology Incorporated:=<prod>MPLAB Snap ICD CMSIS-DAP:=<sn>BUR205073320:=<drv>x:=<xpt>h:=end
/usr/bin
place holder 1
diff --git a/nbproject/private/private.xml b/nbproject/private/private.xml
index 2ba85cb..680ae85 100644
--- a/nbproject/private/private.xml
+++ b/nbproject/private/private.xml
@@ -3,11 +3,12 @@
- file:/home/sergeyyarkov/Documents/Projects/Firmwares/AVR/attiny2313a_thermostat.X/mpy16u.asm
- file:/home/sergeyyarkov/Documents/Projects/Firmwares/AVR/attiny2313a_thermostat.X/NOTES.md
file:/home/sergeyyarkov/Documents/Projects/Firmwares/AVR/attiny2313a_thermostat.X/main.asm
- file:/home/sergeyyarkov/Documents/Projects/Firmwares/AVR/attiny2313a_thermostat.X/README.md
file:/home/sergeyyarkov/Documents/Projects/Firmwares/AVR/attiny2313a_thermostat.X/macros.asm
+ file:/home/sergeyyarkov/Documents/Projects/Firmwares/AVR/attiny2313a_thermostat.X/README.md
+ file:/home/sergeyyarkov/Documents/Projects/Firmwares/AVR/attiny2313a_thermostat.X/NOTES.md
+ file:/home/sergeyyarkov/Documents/Projects/Firmwares/AVR/attiny2313a_thermostat.X/mpy16u.asm
+ file:/home/sergeyyarkov/Documents/Projects/Firmwares/AVR/attiny2313a_thermostat.X/div16u.asm
file:/home/sergeyyarkov/Documents/Projects/Firmwares/AVR/attiny2313a_thermostat.X/definitions.asm