min & max limit for temp setting

This commit is contained in:
Sergey Yarkov 2023-06-30 21:42:04 +03:00
parent f4112a7d64
commit b176b356ce
No known key found for this signature in database
GPG Key ID: E91CE1FABC619B6F
9 changed files with 811 additions and 666 deletions

View File

@ -7,6 +7,8 @@
.DEF DELAY_24_r = r21
.DEF DISP_NUM_L = r24 ; LSB числа которое сейчас на индикаторе
.DEF DISP_NUM_H = r25 ; MSB числа которое сейчас на индикаторе
.DEF EEP_A_r = r3
.DEF EEP_D_r = r4
.DEF REPROGRAM_STEP_r = r6
.EQU DIGIT_1_PIN = PD2 ; Пин разряда индикатора 1
@ -14,8 +16,8 @@
.EQU DIGIT_3_PIN = PD4 ; Пин разряда индикатора 3
.EQU DIGIT_4_PIN = PD5 ; Пин разряда индикатора 4
.EQU LED_ERR_PIN = PD6 ; Светодиод который говорит о том, что МК в состоянии ошибки
.EQU LED_ERR_PORT = PORTD
.EQU LED_PGM_PIN = PD6 ; Светодиод который говорит о том, что МК в состоянии настройки
.EQU LED_PGM_PORT = PORTD
.EQU OW_LINE = PB1 ; Пин шины 1-Wire
.EQU OW_DDR = DDRB
@ -64,6 +66,11 @@
.EQU MIN_HYST = 1 ; минимальный гистерезис который можно выставить - 0.1
.EQU MAX_HYST = 200 ; максимальный гистерезис который можно выставить - 20
.EQU MIN_TEMP_H = 0xfe
.EQU MIN_TEMP_L = 0x0c ; минимум -50 градусов уставка
.EQU MAX_TEMP_H = 0x04 ; максимум 120 градусов уставка
.EQU MAX_TEMP_L = 0xb0
; **** СТАНДАРТНЫЕ ПАРАМЕТРЫ ***********************************
.EQU DEFAULT_TEMP = 300 ; 30 градусов
@ -78,3 +85,9 @@
.EQU DEFAULT_SETTING_TEMP_H = HIGH(DEFAULT_TEMP)
.EQU DEFAULT_SETTING_HYST = DEFAULT_HYST
.EQU DEFAULT_SETTING_MODE = DEFAULT_MODE
.EQU EEP_SETTING_TEMP_H = 0x00
.EQU EEP_SETTING_TEMP_L = 0x01
.EQU EEP_SETTING_HYST = 0x02
.EQU EEP_SETTING_MODE = 0x03
.EQU EEP_FIRST_TIME_RUN = 0x04

View File

@ -7,12 +7,12 @@
:10003A002F933F934F935F935FB74091670045308B
:10004A000CF403C0442740936700403081F493982E
:10005A00949895980EF002C00BE002C000916500DA
:10006A00002311F0929A01C0929850D305D24130E0
:10006A00002311F0929A01C0929858D305D24130D8
:10007A0081F4929894989598009164003091650063
:10008A00032B11F0939A01C09398009164003ED318
:10008A00032B11F0939A01C093980091640046D310
:10009A00F3D1423059F4929893989598949A009192
:1000AA00630034D3002D0F77002EE6D1433041F49C
:1000BA00929893989498959A0091660027D3DCD1E8
:1000AA0063003CD3002D0F77002EE6D1433041F494
:1000BA00929893989498959A009166002FD3DCD1E0
:1000CA004395409367005FBF5F914F913F912F9196
:1000DA001F910F9118950FED0DBF0FE701BB01EEB0
:1000EA0007BB0CE108BB02E000BF05E003BF03E267
@ -24,9 +24,9 @@
:10014A0040926D0003E0302ED3D040926E0000271B
:10015A00009368000093690000EF00936A000FEFB4
:10016A0000937100662428D100916F00083209F4C7
:10017A0005C012E010936000DBD201C0D2D280E049
:10017A0005C012E010936000E3D201C0DAD280E039
:10018A0090E000916000003051F420916A002093C1
:10019A00660003D1A1D2B4D011E019BF41D0013019
:10019A00660003D1A9D2B4D011E019BF41D0013011
:1001AA0009F4A6D1023069F71BE01093630010939B
:1001BA006400109365001093660011E019BFE1CF47
:1001CA00EE24FF1841E1001F111F4A9509F4089512
@ -59,66 +59,67 @@
:10037A00442311F4909801C0909A07C040916E00EE
:10038A00442311F4909A01C090987F915F914F9104
:10039A003F912F911F910F9108951F9361D052E1C0
:1003AA0035E54DEBE0D112D010916800812F109104
:1003BA006900912F1F9108950F9340D103E3802E76
:1003CA0052D1AFE6B0E06ED10F9108950F931F930B
:1003DA002F933F934F9332D170FF3CC00CEC802E89
:1003EA0042D10EEB802E3FD1A8E6B0E05BD1A9E660
:1003FA00B0E058D110916800209169002F93287FAE
:1003AA0035E54DEBE8D112D010916800812F1091FC
:1003BA006900912F1F9108950F9348D103E3802E6E
:1003CA005AD1AFE6B0E076D10F9108950F931F93FB
:1003DA002F933F934F933AD170FF3CC00CEC802E81
:1003EA004AD10EEB802E47D1A8E6B0E063D1A9E648
:1003FA00B0E060D110916800209169002F93287FA6
:10040A00283F11F0E89407C02F9168941095209521
:10041A001F5F2F4F01C02F91269517952695179587
:10042A002695179526951795309168000EF4319503
:10043A00432F3F70432F330F330F330F440F340FC3
:10044A00369536953695369510936800209369004F
:10045A0030936A004F913F912F911F910F91089508
:10046A000F93ECD070FF06C00CEC802EFCD004E495
:10047A00802EF9D00F9108950F930F920FB800E4D0
:10046A000F93F4D070FF06C00CEC802E04D104E484
:10047A00802E01D10F9108950F930F920FB800E4C7
:10048A000EB90BE10DB9769BFDCFC09AC0980F90BB
:10049A000F9108950F93B49B01C01CC00091710085
:1004AA00002309F417C000270093710048D1639410
:1004BA00162D143014F435D10DC010E019BF9298DE
:1004CA009398949895986624EBDE32D1969810E02A
:1004AA00002309F417C000270093710050D1639408
:1004BA00162D143014F43DD10DC010E019BF9298D6
:1004CA009398949895986624EBDE3AD1969810E022
:1004DA0010936000B49901C009C000917100002313
:1004EA0009F004C00FEF0093710029D10F9108950C
:1004EA0009F004C00FEF0093710031D10F91089504
:1004FA000F931F932F933F934F93062D002309F0D9
:10050A0004C09098969A0DD16394C4DF013029F003
:10051A00023049F1033031F18BC0DED0B29B04C006
:10052A0000C0B39B0AC011C00AD110916D00183CDB
:10053A0009F0139510936D0008C001D110916D0058
:10050A0004C09098969A15D16394C4DF013029F0FB
:10051A00023049F1033031F193C0E6D0B29B04C0F6
:10052A0000C0B39B0AC011C012D110916D00183CD3
:10053A0009F0139510936D0008C009D110916D0050
:10054A00113009F01A9510936D000F931F930091C3
:10055A006D001AE048DE802F9927F09266001F91FD
:10056A000F9166C03FC0B8D0B29B04C000C0B39B15
:10057A000FC019C0E4D010916C0020916B003AE0D2
:10058A00130F3327231F10936C0020936B000BC0AB
:10059A00D6D010916C0020916B001A502040109315
:1005AA006C0020936B000F931F932F933F9300913E
:1005BA006C0010916B00212F207811F4E89405C08B
:1005CA006894009510950F5F1F4F2AE030E0F8DD20
:1005DA00802F912F0AE0009366003F912F911F917F
:1005EA000F9126C0E894B29B04C000C0B39B06C01A
:1005FA0009C0A5D011E010936E0004C0A0D010E08D
:10060A0010936E001127812F912F112710936300E9
:10061A00109364001093650020916E00222309F064
:10062A0004C01CE01093660003C01DE0109366002E
:10063A004F913F912F911F910F910895F894B99A74
:10064A0033E04EEB8CD0B99830E04AE888D005D038
:10065A0033E042E384D078940895B19B716002C07C
:10066A00B1997E7F0895F8940F931F93082D18E08F
:10067A00069508F448F0B99A30E046E770D0B99880
:10068A0030E042E16CD008C0B99A30E04AE067D065
:10069A00B99830E04EE763D01A9551F71F910F9140
:1006AA0078940895F8940F931F93002718E00695FD
:1006BA00B99A30E04AE053D0B99830E040E14FD0DF
:1006CA00B199006830E04CE64AD01A9581F70C934C
:1006DA001F910F91789408950F935F9353E0A3E6C7
:1006EA00B0E08093610090936200009161001091E4
:1006FA0062002AE030E064DDED920093610010931D
:10070A0062005A9591F75F910F9108950F931F9385
:10071A00EAE7F7E01127E00FF11F04901F910F910C
:10072A000895C59A53E039EA4DE71DD0C598089552
:10073A00C59A5CE034E34DEF16D0C59808950F933F
:10074A001F932F932AE01FEF0FEF0A95F1F71A95DF
:10075A00D9F72A95C1F72F911F910F91089541500A
:10076A003040E8F70895415030405040E0F708958E
:0E077A00C0F9A4B0999282F880909CBFC68905
:10056A000F916EC047C0C0D0B29B04C000C0B39BFD
:10057A0013C021C0ECD010916C0020916B00103B8D
:10058A0034E0230731F03AE0130F3327231F109387
:10059A006C0020936B000FC0DAD010916C00209190
:1005AA006B001C303EEF230711F01A5020401093C5
:1005BA006C0020936B000F931F932F933F9300912E
:1005CA006C0010916B00212F207811F4E89405C07B
:1005DA006894009510950F5F1F4F2AE030E0F0DD18
:1005EA00802F912F0AE0009366003F912F911F916F
:1005FA000F9126C0E894B29B04C000C0B39B06C00A
:10060A0009C0A5D011E010936E0004C0A0D010E07C
:10061A0010936E001127812F912F1EE01093630013
:10062A00109364001093650020916E00222309F054
:10063A0004C01CE01093660003C01DE0109366001E
:10064A004F913F912F911F910F910895F894B99A64
:10065A0033E04EEB8CD0B99830E04AE888D005D028
:10066A0033E042E384D078940895B19B716002C06C
:10067A00B1997E7F0895F8940F931F93082D18E07F
:10068A00069508F448F0B99A30E046E770D0B99870
:10069A0030E042E16CD008C0B99A30E04AE067D055
:1006AA00B99830E04EE763D01A9551F71F910F9130
:1006BA0078940895F8940F931F93002718E00695ED
:1006CA00B99A30E04AE053D0B99830E040E14FD0CF
:1006DA00B199006830E04CE64AD01A9581F70C933C
:1006EA001F910F91789408950F935F9353E0A3E6B7
:1006FA00B0E08093610090936200009161001091D4
:10070A0062002AE030E05CDDED9200936100109314
:10071A0062005A9591F75F910F9108950F931F9375
:10072A00EAE8F7E01127E00FF11F04901F910F91FB
:10073A000895C59A53E039EA4DE71DD0C598089542
:10074A00C59A5CE034E34DEF16D0C59808950F932F
:10075A001F932F932AE01FEF0FEF0A95F1F71A95CF
:10076A00D9F72A95C1F72F911F910F9108954150FA
:10077A003040E8F70895415030405040E0F708957E
:0E078A00C0F9A4B0999282F880909CBFC689F5
:00000001FF

View File

