temperature comparsion

This commit is contained in:
Sergey Yarkov 2023-06-25 23:21:30 +03:00
parent a1518d41fc
commit cced58c312
No known key found for this signature in database
GPG Key ID: E91CE1FABC619B6F
14 changed files with 1073 additions and 669 deletions

View File

@ -63,12 +63,15 @@
; **** СТАНДАРТНЫЕ ПАРАМЕТРЫ *********************************** ; **** СТАНДАРТНЫЕ ПАРАМЕТРЫ ***********************************
; Отдельно задается целая и дробная часть в точности до десятых ; Отдельно задается целая и дробная часть в точности до десятых
; Например: 30.5 градусов .EQU DEFAULT_TEMP = 150 ; 30.5 градусов
.EQU DEFAULT_SETTING_INT = 0 .EQU DEFAULT_HYST = 8 ; 1.2 градуса гистерезис
.EQU DEFAULT_SETTING_F = 5 // 0.5
.EQU DEFAULT_SETTING_HYST = 15 // 1.5
.EQU HEAT_MODE = 1 .EQU HEAT_MODE = 1
.EQU COOLING_MODE = 0 .EQU COOLING_MODE = 0
.EQU DEFAULT_SETTING_MODE = HEAT_MODE .EQU DEFAULT_MODE = HEAT_MODE
.EQU DEFAULT_SETTING_TEMP_L = LOW(DEFAULT_TEMP)
.EQU DEFAULT_SETTING_TEMP_H = HIGH(DEFAULT_TEMP)
.EQU DEFAULT_SETTING_HYST = DEFAULT_HYST
.EQU DEFAULT_SETTING_MODE = DEFAULT_MODE

View File

