From aaa9318a16aba9b114f7ca0ce4a657c234e1889d Mon Sep 17 00:00:00 2001 From: sergeyyarkov Date: Sat, 24 Jun 2023 17:26:41 +0300 Subject: [PATCH] check sensor family code --- definitions.asm | 15 +- .../attiny2313a_thermostat.X.production.hex | 108 +- .../attiny2313a_thermostat.X.production.lss | 921 ++++++++++-------- .../attiny2313a_thermostat.X.production.map | 119 ++- .../attiny2313a_thermostat.X.production.obj | Bin 4534 -> 4939 bytes .../attiny2313a_thermostat.X.production.tmp | 127 +-- main.asm | 174 +++- main.hex | 113 ++- 8 files changed, 949 insertions(+), 628 deletions(-) diff --git a/definitions.asm b/definitions.asm index de2c775..e9bd29a 100644 --- a/definitions.asm +++ b/definitions.asm @@ -58,4 +58,17 @@ .EQU MCU_STATE_DEFAULT = 0x00 ; Режим измерения температуры и сравнения с заданными параметрами .EQU MCU_STATE_PROGRAM = 0x01 ; Режим настройки параметров в EEPROM -.EQU MCU_STATE_ERROR = 0x02 ; Режим ошибки, например когда не подключен датчик \ No newline at end of file +.EQU MCU_STATE_ERROR = 0x02 ; Режим ошибки, например когда не подключен датчик + +; **** СТАНДАРТНЫЕ ПАРАМЕТРЫ *********************************** + +; Отдельно задается целая и дробная часть в точности до десятых +; Например: 30.5 градусов +.EQU DEFAULT_SETTING_INT = 29 +.EQU DEFAULT_SETTING_F = 5 // 0.5 + +.EQU DEFAULT_SETTING_HYST = 5 // 0.5 + +.EQU HEAT_MODE = 1 +.EQU COOLING_MODE = 0 +.EQU DEFAULT_SETTING_MODE = HEAT_MODE \ No newline at end of file diff --git a/dist/default/production/attiny2313a_thermostat.X.production.hex b/dist/default/production/attiny2313a_thermostat.X.production.hex index 516688e..c61bc10 100644 --- a/dist/default/production/attiny2313a_thermostat.X.production.hex +++ b/dist/default/production/attiny2313a_thermostat.X.production.hex @@ -7,59 +7,65 @@ :10004A000F931F935FB74091670045300CF403C0CC :10005A00442740936700403081F493989498959888 :10006A000EF002C00BE002C000916500002311F0FF -:10007A00929A01C092986BD1E6D0413081F492985D +:10007A00929A01C0929898D113D1413081F4929802 :10008A00949895980091640030916500032B11F0C3 -:10009A00939A01C093980091640059D1D4D0423008 -:1000AA0059F4929893989598949A009163004FD135 -:1000BA00002D0F77002EC7D0433041F492989398C1 -:1000CA009498959A00916C0042D1BDD04395409383 +:10009A00939A01C093980091640086D101D14230AD +:1000AA0059F4929893989598949A009163007CD108 +:1000BA00002D0F77002EF4D0433041F49298939894 +:1000CA009498959A00916B006FD1EAD0439540932A :1000DA0067005FBF1F910F915F914F9118950FEDC8 :1000EA000DBF0FE701BB01EE07BB0CE108BB02E045 :1000FA0000BF05E003BF09E106BF00E20BBF0CE148 -:10010A0000BD11241092670000E0009360000027F0 -:10011A0000936A0000936B0000EF00936C0022D1F9 -:10012A0080E090E000916000003029F49698F5D0C4 -:10013A0027D001E009BF013019F49698EED08FD08C -:10014A00023081F7969A1BE01093630010936400C3 -:10015A001093650010936600E5CFEE24FF1841E185 -:10016A00001F111F4A9509F40895EE1CFF1CE21A9C -:10017A00F30A20F4E20EF31E8894F2CF0894F0CF2B -:10018A001F9357D052E13DE84DEF0BD108D01091A3 -:10019A006A00812F10916B00912F1F9108950F9380 -:1001AA001F932F933F934F9368D00CEC802E7AD0F5 -:1001BA000EEB802E77D0AAE6B0E095D0ABE6B0E0A1 -:1001CA0092D010916A0020916B002F93287F283FCC -:1001DA0011F0E89409C02F9168941095209531E0A8 -:1001EA00130F30E0231F01C02F91269517952695EE -:1001FA001795269517952695179530916A000EF44E -:10020A003195432F3F70432F330F330F330F440F72 -:10021A00340F369536953695369510936A002093A5 -:10022A006B0030936C004F913F912F911F910F916A -:10023A0008950F9322D00CEC802E34D004E4802E43 -:10024A0031D00F9108950F930FB800E40EB90BE166 -:10025A000DB9769BFDCFC09AC0980F9108950F9360 -:10026A008CD0B29B0196B39B0197B49B01C003C08B -:10027A0000E0009360000F910895F894B99A33E072 -:10028A004EEB8BD0B99830E04AE887D005D033E0FE -:10029A0042E383D078940895B19B716002C0B1990A -:1002AA007E7F08950F931F93082D18E0069508F492 -:1002BA0058F0F894B99A30E046E76FD0B99830E030 -:1002CA0042E16BD078940AC0F894B99A30E04AE0D7 -:1002DA0064D0B99830E04EE760D078941A9531F737 -:1002EA001F910F9108950F931F93002718E0F89418 -:1002FA000695B99A30E04AE050D0B99830E040E12A -:10030A004CD0B199006830E04CE647D01A9581F795 -:10031A000C9378941F910F910895F8945F9354E089 -:10032A00A3E6B0E0809361009093620000916100BF -:10033A00109162002AE030E010DFED920093610034 -:10034A00109362005A9591F75F91789408950F93EC -:10035A001F93E6EDF3E01127E00FF11F04901F91C0 -:10036A000F910895C59A22D0C5980895C59A1ED0AE -:10037A001DD01CD01BD0C59808950F931F932F939F -:10038A002AE01FEF0FEF0A95F1F71A95D9F72A9588 -:10039A00C1F72F911F910F91089541503040E8F70E -:1003AA000895415030405040E0F708950F931F934D -:1003BA002F9326E00FEF1FEF1A95F1F70A95D9F759 -:1003CA002A95C1F72F911F910F910895C0F9A4B0F2 -:0803DA00999282F880909CBF0B +:10010A0000BD11241092670000E0009360000DE129 +:10011A0000936C0005E000936D0005E000936E000B +:10012A0001E000936F0000270093690000936A00C2 +:10013A0000EF00936B0050D000917000003109F479 +:10014A0005C012E0109360003ED101C038D180E0B2 +:10015A0090E000916000003031F496980BD129D0DC +:10016A0001E009BF25D0013019F4969803D1A4D033 +:10017A00023079F7969A1BE010936300109364009B +:10018A001093650010936600E4CFEE24FF1841E156 +:10019A00001F111F4A9509F40895EE1CFF1CE21A6C +:1001AA00F30A20F4E20EF31E8894F2CF0894F0CFFB +:1001BA0008951F936BD05CE034E34DEF1FD15CE0F0 +:1001CA0034E34DEF1BD118D010916900812F1091A3 +:1001DA006A00912F1F9108950F937CD00CEC802E0A +:1001EA008ED00EEB802E8BD0A0E7B0E008E0A8D02E +:1001FA000A95E9F70F9108950F931F932F933F9351 +:10020A004F9368D00CEC802E7AD00EEB802E77D0EC +:10021A00A9E6B0E095D0AAE6B0E092D010916900C4 +:10022A0020916A002F93287F283F11F0E89409C093 +:10023A002F9168941095209531E0130F30E0231F19 +:10024A0001C02F91269517952695179526951795EE +:10025A0026951795309169000EF43195432F3F701A +:10026A00432F330F330F330F440F340F3695369520 +:10027A00369536951093690020936A0030936B0087 +:10028A004F913F912F911F910F9108950F9322D073 +:10029A000CEC802E34D004E4802E31D00F910895D6 +:1002AA000F930FB800E40EB90BE10DB9769BFDCFA1 +:1002BA00C09AC0980F9108950F938CD0B29B019663 +:1002CA00B39B0197B49B01C003C000E00093600098 +:1002DA000F910895F894B99A33E04EEB8BD0B99800 +:1002EA0030E04AE887D005D033E042E383D07894FF +:1002FA000895B19B716002C0B1997E7F08950F93F2 +:10030A001F93082D18E0069508F458F0F894B99A46 +:10031A0030E046E76FD0B99830E042E16BD078948C +:10032A000AC0F894B99A30E04AE064D0B99830E04B +:10033A004EE760D078941A9531F71F910F9108957E +:10034A000F931F93002718E0F8940695B99A30E0A6 +:10035A004AE050D0B99830E040E14CD0B1990068F9 +:10036A0030E04CE647D01A9581F70C9378941F91A8 +:10037A000F910895F8945F9354E0A3E6B0E0809358 +:10038A0061009093620000916100109162002AE07E +:10039A0030E0FBDEED9200936100109362005A9503 +:1003AA0091F75F91789408950F931F93E0E3F4E037 +:1003BA001127E00FF11F04901F910F910895C59A1C +:1003CA0022D0C5980895C59A1ED01DD01CD01BD026 +:1003DA00C59808950F931F932F932AE01FEF0FEFED +:1003EA000A95F1F71A95D9F72A95C1F72F911F9116 +:1003FA000F91089541503040E8F708954150304038 +:10040A005040E0F708950F931F932F9326E00FEFC4 +:10041A001FEF1A95F1F70A95D9F72A95C1F72F9187 +:10042A001F910F910895C0F9A4B0999282F8809013 +:02043A009CBF65 :00000001FF diff --git a/dist/default/production/attiny2313a_thermostat.X.production.lss b/dist/default/production/attiny2313a_thermostat.X.production.lss index 36c17bb..7167675 100644 --- a/dist/default/production/attiny2313a_thermostat.X.production.lss +++ b/dist/default/production/attiny2313a_thermostat.X.production.lss @@ -1,26 +1,26 @@ -AVRASM ver. 2.2.7 main.asm Fri Jun 23 16:35:36 2023 +AVRASM ver. 2.2.7 main.asm Sat Jun 24 17:26:02 2023 [builtin](2): Including file '/home/sergeyyarkov/.mchp_packs/Microchip/ATtiny_DFP/3.0.151/avrasm/inc\tn2313Adef.inc' main.asm(15): Including file 'definitions.asm' main.asm(16): Including file 'macros.asm' -main.asm(265): Including file 'div16u.asm' +main.asm(294): Including file 'div16u.asm' div16u.asm(22): warning: Register r16 already defined by the .DEF directive -main.asm(265): 'div16u.asm' included form here +main.asm(294): 'div16u.asm' included form here div16u.asm(23): warning: Register r17 already defined by the .DEF directive -main.asm(265): 'div16u.asm' included form here +main.asm(294): 'div16u.asm' included form here div16u.asm(24): warning: Register r16 already defined by the .DEF directive -main.asm(265): 'div16u.asm' included form here +main.asm(294): 'div16u.asm' included form here div16u.asm(25): warning: Register r17 already defined by the .DEF directive -main.asm(265): 'div16u.asm' included form here +main.asm(294): 'div16u.asm' included form here div16u.asm(27): warning: Register r19 already defined by the .DEF directive -main.asm(265): 'div16u.asm' included form here +main.asm(294): 'div16u.asm' included form here div16u.asm(28): warning: Register r20 already defined by the .DEF directive -main.asm(265): 'div16u.asm' included form here +main.asm(294): 'div16u.asm' included form here [builtin](2): Including file '/home/sergeyyarkov/.mchp_packs/Microchip/ATtiny_DFP/3.0.151/avrasm/inc\tn2313Adef.inc' main.asm(15): Including file 'definitions.asm' main.asm(16): Including file 'macros.asm' -main.asm(265): Including file 'div16u.asm' +main.asm(294): Including file 'div16u.asm' ; @@ -796,6 +796,19 @@ main.asm(265): Including file 'div16u.asm' .EQU MCU_STATE_DEFAULT = 0x00 ; Режим измерения температуры и сравнения с заданными параметрами .EQU MCU_STATE_PROGRAM = 0x01 ; Режим настройки параметров в EEPROM + .EQU MCU_STATE_ERROR = 0x02 ; Режим ошибки, например когда не подключен датчик + + ; **** СТАНДАРТНЫЕ ПАРАМЕТРЫ *********************************** + + ; Отдельно задается целая и дробная часть в точности до десятых + ; Например: 30.5 градусов + .EQU DEFAULT_SETTING_INT = 29 + .EQU DEFAULT_SETTING_F = 5 // 0.5 + + .EQU DEFAULT_SETTING_HYST = 5 // 0.5 + + .EQU HEAT_MODE = 1 + .EQU COOLING_MODE = 0 .INCLUDE "macros.asm" ldi @0, @2 @@ -847,10 +860,14 @@ main.asm(265): Including file 'div16u.asm' 000063 DIGITS: .BYTE 4 ; Ячейки, где хранятся символы, для вывода на индикатор 000067 CURRENT_DIGIT: .BYTE 1 ; Номер разряда индикатора, который сейчас горит 000068 SW_FLAGS: .BYTE 1 ; Состояние кнопок -000069 HYSTERESIS: .BYTE 1 ; Отклонение температуры от уставки -00006a TEMP_L: .BYTE 1 ; Младший байт температуры -00006b TEMP_H: .BYTE 1 ; Старший байт температуры -00006c TEMP_F: .BYTE 1 ; Дробная часть +000069 TEMP_L: .BYTE 1 ; Младший байт температуры +00006a TEMP_H: .BYTE 1 ; Старший байт температуры +00006b TEMP_F: .BYTE 1 ; Дробная часть +00006c SETTING_INT: .BYTE 1 ; Уставка: целая часть +00006d SETTING_F: .BYTE 1 ; Уставка: дробная часть +00006e SETTING_HYST: .BYTE 1 ; Гистерезис: отклонение от уставки +00006f SETTING_MODE: .BYTE 1 ; Режим работы: '1' - нагрев; '0' - 'охлаждение' +000070 DEVICE_FAMILY_CODE: .BYTE 1 ; Должно быть 0x10 для DS18B20 ;// @@ -941,8 +958,8 @@ main.asm(265): Including file 'div16u.asm' 00003d 9a92 sbi PORTD, DIGIT_1_PIN 00003e c001 rjmp PC+2 00003f 9892 cbi PORTD, DIGIT_1_PIN -000040 d16b rcall DISPLAY_DECODER -000041 d0e6 rcall USI_TRANSMIT +000040 d198 rcall DISPLAY_DECODER +000041 d113 rcall USI_TRANSMIT _indicate_2: 000042 3041 cpi r20, 1 @@ -959,8 +976,8 @@ main.asm(265): Including file 'div16u.asm' 00004e c001 rjmp PC+2 00004f 9893 cbi PORTD, DIGIT_2_PIN 000050 9100 0064 lds TEMP_REG_A, DIGITS+1 -000052 d159 rcall DISPLAY_DECODER -000053 d0d4 rcall USI_TRANSMIT +000052 d186 rcall DISPLAY_DECODER +000053 d101 rcall USI_TRANSMIT _indicate_3: 000054 3042 cpi r20, 2 @@ -971,12 +988,12 @@ main.asm(265): Including file 'div16u.asm' 000058 9895 cbi PORTD, DIGIT_4_PIN 000059 9a94 sbi PORTD, DIGIT_3_PIN 00005a 9100 0063 lds TEMP_REG_A, DIGITS -00005c d14f rcall DISPLAY_DECODER +00005c d17c rcall DISPLAY_DECODER ; зажигаем точку 00005d 2d00 mov r16, r0 00005e 770f cbr r16, (1<<7) 00005f 2e00 mov r0, r16 -000060 d0c7 rcall USI_TRANSMIT +000060 d0f4 rcall USI_TRANSMIT _indicate_4: 000061 3043 cpi r20, 3 @@ -986,9 +1003,9 @@ main.asm(265): Including file 'div16u.asm' 000064 9893 cbi PORTD, DIGIT_2_PIN 000065 9894 cbi PORTD, DIGIT_3_PIN 000066 9a95 sbi PORTD, DIGIT_4_PIN -000067 9100 006c lds TEMP_REG_A, TEMP_F -000069 d142 rcall DISPLAY_DECODER -00006a d0bd rcall USI_TRANSMIT +000067 9100 006b lds TEMP_REG_A, TEMP_F +000069 d16f rcall DISPLAY_DECODER +00006a d0ea rcall USI_TRANSMIT _indicate_exit: 00006b 9543 inc r20 @@ -1010,50 +1027,74 @@ main.asm(265): Including file 'div16u.asm' // ; **** ПРОЦЕСС ИНИЦИАЛИЗАЦИИ МК ********************************** MCU_INIT: - ; **** ИНИЦИАЛИЗАЦИЯ ПИНОВ ************************************* + ; **** ИНИЦИАЛИЗАЦИЯ ПИНОВ ************************************* 000076 e70f -000077 bb01 outi r16, DDRD, (1< @@ -1062,33 +1103,34 @@ main.asm(265): Including file 'div16u.asm' ; **** ГЛАВНЫЙ ЦИКЛ ********************************************** LOOP: ; rcall DISPLAY_UPD_DIGITS -000097 9100 0060 lds r16, MCU_STATE ; получаем текущее состояние МК +0000ae 9100 0060 lds r16, MCU_STATE ; получаем текущее состояние МК _STATE_DEFAULT: -000099 3000 cpi r16, MCU_STATE_DEFAULT -00009a f429 brne _STATE_PROGRAM -00009b 9896 cbi LED_ERR_PORT, LED_ERR_PIN -00009c d0f5 rcall DISPLAY_UPD_DIGITS -00009d d027 rcall TEMP_UPD -00009e e001 -00009f bf09 outi r16, TIMSK, (1< @@ -1126,167 +1168,268 @@ main.asm(265): Including file 'div16u.asm' ;***** Code div16u: -0000b2 24ee clr drem16uL ; clear remainder Low byte -0000b3 18ff sub drem16uH,drem16uH ; clear remainder High byte and carry -0000b4 e141 ldi dcnt16u,17 ; init loop counter +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 d16u_1: -0000b5 1f00 rol dd16uL ; shift left dividend -0000b6 1f11 rol dd16uH -0000b7 954a dec dcnt16u ; decrement counter -0000b8 f409 brne d16u_2 ; if done -0000b9 9508 ret ; return +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 d16u_2: -0000ba 1cee rol drem16uL ; shift dividend into remainder -0000bb 1cff rol drem16uH -0000bc 1ae2 sub drem16uL,dv16uL ; remainder = remainder - divisor -0000bd 0af3 sbc drem16uH,dv16uH -0000be f420 brcc d16u_3 ; if result negative -0000bf 0ee2 add drem16uL,dv16uL ; restore remainder -0000c0 1ef3 adc drem16uH,dv16uH -0000c1 9488 clc ; clear carry to be shifted into result -0000c2 cff2 rjmp d16u_1 ; else +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 d16u_3: -0000c3 9408 sec ; set carry to be shifted into result -0000c4 cff0 +0000db 9408 sec ; set carry to be shifted into result +0000dc cff0 + TEMP_COMPARSION: + ; push r16 + ; push r17 + ; push r18 + ; push r19 + ; push r20 + ; push r21 + ; push r22 + ; + ; lds r16, TEMP_L + ; lds r17, TEMP_H // всегда 0? + ; lds r18, TEMP_F + ; lds r19, SETTING_INT + ; lds r20, SETTING_F + ; lds r21, SETTING_MODE + ; + ; brtc _START_COMPARSION + ; neg r19 + ; + ;_START_COMPARSION: + ; tst r21 + ; brne _HEATING + ;_COOLING: + ; rjmp _COMPARSION_EXIT + ;_HEATING: + ; cp r16, r19 + ; brge _HEATING_GREATER_OR_E ; если целая часть текущей температуры <= уставки - продолжаем сравнение + ; brtc PC+3 + ; relay_off + ; rjmp PC+2 + ; relay_on ; c + ; rjmp _COMPARSION_EXIT + ;_HEATING_GREATER_OR_E: + ; cp r16, r19 + ; breq _HEATING_GREATER_E + ; brtc PC+3 + ; relay_on + ; rjmp PC+2 + ; relay_off ; c + ; rjmp _COMPARSION_EXIT + ;_HEATING_GREATER_E: + ; brtc PC+3 + ; relay_off + ; rjmp PC+2 + ; relay_on ; c + ; cp r18, r20 + ; brge PC+2 ; если дробная часть текущей температуры >= уставки - выключаем реле + ; rjmp _COMPARSION_EXIT + ;_HEATING_GREATER_OR_E_F: + ; cp r18, r20 + ; breq _HEATING_GREATER_E_F + ; brtc PC+3 + ; relay_on + ; rjmp PC+2 + ; relay_off ; c + ; rjmp _COMPARSION_EXIT + ;_HEATING_GREATER_E_F: + ; brtc PC+3 + ; relay_on + ; rjmp PC+2 + ; relay_off ; c + ; + ;_COMPARSION_EXIT: + ; pop r22 + ; pop r21 + ; pop r20 + ; pop r19 + ; pop r18 + ; pop r17 + ; pop r16 +0000dd 9508 ret + // TEMP_UPD: -0000c5 931f push r17 -0000c6 d057 rcall TEMP_CONV -0000c7 e152 -0000c8 e83d -0000c9 ef4d -0000ca d10b DELAY24 760000 -0000cb d008 rcall TEMP_RD +0000de 931f push r17 +0000df d06b rcall TEMP_CONV +0000e0 e05c +0000e1 e334 +0000e2 ef4d +0000e3 d11f DELAY24 500000 +0000e4 e05c +0000e5 e334 +0000e6 ef4d +0000e7 d11b DELAY24 500000 +0000e8 d018 rcall TEMP_RD ; обновляем данные в ячейках -0000cc 9110 006a lds r17, TEMP_L -0000ce 2f81 mov DISP_NUM_L, r17 -0000cf 9110 006b lds r17, TEMP_H -0000d1 2f91 mov DISP_NUM_H, r17 -0000d2 911f pop r17 -0000d3 9508 ret// +0000e9 9110 0069 lds r17, TEMP_L +0000eb 2f81 mov DISP_NUM_L, r17 +0000ec 9110 006a lds r17, TEMP_H +0000ee 2f91 mov DISP_NUM_H, r17 +0000ef 911f pop r17 +0000f0 9508 ret + // + + // + RD_F_CODE: +0000f1 930f push r16 + +0000f2 d07c rcall OW_PRESENCE +0000f3 ec0c ldi r16, DS18B20_CMD_SKIPROM +0000f4 2e80 mov OW_CMD_r, r16 +0000f5 d08e rcall OW_SEND_BYTE + +0000f6 eb0e ldi r16, DS18B20_CMD_RSCRATCHPAD +0000f7 2e80 mov OW_CMD_r, r16 +0000f8 d08b rcall OW_SEND_BYTE + +0000f9 e7a0 ldi XL, LOW(DEVICE_FAMILY_CODE) +0000fa e0b0 ldi XH, HIGH(DEVICE_FAMILY_CODE) + +0000fb e008 ldi r16, 8 + _RD_L: +0000fc d0a8 rcall OW_RD_BYTE +0000fd 950a dec r16 +0000fe f7e9 brne _RD_L + +0000ff 910f pop r16 +000100 9508 ret// - // TEMP_RD: -0000d4 930f push r16 -0000d5 931f push r17 -0000d6 932f push r18 -0000d7 933f push r19 -0000d8 934f push r20 +000101 930f push r16 +000102 931f push r17 +000103 932f push r18 +000104 933f push r19 +000105 934f push r20 ; cli -0000d9 d068 rcall OW_PRESENCE -0000da ec0c ldi r16, DS18B20_CMD_SKIPROM -0000db 2e80 mov OW_CMD_r, r16 -0000dc d07a rcall OW_SEND_BYTE +000106 d068 rcall OW_PRESENCE +000107 ec0c ldi r16, DS18B20_CMD_SKIPROM +000108 2e80 mov OW_CMD_r, r16 +000109 d07a rcall OW_SEND_BYTE -0000dd eb0e ldi r16, DS18B20_CMD_RSCRATCHPAD -0000de 2e80 mov OW_CMD_r, r16 -0000df d077 rcall OW_SEND_BYTE +00010a eb0e ldi r16, DS18B20_CMD_RSCRATCHPAD +00010b 2e80 mov OW_CMD_r, r16 +00010c d077 rcall OW_SEND_BYTE -0000e0 e6aa ldi XL, LOW(TEMP_L) -0000e1 e0b0 ldi XH, HIGH(TEMP_L) -0000e2 d095 rcall OW_RD_BYTE +00010d e6a9 ldi XL, LOW(TEMP_L) +00010e e0b0 ldi XH, HIGH(TEMP_L) +00010f d095 rcall OW_RD_BYTE -0000e3 e6ab ldi XL, LOW(TEMP_H) -0000e4 e0b0 ldi XH, HIGH(TEMP_H) -0000e5 d092 rcall OW_RD_BYTE +000110 e6aa ldi XL, LOW(TEMP_H) +000111 e0b0 ldi XH, HIGH(TEMP_H) +000112 d092 rcall OW_RD_BYTE -0000e6 9110 006a lds r17, TEMP_L -0000e8 9120 006b lds r18, TEMP_H +000113 9110 0069 lds r17, TEMP_L +000115 9120 006a lds r18, TEMP_H -0000ea 932f push r18 -0000eb 7f28 cbr r18, (1<<0) | (1<<1) | (1<<2) ; убираем ненужные биты на время (интересуют последних битов в TEMP_H) -0000ec 3f28 cpi r18, 0xf8 ; проверяется является ли число минусовой -0000ed f011 breq _TEMP_RD_TO_UNSIGNED ; если да то конвертируем в беззнаковое число -0000ee 94e8 clt -0000ef c009 rjmp _TEMP_RD_CONTINUE ; если нет то преобразуем значение АЦП в температуру (делим на 16) +000117 932f push r18 +000118 7f28 cbr r18, (1<<0) | (1<<1) | (1<<2) ; убираем ненужные биты на время (интересуют последних битов в TEMP_H) +000119 3f28 cpi r18, 0xf8 ; проверяется является ли число минусовой +00011a f011 breq _TEMP_RD_TO_UNSIGNED ; если да то конвертируем в беззнаковое число +00011b 94e8 clt +00011c c009 rjmp _TEMP_RD_CONTINUE ; если нет то преобразуем значение АЦП в температуру (делим на 16) _TEMP_RD_TO_UNSIGNED: -0000f0 912f pop r18 -0000f1 9468 set -0000f2 9510 com r17 -0000f3 9520 com r18 -0000f4 e031 ldi r19, 1 -0000f5 0f13 add r17, r19 -0000f6 e030 ldi r19, 0 -0000f7 1f23 adc r18, r19 -0000f8 c001 rjmp PC+2 +00011d 912f pop r18 +00011e 9468 set +00011f 9510 com r17 +000120 9520 com r18 +000121 e031 ldi r19, 1 +000122 0f13 add r17, r19 +000123 e030 ldi r19, 0 +000124 1f23 adc r18, r19 +000125 c001 rjmp PC+2 _TEMP_RD_CONTINUE: ; Температура = Число с АЦП / 16 (сдвиг вправо 4) -0000f9 912f pop r18 -0000fa 9526 lsr r18 -0000fb 9517 ror r17 -0000fc 9526 lsr r18 -0000fd 9517 ror r17 -0000fe 9526 lsr r18 -0000ff 9517 ror r17 -000100 9526 lsr r18 -000101 9517 ror r17 +000126 912f pop r18 +000127 9526 lsr r18 +000128 9517 ror r17 +000129 9526 lsr r18 +00012a 9517 ror r17 +00012b 9526 lsr r18 +00012c 9517 ror r17 +00012d 9526 lsr r18 +00012e 9517 ror r17 _TEMP_RD_END: -000102 9130 006a lds r19, TEMP_L -000104 f40e brtc PC+2 -000105 9531 neg r19 ; переводим в беззнаковое число если минус +00012f 9130 0069 lds r19, TEMP_L +000131 f40e brtc PC+2 +000132 9531 neg r19 ; переводим в беззнаковое число если минус ; далее происходит такое для получения дробной части: ; ((n<<3) + (n<<1))>>4 или (n*10)/16 -000106 2f43 mov r20, r19 -000107 703f andi r19, 0x0f -000108 2f43 mov r20, r19 -000109 0f33 lsl r19 -00010a 0f33 lsl r19 -00010b 0f33 lsl r19 +000133 2f43 mov r20, r19 +000134 703f andi r19, 0x0f +000135 2f43 mov r20, r19 +000136 0f33 lsl r19 +000137 0f33 lsl r19 +000138 0f33 lsl r19 -00010c 0f44 lsl r20 +000139 0f44 lsl r20 -00010d 0f34 add r19, r20 +00013a 0f34 add r19, r20 -00010e 9536 lsr r19 -00010f 9536 lsr r19 -000110 9536 lsr r19 -000111 9536 lsr r19 +00013b 9536 lsr r19 +00013c 9536 lsr r19 +00013d 9536 lsr r19 +00013e 9536 lsr r19 ; записываем данные -000112 9310 006a sts TEMP_L, r17 -000114 9320 006b sts TEMP_H, r18 -000116 9330 006c sts TEMP_F, r19 +00013f 9310 0069 sts TEMP_L, r17 +000141 9320 006a sts TEMP_H, r18 +000143 9330 006b sts TEMP_F, r19 ; sei -000118 914f pop r20 -000119 913f pop r19 -00011a 912f pop r18 -00011b 911f pop r17 -00011c 910f pop r16 -00011d 9508 ret +000145 914f pop r20 +000146 913f pop r19 +000147 912f pop r18 +000148 911f pop r17 +000149 910f pop r16 +00014a 9508 ret ; TEMP_CONV: -00011e 930f push r16 +00014b 930f push r16 ; cli -00011f d022 rcall OW_PRESENCE -000120 ec0c ldi r16, DS18B20_CMD_SKIPROM -000121 2e80 mov OW_CMD_r, r16 -000122 d034 rcall OW_SEND_BYTE +00014c d022 rcall OW_PRESENCE +00014d ec0c ldi r16, DS18B20_CMD_SKIPROM +00014e 2e80 mov OW_CMD_r, r16 +00014f d034 rcall OW_SEND_BYTE -000123 e404 ldi r16, DS18B20_CMD_CONVERTTEMP -000124 2e80 mov OW_CMD_r, r16 -000125 d031 rcall OW_SEND_BYTE +000150 e404 ldi r16, DS18B20_CMD_CONVERTTEMP +000151 2e80 mov OW_CMD_r, r16 +000152 d031 rcall OW_SEND_BYTE ; sei -000126 910f pop r16 -000127 9508 ret +000153 910f pop r16 +000154 9508 ret // // ; **** ОТПРАВКА БАЙТА В СДВИГОВЫЙ РЕГИСТР ************************* USI_TRANSMIT: -000128 930f push r16 -000129 b80f out USIDR, r0 ; Байт для отправки всегда находится в регистре r0. Помещаем данные в регистр USIDR. +000155 930f push r16 +000156 b80f out USIDR, r0 ; Байт для отправки всегда находится в регистре r0. Помещаем данные в регистр USIDR. ; Enable USI Overflow Interrupt Flag (will be 0 if transfer is not compeleted) -00012a e400 ldi TEMP_REG_A, (1< USI Clock Source Select ; USICLK <--------------> USI Clock Strobe ; USITC <--------------> USI Toggle Clock (Enable clock generation) -00012c e10b ldi TEMP_REG_A, (1< +00015d 9ac0 sbi PORTB, USI_LATCH_PIN +00015e 98c0 cbi PORTB, USI_LATCH_PIN +00015f 910f pop r16 +000160 9508 ret// // SW_CHECK_PROCESS: -000134 930f push r16 -000135 d08c rcall DEBOUNCE_SW -000136 9bb2 sbis SW_PIN, SW_PLUS_PIN -000137 9601 adiw DISP_NUM_L, 1 +000161 930f push r16 +000162 d08c rcall DEBOUNCE_SW +000163 9bb2 sbis SW_PIN, SW_PLUS_PIN +000164 9601 adiw DISP_NUM_L, 1 -000138 9bb3 sbis SW_PIN, SW_MINUS_PIN -000139 9701 sbiw DISP_NUM_L, 1 +000165 9bb3 sbis SW_PIN, SW_MINUS_PIN +000166 9701 sbiw DISP_NUM_L, 1 -00013a 9bb4 sbis SW_PIN, SW_SET_PIN -00013b c001 rjmp _INTO_DEFAULT_STATE -00013c c003 rjmp _SW_CHECK_PROCESS_END +000167 9bb4 sbis SW_PIN, SW_SET_PIN +000168 c001 rjmp _INTO_DEFAULT_STATE +000169 c003 rjmp _SW_CHECK_PROCESS_END _INTO_DEFAULT_STATE: -00013d e000 ldi r16, MCU_STATE_DEFAULT -00013e 9300 0060 sts MCU_STATE, r16 +00016a e000 ldi r16, MCU_STATE_DEFAULT +00016b 9300 0060 sts MCU_STATE, r16 _SW_CHECK_PROCESS_END: -000140 910f pop r16 -000141 9508 ret +00016d 910f pop r16 +00016e 9508 ret // // // ; **** ОПРОС ПРИСУТСТВИЯ УСТРОЙСТВА ****************************** OW_PRESENCE: -000142 94f8 cli -000143 9ab9 ow_pull -000144 e033 -000145 eb4e -000146 d08b DELAY16 480 -000147 98b9 ow_release -000148 e030 -000149 e84a -00014a d087 DELAY16 70 -00014b d005 rcall OW_CHECK_PRESENCE -00014c e033 -00014d e342 -00014e d083 DELAY16 410 -00014f 9478 sei -000150 9508 ret +00016f 94f8 cli +000170 9ab9 ow_pull +000171 e033 +000172 eb4e +000173 d08b DELAY16 480 +000174 98b9 ow_release +000175 e030 +000176 e84a +000177 d087 DELAY16 70 +000178 d005 rcall OW_CHECK_PRESENCE +000179 e033 +00017a e342 +00017b d083 DELAY16 410 +00017c 9478 sei +00017d 9508 ret // // @@ -1358,85 +1501,85 @@ main.asm(265): Including file 'div16u.asm' ; Если подчиненное устройство притянет шину, то устанавливаем флаг OWPRF в единицу в регистре флагов ; OW_CHECK_PRESENCE: -000151 9bb1 sbis OW_PIN, OW_LINE -000152 6071 sbr OWFR, (1< // OW_SEND_BYTE: -000157 930f push r16 -000158 931f push r17 -000159 2d08 mov r16, OW_CMD_r -00015a e018 ldi r17, 8 +000184 930f push r16 +000185 931f push r17 +000186 2d08 mov r16, OW_CMD_r +000187 e018 ldi r17, 8 _OW_SEND_BYTE_LOOP: -00015b 9506 lsr r16 -00015c f408 brcc _OW_SEND_0 -00015d f058 brcs _OW_SEND_1 +000188 9506 lsr r16 +000189 f408 brcc _OW_SEND_0 +00018a f058 brcs _OW_SEND_1 _OW_SEND_0: -00015e 94f8 cli -00015f 9ab9 ow_pull -000160 e030 -000161 e746 -000162 d06f DELAY16 60 -000163 98b9 ow_release -000164 e030 -000165 e142 -000166 d06b DELAY16 10 -000167 9478 sei -000168 c00a rjmp _OW_SEND_BYTE_END +00018b 94f8 cli +00018c 9ab9 ow_pull +00018d e030 +00018e e746 +00018f d06f DELAY16 60 +000190 98b9 ow_release +000191 e030 +000192 e142 +000193 d06b DELAY16 10 +000194 9478 sei +000195 c00a rjmp _OW_SEND_BYTE_END _OW_SEND_1: -000169 94f8 cli -00016a 9ab9 ow_pull -00016b e030 -00016c e04a -00016d d064 DELAY16 6 -00016e 98b9 ow_release -00016f e030 -000170 e74e -000171 d060 DELAY16 64 -000172 9478 sei +000196 94f8 cli +000197 9ab9 ow_pull +000198 e030 +000199 e04a +00019a d064 DELAY16 6 +00019b 98b9 ow_release +00019c e030 +00019d e74e +00019e d060 DELAY16 64 +00019f 9478 sei _OW_SEND_BYTE_END: -000173 951a dec r17 -000174 f731 brne _OW_SEND_BYTE_LOOP -000175 911f pop r17 -000176 910f pop r16 -000177 9508 ret +0001a0 951a dec r17 +0001a1 f731 brne _OW_SEND_BYTE_LOOP +0001a2 911f pop r17 +0001a3 910f pop r16 +0001a4 9508 ret // // OW_RD_BYTE: -000178 930f push r16 -000179 931f push r17 -00017a 2700 clr r16 -00017b e018 ldi r17, 8 -00017c 94f8 cli +0001a5 930f push r16 +0001a6 931f push r17 +0001a7 2700 clr r16 +0001a8 e018 ldi r17, 8 +0001a9 94f8 cli _OW_RD_BYTE_LP: -00017d 9506 lsr r16 -00017e 9ab9 ow_pull -00017f e030 -000180 e04a -000181 d050 DELAY16 6 -000182 98b9 ow_release -000183 e030 -000184 e140 -000185 d04c DELAY16 9 -000186 99b1 sbic OW_PIN, OW_LINE -000187 6800 sbr r16, (1<<7) -000188 e030 -000189 e64c -00018a d047 DELAY16 55 -00018b 951a dec r17 -00018c f781 brne _OW_RD_BYTE_LP -00018d 930c st X, r16 -00018e 9478 sei -00018f 911f pop r17 -000190 910f pop r16 -000191 9508 ret +0001aa 9506 lsr r16 +0001ab 9ab9 ow_pull +0001ac e030 +0001ad e04a +0001ae d050 DELAY16 6 +0001af 98b9 ow_release +0001b0 e030 +0001b1 e140 +0001b2 d04c DELAY16 9 +0001b3 99b1 sbic OW_PIN, OW_LINE +0001b4 6800 sbr r16, (1<<7) +0001b5 e030 +0001b6 e64c +0001b7 d047 DELAY16 55 +0001b8 951a dec r17 +0001b9 f781 brne _OW_RD_BYTE_LP +0001ba 930c st X, r16 +0001bb 9478 sei +0001bc 911f pop r17 +0001bd 910f pop r16 +0001be 9508 ret // @@ -1447,154 +1590,154 @@ main.asm(265): Including file 'div16u.asm' ; Описание: Перемещает цифры числа в соответствующие ячейки памяти в SRAM ; путем деления этого числа несколько раз DISPLAY_UPD_DIGITS: -000192 94f8 cli -000193 935f push r21 -000194 e054 ldi r21, 4 ; (4 раза делим) т.к индикатор четырех разрядный +0001bf 94f8 cli +0001c0 935f push r21 +0001c1 e054 ldi r21, 4 ; (4 раза делим) т.к индикатор четырех разрядный ; инициализация указателя (за каждый проход цикла будет инкрементироваться) -000195 e6a3 ldi XL, LOW(DIGITS) -000196 e0b0 ldi XH, HIGH(DIGITS) +0001c2 e6a3 ldi XL, LOW(DIGITS) +0001c3 e0b0 ldi XH, HIGH(DIGITS) .equ dividend = SRAM_TEMP_1 ; число которе будем делить .equ divisor = 10 ; на что делим ; загружаем число которое хотим поделить в адрес SRAM делимого -000197 9380 0061 sts dividend, DISP_NUM_L -000199 9390 0062 sts dividend+1, DISP_NUM_H +0001c4 9380 0061 sts dividend, DISP_NUM_L +0001c6 9390 0062 sts dividend+1, DISP_NUM_H ; четыре раза производим деление для получения остатков DIV_LOOP: ; заполняем нужные регистры -00019b 9100 0061 lds dd16uL, dividend -00019d 9110 0062 lds dd16uH, dividend+1 -00019f e02a ldi dv16uL, LOW(divisor) -0001a0 e030 ldi dv16uH, HIGH(divisor) +0001c8 9100 0061 lds dd16uL, dividend +0001ca 9110 0062 lds dd16uH, dividend+1 +0001cc e02a ldi dv16uL, LOW(divisor) +0001cd e030 ldi dv16uH, HIGH(divisor) -0001a1 df10 rcall div16u ; делим +0001ce defb rcall div16u ; делим -0001a2 92ed st X+, drem16uL ; сохраняем остаток в ячейку по указателю и увеличиваем его +0001cf 92ed st X+, drem16uL ; сохраняем остаток в ячейку по указателю и увеличиваем его ; обновляем делимое -0001a3 9300 0061 sts dividend, dres16uL -0001a5 9310 0062 sts dividend+1, dres16uH +0001d0 9300 0061 sts dividend, dres16uL +0001d2 9310 0062 sts dividend+1, dres16uH -0001a7 955a dec r21 ; декрементируем счетчик цикла -0001a8 f791 brne DIV_LOOP ; делим еще раз если не 0 -0001a9 915f pop r21 -0001aa 9478 sei -0001ab 9508 ret +0001d4 955a dec r21 ; декрементируем счетчик цикла +0001d5 f791 brne DIV_LOOP ; делим еще раз если не 0 +0001d6 915f pop r21 +0001d7 9478 sei +0001d8 9508 ret // // ; **** ЗАГРУЖАЕТ НУЖНЫЙ АДРЕС СИМВОЛА В R0 *********************** DISPLAY_DECODER: -0001ac 930f push r16 -0001ad 931f push r17 -0001ae ede6 ldi ZL, LOW(2*DISPLAY_SYMBOLS) -0001af e0f3 ldi ZH, HIGH(2*DISPLAY_SYMBOLS) +0001d9 930f push r16 +0001da 931f push r17 +0001db e3e0 ldi ZL, LOW(2*DISPLAY_SYMBOLS) +0001dc e0f4 ldi ZH, HIGH(2*DISPLAY_SYMBOLS) -0001b0 2711 clr TEMP_REG_B -0001b1 0fe0 add ZL, TEMP_REG_A -0001b2 1ff1 adc ZH, TEMP_REG_B +0001dd 2711 clr TEMP_REG_B +0001de 0fe0 add ZL, TEMP_REG_A +0001df 1ff1 adc ZH, TEMP_REG_B -0001b3 9004 lpm r0, Z -0001b4 911f pop r17 -0001b5 910f pop r16 -0001b6 9508 ret// +0001e0 9004 lpm r0, Z +0001e1 911f pop r17 +0001e2 910f pop r16 +0001e3 9508 ret// // BEEP_SHORT: -0001b7 9ac5 sbi BUZZER_PORT, BUZZER_PIN -0001b8 d022 rcall DELAY -0001b9 98c5 cbi BUZZER_PORT, BUZZER_PIN -0001ba 9508 ret +0001e4 9ac5 sbi BUZZER_PORT, BUZZER_PIN +0001e5 d022 rcall DELAY +0001e6 98c5 cbi BUZZER_PORT, BUZZER_PIN +0001e7 9508 ret // // BEEP_LONG: -0001bb 9ac5 sbi BUZZER_PORT, BUZZER_PIN -0001bc d01e rcall DELAY -0001bd d01d rcall DELAY -0001be d01c rcall DELAY -0001bf d01b rcall DELAY -0001c0 98c5 cbi BUZZER_PORT, BUZZER_PIN -0001c1 9508 ret// +0001e8 9ac5 sbi BUZZER_PORT, BUZZER_PIN +0001e9 d01e rcall DELAY +0001ea d01d rcall DELAY +0001eb d01c rcall DELAY +0001ec d01b rcall DELAY +0001ed 98c5 cbi BUZZER_PORT, BUZZER_PIN +0001ee 9508 ret// // DEBOUNCE_SW: -0001c2 930f push r16 -0001c3 931f push r17 -0001c4 932f push r18 +0001ef 930f push r16 +0001f0 931f push r17 +0001f1 932f push r18 -0001c5 e02a ldi r18, 10 +0001f2 e02a ldi r18, 10 _loop_2: -0001c6 ef1f ldi r17, 255 +0001f3 ef1f ldi r17, 255 _loop_0: -0001c7 ef0f ldi r16, 255 +0001f4 ef0f ldi r16, 255 _dec_0: -0001c8 950a dec r16 -0001c9 f7f1 brne _dec_0 +0001f5 950a dec r16 +0001f6 f7f1 brne _dec_0 _loop_1: -0001ca 951a dec r17 -0001cb f7d9 brne _loop_0 +0001f7 951a dec r17 +0001f8 f7d9 brne _loop_0 _loop_3: -0001cc 952a dec r18 -0001cd f7c1 brne _loop_2 +0001f9 952a dec r18 +0001fa f7c1 brne _loop_2 -0001ce 912f pop r18 -0001cf 911f pop r17 -0001d0 910f pop r16 -0001d1 9508 ret// +0001fb 912f pop r18 +0001fc 911f pop r17 +0001fd 910f pop r16 +0001fe 9508 ret// // DELAY_LOOP_16: -0001d2 5041 subi DELAY_8_r, 1 -0001d3 4030 sbci DELAY_16_r, 0 -0001d4 f7e8 brcc DELAY_LOOP_16 -0001d5 9508 ret +0001ff 5041 subi DELAY_8_r, 1 +000200 4030 sbci DELAY_16_r, 0 +000201 f7e8 brcc DELAY_LOOP_16 +000202 9508 ret // DELAY_LOOP_24: -0001d6 5041 subi DELAY_8_r, 1 -0001d7 4030 sbci DELAY_16_r, 0 -0001d8 4050 sbci DELAY_24_r, 0 -0001d9 f7e0 brcc DELAY_LOOP_24 -0001da 9508 ret +000203 5041 subi DELAY_8_r, 1 +000204 4030 sbci DELAY_16_r, 0 +000205 4050 sbci DELAY_24_r, 0 +000206 f7e0 brcc DELAY_LOOP_24 +000207 9508 ret // DELAY: -0001db 930f push r16 -0001dc 931f push r17 -0001dd 932f push r18 +000208 930f push r16 +000209 931f push r17 +00020a 932f push r18 -0001de e026 ldi r18, 6 +00020b e026 ldi r18, 6 _DELAY_0: -0001df ef0f ldi r16, 255 +00020c ef0f ldi r16, 255 _DELAY_1: -0001e0 ef1f ldi r17, 255 +00020d ef1f ldi r17, 255 _DELAY_2: -0001e1 951a dec r17 -0001e2 f7f1 brne _DELAY_2 +00020e 951a dec r17 +00020f f7f1 brne _DELAY_2 -0001e3 950a dec r16 -0001e4 f7d9 brne _DELAY_1 -0001e5 952a dec r18 -0001e6 f7c1 brne _DELAY_0 +000210 950a dec r16 +000211 f7d9 brne _DELAY_1 +000212 952a dec r18 +000213 f7c1 brne _DELAY_0 -0001e7 912f pop r18 -0001e8 911f pop r17 -0001e9 910f pop r16 -0001ea 9508 ret // +000214 912f pop r18 +000215 911f pop r17 +000216 910f pop r16 +000217 9508 ret // // DISPLAY_SYMBOLS: ; HGFEDCBA HGFEDCBA -0001eb f9c0 .DB 0b11000000, 0b11111001 ; 0, 1 -0001ec b0a4 .DB 0b10100100, 0b10110000 ; 2, 3 -0001ed 9299 .DB 0b10011001, 0b10010010 ; 4, 5 -0001ee f882 .DB 0b10000010, 0b11111000 ; 6, 7 -0001ef 9080 .DB 0b10000000, 0b10010000 ; 8, 9 -0001f0 bf9c .DB 0b10011100, 0b10111111 ; °, -// +000218 f9c0 .DB 0b11000000, 0b11111001 ; 0, 1 +000219 b0a4 .DB 0b10100100, 0b10110000 ; 2, 3 +00021a 9299 .DB 0b10011001, 0b10010010 ; 4, 5 +00021b f882 .DB 0b10000010, 0b11111000 ; 6, 7 +00021c 9080 .DB 0b10000000, 0b10010000 ; 8, 9 +00021d bf9c .DB 0b10011100, 0b10111111 ; °, -// // @@ -1621,9 +1764,9 @@ counted separately from r26..r31 here. "ATtiny2313A" register use summary: x : 2 y : 0 z : 1 r0 : 4 r1 : 2 r2 : 0 r3 : 0 r4 : 0 -r5 : 0 r6 : 0 r7 : 0 r8 : 5 r9 : 0 r10: 0 r11: 0 r12: 0 -r13: 0 r14: 5 r15: 5 r16: 94 r17: 50 r18: 30 r19: 40 r20: 33 -r21: 10 r22: 0 r23: 2 r24: 5 r25: 3 r26: 3 r27: 3 r28: 0 +r5 : 0 r6 : 0 r7 : 0 r8 : 7 r9 : 0 r10: 0 r11: 0 r12: 0 +r13: 0 r14: 5 r15: 5 r16: 112 r17: 52 r18: 30 r19: 41 r20: 34 +r21: 11 r22: 0 r23: 2 r24: 5 r25: 3 r26: 4 r27: 4 r28: 0 r29: 0 r30: 2 r31: 2 Registers used: 20 out of 35 (57.1%) @@ -1632,27 +1775,27 @@ Registers used: 20 out of 35 (57.1%) andi : 1 asr : 0 bclr : 0 bld : 0 brbc : 0 brbs : 0 brcc : 4 brcs : 1 break : 0 breq : 4 brge : 1 brhc : 0 brhs : 0 brid : 0 brie : 0 brlo : 0 brlt : 0 brmi : 0 -brne : 17 brpl : 0 brsh : 0 brtc : 1 brts : 1 brvc : 0 +brne : 19 brpl : 0 brsh : 0 brtc : 1 brts : 1 brvc : 0 brvs : 0 bset : 0 bst : 0 cbi : 23 cbr : 3 clc : 1 clh : 0 cli : 5 cln : 0 clr : 6 cls : 0 clt : 1 -clv : 0 clz : 0 com : 2 cp : 0 cpc : 0 cpi : 10 -cpse : 0 dec : 10 eor : 0 icall : 0 ijmp : 0 in : 2 -inc : 1 ld : 0 ldd : 0 ldi : 69 lds : 16 lpm : 2 -lsl : 4 lsr : 10 mov : 11 movw : 0 neg : 1 nop : 0 -or : 1 ori : 0 out : 15 pop : 32 push : 31 rcall : 42 -ret : 18 reti : 3 rjmp : 19 rol : 4 ror : 4 sbc : 1 +clv : 0 clz : 0 com : 2 cp : 0 cpc : 0 cpi : 11 +cpse : 0 dec : 11 eor : 0 icall : 0 ijmp : 0 in : 2 +inc : 1 ld : 0 ldd : 0 ldi : 82 lds : 17 lpm : 2 +lsl : 4 lsr : 10 mov : 13 movw : 0 neg : 1 nop : 0 +or : 1 ori : 0 out : 15 pop : 33 push : 32 rcall : 50 +ret : 20 reti : 3 rjmp : 21 rol : 4 ror : 4 sbc : 1 sbci : 3 sbi : 12 sbic : 3 sbis : 5 sbiw : 1 sbr : 2 sbrc : 0 sbrs : 0 sec : 1 seh : 0 sei : 5 sen : 0 ser : 0 ses : 0 set : 1 sev : 0 sez : 0 sleep : 0 -spm : 0 st : 2 std : 0 sts : 20 sub : 2 subi : 2 +spm : 0 st : 2 std : 0 sts : 25 sub : 2 subi : 2 swap : 0 tst : 1 wdr : 0 Instructions used: 54 out of 105 (51.4%) "ATtiny2313A" memory use summary [bytes]: Segment Begin End Code Data Used Size Use% --------------------------------------------------------------- -[.cseg] 0x000000 0x0003e2 960 12 972 2048 47.5% -[.dseg] 0x000060 0x00006d 0 13 13 128 10.2% +[.cseg] 0x000000 0x00043c 1050 12 1062 2048 51.9% +[.dseg] 0x000060 0x000071 0 17 17 128 13.3% [.eseg] 0x000000 0x000000 0 0 0 128 0.0% Assembly complete, 0 errors, 6 warnings diff --git a/dist/default/production/attiny2313a_thermostat.X.production.map b/dist/default/production/attiny2313a_thermostat.X.production.map index 2997244..c953aa9 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 Fri Jun 23 16:35:36 2023 +AVRASM ver. 2.2.7 main.asm Sat Jun 24 17:26:02 2023 EQU SIGNATURE_000 0000001e @@ -526,15 +526,25 @@ EQU UART_TX_PIN 00000001 EQU MCU_STATE_DEFAULT 00000000 EQU MCU_STATE_PROGRAM 00000001 EQU MCU_STATE_ERROR 00000002 +EQU DEFAULT_SETTING_INT 0000001d +EQU DEFAULT_SETTING_F 00000005 +EQU DEFAULT_SETTING_HYST 00000005 +EQU HEAT_MODE 00000001 +EQU COOLING_MODE 00000000 +EQU DEFAULT_SETTING_MODE 00000001 DSEG MCU_STATE 00000060 DSEG SRAM_TEMP_1 00000061 DSEG DIGITS 00000063 DSEG CURRENT_DIGIT 00000067 DSEG SW_FLAGS 00000068 -DSEG HYSTERESIS 00000069 -DSEG TEMP_L 0000006a -DSEG TEMP_H 0000006b -DSEG TEMP_F 0000006c +DSEG TEMP_L 00000069 +DSEG TEMP_H 0000006a +DSEG TEMP_F 0000006b +DSEG SETTING_INT 0000006c +DSEG SETTING_F 0000006d +DSEG SETTING_HYST 0000006e +DSEG SETTING_MODE 0000006f +DSEG DEVICE_FAMILY_CODE 00000070 CSEG RESET_vect 00000074 CSEG TIMER0_COMPA_vect 00000023 CSEG PCINT0_vect 0000000e @@ -543,20 +553,25 @@ CSEG _INTO_PROGRAM_STATE 0000001a CSEG _CLR_CURRENT_DIGIT 0000002d CSEG _indicate_1 00000030 CSEG _indicate_2 00000042 -CSEG DISPLAY_DECODER 000001ac -CSEG USI_TRANSMIT 00000128 +CSEG DISPLAY_DECODER 000001d9 +CSEG USI_TRANSMIT 00000155 CSEG _indicate_3 00000054 CSEG _indicate_4 00000061 CSEG _indicate_exit 0000006b CSEG MCU_INIT 00000076 -CSEG BEEP_SHORT 000001b7 -CSEG LOOP 00000097 -CSEG _STATE_DEFAULT 00000099 -CSEG _STATE_PROGRAM 000000a0 -CSEG DISPLAY_UPD_DIGITS 00000192 -CSEG TEMP_UPD 000000c5 -CSEG _STATE_ERROR 000000a5 -CSEG SW_CHECK_PROCESS 00000134 +CSEG RD_F_CODE 000000f1 +CSEG ERR_FAMILY_CODE 000000a6 +CSEG START_PROGRAM 000000ab +CSEG BEEP_LONG 000001e8 +CSEG BEEP_SHORT 000001e4 +CSEG LOOP 000000ae +CSEG _STATE_DEFAULT 000000b0 +CSEG _STATE_PROGRAM 000000b8 +CSEG DISPLAY_UPD_DIGITS 000001bf +CSEG TEMP_UPD 000000de +CSEG TEMP_COMPARSION 000000dd +CSEG _STATE_ERROR 000000bd +CSEG SW_CHECK_PROCESS 00000161 DEF drem16uL r14 DEF drem16uH r15 DEF dres16uL r16 @@ -566,42 +581,42 @@ DEF dd16uH r17 DEF dv16uL r18 DEF dv16uH r19 DEF dcnt16u r20 -CSEG div16u 000000b2 -CSEG d16u_1 000000b5 -CSEG d16u_2 000000ba -CSEG d16u_3 000000c3 -CSEG TEMP_CONV 0000011e -CSEG DELAY_LOOP_24 000001d6 -CSEG TEMP_RD 000000d4 -CSEG OW_PRESENCE 00000142 -CSEG OW_SEND_BYTE 00000157 -CSEG OW_RD_BYTE 00000178 -CSEG _TEMP_RD_TO_UNSIGNED 000000f0 -CSEG _TEMP_RD_CONTINUE 000000f9 -CSEG _TEMP_RD_END 00000102 -CSEG _USI_TRANSMIT_LOOP 0000012d -CSEG DEBOUNCE_SW 000001c2 -CSEG _INTO_DEFAULT_STATE 0000013d -CSEG _SW_CHECK_PROCESS_END 00000140 -CSEG DELAY_LOOP_16 000001d2 -CSEG OW_CHECK_PRESENCE 00000151 -CSEG _EXIT 00000156 -CSEG _OW_SEND_BYTE_LOOP 0000015b -CSEG _OW_SEND_0 0000015e -CSEG _OW_SEND_1 00000169 -CSEG _OW_SEND_BYTE_END 00000173 -CSEG _OW_RD_BYTE_LP 0000017d +CSEG div16u 000000ca +CSEG d16u_1 000000cd +CSEG d16u_2 000000d2 +CSEG d16u_3 000000db +CSEG TEMP_CONV 0000014b +CSEG DELAY_LOOP_24 00000203 +CSEG TEMP_RD 00000101 +CSEG OW_PRESENCE 0000016f +CSEG OW_SEND_BYTE 00000184 +CSEG _RD_L 000000fc +CSEG OW_RD_BYTE 000001a5 +CSEG _TEMP_RD_TO_UNSIGNED 0000011d +CSEG _TEMP_RD_CONTINUE 00000126 +CSEG _TEMP_RD_END 0000012f +CSEG _USI_TRANSMIT_LOOP 0000015a +CSEG DEBOUNCE_SW 000001ef +CSEG _INTO_DEFAULT_STATE 0000016a +CSEG _SW_CHECK_PROCESS_END 0000016d +CSEG DELAY_LOOP_16 000001ff +CSEG OW_CHECK_PRESENCE 0000017e +CSEG _EXIT 00000183 +CSEG _OW_SEND_BYTE_LOOP 00000188 +CSEG _OW_SEND_0 0000018b +CSEG _OW_SEND_1 00000196 +CSEG _OW_SEND_BYTE_END 000001a0 +CSEG _OW_RD_BYTE_LP 000001aa EQU dividend 00000061 EQU divisor 0000000a -CSEG DIV_LOOP 0000019b -CSEG DISPLAY_SYMBOLS 000001eb -CSEG DELAY 000001db -CSEG BEEP_LONG 000001bb -CSEG _loop_2 000001c6 -CSEG _loop_0 000001c7 -CSEG _dec_0 000001c8 -CSEG _loop_1 000001ca -CSEG _loop_3 000001cc -CSEG _DELAY_0 000001df -CSEG _DELAY_1 000001e0 -CSEG _DELAY_2 000001e1 +CSEG DIV_LOOP 000001c8 +CSEG DISPLAY_SYMBOLS 00000218 +CSEG DELAY 00000208 +CSEG _loop_2 000001f3 +CSEG _loop_0 000001f4 +CSEG _dec_0 000001f5 +CSEG _loop_1 000001f7 +CSEG _loop_3 000001f9 +CSEG _DELAY_0 0000020c +CSEG _DELAY_1 0000020d +CSEG _DELAY_2 0000020e diff --git a/dist/default/production/attiny2313a_thermostat.X.production.obj b/dist/default/production/attiny2313a_thermostat.X.production.obj index a826e10f7670469726378dc2db4053251ffacc5a..8f610beb97c56f3eba665802cf06a8a807a9e963 100644 GIT binary patch literal 4939 zcmXBXcVJY-7RT}5%m$<;bm@sy6-g2C*#$vV6hTES&nLtXNhk>>bPFH~2#AEuVhAcI z=mRW|Dj;ftiYTJo*s*Tt2uOfvKm_0SWdFF!Cue47=FH5US)@i=CAF+wqvxPIllnh2 zJTqfVQlIRRnFLjuFD3JD-AHrkQc%CNsni|BhZCf$KtecCx*9YHr%2a;hT-d_YeAz8 z)VU5cUbs%W88j)aCEWs=79>fxf@T^L!}+O1ZX?pXqPElzv?vWpw}Y0^hSD9NRk(q4 zCunWoGPEh7i@QPF0y-T85(^l{Js_!of!zx(D4@=Lpq*uLKWHEBFAWAA!h8+^9W9-7 z(8>tL95`UX#y?FU148LR&$7#{p4y#+=@ zXn8dl8SWvi0i$fU7;;M3errLlZR7P|v~APsbH+yNq6nZEIx`7liQosW-sCT>12hDqi1q-{hV-OTH0cr3~u+YTPLHVjWhYe=7g z$tA3*VM;mg=?*Zpq-G3H?xyliBGXFPtA?knayPCCC5dDe=eJag@xGCXGkD+lwe$VO1WELLN_740DswxYc} zh02K`5@js=h%B(8{XEaxyJ;xu%*R2Vg;sQkr&!rBEV2k|#~vCU!;8oG>oCttR&<1C zu`Rb@NiaaF05984IKlIZz4eBrX?&dISyss$vd#2rDMS4OycTUFodW;0v+gulZj)eG zQN~&N7g%ZU&KdA}*%i`R@J4isbdKno(RnevMW^mOivGvftFbDTNF5@pE7RmyAgw7{ zAjbk}ZCPD8W?1Wji{#?LdgjL^(BRu8wPV;2bd+OA+L%fagVd(V7IKZjJJwDUu(>QG z*A%=PER$;n-b?jzY)-vjHBqhwC@H3LOHdkZCD#gUAyd~He8B5jjSnr-hR8=81=ZMU zk+wuW=4`3PHj5+@`Gljm8lUdmD|Z2r?HzuPli{=G|HP>s*iqgyPVK?xiHcK4@I_+7 zICTO$BYop!OCD6#j?;ypEK)0u!(RHbHSKf(U$v&4OTgDHcgLwK_@>Uuxaynn+sdRk z&Uop&c#4=}eczTMTi{)VGvlf+%^!B2h*LKrKNiw*ckt8B3OVca=SVF%_N0E{-f?;0 z*I7il<&DLhTX^d#jvN0%2u@3>Wl^Ztd3#7)iE3>V|on-gXVH}gB&Vg z#wLQ_*w58CoHA8z5|JZTWcS5UHg+|BPbrY&kkm2GANM$@u%X(;ah$u-O#>%_$K;*{ zCy&&Vn+__Ir^w9!e*|;oW`aKt$IHzERaP_`oC;>k%>kzmERmZF{)(=Wdk&n5(uKV( ze+SFu!r*MAjvPm;&Q%?fi-3PP2Ho?LlZ~ecI2+Fkz}p5eu}uopawU- zTLNkZS#nFkc{b){pq35nRZu&aB=;JqV`E+p>RQnXP%juSw-VIfze4T}5N~6C6C?x? zxwk-r{VU~GfreJJ8Z-*#%dG*8ZF<*%CN}eirUglI>p?S{aKrgFW=?h2eDZ~I8$pZf z!6wj>+ta-RS`{9Y+YDNl)|Pu0wBgr|u?gH+4ikXFg`egiIzFtBeyx0GITKY+_dvtB=f?iTq8T%OQP z?q~2X!!O_p19ySDGNHFzIk+l;&A$g+9l2a?AGpS_A6#oV0IoA|s=Mp$+&Bz+*mw** z!%1>Szzwz*hF)RDd=&KNFt5gqT(z!(NFRP@y5ry`o2V1uW_v+Sf?I57R)W5^Gyed$ z+Ri)$ZVTGUodNx9*ZmD{x2<&+^bZ*PIWS;voID%c-9eG(#dUWEY4U{JU9{|LfPu8^ zYl6FJ+1CSuHiG)#p1qQ90PfusFW(T{S6)}X6}W#>efhTF-;2h{b7r~+cAk|_0{e9#hc`N zvrQj~c9Xvmd2TP>hz&#EIZua1jZfg8^icuMhp{z8uB;O;6!WZ7V1pe zb3+V|2Ge4AtZ;&SU+O$=!?+bZv1qmYU10K%N8|^BDWzWiZZLHrMT5YTlb?{k2TZeX z-3Oksse2GS&C%osgXvu<8UkiSo6DzznUR|E8Q_^piiUz&75B<#g4ve)Ffhk*&tj<0 zT3*>;?twlrJQw7~Fwb%yPEmo?83E>(lb0dPol=cL%WEVJMoR0*j{*y& zyeWPHSZb@xP2`r@L~#MRS8bvugV$`Lrhxyl_54(@+$QQtu)>Bq4Xm^odm6lMW1dc@ zZ`gQdfH!T-hPU|jRgM4Im}e4MWp$nbtIK=DuqL=IhPAeWvuJQ#7M;!p>#gz}D!;v- zI))9wO)+e=yq=}brmCs(++XgUa6NhMFSprpp9kKxObft!mg#)(zGcdGcO{m^OQ1A7 zSbj0s5*;YN1bnc6sr*v#AvcI$20jW;kzWb6@}JXcd>o!9|2mOv{4cc{pU{tAMdVYf zW7y7h<5z>vtd3zv^kVrn;B(7sE%@S>GxF=f&iO~>?cNC(owr-2%-S)0$x-PygRiU| z!`G4f<=+F}R29g-556rRixTjijpMW3tMCCsPKSe9$w}YQM zHIM$s`)d5p@(!5{o?@h8EbRitB=LX~ZsKf$T0UGi1nbcC;;27gs; zk^c*v;ZE^(JN#`a+wE}HQa%UH*?9f|{|xA

