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_SETTING_INT = 0
.EQU DEFAULT_SETTING_F = 5 // 0.5
.EQU DEFAULT_SETTING_HYST = 15 // 1.5
.EQU DEFAULT_TEMP = 150 ; 30.5 градусов
.EQU DEFAULT_HYST = 8 ; 1.2 градуса гистерезис
.EQU HEAT_MODE = 1
.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
:10005A00442740936700403081F493989498959888
:10006A000EF002C00BE002C000916500002311F0FF
:10007A00929A01C09298B0D12BD1413081F49298D2
:10007A00929A01C09298F0D16BD1413081F4929852
:10008A00949895980091640030916500032B11F0C3
:10009A00939A01C09398009164009ED119D142307D
:1000AA0059F4929893989598949A0091630094D1F0
:1000BA00002D0F77002E0CD1433041F4929893987B
:1000CA009498959A00916B0087D102D143954093F9
:10009A00939A01C0939800916400DED159D14230FD
:1000AA0059F4929893989598949A00916300D4D1B0
:1000BA00002D0F77002E4CD1433041F4929893983B
:1000CA009498959A00916B00C7D142D14395409379
:1000DA0067005FBF1F910F915F914F9118950FEDC8
:1000EA000DBF0FE701BB01EE07BB0CE108BB02E045
:1000FA0000BF05E003BF09E106BF00E20BBF0CE148
:10010A0000BD11241092670000E00093600000E037
:10011A0000936C0005E000936D000FE000936E0001
:10010A0000BD11241092670000E00093600006E928
:10011A0000936D0000E000936C0008E000936E000D
:10012A0001E000936F0000270093690000936A00C2
:10013A0000EF00936B006ED000917000083209F452
:10014A0005C012E01093600056D101C050D180E082
:10015A0090E000916000003031F4969823D147D0A6
:10016A0001E009BF1CD0013019F496981BD1BCD00C
:10013A0000EF00936B00AED000917000083209F412
:10014A0005C012E01093600096D101C090D180E002
:10015A0090E000916000003031F4969863D187D026
:10016A0001E009BF39D0013019F496985BD1FCD06F
:10017A00023079F7969AEDCFEE24FF1841E1001F7D
:10018A00111F4A9509F40895EE1CFF1CE21AF30A9E
:10019A0020F4E20EF31E8894F2CF0894F0CF0F9366
:1001AA001F932F933F934F935F936F93009169002F
:1001BA0010916A0020916B003CE140E250916F007F
:1001CA000EF001C00195552309F409C030170CF44B
:1001DA0002C0909A04C004170CF401C090986F9161
:1001EA005F914F913F912F911F910F9108951F9306
:1001FA0065D05CE034E34DEF19D15CE034E34DEFB8
:10020A0015D112D010916900812F10916A00912F97
:10021A001F9108950F9376D003E3802E88D0A0E72C
:10022A00B0E0A6D00F9108950F931F932F933F9399
:10023A004F9368D00CEC802E7AD00EEB802E77D0BC
:10024A00A9E6B0E095D0AAE6B0E092D01091690094
:10025A0020916A002F93287F283F11F0E89409C063
:10026A002F9168941095209531E0130F30E0231FE9
:10027A0001C02F91269517952695179526951795BE
:10028A0026951795309169000EF43195432F3F70EA
:10029A00432F330F330F330F440F340F36953695F0
:1002AA00369536951093690020936A0030936B0057
:1002BA004F913F912F911F910F9108950F9322D043
:1002CA000CEC802E34D004E4802E31D00F910895A6
:1002DA000F930FB800E40EB90BE10DB9769BFDCF71
:1002EA00C09AC0980F9108950F938CD0B29B019633
:1002FA00B39B0197B49B01C003C000E00093600068
:10030A000F910895F894B99A33E04EEB8BD0B998CF
:10031A0030E04AE887D005D033E042E383D07894CE
:10032A000895B19B716002C0B1997E7F08950F93C1
:10033A001F93082D18E0069508F458F0F894B99A16
:10034A0030E046E76FD0B99830E042E16BD078945C
:10035A000AC0F894B99A30E04AE064D0B99830E01B
:10036A004EE760D078941A9531F71F910F9108954E
:10037A000F931F93002718E0F8940695B99A30E076
:10038A004AE050D0B99830E040E14CD0B1990068C9
:10039A0030E04CE647D01A9581F70C9378941F9178
:1003AA000F910895F8945F9354E0A3E6B0E0809328
:1003BA0061009093620000916100109162002AE04E
:1003CA0030E0DADEED9200936100109362005A95F4
:1003DA0091F75F91789408950F931F93E0E6F4E004
:1003EA001127E00FF11F04901F910F910895C59AEC
:1003FA0022D0C5980895C59A1ED01DD01CD01BD0F6
:10040A00C59808950F931F932F932AE01FEF0FEFBC
:10041A000A95F1F71A95D9F72A95C1F72F911F91E5
:10042A000F91089541503040E8F708954150304007
:10043A005040E0F708950F931F932F9326E00FEF94
:10044A001FEF1A95F1F70A95D9F72A95C1F72F9157
:10045A001F910F910895C0F9A4B0999282F88090E3
:02046A009CBF35
:10019A0020F4E20EF31E8894F2CF0894F0CFFF18F1
:1001AA0029E0001F2A9509F40895FF1CF11A18F492
:1001BA00F10E8894F6CF0894F4CF5527442760E1CE
:1001CA003695279510F4400F511F57954795379547
:1001DA0027956A95B9F708950F931F932F933F9325
:1001EA004F935F936F937F930091690010916A0018
:1001FA002AE030E0E2DF022F132F20916B00332731
:10020A00020F131F109371000093720040916D004A
:10021A0050916C0060916E004F935F937727461B55
:10022A00570BB42EA52E5F914F917727460F571F74
:10023A00D42EC52E0EF004C0009510950F5F1F4FE7
:10024A0040916F00442301F4B016A10624F40D1561
:10025A001C051CF403C0909A01C090987F916F917D
:10026A005F914F913F912F911F910F9108951F9385
:10027A0065D05CE034E34DEF19D15CE034E34DEF37
:10028A0015D112D010916900812F10916A00912F17
:10029A001F9108950F9376D003E3802E88D0A0E7AC
:1002AA00B0E0A6D00F9108950F931F932F933F9319
:1002BA004F9368D00CEC802E7AD00EEB802E77D03C
:1002CA00A9E6B0E095D0AAE6B0E092D01091690014
:1002DA0020916A002F93287F283F11F0E89409C0E3
:1002EA002F9168941095209531E0130F30E0231F69
:1002FA0001C02F912695179526951795269517953E
:10030A0026951795309169000EF43195432F3F7069
:10031A00432F330F330F330F440F340F369536956F
:10032A00369536951093690020936A0030936B00D6
:10033A004F913F912F911F910F9108950F9322D0C2
:10034A000CEC802E34D004E4802E31D00F91089525
:10035A000F930FB800E40EB90BE10DB9769BFDCFF0
:10036A00C09AC0980F9108950F938CD0B29B0196B2
:10037A00B39B0197B49B01C003C000E000936000E7
:10038A000F910895F894B99A33E04EEB8BD0B9984F
:10039A0030E04AE887D005D033E042E383D078944E
:1003AA000895B19B716002C0B1997E7F08950F9341
:1003BA001F93082D18E0069508F458F0F894B99A96
:1003CA0030E046E76FD0B99830E042E16BD07894DC
:1003DA000AC0F894B99A30E04AE064D0B99830E09B
:1003EA004EE760D078941A9531F71F910F910895CE
:1003FA000F931F93002718E0F8940695B99A30E0F6
:10040A004AE050D0B99830E040E14CD0B199006848
:10041A0030E04CE647D01A9581F70C9378941F91F7
:10042A000F910895F8945F9354E0A3E6B0E08093A7
:10043A0061009093620000916100109162002AE0CD
:10044A0030E09ADEED9200936100109362005A95B3
:10045A0091F75F91789408950F931F93E0EEF4E07B
:10046A001127E00FF11F04901F910F910895C59A6B
:10047A0022D0C5980895C59A1ED01DD01CD01BD075
:10048A00C59808950F931F932F932AE01FEF0FEF3C
:10049A000A95F1F71A95D9F72A95C1F72F911F9165
:1004AA000F91089541503040E8F708954150304087
:1004BA005040E0F708950F931F932F9326E00FEF14
:1004CA001FEF1A95F1F70A95D9F72A95C1F72F91D7
:1004DA001F910F910895C0F9A4B0999282F8809063
:0204EA009CBFB5
: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
@ -526,11 +526,14 @@ EQU UART_TX_PIN 00000001
EQU MCU_STATE_DEFAULT 00000000
EQU MCU_STATE_PROGRAM 00000001
EQU MCU_STATE_ERROR 00000002
EQU DEFAULT_SETTING_INT 00000000
EQU DEFAULT_SETTING_F 00000005
EQU DEFAULT_SETTING_HYST 0000000f
EQU DEFAULT_TEMP 00000096
EQU DEFAULT_HYST 00000008
EQU HEAT_MODE 00000001
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
DSEG MCU_STATE 00000060
DSEG SRAM_TEMP_1 00000061
@ -540,11 +543,13 @@ DSEG SW_FLAGS 00000068
DSEG TEMP_L 00000069
DSEG TEMP_H 0000006a
DSEG TEMP_F 0000006b
DSEG SETTING_INT 0000006c
DSEG SETTING_F 0000006d
DSEG SETTING_TEMP_H 0000006c
DSEG SETTING_TEMP_L 0000006d
DSEG SETTING_HYST 0000006e
DSEG SETTING_MODE 0000006f
DSEG DEVICE_FAMILY_CODE 00000070
DSEG SRAM_TEMP_2 00000071
DSEG SRAM_TEMP_3 00000072
CSEG RESET_vect 00000074
CSEG TIMER0_COMPA_vect 00000023
CSEG PCINT0_vect 0000000e
@ -553,25 +558,25 @@ CSEG _INTO_PROGRAM_STATE 0000001a
CSEG _CLR_CURRENT_DIGIT 0000002d
CSEG _indicate_1 00000030
CSEG _indicate_2 00000042
CSEG DISPLAY_DECODER 000001f1
CSEG USI_TRANSMIT 0000016d
CSEG DISPLAY_DECODER 00000231
CSEG USI_TRANSMIT 000001ad
CSEG _indicate_3 00000054
CSEG _indicate_4 00000061
CSEG _indicate_exit 0000006b
CSEG MCU_INIT 00000076
CSEG RD_F_CODE 0000010f
CSEG RD_F_CODE 0000014f
CSEG ERR_FAMILY_CODE 000000a6
CSEG START_PROGRAM 000000ab
CSEG BEEP_LONG 00000200
CSEG BEEP_SHORT 000001fc
CSEG BEEP_LONG 00000240
CSEG BEEP_SHORT 0000023c
CSEG LOOP 000000ae
CSEG _STATE_DEFAULT 000000b0
CSEG _STATE_PROGRAM 000000b8
CSEG DISPLAY_UPD_DIGITS 000001d7
CSEG TEMP_UPD 000000fc
CSEG TEMP_COMPARSION 000000d4
CSEG DISPLAY_UPD_DIGITS 00000217
CSEG TEMP_UPD 0000013c
CSEG TEMP_COMPARSION 000000f1
CSEG _STATE_ERROR 000000bd
CSEG SW_CHECK_PROCESS 00000179
CSEG SW_CHECK_PROCESS 000001b9
DEF drem16uL r14
DEF drem16uH r15
DEF dres16uL r16
@ -585,41 +590,70 @@ CSEG div16u 000000c1
CSEG d16u_1 000000c4
CSEG d16u_2 000000c9
CSEG d16u_3 000000d2
CSEG _HEATING_MODE 000000eb
CSEG _COMPARSION_EXIT 000000f4
CSEG _HEATING_ON 000000ee
CSEG _HEATING_OFF 000000f0
CSEG TEMP_CONV 00000163
CSEG DELAY_LOOP_24 0000021b
CSEG TEMP_RD 00000119
CSEG OW_PRESENCE 00000187
CSEG OW_SEND_BYTE 0000019c
CSEG OW_RD_BYTE 000001bd
CSEG _TEMP_RD_TO_UNSIGNED 00000135
CSEG _TEMP_RD_CONTINUE 0000013e
CSEG _TEMP_RD_END 00000147
CSEG _USI_TRANSMIT_LOOP 00000172
CSEG DEBOUNCE_SW 00000207
CSEG _INTO_DEFAULT_STATE 00000182
CSEG _SW_CHECK_PROCESS_END 00000185
CSEG DELAY_LOOP_16 00000217
CSEG OW_CHECK_PRESENCE 00000196
CSEG _EXIT 0000019b
CSEG _OW_SEND_BYTE_LOOP 000001a0
CSEG _OW_SEND_0 000001a3
CSEG _OW_SEND_1 000001ae
CSEG _OW_SEND_BYTE_END 000001b8
CSEG _OW_RD_BYTE_LP 000001c2
DEF drem8u r15
DEF dres8u r16
DEF dd8u r16
DEF dv8u r17
DEF dcnt8u r18
CSEG div8u 000000d4
CSEG d8u_1 000000d6
CSEG d8u_2 000000da
CSEG d8u_3 000000e0
DEF mc16uL r16
DEF mc16uH r17
DEF mp16uL r18
DEF mp16uH r19
DEF m16u0 r18
DEF m16u1 r19
DEF m16u2 r20
DEF m16u3 r21
DEF mcnt16u r22
CSEG mpy16u 000000e2
CSEG m16u_1 000000e7
CSEG noad8 000000ea
DEF temp_r_l r16
DEF temp_r_h r17
DEF min_r_trhd_l r11
DEF min_r_trhd_h r10
DEF max_r_trhd_l r13
DEF max_r_trhd_h r12
CSEG _NEGATE_TEMP 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 divisor 0000000a
CSEG DIV_LOOP 000001e0
CSEG DISPLAY_SYMBOLS 00000230
CSEG DELAY 00000220
CSEG _loop_2 0000020b
CSEG _loop_0 0000020c
CSEG _dec_0 0000020d
CSEG _loop_1 0000020f
CSEG _loop_3 00000211
CSEG _DELAY_0 00000224
CSEG _DELAY_1 00000225
CSEG _DELAY_2 00000226
CSEG DIV_LOOP 00000220
CSEG DISPLAY_SYMBOLS 00000270
CSEG DELAY 00000260
CSEG _loop_2 0000024b
CSEG _loop_0 0000024c
CSEG _dec_0 0000024d
CSEG _loop_1 0000024f
CSEG _loop_3 00000251
CSEG _DELAY_0 00000264
CSEG _DELAY_1 00000265
CSEG _DELAY_2 00000266