@ -7,68 +7,76 @@
:10004A000F931F935FB74091670045300CF403C0CC :10004A000F931F935FB74091670045300CF403C0CC
:10005A00442740936700403081F493989498959888 :10005A00442740936700403081F493989498959888
:10006A000EF002C00BE002C000916500002311F0FF :10006A000EF002C00BE002C000916500002311F0FF
:10007A00929A01C09298B0D12BD1413081F49298D2 :10007A00929A01C09298F0D16BD1413081F4929852
:10008A00949895980091640030916500032B11F0C3 :10008A00949895980091640030916500032B11F0C3
:10009A00939A01C09398009164009ED119D142307D :10009A00939A01C0939800916400DED159D14230FD
:1000AA0059F4929893989598949A0091630094D1F0 :1000AA0059F4929893989598949A00916300D4D1B0
:1000BA00002D0F77002E0CD1433041F4929893987B :1000BA00002D0F77002E4CD1433041F4929893983B
:1000CA009498959A00916B0087D102D143954093F9 :1000CA009498959A00916B00C7D142D14395409379
:1000DA0067005FBF1F910F915F914F9118950FEDC8 :1000DA0067005FBF1F910F915F914F9118950FEDC8
:1000EA000DBF0FE701BB01EE07BB0CE108BB02E045 :1000EA000DBF0FE701BB01EE07BB0CE108BB02E045
:1000FA0000BF05E003BF09E106BF00E20BBF0CE148 :1000FA0000BF05E003BF09E106BF00E20BBF0CE148
:10010A0000BD11241092670000E00093600000E037 :10010A0000BD11241092670000E00093600006E928
:10011A0000936C0005E000936D000FE000936E0001 :10011A0000936D0000E000936C0008E000936E000D
:10012A0001E000936F0000270093690000936A00C2 :10012A0001E000936F0000270093690000936A00C2
:10013A0000EF00936B006ED000917000083209F452 :10013A0000EF00936B00AED000917000083209F412
:10014A0005C012E01093600056D101C050D180E082 :10014A0005C012E01093600096D101C090D180E002
:10015A0090E000916000003031F4969823D147D0A6 :10015A0090E000916000003031F4969863D187D026
:10016A0001E009BF1CD0013019F496981BD1BCD00C :10016A0001E009BF39D0013019F496985BD1FCD06F
:10017A00023079F7969AEDCFEE24FF1841E1001F7D :10017A00023079F7969AEDCFEE24FF1841E1001F7D
:10018A00111F4A9509F40895EE1CFF1CE21AF30A9E :10018A00111F4A9509F40895EE1CFF1CE21AF30A9E
:10019A0020F4E20EF31E8894F2CF0894F0CF0F9366 :10019A0020F4E20EF31E8894F2CF0894F0CFFF18F1
:1001AA001F932F933F934F935F936F93009169002F :1001AA0029E0001F2A9509F40895FF1CF11A18F492
:1001BA0010916A0020916B003CE140E250916F007F :1001BA00F10E8894F6CF0894F4CF5527442760E1CE
:1001CA000EF001C00195552309F409C030170CF44B :1001CA003695279510F4400F511F57954795379547
:1001DA0002C0909A04C004170CF401C090986F9161 :1001DA0027956A95B9F708950F931F932F933F9325
:1001EA005F914F913F912F911F910F9108951F9306 :1001EA004F935F936F937F930091690010916A0018
:1001FA0065D05CE034E34DEF19D15CE034E34DEFB8 :1001FA002AE030E0E2DF022F132F20916B00332731
:10020A0015D112D010916900812F10916A00912F97 :10020A00020F131F109371000093720040916D004A
:10021A001F9108950F9376D003E3802E88D0A0E72C :10021A0050916C0060916E004F935F937727461B55
:10022A00B0E0A6D00F9108950F931F932F933F9399 :10022A00570BB42EA52E5F914F917727460F571F74
:10023A004F9368D00CEC802E7AD00EEB802E77D0BC :10023A00D42EC52E0EF004C0009510950F5F1F4FE7
:10024A00A9E6B0E095D0AAE6B0E092D01091690094 :10024A0040916F00442301F4B016A10624F40D1561
:10025A0020916A002F93287F283F11F0E89409C063 :10025A001C051CF403C0909A01C090987F916F917D
:10026A002F9168941095209531E0130F30E0231FE9 :10026A005F914F913F912F911F910F9108951F9385
:10027A0001C02F91269517952695179526951795BE :10027A0065D05CE034E34DEF19D15CE034E34DEF37
:10028A0026951795309169000EF43195432F3F70EA :10028A0015D112D010916900812F10916A00912F17
:10029A00432F330F330F330F440F340F36953695F0 :10029A001F9108950F9376D003E3802E88D0A0E7AC
:1002AA00369536951093690020936A0030936B0057 :1002AA00B0E0A6D00F9108950F931F932F933F9319
:1002BA004F913F912F911F910F9108950F9322D043 :1002BA004F9368D00CEC802E7AD00EEB802E77D03C
:1002CA000CEC802E34D004E4802E31D00F910895A6 :1002CA00A9E6B0E095D0AAE6B0E092D01091690014
:1002DA000F930FB800E40EB90BE10DB9769BFDCF71 :1002DA0020916A002F93287F283F11F0E89409C0E3
:1002EA00C09AC0980F9108950F938CD0B29B019633 :1002EA002F9168941095209531E0130F30E0231F69
:1002FA00B39B0197B49B01C003C000E00093600068 :1002FA0001C02F912695179526951795269517953E
:10030A000F910895F894B99A33E04EEB8BD0B998CF :10030A0026951795309169000EF43195432F3F7069
:10031A0030E04AE887D005D033E042E383D07894CE :10031A00432F330F330F330F440F340F369536956F
:10032A000895B19B716002C0B1997E7F08950F93C1 :10032A00369536951093690020936A0030936B00D6
:10033A001F93082D18E0069508F458F0F894B99A16 :10033A004F913F912F911F910F9108950F9322D0C2
:10034A0030E046E76FD0B99830E042E16BD078945C :10034A000CEC802E34D004E4802E31D00F91089525
:10035A000AC0F894B99A30E04AE064D0B99830E01B :10035A000F930FB800E40EB90BE10DB9769BFDCFF0
:10036A004EE760D078941A9531F71F910F9108954E :10036A00C09AC0980F9108950F938CD0B29B0196B2
:10037A000F931F93002718E0F8940695B99A30E076 :10037A00B39B0197B49B01C003C000E000936000E7
:10038A004AE050D0B99830E040E14CD0B1990068C9 :10038A000F910895F894B99A33E04EEB8BD0B9984F
:10039A0030E04CE647D01A9581F70C9378941F9178 :10039A0030E04AE887D005D033E042E383D078944E
:1003AA000F910895F8945F9354E0A3E6B0E0809328 :1003AA000895B19B716002C0B1997E7F08950F9341
:1003BA0061009093620000916100109162002AE04E :1003BA001F93082D18E0069508F458F0F894B99A96
:1003CA0030E0DADEED9200936100109362005A95F4 :1003CA0030E046E76FD0B99830E042E16BD07894DC
:1003DA0091F75F91789408950F931F93E0E6F4E004 :1003DA000AC0F894B99A30E04AE064D0B99830E09B
:1003EA001127E00FF11F04901F910F910895C59AEC :1003EA004EE760D078941A9531F71F910F910895CE
:1003FA0022D0C5980895C59A1ED01DD01CD01BD0F6 :1003FA000F931F93002718E0F8940695B99A30E0F6
:10040A00C59808950F931F932F932AE01FEF0FEFBC :10040A004AE050D0B99830E040E14CD0B199006848
:10041A000A95F1F71A95D9F72A95C1F72F911F91E5 :10041A0030E04CE647D01A9581F70C9378941F91F7
:10042A000F91089541503040E8F708954150304007 :10042A000F910895F8945F9354E0A3E6B0E08093A7
:10043A005040E0F708950F931F932F9326E00FEF94 :10043A0061009093620000916100109162002AE0CD
:10044A001FEF1A95F1F70A95D9F72A95C1F72F9157 :10044A0030E09ADEED9200936100109362005A95B3
:10045A001F910F910895C0F9A4B0999282F88090E3 :10045A0091F75F91789408950F931F93E0EEF4E07B
:02046A009CBF35 :10046A001127E00FF11F04901F910F910895C59A6B
:10047A0022D0C5980895C59A1ED01DD01CD01BD075
:10048A00C59808950F931F932F932AE01FEF0FEF3C
:10049A000A95F1F71A95D9F72A95C1F72F911F9165
:1004AA000F91089541503040E8F708954150304087
:1004BA005040E0F708950F931F932F9326E00FEF14
:1004CA001FEF1A95F1F70A95D9F72A95C1F72F91D7
:1004DA001F910F910895C0F9A4B0999282F8809063
:0204EA009CBFB5
:00000001FF :00000001FF

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,5 @@
AVRASM ver. 2.2.7 main.asm Sun Jun 25 15:01:25 2023 AVRASM ver. 2.2.7 main.asm Sun Jun 25 23:20:09 2023
EQU SIGNATURE_000 0000001e EQU SIGNATURE_000 0000001e
@ -526,11 +526,14 @@ EQU UART_TX_PIN 00000001
EQU MCU_STATE_DEFAULT 00000000 EQU MCU_STATE_DEFAULT 00000000
EQU MCU_STATE_PROGRAM 00000001 EQU MCU_STATE_PROGRAM 00000001
EQU MCU_STATE_ERROR 00000002 EQU MCU_STATE_ERROR 00000002
EQU DEFAULT_SETTING_INT 00000000 EQU DEFAULT_TEMP 00000096
EQU DEFAULT_SETTING_F 00000005 EQU DEFAULT_HYST 00000008
EQU DEFAULT_SETTING_HYST 0000000f
EQU HEAT_MODE 00000001 EQU HEAT_MODE 00000001
EQU COOLING_MODE 00000000 EQU COOLING_MODE 00000000
EQU DEFAULT_MODE 00000001
EQU DEFAULT_SETTING_TEMP_L 00000096
EQU DEFAULT_SETTING_TEMP_H 00000000
EQU DEFAULT_SETTING_HYST 00000008
EQU DEFAULT_SETTING_MODE 00000001 EQU DEFAULT_SETTING_MODE 00000001
DSEG MCU_STATE 00000060 DSEG MCU_STATE 00000060
DSEG SRAM_TEMP_1 00000061 DSEG SRAM_TEMP_1 00000061
@ -540,11 +543,13 @@ DSEG SW_FLAGS 00000068
DSEG TEMP_L 00000069 DSEG TEMP_L 00000069
DSEG TEMP_H 0000006a DSEG TEMP_H 0000006a
DSEG TEMP_F 0000006b DSEG TEMP_F 0000006b
DSEG SETTING_INT 0000006c DSEG SETTING_TEMP_H 0000006c
DSEG SETTING_F 0000006d DSEG SETTING_TEMP_L 0000006d
DSEG SETTING_HYST 0000006e DSEG SETTING_HYST 0000006e
DSEG SETTING_MODE 0000006f DSEG SETTING_MODE 0000006f
DSEG DEVICE_FAMILY_CODE 00000070 DSEG DEVICE_FAMILY_CODE 00000070
DSEG SRAM_TEMP_2 00000071
DSEG SRAM_TEMP_3 00000072
CSEG RESET_vect 00000074 CSEG RESET_vect 00000074
CSEG TIMER0_COMPA_vect 00000023 CSEG TIMER0_COMPA_vect 00000023
CSEG PCINT0_vect 0000000e CSEG PCINT0_vect 0000000e
@ -553,25 +558,25 @@ CSEG _INTO_PROGRAM_STATE 0000001a
CSEG _CLR_CURRENT_DIGIT 0000002d CSEG _CLR_CURRENT_DIGIT 0000002d
CSEG _indicate_1 00000030 CSEG _indicate_1 00000030
CSEG _indicate_2 00000042 CSEG _indicate_2 00000042
CSEG DISPLAY_DECODER 000001f1 CSEG DISPLAY_DECODER 00000231
CSEG USI_TRANSMIT 0000016d CSEG USI_TRANSMIT 000001ad
CSEG _indicate_3 00000054 CSEG _indicate_3 00000054
CSEG _indicate_4 00000061 CSEG _indicate_4 00000061
CSEG _indicate_exit 0000006b CSEG _indicate_exit 0000006b
CSEG MCU_INIT 00000076 CSEG MCU_INIT 00000076
CSEG RD_F_CODE 0000010f CSEG RD_F_CODE 0000014f
CSEG ERR_FAMILY_CODE 000000a6 CSEG ERR_FAMILY_CODE 000000a6
CSEG START_PROGRAM 000000ab CSEG START_PROGRAM 000000ab
CSEG BEEP_LONG 00000200 CSEG BEEP_LONG 00000240
CSEG BEEP_SHORT 000001fc CSEG BEEP_SHORT 0000023c
CSEG LOOP 000000ae CSEG LOOP 000000ae
CSEG _STATE_DEFAULT 000000b0 CSEG _STATE_DEFAULT 000000b0
CSEG _STATE_PROGRAM 000000b8 CSEG _STATE_PROGRAM 000000b8
CSEG DISPLAY_UPD_DIGITS 000001d7 CSEG DISPLAY_UPD_DIGITS 00000217
CSEG TEMP_UPD 000000fc CSEG TEMP_UPD 0000013c
CSEG TEMP_COMPARSION 000000d4 CSEG TEMP_COMPARSION 000000f1
CSEG _STATE_ERROR 000000bd CSEG _STATE_ERROR 000000bd
CSEG SW_CHECK_PROCESS 00000179 CSEG SW_CHECK_PROCESS 000001b9
DEF drem16uL r14 DEF drem16uL r14
DEF drem16uH r15 DEF drem16uH r15
DEF dres16uL r16 DEF dres16uL r16
@ -585,41 +590,70 @@ CSEG div16u 000000c1
CSEG d16u_1 000000c4 CSEG d16u_1 000000c4
CSEG d16u_2 000000c9 CSEG d16u_2 000000c9
CSEG d16u_3 000000d2 CSEG d16u_3 000000d2
CSEG _HEATING_MODE 000000eb DEF drem8u r15
CSEG _COMPARSION_EXIT 000000f4 DEF dres8u r16
CSEG _HEATING_ON 000000ee DEF dd8u r16
CSEG _HEATING_OFF 000000f0 DEF dv8u r17
CSEG TEMP_CONV 00000163 DEF dcnt8u r18
CSEG DELAY_LOOP_24 0000021b CSEG div8u 000000d4
CSEG TEMP_RD 00000119 CSEG d8u_1 000000d6
CSEG OW_PRESENCE 00000187 CSEG d8u_2 000000da
CSEG OW_SEND_BYTE 0000019c CSEG d8u_3 000000e0
CSEG OW_RD_BYTE 000001bd DEF mc16uL r16
CSEG _TEMP_RD_TO_UNSIGNED 00000135 DEF mc16uH r17
CSEG _TEMP_RD_CONTINUE 0000013e DEF mp16uL r18
CSEG _TEMP_RD_END 00000147 DEF mp16uH r19
CSEG _USI_TRANSMIT_LOOP 00000172 DEF m16u0 r18
CSEG DEBOUNCE_SW 00000207 DEF m16u1 r19
CSEG _INTO_DEFAULT_STATE 00000182 DEF m16u2 r20
CSEG _SW_CHECK_PROCESS_END 00000185 DEF m16u3 r21
CSEG DELAY_LOOP_16 00000217 DEF mcnt16u r22
CSEG OW_CHECK_PRESENCE 00000196 CSEG mpy16u 000000e2
CSEG _EXIT 0000019b CSEG m16u_1 000000e7
CSEG _OW_SEND_BYTE_LOOP 000001a0 CSEG noad8 000000ea
CSEG _OW_SEND_0 000001a3 DEF temp_r_l r16
CSEG _OW_SEND_1 000001ae DEF temp_r_h r17
CSEG _OW_SEND_BYTE_END 000001b8 DEF min_r_trhd_l r11
CSEG _OW_RD_BYTE_LP 000001c2 DEF min_r_trhd_h r10
DEF max_r_trhd_l r13
DEF max_r_trhd_h r12
CSEG _NEGATE_TEMP 00000121
CSEG _CHECK_MODE 00000125
CSEG _HEATING_MODE 00000129
CSEG _HEATING_ON 00000130
CSEG _HEATING_OFF 00000132
CSEG _COMPARSION_EXIT 00000133
CSEG TEMP_CONV 000001a3
CSEG DELAY_LOOP_24 0000025b
CSEG TEMP_RD 00000159
CSEG OW_PRESENCE 000001c7
CSEG OW_SEND_BYTE 000001dc
CSEG OW_RD_BYTE 000001fd
CSEG _TEMP_RD_TO_UNSIGNED 00000175
CSEG _TEMP_RD_CONTINUE 0000017e
CSEG _TEMP_RD_END 00000187
CSEG _USI_TRANSMIT_LOOP 000001b2
CSEG DEBOUNCE_SW 00000247
CSEG _INTO_DEFAULT_STATE 000001c2
CSEG _SW_CHECK_PROCESS_END 000001c5
CSEG DELAY_LOOP_16 00000257
CSEG OW_CHECK_PRESENCE 000001d6
CSEG _EXIT 000001db
CSEG _OW_SEND_BYTE_LOOP 000001e0
CSEG _OW_SEND_0 000001e3
CSEG _OW_SEND_1 000001ee
CSEG _OW_SEND_BYTE_END 000001f8
CSEG _OW_RD_BYTE_LP 00000202
EQU dividend 00000061 EQU dividend 00000061
EQU divisor 0000000a EQU divisor 0000000a
CSEG DIV_LOOP 000001e0 CSEG DIV_LOOP 00000220
CSEG DISPLAY_SYMBOLS 00000230 CSEG DISPLAY_SYMBOLS 00000270
CSEG DELAY 00000220 CSEG DELAY 00000260
CSEG _loop_2 0000020b CSEG _loop_2 0000024b
CSEG _loop_0 0000020c CSEG _loop_0 0000024c
CSEG _dec_0 0000020d CSEG _dec_0 0000024d
CSEG _loop_1 0000020f CSEG _loop_1 0000024f
CSEG _loop_3 00000211 CSEG _loop_3 00000251
CSEG _DELAY_0 00000224 CSEG _DELAY_0 00000264
CSEG _DELAY_1 00000225 CSEG _DELAY_1 00000265
CSEG _DELAY_2 00000226 CSEG _DELAY_2 00000266

