From 59b71a21d6e6bfede7e927f3573c30757bccbf5c Mon Sep 17 00:00:00 2001 From: sergeyyarkov Date: Mon, 19 Jun 2023 19:49:14 +0300 Subject: [PATCH] read temperature --- definitions.asm | 2 +- .../attiny2313a_thermostat.X.production.hex | 80 +-- .../attiny2313a_thermostat.X.production.lss | 617 +++++++++--------- .../attiny2313a_thermostat.X.production.map | 79 +-- .../attiny2313a_thermostat.X.production.obj | Bin 3292 -> 3481 bytes .../attiny2313a_thermostat.X.production.tmp | 87 +-- main.asm | 89 ++- main.hex | 73 ++- 8 files changed, 524 insertions(+), 503 deletions(-) diff --git a/definitions.asm b/definitions.asm index 10439e0..7622e98 100644 --- a/definitions.asm +++ b/definitions.asm @@ -1,4 +1,4 @@ -.EQU F_CPU = 8 ; 8 Mhz +.EQU F_CPU = 8 ; 8 Mhz (для задержки) .DEF TEMP_REG_A = r16 .DEF TEMP_REG_B = r17 diff --git a/dist/default/production/attiny2313a_thermostat.X.production.hex b/dist/default/production/attiny2313a_thermostat.X.production.hex index 17bbcc1..e00c816 100644 --- a/dist/default/production/attiny2313a_thermostat.X.production.hex +++ b/dist/default/production/attiny2313a_thermostat.X.production.hex @@ -2,46 +2,48 @@ :0200000049C0F5 :10001A0000C04F935F930F935FB7409167004530DD :10002A000CF403C0442740936700403041F493988E -:10003A0094989598929A0091660016D19FD0413073 -:10004A0041F4929894989598939A009165000CD1EE -:10005A0095D0423041F4929893989598949A009149 -:10006A00640002D18BD0433041F4929893989498CB -:10007A00959A00916300F8D081D043954093670028 +:10003A0094989598929A009166002BD1B6D0413047 +:10004A0041F4929894989598939A0091650021D1D9 +:10005A00ACD0423041F4929893989598949A009132 +:10006A00640017D1A2D0433041F49298939894989F +:10007A00959A009163000DD198D0439540936700FB :10008A005FBF0F915F914F9118950FED0DBF0EE76E :10009A0001BB01EC07BB0CE108BB02E000BF05E0B5 :1000AA0003BF09E106BF01E009BF112410926700EE -:1000BA0000E000936000002700936A0080E090E06F -:1000CA0051D0DDD0DCD0DBD0DAD03FD000916A004D -:1000DA00802F90E000916000003079F4ABD070FD81 -:1000EA00969A70FF96983ED0CAD0C9D0C8D0C7D0C9 -:1000FA002CD010916A00812F90E0013011F49AD02F -:10010A0049D0023039F71BE0109363001093640062 -:10011A0010936500109366000000DCCFEE24FF18F0 -:10012A0041E1001F111F4A9509F40895EE1CFF1CB6 -:10013A00E21AF30A20F4E20EF31E8894F2CF08942E -:10014A00F0CF41503040E8F708950F93F89428D043 -:10015A000CEC802E38D00EEB802E35D051D078940E -:10016A000F9108950F93F8941BD00CEC802E2BD08E -:10017A0004E4802E28D078940F9108950F930FB835 -:10018A0000E40EB90BE10DB9769BFDCFC09AC09879 -:10019A000F91089574D0B29B0196B39B019708956D -:1001AA00B99A33E04EEBCDDFB99830E04AE8C9DFBF -:1001BA0004D033E042E3C5DF0895B19B716002C009 -:1001CA00B1997E7F08950F931F93082D18E0069525 -:1001DA0008F448F0B99A30E046E7B3DFB99830E05E -:1001EA0042E1AFDF08C0B99A30E04AE0AADFB99825 -:1001FA0030E04EE7A6DF1A9551F71F910F91089547 -:10020A000F931F9308E0B99A30E04AE09ADFB99851 -:10021A0030E040E196DF10916A001695B1991068B6 -:10022A0010936A0030E04CE68CDF0A9561F71F9163 -:10023A000F910895F8945F9354E0A3E6B0E0809399 -:10024A0061009093620000916100109162002AE0BF -:10025A0030E064DFED9200936100109362005A95DA -:10026A0091F75F91789408950F931F93E4ECF2E06D -:10027A001127E00FF11F04901F910F9108950F931A -:10028A001F932F932AE01FEF0FEF0A95F1F71A95A4 -:10029A00D9F72A95C1F72F911F910F9108950F93BE -:1002AA001F930FEF1FEF1A95000000000000D9F707 -:1002BA000A95C1F71F910F910895C0F9A4B09992B8 -:0602CA0082F880909CBF49 +:1000BA0000E000936000002700936A0000936B0041 +:1000CA0080E090E000916A00802F90E0009160004B +:1000DA00003089F4C4D070FD969A70FF969859D072 +:1000EA00E3D0E2D0E1D0E0D02ED010916A00812F87 +:1000FA0010916B00912F013011F4B1D062D002300F +:10010A0029F71BE0109363001093640010936500B5 +:10011A00109366000000DACFEE24FF1841E1001FB9 +:10012A00111F4A9509F40895EE1CFF1CE21AF30AFE +:10013A0020F4E20EF31E8894F2CF0894F0CF4150D7 +:10014A003040E8F708950F931F932F93F8943FD008 +:10015A000CEC802E4FD00EEB802E4CD0AAE6B0E0ED +:10016A0066D0ABE6B0E063D010916A0020916B00D4 +:10017A0026951795269517952695179526951795D9 +:10018A0010936A0020936B0078942F911F910F911E +:10019A0008950F93F8941BD00CEC802E2BD004E416 +:1001AA00802E28D078940F9108950F930FB800E409 +:1001BA000EB90BE10DB9769BFDCFC09AC0980F918D +:1001CA00089572D0B29B0196B39B01970895B99A8C +:1001DA0033E04EEBB4DFB99830E04AE8B0DF04D040 +:1001EA0033E042E3ACDF0895B19B716002C0B1997C +:1001FA007E7F08950F931F93082D18E0069508F443 +:10020A0048F0B99A30E046E79ADFB99830E042E11F +:10021A0096DF08C0B99A30E04AE091DFB99830E039 +:10022A004EE78DDF1A9551F71F910F9108950F939D +:10023A001F93002718E00695B99A30E04AE07FDF5D +:10024A00B99830E040E17BDFB199006830E04CE6D4 +:10025A0076DF1A9581F70C931F910F910895F89400 +:10026A005F9354E0A3E6B0E080936100909362004C +:10027A0000916100109162002AE030E04DDFED92BA +:10028A0000936100109362005A9591F75F917894F8 +:10029A0008950F931F93EEEEF2E01127E00FF11F7E +:1002AA0004901F910F9108950F931F932F932AE0A3 +:1002BA001FEF0FEF0A95F1F71A95D9F72A95C1F7AB +:1002CA002F911F910F9108950F931F930FEF1FEF17 +:1002DA001A95000000000000D9F70A95C1F71F918E +:1002EA000F910895C0F9A4B0999282F880909CBFAA :00000001FF diff --git a/dist/default/production/attiny2313a_thermostat.X.production.lss b/dist/default/production/attiny2313a_thermostat.X.production.lss index e329c15..b9f6519 100644 --- a/dist/default/production/attiny2313a_thermostat.X.production.lss +++ b/dist/default/production/attiny2313a_thermostat.X.production.lss @@ -1,26 +1,26 @@ -AVRASM ver. 2.2.7 main.asm Mon Jun 19 15:34:12 2023 +AVRASM ver. 2.2.7 main.asm Mon Jun 19 19:48:15 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(244): Including file 'div16u.asm' +main.asm(215): Including file 'div16u.asm' div16u.asm(22): warning: Register r16 already defined by the .DEF directive -main.asm(244): 'div16u.asm' included form here +main.asm(215): 'div16u.asm' included form here div16u.asm(23): warning: Register r17 already defined by the .DEF directive -main.asm(244): 'div16u.asm' included form here +main.asm(215): 'div16u.asm' included form here div16u.asm(24): warning: Register r16 already defined by the .DEF directive -main.asm(244): 'div16u.asm' included form here +main.asm(215): 'div16u.asm' included form here div16u.asm(25): warning: Register r17 already defined by the .DEF directive -main.asm(244): 'div16u.asm' included form here +main.asm(215): 'div16u.asm' included form here div16u.asm(27): warning: Register r19 already defined by the .DEF directive -main.asm(244): 'div16u.asm' included form here +main.asm(215): 'div16u.asm' included form here div16u.asm(28): warning: Register r20 already defined by the .DEF directive -main.asm(244): 'div16u.asm' included form here +main.asm(215): 'div16u.asm' included form here [builtin](2): Including file '/home/sergeyyarkov/.mchp_packs/Microchip/ATtiny_DFP/3.0.151/avrasm/inc\tn2313Adef.inc' main.asm(15): Including file 'definitions.asm' main.asm(16): Including file 'macros.asm' -main.asm(244): Including file 'div16u.asm' +main.asm(215): Including file 'div16u.asm' ; @@ -826,7 +826,8 @@ main.asm(244): Including file 'div16u.asm' 000067 CURRENT_DIGIT: .BYTE 1 ; Номер разряда индикатора, который сейчас горит 000068 SW_FLAGS: .BYTE 1 ; Состояние кнопок 000069 HYSTERESIS: .BYTE 1 ; Отклонение температуры от уставки -00006a OW_RECEIVE: .BYTE 1 +00006a TEMP_L: .BYTE 1 +00006b TEMP_H: .BYTE 1 ;// @@ -869,8 +870,8 @@ main.asm(244): Including file 'div16u.asm' 00001e 9895 cbi PORTD, DIGIT_4_PIN 00001f 9a92 sbi PORTD, DIGIT_1_PIN 000020 9100 0066 lds TEMP_REG_A, DIGITS+3 -000022 d116 rcall DISPLAY_DECODER -000023 d09f rcall USI_TRANSMIT +000022 d12b rcall DISPLAY_DECODER +000023 d0b6 rcall USI_TRANSMIT _indicate_2: 000024 3041 cpi r20, 1 @@ -881,8 +882,8 @@ main.asm(244): Including file 'div16u.asm' 000028 9895 cbi PORTD, DIGIT_4_PIN 000029 9a93 sbi PORTD, DIGIT_2_PIN 00002a 9100 0065 lds TEMP_REG_A, DIGITS+2 -00002c d10c rcall DISPLAY_DECODER -00002d d095 rcall USI_TRANSMIT +00002c d121 rcall DISPLAY_DECODER +00002d d0ac rcall USI_TRANSMIT _indicate_3: 00002e 3042 cpi r20, 2 @@ -893,8 +894,8 @@ main.asm(244): Including file 'div16u.asm' 000032 9895 cbi PORTD, DIGIT_4_PIN 000033 9a94 sbi PORTD, DIGIT_3_PIN 000034 9100 0064 lds TEMP_REG_A, DIGITS+1 -000036 d102 rcall DISPLAY_DECODER -000037 d08b rcall USI_TRANSMIT +000036 d117 rcall DISPLAY_DECODER +000037 d0a2 rcall USI_TRANSMIT _indicate_4: 000038 3043 cpi r20, 3 @@ -905,8 +906,8 @@ main.asm(244): Including file 'div16u.asm' 00003c 9894 cbi PORTD, DIGIT_3_PIN 00003d 9a95 sbi PORTD, DIGIT_4_PIN 00003e 9100 0063 lds TEMP_REG_A, DIGITS -000040 d0f8 rcall DISPLAY_DECODER -000041 d081 rcall USI_TRANSMIT +000040 d10d rcall DISPLAY_DECODER +000041 d098 rcall USI_TRANSMIT _indicate_exit: 000042 9543 inc r20 @@ -958,46 +959,15 @@ main.asm(244): Including file 'div16u.asm' 00005e 9300 0060 sts MCU_STATE, r16 ; переводим МК сразу в режим измерения температуры 000060 2700 clr r16 -000061 9300 006a sts OW_RECEIVE, r16 +000061 9300 006a sts TEMP_L, r16 +000063 9300 006b sts TEMP_H, r16 -000063 e080 -000064 e090 display_load 0 ; загружаем число, которое нужно показать на индикатор - - ; ldi r16, 0b10000000 - ; lsr r16 - ; sbr r16, (1<<7) - - ; sbrc OWFR, OWPRF - - ; ldi r16, DS18B20_CMD_SKIPROM - ; mov r8, r16 - ; rcall OW_PRESENCE - ; rcall OW_SEND_BYTE - ; - ; ldi r16, DS18B20_CMD_RSCRATCHPAD - ; mov r8, r16 - ;;; rcall OW_PRESENCE - ; rcall OW_SEND_BYTE - ; - ; rcall OW_RD_BYTE - ;; rcall OW_RD_BYTE - ; rcall TEMP_CONV - ; rcall OW_PRESENCE - -000065 d051 rcall TEMP_CONV - -000066 d0dd rcall DEBOUNCE_SW -000067 d0dc rcall DEBOUNCE_SW -000068 d0db rcall DEBOUNCE_SW -000069 d0da rcall DEBOUNCE_SW - -00006a d03f rcall TEMP_RD - - - -00006b 9100 006a lds r16, OW_RECEIVE -00006d 2f80 mov DISP_NUM_L, r16 -00006e e090 ldi DISP_NUM_H, 0 +000065 e080 +000066 e090 display_load 0 ; загружаем число, которое нужно показать на индикатор + +000067 9100 006a lds r16, TEMP_L +000069 2f80 mov DISP_NUM_L, r16 +00006a e090 ldi DISP_NUM_H, 0 ; sei @@ -1007,43 +977,44 @@ main.asm(244): Including file 'div16u.asm' ; **** ГЛАВНЫЙ ЦИКЛ ********************************************** LOOP: ; rcall DISPLAY_UPD_DIGITS -00006f 9100 0060 lds r16, MCU_STATE ; получаем текущее состояние МК +00006b 9100 0060 lds r16, MCU_STATE ; получаем текущее состояние МК _STATE_DEFAULT: -000071 3000 cpi r16, MCU_STATE_DEFAULT -000072 f479 brne _STATE_PROGRAM -000073 d0ab rcall DISPLAY_UPD_DIGITS - ; rcall TEMP_RD -000074 fd70 sbrc OWFR, OWPRF -000075 9a96 sbi PORTD, PD6 -000076 ff70 sbrs OWFR, OWPRF -000077 9896 cbi PORTD, PD6 -000078 d03e rcall TEMP_CONV -000079 d0ca rcall DEBOUNCE_SW -00007a d0c9 rcall DEBOUNCE_SW -00007b d0c8 rcall DEBOUNCE_SW -00007c d0c7 rcall DEBOUNCE_SW -00007d d02c rcall TEMP_RD -00007e 9110 006a lds r17, OW_RECEIVE -000080 2f81 mov DISP_NUM_L, r17 -000081 e090 ldi DISP_NUM_H, 0 +00006d 3000 cpi r16, MCU_STATE_DEFAULT +00006e f489 brne _STATE_PROGRAM +00006f d0c4 rcall DISPLAY_UPD_DIGITS +000070 fd70 sbrc OWFR, OWPRF +000071 9a96 sbi PORTD, PD6 +000072 ff70 sbrs OWFR, OWPRF +000073 9896 cbi PORTD, PD6 + +000074 d059 rcall TEMP_CONV +000075 d0e3 rcall DEBOUNCE_SW +000076 d0e2 rcall DEBOUNCE_SW +000077 d0e1 rcall DEBOUNCE_SW +000078 d0e0 rcall DEBOUNCE_SW +000079 d02e rcall TEMP_RD +00007a 9110 006a lds r17, TEMP_L +00007c 2f81 mov DISP_NUM_L, r17 +00007d 9110 006b lds r17, TEMP_H +00007f 2f91 mov DISP_NUM_H, r17 _STATE_PROGRAM: -000082 3001 cpi r16, MCU_STATE_PROGRAM -000083 f411 brne _STATE_ERROR -000084 d09a rcall DISPLAY_UPD_DIGITS -000085 d049 rcall SW_CHECK_PROCESS +000080 3001 cpi r16, MCU_STATE_PROGRAM +000081 f411 brne _STATE_ERROR +000082 d0b1 rcall DISPLAY_UPD_DIGITS +000083 d062 rcall SW_CHECK_PROCESS _STATE_ERROR: -000086 3002 cpi r16, MCU_STATE_ERROR -000087 f739 brne LOOP -000088 e01b ldi r17, 11 -000089 9310 0063 sts DIGITS, r17 -00008b 9310 0064 sts DIGITS+1, r17 -00008d 9310 0065 sts DIGITS+2, r17 -00008f 9310 0066 sts DIGITS+3, r17 -000091 0000 nop +000084 3002 cpi r16, MCU_STATE_ERROR +000085 f729 brne LOOP +000086 e01b ldi r17, 11 +000087 9310 0063 sts DIGITS, r17 +000089 9310 0064 sts DIGITS+1, r17 +00008b 9310 0065 sts DIGITS+2, r17 +00008d 9310 0066 sts DIGITS+3, r17 +00008f 0000 nop -000092 cfdc rjmp LOOP +000090 cfda rjmp LOOP // @@ -1081,82 +1052,108 @@ main.asm(244): Including file 'div16u.asm' ;***** Code div16u: -000093 24ee clr drem16uL ; clear remainder Low byte -000094 18ff sub drem16uH,drem16uH ; clear remainder High byte and carry -000095 e141 ldi dcnt16u,17 ; init loop counter +000091 24ee clr drem16uL ; clear remainder Low byte +000092 18ff sub drem16uH,drem16uH ; clear remainder High byte and carry +000093 e141 ldi dcnt16u,17 ; init loop counter d16u_1: -000096 1f00 rol dd16uL ; shift left dividend -000097 1f11 rol dd16uH -000098 954a dec dcnt16u ; decrement counter -000099 f409 brne d16u_2 ; if done -00009a 9508 ret ; return +000094 1f00 rol dd16uL ; shift left dividend +000095 1f11 rol dd16uH +000096 954a dec dcnt16u ; decrement counter +000097 f409 brne d16u_2 ; if done +000098 9508 ret ; return d16u_2: -00009b 1cee rol drem16uL ; shift dividend into remainder -00009c 1cff rol drem16uH -00009d 1ae2 sub drem16uL,dv16uL ; remainder = remainder - divisor -00009e 0af3 sbc drem16uH,dv16uH -00009f f420 brcc d16u_3 ; if result negative -0000a0 0ee2 add drem16uL,dv16uL ; restore remainder -0000a1 1ef3 adc drem16uH,dv16uH -0000a2 9488 clc ; clear carry to be shifted into result -0000a3 cff2 rjmp d16u_1 ; else +000099 1cee rol drem16uL ; shift dividend into remainder +00009a 1cff rol drem16uH +00009b 1ae2 sub drem16uL,dv16uL ; remainder = remainder - divisor +00009c 0af3 sbc drem16uH,dv16uH +00009d f420 brcc d16u_3 ; if result negative +00009e 0ee2 add drem16uL,dv16uL ; restore remainder +00009f 1ef3 adc drem16uH,dv16uH +0000a0 9488 clc ; clear carry to be shifted into result +0000a1 cff2 rjmp d16u_1 ; else d16u_3: -0000a4 9408 sec ; set carry to be shifted into result -0000a5 cff0 +0000a2 9408 sec ; set carry to be shifted into result +0000a3 cff0 DELAY_LOOP_16: -0000a6 5041 subi DELAY_8_r, 1 -0000a7 4030 sbci DELAY_16_r, 0 -0000a8 f7e8 brcc DELAY_LOOP_16 -0000a9 9508 ret +0000a4 5041 subi DELAY_8_r, 1 +0000a5 4030 sbci DELAY_16_r, 0 +0000a6 f7e8 brcc DELAY_LOOP_16 +0000a7 9508 ret // TEMP_RD: -0000aa 930f push r16 +0000a8 930f push r16 +0000a9 931f push r17 +0000aa 932f push r18 0000ab 94f8 cli -0000ac d028 rcall OW_PRESENCE +0000ac d03f rcall OW_PRESENCE 0000ad ec0c ldi r16, DS18B20_CMD_SKIPROM 0000ae 2e80 mov OW_CMD_r, r16 -0000af d038 rcall OW_SEND_BYTE +0000af d04f rcall OW_SEND_BYTE 0000b0 eb0e ldi r16, DS18B20_CMD_RSCRATCHPAD 0000b1 2e80 mov OW_CMD_r, r16 -0000b2 d035 rcall OW_SEND_BYTE +0000b2 d04c rcall OW_SEND_BYTE -0000b3 d051 rcall OW_RD_BYTE +0000b3 e6aa ldi XL, LOW(TEMP_L) +0000b4 e0b0 ldi XH, HIGH(TEMP_L) +0000b5 d066 rcall OW_RD_BYTE -0000b4 9478 sei -0000b5 910f pop r16 -0000b6 9508 ret +0000b6 e6ab ldi XL, LOW(TEMP_H) +0000b7 e0b0 ldi XH, HIGH(TEMP_H) +0000b8 d063 rcall OW_RD_BYTE + +0000b9 9110 006a lds r17, TEMP_L +0000bb 9120 006b lds r18, TEMP_H + +0000bd 9526 lsr r18 +0000be 9517 ror r17 +0000bf 9526 lsr r18 +0000c0 9517 ror r17 +0000c1 9526 lsr r18 +0000c2 9517 ror r17 +0000c3 9526 lsr r18 +0000c4 9517 ror r17 + +0000c5 9310 006a sts TEMP_L, r17 +0000c7 9320 006b sts TEMP_H, r18 + + +0000c9 9478 sei +0000ca 912f pop r18 +0000cb 911f pop r17 +0000cc 910f pop r16 +0000cd 9508 ret ; TEMP_CONV: -0000b7 930f push r16 -0000b8 94f8 cli +0000ce 930f push r16 +0000cf 94f8 cli -0000b9 d01b rcall OW_PRESENCE -0000ba ec0c ldi r16, DS18B20_CMD_SKIPROM -0000bb 2e80 mov OW_CMD_r, r16 -0000bc d02b rcall OW_SEND_BYTE +0000d0 d01b rcall OW_PRESENCE +0000d1 ec0c ldi r16, DS18B20_CMD_SKIPROM +0000d2 2e80 mov OW_CMD_r, r16 +0000d3 d02b rcall OW_SEND_BYTE -0000bd e404 ldi r16, DS18B20_CMD_CONVERTTEMP -0000be 2e80 mov OW_CMD_r, r16 -0000bf d028 rcall OW_SEND_BYTE +0000d4 e404 ldi r16, DS18B20_CMD_CONVERTTEMP +0000d5 2e80 mov OW_CMD_r, r16 +0000d6 d028 rcall OW_SEND_BYTE -0000c0 9478 sei -0000c1 910f pop r16 -0000c2 9508 ret +0000d7 9478 sei +0000d8 910f pop r16 +0000d9 9508 ret // // ; **** ОТПРАВКА БАЙТА В СДВИГОВЫЙ РЕГИСТР ************************* USI_TRANSMIT: -0000c3 930f push r16 -0000c4 b80f out USIDR, r0 ; Байт для отправки всегда находится в регистре r0. Помещаем данные в регистр USIDR. +0000da 930f push r16 +0000db b80f out USIDR, r0 ; Байт для отправки всегда находится в регистре r0. Помещаем данные в регистр USIDR. ; Enable USI Overflow Interrupt Flag (will be 0 if transfer is not compeleted) -0000c5 e400 ldi TEMP_REG_A, (1< USI Clock Source Select ; USICLK <--------------> USI Clock Strobe ; USITC <--------------> USI Toggle Clock (Enable clock generation) -0000c7 e10b ldi TEMP_REG_A, (1< +0000e2 9ac0 sbi PORTB, USI_LATCH_PIN +0000e3 98c0 cbi PORTB, USI_LATCH_PIN +0000e4 910f pop r16 +0000e5 9508 ret// // SW_CHECK_PROCESS: -0000cf d074 rcall DEBOUNCE_SW -0000d0 9bb2 sbis SW_PIN, SW_PLUS_PIN -0000d1 9601 adiw DISP_NUM_L, 1 +0000e6 d072 rcall DEBOUNCE_SW +0000e7 9bb2 sbis SW_PIN, SW_PLUS_PIN +0000e8 9601 adiw DISP_NUM_L, 1 -0000d2 9bb3 sbis SW_PIN, SW_MINUS_PIN -0000d3 9701 sbiw DISP_NUM_L, 1 -0000d4 9508 ret// +0000e9 9bb3 sbis SW_PIN, SW_MINUS_PIN +0000ea 9701 sbiw DISP_NUM_L, 1 +0000eb 9508 ret// // // ; **** ОПРОС ПРИСУТСТВИЯ УСТРОЙСТВА ****************************** OW_PRESENCE: -0000d5 9ab9 ow_pull -0000d6 e033 -0000d7 eb4e -0000d8 dfcd DELAY16 480 -0000d9 98b9 ow_release -0000da e030 -0000db e84a -0000dc dfc9 DELAY16 70 -0000dd d004 rcall OW_CHECK_PRESENCE -0000de e033 -0000df e342 -0000e0 dfc5 DELAY16 410 -0000e1 9508 ret +0000ec 9ab9 ow_pull +0000ed e033 +0000ee eb4e +0000ef dfb4 DELAY16 480 +0000f0 98b9 ow_release +0000f1 e030 +0000f2 e84a +0000f3 dfb0 DELAY16 70 +0000f4 d004 rcall OW_CHECK_PRESENCE +0000f5 e033 +0000f6 e342 +0000f7 dfac DELAY16 410 +0000f8 9508 ret // // @@ -1216,79 +1213,99 @@ main.asm(244): Including file 'div16u.asm' ; Если подчиненное устройство притянет шину, то устанавливаем флаг OWPRF в единицу в регистре флагов ; OW_CHECK_PRESENCE: -0000e2 9bb1 sbis OW_PIN, OW_LINE -0000e3 6071 sbr OWFR, (1< // OW_SEND_BYTE: -0000e8 930f push r16 -0000e9 931f push r17 -0000ea 2d08 mov r16, OW_CMD_r -0000eb e018 ldi r17, 8 +0000ff 930f push r16 +000100 931f push r17 +000101 2d08 mov r16, OW_CMD_r +000102 e018 ldi r17, 8 _OW_SEND_BYTE_LOOP: -0000ec 9506 lsr r16 -0000ed f408 brcc _OW_SEND_0 -0000ee f048 brcs _OW_SEND_1 +000103 9506 lsr r16 +000104 f408 brcc _OW_SEND_0 +000105 f048 brcs _OW_SEND_1 _OW_SEND_0: -0000ef 9ab9 ow_pull -0000f0 e030 -0000f1 e746 -0000f2 dfb3 DELAY16 60 -0000f3 98b9 ow_release -0000f4 e030 -0000f5 e142 -0000f6 dfaf DELAY16 10 -0000f7 c008 rjmp _OW_SEND_BYTE_END +000106 9ab9 ow_pull +000107 e030 +000108 e746 +000109 df9a DELAY16 60 +00010a 98b9 ow_release +00010b e030 +00010c e142 +00010d df96 DELAY16 10 +00010e c008 rjmp _OW_SEND_BYTE_END _OW_SEND_1: -0000f8 9ab9 ow_pull -0000f9 e030 -0000fa e04a -0000fb dfaa DELAY16 6 -0000fc 98b9 ow_release -0000fd e030 -0000fe e74e -0000ff dfa6 DELAY16 64 +00010f 9ab9 ow_pull +000110 e030 +000111 e04a +000112 df91 DELAY16 6 +000113 98b9 ow_release +000114 e030 +000115 e74e +000116 df8d DELAY16 64 _OW_SEND_BYTE_END: -000100 951a dec r17 -000101 f751 brne _OW_SEND_BYTE_LOOP -000102 911f pop r17 -000103 910f pop r16 -000104 9508 ret +000117 951a dec r17 +000118 f751 brne _OW_SEND_BYTE_LOOP +000119 911f pop r17 +00011a 910f pop r16 +00011b 9508 ret // // + ;OW_RD_BYTE: + ; push r16 + ; push r17 + ; ldi r16, 8 + ;_OW_RD_BYTE_LP: + ; ow_pull + ; DELAY16 6 + ; ow_release + ; DELAY16 9 + ; lds r17, TEMP_L + ; lsr r17 + ; sbic OW_PIN, OW_LINE + ; sbr r17, (1<<7) + ; sts TEMP_L, r17 + ; DELAY16 55 + ; dec r16 + ; brne _OW_RD_BYTE_LP + ; pop r17 + ; pop r16 + ; ret OW_RD_BYTE: -000105 930f push r16 -000106 931f push r17 -000107 e008 ldi r16, 8 +00011c 930f push r16 +00011d 931f push r17 +00011e 2700 clr r16 +00011f e018 ldi r17, 8 _OW_RD_BYTE_LP: -000108 9ab9 ow_pull -000109 e030 -00010a e04a -00010b df9a DELAY16 6 -00010c 98b9 ow_release -00010d e030 -00010e e140 -00010f df96 DELAY16 9 -000110 9110 006a lds r17, OW_RECEIVE -000112 9516 lsr r17 -000113 99b1 sbic OW_PIN, OW_LINE -000114 6810 sbr r17, (1<<7) -000115 9310 006a sts OW_RECEIVE, r17 -000117 e030 -000118 e64c -000119 df8c DELAY16 55 -00011a 950a dec r16 -00011b f761 brne _OW_RD_BYTE_LP -00011c 911f pop r17 -00011d 910f pop r16 -00011e 9508 ret +000120 9506 lsr r16 +000121 9ab9 ow_pull +000122 e030 +000123 e04a +000124 df7f DELAY16 6 +000125 98b9 ow_release +000126 e030 +000127 e140 +000128 df7b DELAY16 9 +000129 99b1 sbic OW_PIN, OW_LINE +00012a 6800 sbr r16, (1<<7) +00012b e030 +00012c e64c +00012d df76 DELAY16 55 +00012e 951a dec r17 +00012f f781 brne _OW_RD_BYTE_LP +000130 930c st X, r16 +000131 911f pop r17 +000132 910f pop r16 +000133 9508 ret // @@ -1300,122 +1317,122 @@ main.asm(244): Including file 'div16u.asm' ; Описание: Перемещает цифры числа в соответствующие ячейки памяти в SRAM ; путем деления этого числа несколько раз DISPLAY_UPD_DIGITS: -00011f 94f8 cli -000120 935f push r21 -000121 e054 ldi r21, 4 ; (4 раза делим) т.к индикатор четырех разрядный +000134 94f8 cli +000135 935f push r21 +000136 e054 ldi r21, 4 ; (4 раза делим) т.к индикатор четырех разрядный ; инициализация указателя (за каждый проход цикла будет инкрементироваться) -000122 e6a3 ldi XL, LOW(DIGITS) -000123 e0b0 ldi XH, HIGH(DIGITS) +000137 e6a3 ldi XL, LOW(DIGITS) +000138 e0b0 ldi XH, HIGH(DIGITS) .equ dividend = SRAM_TEMP_1 ; число которе будем делить .equ divisor = 10 ; на что делим ; загружаем число которое хотим поделить в адрес SRAM делимого -000124 9380 0061 sts dividend, DISP_NUM_L -000126 9390 0062 sts dividend+1, DISP_NUM_H +000139 9380 0061 sts dividend, DISP_NUM_L +00013b 9390 0062 sts dividend+1, DISP_NUM_H ; четыре раза производим деление для получения остатков DIV_LOOP: ; заполняем нужные регистры -000128 9100 0061 lds dd16uL, dividend -00012a 9110 0062 lds dd16uH, dividend+1 -00012c e02a ldi dv16uL, LOW(divisor) -00012d e030 ldi dv16uH, HIGH(divisor) +00013d 9100 0061 lds dd16uL, dividend +00013f 9110 0062 lds dd16uH, dividend+1 +000141 e02a ldi dv16uL, LOW(divisor) +000142 e030 ldi dv16uH, HIGH(divisor) -00012e df64 rcall div16u ; делим +000143 df4d rcall div16u ; делим -00012f 92ed st X+, drem16uL ; сохраняем остаток в ячейку по указателю и увеличиваем его +000144 92ed st X+, drem16uL ; сохраняем остаток в ячейку по указателю и увеличиваем его ; обновляем делимое -000130 9300 0061 sts dividend, dres16uL -000132 9310 0062 sts dividend+1, dres16uH +000145 9300 0061 sts dividend, dres16uL +000147 9310 0062 sts dividend+1, dres16uH -000134 955a dec r21 ; декрементируем счетчик цикла -000135 f791 brne DIV_LOOP ; делим еще раз если не 0 -000136 915f pop r21 -000137 9478 sei -000138 9508 ret +000149 955a dec r21 ; декрементируем счетчик цикла +00014a f791 brne DIV_LOOP ; делим еще раз если не 0 +00014b 915f pop r21 +00014c 9478 sei +00014d 9508 ret // // ; **** ЗАГРУЖАЕТ НУЖНЫЙ АДРЕС СИМВОЛА В R0 *********************** DISPLAY_DECODER: -000139 930f push r16 -00013a 931f push r17 -00013b ece4 ldi ZL, LOW(2*DISPLAY_SYMBOLS) -00013c e0f2 ldi ZH, HIGH(2*DISPLAY_SYMBOLS) +00014e 930f push r16 +00014f 931f push r17 +000150 eeee ldi ZL, LOW(2*DISPLAY_SYMBOLS) +000151 e0f2 ldi ZH, HIGH(2*DISPLAY_SYMBOLS) -00013d 2711 clr TEMP_REG_B -00013e 0fe0 add ZL, TEMP_REG_A -00013f 1ff1 adc ZH, TEMP_REG_B +000152 2711 clr TEMP_REG_B +000153 0fe0 add ZL, TEMP_REG_A +000154 1ff1 adc ZH, TEMP_REG_B -000140 9004 lpm r0, Z -000141 911f pop r17 -000142 910f pop r16 -000143 9508 ret// +000155 9004 lpm r0, Z +000156 911f pop r17 +000157 910f pop r16 +000158 9508 ret// // DEBOUNCE_SW: -000144 930f push r16 -000145 931f push r17 -000146 932f push r18 +000159 930f push r16 +00015a 931f push r17 +00015b 932f push r18 -000147 e02a ldi r18, 10 +00015c e02a ldi r18, 10 _loop_2: -000148 ef1f ldi r17, 255 +00015d ef1f ldi r17, 255 _loop_0: -000149 ef0f ldi r16, 255 +00015e ef0f ldi r16, 255 _dec_0: -00014a 950a dec r16 -00014b f7f1 brne _dec_0 +00015f 950a dec r16 +000160 f7f1 brne _dec_0 _loop_1: -00014c 951a dec r17 -00014d f7d9 brne _loop_0 +000161 951a dec r17 +000162 f7d9 brne _loop_0 _loop_3: -00014e 952a dec r18 -00014f f7c1 brne _loop_2 +000163 952a dec r18 +000164 f7c1 brne _loop_2 -000150 912f pop r18 -000151 911f pop r17 -000152 910f pop r16 -000153 9508 ret// +000165 912f pop r18 +000166 911f pop r17 +000167 910f pop r16 +000168 9508 ret// // DELAY: -000154 930f push r16 -000155 931f push r17 +000169 930f push r16 +00016a 931f push r17 -000156 ef0f ldi r16, 255 +00016b ef0f ldi r16, 255 _DELAY_1: -000157 ef1f ldi r17, 255 +00016c ef1f ldi r17, 255 _DELAY_2: -000158 951a dec r17 -000159 0000 nop -00015a 0000 nop -00015b 0000 nop -00015c f7d9 brne _DELAY_2 +00016d 951a dec r17 +00016e 0000 nop +00016f 0000 nop +000170 0000 nop +000171 f7d9 brne _DELAY_2 -00015d 950a dec r16 -00015e f7c1 brne _DELAY_1 +000172 950a dec r16 +000173 f7c1 brne _DELAY_1 -00015f 911f pop r17 -000160 910f pop r16 -000161 9508 ret // +000174 911f pop r17 +000175 910f pop r16 +000176 9508 ret // // DISPLAY_SYMBOLS: ; HGFEDCBA HGFEDCBA -000162 f9c0 .DB 0b11000000, 0b11111001 ; 0, 1 -000163 b0a4 .DB 0b10100100, 0b10110000 ; 2, 3 -000164 9299 .DB 0b10011001, 0b10010010 ; 4, 5 -000165 f882 .DB 0b10000010, 0b11111000 ; 6, 7 -000166 9080 .DB 0b10000000, 0b10010000 ; 8, 9 -000167 bf9c .DB 0b10011100, 0b10111111 ; °, -// +000177 f9c0 .DB 0b11000000, 0b11111001 ; 0, 1 +000178 b0a4 .DB 0b10100100, 0b10110000 ; 2, 3 +000179 9299 .DB 0b10011001, 0b10010010 ; 4, 5 +00017a f882 .DB 0b10000010, 0b11111000 ; 6, 7 +00017b 9080 .DB 0b10000000, 0b10010000 ; 8, 9 +00017c bf9c .DB 0b10011100, 0b10111111 ; °, -// // @@ -1441,10 +1458,10 @@ counted separately from r26..r31 here. .dseg memory usage only counts static data declared with .byte "ATtiny2313A" register use summary: -x : 1 y : 0 z : 1 r0 : 2 r1 : 2 r2 : 0 r3 : 0 r4 : 0 +x : 2 y : 0 z : 1 r0 : 2 r1 : 2 r2 : 0 r3 : 0 r4 : 0 r5 : 0 r6 : 0 r7 : 0 r8 : 5 r9 : 0 r10: 0 r11: 0 r12: 0 -r13: 0 r14: 5 r15: 5 r16: 72 r17: 32 r18: 7 r19: 14 r20: 25 -r21: 8 r22: 0 r23: 4 r24: 6 r25: 4 r26: 1 r27: 1 r28: 0 +r13: 0 r14: 5 r15: 5 r16: 75 r17: 40 r18: 15 r19: 14 r20: 25 +r21: 8 r22: 0 r23: 4 r24: 6 r25: 4 r26: 3 r27: 3 r28: 0 r29: 0 r30: 2 r31: 2 Registers used: 20 out of 35 (57.1%) @@ -1455,25 +1472,25 @@ brcc : 3 brcs : 1 break : 0 breq : 0 brge : 1 brhc : 0 brhs : 0 brid : 0 brie : 0 brlo : 0 brlt : 0 brmi : 0 brne : 16 brpl : 0 brsh : 0 brtc : 0 brts : 0 brvc : 0 brvs : 0 bset : 0 bst : 0 cbi : 18 cbr : 1 clc : 1 -clh : 0 cli : 3 cln : 0 clr : 5 cls : 0 clt : 0 +clh : 0 cli : 3 cln : 0 clr : 6 cls : 0 clt : 0 clv : 0 clz : 0 com : 0 cp : 0 cpc : 0 cpi : 8 cpse : 0 dec : 9 eor : 0 icall : 0 ijmp : 0 in : 1 -inc : 1 ld : 0 ldd : 0 ldi : 55 lds : 11 lpm : 2 -lsl : 0 lsr : 2 mov : 7 movw : 0 neg : 0 nop : 4 -or : 0 ori : 0 out : 12 pop : 18 push : 18 rcall : 43 -ret : 14 reti : 1 rjmp : 9 rol : 4 ror : 0 sbc : 1 +inc : 1 ld : 0 ldd : 0 ldi : 58 lds : 13 lpm : 2 +lsl : 0 lsr : 6 mov : 8 movw : 0 neg : 0 nop : 4 +or : 0 ori : 0 out : 12 pop : 20 push : 20 rcall : 38 +ret : 14 reti : 1 rjmp : 9 rol : 4 ror : 4 sbc : 1 sbci : 1 sbi : 10 sbic : 2 sbis : 4 sbiw : 1 sbr : 2 sbrc : 1 sbrs : 1 sec : 1 seh : 0 sei : 3 sen : 0 ser : 0 ses : 0 set : 0 sev : 0 sez : 0 sleep : 0 -spm : 0 st : 1 std : 0 sts : 14 sub : 2 subi : 1 +spm : 0 st : 2 std : 0 sts : 16 sub : 2 subi : 1 swap : 0 tst : 0 wdr : 0 -Instructions used: 45 out of 105 (42.9%) +Instructions used: 46 out of 105 (43.8%) "ATtiny2313A" memory use summary [bytes]: Segment Begin End Code Data Used Size Use% --------------------------------------------------------------- -[.cseg] 0x000000 0x0002d0 684 12 696 2048 34.0% -[.dseg] 0x000060 0x00006b 0 11 11 128 8.6% +[.cseg] 0x000000 0x0002fa 726 12 738 2048 36.0% +[.dseg] 0x000060 0x00006c 0 12 12 128 9.4% [.eseg] 0x000000 0x000000 0 0 0 128 0.0% Assembly complete, 0 errors, 6 warnings diff --git a/dist/default/production/attiny2313a_thermostat.X.production.map b/dist/default/production/attiny2313a_thermostat.X.production.map index 8ae9bcf..013e25a 100644 --- a/dist/default/production/attiny2313a_thermostat.X.production.map +++ b/dist/default/production/attiny2313a_thermostat.X.production.map @@ -1,5 +1,5 @@ -AVRASM ver. 2.2.7 main.asm Mon Jun 19 15:34:12 2023 +AVRASM ver. 2.2.7 main.asm Mon Jun 19 19:48:15 2023 EQU SIGNATURE_000 0000001e @@ -527,27 +527,28 @@ DSEG DIGITS 00000063 DSEG CURRENT_DIGIT 00000067 DSEG SW_FLAGS 00000068 DSEG HYSTERESIS 00000069 -DSEG OW_RECEIVE 0000006a +DSEG TEMP_L 0000006a +DSEG TEMP_H 0000006b CSEG RESET_vect 0000004a CSEG TIMER0_COMPA_vect 0000000e CSEG _CLR_CURRENT_DIGIT 00000017 CSEG _indicate_1 0000001a CSEG _indicate_2 00000024 -CSEG DISPLAY_DECODER 00000139 -CSEG USI_TRANSMIT 000000c3 +CSEG DISPLAY_DECODER 0000014e +CSEG USI_TRANSMIT 000000da CSEG _indicate_3 0000002e CSEG _indicate_4 00000038 CSEG _indicate_exit 00000042 CSEG MCU_INIT 0000004c -CSEG TEMP_CONV 000000b7 -CSEG DEBOUNCE_SW 00000144 -CSEG TEMP_RD 000000aa -CSEG LOOP 0000006f -CSEG _STATE_DEFAULT 00000071 -CSEG _STATE_PROGRAM 00000082 -CSEG DISPLAY_UPD_DIGITS 0000011f -CSEG _STATE_ERROR 00000086 -CSEG SW_CHECK_PROCESS 000000cf +CSEG LOOP 0000006b +CSEG _STATE_DEFAULT 0000006d +CSEG _STATE_PROGRAM 00000080 +CSEG DISPLAY_UPD_DIGITS 00000134 +CSEG TEMP_CONV 000000ce +CSEG DEBOUNCE_SW 00000159 +CSEG TEMP_RD 000000a8 +CSEG _STATE_ERROR 00000084 +CSEG SW_CHECK_PROCESS 000000e6 DEF drem16uL r14 DEF drem16uH r15 DEF dres16uL r16 @@ -557,31 +558,31 @@ DEF dd16uH r17 DEF dv16uL r18 DEF dv16uH r19 DEF dcnt16u r20 -CSEG div16u 00000093 -CSEG d16u_1 00000096 -CSEG d16u_2 0000009b -CSEG d16u_3 000000a4 -CSEG DELAY_LOOP_16 000000a6 -CSEG OW_PRESENCE 000000d5 -CSEG OW_SEND_BYTE 000000e8 -CSEG OW_RD_BYTE 00000105 -CSEG _USI_TRANSMIT_LOOP 000000c8 -CSEG OW_CHECK_PRESENCE 000000e2 -CSEG _EXIT 000000e7 -CSEG _OW_SEND_BYTE_LOOP 000000ec -CSEG _OW_SEND_0 000000ef -CSEG _OW_SEND_1 000000f8 -CSEG _OW_SEND_BYTE_END 00000100 -CSEG _OW_RD_BYTE_LP 00000108 +CSEG div16u 00000091 +CSEG d16u_1 00000094 +CSEG d16u_2 00000099 +CSEG d16u_3 000000a2 +CSEG DELAY_LOOP_16 000000a4 +CSEG OW_PRESENCE 000000ec +CSEG OW_SEND_BYTE 000000ff +CSEG OW_RD_BYTE 0000011c +CSEG _USI_TRANSMIT_LOOP 000000df +CSEG OW_CHECK_PRESENCE 000000f9 +CSEG _EXIT 000000fe +CSEG _OW_SEND_BYTE_LOOP 00000103 +CSEG _OW_SEND_0 00000106 +CSEG _OW_SEND_1 0000010f +CSEG _OW_SEND_BYTE_END 00000117 +CSEG _OW_RD_BYTE_LP 00000120 EQU dividend 00000061 EQU divisor 0000000a -CSEG DIV_LOOP 00000128 -CSEG DISPLAY_SYMBOLS 00000162 -CSEG _loop_2 00000148 -CSEG _loop_0 00000149 -CSEG _dec_0 0000014a -CSEG _loop_1 0000014c -CSEG _loop_3 0000014e -CSEG DELAY 00000154 -CSEG _DELAY_1 00000157 -CSEG _DELAY_2 00000158 +CSEG DIV_LOOP 0000013d +CSEG DISPLAY_SYMBOLS 00000177 +CSEG _loop_2 0000015d +CSEG _loop_0 0000015e +CSEG _dec_0 0000015f +CSEG _loop_1 00000161 +CSEG _loop_3 00000163 +CSEG DELAY 00000169 +CSEG _DELAY_1 0000016c +CSEG _DELAY_2 0000016d diff --git a/dist/default/production/attiny2313a_thermostat.X.production.obj b/dist/default/production/attiny2313a_thermostat.X.production.obj index 1fbb5f113078d1645bc40f6e13fe8e4bed52bce5..9c2c5dd9abb06e3b9a6347c2fb6bd9253809e6c6 100644 GIT binary patch literal 3481 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 literal 3292 zcmXBWd0>>q8OQP8EXygU3WR_J0R=g-8$uLNAmIq7oB;&6LK0ws1PCEO6%2@0#DfqP zLZY>;*4v6l1;mBa2wN-(0BnnEzLm?vQs7!{3^R)f)}>9ZD$sc0sx17nXjmo_?by^jyWxKn)GMH#=Z zp^pjG_KrG~6nk@PT; zvtwI)Os6SZ4=~R&prq@ML9PKFg1AdTbq3Mu zw4l0x?FkC%8n7dwRZ!Q0(&*@*Z0~p0G!E8XdS%f@L0v~pc?aV31P^r}4w=!z@rQ%z z4gS>RTu_PNk(y3Hg}|Si(-a1O=}1!&`0KWNf^~Q1qX*6g>+a0Qwh=jnroSEdN%{pm zJ|Ru21y7{%-SgndT9R`CJQd|!{05%3oA!6`%r-h)0?&HgAlP-Xxm*MAf;BY+FM26*#MDbXy{-v(dE08arr;kObI0M;D-7y5yxPs6j&0Q* z26dN%yjB=`%PMRO-mSh&&QkZ@-ez+B!2a?=IUXv#f8e6r0PsOs zr5sPY{#^x$>TMs@Ht2Nv94>!BE)yJ?yIgJ_I9eHy(ER$=(H>Ukfvl|)`c!1EUHHkvM2=i9+=G16lAZ`IR2 z{$~N#QghMztOLIvC%uMCRgc%fDH<p--88ou_+|LF#wy_=nO>91f%c{zJG`0CWNKG^AvjsG-PW92EYP*k?+>nmD zheNW+$K}yBa$Bjn!ghzZh`VwjeRvbO*4$by3ffp_LtBe%PhQ-yu|C>W-RC1d+C**# zecIP%%9Vl+w$h#8DqAUctm|kiEe8p9Jf8ra_+jRr1Xss08qfp^)d8{^^n^KdfO^q1Bq4H za<7BX*3)v8AZ!VElagd{41FvKZ-HcsW9S>5A@>eQsV$a!7hKQJ4EG+m!LEz_pr5Vu zebC?b^dJ~ud&*nS-FWJ#+$Z3s*jYK=dTwC1R&u=T+@KaQxkF%Z!q0MFfYdDmain.asm27 main.asm28 main.asm29 - main.asm30 - main.asm124 - main.asm49 - <_CLR_CURRENT_DIGIT>main.asm60 - <_indicate_1>main.asm64 - <_indicate_2>main.asm76 - main.asm464 - main.asm293 - <_indicate_3>main.asm88 - <_indicate_4>main.asm100 - <_indicate_exit>main.asm112 - main.asm130 - main.asm272 - main.asm481 - main.asm253 - main.asm201 - <_STATE_DEFAULT>main.asm205 - <_STATE_PROGRAM>main.asm224 - main.asm422 - <_STATE_ERROR>main.asm229 - main.asm325 + main.asm30 + main.asm31 + main.asm125 + main.asm50 + <_CLR_CURRENT_DIGIT>main.asm61 + <_indicate_1>main.asm65 + <_indicate_2>main.asm77 + main.asm481 + main.asm290 + <_indicate_3>main.asm89 + <_indicate_4>main.asm101 + <_indicate_exit>main.asm113 + main.asm131 + main.asm171 + <_STATE_DEFAULT>main.asm175 + <_STATE_PROGRAM>main.asm195 + main.asm439 + main.asm269 + main.asm498 + main.asm224 + <_STATE_ERROR>main.asm200 + main.asm322 div16u.asm32 div16u.asm36 div16u.asm42 div16u.asm52 - main.asm246 - main.asm338 - main.asm363 - main.asm392 - <_USI_TRANSMIT_LOOP>main.asm311 - main.asm352 - <_EXIT>main.asm358 - <_OW_SEND_BYTE_LOOP>main.asm368 - <_OW_SEND_0>main.asm372 - <_OW_SEND_1>main.asm378 - <_OW_SEND_BYTE_END>main.asm383 - <_OW_RD_BYTE_LP>main.asm396 - main.asm439 - main.asm531 - <_loop_2>main.asm487 - <_loop_0>main.asm489 - <_dec_0>main.asm491 - <_loop_1>main.asm494 - <_loop_3>main.asm497 - main.asm508 - <_DELAY_1>main.asm513 - <_DELAY_2>main.asm515 + main.asm217 + main.asm335 + main.asm360 + main.asm409 + <_USI_TRANSMIT_LOOP>main.asm308 + main.asm349 + <_EXIT>main.asm355 + <_OW_SEND_BYTE_LOOP>main.asm365 + <_OW_SEND_0>main.asm369 + <_OW_SEND_1>main.asm375 + <_OW_SEND_BYTE_END>main.asm380 + <_OW_RD_BYTE_LP>main.asm414 + main.asm456 + main.asm548 + <_loop_2>main.asm504 + <_loop_0>main.asm506 + <_dec_0>main.asm508 + <_loop_1>main.asm511 + <_loop_3>main.asm514 + main.asm525 + <_DELAY_1>main.asm530 + <_DELAY_2>main.asm532 diff --git a/main.asm b/main.asm index b65c5be..aa56dca 100644 --- a/main.asm +++ b/main.asm @@ -27,7 +27,8 @@ DIGITS: .BYTE 4 ; Ячейки, где хранят CURRENT_DIGIT: .BYTE 1 ; Номер разряда индикатора, который сейчас горит SW_FLAGS: .BYTE 1 ; Состояние кнопок HYSTERESIS: .BYTE 1 ; Отклонение температуры от уставки -OW_RECEIVE: .BYTE 1 +TEMP_L: .BYTE 1 +TEMP_H: .BYTE 1 ;// @@ -152,43 +153,12 @@ MCU_INIT: sts MCU_STATE, r16 ; переводим МК сразу в режим измерения температуры clr r16 - sts OW_RECEIVE, r16 + sts TEMP_L, r16 + sts TEMP_H, r16 display_load 0 ; загружаем число, которое нужно показать на индикатор - -; ldi r16, 0b10000000 -; lsr r16 -; sbr r16, (1<<7) - -; sbrc OWFR, OWPRF - -; ldi r16, DS18B20_CMD_SKIPROM -; mov r8, r16 -; rcall OW_PRESENCE -; rcall OW_SEND_BYTE -; -; ldi r16, DS18B20_CMD_RSCRATCHPAD -; mov r8, r16 -;;; rcall OW_PRESENCE -; rcall OW_SEND_BYTE -; -; rcall OW_RD_BYTE -;; rcall OW_RD_BYTE -; rcall TEMP_CONV -; rcall OW_PRESENCE - - rcall TEMP_CONV - - rcall DEBOUNCE_SW - rcall DEBOUNCE_SW - rcall DEBOUNCE_SW - rcall DEBOUNCE_SW - - rcall TEMP_RD - - - - lds r16, OW_RECEIVE + + lds r16, TEMP_L mov DISP_NUM_L, r16 ldi DISP_NUM_H, 0 @@ -206,20 +176,21 @@ _STATE_DEFAULT: cpi r16, MCU_STATE_DEFAULT brne _STATE_PROGRAM rcall DISPLAY_UPD_DIGITS -; rcall TEMP_RD sbrc OWFR, OWPRF sbi PORTD, PD6 sbrs OWFR, OWPRF cbi PORTD, PD6 + rcall TEMP_CONV rcall DEBOUNCE_SW rcall DEBOUNCE_SW rcall DEBOUNCE_SW rcall DEBOUNCE_SW rcall TEMP_RD - lds r17, OW_RECEIVE + lds r17, TEMP_L mov DISP_NUM_L, r17 - ldi DISP_NUM_H, 0 + lds r17, TEMP_H + mov DISP_NUM_H, r17 _STATE_PROGRAM: cpi r16, MCU_STATE_PROGRAM @@ -252,6 +223,8 @@ DELAY_LOOP_16: // TEMP_RD: push r16 + push r17 + push r18 cli rcall OW_PRESENCE @@ -263,9 +236,33 @@ TEMP_RD: mov OW_CMD_r, r16 rcall OW_SEND_BYTE + ldi XL, LOW(TEMP_L) + ldi XH, HIGH(TEMP_L) rcall OW_RD_BYTE + ldi XL, LOW(TEMP_H) + ldi XH, HIGH(TEMP_H) + rcall OW_RD_BYTE + + lds r17, TEMP_L + lds r18, TEMP_H + + lsr r18 + ror r17 + lsr r18 + ror r17 + lsr r18 + ror r17 + lsr r18 + ror r17 + + sts TEMP_L, r17 + sts TEMP_H, r18 + + sei + pop r18 + pop r17 pop r16 ret ; @@ -362,7 +359,7 @@ _EXIT: // OW_SEND_BYTE: push r16 - push r17 + push r17 mov r16, OW_CMD_r ldi r17, 8 _OW_SEND_BYTE_LOOP: @@ -392,20 +389,20 @@ _OW_SEND_BYTE_END: OW_RD_BYTE: push r16 push r17 - ldi r16, 8 + clr r16 + ldi r17, 8 _OW_RD_BYTE_LP: + lsr r16 ow_pull DELAY16 6 ow_release DELAY16 9 - lds r17, OW_RECEIVE - lsr r17 sbic OW_PIN, OW_LINE - sbr r17, (1<<7) - sts OW_RECEIVE, r17 + sbr r16, (1<<7) DELAY16 55 - dec r16 + dec r17 brne _OW_RD_BYTE_LP + st X, r16 pop r17 pop r16 ret diff --git a/main.hex b/main.hex index 5619d00..bb289c9 100644 --- a/main.hex +++ b/main.hex @@ -2,43 +2,46 @@ :0200000049C0F5 :10001A0000C04F935F930F935FB7409167004530DD :10002A000CF403C0442740936700403041F493988E -:10003A0094989598929A00916600FED087D04130A4 -:10004A0041F4929894989598939A00916500F4D007 -:10005A007DD0423041F4929893989598949A009161 -:10006A006400EAD073D0433041F4929893989498FC -:10007A00959A00916300E0D069D043954093670058 +:10003A0094989598929A0091660015D19FD0413074 +:10004A0041F4929894989598939A009165000BD1EF +:10005A0095D0423041F4929893989598949A009149 +:10006A00640001D18BD0433041F4929893989498CC +:10007A00959A00916300F7D081D043954093670029 :10008A005FBF0F915F914F9118950FED0DBF0EE76E :10009A0001BB01EC07BB0CE108BB02E000BF05E0B5 :1000AA0003BF09E106BF01E009BF112410926700EE :1000BA0000E000936000002700936A0080E090E06F -:1000CA00C6D056D00CEC802E66D004E4802E63D0C5 -:1000DA004FD00CEC802E5FD00EEB802E5CD00091BE -:1000EA006A00802F90E000916000003039F48AD0D5 -:1000FA0070FD969A70FF9698AAD0A9D0013011F493 -:10010A0081D030D0023079F71BE01093630010934E -:10011A00640010936500109366000000E4CFEE249B -:10012A00FF1841E1001F111F4A9509F40895EE1CBA -:10013A00FF1CE21AF30A20F4E20EF31E8894F2CFAF -:10014A000894F0CF41503040E8F708950F930FB864 -:10015A0000E40EB90BE10DB9769BFDCFC09AC098A9 -:10016A000F91089574D0B29B0196B39B019708959D -:10017A00B99A33E04EEBE6DFB99830E04AE8E2DFBD -:10018A0004D033E042E3DEDF0895B19B716002C020 -:10019A00B1997E7F08950F931F93082D18E0069555 -:1001AA0008F448F0B99A30E046E7CCDFB99830E075 -:1001BA0042E1C8DF08C0B99A30E04AE0C3DFB99823 -:1001CA0030E04EE7BFDF1A9551F71F910F9108955E -:1001DA000F931F9308E0B99A30E04AE0B3DFB99869 -:1001EA0030E040E1AFDF10916A001695B1991068CE -:1001FA0010936A0030E04CE6A5DF0A9561F71F917B -:10020A000F910895F8945F9354E0A3E6B0E08093C9 -:10021A0061009093620000916100109162002AE0EF -:10022A0030E07DDFED9200936100109362005A95F1 -:10023A0091F75F91789408950F931F93E4E9F2E0A0 -:10024A001127E00FF11F04901F910F9108950F934A -:10025A001F932F932AE01FEF0FEF0A95F1F71A95D4 -:10026A00D9F72A95C1F72F911F910F9108950F93EE -:10027A001F930FEF1FEF1A95000000000000D9F737 -:10028A000A95C1F71F910F910895C0F9A4B09992E8 -:06029A0082F880909CBF79 +:1000CA0051D0DCD0DBD0DAD0D9D03FD000916A0051 +:1000DA00802F90E000916000003079F4AAD070FD82 +:1000EA00969A70FF96983ED0C9D0C8D0C7D0C6D0CD +:1000FA002CD010916A00812F90E0013011F499D030 +:10010A0049D0023039F71BE0109363001093640062 +:10011A0010936500109366000000DCCFEE24FF18F0 +:10012A0041E1001F111F4A9509F40895EE1CFF1CB6 +:10013A00E21AF30A20F4E20EF31E8894F2CF08942E +:10014A00F0CF41503040E8F708950F93F89428D043 +:10015A000CEC802E38D00EEB802E35D050D078940F +:10016A000F9108950F93F8941BD00CEC802E2BD08E +:10017A0004E4802E28D078940F9108950F930FB835 +:10018A0000E40EB90BE10DB9769BFDCFC09AC09879 +:10019A000F91089573D0B29B0196B39B019708956E +:1001AA00B99A33E04EEBCDDFB99830E04AE8C9DFBF +:1001BA0004D033E042E3C5DF0895B19B716002C009 +:1001CA00B1997E7F08950F931F93082D017049F00E +:1001DA00B99A30E04AE0B5DFB99830E04EE7B1DFCE +:1001EA0008C0B99A30E046E7ACDFB99830E042E19E +:1001FA00A8DF8694882049F71F910F9108950F93DD +:10020A001F9308E0B99A30E04AE09BDFB99830E0E2 +:10021A0040E197DF10916A001695B1991068109322 +:10022A006A0030E04CE68DDF0A9561F71F910F9165 +:10023A000895F8945F9354E0A3E6B0E080936100D8 +:10024A009093620000916100109162002AE030E010 +:10025A0065DFED9200936100109362005A9591F761 +:10026A005F91789408950F931F93E2ECF2E01127BF +:10027A00E00FF11F04901F910F9108950F931F93A0 +:10028A002F932AE01FEF0FEF0A95F1F71A95D9F786 +:10029A002A95C1F72F911F910F9108950F931F93DC +:1002AA000FEF1FEF1A95000000000000D9F70A951A +:1002BA00C1F71F910F910895C0F9A4B0999282F8DD +:0402CA0080909CBFC5 :00000001FF