This commit is contained in:
Sergey Yarkov 2023-06-22 06:34:54 +03:00
parent bf91136115
commit d9346953f4
No known key found for this signature in database
GPG Key ID: E91CE1FABC619B6F
10 changed files with 607 additions and 550 deletions

View File

@ -45,7 +45,12 @@
.EQU SW_MINUS_PIN = PB3 ; Кнопка "Плюс" .EQU SW_MINUS_PIN = PB3 ; Кнопка "Плюс"
.EQU SW_SET_PIN = PB4 ; Кнопка "Установить" .EQU SW_SET_PIN = PB4 ; Кнопка "Установить"
.EQU UART_RX_PIN = PD0 .EQU BUZZER_PIN = PB5 ; Пищалка
.EQU BUZZER_PORT = PORTB
.EQU RELAY_PIN = PD0 ; Реле
.EQU RELAY_PORT = PORTD
.EQU UART_TX_PIN = PD1 .EQU UART_TX_PIN = PD1

View File

@ -7,56 +7,57 @@
:10004A000F935FB74091670045300CF403C0442713 :10004A000F935FB74091670045300CF403C0442713
:10005A0040936700403081F49398949895980EF0F5 :10005A0040936700403081F49398949895980EF0F5
:10006A0002C00BE002C000916500002311F0929AD1 :10006A0002C00BE002C000916500002311F0929AD1
:10007A0001C0929869D1E4D0413041F492989498A1 :10007A0001C092985ED1D9D0413041F492989498B7
:10008A009598939A009164005FD1DAD0423059F47E :10008A009598939A0091640054D1CFD0423059F494
:10009A00929893989598949A0091630055D1002D5F :10009A00929893989598949A009163004AD1002D6A
:1000AA000F77002ECDD0433041F4929893989498CC :1000AA000F77002EC2D0433041F4929893989498D7
:1000BA00959A00916C0048D1C3D04395409367004C :1000BA00959A00916C003DD1B8D043954093670062
:1000CA005FBF0F915F914F9118950FED0DBF0EE72E :1000CA005FBF0F915F914F9118950FED0DBF0EE72E
:1000DA0001BB01EC07BB0CE108BB02E000BF05E075 :1000DA0001BB01EE07BB0CE108BB02E000BF05E073
:1000EA0003BF09E106BF01E009BF00E20BBF0CE153 :1000EA0003BF09E106BF01E009BF00E20BBF0CE153
:1000FA0000BD03E309B900E002B908E10AB906E064 :1000FA0000BD11241092670000E000936000002701
:10010A0003B911241092670000E0009360000027F1 :10010A0000936A0000936B0000EF00936C001CD10F
:10011A0000936A0000936B0000EF00936C0080E08C :10011A0080E090E000916000003079F4F0D070FD4A
:10012A0090E000916000003079F4F4D070FD969A66 :10012A00969A70FF969877D01AD119D12AD0109141
:10013A0070FF96987BD013D112D12ED010916A00FD :10013A006A00812F10916B00912F013011F4DFD0EA
:10014A00812F10916B00912F013011F4E3D084D0EC :10014A0080D0023039F71BE01093630010936400EB
:10015A00023039F71BE01093630010936400109388 :10015A0010936500109366000000DCCFEE24FF18B0
:10016A006500109366000000DCCFEE24FF1841E121 :10016A0041E1001F111F4A9509F40895EE1CFF1C76
:10017A00001F111F4A9509F40895EE1CFF1CE21A8C :10017A00E21AF30A20F4E20EF31E8894F2CF0894EE
:10018A00F30A20F4E20EF31E8894F2CF0894F0CF1B :10018A00F0CF0F931F932F933F934F9368D00CECAC
:10019A0041503040E8F708950F931F932F933F93F0 :10019A00802E7AD00EEB802E77D0AAE6B0E095D0EA
:1001AA004F9368D00CEC802E7AD00EEB802E77D04D :1001AA00ABE6B0E092D010916A0020916B002F93D9
:1001BA00AAE6B0E095D0ABE6B0E092D010916A0022 :1001BA00287F283F11F0E89409C02F916894109580
:1001CA0020916B002F93287F283F11F0E89409C0F3 :1001CA00209531E0130F30E0231F01C02F912695AF
:1001DA002F9168941095209531E0130F30E0231F7A :1001DA001795269517952695179526951795309173
:1001EA0001C02F912695179526951795269517954F :1001EA006A000EF43195432F3F70432F330F330FBC
:1001FA002695179530916A000EF43195432F3F707A :1001FA00330F440F340F369536953695369510934E
:10020A00432F330F330F330F440F340F3695369580 :10020A006A0020936B0030936C004F913F912F91BD
:10021A003695369510936A0020936B0030936C00E4 :10021A001F910F9108950F9322D00CEC802E34D0A9
:10022A004F913F912F911F910F9108950F9322D0D3 :10022A0004E4802E31D00F9108950F930FB800E4A3
:10023A000CEC802E34D004E4802E31D00F91089536 :10023A000EB90BE10DB9769BFDCFC09AC0980F910C
:10024A000F930FB800E40EB90BE10DB9769BFDCF01 :10024A0008950F938CD0B29B0196B39B0197B49BF0
:10025A00C09AC0980F9108950F9381D0B29B0196CE :10025A0001C003C000E0009360000F910895F89474
:10026A00B39B0197B49B01C003C000E000936000F8 :10026A00B99A33E04EEB8BD0B99830E04AE887D0A0
:10027A000F910895F894B99A33E04EEB89DFB99853 :10027A0005D033E042E383D078940895B19B71604E
:10028A0030E04AE885DF05D033E042E381DF789445 :10028A0002C0B1997E7F08950F931F93082D18E03D
:10029A000895B19B716002C0B1997E7F08950F9352 :10029A00069508F458F0F894B99A30E046E76FD01A
:1002AA001F93082D18E0069508F458F0F894B99AA7 :1002AA00B99830E042E16BD078940AC0F894B99AD0
:1002BA0030E046E76DDFB99830E042E169DF7894D3 :1002BA0030E04AE064D0B99830E04EE760D07894F4
:1002CA000AC0F894B99A30E04AE062DFB99830E09F :1002CA001A9531F71F910F9108950F931F930027E5
:1002DA004EE75EDF78941A9531F71F910F910895D2 :1002DA0018E0F8940695B99A30E04AE050D0B998F7
:1002EA000F931F93002718E0F8940695B99A30E007 :1002EA0030E040E14CD0B199006830E04CE647D0AC
:1002FA004AE04EDFB99830E040E14ADFB199006840 :1002FA001A9581F70C9378941F910F910895F894A9
:10030A0030E04CE645DF1A9581F70C9378941F91FB :10030A005F9354E0A3E6B0E08093610090936200AB
:10031A000F910895F8945F9354E0A3E6B0E08093B8 :10031A0000916100109162002AE030E01FDFED9247
:10032A0061009093620000916100109162002AE0DE :10032A0000936100109362005A9591F75F91789457
:10033A0030E01BDFED9200936100109362005A9542 :10033A0008950F931F93E0EBF3E01127E00FF11FED
:10034A0091F75F91789408950F931F93E4EAF3E08D :10034A0004901F910F910895C59A1DD0C5980895DC
:10035A001127E00FF11F04901F910F9108950F9339 :10035A00C59A19D018D017D016D0C59808950F93FA
:10036A001F932F932AE01FEF0FEF0A95F1F71A95C3 :10036A001F932F932AE01FEF0FEF0A95F1F71A95C3
:10037A00D9F72A95C1F72F911F910F9108950F93DD :10037A00D9F72A95C1F72F911F910F9108954150EE
:10038A001F930FEF1FEF1A95000000000000D9F726 :10038A003040E8F708950F931F932F9326E00FEF5D
:10039A000A95C1F71F910F910895C0F9A4B09992D7 :10039A001FEF1A95F1F70A95D9F72A95C1F72F9108
:0603AA0082F880909CBF68 :1003AA001F910F910895C0F9A4B0999282F8809094
:0203BA009CBFE6
:00000001FF :00000001FF

View File