View File

@ -12,6 +12,8 @@
<FILE>definitions.asm</FILE> <FILE>definitions.asm</FILE>
<FILE>macros.asm</FILE> <FILE>macros.asm</FILE>
<FILE>div16u.asm</FILE> <FILE>div16u.asm</FILE>
<FILE>div8u.asm</FILE>
<FILE>mpy16u.asm</FILE>
</INCLUDED_FILES> </INCLUDED_FILES>
<OBJECT_FILES> <OBJECT_FILES>
<FILE>dist/default/production/attiny2313a_thermostat.X.production.obj</FILE> <FILE>dist/default/production/attiny2313a_thermostat.X.production.obj</FILE>
@ -32,77 +34,88 @@
<TEMP_L><FILE>main.asm</FILE><LINE>29</LINE></TEMP_L> <TEMP_L><FILE>main.asm</FILE><LINE>29</LINE></TEMP_L>
<TEMP_H><FILE>main.asm</FILE><LINE>30</LINE></TEMP_H> <TEMP_H><FILE>main.asm</FILE><LINE>30</LINE></TEMP_H>
<TEMP_F><FILE>main.asm</FILE><LINE>31</LINE></TEMP_F> <TEMP_F><FILE>main.asm</FILE><LINE>31</LINE></TEMP_F>
<SETTING_INT><FILE>main.asm</FILE><LINE>32</LINE></SETTING_INT> <SETTING_TEMP_H><FILE>main.asm</FILE><LINE>32</LINE></SETTING_TEMP_H>
<SETTING_F><FILE>main.asm</FILE><LINE>33</LINE></SETTING_F> <SETTING_TEMP_L><FILE>main.asm</FILE><LINE>33</LINE></SETTING_TEMP_L>
<SETTING_HYST><FILE>main.asm</FILE><LINE>34</LINE></SETTING_HYST> <SETTING_HYST><FILE>main.asm</FILE><LINE>34</LINE></SETTING_HYST>
<SETTING_MODE><FILE>main.asm</FILE><LINE>35</LINE></SETTING_MODE> <SETTING_MODE><FILE>main.asm</FILE><LINE>35</LINE></SETTING_MODE>
<DEVICE_FAMILY_CODE><FILE>main.asm</FILE><LINE>36</LINE></DEVICE_FAMILY_CODE> <DEVICE_FAMILY_CODE><FILE>main.asm</FILE><LINE>36</LINE></DEVICE_FAMILY_CODE>
<RESET_vect><FILE>main.asm</FILE><LINE>189</LINE></RESET_vect> <SRAM_TEMP_2><FILE>main.asm</FILE><LINE>37</LINE></SRAM_TEMP_2>
<TIMER0_COMPA_vect><FILE>main.asm</FILE><LINE>94</LINE></TIMER0_COMPA_vect> <SRAM_TEMP_3><FILE>main.asm</FILE><LINE>38</LINE></SRAM_TEMP_3>
<PCINT0_vect><FILE>main.asm</FILE><LINE>57</LINE></PCINT0_vect> <RESET_vect><FILE>main.asm</FILE><LINE>191</LINE></RESET_vect>
<_PCINT0_vect_end><FILE>main.asm</FILE><LINE>84</LINE></_PCINT0_vect_end> <TIMER0_COMPA_vect><FILE>main.asm</FILE><LINE>96</LINE></TIMER0_COMPA_vect>
<_INTO_PROGRAM_STATE><FILE>main.asm</FILE><LINE>80</LINE></_INTO_PROGRAM_STATE> <PCINT0_vect><FILE>main.asm</FILE><LINE>59</LINE></PCINT0_vect>
<_CLR_CURRENT_DIGIT><FILE>main.asm</FILE><LINE>106</LINE></_CLR_CURRENT_DIGIT> <_PCINT0_vect_end><FILE>main.asm</FILE><LINE>86</LINE></_PCINT0_vect_end>
<_indicate_1><FILE>main.asm</FILE><LINE>110</LINE></_indicate_1> <_INTO_PROGRAM_STATE><FILE>main.asm</FILE><LINE>82</LINE></_INTO_PROGRAM_STATE>
<_indicate_2><FILE>main.asm</FILE><LINE>130</LINE></_indicate_2> <_CLR_CURRENT_DIGIT><FILE>main.asm</FILE><LINE>108</LINE></_CLR_CURRENT_DIGIT>
<DISPLAY_DECODER><FILE>main.asm</FILE><LINE>674</LINE></DISPLAY_DECODER> <_indicate_1><FILE>main.asm</FILE><LINE>112</LINE></_indicate_1>
<USI_TRANSMIT><FILE>main.asm</FILE><LINE>487</LINE></USI_TRANSMIT> <_indicate_2><FILE>main.asm</FILE><LINE>132</LINE></_indicate_2>
<_indicate_3><FILE>main.asm</FILE><LINE>148</LINE></_indicate_3> <DISPLAY_DECODER><FILE>main.asm</FILE><LINE>740</LINE></DISPLAY_DECODER>
<_indicate_4><FILE>main.asm</FILE><LINE>164</LINE></_indicate_4> <USI_TRANSMIT><FILE>main.asm</FILE><LINE>553</LINE></USI_TRANSMIT>
<_indicate_exit><FILE>main.asm</FILE><LINE>176</LINE></_indicate_exit> <_indicate_3><FILE>main.asm</FILE><LINE>150</LINE></_indicate_3>
<MCU_INIT><FILE>main.asm</FILE><LINE>195</LINE></MCU_INIT> <_indicate_4><FILE>main.asm</FILE><LINE>166</LINE></_indicate_4>
<RD_F_CODE><FILE>main.asm</FILE><LINE>359</LINE></RD_F_CODE> <_indicate_exit><FILE>main.asm</FILE><LINE>178</LINE></_indicate_exit>
<ERR_FAMILY_CODE><FILE>main.asm</FILE><LINE>247</LINE></ERR_FAMILY_CODE> <MCU_INIT><FILE>main.asm</FILE><LINE>197</LINE></MCU_INIT>
<START_PROGRAM><FILE>main.asm</FILE><LINE>252</LINE></START_PROGRAM> <RD_F_CODE><FILE>main.asm</FILE><LINE>425</LINE></RD_F_CODE>
<BEEP_LONG><FILE>main.asm</FILE><LINE>698</LINE></BEEP_LONG> <ERR_FAMILY_CODE><FILE>main.asm</FILE><LINE>253</LINE></ERR_FAMILY_CODE>
<BEEP_SHORT><FILE>main.asm</FILE><LINE>690</LINE></BEEP_SHORT> <START_PROGRAM><FILE>main.asm</FILE><LINE>258</LINE></START_PROGRAM>
<LOOP><FILE>main.asm</FILE><LINE>261</LINE></LOOP> <BEEP_LONG><FILE>main.asm</FILE><LINE>764</LINE></BEEP_LONG>
<_STATE_DEFAULT><FILE>main.asm</FILE><LINE>265</LINE></_STATE_DEFAULT> <BEEP_SHORT><FILE>main.asm</FILE><LINE>756</LINE></BEEP_SHORT>
<_STATE_PROGRAM><FILE>main.asm</FILE><LINE>273</LINE></_STATE_PROGRAM> <LOOP><FILE>main.asm</FILE><LINE>267</LINE></LOOP>
<DISPLAY_UPD_DIGITS><FILE>main.asm</FILE><LINE>633</LINE></DISPLAY_UPD_DIGITS> <_STATE_DEFAULT><FILE>main.asm</FILE><LINE>271</LINE></_STATE_DEFAULT>
<TEMP_UPD><FILE>main.asm</FILE><LINE>342</LINE></TEMP_UPD> <_STATE_PROGRAM><FILE>main.asm</FILE><LINE>279</LINE></_STATE_PROGRAM>
<TEMP_COMPARSION><FILE>main.asm</FILE><LINE>290</LINE></TEMP_COMPARSION> <DISPLAY_UPD_DIGITS><FILE>main.asm</FILE><LINE>699</LINE></DISPLAY_UPD_DIGITS>
<_STATE_ERROR><FILE>main.asm</FILE><LINE>279</LINE></_STATE_ERROR> <TEMP_UPD><FILE>main.asm</FILE><LINE>408</LINE></TEMP_UPD>
<SW_CHECK_PROCESS><FILE>main.asm</FILE><LINE>518</LINE></SW_CHECK_PROCESS> <TEMP_COMPARSION><FILE>main.asm</FILE><LINE>298</LINE></TEMP_COMPARSION>
<_STATE_ERROR><FILE>main.asm</FILE><LINE>285</LINE></_STATE_ERROR>
<SW_CHECK_PROCESS><FILE>main.asm</FILE><LINE>584</LINE></SW_CHECK_PROCESS>
<div16u><FILE>div16u.asm</FILE><LINE>32</LINE></div16u> <div16u><FILE>div16u.asm</FILE><LINE>32</LINE></div16u>
<d16u_1><FILE>div16u.asm</FILE><LINE>36</LINE></d16u_1> <d16u_1><FILE>div16u.asm</FILE><LINE>36</LINE></d16u_1>
<d16u_2><FILE>div16u.asm</FILE><LINE>42</LINE></d16u_2> <d16u_2><FILE>div16u.asm</FILE><LINE>42</LINE></d16u_2>
<d16u_3><FILE>div16u.asm</FILE><LINE>52</LINE></d16u_3> <d16u_3><FILE>div16u.asm</FILE><LINE>52</LINE></d16u_3>
<_HEATING_MODE><FILE>main.asm</FILE><LINE>319</LINE></_HEATING_MODE> <div8u><FILE>div8u.asm</FILE><LINE>26</LINE></div8u>
<_COMPARSION_EXIT><FILE>main.asm</FILE><LINE>331</LINE></_COMPARSION_EXIT> <d8u_1><FILE>div8u.asm</FILE><LINE>28</LINE></d8u_1>
<_HEATING_ON><FILE>main.asm</FILE><LINE>323</LINE></_HEATING_ON> <d8u_2><FILE>div8u.asm</FILE><LINE>32</LINE></d8u_2>
<_HEATING_OFF><FILE>main.asm</FILE><LINE>326</LINE></_HEATING_OFF> <d8u_3><FILE>div8u.asm</FILE><LINE>38</LINE></d8u_3>
<TEMP_CONV><FILE>main.asm</FILE><LINE>467</LINE></TEMP_CONV> <mpy16u><FILE>mpy16u.asm</FILE><LINE>31</LINE></mpy16u>
<DELAY_LOOP_24><FILE>main.asm</FILE><LINE>742</LINE></DELAY_LOOP_24> <m16u_1><FILE>mpy16u.asm</FILE><LINE>37</LINE></m16u_1>
<TEMP_RD><FILE>main.asm</FILE><LINE>375</LINE></TEMP_RD> <noad8><FILE>mpy16u.asm</FILE><LINE>40</LINE></noad8>
<OW_PRESENCE><FILE>main.asm</FILE><LINE>542</LINE></OW_PRESENCE> <_NEGATE_TEMP><FILE>main.asm</FILE><LINE>364</LINE></_NEGATE_TEMP>
<OW_SEND_BYTE><FILE>main.asm</FILE><LINE>569</LINE></OW_SEND_BYTE> <_CHECK_MODE><FILE>main.asm</FILE><LINE>370</LINE></_CHECK_MODE>
<OW_RD_BYTE><FILE>main.asm</FILE><LINE>602</LINE></OW_RD_BYTE> <_HEATING_MODE><FILE>main.asm</FILE><LINE>381</LINE></_HEATING_MODE>
<_TEMP_RD_TO_UNSIGNED><FILE>main.asm</FILE><LINE>410</LINE></_TEMP_RD_TO_UNSIGNED> <_HEATING_ON><FILE>main.asm</FILE><LINE>391</LINE></_HEATING_ON>
<_TEMP_RD_CONTINUE><FILE>main.asm</FILE><LINE>421</LINE></_TEMP_RD_CONTINUE> <_HEATING_OFF><FILE>main.asm</FILE><LINE>394</LINE></_HEATING_OFF>
<_TEMP_RD_END><FILE>main.asm</FILE><LINE>431</LINE></_TEMP_RD_END> <_COMPARSION_EXIT><FILE>main.asm</FILE><LINE>396</LINE></_COMPARSION_EXIT>
<_USI_TRANSMIT_LOOP><FILE>main.asm</FILE><LINE>505</LINE></_USI_TRANSMIT_LOOP> <TEMP_CONV><FILE>main.asm</FILE><LINE>533</LINE></TEMP_CONV>
<DEBOUNCE_SW><FILE>main.asm</FILE><LINE>708</LINE></DEBOUNCE_SW> <DELAY_LOOP_24><FILE>main.asm</FILE><LINE>808</LINE></DELAY_LOOP_24>
<_INTO_DEFAULT_STATE><FILE>main.asm</FILE><LINE>531</LINE></_INTO_DEFAULT_STATE> <TEMP_RD><FILE>main.asm</FILE><LINE>441</LINE></TEMP_RD>
<_SW_CHECK_PROCESS_END><FILE>main.asm</FILE><LINE>534</LINE></_SW_CHECK_PROCESS_END> <OW_PRESENCE><FILE>main.asm</FILE><LINE>608</LINE></OW_PRESENCE>
<DELAY_LOOP_16><FILE>main.asm</FILE><LINE>734</LINE></DELAY_LOOP_16> <OW_SEND_BYTE><FILE>main.asm</FILE><LINE>635</LINE></OW_SEND_BYTE>
<OW_CHECK_PRESENCE><FILE>main.asm</FILE><LINE>558</LINE></OW_CHECK_PRESENCE> <OW_RD_BYTE><FILE>main.asm</FILE><LINE>668</LINE></OW_RD_BYTE>
<_EXIT><FILE>main.asm</FILE><LINE>564</LINE></_EXIT> <_TEMP_RD_TO_UNSIGNED><FILE>main.asm</FILE><LINE>476</LINE></_TEMP_RD_TO_UNSIGNED>
<_OW_SEND_BYTE_LOOP><FILE>main.asm</FILE><LINE>574</LINE></_OW_SEND_BYTE_LOOP> <_TEMP_RD_CONTINUE><FILE>main.asm</FILE><LINE>487</LINE></_TEMP_RD_CONTINUE>
<_OW_SEND_0><FILE>main.asm</FILE><LINE>578</LINE></_OW_SEND_0> <_TEMP_RD_END><FILE>main.asm</FILE><LINE>497</LINE></_TEMP_RD_END>
<_OW_SEND_1><FILE>main.asm</FILE><LINE>586</LINE></_OW_SEND_1> <_USI_TRANSMIT_LOOP><FILE>main.asm</FILE><LINE>571</LINE></_USI_TRANSMIT_LOOP>
<_OW_SEND_BYTE_END><FILE>main.asm</FILE><LINE>593</LINE></_OW_SEND_BYTE_END> <DEBOUNCE_SW><FILE>main.asm</FILE><LINE>774</LINE></DEBOUNCE_SW>
<_OW_RD_BYTE_LP><FILE>main.asm</FILE><LINE>608</LINE></_OW_RD_BYTE_LP> <_INTO_DEFAULT_STATE><FILE>main.asm</FILE><LINE>597</LINE></_INTO_DEFAULT_STATE>
<DIV_LOOP><FILE>main.asm</FILE><LINE>650</LINE></DIV_LOOP> <_SW_CHECK_PROCESS_END><FILE>main.asm</FILE><LINE>600</LINE></_SW_CHECK_PROCESS_END>
<DISPLAY_SYMBOLS><FILE>main.asm</FILE><LINE>776</LINE></DISPLAY_SYMBOLS> <DELAY_LOOP_16><FILE>main.asm</FILE><LINE>800</LINE></DELAY_LOOP_16>
<DELAY><FILE>main.asm</FILE><LINE>751</LINE></DELAY> <OW_CHECK_PRESENCE><FILE>main.asm</FILE><LINE>624</LINE></OW_CHECK_PRESENCE>
<_loop_2><FILE>main.asm</FILE><LINE>714</LINE></_loop_2> <_EXIT><FILE>main.asm</FILE><LINE>630</LINE></_EXIT>
<_loop_0><FILE>main.asm</FILE><LINE>716</LINE></_loop_0> <_OW_SEND_BYTE_LOOP><FILE>main.asm</FILE><LINE>640</LINE></_OW_SEND_BYTE_LOOP>
<_dec_0><FILE>main.asm</FILE><LINE>718</LINE></_dec_0> <_OW_SEND_0><FILE>main.asm</FILE><LINE>644</LINE></_OW_SEND_0>
<_loop_1><FILE>main.asm</FILE><LINE>721</LINE></_loop_1> <_OW_SEND_1><FILE>main.asm</FILE><LINE>652</LINE></_OW_SEND_1>
<_loop_3><FILE>main.asm</FILE><LINE>724</LINE></_loop_3> <_OW_SEND_BYTE_END><FILE>main.asm</FILE><LINE>659</LINE></_OW_SEND_BYTE_END>
<_DELAY_0><FILE>main.asm</FILE><LINE>757</LINE></_DELAY_0> <_OW_RD_BYTE_LP><FILE>main.asm</FILE><LINE>674</LINE></_OW_RD_BYTE_LP>
<_DELAY_1><FILE>main.asm</FILE><LINE>759</LINE></_DELAY_1> <DIV_LOOP><FILE>main.asm</FILE><LINE>716</LINE></DIV_LOOP>
<_DELAY_2><FILE>main.asm</FILE><LINE>761</LINE></_DELAY_2> <DISPLAY_SYMBOLS><FILE>main.asm</FILE><LINE>842</LINE></DISPLAY_SYMBOLS>
<DELAY><FILE>main.asm</FILE><LINE>817</LINE></DELAY>
<_loop_2><FILE>main.asm</FILE><LINE>780</LINE></_loop_2>
<_loop_0><FILE>main.asm</FILE><LINE>782</LINE></_loop_0>
<_dec_0><FILE>main.asm</FILE><LINE>784</LINE></_dec_0>
<_loop_1><FILE>main.asm</FILE><LINE>787</LINE></_loop_1>
<_loop_3><FILE>main.asm</FILE><LINE>790</LINE></_loop_3>
<_DELAY_0><FILE>main.asm</FILE><LINE>823</LINE></_DELAY_0>
<_DELAY_1><FILE>main.asm</FILE><LINE>825</LINE></_DELAY_1>
<_DELAY_2><FILE>main.asm</FILE><LINE>827</LINE></_DELAY_2>
</LABELS> </LABELS>
</ASSEMBLER_INFO> </ASSEMBLER_INFO>

