mirror of
https://github.com/sergeyyarkov/attiny2313a_thermostat.git
synced 2026-10-11 10:18:56 +03:00
upd
This commit is contained in:
parent
a74e7008ff
commit
4f3f21246e
3
.vscode/settings.json
vendored
Normal file
3
.vscode/settings.json
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"cmake.configureOnOpen": false
|
||||||
|
}
|
||||||
@ -1,34 +1,40 @@
|
|||||||
:020000020000FC
|
:020000020000FC
|
||||||
:020000005AC0E4
|
:0200000060C0DE
|
||||||
:020016003EC0EA
|
:020016003EC0EA
|
||||||
:10001A0000C04F935F930F935FB7409167004530DD
|
:10001A0000C04F935F930F935FB7409167004530DD
|
||||||
:10002A000CF403C0442740936700403041F493988E
|
:10002A000CF403C0442740936700403041F493988E
|
||||||
:10003A0094989598929A00916600B5D06BD0413009
|
:10003A0094989598929A00916600D6D070D04130E3
|
||||||
:10004A0041F4929894989598939A00916500ABD050
|
:10004A0041F4929894989598939A00916500CCD02F
|
||||||
:10005A0061D0423041F4929893989598949A00917D
|
:10005A0066D0423041F4929893989598949A009178
|
||||||
:10006A006400A1D057D0433041F492989398949861
|
:10006A006400C2D05CD0433041F49298939894983B
|
||||||
:10007A00959A0091630097D04DD0439540936700BD
|
:10007A00959A00916300B8D052D043954093670097
|
||||||
:10008A005FBF0F915F914F9118950F930FB7B29B76
|
:10008A005FBF0F915F914F9118950F931F932F9315
|
||||||
:10009A0005C0B39B05C0B49B05C005C0019603C04B
|
:10009A003F930FB716B320916800122736B33093F7
|
||||||
:1000AA000A9601C0CF960FBF0F9118950FED0DBF9D
|
:1000AA00680012FF03C000C0B29B01960FBF3F91C8
|
||||||
:1000BA000EE701BB01EC07BB0CE108BB00E20BBF7A
|
:1000BA002F911F910F9118950FED0DBF0EE701BB00
|
||||||
:1000CA000CE100BD02E000BF05E003BF09E106BF85
|
:1000CA0001EC07BB0CE108BB00E20BBF0CE100BD71
|
||||||
:1000DA0001E009BF11241092670080E090E026D069
|
:1000DA0002E000BF05E003BF09E106BF01E009BF76
|
||||||
:1000EA00789449D070FD969A70FF9698FACFEE24CC
|
:1000EA0011241092670080E090E0789463D0969A89
|
||||||
:1000FA00FF1841E1001F111F4A9509F40895EE1CEB
|
:1000FA008AD0969888D0FACFEE24FF1841E1001FE3
|
||||||
:10010A00FF1CE21AF30A20F4E20EF31E8894F2CFDF
|
:10010A00111F4A9509F40895EE1CFF1CE21AF30A1E
|
||||||
:10011A000894F0CF0F930FB800E40EB90BE10DB9B4
|
:10011A0020F4E20EF31E8894F2CF0894F0CF0F93E6
|
||||||
:10012A00769BFDCFC09AC0980F910895F89400E08D
|
:10012A000FB800E40EB90BE10DB9769BFDCFC09A6A
|
||||||
:10013A000CBD0CE30ABD05E408BD03E00EBDB99A87
|
:10013A00C0980F910895F89400E00CBD0CE30ABD35
|
||||||
:10014A0008B706FFFCCFB99808B705FFFDCF0DD059
|
:10014A0005E408BD03E00EBDB99A08B706FFFDCF66
|
||||||
:10015A0000E00CBD04E30ABD08B706FFFDCF002787
|
:10015A00B99808B705FFFDCF0DD000E00CBD04E348
|
||||||
:10016A000EBD0FEF08BF78940895B19B7160089592
|
:10016A000ABD08B706FFFDCF00270EBD0FEF08BF77
|
||||||
:10017A00F894789408955F9354E0A3E6B0E08093EE
|
:10017A0078940895B19B716008951F9313E308E082
|
||||||
:10018A0061009093620000916100109162002AE080
|
:10018A001F9108950F93F894726000E00CBD01E08E
|
||||||
:10019A0030E0ADDFED9200936100109362005A9552
|
:10019A000ABD09E008BDB99A08B706FFFDCF90FC71
|
||||||
:1001AA0091F75F9108950F931F93EAEEF1E01127FB
|
:1001AA00B99808B705FFFDCF00270EBD7D7F78946B
|
||||||
:1001BA00E00FF11F04901F910F91089503EB0A9528
|
:1001BA000F910895F8945F9354E0A3E6B0E080931A
|
||||||
:1001CA00F1F708950F931F930FEF1FEF1A95000091
|
:1001CA0061009093620000916100109162002AE040
|
||||||
:1001DA0000000000D9F70A95C1F71F910F91089501
|
:1001DA0030E092DFED9200936100109362005A952D
|
||||||
:0C01EA00C0F9A4B0999282F880909C00AB
|
:1001EA0091F75F91789408950F931F93ECE4F2E0EE
|
||||||
|
:1001FA001127E00FF11F04901F910F91089503EB4F
|
||||||
|
:10020A000A95F1F708950F931F932F9325E01FEF97
|
||||||
|
:10021A000FEF0A95F1F71A95D9F72A95C1F72F9199
|
||||||
|
:10022A001F910F9108950F931F930FEF1FEF1A95C8
|
||||||
|
:10023A00000000000000D9F70A95C1F71F910F913D
|
||||||
|
:0E024A000895C0F9A4B0999282F880909C00AB
|
||||||
:00000001FF
|
:00000001FF
|
||||||
|
|||||||
@ -1,20 +1,20 @@
|
|||||||
|
|
||||||
AVRASM ver. 2.2.7 firmware.asm Wed May 10 21:22:23 2023
|
AVRASM ver. 2.2.7 firmware.asm Thu Jun 15 23:21:29 2023
|
||||||
|
|
||||||
firmware.asm(14): Including file 'tn2313Adef.inc'
|
firmware.asm(14): Including file 'tn2313Adef.inc'
|
||||||
firmware.asm(270): Including file 'div16u.asm'
|
firmware.asm(302): 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
|
||||||
firmware.asm(270): 'div16u.asm' included form here
|
firmware.asm(302): '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
|
||||||
firmware.asm(270): 'div16u.asm' included form here
|
firmware.asm(302): '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
|
||||||
firmware.asm(270): 'div16u.asm' included form here
|
firmware.asm(302): '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
|
||||||
firmware.asm(270): 'div16u.asm' included form here
|
firmware.asm(302): 'div16u.asm' included form here
|
||||||
firmware.asm(271): Including file 'usi.asm'
|
firmware.asm(303): Including file 'usi.asm'
|
||||||
firmware.asm(14): Including file 'tn2313Adef.inc'
|
firmware.asm(14): Including file 'tn2313Adef.inc'
|
||||||
firmware.asm(270): Including file 'div16u.asm'
|
firmware.asm(302): Including file 'div16u.asm'
|
||||||
firmware.asm(271): Including file 'usi.asm'
|
firmware.asm(303): Including file 'usi.asm'
|
||||||
|
|
||||||
|
|
||||||
; Project name: thermostat
|
; Project name: thermostat
|
||||||
@ -732,7 +732,6 @@ firmware.asm(271): Including file 'usi.asm'
|
|||||||
|
|
||||||
.DEF TEMP_REG_A = r16
|
.DEF TEMP_REG_A = r16
|
||||||
.DEF TEMP_REG_B = r17
|
.DEF TEMP_REG_B = r17
|
||||||
.DEF ONE_WIRE_FLAGS = r23 ; Флаги состояния для 1-Wire интерфейса
|
|
||||||
.DEF DISP_NUM_L = r24 ; LSB числа которое сейчас на индикаторе
|
.DEF DISP_NUM_L = r24 ; LSB числа которое сейчас на индикаторе
|
||||||
.DEF DISP_NUM_H = r25 ; MSB числа которое сейчас на индикаторе
|
.DEF DISP_NUM_H = r25 ; MSB числа которое сейчас на индикаторе
|
||||||
|
|
||||||
@ -746,7 +745,9 @@ firmware.asm(271): Including file 'usi.asm'
|
|||||||
.EQU ONE_WIRE_LINE = PB1 ; Пин шины 1-Wire
|
.EQU ONE_WIRE_LINE = PB1 ; Пин шины 1-Wire
|
||||||
.EQU ONE_WIRE_DDR = DDRB
|
.EQU ONE_WIRE_DDR = DDRB
|
||||||
.EQU ONE_WIRE_PIN = PINB
|
.EQU ONE_WIRE_PIN = PINB
|
||||||
|
.DEF ONE_WIRE_FLAGS = r23 ; Флаги состояния для 1-Wire интерфейса
|
||||||
.EQU OWPRF = 0 ; 1-Wire Флаг присутствия
|
.EQU OWPRF = 0 ; 1-Wire Флаг присутствия
|
||||||
|
.EQU OWSB = 1 ; Флаг передачи одного бита
|
||||||
|
|
||||||
; **** КОМАНДЫ ДАТЧИКА *****************************************
|
; **** КОМАНДЫ ДАТЧИКА *****************************************
|
||||||
.EQU DS18B20_CMD_CONVERTTEMP = 0x44
|
.EQU DS18B20_CMD_CONVERTTEMP = 0x44
|
||||||
@ -765,6 +766,8 @@ firmware.asm(271): Including file 'usi.asm'
|
|||||||
.EQU USI_DO_PIN = PB6 ; DS на 74HC595
|
.EQU USI_DO_PIN = PB6 ; DS на 74HC595
|
||||||
.EQU USI_CLK_PIN = PB7 ; SH_CP на 74HC595
|
.EQU USI_CLK_PIN = PB7 ; SH_CP на 74HC595
|
||||||
|
|
||||||
|
.EQU SW_PORT = PORTB
|
||||||
|
.EQU SW_PIN = PINB
|
||||||
.EQU SW_PLUS_PIN = PB2 ; Кнопка "Минус"
|
.EQU SW_PLUS_PIN = PB2 ; Кнопка "Минус"
|
||||||
.EQU SW_MINUS_PIN = PB3 ; Кнопка "Плюс"
|
.EQU SW_MINUS_PIN = PB3 ; Кнопка "Плюс"
|
||||||
.EQU SW_SET_PIN = PB4 ; Кнопка "Установить"
|
.EQU SW_SET_PIN = PB4 ; Кнопка "Установить"
|
||||||
@ -800,12 +803,13 @@ firmware.asm(271): Including file 'usi.asm'
|
|||||||
000061 SRAM_TEMP_1: .BYTE 2 ; Хранения временного 16-бит числа в ячейке
|
000061 SRAM_TEMP_1: .BYTE 2 ; Хранения временного 16-бит числа в ячейке
|
||||||
000063 DIGITS: .BYTE 4 ; Ячейки, где хранятся символы, для вывода на индикатор
|
000063 DIGITS: .BYTE 4 ; Ячейки, где хранятся символы, для вывода на индикатор
|
||||||
000067 CURRENT_DIGIT: .BYTE 1 ; Номер разряда индикатора, который сейчас горит
|
000067 CURRENT_DIGIT: .BYTE 1 ; Номер разряда индикатора, который сейчас горит
|
||||||
|
000068 PC_HISTORY: .BYTE 1 ; История изменений состояния кнопок (необходимо для прерываня по изменению состояния пина)
|
||||||
|
|
||||||
; **** СЕГМЕНТ КОДА **********************************************
|
; **** СЕГМЕНТ КОДА **********************************************
|
||||||
.CSEG
|
.CSEG
|
||||||
|
|
||||||
.ORG 0x00
|
.ORG 0x00
|
||||||
000000 c05a rjmp RESET_vect
|
000000 c060 rjmp RESET_vect
|
||||||
|
|
||||||
.ORG 0x000B
|
.ORG 0x000B
|
||||||
00000b c03e rjmp PCINT0_vect
|
00000b c03e rjmp PCINT0_vect
|
||||||
@ -839,8 +843,8 @@ firmware.asm(271): Including file 'usi.asm'
|
|||||||
00001e 9895 cbi PORTD, DIGIT_4_PIN
|
00001e 9895 cbi PORTD, DIGIT_4_PIN
|
||||||
00001f 9a92 sbi PORTD, DIGIT_1_PIN
|
00001f 9a92 sbi PORTD, DIGIT_1_PIN
|
||||||
000020 9100 0066 lds TEMP_REG_A, DIGITS+3
|
000020 9100 0066 lds TEMP_REG_A, DIGITS+3
|
||||||
000022 d0b5 rcall DISPLAY_DECODER
|
000022 d0d6 rcall DISPLAY_DECODER
|
||||||
000023 d06b rcall USI_TRANSMIT
|
000023 d070 rcall USI_TRANSMIT
|
||||||
|
|
||||||
_indicate_2:
|
_indicate_2:
|
||||||
000024 3041 cpi r20, 1
|
000024 3041 cpi r20, 1
|
||||||
@ -851,8 +855,8 @@ firmware.asm(271): Including file 'usi.asm'
|
|||||||
000028 9895 cbi PORTD, DIGIT_4_PIN
|
000028 9895 cbi PORTD, DIGIT_4_PIN
|
||||||
000029 9a93 sbi PORTD, DIGIT_2_PIN
|
000029 9a93 sbi PORTD, DIGIT_2_PIN
|
||||||
00002a 9100 0065 lds TEMP_REG_A, DIGITS+2
|
00002a 9100 0065 lds TEMP_REG_A, DIGITS+2
|
||||||
00002c d0ab rcall DISPLAY_DECODER
|
00002c d0cc rcall DISPLAY_DECODER
|
||||||
00002d d061 rcall USI_TRANSMIT
|
00002d d066 rcall USI_TRANSMIT
|
||||||
|
|
||||||
_indicate_3:
|
_indicate_3:
|
||||||
00002e 3042 cpi r20, 2
|
00002e 3042 cpi r20, 2
|
||||||
@ -863,8 +867,8 @@ firmware.asm(271): Including file 'usi.asm'
|
|||||||
000032 9895 cbi PORTD, DIGIT_4_PIN
|
000032 9895 cbi PORTD, DIGIT_4_PIN
|
||||||
000033 9a94 sbi PORTD, DIGIT_3_PIN
|
000033 9a94 sbi PORTD, DIGIT_3_PIN
|
||||||
000034 9100 0064 lds TEMP_REG_A, DIGITS+1
|
000034 9100 0064 lds TEMP_REG_A, DIGITS+1
|
||||||
000036 d0a1 rcall DISPLAY_DECODER
|
000036 d0c2 rcall DISPLAY_DECODER
|
||||||
000037 d057 rcall USI_TRANSMIT
|
000037 d05c rcall USI_TRANSMIT
|
||||||
|
|
||||||
_indicate_4:
|
_indicate_4:
|
||||||
000038 3043 cpi r20, 3
|
000038 3043 cpi r20, 3
|
||||||
@ -875,8 +879,8 @@ firmware.asm(271): Including file 'usi.asm'
|
|||||||
00003c 9894 cbi PORTD, DIGIT_3_PIN
|
00003c 9894 cbi PORTD, DIGIT_3_PIN
|
||||||
00003d 9a95 sbi PORTD, DIGIT_4_PIN
|
00003d 9a95 sbi PORTD, DIGIT_4_PIN
|
||||||
00003e 9100 0063 lds TEMP_REG_A, DIGITS
|
00003e 9100 0063 lds TEMP_REG_A, DIGITS
|
||||||
000040 d097 rcall DISPLAY_DECODER
|
000040 d0b8 rcall DISPLAY_DECODER
|
||||||
000041 d04d rcall USI_TRANSMIT
|
000041 d052 rcall USI_TRANSMIT
|
||||||
|
|
||||||
_indicate_exit:
|
_indicate_exit:
|
||||||
000042 9543 inc r20
|
000042 9543 inc r20
|
||||||
@ -890,63 +894,90 @@ firmware.asm(271): Including file 'usi.asm'
|
|||||||
|
|
||||||
; **** ОБРАБОТКА КНОПОК ******************************************
|
; **** ОБРАБОТКА КНОПОК ******************************************
|
||||||
PCINT0_vect:
|
PCINT0_vect:
|
||||||
00004a 930f push r16
|
00004a 930f push r16
|
||||||
00004b b70f in r16, SREG
|
00004b 931f push r17
|
||||||
|
00004c 932f push r18
|
||||||
|
00004d 933f push r19
|
||||||
|
|
||||||
00004c 9bb2 sbis PINB, SW_PLUS_PIN
|
00004e b70f in r16, SREG
|
||||||
00004d c005 rjmp _sw_plus
|
|
||||||
|
|
||||||
00004e 9bb3 sbis PINB, SW_MINUS_PIN
|
00004f b316 in r17, SW_PIN
|
||||||
00004f c005 rjmp _sw_minus
|
000050 9120 0068 lds r18, PC_HISTORY
|
||||||
|
|
||||||
000050 9bb4 sbis PINB, SW_SET_PIN
|
000052 2712 eor r17, r18
|
||||||
000051 c005 rjmp _sw_set
|
000053 b336 in r19, SW_PIN
|
||||||
|
000054 9330 0068 sts PC_HISTORY, r19
|
||||||
|
|
||||||
000052 c005 rjmp _sw_exit
|
_SW_PLUS_CHECK:
|
||||||
_sw_plus:
|
000056 ff12 sbrs r17, SW_PLUS_PIN
|
||||||
000053 9601 adiw DISP_NUM_L, 1
|
000057 c003 rjmp _SW_EXIT
|
||||||
000054 c003 rjmp _sw_exit
|
000058 c000 rjmp _SW_PLUS_HANDLER
|
||||||
_sw_minus:
|
|
||||||
000055 960a adiw DISP_NUM_L, 10
|
|
||||||
000056 c001 rjmp _sw_exit
|
|
||||||
_sw_set:
|
|
||||||
000057 96cf adiw DISP_NUM_L, 63
|
|
||||||
_sw_exit:
|
|
||||||
|
|
||||||
000058 bf0f out SREG, r16
|
_SW_PLUS_HANDLER:
|
||||||
000059 910f pop r16
|
; rcall DEBOUNCE_SW
|
||||||
00005a 9518 reti
|
000059 9bb2 sbis SW_PIN, SW_PLUS_PIN
|
||||||
|
00005a 9601 adiw DISP_NUM_L, 1
|
||||||
|
;exit
|
||||||
|
|
||||||
|
|
||||||
|
; sbis PINB, SW_PLUS_PIN
|
||||||
|
; rjmp _sw_plus
|
||||||
|
|
||||||
|
; sbis PINB, SW_MINUS_PIN
|
||||||
|
; rjmp _sw_minus
|
||||||
|
|
||||||
|
; sbis PINB, SW_SET_PIN
|
||||||
|
; rjmp _sw_set
|
||||||
|
|
||||||
|
; rjmp _sw_exit
|
||||||
|
; _sw_plus:
|
||||||
|
; adiw DISP_NUM_L, 1
|
||||||
|
; rjmp _sw_exit
|
||||||
|
; _sw_minus:
|
||||||
|
; adiw DISP_NUM_L, 10
|
||||||
|
; rjmp _sw_exit
|
||||||
|
; _sw_set:
|
||||||
|
; adiw DISP_NUM_L, 63
|
||||||
|
; _sw_exit:
|
||||||
|
|
||||||
|
_SW_EXIT:
|
||||||
|
00005b bf0f out SREG, r16
|
||||||
|
00005c 913f pop r19
|
||||||
|
00005d 912f pop r18
|
||||||
|
00005e 911f pop r17
|
||||||
|
00005f 910f pop r16
|
||||||
|
000060 9518 reti
|
||||||
|
|
||||||
; **** СТАРТ ПРОГРАММЫ *******************************************
|
; **** СТАРТ ПРОГРАММЫ *******************************************
|
||||||
RESET_vect:
|
RESET_vect:
|
||||||
00005b ed0f ldi TEMP_REG_A, LOW(RAMEND)
|
000061 ed0f ldi TEMP_REG_A, LOW(RAMEND)
|
||||||
00005c bf0d out SPL, TEMP_REG_A
|
000062 bf0d out SPL, TEMP_REG_A
|
||||||
|
|
||||||
; **** ПРОЦЕСС ИНИЦИАЛИЗАЦИИ МК **********************************
|
; **** ПРОЦЕСС ИНИЦИАЛИЗАЦИИ МК **********************************
|
||||||
MCU_INIT:
|
MCU_INIT:
|
||||||
; **** ИНИЦИАЛИЗАЦИЯ ПИНОВ *************************************
|
; **** ИНИЦИАЛИЗАЦИЯ ПИНОВ *************************************
|
||||||
00005d e70e
|
000063 e70e
|
||||||
00005e bb01 outi r16, DDRD, (1<<LED_POWER_PIN) | (1<<DIGIT_1_PIN) | (1<<DIGIT_2_PIN) | (1<<DIGIT_3_PIN) | (1<<DIGIT_4_PIN) | (0<<PD0) | (1<<PD1)
|
000064 bb01 outi r16, DDRD, (1<<LED_POWER_PIN) | (1<<DIGIT_1_PIN) | (1<<DIGIT_2_PIN) | (1<<DIGIT_3_PIN) | (1<<DIGIT_4_PIN) | (0<<PD0) | (1<<PD1)
|
||||||
00005f ec01
|
000065 ec01
|
||||||
000060 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)
|
000066 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)
|
||||||
000061 e10c
|
000067 e10c
|
||||||
000062 bb08 outi r16, PORTB, (1<<SW_PLUS_PIN) | (1<<SW_MINUS_PIN) | (1<<SW_SET_PIN)
|
000068 bb08 outi r16, PORTB, (1<<SW_PLUS_PIN) | (1<<SW_MINUS_PIN) | (1<<SW_SET_PIN)
|
||||||
|
|
||||||
; **** ИНИЦИАЛИЗАЦИЯ ПРЕРЫВАНИЙ ********************************
|
; **** ИНИЦИАЛИЗАЦИЯ ПРЕРЫВАНИЙ ********************************
|
||||||
000063 e200
|
000069 e200
|
||||||
000064 bf0b outi r16, GIMSK, (1<<PCIE0)
|
00006a bf0b outi r16, GIMSK, (1<<PCIE0)
|
||||||
000065 e10c
|
00006b e10c
|
||||||
000066 bd00 outi r16, PCMSK0, (1<<PCINT2) | (1<<PCINT3) | (1<<PCINT4) ; прерывание для кнопок на нажатие
|
00006c bd00 outi r16, PCMSK0, (1<<PCINT2) | (1<<PCINT3) | (1<<PCINT4) ; прерывание для кнопок на нажатие
|
||||||
|
|
||||||
; **** ИНИЦИАЛИЗАЦИЯ ТАЙМЕРА 0 **********************************
|
; **** ИНИЦИАЛИЗАЦИЯ ТАЙМЕРА 0 **********************************
|
||||||
000067 e002
|
00006d e002
|
||||||
000068 bf00 outi r16, TCCR0A, (1<<WGM01) ; режим CTC Compare A
|
00006e bf00 outi r16, TCCR0A, (1<<WGM01) ; режим CTC Compare A
|
||||||
000069 e005
|
00006f e005
|
||||||
00006a bf03 outi r16, TCCR0B, (1<<CS02) | (1<<CS00) ; 1024 делитель
|
000070 bf03 outi r16, TCCR0B, (1<<CS02) | (1<<CS00) ; 1024 делитель
|
||||||
00006b e109
|
000071 e109
|
||||||
00006c bf06 outi r16, OCR0A, 25 ; число для сравнения. (60Hz)
|
000072 bf06 outi r16, OCR0A, 25 ; число для сравнения. (60Hz)
|
||||||
00006d e001
|
000073 e001
|
||||||
00006e bf09 outi r16, TIMSK, (1<<OCIE0A) ; включение прерывания по совпадению
|
000074 bf09 outi r16, TIMSK, (1<<OCIE0A) ; включение прерывания по совпадению
|
||||||
|
|
||||||
; **** ИНИЦИАЛИЗАЦИЯ USART *************************************
|
; **** ИНИЦИАЛИЗАЦИЯ USART *************************************
|
||||||
; outi r16, UBRRL, LOW(3) ; 9600 БОД
|
; outi r16, UBRRL, LOW(3) ; 9600 БОД
|
||||||
@ -954,17 +985,17 @@ firmware.asm(271): Including file 'usi.asm'
|
|||||||
; outi r16, UCSRB, (1<<RXEN) | (1<<TXEN) ; Включение приема и передачии
|
; outi r16, UCSRB, (1<<RXEN) | (1<<TXEN) ; Включение приема и передачии
|
||||||
; outi r16, UCSRC, (1<<UCSZ1) | (1<<UCSZ0) ; Асинхронный режим, 8 бит фрейм, 1 стоповый бит
|
; outi r16, UCSRC, (1<<UCSZ1) | (1<<UCSZ0) ; Асинхронный режим, 8 бит фрейм, 1 стоповый бит
|
||||||
|
|
||||||
00006f 2411 clr r1
|
000075 2411 clr r1
|
||||||
000070 9210 0067 sts CURRENT_DIGIT, r1
|
000076 9210 0067 sts CURRENT_DIGIT, r1
|
||||||
|
|
||||||
000072 e080
|
000078 e080
|
||||||
000073 e090 display_load 0 ; загружаем число, которое нужно показать на индикатор
|
000079 e090 display_load 0 ; загружаем число, которое нужно показать на индикатор
|
||||||
000074 d026 rcall _1_WIRE_DETECT_PRESENCE ; проверяем наличие датчика на шине путем выполнения процедуры сброса
|
; rcall _1_WIRE_DETECT_PRESENCE ; проверяем наличие датчика на шине путем выполнения процедуры сброса
|
||||||
000075 9478 sei
|
00007a 9478 sei
|
||||||
|
|
||||||
; **** ГЛАВНЫЙ ЦИКЛ **********************************************
|
; **** ГЛАВНЫЙ ЦИКЛ **********************************************
|
||||||
LOOP:
|
LOOP:
|
||||||
000076 d049 rcall DISPLAY_UPD_DIGITS ; получаем из этого числа цифры путем деления и распределяем их по ячейкам в SRAM
|
00007b d063 rcall DISPLAY_UPD_DIGITS ; получаем из этого числа цифры путем деления и распределяем их по ячейкам в SRAM
|
||||||
|
|
||||||
; usart_t:
|
; usart_t:
|
||||||
; sbis UCSRA, UDRE
|
; sbis UCSRA, UDRE
|
||||||
@ -977,20 +1008,21 @@ firmware.asm(271): Including file 'usi.asm'
|
|||||||
; rjmp usart_r
|
; rjmp usart_r
|
||||||
; in DISP_NUM_L, UDR
|
; in DISP_NUM_L, UDR
|
||||||
|
|
||||||
000077 fd70 sbrc ONE_WIRE_FLAGS, OWPRF
|
; sbrc ONE_WIRE_FLAGS, OWPRF
|
||||||
000078 9a96 sbi PORTD, PD6
|
; sbi PORTD, PD6
|
||||||
|
|
||||||
000079 ff70 sbrs ONE_WIRE_FLAGS, OWPRF
|
; sbrs ONE_WIRE_FLAGS, OWPRF
|
||||||
00007a 9896 cbi PORTD, PD6
|
; cbi PORTD, PD6
|
||||||
|
|
||||||
; rcall DELAY
|
00007c 9a96 sbi PORTD, PD6
|
||||||
; rcall DELAY
|
|
||||||
; rcall DELAY
|
|
||||||
; rcall DELAY
|
|
||||||
; rcall DELAY
|
|
||||||
; rcall DELAY
|
|
||||||
|
|
||||||
00007b cffa rjmp LOOP
|
00007d d08a rcall DEBOUNCE_SW
|
||||||
|
|
||||||
|
00007e 9896 cbi PORTD, PD6
|
||||||
|
|
||||||
|
00007f d088 rcall DEBOUNCE_SW
|
||||||
|
|
||||||
|
000080 cffa rjmp LOOP
|
||||||
|
|
||||||
; **** ПОДПРОГРАММЫ **********************************************
|
; **** ПОДПРОГРАММЫ **********************************************
|
||||||
.INCLUDE "div16u.asm"
|
.INCLUDE "div16u.asm"
|
||||||
@ -1026,36 +1058,36 @@ firmware.asm(271): Including file 'usi.asm'
|
|||||||
;***** Code
|
;***** Code
|
||||||
|
|
||||||
div16u:
|
div16u:
|
||||||
00007c 24ee clr drem16uL ; clear remainder Low byte
|
000081 24ee clr drem16uL ; clear remainder Low byte
|
||||||
00007d 18ff sub drem16uH,drem16uH ; clear remainder High byte and carry
|
000082 18ff sub drem16uH,drem16uH ; clear remainder High byte and carry
|
||||||
00007e e141 ldi dcnt16u,17 ; init loop counter
|
000083 e141 ldi dcnt16u,17 ; init loop counter
|
||||||
d16u_1:
|
d16u_1:
|
||||||
00007f 1f00 rol dd16uL ; shift left dividend
|
000084 1f00 rol dd16uL ; shift left dividend
|
||||||
000080 1f11 rol dd16uH
|
000085 1f11 rol dd16uH
|
||||||
000081 954a dec dcnt16u ; decrement counter
|
000086 954a dec dcnt16u ; decrement counter
|
||||||
000082 f409 brne d16u_2 ; if done
|
000087 f409 brne d16u_2 ; if done
|
||||||
000083 9508 ret ; return
|
000088 9508 ret ; return
|
||||||
d16u_2:
|
d16u_2:
|
||||||
000084 1cee rol drem16uL ; shift dividend into remainder
|
000089 1cee rol drem16uL ; shift dividend into remainder
|
||||||
000085 1cff rol drem16uH
|
00008a 1cff rol drem16uH
|
||||||
000086 1ae2 sub drem16uL,dv16uL ; remainder = remainder - divisor
|
00008b 1ae2 sub drem16uL,dv16uL ; remainder = remainder - divisor
|
||||||
000087 0af3 sbc drem16uH,dv16uH
|
00008c 0af3 sbc drem16uH,dv16uH
|
||||||
000088 f420 brcc d16u_3 ; if result negative
|
00008d f420 brcc d16u_3 ; if result negative
|
||||||
000089 0ee2 add drem16uL,dv16uL ; restore remainder
|
00008e 0ee2 add drem16uL,dv16uL ; restore remainder
|
||||||
00008a 1ef3 adc drem16uH,dv16uH
|
00008f 1ef3 adc drem16uH,dv16uH
|
||||||
00008b 9488 clc ; clear carry to be shifted into result
|
000090 9488 clc ; clear carry to be shifted into result
|
||||||
00008c cff2 rjmp d16u_1 ; else
|
000091 cff2 rjmp d16u_1 ; else
|
||||||
d16u_3:
|
d16u_3:
|
||||||
00008d 9408 sec ; set carry to be shifted into result
|
000092 9408 sec ; set carry to be shifted into result
|
||||||
.INCLUDE "usi.asm"
|
.INCLUDE "usi.asm"
|
||||||
00008e cff0
|
000093 cff0
|
||||||
USI_TRANSMIT:
|
USI_TRANSMIT:
|
||||||
00008f 930f push r16
|
000094 930f push r16
|
||||||
000090 b80f out USIDR, r0 ; Байт для отправки всегда находится в регистре r0. Помещаем данные в регистр USIDR.
|
000095 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)
|
||||||
000091 e400 ldi TEMP_REG_A, (1<<USIOIF)
|
000096 e400 ldi TEMP_REG_A, (1<<USIOIF)
|
||||||
000092 b90e out USISR, TEMP_REG_A
|
000097 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)
|
||||||
@ -1065,170 +1097,236 @@ firmware.asm(271): Including file 'usi.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)
|
||||||
000093 e10b ldi TEMP_REG_A, (1<<USIWM0) | (1<<USICS1) | (1<<USICLK) | (1<<USITC)
|
000098 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
|
||||||
000094 b90d out USICR, TEMP_REG_A ; Load settings from temp register into USI Control Register
|
000099 b90d out USICR, TEMP_REG_A ; Load settings from temp register into USI Control Register
|
||||||
000095 9b76 sbis USISR, USIOIF ; If transfer is comleted then move out of loop
|
00009a 9b76 sbis USISR, USIOIF ; If transfer is comleted then move out of loop
|
||||||
000096 cffd rjmp _USI_TRANSMIT_LOOP
|
00009b 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
|
||||||
000097 9ac0 sbi PORTB, USI_LATCH_PIN
|
00009c 9ac0 sbi PORTB, USI_LATCH_PIN
|
||||||
000098 98c0 cbi PORTB, USI_LATCH_PIN
|
00009d 98c0 cbi PORTB, USI_LATCH_PIN
|
||||||
000099 910f pop r16
|
00009e 910f pop r16
|
||||||
00009a 9508
|
00009f 9508
|
||||||
; **** ОПРОС ПРИСУТСТВИЯ УСТРОЙСТВА ******************************
|
; **** ОПРОС ПРИСУТСТВИЯ УСТРОЙСТВА ******************************
|
||||||
_1_WIRE_DETECT_PRESENCE:
|
_1_WIRE_DETECT_PRESENCE:
|
||||||
00009b 94f8 cli ; Шаг 1. выключаем глобальные прерывания
|
0000a0 94f8 cli ; Шаг 1. выключаем глобальные прерывания
|
||||||
|
|
||||||
; 62 тика
|
; 62 тика
|
||||||
00009c e000
|
0000a1 e000
|
||||||
00009d bd0c outi r16, TCNT1L, 0
|
0000a2 bd0c outi r16, TCNT1L, 0
|
||||||
00009e e30c
|
0000a3 e30c
|
||||||
00009f bd0a outi r16, OCR1AL, 60 ; 480 мкс
|
0000a4 bd0a outi r16, OCR1AL, 60 ; 480 мкс
|
||||||
0000a0 e405
|
0000a5 e405
|
||||||
0000a1 bd08 outi r16, OCR1BL, 69 ; 72 мкс
|
0000a6 bd08 outi r16, OCR1BL, 69 ; 72 мкс
|
||||||
|
|
||||||
; предделитель 64
|
; предделитель 64
|
||||||
0000a2 e003
|
0000a7 e003
|
||||||
0000a3 bd0e outi r16, TCCR1B, (1<<CS11) | (1<<CS10)
|
0000a8 bd0e outi r16, TCCR1B, (1<<CS11) | (1<<CS10)
|
||||||
|
|
||||||
0000a4 9ab9 S1: _1_wire_pull ; Шаг 2. притягиваем шину
|
0000a9 9ab9 _1_wire_pull ; Шаг 2. притягиваем шину
|
||||||
0000a5 b708 in r16, TIFR
|
|
||||||
0000a6 ff06 sbrs r16, OCF1A ; Шаг 3. ждем минимум 480мкс
|
|
||||||
0000a7 cffc rjmp S1
|
|
||||||
0000a8 98b9 _1_wire_release ; Шаг 4. отпускаем шину
|
|
||||||
0000a9 b708 S2: in r16, TIFR
|
|
||||||
0000aa ff05 sbrs r16, OCF1B ; Шаг 5. ждем +- 70мкс
|
|
||||||
0000ab cffd rjmp S2
|
|
||||||
0000ac d00d rcall _1_WIRE_CHECK_PRESENCE ; Шаг 6. проверяем есть ли устройство на шине, и если есть то устанавливаем флаг
|
|
||||||
|
|
||||||
0000ad e000
|
S1:
|
||||||
0000ae bd0c outi r16, TCNT1L, 0
|
0000aa b708 in r16, TIFR
|
||||||
0000af e304
|
0000ab ff06 sbrs r16, OCF1A ; Шаг 3. ждем минимум 480мкс
|
||||||
0000b0 bd0a outi r16, OCR1AL, 52 ; 416 мкс
|
0000ac cffd rjmp S1
|
||||||
|
0000ad 98b9 _1_wire_release ; Шаг 4. отпускаем шину
|
||||||
|
0000ae b708 S2: in r16, TIFR
|
||||||
|
0000af ff05 sbrs r16, OCF1B ; Шаг 5. ждем +- 70мкс
|
||||||
|
0000b0 cffd rjmp S2
|
||||||
|
0000b1 d00d rcall _1_WIRE_CHECK_PRESENCE ; Шаг 6. проверяем есть ли устройство на шине, и если есть то устанавливаем флаг
|
||||||
|
|
||||||
|
0000b2 e000
|
||||||
|
0000b3 bd0c outi r16, TCNT1L, 0
|
||||||
|
0000b4 e304
|
||||||
|
0000b5 bd0a outi r16, OCR1AL, 52 ; 416 мкс
|
||||||
S3:
|
S3:
|
||||||
0000b1 b708 in r16, TIFR
|
0000b6 b708 in r16, TIFR
|
||||||
0000b2 ff06 sbrs r16, OCF1A
|
0000b7 ff06 sbrs r16, OCF1A
|
||||||
0000b3 cffd rjmp S3
|
0000b8 cffd rjmp S3
|
||||||
0000b4 2700 clr r16
|
0000b9 2700 clr r16
|
||||||
0000b5 bd0e out TCCR1B, r16
|
0000ba bd0e out TCCR1B, r16
|
||||||
0000b6 ef0f ser r16
|
0000bb ef0f ser r16
|
||||||
0000b7 bf08 out TIFR, r16
|
0000bc bf08 out TIFR, r16
|
||||||
; s3: in r16, TIFR
|
; s3: in r16, TIFR
|
||||||
; sbrs r16, TOV1
|
; sbrs r16, TOV1
|
||||||
; rjmp s3
|
; rjmp s3
|
||||||
; rcall TOV1_occured
|
; rcall TOV1_occured
|
||||||
; ser r16
|
; ser r16
|
||||||
; out TIFR, r16
|
; out TIFR, r16
|
||||||
0000b8 9478 sei
|
0000bd 9478 sei
|
||||||
0000b9 9508 ret
|
0000be 9508 ret
|
||||||
|
|
||||||
; **** ПРОВЕРКА НАЛИЧИЯ УСТРОЙСТВА *******************************
|
; **** ПРОВЕРКА НАЛИЧИЯ УСТРОЙСТВА *******************************
|
||||||
; Если подчиненное устройство притянет шину, то устанавливаем флаг OWPRF в единицу в регистре флагов
|
; Если подчиненное устройство притянет шину, то устанавливаем флаг OWPRF в единицу в регистре флагов
|
||||||
;
|
;
|
||||||
_1_WIRE_CHECK_PRESENCE:
|
_1_WIRE_CHECK_PRESENCE:
|
||||||
0000ba 9bb1 sbis ONE_WIRE_PIN, ONE_WIRE_LINE
|
0000bf 9bb1 sbis ONE_WIRE_PIN, ONE_WIRE_LINE
|
||||||
0000bb 6071 sbr ONE_WIRE_FLAGS, (1<<OWPRF)
|
0000c0 6071 sbr ONE_WIRE_FLAGS, (1<<OWPRF)
|
||||||
0000bc 9508 ret
|
0000c1 9508 ret
|
||||||
|
|
||||||
|
_1_WIRE_SEND_BYTE:
|
||||||
|
0000c2 931f push r17
|
||||||
|
0000c3 e313 ldi r17, DS18B20_CMD_READROM
|
||||||
|
0000c4 e008 ldi r16, 8
|
||||||
|
_s_l:
|
||||||
|
; rol r16
|
||||||
|
; brcc
|
||||||
|
0000c5 911f pop r17
|
||||||
|
0000c6 9508 ret
|
||||||
|
|
||||||
|
.DEF TRANSMIT_BIT = r9
|
||||||
_1_WIRE_SEND_BIT:
|
_1_WIRE_SEND_BIT:
|
||||||
0000bd 94f8 cli
|
0000c7 930f push r16
|
||||||
|
0000c8 94f8 cli
|
||||||
|
0000c9 6072 sbr ONE_WIRE_FLAGS, (1<<OWSB)
|
||||||
|
0000ca e000
|
||||||
|
0000cb bd0c outi r16, TCNT1L, 0
|
||||||
|
0000cc e001
|
||||||
|
0000cd bd0a outi r16, OCR1AL, 1 ; 8 мкс
|
||||||
|
0000ce e009
|
||||||
|
0000cf bd08 outi r16, OCR1BL, 9 ; 64 мкс
|
||||||
|
|
||||||
0000be 9478 sei
|
0000d0 9ab9 _1_wire_pull
|
||||||
0000bf 9508 ret
|
SB_1:
|
||||||
|
0000d1 b708 in r16, TIFR
|
||||||
|
0000d2 ff06 sbrs r16, OCF1A
|
||||||
|
0000d3 cffd rjmp SB_1
|
||||||
|
0000d4 fc90 sbrc TRANSMIT_BIT, 0
|
||||||
|
0000d5 98b9 _1_wire_release
|
||||||
|
SB_2:
|
||||||
|
0000d6 b708 in r16, TIFR
|
||||||
|
0000d7 ff05 sbrs r16, OCF1B
|
||||||
|
0000d8 cffd rjmp SB_2
|
||||||
|
|
||||||
|
0000d9 2700 clr r16
|
||||||
|
0000da bd0e out TCCR1B, r16
|
||||||
|
0000db 7f7d cbr ONE_WIRE_FLAGS, (1<<OWSB)
|
||||||
|
0000dc 9478 sei
|
||||||
|
0000dd 910f pop r16
|
||||||
|
0000de 9508 ret
|
||||||
|
|
||||||
; **** ПОЛУЧЕНИЕ ЦИФР ИЗ 16-ТИ БИТНОГО ЧИСЛА *********************
|
; **** ПОЛУЧЕНИЕ ЦИФР ИЗ 16-ТИ БИТНОГО ЧИСЛА *********************
|
||||||
; Описание: Перемещает цифры числа в соответствующие ячейки памяти в SRAM
|
; Описание: Перемещает цифры числа в соответствующие ячейки памяти в SRAM
|
||||||
; путем деления этого числа несколько раз
|
; путем деления этого числа несколько раз
|
||||||
DISPLAY_UPD_DIGITS:
|
DISPLAY_UPD_DIGITS:
|
||||||
0000c0 935f push r21
|
0000df 94f8 cli
|
||||||
0000c1 e054 ldi r21, 4 ; максимум 4 цифры, т.к индикатор четырех разрядный
|
0000e0 935f push r21
|
||||||
0000c2 e6a3 ldi XL, LOW(DIGITS)
|
0000e1 e054 ldi r21, 4 ; (4 раза делим) т.к индикатор четырех разрядный
|
||||||
0000c3 e0b0 ldi XH, HIGH(DIGITS)
|
|
||||||
|
|
||||||
.equ dividend = SRAM_TEMP_1
|
; инициализация указателя (за каждый проход цикла будет инкрементироваться)
|
||||||
.equ divisor = 10
|
0000e2 e6a3 ldi XL, LOW(DIGITS)
|
||||||
|
0000e3 e0b0 ldi XH, HIGH(DIGITS)
|
||||||
|
|
||||||
|
.equ dividend = SRAM_TEMP_1 ; число которе будем делить
|
||||||
|
.equ divisor = 10 ; на что делим
|
||||||
|
|
||||||
; загружаем число которое хотим поделить в адрес SRAM делимого
|
; загружаем число которое хотим поделить в адрес SRAM делимого
|
||||||
0000c4 9380 0061 sts dividend, DISP_NUM_L
|
0000e4 9380 0061 sts dividend, DISP_NUM_L
|
||||||
0000c6 9390 0062 sts dividend+1, DISP_NUM_H
|
0000e6 9390 0062 sts dividend+1, DISP_NUM_H
|
||||||
|
|
||||||
; четыре раза производим деление для получения остатков
|
; четыре раза производим деление для получения остатков
|
||||||
DIV_LOOP:
|
DIV_LOOP:
|
||||||
; заполняем нужные регистры
|
; заполняем нужные регистры
|
||||||
0000c8 9100 0061 lds dd16uL, dividend
|
0000e8 9100 0061 lds dd16uL, dividend
|
||||||
0000ca 9110 0062 lds dd16uH, dividend+1
|
0000ea 9110 0062 lds dd16uH, dividend+1
|
||||||
0000cc e02a ldi dv16uL, LOW(divisor)
|
0000ec e02a ldi dv16uL, LOW(divisor)
|
||||||
0000cd e030 ldi dv16uH, HIGH(divisor)
|
0000ed e030 ldi dv16uH, HIGH(divisor)
|
||||||
|
|
||||||
0000ce dfad rcall div16u ; делим
|
0000ee df92 rcall div16u ; делим
|
||||||
|
|
||||||
0000cf 92ed st X+, drem16uL ; сохраняем остаток в ячейку по указателю
|
0000ef 92ed st X+, drem16uL ; сохраняем остаток в ячейку по указателю и увеличиваем его
|
||||||
|
|
||||||
; обновляем делимое
|
; обновляем делимое
|
||||||
0000d0 9300 0061 sts dividend, dres16uL
|
0000f0 9300 0061 sts dividend, dres16uL
|
||||||
0000d2 9310 0062 sts dividend+1, dres16uH
|
0000f2 9310 0062 sts dividend+1, dres16uH
|
||||||
|
|
||||||
0000d4 955a dec r21 ; декрементируем счетчик цикла
|
0000f4 955a dec r21 ; декрементируем счетчик цикла
|
||||||
0000d5 f791 brne DIV_LOOP ; делим еще раз если не 0
|
0000f5 f791 brne DIV_LOOP ; делим еще раз если не 0
|
||||||
0000d6 915f pop r21
|
0000f6 915f pop r21
|
||||||
0000d7 9508 ret
|
0000f7 9478 sei
|
||||||
|
0000f8 9508 ret
|
||||||
|
|
||||||
; **** ЗАГРУЖАЕТ НУЖНЫЙ АДРЕС СИМВОЛА В R0 ***********************
|
; **** ЗАГРУЖАЕТ НУЖНЫЙ АДРЕС СИМВОЛА В R0 ***********************
|
||||||
DISPLAY_DECODER:
|
DISPLAY_DECODER:
|
||||||
0000d8 930f push r16
|
0000f9 930f push r16
|
||||||
0000d9 931f push r17
|
0000fa 931f push r17
|
||||||
0000da eeea ldi ZL, LOW(2*DISPLAY_SYMBOLS)
|
0000fb e4ec ldi ZL, LOW(2*DISPLAY_SYMBOLS)
|
||||||
0000db e0f1 ldi ZH, HIGH(2*DISPLAY_SYMBOLS)
|
0000fc e0f2 ldi ZH, HIGH(2*DISPLAY_SYMBOLS)
|
||||||
|
|
||||||
0000dc 2711 clr TEMP_REG_B
|
0000fd 2711 clr TEMP_REG_B
|
||||||
0000dd 0fe0 add ZL, TEMP_REG_A
|
0000fe 0fe0 add ZL, TEMP_REG_A
|
||||||
0000de 1ff1 adc ZH, TEMP_REG_B
|
0000ff 1ff1 adc ZH, TEMP_REG_B
|
||||||
|
|
||||||
0000df 9004 lpm r0, Z
|
000100 9004 lpm r0, Z
|
||||||
0000e0 911f pop r17
|
000101 911f pop r17
|
||||||
0000e1 910f pop r16
|
000102 910f pop r16
|
||||||
0000e2 9508 ret
|
000103 9508 ret
|
||||||
|
|
||||||
DELAY_68us:
|
DELAY_68us:
|
||||||
0000e3 eb03 ldi r16, 179 ; 1
|
000104 eb03 ldi r16, 179 ; 1
|
||||||
_d1_loop:
|
_d1_loop:
|
||||||
0000e4 950a dec r16 ; 1
|
000105 950a dec r16 ; 1
|
||||||
0000e5 f7f1 brne _d1_loop ; 2/1
|
000106 f7f1 brne _d1_loop ; 2/1
|
||||||
0000e6 9508 ret ; 4
|
000107 9508 ret ; 4
|
||||||
|
|
||||||
|
DEBOUNCE_SW:
|
||||||
|
000108 930f push r16
|
||||||
|
000109 931f push r17
|
||||||
|
00010a 932f push r18
|
||||||
|
|
||||||
|
00010b e025 ldi r18, 5
|
||||||
|
_loop_2:
|
||||||
|
00010c ef1f ldi r17, 255
|
||||||
|
_loop_0:
|
||||||
|
00010d ef0f ldi r16, 255
|
||||||
|
_dec_0:
|
||||||
|
00010e 950a dec r16
|
||||||
|
00010f f7f1 brne _dec_0
|
||||||
|
_loop_1:
|
||||||
|
000110 951a dec r17
|
||||||
|
000111 f7d9 brne _loop_0
|
||||||
|
_loop_3:
|
||||||
|
000112 952a dec r18
|
||||||
|
000113 f7c1 brne _loop_2
|
||||||
|
|
||||||
|
000114 912f pop r18
|
||||||
|
000115 911f pop r17
|
||||||
|
000116 910f pop r16
|
||||||
|
000117 9508 ret
|
||||||
|
|
||||||
DELAY:
|
DELAY:
|
||||||
0000e7 930f push r16
|
000118 930f push r16
|
||||||
0000e8 931f push r17
|
000119 931f push r17
|
||||||
|
|
||||||
0000e9 ef0f ldi r16, 255
|
00011a ef0f ldi r16, 255
|
||||||
_DELAY_1:
|
_DELAY_1:
|
||||||
0000ea ef1f ldi r17, 255
|
00011b ef1f ldi r17, 255
|
||||||
_DELAY_2:
|
_DELAY_2:
|
||||||
0000eb 951a dec r17
|
00011c 951a dec r17
|
||||||
0000ec 0000 nop
|
00011d 0000 nop
|
||||||
0000ed 0000 nop
|
00011e 0000 nop
|
||||||
0000ee 0000 nop
|
00011f 0000 nop
|
||||||
0000ef f7d9 brne _DELAY_2
|
000120 f7d9 brne _DELAY_2
|
||||||
|
|
||||||
0000f0 950a dec r16
|
000121 950a dec r16
|
||||||
0000f1 f7c1 brne _DELAY_1
|
000122 f7c1 brne _DELAY_1
|
||||||
|
|
||||||
0000f2 911f pop r17
|
000123 911f pop r17
|
||||||
0000f3 910f pop r16
|
000124 910f pop r16
|
||||||
0000f4 9508 ret
|
000125 9508 ret
|
||||||
|
|
||||||
DISPLAY_SYMBOLS:
|
DISPLAY_SYMBOLS:
|
||||||
; HGFEDCBA HGFEDCBA
|
; HGFEDCBA HGFEDCBA
|
||||||
0000f5 f9c0 .DB 0b11000000, 0b11111001 ; 0, 1
|
000126 f9c0 .DB 0b11000000, 0b11111001 ; 0, 1
|
||||||
0000f6 b0a4 .DB 0b10100100, 0b10110000 ; 2, 3
|
000127 b0a4 .DB 0b10100100, 0b10110000 ; 2, 3
|
||||||
0000f7 9299 .DB 0b10011001, 0b10010010 ; 4, 5
|
000128 9299 .DB 0b10011001, 0b10010010 ; 4, 5
|
||||||
0000f8 f882 .DB 0b10000010, 0b11111000 ; 6, 7
|
000129 f882 .DB 0b10000010, 0b11111000 ; 6, 7
|
||||||
0000f9 9080 .DB 0b10000000, 0b10010000 ; 8, 9
|
00012a 9080 .DB 0b10000000, 0b10010000 ; 8, 9
|
||||||
firmware.asm(416): warning: .cseg .db misalignment - padding zero byte
|
firmware.asm(511): warning: .cseg .db misalignment - padding zero byte
|
||||||
0000fa 009c .DB 0b10011100 ; °
|
00012b 009c .DB 0b10011100 ; °
|
||||||
|
|
||||||
; **** СЕГМЕНТ EEPROM ********************************************
|
; **** СЕГМЕНТ EEPROM ********************************************
|
||||||
; .ESEG
|
; .ESEG
|
||||||
@ -1250,38 +1348,38 @@ counted separately from r26..r31 here.
|
|||||||
|
|
||||||
"ATtiny2313A" register use summary:
|
"ATtiny2313A" register use summary:
|
||||||
x : 1 y : 0 z : 1 r0 : 2 r1 : 2 r2 : 0 r3 : 0 r4 : 0
|
x : 1 y : 0 z : 1 r0 : 2 r1 : 2 r2 : 0 r3 : 0 r4 : 0
|
||||||
r5 : 0 r6 : 0 r7 : 0 r8 : 0 r9 : 0 r10: 0 r11: 0 r12: 0
|
r5 : 0 r6 : 0 r7 : 0 r8 : 0 r9 : 1 r10: 0 r11: 0 r12: 0
|
||||||
r13: 0 r14: 5 r15: 5 r16: 70 r17: 11 r18: 3 r19: 3 r20: 14
|
r13: 0 r14: 5 r15: 5 r16: 89 r17: 23 r18: 11 r19: 7 r20: 14
|
||||||
r21: 8 r22: 0 r23: 3 r24: 5 r25: 2 r26: 1 r27: 1 r28: 0
|
r21: 8 r22: 0 r23: 3 r24: 3 r25: 2 r26: 1 r27: 1 r28: 0
|
||||||
r29: 0 r30: 2 r31: 2
|
r29: 0 r30: 2 r31: 2
|
||||||
Registers used: 19 out of 35 (54.3%)
|
Registers used: 20 out of 35 (57.1%)
|
||||||
|
|
||||||
"ATtiny2313A" instruction use summary:
|
"ATtiny2313A" instruction use summary:
|
||||||
.lds : 0 .sts : 0 adc : 2 add : 2 adiw : 3 and : 0
|
.lds : 0 .sts : 0 adc : 2 add : 2 adiw : 1 and : 0
|
||||||
andi : 0 asr : 0 bclr : 0 bld : 0 brbc : 0 brbs : 0
|
andi : 0 asr : 0 bclr : 0 bld : 0 brbc : 0 brbs : 0
|
||||||
brcc : 1 brcs : 0 break : 0 breq : 0 brge : 1 brhc : 0
|
brcc : 1 brcs : 0 break : 0 breq : 0 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 : 9 brpl : 0 brsh : 0 brtc : 0 brts : 0 brvc : 0
|
brne : 12 brpl : 0 brsh : 0 brtc : 0 brts : 0 brvc : 0
|
||||||
brvs : 0 bset : 0 bst : 0 cbi : 15 cbr : 0 clc : 1
|
brvs : 0 bset : 0 bst : 0 cbi : 16 cbr : 1 clc : 1
|
||||||
clh : 0 cli : 2 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 : 5
|
clv : 0 clz : 0 com : 0 cp : 0 cpc : 0 cpi : 5
|
||||||
cpse : 0 dec : 5 eor : 0 icall : 0 ijmp : 0 in : 5
|
cpse : 0 dec : 8 eor : 1 icall : 0 ijmp : 0 in : 9
|
||||||
inc : 1 ld : 0 ldd : 0 ldi : 31 lds : 7 lpm : 2
|
inc : 1 ld : 0 ldd : 0 ldi : 39 lds : 8 lpm : 2
|
||||||
lsl : 0 lsr : 0 mov : 0 movw : 0 neg : 0 nop : 3
|
lsl : 0 lsr : 0 mov : 0 movw : 0 neg : 0 nop : 3
|
||||||
or : 0 ori : 0 out : 23 pop : 10 push : 10 rcall : 12
|
or : 0 ori : 0 out : 27 pop : 18 push : 18 rcall : 13
|
||||||
ret : 9 reti : 2 rjmp : 17 rol : 4 ror : 0 sbc : 1
|
ret : 11 reti : 2 rjmp : 15 rol : 4 ror : 0 sbc : 1
|
||||||
sbci : 0 sbi : 7 sbic : 0 sbis : 5 sbiw : 0 sbr : 1
|
sbci : 0 sbi : 8 sbic : 0 sbis : 3 sbiw : 0 sbr : 2
|
||||||
sbrc : 1 sbrs : 4 sec : 1 seh : 0 sei : 3 sen : 0
|
sbrc : 1 sbrs : 6 sec : 1 seh : 0 sei : 4 sen : 0
|
||||||
ser : 1 ses : 0 set : 0 sev : 0 sez : 0 sleep : 0
|
ser : 1 ses : 0 set : 0 sev : 0 sez : 0 sleep : 0
|
||||||
spm : 0 st : 1 std : 0 sts : 7 sub : 2 subi : 0
|
spm : 0 st : 1 std : 0 sts : 8 sub : 2 subi : 0
|
||||||
swap : 0 tst : 0 wdr : 0
|
swap : 0 tst : 0 wdr : 0
|
||||||
Instructions used: 38 out of 105 (36.2%)
|
Instructions used: 40 out of 105 (38.1%)
|
||||||
|
|
||||||
"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 0x0001f6 468 12 480 2048 23.4%
|
[.cseg] 0x000000 0x000258 566 12 578 2048 28.2%
|
||||||
[.dseg] 0x000060 0x000068 0 8 8 128 6.3%
|
[.dseg] 0x000060 0x000069 0 9 9 128 7.0%
|
||||||
[.eseg] 0x000000 0x000000 0 0 0 128 0.0%
|
[.eseg] 0x000000 0x000000 0 0 0 128 0.0%
|
||||||
|
|
||||||
Assembly complete, 0 errors, 5 warnings
|
Assembly complete, 0 errors, 5 warnings
|
||||||
|
|||||||
184
firmware.asm
184
firmware.asm
@ -16,7 +16,6 @@
|
|||||||
|
|
||||||
.DEF TEMP_REG_A = r16
|
.DEF TEMP_REG_A = r16
|
||||||
.DEF TEMP_REG_B = r17
|
.DEF TEMP_REG_B = r17
|
||||||
.DEF ONE_WIRE_FLAGS = r23 ; Флаги состояния для 1-Wire интерфейса
|
|
||||||
.DEF DISP_NUM_L = r24 ; LSB числа которое сейчас на индикаторе
|
.DEF DISP_NUM_L = r24 ; LSB числа которое сейчас на индикаторе
|
||||||
.DEF DISP_NUM_H = r25 ; MSB числа которое сейчас на индикаторе
|
.DEF DISP_NUM_H = r25 ; MSB числа которое сейчас на индикаторе
|
||||||
|
|
||||||
@ -30,7 +29,9 @@
|
|||||||
.EQU ONE_WIRE_LINE = PB1 ; Пин шины 1-Wire
|
.EQU ONE_WIRE_LINE = PB1 ; Пин шины 1-Wire
|
||||||
.EQU ONE_WIRE_DDR = DDRB
|
.EQU ONE_WIRE_DDR = DDRB
|
||||||
.EQU ONE_WIRE_PIN = PINB
|
.EQU ONE_WIRE_PIN = PINB
|
||||||
|
.DEF ONE_WIRE_FLAGS = r23 ; Флаги состояния для 1-Wire интерфейса
|
||||||
.EQU OWPRF = 0 ; 1-Wire Флаг присутствия
|
.EQU OWPRF = 0 ; 1-Wire Флаг присутствия
|
||||||
|
.EQU OWSB = 1 ; Флаг передачи одного бита
|
||||||
|
|
||||||
; **** КОМАНДЫ ДАТЧИКА *****************************************
|
; **** КОМАНДЫ ДАТЧИКА *****************************************
|
||||||
.EQU DS18B20_CMD_CONVERTTEMP = 0x44
|
.EQU DS18B20_CMD_CONVERTTEMP = 0x44
|
||||||
@ -49,6 +50,8 @@
|
|||||||
.EQU USI_DO_PIN = PB6 ; DS на 74HC595
|
.EQU USI_DO_PIN = PB6 ; DS на 74HC595
|
||||||
.EQU USI_CLK_PIN = PB7 ; SH_CP на 74HC595
|
.EQU USI_CLK_PIN = PB7 ; SH_CP на 74HC595
|
||||||
|
|
||||||
|
.EQU SW_PORT = PORTB
|
||||||
|
.EQU SW_PIN = PINB
|
||||||
.EQU SW_PLUS_PIN = PB2 ; Кнопка "Минус"
|
.EQU SW_PLUS_PIN = PB2 ; Кнопка "Минус"
|
||||||
.EQU SW_MINUS_PIN = PB3 ; Кнопка "Плюс"
|
.EQU SW_MINUS_PIN = PB3 ; Кнопка "Плюс"
|
||||||
.EQU SW_SET_PIN = PB4 ; Кнопка "Установить"
|
.EQU SW_SET_PIN = PB4 ; Кнопка "Установить"
|
||||||
@ -84,6 +87,7 @@ MCU_STATE: .BYTE 1 ; Текущее состояние
|
|||||||
SRAM_TEMP_1: .BYTE 2 ; Хранения временного 16-бит числа в ячейке
|
SRAM_TEMP_1: .BYTE 2 ; Хранения временного 16-бит числа в ячейке
|
||||||
DIGITS: .BYTE 4 ; Ячейки, где хранятся символы, для вывода на индикатор
|
DIGITS: .BYTE 4 ; Ячейки, где хранятся символы, для вывода на индикатор
|
||||||
CURRENT_DIGIT: .BYTE 1 ; Номер разряда индикатора, который сейчас горит
|
CURRENT_DIGIT: .BYTE 1 ; Номер разряда индикатора, который сейчас горит
|
||||||
|
PC_HISTORY: .BYTE 1 ; История изменений состояния кнопок (необходимо для прерываня по изменению состояния пина)
|
||||||
|
|
||||||
; **** СЕГМЕНТ КОДА **********************************************
|
; **** СЕГМЕНТ КОДА **********************************************
|
||||||
.CSEG
|
.CSEG
|
||||||
@ -107,10 +111,10 @@ TIMER0_COMPA_vect:
|
|||||||
|
|
||||||
lds r20, CURRENT_DIGIT
|
lds r20, CURRENT_DIGIT
|
||||||
cpi r20, 5
|
cpi r20, 5
|
||||||
brge reset_digit_idx
|
brge _CLR_CURRENT_DIGIT ; сброс активного разряда если >= 5
|
||||||
rjmp _indicate_1
|
rjmp _indicate_1
|
||||||
|
|
||||||
reset_digit_idx:
|
_CLR_CURRENT_DIGIT: ; сброс текущего активного разряда в ноль
|
||||||
clr r20
|
clr r20
|
||||||
sts CURRENT_DIGIT, r20
|
sts CURRENT_DIGIT, r20
|
||||||
|
|
||||||
@ -174,31 +178,58 @@ reti
|
|||||||
|
|
||||||
; **** ОБРАБОТКА КНОПОК ******************************************
|
; **** ОБРАБОТКА КНОПОК ******************************************
|
||||||
PCINT0_vect:
|
PCINT0_vect:
|
||||||
push r16
|
push r16
|
||||||
in r16, SREG
|
push r17
|
||||||
|
push r18
|
||||||
|
push r19
|
||||||
|
|
||||||
sbis PINB, SW_PLUS_PIN
|
in r16, SREG
|
||||||
rjmp _sw_plus
|
|
||||||
|
|
||||||
sbis PINB, SW_MINUS_PIN
|
in r17, SW_PIN
|
||||||
rjmp _sw_minus
|
lds r18, PC_HISTORY
|
||||||
|
|
||||||
sbis PINB, SW_SET_PIN
|
eor r17, r18
|
||||||
rjmp _sw_set
|
in r19, SW_PIN
|
||||||
|
sts PC_HISTORY, r19
|
||||||
|
|
||||||
rjmp _sw_exit
|
_SW_PLUS_CHECK:
|
||||||
_sw_plus:
|
sbrs r17, SW_PLUS_PIN
|
||||||
adiw DISP_NUM_L, 1
|
rjmp _SW_EXIT
|
||||||
rjmp _sw_exit
|
rjmp _SW_PLUS_HANDLER
|
||||||
_sw_minus:
|
|
||||||
adiw DISP_NUM_L, 10
|
|
||||||
rjmp _sw_exit
|
|
||||||
_sw_set:
|
|
||||||
adiw DISP_NUM_L, 63
|
|
||||||
_sw_exit:
|
|
||||||
|
|
||||||
out SREG, r16
|
_SW_PLUS_HANDLER:
|
||||||
pop r16
|
; rcall DEBOUNCE_SW
|
||||||
|
sbis SW_PIN, SW_PLUS_PIN
|
||||||
|
adiw DISP_NUM_L, 1
|
||||||
|
;exit
|
||||||
|
|
||||||
|
|
||||||
|
; sbis PINB, SW_PLUS_PIN
|
||||||
|
; rjmp _sw_plus
|
||||||
|
|
||||||
|
; sbis PINB, SW_MINUS_PIN
|
||||||
|
; rjmp _sw_minus
|
||||||
|
|
||||||
|
; sbis PINB, SW_SET_PIN
|
||||||
|
; rjmp _sw_set
|
||||||
|
|
||||||
|
; rjmp _sw_exit
|
||||||
|
; _sw_plus:
|
||||||
|
; adiw DISP_NUM_L, 1
|
||||||
|
; rjmp _sw_exit
|
||||||
|
; _sw_minus:
|
||||||
|
; adiw DISP_NUM_L, 10
|
||||||
|
; rjmp _sw_exit
|
||||||
|
; _sw_set:
|
||||||
|
; adiw DISP_NUM_L, 63
|
||||||
|
; _sw_exit:
|
||||||
|
|
||||||
|
_SW_EXIT:
|
||||||
|
out SREG, r16
|
||||||
|
pop r19
|
||||||
|
pop r18
|
||||||
|
pop r17
|
||||||
|
pop r16
|
||||||
reti
|
reti
|
||||||
|
|
||||||
; **** СТАРТ ПРОГРАММЫ *******************************************
|
; **** СТАРТ ПРОГРАММЫ *******************************************
|
||||||
@ -230,10 +261,10 @@ MCU_INIT:
|
|||||||
; outi r16, UCSRC, (1<<UCSZ1) | (1<<UCSZ0) ; Асинхронный режим, 8 бит фрейм, 1 стоповый бит
|
; outi r16, UCSRC, (1<<UCSZ1) | (1<<UCSZ0) ; Асинхронный режим, 8 бит фрейм, 1 стоповый бит
|
||||||
|
|
||||||
clr r1
|
clr r1
|
||||||
sts CURRENT_DIGIT, r1
|
sts CURRENT_DIGIT, r1
|
||||||
|
|
||||||
display_load 0 ; загружаем число, которое нужно показать на индикатор
|
display_load 0 ; загружаем число, которое нужно показать на индикатор
|
||||||
rcall _1_WIRE_DETECT_PRESENCE ; проверяем наличие датчика на шине путем выполнения процедуры сброса
|
; rcall _1_WIRE_DETECT_PRESENCE ; проверяем наличие датчика на шине путем выполнения процедуры сброса
|
||||||
sei
|
sei
|
||||||
|
|
||||||
; **** ГЛАВНЫЙ ЦИКЛ **********************************************
|
; **** ГЛАВНЫЙ ЦИКЛ **********************************************
|
||||||
@ -251,18 +282,19 @@ LOOP:
|
|||||||
; rjmp usart_r
|
; rjmp usart_r
|
||||||
; in DISP_NUM_L, UDR
|
; in DISP_NUM_L, UDR
|
||||||
|
|
||||||
sbrc ONE_WIRE_FLAGS, OWPRF
|
; sbrc ONE_WIRE_FLAGS, OWPRF
|
||||||
sbi PORTD, PD6
|
; sbi PORTD, PD6
|
||||||
|
|
||||||
sbrs ONE_WIRE_FLAGS, OWPRF
|
; sbrs ONE_WIRE_FLAGS, OWPRF
|
||||||
cbi PORTD, PD6
|
; cbi PORTD, PD6
|
||||||
|
|
||||||
; rcall DELAY
|
sbi PORTD, PD6
|
||||||
; rcall DELAY
|
|
||||||
; rcall DELAY
|
rcall DEBOUNCE_SW
|
||||||
; rcall DELAY
|
|
||||||
; rcall DELAY
|
cbi PORTD, PD6
|
||||||
; rcall DELAY
|
|
||||||
|
rcall DEBOUNCE_SW
|
||||||
|
|
||||||
rjmp LOOP
|
rjmp LOOP
|
||||||
|
|
||||||
@ -282,7 +314,9 @@ _1_WIRE_DETECT_PRESENCE:
|
|||||||
; предделитель 64
|
; предделитель 64
|
||||||
outi r16, TCCR1B, (1<<CS11) | (1<<CS10)
|
outi r16, TCCR1B, (1<<CS11) | (1<<CS10)
|
||||||
|
|
||||||
S1: _1_wire_pull ; Шаг 2. притягиваем шину
|
_1_wire_pull ; Шаг 2. притягиваем шину
|
||||||
|
|
||||||
|
S1:
|
||||||
in r16, TIFR
|
in r16, TIFR
|
||||||
sbrs r16, OCF1A ; Шаг 3. ждем минимум 480мкс
|
sbrs r16, OCF1A ; Шаг 3. ждем минимум 480мкс
|
||||||
rjmp S1
|
rjmp S1
|
||||||
@ -319,23 +353,58 @@ _1_WIRE_CHECK_PRESENCE:
|
|||||||
sbr ONE_WIRE_FLAGS, (1<<OWPRF)
|
sbr ONE_WIRE_FLAGS, (1<<OWPRF)
|
||||||
ret
|
ret
|
||||||
|
|
||||||
_1_WIRE_SEND_BIT:
|
_1_WIRE_SEND_BYTE:
|
||||||
cli
|
push r17
|
||||||
|
ldi r17, DS18B20_CMD_READROM
|
||||||
|
ldi r16, 8
|
||||||
|
_s_l:
|
||||||
|
; rol r16
|
||||||
|
; brcc
|
||||||
|
pop r17
|
||||||
|
ret
|
||||||
|
|
||||||
|
.DEF TRANSMIT_BIT = r9
|
||||||
|
_1_WIRE_SEND_BIT:
|
||||||
|
push r16
|
||||||
|
cli
|
||||||
|
sbr ONE_WIRE_FLAGS, (1<<OWSB)
|
||||||
|
outi r16, TCNT1L, 0
|
||||||
|
outi r16, OCR1AL, 1 ; 8 мкс
|
||||||
|
outi r16, OCR1BL, 9 ; 64 мкс
|
||||||
|
|
||||||
|
_1_wire_pull
|
||||||
|
SB_1:
|
||||||
|
in r16, TIFR
|
||||||
|
sbrs r16, OCF1A
|
||||||
|
rjmp SB_1
|
||||||
|
sbrc TRANSMIT_BIT, 0
|
||||||
|
_1_wire_release
|
||||||
|
SB_2:
|
||||||
|
in r16, TIFR
|
||||||
|
sbrs r16, OCF1B
|
||||||
|
rjmp SB_2
|
||||||
|
|
||||||
|
clr r16
|
||||||
|
out TCCR1B, r16
|
||||||
|
cbr ONE_WIRE_FLAGS, (1<<OWSB)
|
||||||
sei
|
sei
|
||||||
|
pop r16
|
||||||
ret
|
ret
|
||||||
|
|
||||||
; **** ПОЛУЧЕНИЕ ЦИФР ИЗ 16-ТИ БИТНОГО ЧИСЛА *********************
|
; **** ПОЛУЧЕНИЕ ЦИФР ИЗ 16-ТИ БИТНОГО ЧИСЛА *********************
|
||||||
; Описание: Перемещает цифры числа в соответствующие ячейки памяти в SRAM
|
; Описание: Перемещает цифры числа в соответствующие ячейки памяти в SRAM
|
||||||
; путем деления этого числа несколько раз
|
; путем деления этого числа несколько раз
|
||||||
DISPLAY_UPD_DIGITS:
|
DISPLAY_UPD_DIGITS:
|
||||||
|
cli
|
||||||
push r21
|
push r21
|
||||||
ldi r21, 4 ; максимум 4 цифры, т.к индикатор четырех разрядный
|
ldi r21, 4 ; (4 раза делим) т.к индикатор четырех разрядный
|
||||||
|
|
||||||
|
; инициализация указателя (за каждый проход цикла будет инкрементироваться)
|
||||||
ldi XL, LOW(DIGITS)
|
ldi XL, LOW(DIGITS)
|
||||||
ldi XH, HIGH(DIGITS)
|
ldi XH, HIGH(DIGITS)
|
||||||
|
|
||||||
.equ dividend = SRAM_TEMP_1
|
.equ dividend = SRAM_TEMP_1 ; число которе будем делить
|
||||||
.equ divisor = 10
|
.equ divisor = 10 ; на что делим
|
||||||
|
|
||||||
; загружаем число которое хотим поделить в адрес SRAM делимого
|
; загружаем число которое хотим поделить в адрес SRAM делимого
|
||||||
sts dividend, DISP_NUM_L
|
sts dividend, DISP_NUM_L
|
||||||
@ -351,7 +420,7 @@ DISPLAY_UPD_DIGITS:
|
|||||||
|
|
||||||
rcall div16u ; делим
|
rcall div16u ; делим
|
||||||
|
|
||||||
st X+, drem16uL ; сохраняем остаток в ячейку по указателю
|
st X+, drem16uL ; сохраняем остаток в ячейку по указателю и увеличиваем его
|
||||||
|
|
||||||
; обновляем делимое
|
; обновляем делимое
|
||||||
sts dividend, dres16uL
|
sts dividend, dres16uL
|
||||||
@ -360,6 +429,7 @@ DISPLAY_UPD_DIGITS:
|
|||||||
dec r21 ; декрементируем счетчик цикла
|
dec r21 ; декрементируем счетчик цикла
|
||||||
brne DIV_LOOP ; делим еще раз если не 0
|
brne DIV_LOOP ; делим еще раз если не 0
|
||||||
pop r21
|
pop r21
|
||||||
|
sei
|
||||||
ret
|
ret
|
||||||
|
|
||||||
; **** ЗАГРУЖАЕТ НУЖНЫЙ АДРЕС СИМВОЛА В R0 ***********************
|
; **** ЗАГРУЖАЕТ НУЖНЫЙ АДРЕС СИМВОЛА В R0 ***********************
|
||||||
@ -378,12 +448,30 @@ DISPLAY_DECODER:
|
|||||||
pop r16
|
pop r16
|
||||||
ret
|
ret
|
||||||
|
|
||||||
DELAY_68us:
|
DEBOUNCE_SW:
|
||||||
ldi r16, 179 ; 1
|
push r16
|
||||||
_d1_loop:
|
push r17
|
||||||
dec r16 ; 1
|
push r18
|
||||||
brne _d1_loop ; 2/1
|
|
||||||
ret ; 4
|
ldi r18, 5
|
||||||
|
_loop_2:
|
||||||
|
ldi r17, 255
|
||||||
|
_loop_0:
|
||||||
|
ldi r16, 255
|
||||||
|
_dec_0:
|
||||||
|
dec r16
|
||||||
|
brne _dec_0
|
||||||
|
_loop_1:
|
||||||
|
dec r17
|
||||||
|
brne _loop_0
|
||||||
|
_loop_3:
|
||||||
|
dec r18
|
||||||
|
brne _loop_2
|
||||||
|
|
||||||
|
pop r18
|
||||||
|
pop r17
|
||||||
|
pop r16
|
||||||
|
ret
|
||||||
|
|
||||||
DELAY:
|
DELAY:
|
||||||
push r16
|
push r16
|
||||||
|
|||||||
48
firmware.hex
48
firmware.hex
@ -3,31 +3,35 @@
|
|||||||
:020016003EC0EA
|
:020016003EC0EA
|
||||||
:10001A0000C04F935F930F935FB7409167004530DD
|
:10001A0000C04F935F930F935FB7409167004530DD
|
||||||
:10002A000CF403C0442740936700403041F493988E
|
:10002A000CF403C0442740936700403041F493988E
|
||||||
:10003A0094989598929A00916600AAD083D04130FC
|
:10003A0094989598929A00916600CED06AD04130F1
|
||||||
:10004A0041F4929894989598939A00916500A0D05B
|
:10004A0041F4929894989598939A00916500C4D037
|
||||||
:10005A0079D0423041F4929893989598949A009165
|
:10005A0060D0423041F4929893989598949A00917E
|
||||||
:10006A00640096D06FD0433041F492989398949854
|
:10006A006400BAD056D0433041F492989398949849
|
||||||
:10007A00959A009163008CD065D0439540936700B0
|
:10007A00959A00916300B0D04CD0439540936700A5
|
||||||
:10008A005FBF0F915F914F9118950F930FB7B29B76
|
:10008A005FBF0F915F914F9118950F930FB7B29B76
|
||||||
:10009A0005C0B39B05C0B49B05C005C0019603C04B
|
:10009A0005C0B39B05C0B49B05C005C0019603C04B
|
||||||
:1000AA000A9601C0CF960FBF0F9118950FED0DBF9D
|
:1000AA000A9601C0CF960FBF0F9118950FED0DBF9D
|
||||||
:1000BA000EE701BB01EC07BB0CE108BB00E20BBF7A
|
:1000BA000EE701BB01EC07BB0CE108BB00E20BBF7A
|
||||||
:1000CA000CE100BD02E000BF05E003BF09E106BF85
|
:1000CA000CE100BD02E000BF05E003BF09E106BF85
|
||||||
:1000DA0001E009BF11241092670080E090E003E874
|
:1000DA0001E009BF11241092670080E090E0789453
|
||||||
:1000EA000CBD00E00DBD01EC0ABD00E00BBD03E054
|
:1000EA0063D070FD969A70FF9698FACFEE24FF18A7
|
||||||
:1000FA000EBDB99A08B706FFFDCF30D0789430D03C
|
:1000FA0041E1001F111F4A9509F40895EE1CFF1CE7
|
||||||
:10010A00969A55D054D053D052D051D050D09698B8
|
:10010A00E21AF30A20F4E20EF31E8894F2CF08945E
|
||||||
:10011A004ED04DD04CD04BD04AD049D0F0CFEE245F
|
:10011A00F0CF0F930FB800E40EB90BE10DB9769B3F
|
||||||
:10012A00FF1841E1001F111F4A9509F40895EE1CBA
|
:10012A00FDCFC09AC0980F910895F89400E00CBDD5
|
||||||
:10013A00FF1CE21AF30A20F4E20EF31E8894F2CFAF
|
:10013A000CE30ABD05E408BD03E00EBDB99A08B791
|
||||||
:10014A000894F0CF0F930FB800E40EB90BE10DB984
|
:10014A0006FFFDCFB99808B705FFFDCF0DD000E037
|
||||||
:10015A00769BFDCFC09AC0980F910895B9980895DB
|
:10015A000CBD04E30ABD08B706FFFDCF00270EBD9C
|
||||||
:10016A005F9354E0A3E6B0E080936100909362004D
|
:10016A000FEF08BF78940895B19B716008951F93AB
|
||||||
:10017A0000916100109162002AE030E0D0DFED9238
|
:10017A0013E308E01F9108950F93F894726000E06A
|
||||||
:10018A0000936100109362005A9591F75F91089568
|
:10018A000CBD01E00ABD09E008BDB99A08B706FF2F
|
||||||
:10019A000F931F93E4EDF1E01127E00FF11F049094
|
:10019A00FDCF90FCB99808B705FFFDCF00270EBD2B
|
||||||
:1001AA001F910F91089503EB0A95F1F708950F93A4
|
:1001AA007D7F78940F9108955F9354E0A3E6B0E0C1
|
||||||
:1001BA001F930FEF1FEF1A95000000000000D9F7F8
|
:1001BA008093610090936200009161001091620047
|
||||||
:1001CA000A95C1F71F910F910895C0F9A4B09992A9
|
:1001CA002AE030E093DFED92009361001093620021
|
||||||
:0601DA0082F880909C00F9
|
:1001DA005A9591F75F9108950F931F93ECE1F2E01E
|
||||||
|
:1001EA001127E00FF11F04901F910F91089503EB5F
|
||||||
|
:1001FA000A95F1F708950F931F930FEF1FEF1A95C2
|
||||||
|
:10020A00000000000000D9F70A95C1F71F910F916D
|
||||||
|
:0E021A000895C0F9A4B0999282F880909C00DB
|
||||||
:00000001FF
|
:00000001FF
|
||||||
|
|||||||
1020
firmware.lst
1020
firmware.lst
File diff suppressed because it is too large
Load Diff
@ -1,12 +1,12 @@
|
|||||||
/avr_sim_project_file
|
/avr_sim_project_file
|
||||||
/home/sergeyyarkov/Documents/Projects/Firmwares/AVR/attiny2313a_thermostat/firmware.asm
|
/home/sergeyyarkov/Documents/Projects/Firmwares/AVR/attiny2313a_thermostat/firmware.asm
|
||||||
mainasm=firmware.asm
|
mainasm=firmware.asm
|
||||||
file=firmware.lst,265,35,266
|
file=firmware.lst,345,35,266
|
||||||
file=firmware.asm,1,1,1
|
file=firmware.asm,1,1,1
|
||||||
file=div16u.asm,1,1,1
|
file=div16u.asm,1,1,1
|
||||||
file=usi.asm,1,1,1
|
file=usi.asm,1,1,1
|
||||||
clock=8000000
|
clock=8000000
|
||||||
device-type=ATtiny2313A
|
device-type=ATtiny2313A
|
||||||
device-package=20-pin-PDIP_SOIC
|
device-package=20-pin-PDIP_SOIC
|
||||||
windows=acePSTwz
|
windows=acepSTwz
|
||||||
alert1=0,0,-1,-1,,0,0
|
alert1=0,0,-1,-1,,0,0
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user