View File

@ -12,6 +12,8 @@
<FILE>definitions.asm</FILE>
<FILE>macros.asm</FILE>
<FILE>div16u.asm</FILE>
<FILE>div8u.asm</FILE>
<FILE>mpy16u.asm</FILE>
</INCLUDED_FILES>
<OBJECT_FILES>
<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_H><FILE>main.asm</FILE><LINE>30</LINE></TEMP_H>
<TEMP_F><FILE>main.asm</FILE><LINE>31</LINE></TEMP_F>
<SETTING_INT><FILE>main.asm</FILE><LINE>32</LINE></SETTING_INT>
<SETTING_F><FILE>main.asm</FILE><LINE>33</LINE></SETTING_F>
<SETTING_TEMP_H><FILE>main.asm</FILE><LINE>32</LINE></SETTING_TEMP_H>
<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_MODE><FILE>main.asm</FILE><LINE>35</LINE></SETTING_MODE>
<DEVICE_FAMILY_CODE><FILE>main.asm</FILE><LINE>36</LINE></DEVICE_FAMILY_CODE>
<RESET_vect><FILE>main.asm</FILE><LINE>189</LINE></RESET_vect>
<TIMER0_COMPA_vect><FILE>main.asm</FILE><LINE>94</LINE></TIMER0_COMPA_vect>
<PCINT0_vect><FILE>main.asm</FILE><LINE>57</LINE></PCINT0_vect>
<_PCINT0_vect_end><FILE>main.asm</FILE><LINE>84</LINE></_PCINT0_vect_end>
<_INTO_PROGRAM_STATE><FILE>main.asm</FILE><LINE>80</LINE></_INTO_PROGRAM_STATE>
<_CLR_CURRENT_DIGIT><FILE>main.asm</FILE><LINE>106</LINE></_CLR_CURRENT_DIGIT>
<_indicate_1><FILE>main.asm</FILE><LINE>110</LINE></_indicate_1>
<_indicate_2><FILE>main.asm</FILE><LINE>130</LINE></_indicate_2>
<DISPLAY_DECODER><FILE>main.asm</FILE><LINE>674</LINE></DISPLAY_DECODER>
<USI_TRANSMIT><FILE>main.asm</FILE><LINE>487</LINE></USI_TRANSMIT>
<_indicate_3><FILE>main.asm</FILE><LINE>148</LINE></_indicate_3>
<_indicate_4><FILE>main.asm</FILE><LINE>164</LINE></_indicate_4>
<_indicate_exit><FILE>main.asm</FILE><LINE>176</LINE></_indicate_exit>
<MCU_INIT><FILE>main.asm</FILE><LINE>195</LINE></MCU_INIT>
<RD_F_CODE><FILE>main.asm</FILE><LINE>359</LINE></RD_F_CODE>
<ERR_FAMILY_CODE><FILE>main.asm</FILE><LINE>247</LINE></ERR_FAMILY_CODE>
<START_PROGRAM><FILE>main.asm</FILE><LINE>252</LINE></START_PROGRAM>
<BEEP_LONG><FILE>main.asm</FILE><LINE>698</LINE></BEEP_LONG>
<BEEP_SHORT><FILE>main.asm</FILE><LINE>690</LINE></BEEP_SHORT>
<LOOP><FILE>main.asm</FILE><LINE>261</LINE></LOOP>
<_STATE_DEFAULT><FILE>main.asm</FILE><LINE>265</LINE></_STATE_DEFAULT>
<_STATE_PROGRAM><FILE>main.asm</FILE><LINE>273</LINE></_STATE_PROGRAM>
<DISPLAY_UPD_DIGITS><FILE>main.asm</FILE><LINE>633</LINE></DISPLAY_UPD_DIGITS>
<TEMP_UPD><FILE>main.asm</FILE><LINE>342</LINE></TEMP_UPD>
<TEMP_COMPARSION><FILE>main.asm</FILE><LINE>290</LINE></TEMP_COMPARSION>
<_STATE_ERROR><FILE>main.asm</FILE><LINE>279</LINE></_STATE_ERROR>
<SW_CHECK_PROCESS><FILE>main.asm</FILE><LINE>518</LINE></SW_CHECK_PROCESS>
<SRAM_TEMP_2><FILE>main.asm</FILE><LINE>37</LINE></SRAM_TEMP_2>
<SRAM_TEMP_3><FILE>main.asm</FILE><LINE>38</LINE></SRAM_TEMP_3>
<RESET_vect><FILE>main.asm</FILE><LINE>191</LINE></RESET_vect>
<TIMER0_COMPA_vect><FILE>main.asm</FILE><LINE>96</LINE></TIMER0_COMPA_vect>
<PCINT0_vect><FILE>main.asm</FILE><LINE>59</LINE></PCINT0_vect>
<_PCINT0_vect_end><FILE>main.asm</FILE><LINE>86</LINE></_PCINT0_vect_end>
<_INTO_PROGRAM_STATE><FILE>main.asm</FILE><LINE>82</LINE></_INTO_PROGRAM_STATE>
<_CLR_CURRENT_DIGIT><FILE>main.asm</FILE><LINE>108</LINE></_CLR_CURRENT_DIGIT>
<_indicate_1><FILE>main.asm</FILE><LINE>112</LINE></_indicate_1>
<_indicate_2><FILE>main.asm</FILE><LINE>132</LINE></_indicate_2>
<DISPLAY_DECODER><FILE>main.asm</FILE><LINE>740</LINE></DISPLAY_DECODER>
<USI_TRANSMIT><FILE>main.asm</FILE><LINE>553</LINE></USI_TRANSMIT>
<_indicate_3><FILE>main.asm</FILE><LINE>150</LINE></_indicate_3>
<_indicate_4><FILE>main.asm</FILE><LINE>166</LINE></_indicate_4>
<_indicate_exit><FILE>main.asm</FILE><LINE>178</LINE></_indicate_exit>
<MCU_INIT><FILE>main.asm</FILE><LINE>197</LINE></MCU_INIT>
<RD_F_CODE><FILE>main.asm</FILE><LINE>425</LINE></RD_F_CODE>
<ERR_FAMILY_CODE><FILE>main.asm</FILE><LINE>253</LINE></ERR_FAMILY_CODE>
<START_PROGRAM><FILE>main.asm</FILE><LINE>258</LINE></START_PROGRAM>
<BEEP_LONG><FILE>main.asm</FILE><LINE>764</LINE></BEEP_LONG>
<BEEP_SHORT><FILE>main.asm</FILE><LINE>756</LINE></BEEP_SHORT>
<LOOP><FILE>main.asm</FILE><LINE>267</LINE></LOOP>
<_STATE_DEFAULT><FILE>main.asm</FILE><LINE>271</LINE></_STATE_DEFAULT>
<_STATE_PROGRAM><FILE>main.asm</FILE><LINE>279</LINE></_STATE_PROGRAM>
<DISPLAY_UPD_DIGITS><FILE>main.asm</FILE><LINE>699</LINE></DISPLAY_UPD_DIGITS>
<TEMP_UPD><FILE>main.asm</FILE><LINE>408</LINE></TEMP_UPD>
<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>
<d16u_1><FILE>div16u.asm</FILE><LINE>36</LINE></d16u_1>
<d16u_2><FILE>div16u.asm</FILE><LINE>42</LINE></d16u_2>
<d16u_3><FILE>div16u.asm</FILE><LINE>52</LINE></d16u_3>
<_HEATING_MODE><FILE>main.asm</FILE><LINE>319</LINE></_HEATING_MODE>
<_COMPARSION_EXIT><FILE>main.asm</FILE><LINE>331</LINE></_COMPARSION_EXIT>
<_HEATING_ON><FILE>main.asm</FILE><LINE>323</LINE></_HEATING_ON>
<_HEATING_OFF><FILE>main.asm</FILE><LINE>326</LINE></_HEATING_OFF>
<TEMP_CONV><FILE>main.asm</FILE><LINE>467</LINE></TEMP_CONV>
<DELAY_LOOP_24><FILE>main.asm</FILE><LINE>742</LINE></DELAY_LOOP_24>
<TEMP_RD><FILE>main.asm</FILE><LINE>375</LINE></TEMP_RD>
<OW_PRESENCE><FILE>main.asm</FILE><LINE>542</LINE></OW_PRESENCE>
<OW_SEND_BYTE><FILE>main.asm</FILE><LINE>569</LINE></OW_SEND_BYTE>
<OW_RD_BYTE><FILE>main.asm</FILE><LINE>602</LINE></OW_RD_BYTE>
<_TEMP_RD_TO_UNSIGNED><FILE>main.asm</FILE><LINE>410</LINE></_TEMP_RD_TO_UNSIGNED>
<_TEMP_RD_CONTINUE><FILE>main.asm</FILE><LINE>421</LINE></_TEMP_RD_CONTINUE>
<_TEMP_RD_END><FILE>main.asm</FILE><LINE>431</LINE></_TEMP_RD_END>
<_USI_TRANSMIT_LOOP><FILE>main.asm</FILE><LINE>505</LINE></_USI_TRANSMIT_LOOP>
<DEBOUNCE_SW><FILE>main.asm</FILE><LINE>708</LINE></DEBOUNCE_SW>
<_INTO_DEFAULT_STATE><FILE>main.asm</FILE><LINE>531</LINE></_INTO_DEFAULT_STATE>
<_SW_CHECK_PROCESS_END><FILE>main.asm</FILE><LINE>534</LINE></_SW_CHECK_PROCESS_END>
<DELAY_LOOP_16><FILE>main.asm</FILE><LINE>734</LINE></DELAY_LOOP_16>
<OW_CHECK_PRESENCE><FILE>main.asm</FILE><LINE>558</LINE></OW_CHECK_PRESENCE>
<_EXIT><FILE>main.asm</FILE><LINE>564</LINE></_EXIT>
<_OW_SEND_BYTE_LOOP><FILE>main.asm</FILE><LINE>574</LINE></_OW_SEND_BYTE_LOOP>
<_OW_SEND_0><FILE>main.asm</FILE><LINE>578</LINE></_OW_SEND_0>
<_OW_SEND_1><FILE>main.asm</FILE><LINE>586</LINE></_OW_SEND_1>
<_OW_SEND_BYTE_END><FILE>main.asm</FILE><LINE>593</LINE></_OW_SEND_BYTE_END>
<_OW_RD_BYTE_LP><FILE>main.asm</FILE><LINE>608</LINE></_OW_RD_BYTE_LP>
<DIV_LOOP><FILE>main.asm</FILE><LINE>650</LINE></DIV_LOOP>
<DISPLAY_SYMBOLS><FILE>main.asm</FILE><LINE>776</LINE></DISPLAY_SYMBOLS>
<DELAY><FILE>main.asm</FILE><LINE>751</LINE></DELAY>
<_loop_2><FILE>main.asm</FILE><LINE>714</LINE></_loop_2>
<_loop_0><FILE>main.asm</FILE><LINE>716</LINE></_loop_0>
<_dec_0><FILE>main.asm</FILE><LINE>718</LINE></_dec_0>
<_loop_1><FILE>main.asm</FILE><LINE>721</LINE></_loop_1>
<_loop_3><FILE>main.asm</FILE><LINE>724</LINE></_loop_3>
<_DELAY_0><FILE>main.asm</FILE><LINE>757</LINE></_DELAY_0>
<_DELAY_1><FILE>main.asm</FILE><LINE>759</LINE></_DELAY_1>
<_DELAY_2><FILE>main.asm</FILE><LINE>761</LINE></_DELAY_2>
<div8u><FILE>div8u.asm</FILE><LINE>26</LINE></div8u>
<d8u_1><FILE>div8u.asm</FILE><LINE>28</LINE></d8u_1>
<d8u_2><FILE>div8u.asm</FILE><LINE>32</LINE></d8u_2>
<d8u_3><FILE>div8u.asm</FILE><LINE>38</LINE></d8u_3>
<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>
<_NEGATE_TEMP><FILE>main.asm</FILE><LINE>364</LINE></_NEGATE_TEMP>
<_CHECK_MODE><FILE>main.asm</FILE><LINE>370</LINE></_CHECK_MODE>
<_HEATING_MODE><FILE>main.asm</FILE><LINE>381</LINE></_HEATING_MODE>
<_HEATING_ON><FILE>main.asm</FILE><LINE>391</LINE></_HEATING_ON>
<_HEATING_OFF><FILE>main.asm</FILE><LINE>394</LINE></_HEATING_OFF>
<_COMPARSION_EXIT><FILE>main.asm</FILE><LINE>396</LINE></_COMPARSION_EXIT>
<TEMP_CONV><FILE>main.asm</FILE><LINE>533</LINE></TEMP_CONV>
<DELAY_LOOP_24><FILE>main.asm</FILE><LINE>808</LINE></DELAY_LOOP_24>
<TEMP_RD><FILE>main.asm</FILE><LINE>441</LINE></TEMP_RD>
<OW_PRESENCE><FILE>main.asm</FILE><LINE>608</LINE></OW_PRESENCE>
<OW_SEND_BYTE><FILE>main.asm</FILE><LINE>635</LINE></OW_SEND_BYTE>
<OW_RD_BYTE><FILE>main.asm</FILE><LINE>668</LINE></OW_RD_BYTE>
<_TEMP_RD_TO_UNSIGNED><FILE>main.asm</FILE><LINE>476</LINE></_TEMP_RD_TO_UNSIGNED>
<_TEMP_RD_CONTINUE><FILE>main.asm</FILE><LINE>487</LINE></_TEMP_RD_CONTINUE>
<_TEMP_RD_END><FILE>main.asm</FILE><LINE>497</LINE></_TEMP_RD_END>
<_USI_TRANSMIT_LOOP><FILE>main.asm</FILE><LINE>571</LINE></_USI_TRANSMIT_LOOP>
<DEBOUNCE_SW><FILE>main.asm</FILE><LINE>774</LINE></DEBOUNCE_SW>
<_INTO_DEFAULT_STATE><FILE>main.asm</FILE><LINE>597</LINE></_INTO_DEFAULT_STATE>
<_SW_CHECK_PROCESS_END><FILE>main.asm</FILE><LINE>600</LINE></_SW_CHECK_PROCESS_END>
<DELAY_LOOP_16><FILE>main.asm</FILE><LINE>800</LINE></DELAY_LOOP_16>
<OW_CHECK_PRESENCE><FILE>main.asm</FILE><LINE>624</LINE></OW_CHECK_PRESENCE>
<_EXIT><FILE>main.asm</FILE><LINE>630</LINE></_EXIT>
<_OW_SEND_BYTE_LOOP><FILE>main.asm</FILE><LINE>640</LINE></_OW_SEND_BYTE_LOOP>
<_OW_SEND_0><FILE>main.asm</FILE><LINE>644</LINE></_OW_SEND_0>
<_OW_SEND_1><FILE>main.asm</FILE><LINE>652</LINE></_OW_SEND_1>
<_OW_SEND_BYTE_END><FILE>main.asm</FILE><LINE>659</LINE></_OW_SEND_BYTE_END>
<_OW_RD_BYTE_LP><FILE>main.asm</FILE><LINE>674</LINE></_OW_RD_BYTE_LP>
<DIV_LOOP><FILE>main.asm</FILE><LINE>716</LINE></DIV_LOOP>
<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>
</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_H: .BYTE 1 ; Старший байт температуры
TEMP_F: .BYTE 1 ; Дробная часть
SETTING_INT: .BYTE 1 ; Уставка: целая часть
SETTING_F: .BYTE 1 ; Уставка: дробная часть
SETTING_TEMP_H: .BYTE 1 ; Уставка температуры (старший байт)
SETTING_TEMP_L: .BYTE 1 ; Уставка температуры (младший байт)
SETTING_HYST: .BYTE 1 ; Гистерезис: отклонение от уставки
SETTING_MODE: .BYTE 1 ; Режим работы: '1' - нагрев; '0' - 'охлаждение'
DEVICE_FAMILY_CODE: .BYTE 1 ; Должно быть 0x10 для DS18B20
SRAM_TEMP_2: .BYTE 1
SRAM_TEMP_3: .BYTE 1
;//</editor-fold>
@ -220,14 +222,18 @@ MCU_INIT:
ldi r16, 0x00
sts MCU_STATE, r16 ; переводим МК сразу в режим измерения температуры
ldi r16, DEFAULT_SETTING_INT
sts SETTING_INT, r16
ldi r16, DEFAULT_SETTING_F
sts SETTING_F, r16
; настройка параметров
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
sts SETTING_HYST, r16 ; гистерезис
ldi r16, DEFAULT_SETTING_MODE
sts SETTING_MODE, r16
sts SETTING_MODE, r16 ; режим работы
clr r16
sts TEMP_L, r16
@ -286,6 +292,8 @@ _STATE_ERROR:
; **** ПОДПРОГРАММЫ **********************************************
.INCLUDE "div16u.asm"
.INCLUDE "div8u.asm"
.INCLUDE "mpy16u.asm"
TEMP_COMPARSION:
push r16
@ -295,40 +303,94 @@ TEMP_COMPARSION:
push r20
push r21
push r22
lds r16, TEMP_L
lds r17, TEMP_H // всегда 0?
lds r18, TEMP_F
push r23
;
; lds dd8u, SETTING_HYST
; ldi dv8u, 10
; rcall div8u
;
; ; определение нижнего и верхнего порого срабатывания
; 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 r21, SETTING_MODE ; mode
; определяем нижний и верхний пороги
lds r20, SETTING_TEMP_L
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
neg r16
; определяем знак температуры
brts _NEGATE_TEMP
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
rjmp _COMPARSION_EXIT
_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
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:
relay_on
rjmp _COMPARSION_EXIT
_HEATING_OFF:
cp r16, r20
brge PC+2 ; TEMP >= MAX
rjmp _COMPARSION_EXIT
relay_off
_COMPARSION_EXIT:
pop r23
pop r22
pop r21
pop r20