39
div8u.asm Normal file
View File

@ -0,0 +1,39 @@
;***************************************************************************
;*
;* "div8u" - 8/8 Bit Unsigned Division
;*
;* This subroutine divides the two register variables "dd8u" (dividend) and
;* "dv8u" (divisor). The result is placed in "dres8u" and the remainder in
;* "drem8u".
;*
;* Number of words :14
;* Number of cycles :97
;* Low registers used :1 (drem8u)
;* High registers used :3 (dres8u/dd8u,dv8u,dcnt8u)
;*
;***************************************************************************
;***** Subroutine Register Variables
.def drem8u =r15 ;remainder
.def dres8u =r16 ;result
.def dd8u =r16 ;dividend
.def dv8u =r17 ;divisor
.def dcnt8u =r18 ;loop counter
;***** Code
div8u: sub drem8u,drem8u ;clear remainder and carry
ldi dcnt8u,9 ;init loop counter
d8u_1: rol dd8u ;shift left dividend
dec dcnt8u ;decrement counter
brne d8u_2 ;if done
ret ; return
d8u_2: rol drem8u ;shift dividend into remainder
sub drem8u,dv8u ;remainder = remainder - divisor
brcc d8u_3 ;if result negative
add drem8u,dv8u ; restore remainder
clc ; clear carry to be shifted into result
rjmp d8u_1 ;else
d8u_3: sec ; set carry to be shifted into result
rjmp d8u_1