@ -1,58 +1,58 @@
AVRASM ver. 2.2.7 main.asm Fri Jun 30 16:51:54 2023
AVRASM ver. 2.2.7 main.asm Fri Jun 30 21:37:26 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(329): Including file 'div16u.asm'
main.asm(317): Including file 'div16u.asm'
div16u.asm(22): warning: Register r16 already defined by the .DEF directive
main.asm(329): 'div16u.asm' included form here
main.asm(317): 'div16u.asm' included form here
div16u.asm(23): warning: Register r17 already defined by the .DEF directive
main.asm(329): 'div16u.asm' included form here
main.asm(317): 'div16u.asm' included form here
div16u.asm(24): warning: Register r16 already defined by the .DEF directive
main.asm(329): 'div16u.asm' included form here
main.asm(317): 'div16u.asm' included form here
div16u.asm(25): warning: Register r17 already defined by the .DEF directive
main.asm(329): 'div16u.asm' included form here
main.asm(317): 'div16u.asm' included form here
div16u.asm(27): warning: Register r19 already defined by the .DEF directive
main.asm(329): 'div16u.asm' included form here
main.asm(317): 'div16u.asm' included form here
div16u.asm(28): warning: Register r20 already defined by the .DEF directive
main.asm(329): 'div16u.asm' included form here
main.asm(330): Including file 'div8u.asm'
main.asm(317): 'div16u.asm' included form here
main.asm(318): Including file 'div8u.asm'
div8u.asm(18): warning: Register r15 already defined by the .DEF directive
main.asm(330): 'div8u.asm' included form here
main.asm(318): 'div8u.asm' included form here
div8u.asm(19): warning: Register r16 already defined by the .DEF directive
main.asm(330): 'div8u.asm' included form here
main.asm(318): 'div8u.asm' included form here
div8u.asm(20): warning: Register r16 already defined by the .DEF directive
main.asm(330): 'div8u.asm' included form here
main.asm(318): 'div8u.asm' included form here
div8u.asm(21): warning: Register r17 already defined by the .DEF directive
main.asm(330): 'div8u.asm' included form here
main.asm(318): 'div8u.asm' included form here
div8u.asm(22): warning: Register r18 already defined by the .DEF directive
main.asm(330): 'div8u.asm' included form here
main.asm(331): Including file 'mpy16u.asm'
main.asm(318): 'div8u.asm' included form here
main.asm(319): Including file 'mpy16u.asm'
mpy16u.asm(19): warning: Register r16 already defined by the .DEF directive
main.asm(331): 'mpy16u.asm' included form here
main.asm(319): 'mpy16u.asm' included form here
mpy16u.asm(20): warning: Register r17 already defined by the .DEF directive
main.asm(331): 'mpy16u.asm' included form here
main.asm(319): 'mpy16u.asm' included form here
mpy16u.asm(21): warning: Register r18 already defined by the .DEF directive
main.asm(331): 'mpy16u.asm' included form here
main.asm(319): 'mpy16u.asm' included form here
mpy16u.asm(22): warning: Register r19 already defined by the .DEF directive
main.asm(331): 'mpy16u.asm' included form here
main.asm(319): 'mpy16u.asm' included form here
mpy16u.asm(23): warning: Register r18 already defined by the .DEF directive
main.asm(331): 'mpy16u.asm' included form here
main.asm(319): 'mpy16u.asm' included form here
mpy16u.asm(24): warning: Register r19 already defined by the .DEF directive
main.asm(331): 'mpy16u.asm' included form here
main.asm(319): 'mpy16u.asm' included form here
mpy16u.asm(25): warning: Register r20 already defined by the .DEF directive
main.asm(331): 'mpy16u.asm' included form here
main.asm(319): 'mpy16u.asm' included form here
mpy16u.asm(26): warning: Register r21 already defined by the .DEF directive
main.asm(331): 'mpy16u.asm' included form here
main.asm(498): warning: Register r16 already defined by the .DEF directive
main.asm(499): warning: Register r17 already defined by the .DEF directive
main.asm(319): 'mpy16u.asm' included form here
main.asm(486): warning: Register r16 already defined by the .DEF directive
main.asm(487): 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'
main.asm(329): Including file 'div16u.asm'
main.asm(330): Including file 'div8u.asm'
main.asm(331): Including file 'mpy16u.asm'
main.asm(317): Including file 'div16u.asm'
main.asm(318): Including file 'div8u.asm'
main.asm(319): Including file 'mpy16u.asm'
;
@ -836,6 +836,11 @@ main.asm(331): Including file 'mpy16u.asm'
.EQU MIN_HYST = 1 ; минимальный гистерезис который можно выставить - 0.1
.EQU MAX_HYST = 200 ; максимальный гистерезис который можно выставить - 20
.EQU MIN_TEMP_H = 0xfe
.EQU MIN_TEMP_L = 0x0c ; минимум -50 градусов уставка
.EQU MAX_TEMP_H = 0x04 ; максимум 120 градусов уставка
.EQU MAX_TEMP_L = 0xb0
; **** СТАНДАРТНЫЕ ПАРАМЕТРЫ ***********************************
.EQU DEFAULT_TEMP = 300 ; 30 градусов
@ -1005,7 +1010,7 @@ main.asm(331): Including file 'mpy16u.asm'
000037 9a92 sbi PORTD, DIGIT_1_PIN
000038 c001 rjmp PC+2
000039 9892 cbi PORTD, DIGIT_1_PIN
00003a d350 rcall DISPLAY_DECODER
00003a d358 rcall DISPLAY_DECODER
00003b d205 rcall USI_TRANSMIT
_indicate_2:
@ -1023,7 +1028,7 @@ main.asm(331): Including file 'mpy16u.asm'
000048 c001 rjmp PC+2
000049 9893 cbi PORTD, DIGIT_2_PIN
00004a 9100 0064 lds TEMP_REG_A, DIGITS+1
00004c d33e rcall DISPLAY_DECODER
00004c d346 rcall DISPLAY_DECODER
00004d d1f3 rcall USI_TRANSMIT
_indicate_3:
@ -1035,7 +1040,7 @@ main.asm(331): Including file 'mpy16u.asm'
000052 9895 cbi PORTD, DIGIT_4_PIN
000053 9a94 sbi PORTD, DIGIT_3_PIN
000054 9100 0063 lds TEMP_REG_A, DIGITS
000056 d334 rcall DISPLAY_DECODER
000056 d33c rcall DISPLAY_DECODER
000057 2d00 mov r16, r0
000058 770f cbr r16, (1<<7)
000059 2e00 mov r0, r16
@ -1050,7 +1055,7 @@ main.asm(331): Including file 'mpy16u.asm'
00005f 9894 cbi PORTD, DIGIT_3_PIN
000060 9a95 sbi PORTD, DIGIT_4_PIN
000061 9100 0066 lds TEMP_REG_A, DIGITS+3
000063 d327 rcall DISPLAY_DECODER
000063 d32f rcall DISPLAY_DECODER
000064 d1dc rcall USI_TRANSMIT
_indicate_exit:
@ -1149,18 +1154,6 @@ main.asm(331): Including file 'mpy16u.asm'
0000a9 d0d3 rcall EEP_RD_BYTE
0000aa 9240 006e sts SETTING_MODE, EEP_D_r
; ldi r16, DEFAULT_SETTING_TEMP_L
; sts SETTING_TEMP_L, r16 ; уставка LOW
;
; ldi r16, DEFAULT_SETTING_TEMP_H
; sts SETTING_TEMP_H, r16 ; уставка HIGH
;
; ldi r16, DEFAULT_SETTING_HYST
; sts SETTING_HYST, r16 ; гистерезис
;
; ldi r16, DEFAULT_SETTING_MODE
; sts SETTING_MODE, r16 ; режим работы
_CONTINUE_INIT:
0000ac 2700 clr r16
0000ad 9300 0068 sts TEMP_L, r16
@ -1185,10 +1178,10 @@ main.asm(331): Including file 'mpy16u.asm'
ERR_FAMILY_CODE:
0000be e012 ldi r17, MCU_STATE_ERROR
0000bf 9310 0060 sts MCU_STATE, r17
0000c1 d2db rcall BEEP_LONG
0000c1 d2e3 rcall BEEP_LONG
0000c2 c001 rjmp PC+2
START_PROGRAM:
0000c3 d2d2 rcall BEEP_SHORT
0000c3 d2da rcall BEEP_SHORT
0000c4 e080
0000c5 e090 display_load 0
//</editor-fold>
@ -1206,7 +1199,7 @@ main.asm(331): Including file 'mpy16u.asm'
0000cc 9320 0066 sts DIGITS+3, r18
0000ce d103 rcall TEMP_UPD ; обновление данных о температуре
0000cf d2a1 rcall DISPLAY_UPD_DIGITS
0000cf d2a9 rcall DISPLAY_UPD_DIGITS
0000d0 d0b4 rcall TEMP_COMPARSION ; логика термостата
0000d1 e011
0000d2 bf19 outi r17, TIMSK, (1<<OCIE0A) ; вкл. индикатор
@ -1630,7 +1623,7 @@ main.asm(331): Including file 'mpy16u.asm'
0001d4 e152
0001d5 e535
0001d6 eb4d
0001d7 d1e0 DELAY24 751000
0001d7 d1e8 DELAY24 751000
0001d8 d012 rcall TEMP_RD
; обновляем данные в ячейках
@ -1646,14 +1639,14 @@ main.asm(331): Including file 'mpy16u.asm'
RD_F_CODE:
0001e1 930f push r16
0001e2 d140 rcall OW_PRESENCE
0001e2 d148 rcall OW_PRESENCE
0001e3 e303 ldi r16, DS18B20_CMD_READROM
0001e4 2e80 mov OW_CMD_r, r16
0001e5 d152 rcall OW_SEND_BYTE
0001e5 d15a rcall OW_SEND_BYTE
0001e6 e6af ldi XL, LOW(DEVICE_FAMILY_CODE)
0001e7 e0b0 ldi XH, HIGH(DEVICE_FAMILY_CODE)
0001e8 d16e rcall OW_RD_BYTE
0001e8 d176 rcall OW_RD_BYTE
0001e9 910f pop r16
0001ea 9508 ret//</editor-fold>
@ -1666,25 +1659,25 @@ main.asm(331): Including file 'mpy16u.asm'
0001ee 933f push r19
0001ef 934f push r20
0001f0 d132 rcall OW_PRESENCE
0001f0 d13a rcall OW_PRESENCE
0001f1 ff70 sbrs OWFR, OWPRF
0001f2 c03c rjmp _TEMP_RD_EXIT
0001f3 ec0c ldi r16, DS18B20_CMD_SKIPROM
0001f4 2e80 mov OW_CMD_r, r16
0001f5 d142 rcall OW_SEND_BYTE
0001f5 d14a rcall OW_SEND_BYTE
0001f6 eb0e ldi r16, DS18B20_CMD_RSCRATCHPAD
0001f7 2e80 mov OW_CMD_r, r16
0001f8 d13f rcall OW_SEND_BYTE
0001f8 d147 rcall OW_SEND_BYTE
0001f9 e6a8 ldi XL, LOW(TEMP_L)
0001fa e0b0 ldi XH, HIGH(TEMP_L)
0001fb d15b rcall OW_RD_BYTE
0001fb d163 rcall OW_RD_BYTE
0001fc e6a9 ldi XL, LOW(TEMP_H)
0001fd e0b0 ldi XH, HIGH(TEMP_H)
0001fe d158 rcall OW_RD_BYTE
0001fe d160 rcall OW_RD_BYTE
0001ff 9110 0068 lds r17, TEMP_L
000201 9120 0069 lds r18, TEMP_H
@ -1758,17 +1751,17 @@ main.asm(331): Including file 'mpy16u.asm'
TEMP_CONV:
000235 930f push r16
000236 d0ec rcall OW_PRESENCE
000236 d0f4 rcall OW_PRESENCE
000237 ff70 sbrs OWFR, OWPRF
000238 c006 rjmp _TEMP_CONV_EXIT
000239 ec0c ldi r16, DS18B20_CMD_SKIPROM
00023a 2e80 mov OW_CMD_r, r16
00023b d0fc rcall OW_SEND_BYTE
00023b d104 rcall OW_SEND_BYTE
00023c e404 ldi r16, DS18B20_CMD_CONVERTTEMP
00023d 2e80 mov OW_CMD_r, r16
00023e d0f9 rcall OW_SEND_BYTE
00023e d101 rcall OW_SEND_BYTE
_TEMP_CONV_EXIT:
00023f 910f pop r16
@ -1824,12 +1817,12 @@ main.asm(331): Including file 'mpy16u.asm'
_SW_SET_FROM_0_TO_1:
000258 2700 clr r16
000259 9300 0071 sts SW_DATA, r16
00025b d148 rcall DEBOUNCE_SW
00025b d150 rcall DEBOUNCE_SW
00025c 9463 inc REPROGRAM_STEP_r
00025d 2d16 mov r17, REPROGRAM_STEP_r
00025e 3014 cpi r17, 4
00025f f414 brge _SAVE_SETTINGS
000260 d135 rcall BEEP_SHORT
000260 d13d rcall BEEP_SHORT
000261 c00d rjmp _SW_CHECK_ON_1
_SAVE_SETTINGS:
000262 e010
@ -1840,7 +1833,7 @@ main.asm(331): Including file 'mpy16u.asm'
000267 9895 cbi PORTD, DIGIT_4_PIN
000268 2466 clr REPROGRAM_STEP_r
000269 deeb rcall WRITE_PARAMS_TO_EEP
00026a d132 rcall BEEP_LONG
00026a d13a rcall BEEP_LONG
00026b 9896 cbi PORTD, LED_PGM_PIN
00026c e010 ldi r17, MCU_STATE_DEFAULT
00026d 9310 0060 sts MCU_STATE, r17
@ -1856,7 +1849,7 @@ main.asm(331): Including file 'mpy16u.asm'
_SW_SET_FROM_1_TO_0:
000277 ef0f ser r16
000278 9300 0071 sts SW_DATA, r16
00027a d129 rcall DEBOUNCE_SW
00027a d131 rcall DEBOUNCE_SW
_BUTTON_PROCESS_END:
00027b 910f pop r16
00027c 9508 ret
@ -1877,7 +1870,7 @@ main.asm(331): Including file 'mpy16u.asm'
_INTO:
000286 9890 relay_off
000287 9a96 sbi PORTD, LED_PGM_PIN
000288 d10d rcall BEEP_SHORT
000288 d115 rcall BEEP_SHORT
000289 9463 inc REPROGRAM_STEP_r
_REPROGRAM_SETTINGS_LOOP:
00028a dfc4 rcall BUTTON_PROCESS
@ -1888,11 +1881,11 @@ main.asm(331): Including file 'mpy16u.asm'
00028e f149 breq _STEP_2
00028f 3003 cpi r16, 3
000290 f131 breq _S3_JMP
000291 c08b rjmp _REPROGRAM_SETTINGS_END
000291 c093 rjmp _REPROGRAM_SETTINGS_END
//<editor-fold defaultstate="collapsed" desc="Настройка: шаг 1">
_STEP_1: ; установка и отображение гистерезиса
000292 d0de rcall DISPLAY_UPD_DIGITS
000292 d0e6 rcall DISPLAY_UPD_DIGITS
_S1_CHECK_PLUS:
000293 9bb2 sbis SW_PIN, SW_PLUS_PIN
000294 c004 rjmp _INCREASE_HYST
@ -1902,7 +1895,7 @@ main.asm(331): Including file 'mpy16u.asm'
000297 c00a rjmp _DECREASE_HYST
000298 c011 rjmp _SHOW_HYST
_INCREASE_HYST:
000299 d10a rcall DEBOUNCE_SW
000299 d112 rcall DEBOUNCE_SW
00029a 9110 006d lds r17, SETTING_HYST
00029c 3c18 cpi r17, MAX_HYST
00029d f009 breq PC+2
@ -1910,7 +1903,7 @@ main.asm(331): Including file 'mpy16u.asm'
00029f 9310 006d sts SETTING_HYST, r17
0002a1 c008 rjmp _SHOW_HYST
_DECREASE_HYST:
0002a2 d101 rcall DEBOUNCE_SW
0002a2 d109 rcall DEBOUNCE_SW
0002a3 9110 006d lds r17, SETTING_HYST
0002a5 3011 cpi r17, MIN_HYST
0002a6 f009 breq PC+2
@ -1927,149 +1920,158 @@ main.asm(331): Including file 'mpy16u.asm'
0002b2 92f0 0066 sts DIGITS+3, drem8u
0002b4 911f pop dv8u
0002b5 910f pop dd8u
0002b6 c066 rjmp _REPROGRAM_SETTINGS_END
0002b6 c06e rjmp _REPROGRAM_SETTINGS_END
//</editor-fold>
_S3_JMP: ; просто прыжок на _STEP_3
0002b7 c03f rjmp _STEP_3
0002b7 c047 rjmp _STEP_3
//<editor-fold defaultstate="collapsed" desc="Настройка: шаг 2">
_STEP_2:
0002b8 d0b8 rcall DISPLAY_UPD_DIGITS
0002b8 d0c0 rcall DISPLAY_UPD_DIGITS
_S2_CHECK_PLUS:
0002b9 9bb2 sbis SW_PIN, SW_PLUS_PIN
0002ba c004 rjmp _INCREASE_TEMP
0002bb c000 rjmp _S2_CHECK_MINUS
_S2_CHECK_MINUS:
0002bc 9bb3 sbis SW_PIN, SW_MINUS_PIN
0002bd c00f rjmp _DECREASE_TEMP
0002be c019 rjmp _SHOW_TEMP
0002bd c013 rjmp _DECREASE_TEMP
0002be c021 rjmp _SHOW_TEMP
_INCREASE_TEMP:
0002bf d0e4 rcall DEBOUNCE_SW
0002bf d0ec rcall DEBOUNCE_SW
0002c0 9110 006c lds r17, SETTING_TEMP_L
0002c2 9120 006b lds r18, SETTING_TEMP_H
0002c4 e03a ldi r19, 10
0002c5 0f13 add r17, r19
0002c6 2733 clr r19
0002c7 1f23 adc r18, r19
0002c8 9310 006c sts SETTING_TEMP_L, r17
0002ca 9320 006b sts SETTING_TEMP_H, r18
0002cc c00b rjmp _SHOW_TEMP
0002c4 3b10 cpi r17, MAX_TEMP_L
0002c5 e034 ldi r19, MAX_TEMP_H
0002c6 0723 cpc r18, r19
0002c7 f031 breq PC+7
0002c8 e03a ldi r19, 10
0002c9 0f13 add r17, r19
0002ca 2733 clr r19
0002cb 1f23 adc r18, r19
0002cc 9310 006c sts SETTING_TEMP_L, r17
0002ce 9320 006b sts SETTING_TEMP_H, r18
0002d0 c00f rjmp _SHOW_TEMP
_DECREASE_TEMP:
0002cd d0d6 rcall DEBOUNCE_SW
0002ce 9110 006c lds r17, SETTING_TEMP_L
0002d0 9120 006b lds r18, SETTING_TEMP_H
0002d2 501a subi r17, 10
0002d3 4020 sbci r18, 0
0002d4 9310 006c sts SETTING_TEMP_L, r17
0002d6 9320 006b sts SETTING_TEMP_H, r18
0002d1 d0da rcall DEBOUNCE_SW
0002d2 9110 006c lds r17, SETTING_TEMP_L
0002d4 9120 006b lds r18, SETTING_TEMP_H
0002d6 301c cpi r17, MIN_TEMP_L
0002d7 ef3e ldi r19, MIN_TEMP_H
0002d8 0723 cpc r18, r19
0002d9 f011 breq PC+3
__DECREASE:
0002da 501a subi r17, 10
0002db 4020 sbci r18, 0
0002dc 9310 006c sts SETTING_TEMP_L, r17
0002de 9320 006b sts SETTING_TEMP_H, r18
_SHOW_TEMP:
0002d8 930f push dd16uL
0002d9 931f push dd16uH
0002da 932f push dv16uL
0002db 933f push dv16uH
0002e0 930f push dd16uL
0002e1 931f push dd16uH
0002e2 932f push dv16uL
0002e3 933f push dv16uH
0002dc 9100 006c lds dd16uL, SETTING_TEMP_L
0002de 9110 006b lds dd16uH, SETTING_TEMP_H
0002e0 2f21 mov r18, dd16uH
0002e1 7820 andi r18, (1<<7)
0002e2 f411 brne _NEGATE_SET_TEMP
0002e3 94e8 clt
0002e4 c005 rjmp _DIVIDE_SET_TEMP
0002e4 9100 006c lds dd16uL, SETTING_TEMP_L
0002e6 9110 006b lds dd16uH, SETTING_TEMP_H
0002e8 2f21 mov r18, dd16uH
0002e9 7820 andi r18, (1<<7)
0002ea f411 brne _NEGATE_SET_TEMP
0002eb 94e8 clt
0002ec c005 rjmp _DIVIDE_SET_TEMP
_NEGATE_SET_TEMP:
0002e5 9468 set
0002e6 9500
0002e7 9510
0002e8 5f0f
0002e9 4f1f com16 dd16uL, dd16uH
0002ed 9468 set
0002ee 9500
0002ef 9510
0002f0 5f0f
0002f1 4f1f com16 dd16uL, dd16uH
_DIVIDE_SET_TEMP:
0002ea e02a ldi dv16uL, LOW(10)
0002eb e030 ldi dv16uH, HIGH(10)
0002ec ddf8 rcall div16u
0002ed 2f80 mov DISP_NUM_L, dres16uL
0002ee 2f91 mov DISP_NUM_H, dres16uH
0002f2 e02a ldi dv16uL, LOW(10)
0002f3 e030 ldi dv16uH, HIGH(10)
0002f4 ddf0 rcall div16u
0002f5 2f80 mov DISP_NUM_L, dres16uL
0002f6 2f91 mov DISP_NUM_H, dres16uH
0002ef e00a ldi r16, 10
0002f0 9300 0066 sts DIGITS+3, r16 ; значок градуса
0002f7 e00a ldi r16, 10
0002f8 9300 0066 sts DIGITS+3, r16 ; значок градуса
0002f2 913f pop dv16uH
0002f3 912f pop dv16uL
0002f4 911f pop dd16uH
0002f5 910f pop dd16uL
0002f6 c026 rjmp _REPROGRAM_SETTINGS_END
0002fa 913f pop dv16uH
0002fb 912f pop dv16uL
0002fc 911f pop dd16uH
0002fd 910f pop dd16uL
0002fe c026 rjmp _REPROGRAM_SETTINGS_END
//</editor-fold>
//<editor-fold defaultstate="collapsed" desc="Настройка: шаг 3">
_STEP_3:
0002f7 94e8 clt
0002ff 94e8 clt
_S3_CHECK_PLUS:
0002f8 9bb2 sbis SW_PIN, SW_PLUS_PIN
0002f9 c004 rjmp _SET_HEAT_MODE
0002fa c000 rjmp _S3_CHECK_MINUS
000300 9bb2 sbis SW_PIN, SW_PLUS_PIN
000301 c004 rjmp _SET_HEAT_MODE
000302 c000 rjmp _S3_CHECK_MINUS
_S3_CHECK_MINUS:
0002fb 9bb3 sbis SW_PIN, SW_MINUS_PIN
0002fc c006 rjmp _SET_COOLING_MODE
0002fd c009 rjmp _SHOW_MODE
000303 9bb3 sbis SW_PIN, SW_MINUS_PIN
000304 c006 rjmp _SET_COOLING_MODE
000305 c009 rjmp _SHOW_MODE
_SET_HEAT_MODE:
0002fe d0a5 rcall DEBOUNCE_SW
0002ff e011 ldi r17, HEAT_MODE
000300 9310 006e sts SETTING_MODE, r17
000302 c004 rjmp _SHOW_MODE
000306 d0a5 rcall DEBOUNCE_SW
000307 e011 ldi r17, HEAT_MODE
000308 9310 006e sts SETTING_MODE, r17
00030a c004 rjmp _SHOW_MODE
_SET_COOLING_MODE:
000303 d0a0 rcall DEBOUNCE_SW
000304 e010 ldi r17, COOLING_MODE
000305 9310 006e sts SETTING_MODE, r17
00030b d0a0 rcall DEBOUNCE_SW
00030c e010 ldi r17, COOLING_MODE
00030d 9310 006e sts SETTING_MODE, r17
_SHOW_MODE:
000307 2711 clr r17
000308 2f81 mov DISP_NUM_L, r17
000309 2f91 mov DISP_NUM_H, r17
00030a 2711 clr r17
00030b 9310 0063 sts DIGITS, r17
00030d 9310 0064 sts DIGITS+1, r17
00030f 9310 0065 sts DIGITS+2, r17
000311 9120 006e lds r18, SETTING_MODE
000313 2322 tst r18
000314 f009 breq _SHOW_COOLING
000315 c004 rjmp _SHOW_HEATING
00030f 2711 clr r17
000310 2f81 mov DISP_NUM_L, r17
000311 2f91 mov DISP_NUM_H, r17
000312 e01e ldi r17, 14
000313 9310 0063 sts DIGITS, r17
000315 9310 0064 sts DIGITS+1, r17
000317 9310 0065 sts DIGITS+2, r17
000319 9120 006e lds r18, SETTING_MODE
00031b 2322 tst r18
00031c f009 breq _SHOW_COOLING
00031d c004 rjmp _SHOW_HEATING
_SHOW_COOLING:
000316 e01c ldi r17, 12
000317 9310 0066 sts DIGITS+3, r17
000319 c003 rjmp _REPROGRAM_SETTINGS_END
00031e e01c ldi r17, 12
00031f 9310 0066 sts DIGITS+3, r17
000321 c003 rjmp _REPROGRAM_SETTINGS_END
_SHOW_HEATING:
00031a e01d ldi r17, 13
00031b 9310 0066 sts DIGITS+3, r17
000322 e01d ldi r17, 13
000323 9310 0066 sts DIGITS+3, r17
//</editor-fold>
_REPROGRAM_SETTINGS_END:
00031d 914f pop r20
00031e 913f pop r19
00031f 912f pop r18
000320 911f pop r17
000321 910f pop r16
000322 9508 ret
000325 914f pop r20
000326 913f pop r19
000327 912f pop r18
000328 911f pop r17
000329 910f pop r16
00032a 9508 ret
//</editor-fold>
//<editor-fold defaultstate="collapsed" desc="Реализация интерфеса 1-Wire">
//<editor-fold defaultstate="collapsed" desc="1-Wire: опрос присутствия">
; **** ОПРОС ПРИСУТСТВИЯ УСТРОЙСТВА ******************************
OW_PRESENCE:
000323 94f8 cli
000324 9ab9 ow_pull
000325 e033
000326 eb4e
000327 d08c DELAY16 480
000328 98b9 ow_release
000329 e030
00032a e84a
00032b d088 DELAY16 70
00032c d005 rcall OW_CHECK_PRESENCE
00032b 94f8 cli
00032c 9ab9 ow_pull
00032d e033
00032e e342
00032f d084 DELAY16 410
000330 9478 sei
000331 9508 ret
00032e eb4e
00032f d08c DELAY16 480
000330 98b9 ow_release
000331 e030
000332 e84a
000333 d088 DELAY16 70
000334 d005 rcall OW_CHECK_PRESENCE
000335 e033
000336 e342
000337 d084 DELAY16 410
000338 9478 sei
000339 9508 ret
//</editor-fold>
//<editor-fold defaultstate="collapsed" desc="1-Wire: проверка наличия устройства">
@ -2077,83 +2079,83 @@ main.asm(331): Including file 'mpy16u.asm'
; Если подчиненное устройство притянет шину, то устанавливаем флаг OWPRF в единицу в регистре флагов
;
OW_CHECK_PRESENCE:
000332 9bb1 sbis OW_PIN, OW_LINE
000333 6071 sbr OWFR, (1<<OWPRF)
000334 c002 rjmp _EXIT
000335 99b1 sbic OW_PIN, OW_LINE
000336 7f7e cbr OWFR, (1<<OWPRF)
00033a 9bb1 sbis OW_PIN, OW_LINE
00033b 6071 sbr OWFR, (1<<OWPRF)
00033c c002 rjmp _EXIT
00033d 99b1 sbic OW_PIN, OW_LINE
00033e 7f7e cbr OWFR, (1<<OWPRF)
_EXIT:
000337 9508 ret
00033f 9508 ret
//</editor-fold>
//<editor-fold defaultstate="collapsed" desc="1-Wire: отправка байта">
OW_SEND_BYTE:
000338 94f8 cli
000339 930f push r16
00033a 931f push r17
00033b 2d08 mov r16, OW_CMD_r
00033c e018 ldi r17, 8
000340 94f8 cli
000341 930f push r16
000342 931f push r17
000343 2d08 mov r16, OW_CMD_r
000344 e018 ldi r17, 8
_OW_SEND_BYTE_LOOP:
00033d 9506 lsr r16
00033e f408 brcc _OW_SEND_0
00033f f048 brcs _OW_SEND_1
000345 9506 lsr r16
000346 f408 brcc _OW_SEND_0
000347 f048 brcs _OW_SEND_1
_OW_SEND_0:
000340 9ab9 ow_pull
000341 e030
000342 e746
000343 d070 DELAY16 60
000344 98b9 ow_release
000345 e030
000346 e142
000347 d06c DELAY16 10
000348 c008 rjmp _OW_SEND_BYTE_END
000348 9ab9 ow_pull
000349 e030
00034a e746
00034b d070 DELAY16 60
00034c 98b9 ow_release
00034d e030
00034e e142
00034f d06c DELAY16 10
000350 c008 rjmp _OW_SEND_BYTE_END
_OW_SEND_1:
000349 9ab9 ow_pull
00034a e030
00034b e04a
00034c d067 DELAY16 6
00034d 98b9 ow_release
00034e e030
00034f e74e
000350 d063 DELAY16 64
000351 9ab9 ow_pull
000352 e030
000353 e04a
000354 d067 DELAY16 6
000355 98b9 ow_release
000356 e030
000357 e74e
000358 d063 DELAY16 64
_OW_SEND_BYTE_END:
000351 951a dec r17
000352 f751 brne _OW_SEND_BYTE_LOOP
000353 911f pop r17
000354 910f pop r16
000355 9478 sei
000356 9508 ret
000359 951a dec r17
00035a f751 brne _OW_SEND_BYTE_LOOP
00035b 911f pop r17
00035c 910f pop r16
00035d 9478 sei
00035e 9508 ret
//</editor-fold>
//<editor-fold defaultstate="collapsed" desc="1-Wire: чтение байта">
OW_RD_BYTE:
000357 94f8 cli
000358 930f push r16
000359 931f push r17
00035a 2700 clr r16
00035b e018 ldi r17, 8
00035f 94f8 cli
000360 930f push r16
000361 931f push r17
000362 2700 clr r16
000363 e018 ldi r17, 8
_OW_RD_BYTE_LP:
00035c 9506 lsr r16
00035d 9ab9 ow_pull
00035e e030
00035f e04a
000360 d053 DELAY16 6
000361 98b9 ow_release
000362 e030
000363 e140
000364 d04f DELAY16 9
000365 99b1 sbic OW_PIN, OW_LINE
000366 6800 sbr r16, (1<<7)
000367 e030
000368 e64c
000369 d04a DELAY16 55
00036a 951a dec r17
00036b f781 brne _OW_RD_BYTE_LP
00036c 930c st X, r16
00036d 911f pop r17
00036e 910f pop r16
00036f 9478 sei
000370 9508 ret
000364 9506 lsr r16
000365 9ab9 ow_pull
000366 e030
000367 e04a
000368 d053 DELAY16 6
000369 98b9 ow_release
00036a e030
00036b e140
00036c d04f DELAY16 9
00036d 99b1 sbic OW_PIN, OW_LINE
00036e 6800 sbr r16, (1<<7)
00036f e030
000370 e64c
000371 d04a DELAY16 55
000372 951a dec r17
000373 f781 brne _OW_RD_BYTE_LP
000374 930c st X, r16
000375 911f pop r17
000376 910f pop r16
000377 9478 sei
000378 9508 ret
//</editor-fold>
//</editor-fold>
@ -2162,138 +2164,138 @@ main.asm(331): Including file 'mpy16u.asm'
; Описание: Перемещает цифры числа в соответствующие ячейки памяти в SRAM
; путем деления этого числа несколько раз
DISPLAY_UPD_DIGITS:
000371 930f push r16
000372 935f push r21
000373 e053 ldi r21, 3
000379 930f push r16
00037a 935f push r21
00037b e053 ldi r21, 3
; инициализация указателя (за каждый проход цикла будет инкрементироваться)
000374 e6a3 ldi XL, LOW(DIGITS)
000375 e0b0 ldi XH, HIGH(DIGITS)
00037c e6a3 ldi XL, LOW(DIGITS)
00037d e0b0 ldi XH, HIGH(DIGITS)
.equ dividend = SRAM_TEMP_1 ; число которе будем делить
.equ divisor = 10 ; на что делим
; загружаем число которое хотим поделить в адрес SRAM делимого
000376 9380 0061 sts dividend, DISP_NUM_L
000378 9390 0062 sts dividend+1, DISP_NUM_H
00037e 9380 0061 sts dividend, DISP_NUM_L
000380 9390 0062 sts dividend+1, DISP_NUM_H
; четыре раза производим деление для получения остатков
DIV_LOOP:
; заполняем нужные регистры
00037a 9100 0061 lds dd16uL, dividend
00037c 9110 0062 lds dd16uH, dividend+1
00037e e02a ldi dv16uL, LOW(divisor)
00037f e030 ldi dv16uH, HIGH(divisor)
000382 9100 0061 lds dd16uL, dividend
000384 9110 0062 lds dd16uH, dividend+1
000386 e02a ldi dv16uL, LOW(divisor)
000387 e030 ldi dv16uH, HIGH(divisor)
000380 dd64 rcall div16u ; делим
000388 dd5c rcall div16u ; делим
000381 92ed st X+, drem16uL ; сохраняем остаток в ячейку по указателю и увеличиваем его
000389 92ed st X+, drem16uL ; сохраняем остаток в ячейку по указателю и увеличиваем его
; обновляем делимое
000382 9300 0061 sts dividend, dres16uL
000384 9310 0062 sts dividend+1, dres16uH
00038a 9300 0061 sts dividend, dres16uL
00038c 9310 0062 sts dividend+1, dres16uH
000386 955a dec r21 ; декрементируем счетчик цикла
000387 f791 brne DIV_LOOP ; делим еще раз если не 0
000388 915f pop r21
000389 910f pop r16
00038a 9508 ret
00038e 955a dec r21 ; декрементируем счетчик цикла
00038f f791 brne DIV_LOOP ; делим еще раз если не 0
000390 915f pop r21
000391 910f pop r16
000392 9508 ret
//</editor-fold>
//<editor-fold defaultstate="collapsed" desc="Подпрограмма: получение символа для индикатора">
; **** ЗАГРУЖАЕТ НУЖНЫЙ АДРЕС СИМВОЛА В R0 ***********************
DISPLAY_DECODER:
00038b 930f push r16
00038c 931f push r17
000393 930f push r16
000394 931f push r17
00038d e7ea ldi ZL, LOW(2*DISPLAY_SYMBOLS)
00038e e0f7 ldi ZH, HIGH(2*DISPLAY_SYMBOLS)
000395 e8ea ldi ZL, LOW(2*DISPLAY_SYMBOLS)
000396 e0f7 ldi ZH, HIGH(2*DISPLAY_SYMBOLS)
00038f 2711 clr TEMP_REG_B
000390 0fe0 add ZL, TEMP_REG_A
000391 1ff1 adc ZH, TEMP_REG_B
000397 2711 clr TEMP_REG_B
000398 0fe0 add ZL, TEMP_REG_A
000399 1ff1 adc ZH, TEMP_REG_B
000392 9004 lpm r0, Z
000393 911f pop r17
000394 910f pop r16
000395 9508 ret
00039a 9004 lpm r0, Z
00039b 911f pop r17
00039c 910f pop r16
00039d 9508 ret
//</editor-fold>
//<editor-fold defaultstate="collapsed" desc="Подпрограмма: короткий писк">
BEEP_SHORT:
000396 9ac5 sbi BUZZER_PORT, BUZZER_PIN
000397 e053
000398 ea39
000399 e74d
00039a d01d DELAY24 150000
00039b 98c5 cbi BUZZER_PORT, BUZZER_PIN
00039c 9508 ret
00039e 9ac5 sbi BUZZER_PORT, BUZZER_PIN
00039f e053
0003a0 ea39
0003a1 e74d
0003a2 d01d DELAY24 150000
0003a3 98c5 cbi BUZZER_PORT, BUZZER_PIN
0003a4 9508 ret
//</editor-fold>
//<editor-fold defaultstate="collapsed" desc="Подпрограмма: длинный писк">
BEEP_LONG:
00039d 9ac5 sbi BUZZER_PORT, BUZZER_PIN
00039e e05c
00039f e334
0003a0 ef4d
0003a1 d016 DELAY24 500000
0003a2 98c5 cbi BUZZER_PORT, BUZZER_PIN
0003a3 9508 ret
0003a5 9ac5 sbi BUZZER_PORT, BUZZER_PIN
0003a6 e05c
0003a7 e334
0003a8 ef4d
0003a9 d016 DELAY24 500000
0003aa 98c5 cbi BUZZER_PORT, BUZZER_PIN
0003ab 9508 ret
//</editor-fold>
//<editor-fold defaultstate="collapsed" desc="Подпрограмма: устранение дребезга кнопки">
DEBOUNCE_SW:
0003a4 930f push r16
0003a5 931f push r17
0003a6 932f push r18
0003ac 930f push r16
0003ad 931f push r17
0003ae 932f push r18
0003a7 e02a ldi r18, 10
0003af e02a ldi r18, 10
_loop_2:
0003a8 ef1f ldi r17, 255
0003b0 ef1f ldi r17, 255
_loop_0:
0003a9 ef0f ldi r16, 255
0003b1 ef0f ldi r16, 255
_dec_0:
0003aa 950a dec r16
0003ab f7f1 brne _dec_0
0003b2 950a dec r16
0003b3 f7f1 brne _dec_0
_loop_1:
0003ac 951a dec r17
0003ad f7d9 brne _loop_0
0003b4 951a dec r17
0003b5 f7d9 brne _loop_0
_loop_3:
0003ae 952a dec r18
0003af f7c1 brne _loop_2
0003b6 952a dec r18
0003b7 f7c1 brne _loop_2
0003b0 912f pop r18
0003b1 911f pop r17
0003b2 910f pop r16
0003b3 9508 ret//</editor-fold>
0003b8 912f pop r18
0003b9 911f pop r17
0003ba 910f pop r16
0003bb 9508 ret//</editor-fold>
//<editor-fold defaultstate="collapsed" desc="Подпрограмма: задержка (16бит макс число)">
DELAY_LOOP_16:
0003b4 5041 subi DELAY_8_r, 1
0003b5 4030 sbci DELAY_16_r, 0
0003b6 f7e8 brcc DELAY_LOOP_16
0003b7 9508 ret
0003bc 5041 subi DELAY_8_r, 1
0003bd 4030 sbci DELAY_16_r, 0
0003be f7e8 brcc DELAY_LOOP_16
0003bf 9508 ret
//</editor-fold>
//<editor-fold defaultstate="collapsed" desc="Подпрограмма: задержка (24бит макс число)">
DELAY_LOOP_24:
0003b8 5041 subi DELAY_8_r, 1
0003b9 4030 sbci DELAY_16_r, 0
0003ba 4050 sbci DELAY_24_r, 0
0003bb f7e0 brcc DELAY_LOOP_24
0003bc 9508 ret
0003c0 5041 subi DELAY_8_r, 1
0003c1 4030 sbci DELAY_16_r, 0
0003c2 4050 sbci DELAY_24_r, 0
0003c3 f7e0 brcc DELAY_LOOP_24
0003c4 9508 ret
//</editor-fold>
//<editor-fold defaultstate="collapsed" desc="Символы для индикатора">
DISPLAY_SYMBOLS:
; HGFEDCBA HGFEDCBA
0003bd f9c0 .DB 0b11000000, 0b11111001 ; 0, 1
0003be b0a4 .DB 0b10100100, 0b10110000 ; 2, 3
0003bf 9299 .DB 0b10011001, 0b10010010 ; 4, 5
0003c0 f882 .DB 0b10000010, 0b11111000 ; 6, 7
0003c1 9080 .DB 0b10000000, 0b10010000 ; 8, 9
0003c2 bf9c .DB 0b10011100, 0b10111111 ; °, -
0003c3 89c6 .DB 0b11000110, 0b10001001 ; C, H
0003c5 f9c0 .DB 0b11000000, 0b11111001 ; 0, 1
0003c6 b0a4 .DB 0b10100100, 0b10110000 ; 2, 3
0003c7 9299 .DB 0b10011001, 0b10010010 ; 4, 5
0003c8 f882 .DB 0b10000010, 0b11111000 ; 6, 7
0003c9 9080 .DB 0b10000000, 0b10010000 ; 8, 9
0003ca bf9c .DB 0b10011100, 0b10111111 ; °, -
0003cb 89c6 .DB 0b11000110, 0b10001001 ; C, H
//</editor-fold>
//</editor-fold>
@ -2363,7 +2365,7 @@ counted separately from r26..r31 here.
"ATtiny2313A" register use summary:
x : 2 y : 0 z : 1 r0 : 6 r1 : 2 r2 : 0 r3 : 16 r4 : 16
r5 : 6 r6 : 6 r7 : 0 r8 : 6 r9 : 0 r10: 2 r11: 2 r12: 2
r13: 2 r14: 5 r15: 11 r16: 213 r17: 117 r18: 51 r19: 55 r20: 53
r13: 2 r14: 5 r15: 11 r16: 213 r17: 119 r18: 53 r19: 59 r20: 53
r21: 24 r22: 5 r23: 10 r24: 6 r25: 6 r26: 4 r27: 4 r28: 0
r29: 0 r30: 2 r31: 2
Registers used: 29 out of 35 (82.9%)
@ -2371,14 +2373,14 @@ Registers used: 29 out of 35 (82.9%)
"ATtiny2313A" instruction use summary:
.lds : 0 .sts : 0 adc : 6 add : 8 adiw : 0 and : 0
andi : 4 asr : 0 bclr : 0 bld : 0 brbc : 0 brbs : 0
brcc : 6 brcs : 1 break : 0 breq : 12 brge : 4 brhc : 0
brcc : 6 brcs : 1 break : 0 breq : 14 brge : 4 brhc : 0
brhs : 0 brid : 0 brie : 0 brlo : 0 brlt : 0 brmi : 0
brne : 23 brpl : 0 brsh : 0 brtc : 1 brts : 2 brvc : 0
brvs : 0 bset : 0 bst : 0 cbi : 29 cbr : 3 clc : 2
clh : 0 cli : 5 cln : 0 clr : 19 cls : 0 clt : 3
clv : 0 clz : 0 com : 6 cp : 2 cpc : 2 cpi : 17
clh : 0 cli : 5 cln : 0 clr : 18 cls : 0 clt : 3
clv : 0 clz : 0 com : 6 cp : 2 cpc : 4 cpi : 19
cpse : 0 dec : 11 eor : 0 icall : 0 ijmp : 0 in : 5
inc : 4 ld : 0 ldd : 0 ldi : 115 lds : 43 lpm : 2
inc : 4 ld : 0 ldd : 0 ldi : 118 lds : 43 lpm : 2
lsl : 4 lsr : 11 mov : 55 movw : 0 neg : 1 nop : 0
or : 1 ori : 0 out : 26 pop : 56 push : 55 rcall : 82
ret : 28 reti : 3 rjmp : 61 rol : 6 ror : 9 sbc : 2
@ -2392,7 +2394,7 @@ Instructions used: 56 out of 105 (53.3%)
"ATtiny2313A" memory use summary [bytes]:
Segment Begin End Code Data Used Size Use%
---------------------------------------------------------------
[.cseg] 0x000000 0x000788 1894 14 1908 2048 93.2%
[.cseg] 0x000000 0x000798 1910 14 1924 2048 93.9%
[.dseg] 0x000060 0x000072 0 18 18 128 14.1%
[.eseg] 0x000030 0x000058 0 40 40 128 31.3%