@ -1,26 +1,26 @@
AVRASM ver. 2.2.7 main.asm Tue Jun 20 22:15:20 2023 AVRASM ver. 2.2.7 main.asm Thu Jun 22 06:32:38 2023
[builtin](2): Including file '/home/sergeyyarkov/.mchp_packs/Microchip/ATtiny_DFP/3.0.151/avrasm/inc\tn2313Adef.inc' [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(15): Including file 'definitions.asm'
main.asm(16): Including file 'macros.asm' main.asm(16): Including file 'macros.asm'
main.asm(275): Including file 'div16u.asm' main.asm(276): Including file 'div16u.asm'
div16u.asm(22): warning: Register r16 already defined by the .DEF directive div16u.asm(22): warning: Register r16 already defined by the .DEF directive
main.asm(275): 'div16u.asm' included form here main.asm(276): 'div16u.asm' included form here
div16u.asm(23): warning: Register r17 already defined by the .DEF directive div16u.asm(23): warning: Register r17 already defined by the .DEF directive
main.asm(275): 'div16u.asm' included form here main.asm(276): 'div16u.asm' included form here
div16u.asm(24): warning: Register r16 already defined by the .DEF directive div16u.asm(24): warning: Register r16 already defined by the .DEF directive
main.asm(275): 'div16u.asm' included form here main.asm(276): 'div16u.asm' included form here
div16u.asm(25): warning: Register r17 already defined by the .DEF directive div16u.asm(25): warning: Register r17 already defined by the .DEF directive
main.asm(275): 'div16u.asm' included form here main.asm(276): 'div16u.asm' included form here
div16u.asm(27): warning: Register r19 already defined by the .DEF directive div16u.asm(27): warning: Register r19 already defined by the .DEF directive
main.asm(275): 'div16u.asm' included form here main.asm(276): 'div16u.asm' included form here
div16u.asm(28): warning: Register r20 already defined by the .DEF directive div16u.asm(28): warning: Register r20 already defined by the .DEF directive
main.asm(275): 'div16u.asm' included form here main.asm(276): 'div16u.asm' included form here
[builtin](2): Including file '/home/sergeyyarkov/.mchp_packs/Microchip/ATtiny_DFP/3.0.151/avrasm/inc\tn2313Adef.inc' [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(15): Including file 'definitions.asm'
main.asm(16): Including file 'macros.asm' main.asm(16): Including file 'macros.asm'
main.asm(275): Including file 'div16u.asm' main.asm(276): Including file 'div16u.asm'
; ;
@ -783,7 +783,12 @@ main.asm(275): Including file 'div16u.asm'
.EQU SW_MINUS_PIN = PB3 ; Кнопка "Плюс" .EQU SW_MINUS_PIN = PB3 ; Кнопка "Плюс"
.EQU SW_SET_PIN = PB4 ; Кнопка "Установить" .EQU SW_SET_PIN = PB4 ; Кнопка "Установить"
.EQU UART_RX_PIN = PD0 .EQU BUZZER_PIN = PB5 ; Пищалка
.EQU BUZZER_PORT = PORTB
.EQU RELAY_PIN = PD0 ; Реле
.EQU RELAY_PORT = PORTD
.EQU UART_TX_PIN = PD1 .EQU UART_TX_PIN = PD1
@ -918,8 +923,8 @@ main.asm(275): Including file 'div16u.asm'
00003d c001 rjmp PC+2 00003d c001 rjmp PC+2
00003e 9892 cbi PORTD, DIGIT_1_PIN 00003e 9892 cbi PORTD, DIGIT_1_PIN
; lds TEMP_REG_A, DIGITS+2 ; lds TEMP_REG_A, DIGITS+2
00003f d169 rcall DISPLAY_DECODER 00003f d15e rcall DISPLAY_DECODER
000040 d0e4 rcall USI_TRANSMIT 000040 d0d9 rcall USI_TRANSMIT
_indicate_2: _indicate_2:
000041 3041 cpi r20, 1 000041 3041 cpi r20, 1
@ -935,8 +940,8 @@ main.asm(275): Including file 'div16u.asm'
; rjmp PC+2 ; rjmp PC+2
; cbi PORTD, DIGIT_1_PIN ; cbi PORTD, DIGIT_1_PIN
000047 9100 0064 lds TEMP_REG_A, DIGITS+1 000047 9100 0064 lds TEMP_REG_A, DIGITS+1
000049 d15f rcall DISPLAY_DECODER 000049 d154 rcall DISPLAY_DECODER
00004a d0da rcall USI_TRANSMIT 00004a d0cf rcall USI_TRANSMIT
_indicate_3: _indicate_3:
00004b 3042 cpi r20, 2 00004b 3042 cpi r20, 2
@ -947,12 +952,12 @@ main.asm(275): Including file 'div16u.asm'
00004f 9895 cbi PORTD, DIGIT_4_PIN 00004f 9895 cbi PORTD, DIGIT_4_PIN
000050 9a94 sbi PORTD, DIGIT_3_PIN 000050 9a94 sbi PORTD, DIGIT_3_PIN
000051 9100 0063 lds TEMP_REG_A, DIGITS 000051 9100 0063 lds TEMP_REG_A, DIGITS
000053 d155 rcall DISPLAY_DECODER 000053 d14a rcall DISPLAY_DECODER
; зажигаем точку ; зажигаем точку
000054 2d00 mov r16, r0 000054 2d00 mov r16, r0
000055 770f cbr r16, (1<<7) 000055 770f cbr r16, (1<<7)
000056 2e00 mov r0, r16 000056 2e00 mov r0, r16
000057 d0cd rcall USI_TRANSMIT 000057 d0c2 rcall USI_TRANSMIT
_indicate_4: _indicate_4:
000058 3043 cpi r20, 3 000058 3043 cpi r20, 3
@ -963,8 +968,8 @@ main.asm(275): Including file 'div16u.asm'
00005c 9894 cbi PORTD, DIGIT_3_PIN 00005c 9894 cbi PORTD, DIGIT_3_PIN
00005d 9a95 sbi PORTD, DIGIT_4_PIN 00005d 9a95 sbi PORTD, DIGIT_4_PIN
00005e 9100 006c lds TEMP_REG_A, TEMP_F 00005e 9100 006c lds TEMP_REG_A, TEMP_F
000060 d148 rcall DISPLAY_DECODER 000060 d13d rcall DISPLAY_DECODER
000061 d0c3 rcall USI_TRANSMIT 000061 d0b8 rcall USI_TRANSMIT
_indicate_exit: _indicate_exit:
000062 9543 inc r20 000062 9543 inc r20
@ -987,9 +992,9 @@ main.asm(275): Including file 'div16u.asm'
MCU_INIT: MCU_INIT:
; **** ИНИЦИАЛИЗАЦИЯ ПИНОВ ************************************* ; **** ИНИЦИАЛИЗАЦИЯ ПИНОВ *************************************
00006c e70e 00006c e70e
00006d bb01 outi r16, DDRD, (1<<LED_ERR_PIN) | (1<<DIGIT_1_PIN) | (1<<DIGIT_2_PIN) | (1<<DIGIT_3_PIN) | (1<<DIGIT_4_PIN) | (0<<UART_RX_PIN) | (1<<UART_TX_PIN) 00006d bb01 outi r16, DDRD, (1<<LED_ERR_PIN) | (1<<DIGIT_1_PIN) | (1<<DIGIT_2_PIN) | (1<<DIGIT_3_PIN) | (1<<DIGIT_4_PIN) | (1<<UART_TX_PIN)
00006e ec01 00006e ee01
00006f bb07 outi r16, DDRB, (1<<USI_CLK_PIN) | (1<<USI_DO_PIN) | (1<<USI_LATCH_PIN) | (0<<SW_PLUS_PIN) | (0<<SW_MINUS_PIN) | (0<<SW_SET_PIN) 00006f bb07 outi r16, DDRB, (1<<USI_CLK_PIN) | (1<<USI_DO_PIN) | (1<<USI_LATCH_PIN) | (0<<SW_PLUS_PIN) | (0<<SW_MINUS_PIN) | (0<<SW_SET_PIN) | (1<<BUZZER_PIN)
000070 e10c 000070 e10c
000071 bb08 outi r16, PORTB, (1<<SW_PLUS_PIN) | (1<<SW_MINUS_PIN) | (1<<SW_SET_PIN) 000071 bb08 outi r16, PORTB, (1<<SW_PLUS_PIN) | (1<<SW_MINUS_PIN) | (1<<SW_SET_PIN)
@ -1010,32 +1015,29 @@ main.asm(275): Including file 'div16u.asm'
00007d bd00 outi r16, PCMSK0, (1<<PCINT2) | (1<<PCINT3) | (1<<PCINT4) ; для кнопок 00007d bd00 outi r16, PCMSK0, (1<<PCINT2) | (1<<PCINT3) | (1<<PCINT4) ; для кнопок
; **** ИНИЦИАЛИЗАЦИЯ USART ************************************** ; **** ИНИЦИАЛИЗАЦИЯ USART **************************************
00007e e303 ; outi r16, UBRRL, LOW(51) ; 9600 БОД
00007f b909 outi r16, UBRRL, LOW(51) ; 9600 БОД ; outi r16, UBRRH, HIGH(51) ; 9600 БОД
000080 e000 ; outi r16, UCSRB, (1<<RXEN) | (1<<TXEN) ; Включение приема и передачии
000081 b902 outi r16, UBRRH, HIGH(51) ; 9600 БОД ; outi r16, UCSRC, (1<<UCSZ1) | (1<<UCSZ0) ; Асинхронный режим, 8 бит фрейм, 1 стоповый бит
000082 e108
000083 b90a outi r16, UCSRB, (1<<RXEN) | (1<<TXEN) ; Включение приема и передачии
000084 e006
000085 b903 outi r16, UCSRC, (1<<UCSZ1) | (1<<UCSZ0) ; Асинхронный режим, 8 бит фрейм, 1 стоповый бит
continue: continue:
000086 2411 clr r1 00007e 2411 clr r1
000087 9210 0067 sts CURRENT_DIGIT, r1 00007f 9210 0067 sts CURRENT_DIGIT, r1
000089 e000 ldi r16, 0x00 000081 e000 ldi r16, 0x00
00008a 9300 0060 sts MCU_STATE, r16 ; переводим МК сразу в режим измерения температуры 000082 9300 0060 sts MCU_STATE, r16 ; переводим МК сразу в режим измерения температуры
00008c 2700 clr r16 000084 2700 clr r16
00008d 9300 006a sts TEMP_L, r16 000085 9300 006a sts TEMP_L, r16
00008f 9300 006b sts TEMP_H, r16 000087 9300 006b sts TEMP_H, r16
000091 ef00 ldi r16, 0xf0 000089 ef00 ldi r16, 0xf0
000092 9300 006c sts TEMP_F, r16 00008a 9300 006c sts TEMP_F, r16
00008c d11c rcall BEEP_SHORT
000094 e080
000095 e090 display_load 0 ; загружаем число, которое нужно показать на индикатор 00008d e080
00008e e090 display_load 0 ; загружаем число, которое нужно показать на индикатор
; sei ; sei
//</editor-fold> //</editor-fold>
@ -1044,43 +1046,43 @@ main.asm(275): Including file 'div16u.asm'
; **** ГЛАВНЫЙ ЦИКЛ ********************************************** ; **** ГЛАВНЫЙ ЦИКЛ **********************************************
LOOP: LOOP:
; rcall DISPLAY_UPD_DIGITS ; rcall DISPLAY_UPD_DIGITS
000096 9100 0060 lds r16, MCU_STATE ; получаем текущее состояние МК 00008f 9100 0060 lds r16, MCU_STATE ; получаем текущее состояние МК
_STATE_DEFAULT: _STATE_DEFAULT:
000098 3000 cpi r16, MCU_STATE_DEFAULT 000091 3000 cpi r16, MCU_STATE_DEFAULT
000099 f479 brne _STATE_PROGRAM 000092 f479 brne _STATE_PROGRAM
00009a d0f4 rcall DISPLAY_UPD_DIGITS 000093 d0f0 rcall DISPLAY_UPD_DIGITS
00009b fd70 sbrc OWFR, OWPRF 000094 fd70 sbrc OWFR, OWPRF
00009c 9a96 sbi PORTD, PD6 000095 9a96 sbi PORTD, PD6
00009d ff70 sbrs OWFR, OWPRF 000096 ff70 sbrs OWFR, OWPRF
00009e 9896 cbi PORTD, PD6 000097 9896 cbi PORTD, PD6
00009f d07b rcall TEMP_CONV 000098 d077 rcall TEMP_CONV
0000a0 d113 rcall DEBOUNCE_SW 000099 d11a rcall DEBOUNCE_SW
0000a1 d112 rcall DEBOUNCE_SW 00009a d119 rcall DEBOUNCE_SW
0000a2 d02e rcall TEMP_RD 00009b d02a rcall TEMP_RD
0000a3 9110 006a lds r17, TEMP_L 00009c 9110 006a lds r17, TEMP_L
0000a5 2f81 mov DISP_NUM_L, r17 00009e 2f81 mov DISP_NUM_L, r17
0000a6 9110 006b lds r17, TEMP_H 00009f 9110 006b lds r17, TEMP_H
0000a8 2f91 mov DISP_NUM_H, r17 0000a1 2f91 mov DISP_NUM_H, r17
_STATE_PROGRAM: _STATE_PROGRAM:
0000a9 3001 cpi r16, MCU_STATE_PROGRAM 0000a2 3001 cpi r16, MCU_STATE_PROGRAM
0000aa f411 brne _STATE_ERROR 0000a3 f411 brne _STATE_ERROR
0000ab d0e3 rcall DISPLAY_UPD_DIGITS 0000a4 d0df rcall DISPLAY_UPD_DIGITS
0000ac d084 rcall SW_CHECK_PROCESS 0000a5 d080 rcall SW_CHECK_PROCESS
_STATE_ERROR: _STATE_ERROR:
0000ad 3002 cpi r16, MCU_STATE_ERROR 0000a6 3002 cpi r16, MCU_STATE_ERROR
0000ae f739 brne LOOP 0000a7 f739 brne LOOP
0000af e01b ldi r17, 11 0000a8 e01b ldi r17, 11
0000b0 9310 0063 sts DIGITS, r17 0000a9 9310 0063 sts DIGITS, r17
0000b2 9310 0064 sts DIGITS+1, r17 0000ab 9310 0064 sts DIGITS+1, r17
0000b4 9310 0065 sts DIGITS+2, r17 0000ad 9310 0065 sts DIGITS+2, r17
0000b6 9310 0066 sts DIGITS+3, r17 0000af 9310 0066 sts DIGITS+3, r17
0000b8 0000 nop 0000b1 0000 nop
0000b9 cfdc rjmp LOOP 0000b2 cfdc rjmp LOOP
//</editor-fold> //</editor-fold>
@ -1118,155 +1120,148 @@ main.asm(275): Including file 'div16u.asm'
;***** Code ;***** Code
div16u: div16u:
0000ba 24ee clr drem16uL ; clear remainder Low byte 0000b3 24ee clr drem16uL ; clear remainder Low byte
0000bb 18ff sub drem16uH,drem16uH ; clear remainder High byte and carry 0000b4 18ff sub drem16uH,drem16uH ; clear remainder High byte and carry
0000bc e141 ldi dcnt16u,17 ; init loop counter 0000b5 e141 ldi dcnt16u,17 ; init loop counter
d16u_1: d16u_1:
0000bd 1f00 rol dd16uL ; shift left dividend 0000b6 1f00 rol dd16uL ; shift left dividend
0000be 1f11 rol dd16uH 0000b7 1f11 rol dd16uH
0000bf 954a dec dcnt16u ; decrement counter 0000b8 954a dec dcnt16u ; decrement counter
0000c0 f409 brne d16u_2 ; if done 0000b9 f409 brne d16u_2 ; if done
0000c1 9508 ret ; return 0000ba 9508 ret ; return
d16u_2: d16u_2:
0000c2 1cee rol drem16uL ; shift dividend into remainder 0000bb 1cee rol drem16uL ; shift dividend into remainder
0000c3 1cff rol drem16uH 0000bc 1cff rol drem16uH
0000c4 1ae2 sub drem16uL,dv16uL ; remainder = remainder - divisor 0000bd 1ae2 sub drem16uL,dv16uL ; remainder = remainder - divisor
0000c5 0af3 sbc drem16uH,dv16uH 0000be 0af3 sbc drem16uH,dv16uH
0000c6 f420 brcc d16u_3 ; if result negative 0000bf f420 brcc d16u_3 ; if result negative
0000c7 0ee2 add drem16uL,dv16uL ; restore remainder 0000c0 0ee2 add drem16uL,dv16uL ; restore remainder
0000c8 1ef3 adc drem16uH,dv16uH 0000c1 1ef3 adc drem16uH,dv16uH
0000c9 9488 clc ; clear carry to be shifted into result 0000c2 9488 clc ; clear carry to be shifted into result
0000ca cff2 rjmp d16u_1 ; else 0000c3 cff2 rjmp d16u_1 ; else
d16u_3: d16u_3:
0000cb 9408 sec ; set carry to be shifted into result 0000c4 9408 sec ; set carry to be shifted into result
0000cc cff0 0000c5 cff0
DELAY_LOOP_16:
0000cd 5041 subi DELAY_8_r, 1
0000ce 4030 sbci DELAY_16_r, 0
0000cf f7e8 brcc DELAY_LOOP_16
0000d0 9508 ret
//<editor-fold defaultstate="collapsed" desc="Подпрограмма: чтение и опрос температуры"> //<editor-fold defaultstate="collapsed" desc="Подпрограмма: чтение и опрос температуры">
TEMP_RD: TEMP_RD:
0000d1 930f push r16 0000c6 930f push r16
0000d2 931f push r17 0000c7 931f push r17
0000d3 932f push r18 0000c8 932f push r18
0000d4 933f push r19 0000c9 933f push r19
0000d5 934f push r20 0000ca 934f push r20
; cli ; cli
0000d6 d068 rcall OW_PRESENCE 0000cb d068 rcall OW_PRESENCE
0000d7 ec0c ldi r16, DS18B20_CMD_SKIPROM 0000cc ec0c ldi r16, DS18B20_CMD_SKIPROM
0000d8 2e80 mov OW_CMD_r, r16 0000cd 2e80 mov OW_CMD_r, r16
0000d9 d07a rcall OW_SEND_BYTE 0000ce d07a rcall OW_SEND_BYTE
0000da eb0e ldi r16, DS18B20_CMD_RSCRATCHPAD 0000cf eb0e ldi r16, DS18B20_CMD_RSCRATCHPAD
0000db 2e80 mov OW_CMD_r, r16 0000d0 2e80 mov OW_CMD_r, r16
0000dc d077 rcall OW_SEND_BYTE 0000d1 d077 rcall OW_SEND_BYTE
0000dd e6aa ldi XL, LOW(TEMP_L) 0000d2 e6aa ldi XL, LOW(TEMP_L)
0000de e0b0 ldi XH, HIGH(TEMP_L) 0000d3 e0b0 ldi XH, HIGH(TEMP_L)
0000df d095 rcall OW_RD_BYTE 0000d4 d095 rcall OW_RD_BYTE
0000e0 e6ab ldi XL, LOW(TEMP_H) 0000d5 e6ab ldi XL, LOW(TEMP_H)
0000e1 e0b0 ldi XH, HIGH(TEMP_H) 0000d6 e0b0 ldi XH, HIGH(TEMP_H)
0000e2 d092 rcall OW_RD_BYTE 0000d7 d092 rcall OW_RD_BYTE
0000e3 9110 006a lds r17, TEMP_L 0000d8 9110 006a lds r17, TEMP_L
0000e5 9120 006b lds r18, TEMP_H 0000da 9120 006b lds r18, TEMP_H
0000e7 932f push r18 0000dc 932f push r18
0000e8 7f28 cbr r18, (1<<0) | (1<<1) | (1<<2) ; убираем ненужные биты на время (интересуют последних битов в TEMP_H) 0000dd 7f28 cbr r18, (1<<0) | (1<<1) | (1<<2) ; убираем ненужные биты на время (интересуют последних битов в TEMP_H)
0000e9 3f28 cpi r18, 0xf8 ; проверяется является ли число минусовой 0000de 3f28 cpi r18, 0xf8 ; проверяется является ли число минусовой
0000ea f011 breq _TEMP_RD_TO_UNSIGNED ; если да то конвертируем в беззнаковое число 0000df f011 breq _TEMP_RD_TO_UNSIGNED ; если да то конвертируем в беззнаковое число
0000eb 94e8 clt 0000e0 94e8 clt
0000ec c009 rjmp _TEMP_RD_CONTINUE ; если нет то преобразуем значение АЦП в температуру (делим на 16) 0000e1 c009 rjmp _TEMP_RD_CONTINUE ; если нет то преобразуем значение АЦП в температуру (делим на 16)
_TEMP_RD_TO_UNSIGNED: _TEMP_RD_TO_UNSIGNED:
0000ed 912f pop r18 0000e2 912f pop r18
0000ee 9468 set 0000e3 9468 set
0000ef 9510 com r17 0000e4 9510 com r17
0000f0 9520 com r18 0000e5 9520 com r18
0000f1 e031 ldi r19, 1 0000e6 e031 ldi r19, 1
0000f2 0f13 add r17, r19 0000e7 0f13 add r17, r19
0000f3 e030 ldi r19, 0 0000e8 e030 ldi r19, 0
0000f4 1f23 adc r18, r19 0000e9 1f23 adc r18, r19
0000f5 c001 rjmp PC+2 0000ea c001 rjmp PC+2
_TEMP_RD_CONTINUE: ; Температура = Число с АЦП / 16 (сдвиг вправо 4) _TEMP_RD_CONTINUE: ; Температура = Число с АЦП / 16 (сдвиг вправо 4)
0000f6 912f pop r18 0000eb 912f pop r18
0000f7 9526 lsr r18 0000ec 9526 lsr r18
0000f8 9517 ror r17 0000ed 9517 ror r17
0000f9 9526 lsr r18 0000ee 9526 lsr r18
0000fa 9517 ror r17 0000ef 9517 ror r17
0000fb 9526 lsr r18 0000f0 9526 lsr r18
0000fc 9517 ror r17 0000f1 9517 ror r17
0000fd 9526 lsr r18 0000f2 9526 lsr r18
0000fe 9517 ror r17 0000f3 9517 ror r17
_TEMP_RD_END: _TEMP_RD_END:
0000ff 9130 006a lds r19, TEMP_L 0000f4 9130 006a lds r19, TEMP_L
000101 f40e brtc PC+2 0000f6 f40e brtc PC+2
000102 9531 neg r19 ; переводим в беззнаковое число если минус 0000f7 9531 neg r19 ; переводим в беззнаковое число если минус
; далее происходит такое для получения дробной части: ; далее происходит такое для получения дробной части:
; ((n<<3) + (n<<1))>>4 или (n*10)/16 ; ((n<<3) + (n<<1))>>4 или (n*10)/16
000103 2f43 mov r20, r19 0000f8 2f43 mov r20, r19
000104 703f andi r19, 0x0f 0000f9 703f andi r19, 0x0f
000105 2f43 mov r20, r19 0000fa 2f43 mov r20, r19
000106 0f33 lsl r19 0000fb 0f33 lsl r19
000107 0f33 lsl r19 0000fc 0f33 lsl r19
000108 0f33 lsl r19 0000fd 0f33 lsl r19
000109 0f44 lsl r20 0000fe 0f44 lsl r20
00010a 0f34 add r19, r20 0000ff 0f34 add r19, r20
00010b 9536 lsr r19 000100 9536 lsr r19
00010c 9536 lsr r19 000101 9536 lsr r19
00010d 9536 lsr r19 000102 9536 lsr r19
00010e 9536 lsr r19 000103 9536 lsr r19
; записываем данные ; записываем данные
00010f 9310 006a sts TEMP_L, r17 000104 9310 006a sts TEMP_L, r17
000111 9320 006b sts TEMP_H, r18 000106 9320 006b sts TEMP_H, r18
000113 9330 006c sts TEMP_F, r19 000108 9330 006c sts TEMP_F, r19
; sei ; sei
000115 914f pop r20 00010a 914f pop r20
000116 913f pop r19 00010b 913f pop r19
000117 912f pop r18 00010c 912f pop r18
000118 911f pop r17 00010d 911f pop r17
000119 910f pop r16 00010e 910f pop r16
00011a 9508 ret 00010f 9508 ret
; ;
TEMP_CONV: TEMP_CONV:
00011b 930f push r16 000110 930f push r16
; cli ; cli
00011c d022 rcall OW_PRESENCE 000111 d022 rcall OW_PRESENCE
00011d ec0c ldi r16, DS18B20_CMD_SKIPROM 000112 ec0c ldi r16, DS18B20_CMD_SKIPROM
00011e 2e80 mov OW_CMD_r, r16 000113 2e80 mov OW_CMD_r, r16
00011f d034 rcall OW_SEND_BYTE 000114 d034 rcall OW_SEND_BYTE
000120 e404 ldi r16, DS18B20_CMD_CONVERTTEMP 000115 e404 ldi r16, DS18B20_CMD_CONVERTTEMP
000121 2e80 mov OW_CMD_r, r16 000116 2e80 mov OW_CMD_r, r16
000122 d031 rcall OW_SEND_BYTE 000117 d031 rcall OW_SEND_BYTE
; sei ; sei
000123 910f pop r16 000118 910f pop r16
000124 9508 ret 000119 9508 ret
//</editor-fold> //</editor-fold>
//<editor-fold defaultstate="collapsed" desc="Подпрограмма: отправка байта в сдвиговый регистр"> //<editor-fold defaultstate="collapsed" desc="Подпрограмма: отправка байта в сдвиговый регистр">
; **** ОТПРАВКА БАЙТА В СДВИГОВЫЙ РЕГИСТР ************************* ; **** ОТПРАВКА БАЙТА В СДВИГОВЫЙ РЕГИСТР *************************
USI_TRANSMIT: USI_TRANSMIT:
000125 930f push r16 00011a 930f push r16
000126 b80f out USIDR, r0 ; Байт для отправки всегда находится в регистре r0. Помещаем данные в регистр USIDR. 00011b b80f out USIDR, r0 ; Байт для отправки всегда находится в регистре r0. Помещаем данные в регистр USIDR.
; Enable USI Overflow Interrupt Flag (will be 0 if transfer is not compeleted) ; Enable USI Overflow Interrupt Flag (will be 0 if transfer is not compeleted)
000127 e400 ldi TEMP_REG_A, (1<<USIOIF) 00011c e400 ldi TEMP_REG_A, (1<<USIOIF)
000128 b90e out USISR, TEMP_REG_A 00011d b90e out USISR, TEMP_REG_A
; Load settings of USI into temp register ; Load settings of USI into temp register
; This will setup USI to Three-wire mode, Software clock strobe (USITC) ; This will setup USI to Three-wire mode, Software clock strobe (USITC)
@ -1276,63 +1271,61 @@ main.asm(275): Including file 'div16u.asm'
; USICS1 <--------------> USI Clock Source Select ; USICS1 <--------------> USI Clock Source Select
; USICLK <--------------> USI Clock Strobe ; USICLK <--------------> USI Clock Strobe
; USITC <--------------> USI Toggle Clock (Enable clock generation) ; USITC <--------------> USI Toggle Clock (Enable clock generation)
000129 e10b ldi TEMP_REG_A, (1<<USIWM0) | (1<<USICS1) | (1<<USICLK) | (1<<USITC) 00011e e10b ldi TEMP_REG_A, (1<<USIWM0) | (1<<USICS1) | (1<<USICLK) | (1<<USITC)
_USI_TRANSMIT_LOOP: ; Execute loop when USIOIF is 0 _USI_TRANSMIT_LOOP: ; Execute loop when USIOIF is 0
00012a b90d out USICR, TEMP_REG_A ; Load settings from temp register into USI Control Register 00011f b90d out USICR, TEMP_REG_A ; Load settings from temp register into USI Control Register
00012b 9b76 sbis USISR, USIOIF ; If transfer is comleted then move out of loop 000120 9b76 sbis USISR, USIOIF ; If transfer is comleted then move out of loop
00012c cffd rjmp _USI_TRANSMIT_LOOP 000121 cffd rjmp _USI_TRANSMIT_LOOP
; Send pulse into LATCH pin. ; Send pulse into LATCH pin.
; This will copy byte from 74hc595 shift register into 74hc595 storage register ; This will copy byte from 74hc595 shift register into 74hc595 storage register
00012d 9ac0 sbi PORTB, USI_LATCH_PIN 000122 9ac0 sbi PORTB, USI_LATCH_PIN
00012e 98c0 cbi PORTB, USI_LATCH_PIN 000123 98c0 cbi PORTB, USI_LATCH_PIN
00012f 910f pop r16 000124 910f pop r16
000130 9508 ret//</editor-fold> 000125 9508 ret//</editor-fold>
//<editor-fold defaultstate="collapsed" desc="Подпрограмма: опрос кнопок"> //<editor-fold defaultstate="collapsed" desc="Подпрограмма: опрос кнопок">
SW_CHECK_PROCESS: SW_CHECK_PROCESS:
000131 930f push r16 000126 930f push r16
000132 d081 rcall DEBOUNCE_SW 000127 d08c rcall DEBOUNCE_SW
000133 9bb2 sbis SW_PIN, SW_PLUS_PIN 000128 9bb2 sbis SW_PIN, SW_PLUS_PIN
000134 9601 adiw DISP_NUM_L, 1 000129 9601 adiw DISP_NUM_L, 1
000135 9bb3 sbis SW_PIN, SW_MINUS_PIN 00012a 9bb3 sbis SW_PIN, SW_MINUS_PIN
000136 9701 sbiw DISP_NUM_L, 1 00012b 9701 sbiw DISP_NUM_L, 1
000137 9bb4 sbis SW_PIN, SW_SET_PIN 00012c 9bb4 sbis SW_PIN, SW_SET_PIN
000138 c001 rjmp _INTO_DEFAULT_STATE 00012d c001 rjmp _INTO_DEFAULT_STATE
000139 c003 rjmp _SW_CHECK_PROCESS_END 00012e c003 rjmp _SW_CHECK_PROCESS_END
_INTO_DEFAULT_STATE: _INTO_DEFAULT_STATE:
00013a e000 ldi r16, MCU_STATE_DEFAULT 00012f e000 ldi r16, MCU_STATE_DEFAULT
00013b 9300 0060 sts MCU_STATE, r16 000130 9300 0060 sts MCU_STATE, r16
_SW_CHECK_PROCESS_END: _SW_CHECK_PROCESS_END:
00013d 910f pop r16 000132 910f pop r16
00013e 9508 ret 000133 9508 ret
//</editor-fold> //</editor-fold>
//<editor-fold defaultstate="collapsed" desc="Реализация интерфеса 1-Wire"> //<editor-fold defaultstate="collapsed" desc="Реализация интерфеса 1-Wire">
//<editor-fold defaultstate="collapsed" desc="1-Wire: оспрос присутствия"> //<editor-fold defaultstate="collapsed" desc="1-Wire: оспрос присутствия">
; **** ОПРОС ПРИСУТСТВИЯ УСТРОЙСТВА ****************************** ; **** ОПРОС ПРИСУТСТВИЯ УСТРОЙСТВА ******************************
OW_PRESENCE: OW_PRESENCE:
00013f 94f8 cli 000134 94f8 cli
000140 9ab9 ow_pull 000135 9ab9 ow_pull
000141 e033 000136 e033
000142 eb4e 000137 eb4e
000143 df89 DELAY16 480 000138 d08b DELAY16 480
000144 98b9 ow_release 000139 98b9 ow_release
000145 e030 00013a e030
000146 e84a 00013b e84a
000147 df85 DELAY16 70 00013c d087 DELAY16 70
000148 d005 rcall OW_CHECK_PRESENCE 00013d d005 rcall OW_CHECK_PRESENCE
000149 e033 00013e e033
00014a e342 00013f e342
00014b df81 DELAY16 410 000140 d083 DELAY16 410
00014c 9478 sei 000141 9478 sei
00014d 9508 ret 000142 9508 ret
//</editor-fold> //</editor-fold>
//<editor-fold defaultstate="collapsed" desc="1-Wire: проверка наличия устройства"> //<editor-fold defaultstate="collapsed" desc="1-Wire: проверка наличия устройства">
@ -1340,153 +1333,168 @@ main.asm(275): Including file 'div16u.asm'
; Если подчиненное устройство притянет шину, то устанавливаем флаг OWPRF в единицу в регистре флагов ; Если подчиненное устройство притянет шину, то устанавливаем флаг OWPRF в единицу в регистре флагов
; ;
OW_CHECK_PRESENCE: OW_CHECK_PRESENCE:
00014e 9bb1 sbis OW_PIN, OW_LINE 000143 9bb1 sbis OW_PIN, OW_LINE
00014f 6071 sbr OWFR, (1<<OWPRF) 000144 6071 sbr OWFR, (1<<OWPRF)
000150 c002 rjmp _EXIT 000145 c002 rjmp _EXIT
000151 99b1 sbic OW_PIN, OW_LINE 000146 99b1 sbic OW_PIN, OW_LINE
000152 7f7e cbr OWFR, (1<<OWPRF) 000147 7f7e cbr OWFR, (1<<OWPRF)
_EXIT: _EXIT:
000153 9508 ret 000148 9508 ret
//</editor-fold> //</editor-fold>
//<editor-fold defaultstate="collapsed" desc="1-Wire: отправка байта"> //<editor-fold defaultstate="collapsed" desc="1-Wire: отправка байта">
OW_SEND_BYTE: OW_SEND_BYTE:
000154 930f push r16 000149 930f push r16
000155 931f push r17 00014a 931f push r17
000156 2d08 mov r16, OW_CMD_r 00014b 2d08 mov r16, OW_CMD_r
000157 e018 ldi r17, 8 00014c e018 ldi r17, 8
_OW_SEND_BYTE_LOOP: _OW_SEND_BYTE_LOOP:
000158 9506 lsr r16 00014d 9506 lsr r16
000159 f408 brcc _OW_SEND_0 00014e f408 brcc _OW_SEND_0
00015a f058 brcs _OW_SEND_1 00014f f058 brcs _OW_SEND_1
_OW_SEND_0: _OW_SEND_0:
000150 94f8 cli
000151 9ab9 ow_pull
000152 e030
000153 e746
000154 d06f DELAY16 60
000155 98b9 ow_release
000156 e030
000157 e142
000158 d06b DELAY16 10
000159 9478 sei
00015a c00a rjmp _OW_SEND_BYTE_END
_OW_SEND_1:
00015b 94f8 cli 00015b 94f8 cli
00015c 9ab9 ow_pull 00015c 9ab9 ow_pull
00015d e030 00015d e030
00015e e746 00015e e04a
00015f df6d DELAY16 60 00015f d064 DELAY16 6
000160 98b9 ow_release 000160 98b9 ow_release
000161 e030 000161 e030
000162 e142 000162 e74e
000163 df69 DELAY16 10 000163 d060 DELAY16 64
000164 9478 sei 000164 9478 sei
000165 c00a rjmp _OW_SEND_BYTE_END
_OW_SEND_1:
000166 94f8 cli
000167 9ab9 ow_pull
000168 e030
000169 e04a
00016a df62 DELAY16 6
00016b 98b9 ow_release
00016c e030
00016d e74e
00016e df5e DELAY16 64
00016f 9478 sei
_OW_SEND_BYTE_END: _OW_SEND_BYTE_END:
000170 951a dec r17 000165 951a dec r17
000171 f731 brne _OW_SEND_BYTE_LOOP 000166 f731 brne _OW_SEND_BYTE_LOOP
000172 911f pop r17 000167 911f pop r17
000173 910f pop r16 000168 910f pop r16
000174 9508 ret 000169 9508 ret
//</editor-fold> //</editor-fold>
//<editor-fold defaultstate="collapsed" desc="1-Wire: чтение байта"> //<editor-fold defaultstate="collapsed" desc="1-Wire: чтение байта">
OW_RD_BYTE: OW_RD_BYTE:
000175 930f push r16 00016a 930f push r16
000176 931f push r17 00016b 931f push r17
000177 2700 clr r16 00016c 2700 clr r16
000178 e018 ldi r17, 8 00016d e018 ldi r17, 8
000179 94f8 cli 00016e 94f8 cli
_OW_RD_BYTE_LP: _OW_RD_BYTE_LP:
00017a 9506 lsr r16 00016f 9506 lsr r16
00017b 9ab9 ow_pull 000170 9ab9 ow_pull
00017c e030 000171 e030
00017d e04a 000172 e04a
00017e df4e DELAY16 6 000173 d050 DELAY16 6
00017f 98b9 ow_release 000174 98b9 ow_release
000180 e030 000175 e030
000181 e140 000176 e140
000182 df4a DELAY16 9 000177 d04c DELAY16 9
000183 99b1 sbic OW_PIN, OW_LINE 000178 99b1 sbic OW_PIN, OW_LINE
000184 6800 sbr r16, (1<<7) 000179 6800 sbr r16, (1<<7)
000185 e030 00017a e030
000186 e64c 00017b e64c
000187 df45 DELAY16 55 00017c d047 DELAY16 55
000188 951a dec r17 00017d 951a dec r17
000189 f781 brne _OW_RD_BYTE_LP 00017e f781 brne _OW_RD_BYTE_LP
00018a 930c st X, r16 00017f 930c st X, r16
00018b 9478 sei 000180 9478 sei
00018c 911f pop r17 000181 911f pop r17
00018d 910f pop r16 000182 910f pop r16
00018e 9508 ret 000183 9508 ret
//</editor-fold> //</editor-fold>
//</editor-fold> //</editor-fold>
//<editor-fold defaultstate="collapsed" desc="Подпрограмма: обновление ячеек в SRAM для индикатора"> //<editor-fold defaultstate="collapsed" desc="Подпрограмма: обновление ячеек в SRAM для индикатора">
; **** ПОЛУЧЕНИЕ ЦИФР ИЗ 16-ТИ БИТНОГО ЧИСЛА ********************* ; **** ПОЛУЧЕНИЕ ЦИФР ИЗ 16-ТИ БИТНОГО ЧИСЛА *********************
; Описание: Перемещает цифры числа в соответствующие ячейки памяти в SRAM ; Описание: Перемещает цифры числа в соответствующие ячейки памяти в SRAM
; путем деления этого числа несколько раз ; путем деления этого числа несколько раз
DISPLAY_UPD_DIGITS: DISPLAY_UPD_DIGITS:
00018f 94f8 cli 000184 94f8 cli
000190 935f push r21 000185 935f push r21
000191 e054 ldi r21, 4 ; (4 раза делим) т.к индикатор четырех разрядный 000186 e054 ldi r21, 4 ; (4 раза делим) т.к индикатор четырех разрядный
; инициализация указателя (за каждый проход цикла будет инкрементироваться) ; инициализация указателя (за каждый проход цикла будет инкрементироваться)
000192 e6a3 ldi XL, LOW(DIGITS) 000187 e6a3 ldi XL, LOW(DIGITS)
000193 e0b0 ldi XH, HIGH(DIGITS) 000188 e0b0 ldi XH, HIGH(DIGITS)
.equ dividend = SRAM_TEMP_1 ; число которе будем делить .equ dividend = SRAM_TEMP_1 ; число которе будем делить
.equ divisor = 10 ; на что делим .equ divisor = 10 ; на что делим
; загружаем число которое хотим поделить в адрес SRAM делимого ; загружаем число которое хотим поделить в адрес SRAM делимого
000194 9380 0061 sts dividend, DISP_NUM_L 000189 9380 0061 sts dividend, DISP_NUM_L
000196 9390 0062 sts dividend+1, DISP_NUM_H 00018b 9390 0062 sts dividend+1, DISP_NUM_H
; четыре раза производим деление для получения остатков ; четыре раза производим деление для получения остатков
DIV_LOOP: DIV_LOOP:
; заполняем нужные регистры ; заполняем нужные регистры
000198 9100 0061 lds dd16uL, dividend 00018d 9100 0061 lds dd16uL, dividend
00019a 9110 0062 lds dd16uH, dividend+1 00018f 9110 0062 lds dd16uH, dividend+1
00019c e02a ldi dv16uL, LOW(divisor) 000191 e02a ldi dv16uL, LOW(divisor)
00019d e030 ldi dv16uH, HIGH(divisor) 000192 e030 ldi dv16uH, HIGH(divisor)
00019e df1b rcall div16u ; делим 000193 df1f rcall div16u ; делим
00019f 92ed st X+, drem16uL ; сохраняем остаток в ячейку по указателю и увеличиваем его 000194 92ed st X+, drem16uL ; сохраняем остаток в ячейку по указателю и увеличиваем его
; обновляем делимое ; обновляем делимое
0001a0 9300 0061 sts dividend, dres16uL 000195 9300 0061 sts dividend, dres16uL
0001a2 9310 0062 sts dividend+1, dres16uH 000197 9310 0062 sts dividend+1, dres16uH
0001a4 955a dec r21 ; декрементируем счетчик цикла 000199 955a dec r21 ; декрементируем счетчик цикла
0001a5 f791 brne DIV_LOOP ; делим еще раз если не 0 00019a f791 brne DIV_LOOP ; делим еще раз если не 0
0001a6 915f pop r21 00019b 915f pop r21
0001a7 9478 sei 00019c 9478 sei
0001a8 9508 ret 00019d 9508 ret
//</editor-fold> //</editor-fold>
//<editor-fold defaultstate="collapsed" desc="Подпрограмма: получение символа для индикатора"> //<editor-fold defaultstate="collapsed" desc="Подпрограмма: получение символа для индикатора">
; **** ЗАГРУЖАЕТ НУЖНЫЙ АДРЕС СИМВОЛА В R0 *********************** ; **** ЗАГРУЖАЕТ НУЖНЫЙ АДРЕС СИМВОЛА В R0 ***********************
DISPLAY_DECODER: DISPLAY_DECODER:
0001a9 930f push r16 00019e 930f push r16
0001aa 931f push r17 00019f 931f push r17
0001ab eae4 ldi ZL, LOW(2*DISPLAY_SYMBOLS) 0001a0 ebe0 ldi ZL, LOW(2*DISPLAY_SYMBOLS)
0001ac e0f3 ldi ZH, HIGH(2*DISPLAY_SYMBOLS) 0001a1 e0f3 ldi ZH, HIGH(2*DISPLAY_SYMBOLS)
0001ad 2711 clr TEMP_REG_B 0001a2 2711 clr TEMP_REG_B
0001ae 0fe0 add ZL, TEMP_REG_A 0001a3 0fe0 add ZL, TEMP_REG_A
0001af 1ff1 adc ZH, TEMP_REG_B 0001a4 1ff1 adc ZH, TEMP_REG_B
0001b0 9004 lpm r0, Z 0001a5 9004 lpm r0, Z
0001b1 911f pop r17 0001a6 911f pop r17
0001b2 910f pop r16 0001a7 910f pop r16
0001a8 9508 ret//</editor-fold>
//<editor-fold defaultstate="collapsed" desc="Подпрограмма: короткий писк">
BEEP_SHORT:
0001a9 9ac5 sbi BUZZER_PORT, BUZZER_PIN
0001aa d01d rcall DELAY
0001ab 98c5 cbi BUZZER_PORT, BUZZER_PIN
0001ac 9508 ret
//</editor-fold>
//<editor-fold defaultstate="collapsed" desc="Подпрограмма: длинный писк">
BEEP_LONG:
0001ad 9ac5 sbi BUZZER_PORT, BUZZER_PIN
0001ae d019 rcall DELAY
0001af d018 rcall DELAY
0001b0 d017 rcall DELAY
0001b1 d016 rcall DELAY
0001b2 98c5 cbi BUZZER_PORT, BUZZER_PIN
0001b3 9508 ret//</editor-fold> 0001b3 9508 ret//</editor-fold>
//<editor-fold defaultstate="collapsed" desc="Подпрограмма: устранение дребезга кнопки"> //<editor-fold defaultstate="collapsed" desc="Подпрограмма: устранение дребезга кнопки">
DEBOUNCE_SW: DEBOUNCE_SW:
0001b4 930f push r16 0001b4 930f push r16
@ -1513,39 +1521,47 @@ main.asm(275): Including file 'div16u.asm'
0001c2 910f pop r16 0001c2 910f pop r16
0001c3 9508 ret//</editor-fold> 0001c3 9508 ret//</editor-fold>
//<editor-fold defaultstate="collapsed" desc="Подпрограмма: задержка (16бит макс число)">
DELAY_LOOP_16:
0001c4 5041 subi DELAY_8_r, 1
0001c5 4030 sbci DELAY_16_r, 0
0001c6 f7e8 brcc DELAY_LOOP_16
0001c7 9508 ret//</editor-fold>
//<editor-fold defaultstate="collapsed" desc="Подпрограмма: задержка"> //<editor-fold defaultstate="collapsed" desc="Подпрограмма: задержка">
DELAY: DELAY:
0001c4 930f push r16 0001c8 930f push r16
0001c5 931f push r17 0001c9 931f push r17
0001ca 932f push r18
0001c6 ef0f ldi r16, 255 0001cb e026 ldi r18, 6
_DELAY_0:
0001cc ef0f ldi r16, 255
_DELAY_1: _DELAY_1:
0001c7 ef1f ldi r17, 255 0001cd ef1f ldi r17, 255
_DELAY_2: _DELAY_2:
0001c8 951a dec r17 0001ce 951a dec r17
0001c9 0000 nop 0001cf f7f1 brne _DELAY_2
0001ca 0000 nop
0001cb 0000 nop
0001cc f7d9 brne _DELAY_2
0001cd 950a dec r16 0001d0 950a dec r16
0001ce f7c1 brne _DELAY_1 0001d1 f7d9 brne _DELAY_1
0001d2 952a dec r18
0001d3 f7c1 brne _DELAY_0
0001cf 911f pop r17 0001d4 912f pop r18
0001d0 910f pop r16 0001d5 911f pop r17
0001d1 9508 ret //</editor-fold> 0001d6 910f pop r16
0001d7 9508 ret //</editor-fold>
//<editor-fold defaultstate="collapsed" desc="Символы для индикатора"> //<editor-fold defaultstate="collapsed" desc="Символы для индикатора">
DISPLAY_SYMBOLS: DISPLAY_SYMBOLS:
; HGFEDCBA HGFEDCBA ; HGFEDCBA HGFEDCBA
0001d2 f9c0 .DB 0b11000000, 0b11111001 ; 0, 1 0001d8 f9c0 .DB 0b11000000, 0b11111001 ; 0, 1
0001d3 b0a4 .DB 0b10100100, 0b10110000 ; 2, 3 0001d9 b0a4 .DB 0b10100100, 0b10110000 ; 2, 3
0001d4 9299 .DB 0b10011001, 0b10010010 ; 4, 5 0001da 9299 .DB 0b10011001, 0b10010010 ; 4, 5
0001d5 f882 .DB 0b10000010, 0b11111000 ; 6, 7 0001db f882 .DB 0b10000010, 0b11111000 ; 6, 7
0001d6 9080 .DB 0b10000000, 0b10010000 ; 8, 9 0001dc 9080 .DB 0b10000000, 0b10010000 ; 8, 9
0001d7 bf9c .DB 0b10011100, 0b10111111 ; °, -//</editor-fold> 0001dd bf9c .DB 0b10011100, 0b10111111 ; °, -//</editor-fold>
//</editor-fold> //</editor-fold>
@ -1573,7 +1589,7 @@ counted separately from r26..r31 here.
"ATtiny2313A" register use summary: "ATtiny2313A" register use summary:
x : 2 y : 0 z : 1 r0 : 4 r1 : 2 r2 : 0 r3 : 0 r4 : 0 x : 2 y : 0 z : 1 r0 : 4 r1 : 2 r2 : 0 r3 : 0 r4 : 0
r5 : 0 r6 : 0 r7 : 0 r8 : 5 r9 : 0 r10: 0 r11: 0 r12: 0 r5 : 0 r6 : 0 r7 : 0 r8 : 5 r9 : 0 r10: 0 r11: 0 r12: 0
r13: 0 r14: 5 r15: 5 r16: 100 r17: 46 r18: 26 r19: 36 r20: 31 r13: 0 r14: 5 r15: 5 r16: 92 r17: 46 r18: 30 r19: 36 r20: 31
r21: 8 r22: 0 r23: 4 r24: 5 r25: 3 r26: 3 r27: 3 r28: 0 r21: 8 r22: 0 r23: 4 r24: 5 r25: 3 r26: 3 r27: 3 r28: 0
r29: 0 r30: 2 r31: 2 r29: 0 r30: 2 r31: 2
Registers used: 20 out of 35 (57.1%) Registers used: 20 out of 35 (57.1%)
@ -1583,16 +1599,16 @@ Registers used: 20 out of 35 (57.1%)
andi : 1 asr : 0 bclr : 0 bld : 0 brbc : 0 brbs : 0 andi : 1 asr : 0 bclr : 0 bld : 0 brbc : 0 brbs : 0
brcc : 3 brcs : 1 break : 0 breq : 3 brge : 1 brhc : 0 brcc : 3 brcs : 1 break : 0 breq : 3 brge : 1 brhc : 0
brhs : 0 brid : 0 brie : 0 brlo : 0 brlt : 0 brmi : 0 brhs : 0 brid : 0 brie : 0 brlo : 0 brlt : 0 brmi : 0
brne : 16 brpl : 0 brsh : 0 brtc : 1 brts : 1 brvc : 0 brne : 17 brpl : 0 brsh : 0 brtc : 1 brts : 1 brvc : 0
brvs : 0 bset : 0 bst : 0 cbi : 19 cbr : 3 clc : 1 brvs : 0 bset : 0 bst : 0 cbi : 21 cbr : 3 clc : 1
clh : 0 cli : 5 cln : 0 clr : 6 cls : 0 clt : 1 clh : 0 cli : 5 cln : 0 clr : 6 cls : 0 clt : 1
clv : 0 clz : 0 com : 2 cp : 0 cpc : 0 cpi : 10 clv : 0 clz : 0 com : 2 cp : 0 cpc : 0 cpi : 10
cpse : 0 dec : 9 eor : 0 icall : 0 ijmp : 0 in : 2 cpse : 0 dec : 10 eor : 0 icall : 0 ijmp : 0 in : 2
inc : 1 ld : 0 ldd : 0 ldi : 69 lds : 14 lpm : 2 inc : 1 ld : 0 ldd : 0 ldi : 66 lds : 14 lpm : 2
lsl : 4 lsr : 10 mov : 11 movw : 0 neg : 1 nop : 4 lsl : 4 lsr : 10 mov : 11 movw : 0 neg : 1 nop : 1
or : 0 ori : 0 out : 19 pop : 29 push : 28 rcall : 36 or : 0 ori : 0 out : 15 pop : 30 push : 29 rcall : 42
ret : 14 reti : 3 rjmp : 18 rol : 4 ror : 4 sbc : 1 ret : 16 reti : 3 rjmp : 18 rol : 4 ror : 4 sbc : 1
sbci : 1 sbi : 10 sbic : 3 sbis : 5 sbiw : 1 sbr : 2 sbci : 1 sbi : 12 sbic : 3 sbis : 5 sbiw : 1 sbr : 2
sbrc : 1 sbrs : 1 sec : 1 seh : 0 sei : 5 sen : 0 sbrc : 1 sbrs : 1 sec : 1 seh : 0 sei : 5 sen : 0
ser : 0 ses : 0 set : 1 sev : 0 sez : 0 sleep : 0 ser : 0 ses : 0 set : 1 sev : 0 sez : 0 sleep : 0
spm : 0 st : 2 std : 0 sts : 20 sub : 2 subi : 1 spm : 0 st : 2 std : 0 sts : 20 sub : 2 subi : 1
@ -1602,7 +1618,7 @@ Instructions used: 56 out of 105 (53.3%)
"ATtiny2313A" memory use summary [bytes]: "ATtiny2313A" memory use summary [bytes]:
Segment Begin End Code Data Used Size Use% Segment Begin End Code Data Used Size Use%
--------------------------------------------------------------- ---------------------------------------------------------------
[.cseg] 0x000000 0x0003b0 910 12 922 2048 45.0% [.cseg] 0x000000 0x0003bc 922 12 934 2048 45.6%
[.dseg] 0x000060 0x00006d 0 13 13 128 10.2% [.dseg] 0x000060 0x00006d 0 13 13 128 10.2%
[.eseg] 0x000000 0x000000 0 0 0 128 0.0% [.eseg] 0x000000 0x000000 0 0 0 128 0.0%

View File

@ -1,5 +1,5 @@
AVRASM ver. 2.2.7 main.asm Tue Jun 20 22:15:20 2023 AVRASM ver. 2.2.7 main.asm Thu Jun 22 06:32:38 2023
EQU SIGNATURE_000 0000001e EQU SIGNATURE_000 0000001e
@ -516,7 +516,10 @@ EQU SW_PIN 00000016
EQU SW_PLUS_PIN 00000002 EQU SW_PLUS_PIN 00000002
EQU SW_MINUS_PIN 00000003 EQU SW_MINUS_PIN 00000003
EQU SW_SET_PIN 00000004 EQU SW_SET_PIN 00000004
EQU UART_RX_PIN 00000000 EQU BUZZER_PIN 00000005
EQU BUZZER_PORT 00000018
EQU RELAY_PIN 00000000
EQU RELAY_PORT 00000012
EQU UART_TX_PIN 00000001 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
@ -538,22 +541,23 @@ CSEG _INTO_PROGRAM_STATE 0000001a
CSEG _CLR_CURRENT_DIGIT 0000002c CSEG _CLR_CURRENT_DIGIT 0000002c
CSEG _indicate_1 0000002f CSEG _indicate_1 0000002f
CSEG _indicate_2 00000041 CSEG _indicate_2 00000041
CSEG DISPLAY_DECODER 000001a9 CSEG DISPLAY_DECODER 0000019e
CSEG USI_TRANSMIT 00000125 CSEG USI_TRANSMIT 0000011a
CSEG _indicate_3 0000004b CSEG _indicate_3 0000004b
CSEG _indicate_4 00000058 CSEG _indicate_4 00000058
CSEG _indicate_exit 00000062 CSEG _indicate_exit 00000062
CSEG MCU_INIT 0000006c CSEG MCU_INIT 0000006c
CSEG continue 00000086 CSEG continue 0000007e
CSEG LOOP 00000096 CSEG BEEP_SHORT 000001a9
CSEG _STATE_DEFAULT 00000098 CSEG LOOP 0000008f
CSEG _STATE_PROGRAM 000000a9 CSEG _STATE_DEFAULT 00000091
CSEG DISPLAY_UPD_DIGITS 0000018f CSEG _STATE_PROGRAM 000000a2
CSEG TEMP_CONV 0000011b CSEG DISPLAY_UPD_DIGITS 00000184
CSEG TEMP_CONV 00000110
CSEG DEBOUNCE_SW 000001b4 CSEG DEBOUNCE_SW 000001b4
CSEG TEMP_RD 000000d1 CSEG TEMP_RD 000000c6
CSEG _STATE_ERROR 000000ad CSEG _STATE_ERROR 000000a6
CSEG SW_CHECK_PROCESS 00000131 CSEG SW_CHECK_PROCESS 00000126
DEF drem16uL r14 DEF drem16uL r14
DEF drem16uH r15 DEF drem16uH r15
DEF dres16uL r16 DEF dres16uL r16
@ -563,36 +567,38 @@ DEF dd16uH r17
DEF dv16uL r18 DEF dv16uL r18
DEF dv16uH r19 DEF dv16uH r19
DEF dcnt16u r20 DEF dcnt16u r20
CSEG div16u 000000ba CSEG div16u 000000b3
CSEG d16u_1 000000bd CSEG d16u_1 000000b6
CSEG d16u_2 000000c2 CSEG d16u_2 000000bb
CSEG d16u_3 000000cb CSEG d16u_3 000000c4
CSEG DELAY_LOOP_16 000000cd CSEG OW_PRESENCE 00000134
CSEG OW_PRESENCE 0000013f CSEG OW_SEND_BYTE 00000149
CSEG OW_SEND_BYTE 00000154 CSEG OW_RD_BYTE 0000016a
CSEG OW_RD_BYTE 00000175 CSEG _TEMP_RD_TO_UNSIGNED 000000e2
CSEG _TEMP_RD_TO_UNSIGNED 000000ed CSEG _TEMP_RD_CONTINUE 000000eb
CSEG _TEMP_RD_CONTINUE 000000f6 CSEG _TEMP_RD_END 000000f4
CSEG _TEMP_RD_END 000000ff CSEG _USI_TRANSMIT_LOOP 0000011f
CSEG _USI_TRANSMIT_LOOP 0000012a CSEG _INTO_DEFAULT_STATE 0000012f
CSEG _INTO_DEFAULT_STATE 0000013a CSEG _SW_CHECK_PROCESS_END 00000132
CSEG _SW_CHECK_PROCESS_END 0000013d CSEG DELAY_LOOP_16 000001c4
CSEG OW_CHECK_PRESENCE 0000014e CSEG OW_CHECK_PRESENCE 00000143
CSEG _EXIT 00000153 CSEG _EXIT 00000148
CSEG _OW_SEND_BYTE_LOOP 00000158 CSEG _OW_SEND_BYTE_LOOP 0000014d
CSEG _OW_SEND_0 0000015b CSEG _OW_SEND_0 00000150
CSEG _OW_SEND_1 00000166 CSEG _OW_SEND_1 0000015b
CSEG _OW_SEND_BYTE_END 00000170 CSEG _OW_SEND_BYTE_END 00000165
CSEG _OW_RD_BYTE_LP 0000017a CSEG _OW_RD_BYTE_LP 0000016f
EQU dividend 00000061 EQU dividend 00000061
EQU divisor 0000000a EQU divisor 0000000a
CSEG DIV_LOOP 00000198 CSEG DIV_LOOP 0000018d
CSEG DISPLAY_SYMBOLS 000001d2 CSEG DISPLAY_SYMBOLS 000001d8
CSEG DELAY 000001c8
CSEG BEEP_LONG 000001ad
CSEG _loop_2 000001b8 CSEG _loop_2 000001b8
CSEG _loop_0 000001b9 CSEG _loop_0 000001b9
CSEG _dec_0 000001ba CSEG _dec_0 000001ba
CSEG _loop_1 000001bc CSEG _loop_1 000001bc
CSEG _loop_3 000001be CSEG _loop_3 000001be
CSEG DELAY 000001c4 CSEG _DELAY_0 000001cc
CSEG _DELAY_1 000001c7 CSEG _DELAY_1 000001cd
CSEG _DELAY_2 000001c8 CSEG _DELAY_2 000001ce

View File

@ -41,52 +41,55 @@
<_CLR_CURRENT_DIGIT><FILE>main.asm</FILE><LINE>99</LINE></_CLR_CURRENT_DIGIT> <_CLR_CURRENT_DIGIT><FILE>main.asm</FILE><LINE>99</LINE></_CLR_CURRENT_DIGIT>
<_indicate_1><FILE>main.asm</FILE><LINE>103</LINE></_indicate_1> <_indicate_1><FILE>main.asm</FILE><LINE>103</LINE></_indicate_1>
<_indicate_2><FILE>main.asm</FILE><LINE>125</LINE></_indicate_2> <_indicate_2><FILE>main.asm</FILE><LINE>125</LINE></_indicate_2>
<DISPLAY_DECODER><FILE>main.asm</FILE><LINE>588</LINE></DISPLAY_DECODER> <DISPLAY_DECODER><FILE>main.asm</FILE><LINE>578</LINE></DISPLAY_DECODER>
<USI_TRANSMIT><FILE>main.asm</FILE><LINE>397</LINE></USI_TRANSMIT> <USI_TRANSMIT><FILE>main.asm</FILE><LINE>391</LINE></USI_TRANSMIT>
<_indicate_3><FILE>main.asm</FILE><LINE>142</LINE></_indicate_3> <_indicate_3><FILE>main.asm</FILE><LINE>142</LINE></_indicate_3>
<_indicate_4><FILE>main.asm</FILE><LINE>158</LINE></_indicate_4> <_indicate_4><FILE>main.asm</FILE><LINE>158</LINE></_indicate_4>
<_indicate_exit><FILE>main.asm</FILE><LINE>170</LINE></_indicate_exit> <_indicate_exit><FILE>main.asm</FILE><LINE>170</LINE></_indicate_exit>
<MCU_INIT><FILE>main.asm</FILE><LINE>188</LINE></MCU_INIT> <MCU_INIT><FILE>main.asm</FILE><LINE>188</LINE></MCU_INIT>
<continue><FILE>main.asm</FILE><LINE>211</LINE></continue> <continue><FILE>main.asm</FILE><LINE>211</LINE></continue>
<LOOP><FILE>main.asm</FILE><LINE>232</LINE></LOOP> <BEEP_SHORT><FILE>main.asm</FILE><LINE>594</LINE></BEEP_SHORT>
<_STATE_DEFAULT><FILE>main.asm</FILE><LINE>236</LINE></_STATE_DEFAULT> <LOOP><FILE>main.asm</FILE><LINE>233</LINE></LOOP>
<_STATE_PROGRAM><FILE>main.asm</FILE><LINE>255</LINE></_STATE_PROGRAM> <_STATE_DEFAULT><FILE>main.asm</FILE><LINE>237</LINE></_STATE_DEFAULT>
<DISPLAY_UPD_DIGITS><FILE>main.asm</FILE><LINE>546</LINE></DISPLAY_UPD_DIGITS> <_STATE_PROGRAM><FILE>main.asm</FILE><LINE>256</LINE></_STATE_PROGRAM>
<TEMP_CONV><FILE>main.asm</FILE><LINE>376</LINE></TEMP_CONV> <DISPLAY_UPD_DIGITS><FILE>main.asm</FILE><LINE>537</LINE></DISPLAY_UPD_DIGITS>
<DEBOUNCE_SW><FILE>main.asm</FILE><LINE>605</LINE></DEBOUNCE_SW> <TEMP_CONV><FILE>main.asm</FILE><LINE>371</LINE></TEMP_CONV>
<TEMP_RD><FILE>main.asm</FILE><LINE>284</LINE></TEMP_RD> <DEBOUNCE_SW><FILE>main.asm</FILE><LINE>612</LINE></DEBOUNCE_SW>
<_STATE_ERROR><FILE>main.asm</FILE><LINE>260</LINE></_STATE_ERROR> <TEMP_RD><FILE>main.asm</FILE><LINE>279</LINE></TEMP_RD>
<SW_CHECK_PROCESS><FILE>main.asm</FILE><LINE>429</LINE></SW_CHECK_PROCESS> <_STATE_ERROR><FILE>main.asm</FILE><LINE>261</LINE></_STATE_ERROR>
<SW_CHECK_PROCESS><FILE>main.asm</FILE><LINE>422</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>
<DELAY_LOOP_16><FILE>main.asm</FILE><LINE>277</LINE></DELAY_LOOP_16> <OW_PRESENCE><FILE>main.asm</FILE><LINE>446</LINE></OW_PRESENCE>
<OW_PRESENCE><FILE>main.asm</FILE><LINE>454</LINE></OW_PRESENCE> <OW_SEND_BYTE><FILE>main.asm</FILE><LINE>473</LINE></OW_SEND_BYTE>
<OW_SEND_BYTE><FILE>main.asm</FILE><LINE>481</LINE></OW_SEND_BYTE> <OW_RD_BYTE><FILE>main.asm</FILE><LINE>506</LINE></OW_RD_BYTE>
<OW_RD_BYTE><FILE>main.asm</FILE><LINE>514</LINE></OW_RD_BYTE> <_TEMP_RD_TO_UNSIGNED><FILE>main.asm</FILE><LINE>314</LINE></_TEMP_RD_TO_UNSIGNED>
<_TEMP_RD_TO_UNSIGNED><FILE>main.asm</FILE><LINE>319</LINE></_TEMP_RD_TO_UNSIGNED> <_TEMP_RD_CONTINUE><FILE>main.asm</FILE><LINE>325</LINE></_TEMP_RD_CONTINUE>
<_TEMP_RD_CONTINUE><FILE>main.asm</FILE><LINE>330</LINE></_TEMP_RD_CONTINUE> <_TEMP_RD_END><FILE>main.asm</FILE><LINE>335</LINE></_TEMP_RD_END>
<_TEMP_RD_END><FILE>main.asm</FILE><LINE>340</LINE></_TEMP_RD_END> <_USI_TRANSMIT_LOOP><FILE>main.asm</FILE><LINE>409</LINE></_USI_TRANSMIT_LOOP>
<_USI_TRANSMIT_LOOP><FILE>main.asm</FILE><LINE>415</LINE></_USI_TRANSMIT_LOOP> <_INTO_DEFAULT_STATE><FILE>main.asm</FILE><LINE>435</LINE></_INTO_DEFAULT_STATE>
<_INTO_DEFAULT_STATE><FILE>main.asm</FILE><LINE>442</LINE></_INTO_DEFAULT_STATE> <_SW_CHECK_PROCESS_END><FILE>main.asm</FILE><LINE>438</LINE></_SW_CHECK_PROCESS_END>
<_SW_CHECK_PROCESS_END><FILE>main.asm</FILE><LINE>445</LINE></_SW_CHECK_PROCESS_END> <DELAY_LOOP_16><FILE>main.asm</FILE><LINE>638</LINE></DELAY_LOOP_16>
<OW_CHECK_PRESENCE><FILE>main.asm</FILE><LINE>470</LINE></OW_CHECK_PRESENCE> <OW_CHECK_PRESENCE><FILE>main.asm</FILE><LINE>462</LINE></OW_CHECK_PRESENCE>
<_EXIT><FILE>main.asm</FILE><LINE>476</LINE></_EXIT> <_EXIT><FILE>main.asm</FILE><LINE>468</LINE></_EXIT>
<_OW_SEND_BYTE_LOOP><FILE>main.asm</FILE><LINE>486</LINE></_OW_SEND_BYTE_LOOP> <_OW_SEND_BYTE_LOOP><FILE>main.asm</FILE><LINE>478</LINE></_OW_SEND_BYTE_LOOP>
<_OW_SEND_0><FILE>main.asm</FILE><LINE>490</LINE></_OW_SEND_0> <_OW_SEND_0><FILE>main.asm</FILE><LINE>482</LINE></_OW_SEND_0>
<_OW_SEND_1><FILE>main.asm</FILE><LINE>498</LINE></_OW_SEND_1> <_OW_SEND_1><FILE>main.asm</FILE><LINE>490</LINE></_OW_SEND_1>
<_OW_SEND_BYTE_END><FILE>main.asm</FILE><LINE>505</LINE></_OW_SEND_BYTE_END> <_OW_SEND_BYTE_END><FILE>main.asm</FILE><LINE>497</LINE></_OW_SEND_BYTE_END>
<_OW_RD_BYTE_LP><FILE>main.asm</FILE><LINE>520</LINE></_OW_RD_BYTE_LP> <_OW_RD_BYTE_LP><FILE>main.asm</FILE><LINE>512</LINE></_OW_RD_BYTE_LP>
<DIV_LOOP><FILE>main.asm</FILE><LINE>563</LINE></DIV_LOOP> <DIV_LOOP><FILE>main.asm</FILE><LINE>554</LINE></DIV_LOOP>
<DISPLAY_SYMBOLS><FILE>main.asm</FILE><LINE>655</LINE></DISPLAY_SYMBOLS> <DISPLAY_SYMBOLS><FILE>main.asm</FILE><LINE>670</LINE></DISPLAY_SYMBOLS>
<_loop_2><FILE>main.asm</FILE><LINE>611</LINE></_loop_2> <DELAY><FILE>main.asm</FILE><LINE>645</LINE></DELAY>
<_loop_0><FILE>main.asm</FILE><LINE>613</LINE></_loop_0> <BEEP_LONG><FILE>main.asm</FILE><LINE>602</LINE></BEEP_LONG>
<_dec_0><FILE>main.asm</FILE><LINE>615</LINE></_dec_0> <_loop_2><FILE>main.asm</FILE><LINE>618</LINE></_loop_2>
<_loop_1><FILE>main.asm</FILE><LINE>618</LINE></_loop_1> <_loop_0><FILE>main.asm</FILE><LINE>620</LINE></_loop_0>
<_loop_3><FILE>main.asm</FILE><LINE>621</LINE></_loop_3> <_dec_0><FILE>main.asm</FILE><LINE>622</LINE></_dec_0>
<DELAY><FILE>main.asm</FILE><LINE>632</LINE></DELAY> <_loop_1><FILE>main.asm</FILE><LINE>625</LINE></_loop_1>
<_DELAY_1><FILE>main.asm</FILE><LINE>637</LINE></_DELAY_1> <_loop_3><FILE>main.asm</FILE><LINE>628</LINE></_loop_3>
<_DELAY_2><FILE>main.asm</FILE><LINE>639</LINE></_DELAY_2> <_DELAY_0><FILE>main.asm</FILE><LINE>651</LINE></_DELAY_0>
<_DELAY_1><FILE>main.asm</FILE><LINE>653</LINE></_DELAY_1>
<_DELAY_2><FILE>main.asm</FILE><LINE>655</LINE></_DELAY_2>
</LABELS> </LABELS>
</ASSEMBLER_INFO> </ASSEMBLER_INFO>

View File

@ -187,8 +187,8 @@ RESET_vect:
; **** ПРОЦЕСС ИНИЦИАЛИЗАЦИИ МК ********************************** ; **** ПРОЦЕСС ИНИЦИАЛИЗАЦИИ МК **********************************
MCU_INIT: MCU_INIT:
; **** ИНИЦИАЛИЗАЦИЯ ПИНОВ ************************************* ; **** ИНИЦИАЛИЗАЦИЯ ПИНОВ *************************************
outi r16, DDRD, (1<<LED_ERR_PIN) | (1<<DIGIT_1_PIN) | (1<<DIGIT_2_PIN) | (1<<DIGIT_3_PIN) | (1<<DIGIT_4_PIN) | (0<<UART_RX_PIN) | (1<<UART_TX_PIN) outi r16, DDRD, (1<<LED_ERR_PIN) | (1<<DIGIT_1_PIN) | (1<<DIGIT_2_PIN) | (1<<DIGIT_3_PIN) | (1<<DIGIT_4_PIN) | (1<<UART_TX_PIN)
outi r16, DDRB, (1<<USI_CLK_PIN) | (1<<USI_DO_PIN) | (1<<USI_LATCH_PIN) | (0<<SW_PLUS_PIN) | (0<<SW_MINUS_PIN) | (0<<SW_SET_PIN) outi r16, DDRB, (1<<USI_CLK_PIN) | (1<<USI_DO_PIN) | (1<<USI_LATCH_PIN) | (0<<SW_PLUS_PIN) | (0<<SW_MINUS_PIN) | (0<<SW_SET_PIN) | (1<<BUZZER_PIN)
outi r16, PORTB, (1<<SW_PLUS_PIN) | (1<<SW_MINUS_PIN) | (1<<SW_SET_PIN) outi r16, PORTB, (1<<SW_PLUS_PIN) | (1<<SW_MINUS_PIN) | (1<<SW_SET_PIN)
; **** ИНИЦИАЛИЗАЦИЯ ТАЙМЕРА 0 ********************************** ; **** ИНИЦИАЛИЗАЦИЯ ТАЙМЕРА 0 **********************************
@ -202,26 +202,27 @@ MCU_INIT:
outi r16, PCMSK0, (1<<PCINT2) | (1<<PCINT3) | (1<<PCINT4) ; для кнопок outi r16, PCMSK0, (1<<PCINT2) | (1<<PCINT3) | (1<<PCINT4) ; для кнопок
; **** ИНИЦИАЛИЗАЦИЯ USART ************************************** ; **** ИНИЦИАЛИЗАЦИЯ USART **************************************
outi r16, UBRRL, LOW(51) ; 9600 БОД ; outi r16, UBRRL, LOW(51) ; 9600 БОД
outi r16, UBRRH, HIGH(51) ; 9600 БОД ; outi r16, UBRRH, HIGH(51) ; 9600 БОД
outi r16, UCSRB, (1<<RXEN) | (1<<TXEN) ; Включение приема и передачии ; outi r16, UCSRB, (1<<RXEN) ; Включение передачии
outi r16, UCSRC, (1<<UCSZ1) | (1<<UCSZ0) ; Асинхронный режим, 8 бит фрейм, 1 стоповый бит ; outi r16, UCSRC, (1<<UCSZ1) | (1<<UCSZ0) ; Асинхронный режим, 8 бит фрейм, 1 стоповый бит
continue: continue:
clr r1 clr r1
sts CURRENT_DIGIT, r1 sts CURRENT_DIGIT, r1
ldi r16, 0x00 ldi r16, 0x00
sts MCU_STATE, r16 ; переводим МК сразу в режим измерения температуры sts MCU_STATE, r16 ; переводим МК сразу в режим измерения температуры
clr r16 clr r16
sts TEMP_L, r16 sts TEMP_L, r16
sts TEMP_H, r16 sts TEMP_H, r16
ldi r16, 0xf0 ldi r16, 0xf0
sts TEMP_F, r16 sts TEMP_F, r16
rcall BEEP_SHORT
display_load 0 ; загружаем число, которое нужно показать на индикатор display_load 0 ; загружаем число, которое нужно показать на индикатор
; sei ; sei
@ -273,13 +274,7 @@ _STATE_ERROR:
; **** ПОДПРОГРАММЫ ********************************************** ; **** ПОДПРОГРАММЫ **********************************************
.INCLUDE "div16u.asm" .INCLUDE "div16u.asm"
DELAY_LOOP_16:
subi DELAY_8_r, 1
sbci DELAY_16_r, 0
brcc DELAY_LOOP_16
ret
//<editor-fold defaultstate="collapsed" desc="Подпрограмма: чтение и опрос температуры"> //<editor-fold defaultstate="collapsed" desc="Подпрограмма: чтение и опрос температуры">
TEMP_RD: TEMP_RD:
push r16 push r16
@ -391,7 +386,6 @@ TEMP_CONV:
ret ret
//</editor-fold> //</editor-fold>
//<editor-fold defaultstate="collapsed" desc="Подпрограмма: отправка байта в сдвиговый регистр"> //<editor-fold defaultstate="collapsed" desc="Подпрограмма: отправка байта в сдвиговый регистр">
; **** ОТПРАВКА БАЙТА В СДВИГОВЫЙ РЕГИСТР ************************* ; **** ОТПРАВКА БАЙТА В СДВИГОВЫЙ РЕГИСТР *************************
USI_TRANSMIT: USI_TRANSMIT:
@ -424,7 +418,6 @@ _USI_TRANSMIT_LOOP: ; Execute loop when USIOIF is 0
pop r16 pop r16
ret//</editor-fold> ret//</editor-fold>
//<editor-fold defaultstate="collapsed" desc="Подпрограмма: опрос кнопок"> //<editor-fold defaultstate="collapsed" desc="Подпрограмма: опрос кнопок">
SW_CHECK_PROCESS: SW_CHECK_PROCESS:
push r16 push r16
@ -447,7 +440,6 @@ _SW_CHECK_PROCESS_END:
ret ret
//</editor-fold> //</editor-fold>
//<editor-fold defaultstate="collapsed" desc="Реализация интерфеса 1-Wire"> //<editor-fold defaultstate="collapsed" desc="Реализация интерфеса 1-Wire">
//<editor-fold defaultstate="collapsed" desc="1-Wire: оспрос присутствия"> //<editor-fold defaultstate="collapsed" desc="1-Wire: оспрос присутствия">
; **** ОПРОС ПРИСУТСТВИЯ УСТРОЙСТВА ****************************** ; **** ОПРОС ПРИСУТСТВИЯ УСТРОЙСТВА ******************************
@ -538,7 +530,6 @@ _OW_RD_BYTE_LP:
//</editor-fold> //</editor-fold>
//<editor-fold defaultstate="collapsed" desc="Подпрограмма: обновление ячеек в SRAM для индикатора"> //<editor-fold defaultstate="collapsed" desc="Подпрограмма: обновление ячеек в SRAM для индикатора">
; **** ПОЛУЧЕНИЕ ЦИФР ИЗ 16-ТИ БИТНОГО ЧИСЛА ********************* ; **** ПОЛУЧЕНИЕ ЦИФР ИЗ 16-ТИ БИТНОГО ЧИСЛА *********************
; Описание: Перемещает цифры числа в соответствующие ячейки памяти в SRAM ; Описание: Перемещает цифры числа в соответствующие ячейки памяти в SRAM
@ -582,7 +573,6 @@ DIV_LOOP:
ret ret
//</editor-fold> //</editor-fold>
//<editor-fold defaultstate="collapsed" desc="Подпрограмма: получение символа для индикатора"> //<editor-fold defaultstate="collapsed" desc="Подпрограмма: получение символа для индикатора">
; **** ЗАГРУЖАЕТ НУЖНЫЙ АДРЕС СИМВОЛА В R0 *********************** ; **** ЗАГРУЖАЕТ НУЖНЫЙ АДРЕС СИМВОЛА В R0 ***********************
DISPLAY_DECODER: DISPLAY_DECODER:
@ -600,6 +590,23 @@ DISPLAY_DECODER:
pop r16 pop r16
ret//</editor-fold> ret//</editor-fold>
//<editor-fold defaultstate="collapsed" desc="Подпрограмма: короткий писк">
BEEP_SHORT:
sbi BUZZER_PORT, BUZZER_PIN
rcall DELAY
cbi BUZZER_PORT, BUZZER_PIN
ret
//</editor-fold>
//<editor-fold defaultstate="collapsed" desc="Подпрограмма: длинный писк">
BEEP_LONG:
sbi BUZZER_PORT, BUZZER_PIN
rcall DELAY
rcall DELAY
rcall DELAY
rcall DELAY
cbi BUZZER_PORT, BUZZER_PIN
ret//</editor-fold>
//<editor-fold defaultstate="collapsed" desc="Подпрограмма: устранение дребезга кнопки"> //<editor-fold defaultstate="collapsed" desc="Подпрограмма: устранение дребезга кнопки">
DEBOUNCE_SW: DEBOUNCE_SW:
@ -627,29 +634,37 @@ _loop_3:
pop r16 pop r16
ret//</editor-fold> ret//</editor-fold>
//<editor-fold defaultstate="collapsed" desc="Подпрограмма: задержка (16бит макс число)">
DELAY_LOOP_16:
subi DELAY_8_r, 1
sbci DELAY_16_r, 0
brcc DELAY_LOOP_16
ret//</editor-fold>
//<editor-fold defaultstate="collapsed" desc="Подпрограмма: задержка"> //<editor-fold defaultstate="collapsed" desc="Подпрограмма: задержка">
DELAY: DELAY:
push r16 push r16
push r17 push r17
push r18
ldi r18, 6
_DELAY_0:
ldi r16, 255 ldi r16, 255
_DELAY_1: _DELAY_1:
ldi r17, 255 ldi r17, 255
_DELAY_2: _DELAY_2:
dec r17 dec r17
nop
nop
nop
brne _DELAY_2 brne _DELAY_2
dec r16 dec r16
brne _DELAY_1 brne _DELAY_1
dec r18
brne _DELAY_0
pop r18
pop r17 pop r17
pop r16 pop r16
ret //</editor-fold> ret //</editor-fold>
//<editor-fold defaultstate="collapsed" desc="Символы для индикатора"> //<editor-fold defaultstate="collapsed" desc="Символы для индикатора">
DISPLAY_SYMBOLS: DISPLAY_SYMBOLS:

View File

@ -7,56 +7,55 @@
:10004A000F935FB74091670045300CF403C0442713 :10004A000F935FB74091670045300CF403C0442713
:10005A0040936700403081F49398949895980EF0F5 :10005A0040936700403081F49398949895980EF0F5
:10006A0002C00BE002C000916500002311F0929AD1 :10006A0002C00BE002C000916500002311F0929AD1
:10007A0001C0929869D1E4D0413041F492989498A1 :10007A0001C0929864D1DFD0413041F492989498AB
:10008A009598939A009164005FD1DAD0423059F47E :10008A009598939A009164005AD1D5D0423059F488
:10009A00929893989598949A0091630055D1002D5F :10009A00929893989598949A0091630050D1002D64
:1000AA000F77002ECDD0433041F4929893989498CC :1000AA000F77002EC8D0433041F4929893989498D1
:1000BA00959A00916C0048D1C3D04395409367004C :1000BA00959A00916C0043D1BED043954093670056
:1000CA005FBF0F915F914F9118950FED0DBF0EE72E :1000CA005FBF0F915F914F9118950FED0DBF0EE72E
:1000DA0001BB01EC07BB0CE108BB02E000BF05E075 :1000DA0001BB01EE07BB0CE108BB02E000BF05E073
:1000EA0003BF09E106BF01E009BF00E20BBF0CE153 :1000EA0003BF09E106BF01E009BF00E20BBF0CE153
:1000FA0000BD03E309B900E002B908E10AB906E064 :1000FA0000BD11241092670000E000936000002701
:10010A0003B909E0019511241092670000E00093F9 :10010A0000936A0000936B0000EF00936C00C59A9D
:10011A006000002700936A0000936B0000EF0093D1 :10011A0021D1C59880E090E000916000003079F428
:10012A006C0080E090E000916000003079F4F2D039 :10012A00F4D070FD969A70FF96987BD013D112D1B5
:10013A0070FD969A70FF969879D011D110D12ED071 :10013A002ED010916A00812F10916B00912F0130FF
:10014A0010916A00812F10916B00912F013011F4E8 :10014A0011F4E3D084D0023039F71BE01093630036
:10015A00E1D082D0023039F71BE01093630010938C :10015A001093640010936500109366000000DCCFD2
:10016A00640010936500109366000000DCCFEE2453 :10016A00EE24FF1841E1001F111F4A9509F4089572
:10017A00FF1841E1001F111F4A9509F40895EE1C6A :10017A00EE1CFF1CE21AF30A20F4E20EF31E889426
:10018A00FF1CE21AF30A20F4E20EF31E8894F2CF5F :10018A00F2CF0894F0CF41503040E8F708950F932A
:10019A000894F0CF41503040E8F708950F931F9329 :10019A001F932F933F934F9368D00CEC802E7AD005
:1001AA002F933F934F9366D00CEC802E78D00EEBB2 :1001AA000EEB802E77D0AAE6B0E095D0ABE6B0E0B1
:1001BA00802E75D0AAE6B0E093D0ABE6B0E090D03E :1001BA0092D010916A0020916B002F93287F283FDC
:1001CA0010916A0020916B002F93287F283F11F02D :1001CA0011F0E89409C02F9168941095209531E0B8
:1001DA00E89409C02F9168941095209531E0130F87 :1001DA00130F30E0231F01C02F91269517952695FE
:1001EA0030E0231F01C02F91269517952695179564 :1001EA001795269517952695179530916A000EF45E
:1001FA00269517952695179530916A00432F3F70DB :1001FA003195432F3F70432F330F330F330F440F83
:10020A00432F330F330F330F440F340F3695369580 :10020A00340F369536953695369510936A002093B5
:10021A003695369510936A0020936B0030936C00E4 :10021A006B0030936C004F913F912F911F910F917A
:10022A004F913F912F911F910F9108950F9322D0D3 :10022A0008950F9322D00CEC802E34D004E4802E53
:10023A000CEC802E34D004E4802E31D00F91089536 :10023A0031D00F9108950F930FB800E40EB90BE176
:10024A000F930FB800E40EB90BE10DB9769BFDCF01 :10024A000DB9769BFDCFC09AC0980F9108950F9370
:10025A00C09AC0980F9108950F9381D0B29B0196CE :10025A0081D0B29B0196B39B0197B49B01C003C0A6
:10026A00B39B0197B49B01C003C000E000936000F8 :10026A0000E0009360000F910895F894B99A33E082
:10027A000F910895F894B99A33E04EEB8BDFB99851 :10027A004EEB89DFB99830E04AE885DF05D033E0F4
:10028A0030E04AE887DF05D033E042E383DF789441 :10028A0042E381DF78940895B19B716002C0B1990D
:10029A000895B19B716002C0B1997E7F08950F9352 :10029A007E7F08950F931F93082D18E0069508F4A2
:1002AA001F93082D18E0069508F458F0F894B99AA7 :1002AA0058F0F894B99A30E046E76DDFB99830E033
:1002BA0030E046E76FDFB99830E042E16BDF7894CF :1002BA0042E169DF78940AC0F894B99A30E04AE0DA
:1002CA000AC0F894B99A30E04AE064DFB99830E09D :1002CA0062DFB99830E04EE75EDF78941A9531F72D
:1002DA004EE760DF78941A9531F71F910F910895D0 :1002DA001F910F9108950F931F93002718E0F89428
:1002EA000F931F93002718E0F8940695B99A30E007 :1002EA000695B99A30E04AE04EDFB99830E040E12D
:1002FA004AE050DFB99830E040E14CDFB19900683C :1002FA004ADFB199006830E04CE645DF1A9581F78C
:10030A0030E04CE647DF1A9581F70C9378941F91F9 :10030A000C9378941F910F910895F8945F9354E099
:10031A000F910895F8945F9354E0A3E6B0E08093B8 :10031A00A3E6B0E0809361009093620000916100CF
:10032A0061009093620000916100109162002AE0DE :10032A00109162002AE030E01BDFED920093610039
:10033A0030E01DDFED9200936100109362005A9540 :10033A00109362005A9591F75F91789408950F93FC
:10034A0091F75F91789408950F931F93E4EAF3E08D :10034A001F93EAE9F3E01127E00FF11F04901F91D0
:10035A001127E00FF11F04901F910F9108950F9339 :10035A000F9108950F931F932F932AE01FEF0FEF2A
:10036A001F932F932AE01FEF0FEF0A95F1F71A95C3 :10036A000A95F1F71A95D9F72A95C1F72F911F9196
:10037A00D9F72A95C1F72F911F910F9108950F93DD :10037A000F9108950F931F930FEF1FEF1A95000027
:10038A001F930FEF1FEF1A95000000000000D9F726 :10038A0000000000D9F70A95C1F71F910F9108954F
:10039A000A95C1F71F910F910895C0F9A4B09992D7 :0C039A00C0F9A4B0999282F880909CBF3A
:0603AA0082F880909CBF68
:00000001FF :00000001FF

View File

@ -1,12 +1,12 @@
# #
#Tue Jun 20 07:06:09 MSK 2023 #Thu Jun 22 06:29:23 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=1707-dsfu-bg host.id=2l3s-yrgx-1d
configurations-xml=5ccf631a2321e636528c6541c2c69f2c configurations-xml=cdd4b69d8607063199baa35f45d5db2e
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

@ -1022,10 +1022,22 @@
<property key="warningmessagebreakoptions.warningmessages" value="holdstate"/> <property key="warningmessagebreakoptions.warningmessages" value="holdstate"/>
</Tool> </Tool>
<item path="definitions.asm" ex="true" overriding="false"> <item path="definitions.asm" ex="true" overriding="false">
<AVR-ASM>
</AVR-ASM>
<AVR-Global>
</AVR-Global>
</item> </item>
<item path="div16u.asm" ex="true" overriding="false"> <item path="div16u.asm" ex="true" overriding="false">
<AVR-ASM>
</AVR-ASM>
<AVR-Global>
</AVR-Global>
</item> </item>
<item path="macros.asm" ex="true" overriding="false"> <item path="macros.asm" ex="true" overriding="false">
<AVR-ASM>
</AVR-ASM>
<AVR-Global>
</AVR-Global>
</item> </item>
</conf> </conf>
</confs> </confs>