4
div8u.hex Normal file
View File

@ -0,0 +1,4 @@
:020000020000FC
:10000000FF1829E0001F2A9509F40895FF1CF11A32
:0C00100018F4F10E8894F6CF0894F4CF99
:00000001FF

114
main.asm
View File

@ -29,11 +29,13 @@ SW_FLAGS: .BYTE 1 ; Состояние кнопок
TEMP_L: .BYTE 1 ; Младший байт температуры TEMP_L: .BYTE 1 ; Младший байт температуры
TEMP_H: .BYTE 1 ; Старший байт температуры TEMP_H: .BYTE 1 ; Старший байт температуры
TEMP_F: .BYTE 1 ; Дробная часть TEMP_F: .BYTE 1 ; Дробная часть
SETTING_INT: .BYTE 1 ; Уставка: целая часть SETTING_TEMP_H: .BYTE 1 ; Уставка температуры (старший байт)
SETTING_F: .BYTE 1 ; Уставка: дробная часть SETTING_TEMP_L: .BYTE 1 ; Уставка температуры (младший байт)
SETTING_HYST: .BYTE 1 ; Гистерезис: отклонение от уставки SETTING_HYST: .BYTE 1 ; Гистерезис: отклонение от уставки
SETTING_MODE: .BYTE 1 ; Режим работы: '1' - нагрев; '0' - 'охлаждение' SETTING_MODE: .BYTE 1 ; Режим работы: '1' - нагрев; '0' - 'охлаждение'
DEVICE_FAMILY_CODE: .BYTE 1 ; Должно быть 0x10 для DS18B20 DEVICE_FAMILY_CODE: .BYTE 1 ; Должно быть 0x10 для DS18B20
SRAM_TEMP_2: .BYTE 1
SRAM_TEMP_3: .BYTE 1
;//</editor-fold> ;//</editor-fold>
@ -220,14 +222,18 @@ MCU_INIT:
ldi r16, 0x00 ldi r16, 0x00
sts MCU_STATE, r16 ; переводим МК сразу в режим измерения температуры sts MCU_STATE, r16 ; переводим МК сразу в режим измерения температуры
ldi r16, DEFAULT_SETTING_INT ; настройка параметров
sts SETTING_INT, r16 ldi r16, DEFAULT_SETTING_TEMP_L
ldi r16, DEFAULT_SETTING_F sts SETTING_TEMP_L, r16 ; уставка LOW
sts SETTING_F, r16
ldi r16, DEFAULT_SETTING_TEMP_H
sts SETTING_TEMP_H, r16 ; уставка HIGH
ldi r16, DEFAULT_SETTING_HYST ldi r16, DEFAULT_SETTING_HYST
sts SETTING_HYST, r16 sts SETTING_HYST, r16 ; гистерезис
ldi r16, DEFAULT_SETTING_MODE ldi r16, DEFAULT_SETTING_MODE
sts SETTING_MODE, r16 sts SETTING_MODE, r16 ; режим работы
clr r16 clr r16
sts TEMP_L, r16 sts TEMP_L, r16
@ -286,6 +292,8 @@ _STATE_ERROR:
; **** ПОДПРОГРАММЫ ********************************************** ; **** ПОДПРОГРАММЫ **********************************************
.INCLUDE "div16u.asm" .INCLUDE "div16u.asm"
.INCLUDE "div8u.asm"
.INCLUDE "mpy16u.asm"
TEMP_COMPARSION: TEMP_COMPARSION:
push r16 push r16
@ -295,40 +303,94 @@ TEMP_COMPARSION:
push r20 push r20
push r21 push r21
push r22 push r22
push r23
lds r16, TEMP_L ;
lds r17, TEMP_H // всегда 0? ; lds dd8u, SETTING_HYST
lds r18, TEMP_F ; ldi dv8u, 10
; rcall div8u
;
; ; определение нижнего и верхнего порого срабатывания
; lds r19, SETTING_INT ; lds r19, SETTING_INT
; lds r20, SETTING_F ; mov r20, r19
; sub r19, dres8u ; MIN = SET - HYST_INT
; add r20, dres8u ; MAX = SET + HYST_INT
;
.DEF temp_r_l = r16
.DEF temp_r_h = r17
.DEF min_r_trhd_l = r11
.DEF min_r_trhd_h = r10
.DEF max_r_trhd_l = r13
.DEF max_r_trhd_h = r12
; умножаем температуру на 10
lds mc16uL, TEMP_L // r16
lds mc16uH, TEMP_H // r17
ldi mp16uL, LOW(10)
ldi mp16uH, HIGH(10)
rcall mpy16u
mov temp_r_l, m16u0 ; L
mov temp_r_h, m16u1 ; H
; добавляем дробную часть
lds r18, TEMP_F
clr r19
add temp_r_l, r18
adc temp_r_h, r19
sts SRAM_TEMP_2, temp_r_h
sts SRAM_TEMP_3, temp_r_l
ldi r19, 28 ; min ; определяем нижний и верхний пороги
ldi r20, 32 ; max lds r20, SETTING_TEMP_L
lds r21, SETTING_MODE ; mode lds r21, SETTING_TEMP_H
lds r22, SETTING_HYST
push r20
push r21
clr r23
sub r20, r22
sbc r21, r23
mov min_r_trhd_l, r20
mov min_r_trhd_h, r21
pop r21
pop r20
clr r23
add r20, r22
adc r21, r23
mov max_r_trhd_l, r20
mov max_r_trhd_h, r21
brts PC+2 ; определяем знак температуры
rjmp PC+2 brts _NEGATE_TEMP
neg r16 rjmp _CHECK_MODE
tst r21 _NEGATE_TEMP:
com temp_r_l
com temp_r_h
subi temp_r_l, low(-1)
sbci temp_r_h, high(-1)
_CHECK_MODE:
; определяем режим работы
lds r20, SETTING_MODE
tst r20
brne _HEATING_MODE brne _HEATING_MODE
rjmp _COMPARSION_EXIT
_HEATING_MODE: _HEATING_MODE:
cp r19, r16 ; проверяем нижний порог
cp min_r_trhd_l, temp_r_l
cpc min_r_trhd_h, temp_r_h
brge _HEATING_ON ; TEMP <= MIN brge _HEATING_ON ; TEMP <= MIN
rjmp _HEATING_OFF ; проверяем верхний порог
cp temp_r_l, max_r_trhd_l
cpc temp_r_h, max_r_trhd_h
brge _HEATING_OFF ; TEMP >= TOP
rjmp _COMPARSION_EXIT
_HEATING_ON: _HEATING_ON:
relay_on relay_on
rjmp _COMPARSION_EXIT rjmp _COMPARSION_EXIT
_HEATING_OFF: _HEATING_OFF:
cp r16, r20
brge PC+2 ; TEMP >= MAX
rjmp _COMPARSION_EXIT
relay_off relay_off
_COMPARSION_EXIT: _COMPARSION_EXIT:
pop r23
pop r22 pop r22
pop r21 pop r21
pop r20 pop r20