View File

@ -1,5 +1,5 @@
AVRASM ver. 2.2.7 main.asm Fri Jun 30 16:51:54 2023
AVRASM ver. 2.2.7 main.asm Fri Jun 30 21:37:26 2023
EQU SIGNATURE_000 0000001e
@ -531,6 +531,10 @@ EQU MCU_STATE_PROGRAM 00000001
EQU MCU_STATE_ERROR 00000002
EQU MIN_HYST 00000001
EQU MAX_HYST 000000c8
EQU MIN_TEMP_H 000000fe
EQU MIN_TEMP_L 0000000c
EQU MAX_TEMP_H 00000004
EQU MAX_TEMP_L 000000b0
EQU DEFAULT_TEMP 0000012c
EQU DEFAULT_HYST 00000005
EQU HEAT_MODE 00000001
@ -567,7 +571,7 @@ CSEG _INTO_PROGRAM_STATE 00000014
CSEG _CLR_CURRENT_DIGIT 00000027
CSEG _indicate_1 0000002a
CSEG _indicate_2 0000003c
CSEG DISPLAY_DECODER 0000038b
CSEG DISPLAY_DECODER 00000393
CSEG USI_TRANSMIT 00000241
CSEG _indicate_3 0000004e
CSEG _indicate_4 0000005b
@ -581,13 +585,13 @@ CSEG _CONTINUE_INIT 000000ac
CSEG RD_F_CODE 000001e1
CSEG ERR_FAMILY_CODE 000000be
CSEG START_PROGRAM 000000c3
CSEG BEEP_LONG 0000039d
CSEG BEEP_SHORT 00000396
CSEG BEEP_LONG 000003a5
CSEG BEEP_SHORT 0000039e
CSEG LOOP 000000c6
CSEG _STATE_DEFAULT 000000c8
CSEG _STATE_PROGRAM 000000d4
CSEG TEMP_UPD 000001d2
CSEG DISPLAY_UPD_DIGITS 00000371
CSEG DISPLAY_UPD_DIGITS 00000379
CSEG TEMP_COMPARSION 00000185
CSEG TEMP_SEND_UART 00000115
CSEG _STATE_ERROR 000000d7
@ -644,11 +648,11 @@ CSEG _MIN_THRESHOLD 000001bb
CSEG _MAX_THRESHOLD 000001c3
CSEG _COMPARSION_EXIT 000001ca
CSEG TEMP_CONV 00000235
CSEG DELAY_LOOP_24 000003b8
CSEG DELAY_LOOP_24 000003c0
CSEG TEMP_RD 000001eb
CSEG OW_PRESENCE 00000323
CSEG OW_SEND_BYTE 00000338
CSEG OW_RD_BYTE 00000357
CSEG OW_PRESENCE 0000032b
CSEG OW_SEND_BYTE 00000340
CSEG OW_RD_BYTE 0000035f
CSEG _TEMP_RD_EXIT 0000022f
CSEG _TEMP_RD_TO_UNSIGNED 00000209
CSEG _TEMP_RD_CONTINUE 00000210
@ -660,7 +664,7 @@ CSEG _SW_CHECK_ON_0 00000250
CSEG _SW_SET_0 00000253
CSEG _SW_CHECK_ON_1 0000026f
CSEG _SW_SET_FROM_0_TO_1 00000258
CSEG DEBOUNCE_SW 000003a4
CSEG DEBOUNCE_SW 000003ac
CSEG _SAVE_SETTINGS 00000262
CSEG _SW_SET_1 00000272
CSEG _BUTTON_PROCESS_END 0000027b
@ -671,42 +675,43 @@ CSEG _CHECK_STEP 0000028b
CSEG _STEP_1 00000292
CSEG _STEP_2 000002b8
CSEG _S3_JMP 000002b7
CSEG _REPROGRAM_SETTINGS_END 0000031d
CSEG _REPROGRAM_SETTINGS_END 00000325
CSEG _S1_CHECK_PLUS 00000293
CSEG _INCREASE_HYST 00000299
CSEG _S1_CHECK_MINUS 00000296
CSEG _DECREASE_HYST 000002a2
CSEG _SHOW_HYST 000002aa
CSEG _STEP_3 000002f7
CSEG _STEP_3 000002ff
CSEG _S2_CHECK_PLUS 000002b9
CSEG _INCREASE_TEMP 000002bf
CSEG _S2_CHECK_MINUS 000002bc
CSEG _DECREASE_TEMP 000002cd
CSEG _SHOW_TEMP 000002d8
CSEG _NEGATE_SET_TEMP 000002e5
CSEG _DIVIDE_SET_TEMP 000002ea
CSEG _S3_CHECK_PLUS 000002f8
CSEG _SET_HEAT_MODE 000002fe
CSEG _S3_CHECK_MINUS 000002fb
CSEG _SET_COOLING_MODE 00000303
CSEG _SHOW_MODE 00000307
CSEG _SHOW_COOLING 00000316
CSEG _SHOW_HEATING 0000031a
CSEG DELAY_LOOP_16 000003b4
CSEG OW_CHECK_PRESENCE 00000332
CSEG _EXIT 00000337
CSEG _OW_SEND_BYTE_LOOP 0000033d
CSEG _OW_SEND_0 00000340
CSEG _OW_SEND_1 00000349
CSEG _OW_SEND_BYTE_END 00000351
CSEG _OW_RD_BYTE_LP 0000035c
CSEG _DECREASE_TEMP 000002d1
CSEG _SHOW_TEMP 000002e0
CSEG __DECREASE 000002da
CSEG _NEGATE_SET_TEMP 000002ed
CSEG _DIVIDE_SET_TEMP 000002f2
CSEG _S3_CHECK_PLUS 00000300
CSEG _SET_HEAT_MODE 00000306
CSEG _S3_CHECK_MINUS 00000303
CSEG _SET_COOLING_MODE 0000030b
CSEG _SHOW_MODE 0000030f
CSEG _SHOW_COOLING 0000031e
CSEG _SHOW_HEATING 00000322
CSEG DELAY_LOOP_16 000003bc
CSEG OW_CHECK_PRESENCE 0000033a
CSEG _EXIT 0000033f
CSEG _OW_SEND_BYTE_LOOP 00000345
CSEG _OW_SEND_0 00000348
CSEG _OW_SEND_1 00000351
CSEG _OW_SEND_BYTE_END 00000359
CSEG _OW_RD_BYTE_LP 00000364
EQU dividend 00000061
EQU divisor 0000000a
CSEG DIV_LOOP 0000037a
CSEG DISPLAY_SYMBOLS 000003bd
CSEG _loop_2 000003a8
CSEG _loop_0 000003a9
CSEG _dec_0 000003aa
CSEG _loop_1 000003ac
CSEG _loop_3 000003ae
CSEG DIV_LOOP 00000382
CSEG DISPLAY_SYMBOLS 000003c5
CSEG _loop_2 000003b0
CSEG _loop_0 000003b1
CSEG _dec_0 000003b2
CSEG _loop_1 000003b4
CSEG _loop_3 000003b6
ESEG INFO 00000030

