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