121
main.hex
View File

@ -7,68 +7,69 @@
:10004A000F931F935FB74091670045300CF403C0CC :10004A000F931F935FB74091670045300CF403C0CC
:10005A00442740936700403081F493989498959888 :10005A00442740936700403081F493989498959888
:10006A000EF002C00BE002C000916500002311F0FF :10006A000EF002C00BE002C000916500002311F0FF
:10007A00929A01C09298B5D130D1413081F49298C8 :10007A00929A01C09298BDD138D1413081F49298B8
:10008A00949895980091640030916500032B11F0C3 :10008A00949895980091640030916500032B11F0C3
:10009A00939A01C0939800916400A3D11ED1423073 :10009A00939A01C0939800916400ABD126D1423063
:1000AA0059F4929893989598949A0091630099D1EB :1000AA0059F4929893989598949A00916300A1D1E3
:1000BA00002D0F77002E11D1433041F49298939876 :1000BA00002D0F77002E19D1433041F4929893986E
:1000CA009498959A00916B008CD107D143954093EF :1000CA009498959A00916B0094D10FD143954093DF
:1000DA0067005FBF1F910F915F914F9118950FEDC8 :1000DA0067005FBF1F910F915F914F9118950FEDC8
:1000EA000DBF0FE701BB01EE07BB0CE108BB02E045 :1000EA000DBF0FE701BB01EE07BB0CE108BB02E045
:1000FA0000BF05E003BF09E106BF00E20BBF0CE148 :1000FA0000BF05E003BF09E106BF00E20BBF0CE148
:10010A0000BD11241092670000E0009360000FEF19 :10010A0000BD11241092670000E0009360000CE229
:10011A0000936C0005E000936D0005E000936E000B :10011A0000936D0001E000936C0005E000936E000F
:10012A0001E000936F0000270093690000936A00C2 :10012A0001E000936F0008E1102F000F000F000F8D
:10013A0000EF00936B0060D180E090E000916000D6 :10013A00110F010F009371000027009369000093CB
:10014A00003031F4969833D161D001E009BF25D04F :10014A006A0000EF00936B0072D0009170000832D1
:10015A00013019F496982BD1CCD0023079F7969ABF :10015A0009F405C012E0109360005AD101C054D1CD
:10016A001BE01093630010936400109365001093D2 :10016A0080E090E000916000003031F4969827D149
:10017A006600E4CFEE24FF1841E1001F111F4A95E3 :10017A004BD001E009BF39D0013019F496981FD14C
:10018A0009F40895EE1CFF1CE21AF30A20F4E20EA9 :10018A00C0D0023079F7969AEDCFEE24FF1841E1FC
:10019A00F31E8894F2CF0894F0CF0F931F932F93F6 :10019A00001F111F4A9509F40895EE1CFF1CE21A6C
:1001AA003F934F935F936F930091690010916A0098 :1001AA00F30A20F4E20EF31E8894F2CF0894F0CFFB
:1001BA0020916B0030916C0040916D0050916F005E :1001BA00FF1829E0001F2A9509F40895FF1CF11A77
:1001CA000EF43195552309F419C003172CF416F4CB :1001CA0018F4F10E8894F6CF0894F4CF55274427F3
:1001DA00909801C0909A12C0031729F016F4909AC9 :1001DA0060E13695279510F4400F511F57954795C2
:1001EA0001C090980BC016F4909801C0909A2417F9 :1001EA00379527956A95B9F708950F931F932F931B
:1001FA000CF404C016F4909A01C090986F915F9124 :1001FA003F934F935F936F936F915F914F913F91AD
:10020A004F913F912F911F910F9108951F935BD0AA :10020A002F911F910F9108951F9365D05CE034E3FD
:10021A005CE034E34DEF0FD15CE034E34DEF0BD1FA :10021A004DEF19D15CE034E34DEF15D112D01091B6
:10022A0008D010916900812F10916A00912F1F91B7 :10022A006900812F10916A00912F1F9108950F93F1
:10023A0008950F931F932F933F934F9368D00CEC1D :10023A0076D003E3802E88D0A0E7B0E0A6D00F9155
:10024A00802E7AD00EEB802E77D0A9E6B0E095D03A :10024A0008950F931F932F933F934F9368D00CEC0D
:10025A00AAE6B0E092D01091690020916A002F932B :10025A00802E7AD00EEB802E77D0A9E6B0E095D02A
:10026A00287F283F11F0E89409C02F9168941095CF :10026A00AAE6B0E092D01091690020916A002F931B
:10027A00209531E0130F30E0231F01C02F912695FE :10027A00287F283F11F0E89409C02F9168941095BF
:10028A0017952695179526951795269517953091C2 :10028A00209531E0130F30E0231F01C02F912695EE
:10029A0069000EF43195432F3F70432F330F330F0C :10029A0017952695179526951795269517953091B2
:1002AA00330F440F340F369536953695369510939D :1002AA0069000EF43195432F3F70432F330F330FFC
:1002BA00690020936A0030936B004F913F912F9110 :1002BA00330F440F340F369536953695369510938D
:1002CA001F910F9108950F9322D00CEC802E34D0F9 :1002CA00690020936A0030936B004F913F912F9100
:1002DA0004E4802E31D00F9108950F930FB800E4F3 :1002DA001F910F9108950F9322D00CEC802E34D0E9
:1002EA000EB90BE10DB9769BFDCFC09AC0980F915C :1002EA0004E4802E31D00F9108950F930FB800E4E3
:1002FA0008950F938CD0B29B0196B39B0197B49B40 :1002FA000EB90BE10DB9769BFDCFC09AC0980F914C
:10030A0001C003C000E0009360000F910895F894C3 :10030A0008950F938CD0B29B0196B39B0197B49B2F
:10031A00B99A33E04EEB8BD0B99830E04AE887D0EF :10031A0001C003C000E0009360000F910895F894B3
:10032A0005D033E042E383D078940895B19B71609D :10032A00B99A33E04EEB8BD0B99830E04AE887D0DF
:10033A0002C0B1997E7F08950F931F93082D18E08C :10033A0005D033E042E383D078940895B19B71608D
:10034A00069508F458F0F894B99A30E046E76FD069 :10034A0002C0B1997E7F08950F931F93082D18E07C
:10035A00B99830E042E16BD078940AC0F894B99A1F :10035A00069508F458F0F894B99A30E046E76FD059
:10036A0030E04AE064D0B99830E04EE760D0789443 :10036A00B99830E042E16BD078940AC0F894B99A0F
:10037A001A9531F71F910F9108950F931F93002734 :10037A0030E04AE064D0B99830E04EE760D0789433
:10038A0018E0F8940695B99A30E04AE050D0B99846 :10038A001A9531F71F910F9108950F931F93002724
:10039A0030E040E14CD0B199006830E04CE647D0FB :10039A0018E0F8940695B99A30E04AE050D0B99836
:1003AA001A9581F70C9378941F910F910895F894F8 :1003AA0030E040E14CD0B199006830E04CE647D0EB
:1003BA005F9354E0A3E6B0E08093610090936200FB :1003BA001A9581F70C9378941F910F910895F894E8
:1003CA0000916100109162002AE030E0D3DEED92E4 :1003CA005F9354E0A3E6B0E08093610090936200EB
:1003DA0000936100109362005A9591F75F917894A7 :1003DA0000916100109162002AE030E0D6DEED92D1
:1003EA0008950F931F93EAE6F4E01127E00FF11F37 :1003EA0000936100109362005A9591F75F91789497
:1003FA0004901F910F910895C59A22D0C598089527 :1003FA0008950F931F93EAE7F4E01127E00FF11F26
:10040A00C59A1ED01DD01CD01BD0C59808950F9335 :10040A0004901F910F910895C59A22D0C598089516
:10041A001F932F932AE01FEF0FEF0A95F1F71A9512 :10041A00C59A1ED01DD01CD01BD0C59808950F9325
:10042A00D9F72A95C1F72F911F910F91089541503D :10042A001F932F932AE01FEF0FEF0A95F1F71A9502
:10043A003040E8F70895415030405040E0F70895C1 :10043A00D9F72A95C1F72F911F910F91089541502D
:10044A000F931F932F9326E00FEF1FEF1A95F1F7E3 :10044A003040E8F70895415030405040E0F70895B1
:10045A000A95D9F72A95C1F72F911F910F910895FF :10045A000F931F932F9326E00FEF1FEF1A95F1F7D3
:0C046A00C0F9A4B0999282F880909CBF69 :10046A000A95D9F72A95C1F72F911F910F910895EF
:0C047A00C0F9A4B0999282F880909CBF59
:00000001FF :00000001FF