View File

@ -48,31 +48,31 @@
<_CLR_CURRENT_DIGIT><FILE>main.asm</FILE><LINE>98</LINE></_CLR_CURRENT_DIGIT>
<_indicate_1><FILE>main.asm</FILE><LINE>102</LINE></_indicate_1>
<_indicate_2><FILE>main.asm</FILE><LINE>122</LINE></_indicate_2>
<DISPLAY_DECODER><FILE>main.asm</FILE><LINE>1138</LINE></DISPLAY_DECODER>
<USI_TRANSMIT><FILE>main.asm</FILE><LINE>737</LINE></USI_TRANSMIT>
<DISPLAY_DECODER><FILE>main.asm</FILE><LINE>1135</LINE></DISPLAY_DECODER>
<USI_TRANSMIT><FILE>main.asm</FILE><LINE>725</LINE></USI_TRANSMIT>
<_indicate_3><FILE>main.asm</FILE><LINE>140</LINE></_indicate_3>
<_indicate_4><FILE>main.asm</FILE><LINE>155</LINE></_indicate_4>
<_indicate_exit><FILE>main.asm</FILE><LINE>167</LINE></_indicate_exit>
<MCU_INIT><FILE>main.asm</FILE><LINE>189</LINE></MCU_INIT>
<EEP_RD_BYTE><FILE>main.asm</FILE><LINE>472</LINE></EEP_RD_BYTE>
<EEP_RD_BYTE><FILE>main.asm</FILE><LINE>460</LINE></EEP_RD_BYTE>
<_INIT_PARAMS><FILE>main.asm</FILE><LINE>230</LINE></_INIT_PARAMS>
<_FIRST_TIME_RUN><FILE>main.asm</FILE><LINE>227</LINE></_FIRST_TIME_RUN>
<INIT_DEFAULT_PARAMS><FILE>main.asm</FILE><LINE>380</LINE></INIT_DEFAULT_PARAMS>
<_CONTINUE_INIT><FILE>main.asm</FILE><LINE>263</LINE></_CONTINUE_INIT>
<RD_F_CODE><FILE>main.asm</FILE><LINE>603</LINE></RD_F_CODE>
<ERR_FAMILY_CODE><FILE>main.asm</FILE><LINE>284</LINE></ERR_FAMILY_CODE>
<START_PROGRAM><FILE>main.asm</FILE><LINE>289</LINE></START_PROGRAM>
<BEEP_LONG><FILE>main.asm</FILE><LINE>1164</LINE></BEEP_LONG>
<BEEP_SHORT><FILE>main.asm</FILE><LINE>1156</LINE></BEEP_SHORT>
<LOOP><FILE>main.asm</FILE><LINE>296</LINE></LOOP>
<_STATE_DEFAULT><FILE>main.asm</FILE><LINE>299</LINE></_STATE_DEFAULT>
<_STATE_PROGRAM><FILE>main.asm</FILE><LINE>311</LINE></_STATE_PROGRAM>
<TEMP_UPD><FILE>main.asm</FILE><LINE>587</LINE></TEMP_UPD>
<DISPLAY_UPD_DIGITS><FILE>main.asm</FILE><LINE>1097</LINE></DISPLAY_UPD_DIGITS>
<TEMP_COMPARSION><FILE>main.asm</FILE><LINE>489</LINE></TEMP_COMPARSION>
<TEMP_SEND_UART><FILE>main.asm</FILE><LINE>334</LINE></TEMP_SEND_UART>
<_STATE_ERROR><FILE>main.asm</FILE><LINE>315</LINE></_STATE_ERROR>
<REPROGRAM_SETTINGS><FILE>main.asm</FILE><LINE>822</LINE></REPROGRAM_SETTINGS>
<INIT_DEFAULT_PARAMS><FILE>main.asm</FILE><LINE>368</LINE></INIT_DEFAULT_PARAMS>
<_CONTINUE_INIT><FILE>main.asm</FILE><LINE>251</LINE></_CONTINUE_INIT>
<RD_F_CODE><FILE>main.asm</FILE><LINE>591</LINE></RD_F_CODE>
<ERR_FAMILY_CODE><FILE>main.asm</FILE><LINE>272</LINE></ERR_FAMILY_CODE>
<START_PROGRAM><FILE>main.asm</FILE><LINE>277</LINE></START_PROGRAM>
<BEEP_LONG><FILE>main.asm</FILE><LINE>1161</LINE></BEEP_LONG>
<BEEP_SHORT><FILE>main.asm</FILE><LINE>1153</LINE></BEEP_SHORT>
<LOOP><FILE>main.asm</FILE><LINE>284</LINE></LOOP>
<_STATE_DEFAULT><FILE>main.asm</FILE><LINE>287</LINE></_STATE_DEFAULT>
<_STATE_PROGRAM><FILE>main.asm</FILE><LINE>299</LINE></_STATE_PROGRAM>
<TEMP_UPD><FILE>main.asm</FILE><LINE>575</LINE></TEMP_UPD>
<DISPLAY_UPD_DIGITS><FILE>main.asm</FILE><LINE>1094</LINE></DISPLAY_UPD_DIGITS>
<TEMP_COMPARSION><FILE>main.asm</FILE><LINE>477</LINE></TEMP_COMPARSION>
<TEMP_SEND_UART><FILE>main.asm</FILE><LINE>322</LINE></TEMP_SEND_UART>
<_STATE_ERROR><FILE>main.asm</FILE><LINE>303</LINE></_STATE_ERROR>
<REPROGRAM_SETTINGS><FILE>main.asm</FILE><LINE>810</LINE></REPROGRAM_SETTINGS>
<div16u><FILE>div16u.asm</FILE><LINE>32</LINE></div16u>
<d16u_1><FILE>div16u.asm</FILE><LINE>36</LINE></d16u_1>
<d16u_2><FILE>div16u.asm</FILE><LINE>42</LINE></d16u_2>
@ -84,81 +84,82 @@
<mpy16u><FILE>mpy16u.asm</FILE><LINE>31</LINE></mpy16u>
<m16u_1><FILE>mpy16u.asm</FILE><LINE>37</LINE></m16u_1>
<noad8><FILE>mpy16u.asm</FILE><LINE>40</LINE></noad8>
<UART_WR_BYTE><FILE>main.asm</FILE><LINE>372</LINE></UART_WR_BYTE>
<_TEMP_SEND_UART_L><FILE>main.asm</FILE><LINE>361</LINE></_TEMP_SEND_UART_L>
<EEP_WR_BYTE><FILE>main.asm</FILE><LINE>447</LINE></EEP_WR_BYTE>
<WRITE_PARAMS_TO_EEP><FILE>main.asm</FILE><LINE>418</LINE></WRITE_PARAMS_TO_EEP>
<_EEP_WR_BYTE_LP><FILE>main.asm</FILE><LINE>450</LINE></_EEP_WR_BYTE_LP>
<_EEP_RD_BYTE_LP><FILE>main.asm</FILE><LINE>474</LINE></_EEP_RD_BYTE_LP>
<_NEGATE_TEMP><FILE>main.asm</FILE><LINE>543</LINE></_NEGATE_TEMP>
<_COMPARE><FILE>main.asm</FILE><LINE>549</LINE></_COMPARE>
<_MIN_THRESHOLD><FILE>main.asm</FILE><LINE>559</LINE></_MIN_THRESHOLD>
<_MAX_THRESHOLD><FILE>main.asm</FILE><LINE>568</LINE></_MAX_THRESHOLD>
<_COMPARSION_EXIT><FILE>main.asm</FILE><LINE>575</LINE></_COMPARSION_EXIT>
<TEMP_CONV><FILE>main.asm</FILE><LINE>715</LINE></TEMP_CONV>
<DELAY_LOOP_24><FILE>main.asm</FILE><LINE>1206</LINE></DELAY_LOOP_24>
<TEMP_RD><FILE>main.asm</FILE><LINE>619</LINE></TEMP_RD>
<OW_PRESENCE><FILE>main.asm</FILE><LINE>1010</LINE></OW_PRESENCE>
<OW_SEND_BYTE><FILE>main.asm</FILE><LINE>1037</LINE></OW_SEND_BYTE>
<OW_RD_BYTE><FILE>main.asm</FILE><LINE>1068</LINE></OW_RD_BYTE>
<_TEMP_RD_EXIT><FILE>main.asm</FILE><LINE>707</LINE></_TEMP_RD_EXIT>
<_TEMP_RD_TO_UNSIGNED><FILE>main.asm</FILE><LINE>656</LINE></_TEMP_RD_TO_UNSIGNED>
<_TEMP_RD_CONTINUE><FILE>main.asm</FILE><LINE>669</LINE></_TEMP_RD_CONTINUE>
<_TEMP_RD_END><FILE>main.asm</FILE><LINE>679</LINE></_TEMP_RD_END>
<_TEMP_CONV_EXIT><FILE>main.asm</FILE><LINE>730</LINE></_TEMP_CONV_EXIT>
<_USI_TRANSMIT_LOOP><FILE>main.asm</FILE><LINE>756</LINE></_USI_TRANSMIT_LOOP>
<BUTTON_PROCESS><FILE>main.asm</FILE><LINE>770</LINE></BUTTON_PROCESS>
<_SW_CHECK_ON_0><FILE>main.asm</FILE><LINE>772</LINE></_SW_CHECK_ON_0>
<_SW_SET_0><FILE>main.asm</FILE><LINE>776</LINE></_SW_SET_0>
<_SW_CHECK_ON_1><FILE>main.asm</FILE><LINE>803</LINE></_SW_CHECK_ON_1>
<_SW_SET_FROM_0_TO_1><FILE>main.asm</FILE><LINE>781</LINE></_SW_SET_FROM_0_TO_1>
<DEBOUNCE_SW><FILE>main.asm</FILE><LINE>1172</LINE></DEBOUNCE_SW>
<_SAVE_SETTINGS><FILE>main.asm</FILE><LINE>791</LINE></_SAVE_SETTINGS>
<_SW_SET_1><FILE>main.asm</FILE><LINE>807</LINE></_SW_SET_1>
<_BUTTON_PROCESS_END><FILE>main.asm</FILE><LINE>816</LINE></_BUTTON_PROCESS_END>
<_SW_SET_FROM_1_TO_0><FILE>main.asm</FILE><LINE>812</LINE></_SW_SET_FROM_1_TO_0>
<_INTO><FILE>main.asm</FILE><LINE>833</LINE></_INTO>
<_REPROGRAM_SETTINGS_LOOP><FILE>main.asm</FILE><LINE>838</LINE></_REPROGRAM_SETTINGS_LOOP>
<_CHECK_STEP><FILE>main.asm</FILE><LINE>840</LINE></_CHECK_STEP>
<_STEP_1><FILE>main.asm</FILE><LINE>850</LINE></_STEP_1>
<_STEP_2><FILE>main.asm</FILE><LINE>893</LINE></_STEP_2>
<_S3_JMP><FILE>main.asm</FILE><LINE>889</LINE></_S3_JMP>
<_REPROGRAM_SETTINGS_END><FILE>main.asm</FILE><LINE>998</LINE></_REPROGRAM_SETTINGS_END>
<_S1_CHECK_PLUS><FILE>main.asm</FILE><LINE>852</LINE></_S1_CHECK_PLUS>
<_INCREASE_HYST><FILE>main.asm</FILE><LINE>860</LINE></_INCREASE_HYST>
<_S1_CHECK_MINUS><FILE>main.asm</FILE><LINE>856</LINE></_S1_CHECK_MINUS>
<_DECREASE_HYST><FILE>main.asm</FILE><LINE>868</LINE></_DECREASE_HYST>
<_SHOW_HYST><FILE>main.asm</FILE><LINE>875</LINE></_SHOW_HYST>
<_STEP_3><FILE>main.asm</FILE><LINE>957</LINE></_STEP_3>
<_S2_CHECK_PLUS><FILE>main.asm</FILE><LINE>895</LINE></_S2_CHECK_PLUS>
<_INCREASE_TEMP><FILE>main.asm</FILE><LINE>903</LINE></_INCREASE_TEMP>
<_S2_CHECK_MINUS><FILE>main.asm</FILE><LINE>899</LINE></_S2_CHECK_MINUS>
<_DECREASE_TEMP><FILE>main.asm</FILE><LINE>914</LINE></_DECREASE_TEMP>
<_SHOW_TEMP><FILE>main.asm</FILE><LINE>922</LINE></_SHOW_TEMP>
<_NEGATE_SET_TEMP><FILE>main.asm</FILE><LINE>935</LINE></_NEGATE_SET_TEMP>
<_DIVIDE_SET_TEMP><FILE>main.asm</FILE><LINE>939</LINE></_DIVIDE_SET_TEMP>
<_S3_CHECK_PLUS><FILE>main.asm</FILE><LINE>959</LINE></_S3_CHECK_PLUS>
<_SET_HEAT_MODE><FILE>main.asm</FILE><LINE>967</LINE></_SET_HEAT_MODE>
<_S3_CHECK_MINUS><FILE>main.asm</FILE><LINE>963</LINE></_S3_CHECK_MINUS>
<_SET_COOLING_MODE><FILE>main.asm</FILE><LINE>972</LINE></_SET_COOLING_MODE>
<_SHOW_MODE><FILE>main.asm</FILE><LINE>976</LINE></_SHOW_MODE>
<_SHOW_COOLING><FILE>main.asm</FILE><LINE>989</LINE></_SHOW_COOLING>
<_SHOW_HEATING><FILE>main.asm</FILE><LINE>993</LINE></_SHOW_HEATING>
<DELAY_LOOP_16><FILE>main.asm</FILE><LINE>1198</LINE></DELAY_LOOP_16>
<OW_CHECK_PRESENCE><FILE>main.asm</FILE><LINE>1026</LINE></OW_CHECK_PRESENCE>
<_EXIT><FILE>main.asm</FILE><LINE>1032</LINE></_EXIT>
<_OW_SEND_BYTE_LOOP><FILE>main.asm</FILE><LINE>1043</LINE></_OW_SEND_BYTE_LOOP>
<_OW_SEND_0><FILE>main.asm</FILE><LINE>1047</LINE></_OW_SEND_0>
<_OW_SEND_1><FILE>main.asm</FILE><LINE>1053</LINE></_OW_SEND_1>
<_OW_SEND_BYTE_END><FILE>main.asm</FILE><LINE>1058</LINE></_OW_SEND_BYTE_END>
<_OW_RD_BYTE_LP><FILE>main.asm</FILE><LINE>1074</LINE></_OW_RD_BYTE_LP>
<DIV_LOOP><FILE>main.asm</FILE><LINE>1114</LINE></DIV_LOOP>
<DISPLAY_SYMBOLS><FILE>main.asm</FILE><LINE>1215</LINE></DISPLAY_SYMBOLS>
<_loop_2><FILE>main.asm</FILE><LINE>1178</LINE></_loop_2>
<_loop_0><FILE>main.asm</FILE><LINE>1180</LINE></_loop_0>
<_dec_0><FILE>main.asm</FILE><LINE>1182</LINE></_dec_0>
<_loop_1><FILE>main.asm</FILE><LINE>1185</LINE></_loop_1>
<_loop_3><FILE>main.asm</FILE><LINE>1188</LINE></_loop_3>
<INFO><FILE>main.asm</FILE><LINE>1233</LINE></INFO>
<UART_WR_BYTE><FILE>main.asm</FILE><LINE>360</LINE></UART_WR_BYTE>
<_TEMP_SEND_UART_L><FILE>main.asm</FILE><LINE>349</LINE></_TEMP_SEND_UART_L>
<EEP_WR_BYTE><FILE>main.asm</FILE><LINE>435</LINE></EEP_WR_BYTE>
<WRITE_PARAMS_TO_EEP><FILE>main.asm</FILE><LINE>406</LINE></WRITE_PARAMS_TO_EEP>
<_EEP_WR_BYTE_LP><FILE>main.asm</FILE><LINE>438</LINE></_EEP_WR_BYTE_LP>
<_EEP_RD_BYTE_LP><FILE>main.asm</FILE><LINE>462</LINE></_EEP_RD_BYTE_LP>
<_NEGATE_TEMP><FILE>main.asm</FILE><LINE>531</LINE></_NEGATE_TEMP>
<_COMPARE><FILE>main.asm</FILE><LINE>537</LINE></_COMPARE>
<_MIN_THRESHOLD><FILE>main.asm</FILE><LINE>547</LINE></_MIN_THRESHOLD>
<_MAX_THRESHOLD><FILE>main.asm</FILE><LINE>556</LINE></_MAX_THRESHOLD>
<_COMPARSION_EXIT><FILE>main.asm</FILE><LINE>563</LINE></_COMPARSION_EXIT>
<TEMP_CONV><FILE>main.asm</FILE><LINE>703</LINE></TEMP_CONV>
<DELAY_LOOP_24><FILE>main.asm</FILE><LINE>1203</LINE></DELAY_LOOP_24>
<TEMP_RD><FILE>main.asm</FILE><LINE>607</LINE></TEMP_RD>
<OW_PRESENCE><FILE>main.asm</FILE><LINE>1007</LINE></OW_PRESENCE>
<OW_SEND_BYTE><FILE>main.asm</FILE><LINE>1034</LINE></OW_SEND_BYTE>
<OW_RD_BYTE><FILE>main.asm</FILE><LINE>1065</LINE></OW_RD_BYTE>
<_TEMP_RD_EXIT><FILE>main.asm</FILE><LINE>695</LINE></_TEMP_RD_EXIT>
<_TEMP_RD_TO_UNSIGNED><FILE>main.asm</FILE><LINE>644</LINE></_TEMP_RD_TO_UNSIGNED>
<_TEMP_RD_CONTINUE><FILE>main.asm</FILE><LINE>657</LINE></_TEMP_RD_CONTINUE>
<_TEMP_RD_END><FILE>main.asm</FILE><LINE>667</LINE></_TEMP_RD_END>
<_TEMP_CONV_EXIT><FILE>main.asm</FILE><LINE>718</LINE></_TEMP_CONV_EXIT>
<_USI_TRANSMIT_LOOP><FILE>main.asm</FILE><LINE>744</LINE></_USI_TRANSMIT_LOOP>
<BUTTON_PROCESS><FILE>main.asm</FILE><LINE>758</LINE></BUTTON_PROCESS>
<_SW_CHECK_ON_0><FILE>main.asm</FILE><LINE>760</LINE></_SW_CHECK_ON_0>
<_SW_SET_0><FILE>main.asm</FILE><LINE>764</LINE></_SW_SET_0>
<_SW_CHECK_ON_1><FILE>main.asm</FILE><LINE>791</LINE></_SW_CHECK_ON_1>
<_SW_SET_FROM_0_TO_1><FILE>main.asm</FILE><LINE>769</LINE></_SW_SET_FROM_0_TO_1>
<DEBOUNCE_SW><FILE>main.asm</FILE><LINE>1169</LINE></DEBOUNCE_SW>
<_SAVE_SETTINGS><FILE>main.asm</FILE><LINE>779</LINE></_SAVE_SETTINGS>
<_SW_SET_1><FILE>main.asm</FILE><LINE>795</LINE></_SW_SET_1>
<_BUTTON_PROCESS_END><FILE>main.asm</FILE><LINE>804</LINE></_BUTTON_PROCESS_END>
<_SW_SET_FROM_1_TO_0><FILE>main.asm</FILE><LINE>800</LINE></_SW_SET_FROM_1_TO_0>
<_INTO><FILE>main.asm</FILE><LINE>821</LINE></_INTO>
<_REPROGRAM_SETTINGS_LOOP><FILE>main.asm</FILE><LINE>826</LINE></_REPROGRAM_SETTINGS_LOOP>
<_CHECK_STEP><FILE>main.asm</FILE><LINE>828</LINE></_CHECK_STEP>
<_STEP_1><FILE>main.asm</FILE><LINE>838</LINE></_STEP_1>
<_STEP_2><FILE>main.asm</FILE><LINE>881</LINE></_STEP_2>
<_S3_JMP><FILE>main.asm</FILE><LINE>877</LINE></_S3_JMP>
<_REPROGRAM_SETTINGS_END><FILE>main.asm</FILE><LINE>995</LINE></_REPROGRAM_SETTINGS_END>
<_S1_CHECK_PLUS><FILE>main.asm</FILE><LINE>840</LINE></_S1_CHECK_PLUS>
<_INCREASE_HYST><FILE>main.asm</FILE><LINE>848</LINE></_INCREASE_HYST>
<_S1_CHECK_MINUS><FILE>main.asm</FILE><LINE>844</LINE></_S1_CHECK_MINUS>
<_DECREASE_HYST><FILE>main.asm</FILE><LINE>856</LINE></_DECREASE_HYST>
<_SHOW_HYST><FILE>main.asm</FILE><LINE>863</LINE></_SHOW_HYST>
<_STEP_3><FILE>main.asm</FILE><LINE>954</LINE></_STEP_3>
<_S2_CHECK_PLUS><FILE>main.asm</FILE><LINE>883</LINE></_S2_CHECK_PLUS>
<_INCREASE_TEMP><FILE>main.asm</FILE><LINE>891</LINE></_INCREASE_TEMP>
<_S2_CHECK_MINUS><FILE>main.asm</FILE><LINE>887</LINE></_S2_CHECK_MINUS>
<_DECREASE_TEMP><FILE>main.asm</FILE><LINE>906</LINE></_DECREASE_TEMP>
<_SHOW_TEMP><FILE>main.asm</FILE><LINE>919</LINE></_SHOW_TEMP>
<__DECREASE><FILE>main.asm</FILE><LINE>914</LINE></__DECREASE>
<_NEGATE_SET_TEMP><FILE>main.asm</FILE><LINE>932</LINE></_NEGATE_SET_TEMP>
<_DIVIDE_SET_TEMP><FILE>main.asm</FILE><LINE>936</LINE></_DIVIDE_SET_TEMP>
<_S3_CHECK_PLUS><FILE>main.asm</FILE><LINE>956</LINE></_S3_CHECK_PLUS>
<_SET_HEAT_MODE><FILE>main.asm</FILE><LINE>964</LINE></_SET_HEAT_MODE>
<_S3_CHECK_MINUS><FILE>main.asm</FILE><LINE>960</LINE></_S3_CHECK_MINUS>
<_SET_COOLING_MODE><FILE>main.asm</FILE><LINE>969</LINE></_SET_COOLING_MODE>
<_SHOW_MODE><FILE>main.asm</FILE><LINE>973</LINE></_SHOW_MODE>
<_SHOW_COOLING><FILE>main.asm</FILE><LINE>986</LINE></_SHOW_COOLING>
<_SHOW_HEATING><FILE>main.asm</FILE><LINE>990</LINE></_SHOW_HEATING>
<DELAY_LOOP_16><FILE>main.asm</FILE><LINE>1195</LINE></DELAY_LOOP_16>
<OW_CHECK_PRESENCE><FILE>main.asm</FILE><LINE>1023</LINE></OW_CHECK_PRESENCE>
<_EXIT><FILE>main.asm</FILE><LINE>1029</LINE></_EXIT>
<_OW_SEND_BYTE_LOOP><FILE>main.asm</FILE><LINE>1040</LINE></_OW_SEND_BYTE_LOOP>
<_OW_SEND_0><FILE>main.asm</FILE><LINE>1044</LINE></_OW_SEND_0>
<_OW_SEND_1><FILE>main.asm</FILE><LINE>1050</LINE></_OW_SEND_1>
<_OW_SEND_BYTE_END><FILE>main.asm</FILE><LINE>1055</LINE></_OW_SEND_BYTE_END>
<_OW_RD_BYTE_LP><FILE>main.asm</FILE><LINE>1071</LINE></_OW_RD_BYTE_LP>
<DIV_LOOP><FILE>main.asm</FILE><LINE>1111</LINE></DIV_LOOP>
<DISPLAY_SYMBOLS><FILE>main.asm</FILE><LINE>1212</LINE></DISPLAY_SYMBOLS>
<_loop_2><FILE>main.asm</FILE><LINE>1175</LINE></_loop_2>
<_loop_0><FILE>main.asm</FILE><LINE>1177</LINE></_loop_0>
<_dec_0><FILE>main.asm</FILE><LINE>1179</LINE></_dec_0>
<_loop_1><FILE>main.asm</FILE><LINE>1182</LINE></_loop_1>
<_loop_3><FILE>main.asm</FILE><LINE>1185</LINE></_loop_3>
<INFO><FILE>main.asm</FILE><LINE>1230</LINE></INFO>
</LABELS>
</ASSEMBLER_INFO>