7{ck5q-?fU7#FPz~Uz6XJI8A*)jd z#95uXphk}Y3UOcfnpIJS>VxyFay+O-f}uvBHVK9rgE}M_Y69v;J1Nu*)FZD@b5Ng5 zLoGo(>4aK?1QHCj0S!nwln5GSRBEirFpfL%C+JPn{80r9;l3=JKXhwn|t{Z>8 zjmO^k=BG;);+F9(RxMMgD`+`?p+ej;zSXHG6-oiE=S@*46|^aNL7_B_O3%(oPR}2u zl&suQnJM|1dBZX%PE5}mkvlFWc~nN$=)t4YGe+d6^vll3%gxBj9-Y#2;F#>3iGzFh z8IaN~IW;-0ds<5RxICIj$_R(^I{$tVj>=bnas!JwXj$ph#~})ANK# zA5crbrKp|568%9PH;WDcL2kA&5Cpr~*dS2X&6vTUo<=bQ)c5oi83`JA#)^yr&uBQK zK|>8^3}|$MOZ=0@?nsds@T^Sqqe&PcjH9P%Q3a7$&`h^F9yD)6m<*E;PozjZ2-RN| zVPW)42H`~uMW%ojnI4fO5RsW7G8MGU^omRatqLoNOb4xVtw=I>&R1T9+aYbVCk3>1 z^D&e5yl}G=FVyEFmDa8>P-GTppOr2$8@!lnMCO1Fne@yBk$G%p9*A-ZMCOBzVNoIr zKquW{8tANp7lAIi!^NPh?r;g{rmHWdb=SZZJ=`3mWuT|-NAXfq(y|=%(*3Ley|W1U zRnSNG^BU-@NmvQ`>4d9j{dGdcfV|-%tHD6$lE@k`D6FH1jvHLWCH5vmbcgIshUz@* zO@`?X*Ms3%^ltzo^c$J9k$STfqw+Wa8^P%2d}Pzc%;ErS0%Jq?*i4Id&WUURF=3rV zwt;a)g z)Eo4iA=k4`@u8S~myZu*%VNPj37F}iVd3qM-a8?ydbmj|SDG`@oS%W~4OZ>7tooD$nSfL>+UiI_f_MMhpd z5g+jS(nPMZvGu-ner(YDb&Hm%iz+s9oaHVptLRw~oisa>b5#g7IlqhC2b&#s_5f`0 zG1)`f>p7%Fu{DejhRL>~r$zn%+x6?kV28uBkHAi6t;nBXR~QNZ8|*G#DDn^3lf~eF z!CqfYk^g}=^zHW_*r&%>@g_YiBJviGObPaDkLm!=U!*TgJspkpowY zd76S#wV0ijP$Z`kmo&4vb+{A`&Sb1`Nel47#Ro2l z03T*Bb1U%C#X>RVz*%0)h9fN>J43}(0_XAvhzTInPj0sNVU7QdL{^bL)A0E;9H7|(X4*w#EWSFzQ0{Tj3)DkkTfxx%paY(VlN~us%?sde#!WHpz`fkEV%md33ag0(_cMqq z3Ow+#R!8vA%MzVHkuO|KXYhMKWiegAAHFa#T|seBeKFm@qg*4VJNQ#4dSj7UPxB{@Nd`4E zQ8PeIJ&-A&7PY|41hw^Krh+0vtye%jhs`el^{=_aECdbo z(jxGTLw**6hC1^y&`4)q4jSvstHHDHfHk1WH9p+5rYA{nI%t+(Ud$%Y{A5KjuY-{6 zR54pY=*54 zkxP_FGkC!(VknVjh<=O8XohO)u7F|sYSOTWH|J757~!if<|-KJEiFcG-l!rjT?eBJ zhlwcwV>I@gV64XeD_f1$xPAjMH@f;U&Y9{*tj2zeOXGFSZ4j4FT#5+}2U{^w*>nA=Fi(q-n6DEkHh9v+Qg=)y|JfX?0Ar? zUylQ4^y?GA2O7mB@S#RA8GJ;gwo|}a&1w?(_#T(0fphm5oD4qkmJ^!-J}o93EefCM zv6%(V7k?*qHn`yB>vO^9#b?CM17A>6tX7AM8nRXgM?+o!@^n9G;LCndVwZrgBDs}I z!KLDxVwZu-I!3F**E(h;_(sR90^dgV6RY*&yJGUZ27IrB*Mc83K<>TyQ3K2XKWTto z@UyR>*bU%{#;fE4ZcsZUfgf!0n(w1Ka^_Xn?!GO$~52 z_*Dbca`T(+XD_(*XRcVSGPe)y6ng;NN#7_|tIXX;i^LuR_tvF}Jq!wSHiY(v;aA~jLQ+CX!qlW0C95RH RFpZz%6H>!l&n)Sc{{yPWyAA*V diff --git a/dist/default/production/attiny2313a_thermostat.X.production.tmp b/dist/default/production/attiny2313a_thermostat.X.production.tmp index 2c26816..f57d47f 100644 --- a/dist/default/production/attiny2313a_thermostat.X.production.tmp +++ b/dist/default/production/attiny2313a_thermostat.X.production.tmp @@ -29,68 +29,77 @@ main.asm26 main.asm27 main.asm28 - main.asm29 - main.asm30 - main.asm31 - main.asm32 - main.asm185 - main.asm90 - main.asm53 - <_PCINT0_vect_end>main.asm80 - <_INTO_PROGRAM_STATE>main.asm76 - <_CLR_CURRENT_DIGIT>main.asm102 - <_indicate_1>main.asm106 - <_indicate_2>main.asm126 - main.asm583 - main.asm396 - <_indicate_3>main.asm144 - <_indicate_4>main.asm160 - <_indicate_exit>main.asm172 - main.asm191 - main.asm599 - main.asm233 - <_STATE_DEFAULT>main.asm237 - <_STATE_PROGRAM>main.asm244 - main.asm542 - main.asm268 - <_STATE_ERROR>main.asm250 - main.asm427 + main.asm29 + main.asm30 + main.asm31 + main.asm32 + main.asm33 + main.asm34 + main.asm35 + main.asm36 + main.asm189 + main.asm94 + main.asm57 + <_PCINT0_vect_end>main.asm84 + <_INTO_PROGRAM_STATE>main.asm80 + <_CLR_CURRENT_DIGIT>main.asm106 + <_indicate_1>main.asm110 + <_indicate_2>main.asm130 + main.asm710 + main.asm523 + <_indicate_3>main.asm148 + <_indicate_4>main.asm164 + <_indicate_exit>main.asm176 + main.asm195 + main.asm386 + main.asm247 + main.asm252 + main.asm734 + main.asm726 + main.asm261 + <_STATE_DEFAULT>main.asm265 + <_STATE_PROGRAM>main.asm273 + main.asm669 + main.asm369 + main.asm296 + <_STATE_ERROR>main.asm279 + main.asm554 div16u.asm32 div16u.asm36 div16u.asm42 div16u.asm52 - main.asm376 - main.asm650 - main.asm284 - main.asm451 - main.asm478 - main.asm511 - <_TEMP_RD_TO_UNSIGNED>main.asm319 - <_TEMP_RD_CONTINUE>main.asm330 - <_TEMP_RD_END>main.asm340 - <_USI_TRANSMIT_LOOP>main.asm414 - main.asm617 - <_INTO_DEFAULT_STATE>main.asm440 - <_SW_CHECK_PROCESS_END>main.asm443 - main.asm643 - main.asm467 - <_EXIT>main.asm473 - <_OW_SEND_BYTE_LOOP>main.asm483 - <_OW_SEND_0>main.asm487 - <_OW_SEND_1>main.asm495 - <_OW_SEND_BYTE_END>main.asm502 - <_OW_RD_BYTE_LP>main.asm517 - main.asm559 - main.asm683 - main.asm658 - main.asm607 - <_loop_2>main.asm623 - <_loop_0>main.asm625 - <_dec_0>main.asm627 - <_loop_1>main.asm630 - <_loop_3>main.asm633 - <_DELAY_0>main.asm664 - <_DELAY_1>main.asm666 - <_DELAY_2>main.asm668 + main.asm503 + main.asm777 + main.asm411 + main.asm578 + main.asm605 + <_RD_L>main.asm402 + main.asm638 + <_TEMP_RD_TO_UNSIGNED>main.asm446 + <_TEMP_RD_CONTINUE>main.asm457 + <_TEMP_RD_END>main.asm467 + <_USI_TRANSMIT_LOOP>main.asm541 + main.asm744 + <_INTO_DEFAULT_STATE>main.asm567 + <_SW_CHECK_PROCESS_END>main.asm570 + main.asm770 + main.asm594 + <_EXIT>main.asm600 + <_OW_SEND_BYTE_LOOP>main.asm610 + <_OW_SEND_0>main.asm614 + <_OW_SEND_1>main.asm622 + <_OW_SEND_BYTE_END>main.asm629 + <_OW_RD_BYTE_LP>main.asm644 + main.asm686 + main.asm810 + main.asm785 + <_loop_2>main.asm750 + <_loop_0>main.asm752 + <_dec_0>main.asm754 + <_loop_1>main.asm757 + <_loop_3>main.asm760 + <_DELAY_0>main.asm791 + <_DELAY_1>main.asm793 + <_DELAY_2>main.asm795 diff --git a/main.asm b/main.asm index 9dad42c..8a28489 100644 --- a/main.asm +++ b/main.asm @@ -26,11 +26,14 @@ SRAM_TEMP_1: .BYTE 2 ; Хранения временно DIGITS: .BYTE 4 ; Ячейки, где хранятся символы, для вывода на индикатор CURRENT_DIGIT: .BYTE 1 ; Номер разряда индикатора, который сейчас горит SW_FLAGS: .BYTE 1 ; Состояние кнопок -HYSTERESIS: .BYTE 1 ; Отклонение температуры от уставки TEMP_L: .BYTE 1 ; Младший байт температуры TEMP_H: .BYTE 1 ; Старший байт температуры TEMP_F: .BYTE 1 ; Дробная часть -;SETTING_INT: .BYTE 1 ; Уставка: целая часть +SETTING_INT: .BYTE 1 ; Уставка: целая часть +SETTING_F: .BYTE 1 ; Уставка: дробная часть +SETTING_HYST: .BYTE 1 ; Гистерезис: отклонение от уставки +SETTING_MODE: .BYTE 1 ; Режим работы: '1' - нагрев; '0' - 'охлаждение' +DEVICE_FAMILY_CODE: .BYTE 1 ; Должно быть 0x10 для DS18B20 ;// @@ -190,41 +193,65 @@ RESET_vect: // ; **** ПРОЦЕСС ИНИЦИАЛИЗАЦИИ МК ********************************** MCU_INIT: - ; **** ИНИЦИАЛИЗАЦИЯ ПИНОВ ************************************* - outi r16, DDRD, (1< @@ -241,7 +268,8 @@ _STATE_DEFAULT: cbi LED_ERR_PORT, LED_ERR_PIN rcall DISPLAY_UPD_DIGITS rcall TEMP_UPD - outi r16, TIMSK, (1<= уставки - выключаем реле +; rjmp _COMPARSION_EXIT +;_HEATING_GREATER_OR_E_F: +; cp r18, r20 +; breq _HEATING_GREATER_E_F +; brtc PC+3 +; relay_on +; rjmp PC+2 +; relay_off ; c +; rjmp _COMPARSION_EXIT +;_HEATING_GREATER_E_F: +; brtc PC+3 +; relay_on +; rjmp PC+2 +; relay_off ; c +; +;_COMPARSION_EXIT: +; pop r22 +; pop r21 +; pop r20 +; pop r19 +; pop r18 +; pop r17 +; pop r16 + ret // TEMP_UPD: push r17 rcall TEMP_CONV - DELAY24 760000 + DELAY24 500000 + DELAY24 500000 rcall TEMP_RD ; обновляем данные в ячейках @@ -281,6 +382,31 @@ TEMP_UPD: ret // +// +RD_F_CODE: + push r16 + + rcall OW_PRESENCE + ldi r16, DS18B20_CMD_SKIPROM + mov OW_CMD_r, r16 + rcall OW_SEND_BYTE + + ldi r16, DS18B20_CMD_RSCRATCHPAD + mov OW_CMD_r, r16 + rcall OW_SEND_BYTE + + ldi XL, LOW(DEVICE_FAMILY_CODE) + ldi XH, HIGH(DEVICE_FAMILY_CODE) + + ldi r16, 8 +_RD_L: + rcall OW_RD_BYTE + dec r16 + brne _RD_L + + pop r16 + ret// + // TEMP_RD: push r16 diff --git a/main.hex b/main.hex index c0ad2b7..95b9f48 100644 --- a/main.hex +++ b/main.hex @@ -7,59 +7,68 @@ :10004A000F931F935FB74091670045300CF403C0CC :10005A00442740936700403081F493989498959888 :10006A000EF002C00BE002C000916500002311F0FF -:10007A00929A01C092986AD1E5D0413081F492985F +:10007A00929A01C09298B5D130D1413081F49298C8 :10008A00949895980091640030916500032B11F0C3 -:10009A00939A01C093980091640058D1D3D042300A -:1000AA0059F4929893989598949A009163004ED136 -:1000BA00002D0F77002EC6D0433041F492989398C2 -:1000CA009498959A00916C0041D1BCD04395409385 +:10009A00939A01C0939800916400A3D11ED1423073 +:1000AA0059F4929893989598949A0091630099D1EB +:1000BA00002D0F77002E11D1433041F49298939876 +:1000CA009498959A00916B008CD107D143954093EF :1000DA0067005FBF1F910F915F914F9118950FEDC8 :1000EA000DBF0FE701BB01EE07BB0CE108BB02E045 -:1000FA0000BF05E003BF09E106BF01E009BF00E256 -:10010A000BBF0CE100BD37E04EE746D11124109237 -:10011A00670000E000936000002700936A000093E4 -:10012A006B0000EF00936C001CD180E090E000911E -:10013A006000003071F49698EFD07AD052E13DE831 -:10014A004DEF2ED12BD010916A00812F10916B00A8 -:10015A00912F013019F49698DFD080D0023039F708 -:10016A00969A1BE010936300109364001093650045 -:10017A0010936600DCCFEE24FF1841E1001F111F27 -:10018A004A9509F40895EE1CFF1CE21AF30A20F4BA -:10019A00E20EF31E8894F2CF0894F0CF0F931F93C8 -:1001AA002F933F934F9368D00CEC802E7AD00EEBAE -:1001BA00802E77D0AAE6B0E095D0ABE6B0E092D038 -:1001CA0010916A0020916B002F93287F283F11F02D -:1001DA00E89409C02F9168941095209531E0130F87 -:1001EA0030E0231F01C02F91269517952695179564 -:1001FA00269517952695179530916A000EF4319534 -:10020A00432F3F70432F330F330F330F440F340FF5 -:10021A00369536953695369510936A0020936B007D -:10022A0030936C004F913F912F911F910F91089538 -:10023A000F9322D00CEC802E34D004E4802E31D0DF -:10024A000F9108950F930FB800E40EB90BE10DB9A1 -:10025A00769BFDCFC09AC0980F9108950F938CD0CA -:10026A00B29B0196B39B0197B49B01C003C000E007 -:10027A00009360000F910895F894B99A33E04EEB19 -:10028A008BD0B99830E04AE887D005D033E042E312 -:10029A0083D078940895B19B716002C0B1997E7F32 -:1002AA0008950F931F93082D18E0069508F458F047 -:1002BA00F894B99A30E046E76FD0B99830E042E155 -:1002CA006BD078940AC0F894B99A30E04AE064D0C6 -:1002DA00B99830E04EE760D078941A9531F71F91BB -:1002EA000F9108950F931F93002718E0F89406952D -:1002FA00B99A30E04AE050D0B99830E040E14CD0A9 -:10030A00B199006830E04CE647D01A9581F70C9312 -:10031A0078941F910F910895F8945F9354E0A3E69F -:10032A00B0E08093610090936200009161001091A7 -:10033A0062002AE030E01FDFED9200936100109323 -:10034A0062005A9591F75F91789408950F931F93DD -:10035A00E4EDF3E01127E00FF11F04901F910F91D4 -:10036A000895C59A22D0C5980895C59A1ED01DD061 -:10037A001CD01BD0C59808950F931F932F932AE082 -:10038A001FEF0FEF0A95F1F71A95D9F72A95C1F7DA -:10039A002F911F910F91089541503040E8F7089529 -:1003AA00415030405040E0F708950F931F932F9328 -:1003BA0026E00FEF1FEF1A95F1F70A95D9F72A955C -:1003CA00C1F72F911F910F910895C0F9A4B0999286 -:0603DA0082F880909CBF38 +:1000FA0000BF05E003BF09E106BF00E20BBF0CE148 +:10010A0000BD11241092670000E0009360000FEF19 +:10011A0000936C0005E000936D0005E000936E000B +:10012A0001E000936F0000270093690000936A00C2 +:10013A0000EF00936B0060D180E090E000916000D6 +:10014A00003031F4969833D161D001E009BF25D04F +:10015A00013019F496982BD1CCD0023079F7969ABF +:10016A001BE01093630010936400109365001093D2 +:10017A006600E4CFEE24FF1841E1001F111F4A95E3 +:10018A0009F40895EE1CFF1CE21AF30A20F4E20EA9 +:10019A00F31E8894F2CF0894F0CF0F931F932F93F6 +:1001AA003F934F935F936F930091690010916A0098 +:1001BA0020916B0030916C0040916D0050916F005E +:1001CA000EF43195552309F419C003172CF416F4CB +:1001DA00909801C0909A12C0031729F016F4909AC9 +:1001EA0001C090980BC016F4909801C0909A2417F9 +:1001FA000CF404C016F4909A01C090986F915F9124 +:10020A004F913F912F911F910F9108951F935BD0AA +:10021A005CE034E34DEF0FD15CE034E34DEF0BD1FA +:10022A0008D010916900812F10916A00912F1F91B7 +:10023A0008950F931F932F933F934F9368D00CEC1D +:10024A00802E7AD00EEB802E77D0A9E6B0E095D03A +:10025A00AAE6B0E092D01091690020916A002F932B +:10026A00287F283F11F0E89409C02F9168941095CF +:10027A00209531E0130F30E0231F01C02F912695FE +:10028A0017952695179526951795269517953091C2 +:10029A0069000EF43195432F3F70432F330F330F0C +:1002AA00330F440F340F369536953695369510939D +:1002BA00690020936A0030936B004F913F912F9110 +:1002CA001F910F9108950F9322D00CEC802E34D0F9 +:1002DA0004E4802E31D00F9108950F930FB800E4F3 +:1002EA000EB90BE10DB9769BFDCFC09AC0980F915C +:1002FA0008950F938CD0B29B0196B39B0197B49B40 +:10030A0001C003C000E0009360000F910895F894C3 +:10031A00B99A33E04EEB8BD0B99830E04AE887D0EF +:10032A0005D033E042E383D078940895B19B71609D +:10033A0002C0B1997E7F08950F931F93082D18E08C +:10034A00069508F458F0F894B99A30E046E76FD069 +:10035A00B99830E042E16BD078940AC0F894B99A1F +:10036A0030E04AE064D0B99830E04EE760D0789443 +:10037A001A9531F71F910F9108950F931F93002734 +:10038A0018E0F8940695B99A30E04AE050D0B99846 +:10039A0030E040E14CD0B199006830E04CE647D0FB +:1003AA001A9581F70C9378941F910F910895F894F8 +:1003BA005F9354E0A3E6B0E08093610090936200FB +:1003CA0000916100109162002AE030E0D3DEED92E4 +:1003DA0000936100109362005A9591F75F917894A7 +:1003EA0008950F931F93EAE6F4E01127E00FF11F37 +:1003FA0004901F910F910895C59A22D0C598089527 +:10040A00C59A1ED01DD01CD01BD0C59808950F9335 +:10041A001F932F932AE01FEF0FEF0A95F1F71A9512 +:10042A00D9F72A95C1F72F911F910F91089541503D +:10043A003040E8F70895415030405040E0F70895C1 +:10044A000F931F932F9326E00FEF1FEF1A95F1F7E3 +:10045A000A95D9F72A95C1F72F911F910F910895FF +:0C046A00C0F9A4B0999282F880909CBF69 :00000001FF