46
mpy16u.asm Normal file
View File

@ -0,0 +1,46 @@
;***************************************************************************
;*
;* "mpy16u" - 16x16 Bit Unsigned Multiplication
;*
;* This subroutine multiplies the two 16-bit register variables
;* mp16uH:mp16uL and mc16uH:mc16uL.
;* The result is placed in m16u3:m16u2:m16u1:m16u0.
;*
;* Number of words :14 + return
;* Number of cycles :153 + return
;* Low registers used :None
;* High registers used :7 (mp16uL,mp16uH,mc16uL/m16u0,mc16uH/m16u1,m16u2,
;* m16u3,mcnt16u)
;*
;***************************************************************************
;***** Subroutine Register Variables
.def mc16uL =r16 ;multiplicand low byte
.def mc16uH =r17 ;multiplicand high byte
.def mp16uL =r18 ;multiplier low byte
.def mp16uH =r19 ;multiplier high byte
.def m16u0 =r18 ;result byte 0 (LSB)
.def m16u1 =r19 ;result byte 1
.def m16u2 =r20 ;result byte 2
.def m16u3 =r21 ;result byte 3 (MSB)
.def mcnt16u =r22 ;loop counter
;***** Code
mpy16u: clr m16u3 ;clear 2 highest bytes of result
clr m16u2
ldi mcnt16u,16 ;init loop counter
lsr mp16uH
ror mp16uL
m16u_1: brcc noad8 ;if bit 0 of multiplier set
add m16u2,mc16uL ;add multiplicand Low to byte 2 of res
adc m16u3,mc16uH ;add multiplicand high to byte 3 of res
noad8: ror m16u3 ;shift right result byte 3
ror m16u2 ;rotate right result byte 2
ror m16u1 ;rotate result byte 1 and multiplier High
ror m16u0 ;rotate result byte 0 and multiplier Low
dec mcnt16u ;decrement loop counter
brne m16u_1 ;if not done, loop more
ret