239
main.asm
View File

@ -147,7 +147,6 @@ _indicate_3:
sbi PORTD, DIGIT_3_PIN
lds TEMP_REG_A, DIGITS
rcall DISPLAY_DECODER
; зажигаем точку
mov r16, r0
cbr r16, (1<<7)
mov r0, r16
@ -189,7 +188,7 @@ RESET_vect:
; **** ПРОЦЕСС ИНИЦИАЛИЗАЦИИ МК **********************************
MCU_INIT:
; **** ИНИЦИАЛИЗАЦИЯ ПИНОВ *************************************
outi r16, DDRD, (1<<LED_ERR_PIN) | (1<<DIGIT_1_PIN) | (1<<DIGIT_2_PIN) | (1<<DIGIT_3_PIN) | (1<<DIGIT_4_PIN) | (1<<UART_TX_PIN) | (1<<RELAY_PIN)
outi r16, DDRD, (1<<LED_PGM_PIN) | (1<<DIGIT_1_PIN) | (1<<DIGIT_2_PIN) | (1<<DIGIT_3_PIN) | (1<<DIGIT_4_PIN) | (1<<UART_TX_PIN) | (1<<RELAY_PIN)
outi r16, DDRB, (1<<USI_CLK_PIN) | (1<<USI_DO_PIN) | (1<<USI_LATCH_PIN) | (0<<SW_PLUS_PIN) | (0<<SW_MINUS_PIN) | (0<<SW_SET_PIN) | (1<<BUZZER_PIN)
outi r16, PORTB, (1<<SW_PLUS_PIN) | (1<<SW_MINUS_PIN) | (1<<SW_SET_PIN)
@ -218,19 +217,38 @@ MCU_INIT:
ldi r16, 0x00
sts MCU_STATE, r16 ; переводим МК сразу в режим измерения температуры
; настройка параметров
ldi r16, DEFAULT_SETTING_TEMP_L
sts SETTING_TEMP_L, r16 ; уставка LOW
; проверяем впервые ли запускаем устройство
ldi r16, EEP_FIRST_TIME_RUN
mov EEP_A_r, r16
rcall EEP_RD_BYTE
mov r16, EEP_D_r
cpi r16, 0x10 ; 0x10 - зарезервированное число которое говорит о том что устройство запускается НЕ впервые
breq _INIT_PARAMS
_FIRST_TIME_RUN: ; если устройство запускается впервые то записываем в EEPROM и ОЗУ стандартные параметры
rcall INIT_DEFAULT_PARAMS
rjmp _CONTINUE_INIT
_INIT_PARAMS: ; иначе берем из EEPROM настройки и записываем в ОЗУ
ldi r16, EEP_SETTING_TEMP_H
mov EEP_A_r, r16
rcall EEP_RD_BYTE
sts SETTING_TEMP_H, EEP_D_r
ldi r16, DEFAULT_SETTING_TEMP_H
sts SETTING_TEMP_H, r16 ; уставка HIGH
ldi r16, EEP_SETTING_TEMP_L
mov EEP_A_r, r16
rcall EEP_RD_BYTE
sts SETTING_TEMP_L, EEP_D_r
ldi r16, DEFAULT_SETTING_HYST
sts SETTING_HYST, r16 ; гистерезис
ldi r16, EEP_SETTING_HYST
mov EEP_A_r, r16
rcall EEP_RD_BYTE
sts SETTING_HYST, EEP_D_r
ldi r16, DEFAULT_SETTING_MODE
sts SETTING_MODE, r16 ; режим работы
ldi r16, EEP_SETTING_MODE
mov EEP_A_r, r16
rcall EEP_RD_BYTE
sts SETTING_MODE, EEP_D_r
_CONTINUE_INIT:
clr r16
sts TEMP_L, r16
sts TEMP_H, r16
@ -265,28 +283,32 @@ START_PROGRAM:
; **** ГЛАВНЫЙ ЦИКЛ **********************************************
LOOP:
lds r16, MCU_STATE ; получаем текущее состояние МК
rcall DISPLAY_UPD_DIGITS
; rcall DISPLAY_UPD_DIGITS
_STATE_DEFAULT:
cpi r16, MCU_STATE_DEFAULT
brne _STATE_PROGRAM
cbi LED_ERR_PORT, LED_ERR_PIN
lds r18, TEMP_F
sts DIGITS+3, r18
rcall TEMP_UPD ; обновление данных о температуре
rcall DISPLAY_UPD_DIGITS
rcall TEMP_COMPARSION ; логика термостата
outi r17, TIMSK, (1<<OCIE0A) ; вкл. индикатор
rcall TEMP_SEND_UART ; отпрака данных в UART
_STATE_PROGRAM:
cpi r16, MCU_STATE_PROGRAM
brne _STATE_ERROR
cbi LED_ERR_PORT, LED_ERR_PIN
rcall REPROGRAM_SETTINGS
_STATE_ERROR:
cpi r16, MCU_STATE_ERROR
brne LOOP
sbi LED_ERR_PORT, LED_ERR_PIN
ldi r17, 11
sts DIGITS, r17
sts DIGITS+1, r17
sts DIGITS+2, r17
sts DIGITS+3, r17
outi r17, TIMSK, (1<<OCIE0A)
rjmp LOOP
//</editor-fold>
@ -339,6 +361,116 @@ UART_WR_BYTE:
sbis UCSRA, UDRE
rjmp UART_WR_BYTE
out UDR, r5
ret
//</editor-fold>
//<editor-fold defaultstate="collapsed" desc="Подпрограмма: инициализация стандартных параметров">
INIT_DEFAULT_PARAMS:
ldi r16, DEFAULT_SETTING_TEMP_H
sts SETTING_TEMP_H, r16 ; уставка HIGH
mov EEP_D_r, r16
ldi r16, EEP_SETTING_TEMP_H
mov EEP_A_r, r16
rcall EEP_WR_BYTE
ldi r16, DEFAULT_SETTING_TEMP_L
sts SETTING_TEMP_L, r16 ; уставка LOW
mov EEP_D_r, r16
ldi r16, EEP_SETTING_TEMP_L
mov EEP_A_r, r16
rcall EEP_WR_BYTE
ldi r16, DEFAULT_SETTING_HYST
sts SETTING_HYST, r16 ; гистерезис
mov EEP_D_r, r16
ldi r16, EEP_SETTING_HYST
mov EEP_A_r, r16
rcall EEP_WR_BYTE
ldi r16, DEFAULT_SETTING_MODE
sts SETTING_MODE, r16 ; режим
mov EEP_D_r, r16
ldi r16, EEP_SETTING_MODE
mov EEP_A_r, r16
rcall EEP_WR_BYTE
ldi r16, 0x10
mov EEP_D_r, r16
ldi r16, EEP_FIRST_TIME_RUN
mov EEP_A_r, r16
rcall EEP_WR_BYTE
ret
//</editor-fold>
//<editor-fold defaultstate="collapsed" desc="Подпрограмма: запись параметров из ОЗУ в EEPROM">
WRITE_PARAMS_TO_EEP:
push r16
lds r16, SETTING_TEMP_H ; уставка HIGH
mov EEP_D_r, r16
ldi r16, EEP_SETTING_TEMP_H
mov EEP_A_r, r16
rcall EEP_WR_BYTE
lds r16, SETTING_TEMP_L ; уставка LOW
mov EEP_D_r, r16
ldi r16, EEP_SETTING_TEMP_L
mov EEP_A_r, r16
rcall EEP_WR_BYTE
lds r16, SETTING_HYST ; гистерезис
mov EEP_D_r, r16
ldi r16, EEP_SETTING_HYST
mov EEP_A_r, r16
rcall EEP_WR_BYTE
lds r16, SETTING_MODE ; режим
mov EEP_D_r, r16
ldi r16, EEP_SETTING_MODE
mov EEP_A_r, r16
rcall EEP_WR_BYTE
pop r16
ret//</editor-fold>
//<editor-fold defaultstate="collapsed" desc="Подпрограммы: запись и чтение байта из EEPROM">
EEP_WR_BYTE:
cli
push r16
_EEP_WR_BYTE_LP:
; ждем завершения предыдущей записи
sbic EECR, EEPE
rjmp _EEP_WR_BYTE_LP
; режим программирования - атомарный
ldi r16, (0<<EEPM1) | (0<<EEPM0)
out EECR, r16
; выставляем адресс куда записывать
out EEARL, EEP_A_r
; помещаем данные
out EEDR, EEP_D_r
; запись
sbi EECR, EEMPE
sbi EECR, EEPE
pop r16
sei
ret
EEP_RD_BYTE:
cli
_EEP_RD_BYTE_LP:
; ждем завершения предыдущей записи
sbic EECR, EEPE
rjmp _EEP_RD_BYTE_LP
; выставляем адресс откуда читать
out EEARL, EEP_A_r
; читаем
sbi EECR, EERE
in EEP_D_r, EEDR
sei
ret//</editor-fold>
//<editor-fold defaultstate="collapsed" desc="Подпрограмма: сравнение температуры с уставкой">
@ -436,7 +568,8 @@ _COMPARSION_EXIT:
pop r18
pop r17
pop r16
ret//</editor-fold>
ret
//</editor-fold>
//<editor-fold defaultstate="collapsed" desc="Подпрограмма: обновляем данные о температуре">
TEMP_UPD:
@ -644,13 +777,15 @@ _SW_SET_FROM_0_TO_1:
rcall BEEP_SHORT
rjmp _SW_CHECK_ON_1
_SAVE_SETTINGS:
outi r17, TIMSK, (0<<OCIE0A)
cbi PORTD, DIGIT_1_PIN
cbi PORTD, DIGIT_2_PIN
cbi PORTD, DIGIT_3_PIN
cbi PORTD, DIGIT_4_PIN
outi r17, TIMSK, (0<<OCIE0A)
cbi PORTD, DIGIT_1_PIN
cbi PORTD, DIGIT_2_PIN
cbi PORTD, DIGIT_3_PIN
cbi PORTD, DIGIT_4_PIN
clr REPROGRAM_STEP_r
rcall WRITE_PARAMS_TO_EEP
rcall BEEP_LONG
cbi PORTD, LED_PGM_PIN
ldi r17, MCU_STATE_DEFAULT
sts MCU_STATE, r17
_SW_CHECK_ON_1:
@ -684,6 +819,8 @@ REPROGRAM_SETTINGS:
breq _INTO
rjmp _REPROGRAM_SETTINGS_LOOP
_INTO:
relay_off
sbi PORTD, LED_PGM_PIN
rcall BEEP_SHORT
inc REPROGRAM_STEP_r
_REPROGRAM_SETTINGS_LOOP:
@ -699,7 +836,7 @@ _CHECK_STEP:
//<editor-fold defaultstate="collapsed" desc="Настройка: шаг 1">
_STEP_1: ; установка и отображение гистерезиса
nop
rcall DISPLAY_UPD_DIGITS
_S1_CHECK_PLUS:
sbis SW_PIN, SW_PLUS_PIN
rjmp _INCREASE_HYST
@ -742,7 +879,7 @@ _S3_JMP: ; просто прыжок на _STEP_3
//<editor-fold defaultstate="collapsed" desc="Настройка: шаг 2">
_STEP_2:
nop
rcall DISPLAY_UPD_DIGITS
_S2_CHECK_PLUS:
sbis SW_PIN, SW_PLUS_PIN
rjmp _INCREASE_TEMP
@ -755,6 +892,10 @@ _INCREASE_TEMP:
rcall DEBOUNCE_SW
lds r17, SETTING_TEMP_L
lds r18, SETTING_TEMP_H
cpi r17, MAX_TEMP_L
ldi r19, MAX_TEMP_H
cpc r18, r19
breq PC+7
ldi r19, 10
add r17, r19
clr r19
@ -766,6 +907,11 @@ _DECREASE_TEMP:
rcall DEBOUNCE_SW
lds r17, SETTING_TEMP_L
lds r18, SETTING_TEMP_H
cpi r17, MIN_TEMP_L
ldi r19, MIN_TEMP_H
cpc r18, r19
breq PC+3
__DECREASE:
subi r17, 10
sbci r18, 0
sts SETTING_TEMP_L, r17
@ -828,6 +974,10 @@ _SHOW_MODE:
clr r17
mov DISP_NUM_L, r17
mov DISP_NUM_H, r17
ldi r17, 14
sts DIGITS, r17
sts DIGITS+1, r17
sts DIGITS+2, r17
lds r18, SETTING_MODE
tst r18
breq _SHOW_COOLING
@ -851,17 +1001,6 @@ _REPROGRAM_SETTINGS_END:
ret
//</editor-fold>
;DBG_LED_TOGGLE:
; push r18
; push r19
; in r18, PIND
; ldi r19, (1<<PD0)
; eor r18, r19
; out PORTD, r18
; pop r19
; pop r18
; ret
//<editor-fold defaultstate="collapsed" desc="Реализация интерфеса 1-Wire">
//<editor-fold defaultstate="collapsed" desc="1-Wire: опрос присутствия">
; **** ОПРОС ПРИСУТСТВИЯ УСТРОЙСТВА ******************************
@ -1069,31 +1208,6 @@ DELAY_LOOP_24:
ret
//</editor-fold>
//<editor-fold defaultstate="collapsed" desc="Подпрограмма: задержка">
DELAY:
push r16
push r17
push r18
ldi r18, 6
_DELAY_0:
ldi r16, 255
_DELAY_1:
ldi r17, 255
_DELAY_2:
dec r17
brne _DELAY_2
dec r16
brne _DELAY_1
dec r18
brne _DELAY_0
pop r18
pop r17
pop r16
ret //</editor-fold>
//<editor-fold defaultstate="collapsed" desc="Символы для индикатора">
DISPLAY_SYMBOLS:
; HGFEDCBA HGFEDCBA
@ -1112,9 +1226,6 @@ DISPLAY_SYMBOLS:
; **** СЕГМЕНТ EEPROM ********************************************
.ESEG
E_SETTING_TEMP_H: .BYTE 1
E_SETTING_TEMP_L: .BYTE 1
E_SETTING_HYST: .BYTE 1
E_SETTING_MODE: .BYTE 1
E_FIRST_TIME_RUN: .BYTE 1
.ORG 0x30
INFO: .DB "AVR Thermostat. Written by Sergey Yarkov"
;</editor-fold>