121
main.hex
View File

@ -7,68 +7,69 @@
:10004A000F931F935FB74091670045300CF403C0CC
:10005A00442740936700403081F493989498959888
:10006A000EF002C00BE002C000916500002311F0FF
:10007A00929A01C09298B5D130D1413081F49298C8
:10007A00929A01C09298BDD138D1413081F49298B8
:10008A00949895980091640030916500032B11F0C3
:10009A00939A01C0939800916400A3D11ED1423073
:1000AA0059F4929893989598949A0091630099D1EB
:1000BA00002D0F77002E11D1433041F49298939876
:1000CA009498959A00916B008CD107D143954093EF
:10009A00939A01C0939800916400ABD126D1423063
:1000AA0059F4929893989598949A00916300A1D1E3
:1000BA00002D0F77002E19D1433041F4929893986E
:1000CA009498959A00916B0094D10FD143954093DF
:1000DA0067005FBF1F910F915F914F9118950FEDC8
:1000EA000DBF0FE701BB01EE07BB0CE108BB02E045
:1000FA0000BF05E003BF09E106BF00E20BBF0CE148
:10010A0000BD11241092670000E0009360000FEF19
:10011A0000936C0005E000936D0005E000936E000B
:10012A0001E000936F0000270093690000936A00C2
:10013A0000EF00936B0060D180E090E000916000D6
:10014A00003031F4969833D161D001E009BF25D04F
:10015A00013019F496982BD1CCD0023079F7969ABF
:10016A001BE01093630010936400109365001093D2
:10017A006600E4CFEE24FF1841E1001F111F4A95E3
:10018A0009F40895EE1CFF1CE21AF30A20F4E20EA9
:10019A00F31E8894F2CF0894F0CF0F931F932F93F6
:1001AA003F934F935F936F930091690010916A0098
:1001BA0020916B0030916C0040916D0050916F005E
:1001CA000EF43195552309F419C003172CF416F4CB
:1001DA00909801C0909A12C0031729F016F4909AC9
:1001EA0001C090980BC016F4909801C0909A2417F9
:1001FA000CF404C016F4909A01C090986F915F9124
:10020A004F913F912F911F910F9108951F935BD0AA
:10021A005CE034E34DEF0FD15CE034E34DEF0BD1FA
:10022A0008D010916900812F10916A00912F1F91B7
:10023A0008950F931F932F933F934F9368D00CEC1D
:10024A00802E7AD00EEB802E77D0A9E6B0E095D03A
:10025A00AAE6B0E092D01091690020916A002F932B
:10026A00287F283F11F0E89409C02F9168941095CF
:10027A00209531E0130F30E0231F01C02F912695FE
:10028A0017952695179526951795269517953091C2
:10029A0069000EF43195432F3F70432F330F330F0C
:1002AA00330F440F340F369536953695369510939D
:1002BA00690020936A0030936B004F913F912F9110
:1002CA001F910F9108950F9322D00CEC802E34D0F9
:1002DA0004E4802E31D00F9108950F930FB800E4F3
:1002EA000EB90BE10DB9769BFDCFC09AC0980F915C
:1002FA0008950F938CD0B29B0196B39B0197B49B40
:10030A0001C003C000E0009360000F910895F894C3
:10031A00B99A33E04EEB8BD0B99830E04AE887D0EF
:10032A0005D033E042E383D078940895B19B71609D
:10033A0002C0B1997E7F08950F931F93082D18E08C
:10034A00069508F458F0F894B99A30E046E76FD069
:10035A00B99830E042E16BD078940AC0F894B99A1F
:10036A0030E04AE064D0B99830E04EE760D0789443
:10037A001A9531F71F910F9108950F931F93002734
:10038A0018E0F8940695B99A30E04AE050D0B99846
:10039A0030E040E14CD0B199006830E04CE647D0FB
:1003AA001A9581F70C9378941F910F910895F894F8
:1003BA005F9354E0A3E6B0E08093610090936200FB
:1003CA0000916100109162002AE030E0D3DEED92E4
:1003DA0000936100109362005A9591F75F917894A7
:1003EA0008950F931F93EAE6F4E01127E00FF11F37
:1003FA0004901F910F910895C59A22D0C598089527
:10040A00C59A1ED01DD01CD01BD0C59808950F9335
:10041A001F932F932AE01FEF0FEF0A95F1F71A9512
:10042A00D9F72A95C1F72F911F910F91089541503D
:10043A003040E8F70895415030405040E0F70895C1
:10044A000F931F932F9326E00FEF1FEF1A95F1F7E3
:10045A000A95D9F72A95C1F72F911F910F910895FF
:0C046A00C0F9A4B0999282F880909CBF69
:10010A0000BD11241092670000E0009360000CE229
:10011A0000936D0001E000936C0005E000936E000F
:10012A0001E000936F0008E1102F000F000F000F8D
:10013A00110F010F009371000027009369000093CB
:10014A006A0000EF00936B0072D0009170000832D1
:10015A0009F405C012E0109360005AD101C054D1CD
:10016A0080E090E000916000003031F4969827D149
:10017A004BD001E009BF39D0013019F496981FD14C
:10018A00C0D0023079F7969AEDCFEE24FF1841E1FC
:10019A00001F111F4A9509F40895EE1CFF1CE21A6C
:1001AA00F30A20F4E20EF31E8894F2CF0894F0CFFB
:1001BA00FF1829E0001F2A9509F40895FF1CF11A77
:1001CA0018F4F10E8894F6CF0894F4CF55274427F3
:1001DA0060E13695279510F4400F511F57954795C2
:1001EA00379527956A95B9F708950F931F932F931B
:1001FA003F934F935F936F936F915F914F913F91AD
:10020A002F911F910F9108951F9365D05CE034E3FD
:10021A004DEF19D15CE034E34DEF15D112D01091B6
:10022A006900812F10916A00912F1F9108950F93F1
:10023A0076D003E3802E88D0A0E7B0E0A6D00F9155
:10024A0008950F931F932F933F934F9368D00CEC0D
:10025A00802E7AD00EEB802E77D0A9E6B0E095D02A
:10026A00AAE6B0E092D01091690020916A002F931B
:10027A00287F283F11F0E89409C02F9168941095BF
:10028A00209531E0130F30E0231F01C02F912695EE
:10029A0017952695179526951795269517953091B2
:1002AA0069000EF43195432F3F70432F330F330FFC
:1002BA00330F440F340F369536953695369510938D
:1002CA00690020936A0030936B004F913F912F9100
:1002DA001F910F9108950F9322D00CEC802E34D0E9
:1002EA0004E4802E31D00F9108950F930FB800E4E3
:1002FA000EB90BE10DB9769BFDCFC09AC0980F914C
:10030A0008950F938CD0B29B0196B39B0197B49B2F
:10031A0001C003C000E0009360000F910895F894B3
:10032A00B99A33E04EEB8BD0B99830E04AE887D0DF
:10033A0005D033E042E383D078940895B19B71608D
:10034A0002C0B1997E7F08950F931F93082D18E07C
:10035A00069508F458F0F894B99A30E046E76FD059
:10036A00B99830E042E16BD078940AC0F894B99A0F
:10037A0030E04AE064D0B99830E04EE760D0789433
:10038A001A9531F71F910F9108950F931F93002724
:10039A0018E0F8940695B99A30E04AE050D0B99836
:1003AA0030E040E14CD0B199006830E04CE647D0EB
:1003BA001A9581F70C9378941F910F910895F894E8
:1003CA005F9354E0A3E6B0E08093610090936200EB
:1003DA0000916100109162002AE030E0D6DEED92D1
:1003EA0000936100109362005A9591F75F91789497
:1003FA0008950F931F93EAE7F4E01127E00FF11F26
:10040A0004901F910F910895C59A22D0C598089516
:10041A00C59A1ED01DD01CD01BD0C59808950F9325
:10042A001F932F932AE01FEF0FEF0A95F1F71A9502
:10043A00D9F72A95C1F72F911F910F91089541502D
:10044A003040E8F70895415030405040E0F70895B1
:10045A000F931F932F9326E00FEF1FEF1A95F1F7D3
:10046A000A95D9F72A95C1F72F911F910F910895EF
:0C047A00C0F9A4B0999282F880909CBF59
: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.Pack.dfplocation=/home/sergeyyarkov/.mchp_packs/Microchip/ATtiny_DFP/3.0.151
default.com-microchip-mplab-mdbcore-simulator-Simulator.md5=19e4dc0f223322f74cda227c3c12c71c
conf.ids=default
default.languagetoolchain.dir=/usr/bin
host.id=2l3s-yrgx-1d
configurations-xml=cdd4b69d8607063199baa35f45d5db2e
configurations-xml=6a01ab9659d148a99244ed826cfd39c3
default.com-microchip-mplab-nbide-toolchain-avrasm-AVRASMLanguageToolchain.md5=0e94da8ed93e9650ffef50929833a79f
com-microchip-mplab-nbide-embedded-makeproject-MakeProject.md5=6e02ca5e9f5042ffd365b42ab82d3a9b
user-defined-mime-resolver-xml=none

View File

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