4
mpy16u.hex Normal file
View File

@ -0,0 +1,4 @@
:020000020000FC
:100000005527442760E13695279510F4400F511F7E
:0E00100057954795379527956A95B9F7089546
:00000001FF

View File

@ -1,12 +1,12 @@
# #
#Thu Jun 22 06:29:23 MSK 2023 #Sun Jun 25 21:34:52 MSK 2023
default.languagetoolchain.version=2.2.7 default.languagetoolchain.version=2.2.7
default.Pack.dfplocation=/home/sergeyyarkov/.mchp_packs/Microchip/ATtiny_DFP/3.0.151 default.Pack.dfplocation=/home/sergeyyarkov/.mchp_packs/Microchip/ATtiny_DFP/3.0.151
default.com-microchip-mplab-mdbcore-simulator-Simulator.md5=19e4dc0f223322f74cda227c3c12c71c default.com-microchip-mplab-mdbcore-simulator-Simulator.md5=19e4dc0f223322f74cda227c3c12c71c
conf.ids=default conf.ids=default
default.languagetoolchain.dir=/usr/bin default.languagetoolchain.dir=/usr/bin
host.id=2l3s-yrgx-1d host.id=2l3s-yrgx-1d
configurations-xml=cdd4b69d8607063199baa35f45d5db2e configurations-xml=6a01ab9659d148a99244ed826cfd39c3
default.com-microchip-mplab-nbide-toolchain-avrasm-AVRASMLanguageToolchain.md5=0e94da8ed93e9650ffef50929833a79f default.com-microchip-mplab-nbide-toolchain-avrasm-AVRASMLanguageToolchain.md5=0e94da8ed93e9650ffef50929833a79f
com-microchip-mplab-nbide-embedded-makeproject-MakeProject.md5=6e02ca5e9f5042ffd365b42ab82d3a9b com-microchip-mplab-nbide-embedded-makeproject-MakeProject.md5=6e02ca5e9f5042ffd365b42ab82d3a9b
user-defined-mime-resolver-xml=none user-defined-mime-resolver-xml=none

View File

@ -16,6 +16,8 @@
<itemPath>div16u.asm</itemPath> <itemPath>div16u.asm</itemPath>
<itemPath>definitions.asm</itemPath> <itemPath>definitions.asm</itemPath>
<itemPath>macros.asm</itemPath> <itemPath>macros.asm</itemPath>
<itemPath>div8u.asm</itemPath>
<itemPath>mpy16u.asm</itemPath>
</logicalFolder> </logicalFolder>
<logicalFolder name="ExternalFiles" <logicalFolder name="ExternalFiles"
displayName="Important Files" displayName="Important Files"
@ -1033,12 +1035,16 @@
<AVR-Global> <AVR-Global>
</AVR-Global> </AVR-Global>
</item> </item>
<item path="div8u.asm" ex="true" overriding="false">
</item>
<item path="macros.asm" ex="true" overriding="false"> <item path="macros.asm" ex="true" overriding="false">
<AVR-ASM> <AVR-ASM>
</AVR-ASM> </AVR-ASM>
<AVR-Global> <AVR-Global>
</AVR-Global> </AVR-Global>
</item> </item>
<item path="mpy16u.asm" ex="true" overriding="false">
</item>
</conf> </conf>
</confs> </confs>
</configurationDescriptor> </configurationDescriptor>