204
main.hex
View File

@ -7,106 +7,118 @@
:10003A002F933F934F935F935FB74091670045308B
:10004A000CF403C0442740936700403081F493982E
:10005A00949895980EF002C00BE002C000916500DA
:10006A00002311F0929A01C09298DAD29BD14130C2
:10006A00002311F0929A01C0929850D305D24130E0
:10007A0081F4929894989598009164003091650063
:10008A00032B11F0939A01C0939800916400C8D28F
:10009A0089D1423059F4929893989598949A0091FC
:1000AA006300BED2002D0F77002E7CD1433041F47D
:1000BA00929893989498959A00916600B1D272D1C9
:10008A00032B11F0939A01C09398009164003ED318
:10009A00F3D1423059F4929893989598949A009192
:1000AA00630034D3002D0F77002EE6D1433041F49C
:1000BA00929893989498959A0091660027D3DCD1E8
:1000CA004395409367005FBF5F914F913F912F9196
:1000DA001F910F9118950FED0DBF0FE701BB01EEB0
:1000EA0007BB0CE108BB02E000BF05E003BF03E267
:1000FA0006BF00E20BBF0CE100BD03E309B900E053
:10010A0002B908E00AB906E003B91124109267009F
:10011A0000E0009360000CE200936C0001E00093A1
:10012A006B0005E000936D0001E000936E0000276C
:10013A00009368000093690000EF00936A000FEFD4
:10014A00009371006624CED000916F00083209F442
:10015A0005C012E01093600075D201C06CD280E035
:10016A0090E00091600042D2003051F496982091BC
:10017A006A0020936600A7D059D011E019BF38D081
:10018A00013011F4969848D1023059F7969AE9CF7E
:10019A00EE24FF1841E1001F111F4A9509F4089542
:1001AA00EE1CFF1CE21AF30A20F4E20EF31E8894F6
:1001BA00F2CF0894F0CFFF1829E0001F2A9509F41E
:1001CA000895FF1CF11A18F4F10E8894F6CF0894DA
:1001DA00F4CF5527442760E13695279510F4400F50
:1001EA00511F57954795379527956A95B9F70895F9
:1001FA000F931F9300916800502E14D000916A004B
:10020A00502E10D000B30170502E0CD004E0502EA6
:10021A0009D00027502E1CE005D01A95E9F71F9146
:10022A000F9108955D9BFECF5CB808950F931F93BD
:10023A002F933F934F935F937F93009168001091A0
:10024A0069002AE030E0C5DF022F132F20916A00EF
:10025A003327020F131F40916C0050916B0060917D
:10026A006D004F935F937727461B570BB42EA52E2D
:10027A005F914F917727460F571FD42EC52E0EF048
:10028A0004C0009510950F5F1F4FB016A10624F405
:10029A000D151C054CF40FC040916E00442311F457
:1002AA00909801C0909A07C040916E00442311F4BF
:1002BA00909A01C090987F915F914F913F912F91B1
:1002CA001F910F9108951F9361D052E135E54DEBCF
:1002DA00D4D112D010916800812F10916900912F0A
:1002EA001F9108950F9334D103E3802E46D1AFE6D0
:1002FA00B0E062D10F9108950F931F932F933F930C
:10030A004F9326D170FF3CC00CEC802E36D10EEBF9
:10031A00802E33D1A8E6B0E04FD1A9E6B0E04CD1A7
:10032A0010916800209169002F93287F283F11F0CF
:10033A00E89407C02F916894109520951F5F2F4F5E
:10034A0001C02F91269517952695179526951795ED
:10035A0026951795309168000EF43195432F3F701A
:10036A00432F330F330F330F440F340F369536951F
:10037A0036953695109368002093690030936A0089
:10038A004F913F912F911F910F9108950F93E0D0B4
:10039A0070FF06C00CEC802EF0D004E4802EEDD065
:1003AA000F9108950F930F920FB800E40EB90BE165
:1003BA000DB9769BFDCFC09AC0980F900F91089502
:1003CA000F93B49B01C01AC000917100002309F475
:1003DA0015C00027009371003CD16394162D143088
:1003EA0014F429D10BC010E019BF929893989498ED
:1003FA009598662427D110E010936000B49901C043
:10040A0009C000917100002309F004C00FEF0093A6
:10041A0071001FD10F9108950F931F932F933F934C
:10042A004F93062D002309F002C005D16394C8DF5B
:10043A00013029F0023049F1033031F183C0000064
:10044A00B29B04C000C0B39B0AC011C002D1109174
:10045A006D00183C09F0139510936D0008C0F9D08F
:10046A0010916D00113009F01A9510936D000F93D9
:10047A001F9300916D001AE09EDE802F9927F0925B
:10048A0066001F910F915EC03EC00000B29B04C07F
:10049A0000C0B39B0FC019C0DCD010916C00209132
:1004AA006B0031E0130F3327231F10936C00209346
:1004BA006B000BC0CED010916C0020916B001150D4
:1004CA00204010936C0020936B000F931F932F937F
:1004DA003F9300916C0010916B00212F207811F44A
:1004EA00E89405C06894009510950F5F1F4F2AE0A5
:1004FA0030E04EDE802F912FE09266003F912F91DF
:10050A001F910F911FC0E894B29B04C000C0B39B17
:10051A0006C009C09ED011E010936E0004C099D0A5
:10052A0010E010936E001127812F912F20916E00F9
:10053A00222309F004C01CE01093660003C01DE0EA
:10054A00109366004F913F912F911F910F9108953B
:10055A00F894B99A33E04EEB8CD0B99830E04AE877
:10056A0088D005D033E042E384D078940895B19BD3
:10057A00716002C0B1997E7F0895F8940F931F931A
:10058A00082D18E0069508F448F0B99A30E046E7D5
:10059A0070D0B99830E042E16CD008C0B99A30E026
:1005AA004AE067D0B99830E04EE763D01A9551F720
:1005BA001F910F9178940895F8940F931F93002731
:1005CA0018E00695B99A30E04AE053D0B99830E07D
:1005DA0040E14FD0B199006830E04CE64AD01A9514
:1005EA0081F70C931F910F91789408950F935F935D
:1005FA0053E0A3E6B0E0809361009093620000911B
:10060A006100109162002AE030E0C2DDED920093B1
:10061A006100109362005A9591F75F910F910895C6
:10062A000F931F93EEEAF6E01127E00FF11F0490F3
:10063A001F910F910895C59A53E039EA4DE71DD0ED
:10064A00C5980895C59A5CE034E34DEF16D0C59875
:10065A0008950F931F932F932AE01FEF0FEF0A9528
:10066A00F1F71A95D9F72A95C1F72F911F910F9192
:10067A00089541503040E8F70895415030405040C5
:10068A00E0F708950F931F932F9326E00FEF1FEFC4
:10069A001A95F1F70A95D9F72A95C1F72F911F9163
:1006AA000F910895C0F9A4B0999282F880909CBFE6
:0206BA00C689EF
:10011A0000E00093600004E0302EEAD0042D0031A4
:10012A0011F09CD014C000E0302EE2D040926B0057
:10013A0001E0302EDDD040926C0002E0302ED8D0A3
:10014A0040926D0003E0302ED3D040926E0000271B
:10015A00009368000093690000EF00936A000FEFB4
:10016A0000937100662428D100916F00083209F4C7
:10017A0005C012E010936000DBD201C0D2D280E049
:10018A0090E000916000003051F420916A002093C1
:10019A00660003D1A1D2B4D011E019BF41D0013019
:1001AA0009F4A6D1023069F71BE01093630010939B
:1001BA006400109365001093660011E019BFE1CF47
:1001CA00EE24FF1841E1001F111F4A9509F4089512
:1001DA00EE1CFF1CE21AF30A20F4E20EF31E8894C6
:1001EA00F2CF0894F0CFFF1829E0001F2A9509F4EE
:1001FA000895FF1CF11A18F4F10E8894F6CF0894AA
:10020A00F4CF5527442760E13695279510F4400F1F
:10021A00511F57954795379527956A95B9F70895C8
:10022A000F931F9300916800502E14D000916A001A
:10023A00502E10D000B30170502E0CD004E0502E76
:10024A0009D00027502E1CE005D01A95E9F71F9116
:10025A000F9108955D9BFECF5CB8089501E000936D
:10026A006B00402E00E0302E36D00CE200936C007A
:10027A00402E01E0302E2FD005E000936D00402E75
:10028A0002E0302E28D001E000936E00402E03E0F9
:10029A00302E21D000E1402E04E0302E1CD00895EB
:1002AA000F9300916B00402E00E0302E14D0009185
:1002BA006C00402E01E0302E0ED000916D00402ED1
:1002CA0002E0302E08D000916E00402E03E0302E5E
:1002DA0002D00F910895F8940F93E199FECF00E0B0
:1002EA000CBB3EBA4DBAE29AE19A0F9178940895FE
:1002FA00F894E199FECF3EBAE09A4DB27894089507
:10030A000F931F932F933F934F935F937F93009184
:10031A006800109169002AE030E073DF022F132F82
:10032A0020916A003327020F131F40916C005091ED
:10033A006B0060916D004F935F937727461B570BB5
:10034A00B42EA52E5F914F917727460F571FD42EB3
:10035A00C52E0EF004C0009510950F5F1F4FB01602
:10036A00A10624F40D151C054CF40FC040916E0033
:10037A00442311F4909801C0909A07C040916E00EE
:10038A00442311F4909A01C090987F915F914F9104
:10039A003F912F911F910F9108951F9361D052E1C0
:1003AA0035E54DEBE0D112D010916800812F109104
:1003BA006900912F1F9108950F9340D103E3802E76
:1003CA0052D1AFE6B0E06ED10F9108950F931F930B
:1003DA002F933F934F9332D170FF3CC00CEC802E89
:1003EA0042D10EEB802E3FD1A8E6B0E05BD1A9E660
:1003FA00B0E058D110916800209169002F93287FAE
:10040A00283F11F0E89407C02F9168941095209521
:10041A001F5F2F4F01C02F91269517952695179587
:10042A002695179526951795309168000EF4319503
:10043A00432F3F70432F330F330F330F440F340FC3
:10044A00369536953695369510936800209369004F
:10045A0030936A004F913F912F911F910F91089508
:10046A000F93ECD070FF06C00CEC802EFCD004E495
:10047A00802EF9D00F9108950F930F920FB800E4D0
:10048A000EB90BE10DB9769BFDCFC09AC0980F90BB
:10049A000F9108950F93B49B01C01CC00091710085
:1004AA00002309F417C000270093710048D1639410
:1004BA00162D143014F435D10DC010E019BF9298DE
:1004CA009398949895986624EBDE32D1969810E02A
:1004DA0010936000B49901C009C000917100002313
:1004EA0009F004C00FEF0093710029D10F9108950C
:1004FA000F931F932F933F934F93062D002309F0D9
:10050A0004C09098969A0DD16394C4DF013029F003
:10051A00023049F1033031F18BC0DED0B29B04C006
:10052A0000C0B39B0AC011C00AD110916D00183CDB
:10053A0009F0139510936D0008C001D110916D0058
:10054A00113009F01A9510936D000F931F930091C3
:10055A006D001AE048DE802F9927F09266001F91FD
:10056A000F9166C03FC0B8D0B29B04C000C0B39B15
:10057A000FC019C0E4D010916C0020916B003AE0D2
:10058A00130F3327231F10936C0020936B000BC0AB
:10059A00D6D010916C0020916B001A502040109315
:1005AA006C0020936B000F931F932F933F9300913E
:1005BA006C0010916B00212F207811F4E89405C08B
:1005CA006894009510950F5F1F4F2AE030E0F8DD20
:1005DA00802F912F0AE0009366003F912F911F917F
:1005EA000F9126C0E894B29B04C000C0B39B06C01A
:1005FA0009C0A5D011E010936E0004C0A0D010E08D
:10060A0010936E001127812F912F1FEF1093630013
:10061A00109364001093650020916E00222309F064
:10062A0004C01CE01093660003C01DE0109366002E
:10063A004F913F912F911F910F910895F894B99A74
:10064A0033E04EEB8CD0B99830E04AE888D005D038
:10065A0033E042E384D078940895B19B716002C07C
:10066A00B1997E7F0895F8940F931F93082D18E08F
:10067A00069508F448F0B99A30E046E770D0B99880
:10068A0030E042E16CD008C0B99A30E04AE067D065
:10069A00B99830E04EE763D01A9551F71F910F9140
:1006AA0078940895F8940F931F93002718E00695FD
:1006BA00B99A30E04AE053D0B99830E040E14FD0DF
:1006CA00B199006830E04CE64AD01A9581F70C934C
:1006DA001F910F91789408950F935F9353E0A3E6C7
:1006EA00B0E08093610090936200009161001091E4
:1006FA0062002AE030E064DDED920093610010931D
:10070A0062005A9591F75F910F9108950F931F9385
:10071A00EAE7F7E01127E00FF11F04901F910F910C
:10072A000895C59A53E039EA4DE71DD0C598089552
:10073A00C59A5CE034E34DEF16D0C59808950F933F
:10074A001F932F932AE01FEF0FEF0A95F1F71A95DF
:10075A00D9F72A95C1F72F911F910F91089541500A
:10076A003040E8F70895415030405040E0F708958E
:0E077A00C0F9A4B0999282F880909CBFC68905
:00000001FF

View File

@ -1,5 +1,5 @@
#
#Wed Jun 28 17:31:11 MSK 2023
#Fri Jun 30 15:31:30 MSK 2023
default.languagetoolchain.version=2.2.7
default.Pack.dfplocation=/home/sergeyyarkov/.mchp_packs/Microchip/ATtiny_DFP/3.0.151
conf.ids=default