mirror of
https://github.com/sergeyyarkov/attiny2313a_thermostat.git
synced 2026-10-11 10:18:56 +03:00
usi
This commit is contained in:
parent
af37b72a24
commit
885a4db18e
57
firmware.asm
57
firmware.asm
@ -23,9 +23,9 @@
|
|||||||
;========================================;
|
;========================================;
|
||||||
|
|
||||||
.EQU LED_POWER_PORT = PD6
|
.EQU LED_POWER_PORT = PD6
|
||||||
.EQU CLOCK_PIN = PB0 ; ST_CP on 74HC595
|
.EQU USI_LATCH_PIN = PB0 ; ST_CP on 74HC595
|
||||||
.EQU DATA_PIN = PB1 ; DS on 74HC595
|
.EQU USI_DO_PIN = PB6 ; DS on 74HC595
|
||||||
.EQU LATCH_PIN = PB2 ; SH_CP on 74HC595
|
.EQU USI_CLK_PIN = PB7 ; SH_CP on 74HC595
|
||||||
|
|
||||||
;========================================;
|
;========================================;
|
||||||
; CODE SEGMENT ;
|
; CODE SEGMENT ;
|
||||||
@ -75,63 +75,40 @@ MCU_INIT:
|
|||||||
; ;
|
; ;
|
||||||
;=======================================================
|
;=======================================================
|
||||||
rcall INIT_PORTS
|
rcall INIT_PORTS
|
||||||
|
|
||||||
;========================================;
|
|
||||||
; USI IS USED TO COMMUNICATE ;
|
|
||||||
; WITH SHIFT REGISTER (74HC595N) ;
|
|
||||||
;========================================;
|
|
||||||
rcall INIT_USI
|
|
||||||
|
|
||||||
ldi COUNTER, 0b00000001
|
ldi COUNTER, 0b00000001
|
||||||
rjmp LOOP
|
rjmp LOOP
|
||||||
|
|
||||||
INIT_PORTS:
|
INIT_PORTS:
|
||||||
ldi r16, (1<<LED_POWER_PORT)
|
ldi r16, (1<<LED_POWER_PORT)
|
||||||
out DDRD, r16
|
out DDRD, r16
|
||||||
ldi r16, (1<<CLOCK_PIN) | (1<<LATCH_PIN) | (1<<DATA_PIN)
|
ldi r16, (1<<USI_CLK_PIN) | (1<<USI_DO_PIN) | (1<<USI_LATCH_PIN)
|
||||||
out DDRB, r16
|
out DDRB, r16
|
||||||
ret
|
ret
|
||||||
|
|
||||||
INIT_USI:
|
|
||||||
|
|
||||||
ret
|
|
||||||
|
|
||||||
;========================================;
|
;========================================;
|
||||||
; SEND BYTE TO 74HC595 ;
|
; SEND BYTE TO 74HC595 ;
|
||||||
;========================================;
|
;========================================;
|
||||||
TRANSMIT_595:
|
|
||||||
|
USI_TRANSMIT_595:
|
||||||
in r21, SREG
|
in r21, SREG
|
||||||
mov r19, COUNTER
|
mov r19, COUNTER
|
||||||
ldi TEMP_REG_B, 8
|
out USIDR, r19
|
||||||
_TRANSMIT_595_LOOP:
|
ldi r19, (1<<USIOIF)
|
||||||
;
|
out USISR, r19
|
||||||
; Shift a bit into the Carry flag and check if it is set to 1 or 0.
|
ldi TEMP_REG_A, (1<<USIWM0) | (1<<USICS1) | (1<<USICLK) | (1<<USITC)
|
||||||
lsl r19
|
|
||||||
brcc _TRANSMIT_595_SEND_LOW
|
|
||||||
brcs _TRANSMIT_595_SEND_HIGH
|
|
||||||
|
|
||||||
_TRANSMIT_595_SEND_HIGH:
|
_USI_TRANSMIT_595_LOOP:
|
||||||
sbi PORTB, DATA_PIN
|
out USICR, TEMP_REG_A
|
||||||
rjmp _TRANSMIT_595_COMMIT
|
sbis USISR, USIOIF
|
||||||
|
rjmp _USI_TRANSMIT_595_LOOP
|
||||||
|
|
||||||
_TRANSMIT_595_SEND_LOW:
|
sbi PORTB, USI_LATCH_PIN
|
||||||
cbi PORTB, DATA_PIN
|
cbi PORTB, USI_LATCH_PIN
|
||||||
|
|
||||||
_TRANSMIT_595_COMMIT:
|
|
||||||
cbi PORTB, CLOCK_PIN
|
|
||||||
sbi PORTB, CLOCK_PIN
|
|
||||||
dec TEMP_REG_B
|
|
||||||
brne _TRANSMIT_595_LOOP
|
|
||||||
|
|
||||||
;
|
|
||||||
; Copy data from shift register to storage register
|
|
||||||
sbi PORTB, LATCH_PIN
|
|
||||||
cbi PORTB, LATCH_PIN
|
|
||||||
out SREG, r21
|
out SREG, r21
|
||||||
ret
|
ret
|
||||||
|
|
||||||
SUBPROGRAM_LED_SHIFTING:
|
SUBPROGRAM_LED_SHIFTING:
|
||||||
rcall TRANSMIT_595
|
rcall USI_TRANSMIT_595
|
||||||
rol COUNTER
|
rol COUNTER
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
|||||||
15
firmware.hex
15
firmware.hex
@ -1,10 +1,9 @@
|
|||||||
:020000020000FC
|
:020000020000FC
|
||||||
:1000000000C00FED0DBF03D007D041E01AC000E4DF
|
:1000000000C00FED0DBF02D041E015C000E401BB00
|
||||||
:1000100001BB07E007BB089508955FB7342F18E0D0
|
:1000100001EC07BB08955FB7342F3FB930E43EB918
|
||||||
:10002000330F18F400F0C19A01C0C198C098C09A6B
|
:100020000BE10DB9769BFDCFC09AC0985FBF0895D4
|
||||||
:100030001A95B1F7C29AC2985FBF0895EEDF441FC8
|
:10003000F2DF441F089514D0FBDF02D001D0FBCFC4
|
||||||
:10004000089514D0FBDF02D001D0FBCF0F931F9394
|
:100040000F931F93F8940FEF1FEF1A950000000015
|
||||||
:10005000F8940FEF1FEF1A95000000000000D9F789
|
:100050000000D9F70A95C1F778941F910F91089580
|
||||||
:100060000A95C1F778941F910F91089500E412B397
|
:0A00600000E412B3102712BB08954C
|
||||||
:06007000102712BB0895E9
|
|
||||||
:00000001FF
|
:00000001FF
|
||||||
|
|||||||
159
firmware.lss
159
firmware.lss
@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
AVRASM ver. 2.2.7 firmware.asm Sun Jan 29 21:32:32 2023
|
AVRASM ver. 2.2.7 firmware.asm Sun Jan 29 22:16:18 2023
|
||||||
|
|
||||||
firmware.asm(14): Including file 'tn2313Adef.inc'
|
firmware.asm(14): Including file 'tn2313Adef.inc'
|
||||||
firmware.asm(14): Including file 'tn2313Adef.inc'
|
firmware.asm(14): Including file 'tn2313Adef.inc'
|
||||||
@ -727,9 +727,9 @@ firmware.asm(14): Including file 'tn2313Adef.inc'
|
|||||||
;========================================;
|
;========================================;
|
||||||
|
|
||||||
.EQU LED_POWER_PORT = PD6
|
.EQU LED_POWER_PORT = PD6
|
||||||
.EQU CLOCK_PIN = PB0 ; ST_CP on 74HC595
|
.EQU USI_LATCH_PIN = PB0 ; ST_CP on 74HC595
|
||||||
.EQU DATA_PIN = PB1 ; DS on 74HC595
|
.EQU USI_DO_PIN = PB6 ; DS on 74HC595
|
||||||
.EQU LATCH_PIN = PB2 ; SH_CP on 74HC595
|
.EQU USI_CLK_PIN = PB7 ; SH_CP on 74HC595
|
||||||
|
|
||||||
;========================================;
|
;========================================;
|
||||||
; CODE SEGMENT ;
|
; CODE SEGMENT ;
|
||||||
@ -778,106 +778,83 @@ firmware.asm(14): Including file 'tn2313Adef.inc'
|
|||||||
; is working correctly ;
|
; is working correctly ;
|
||||||
; ;
|
; ;
|
||||||
;=======================================================
|
;=======================================================
|
||||||
000003 d003 rcall INIT_PORTS
|
000003 d002 rcall INIT_PORTS
|
||||||
|
000004 e041 ldi COUNTER, 0b00000001
|
||||||
;========================================;
|
000005 c015 rjmp LOOP
|
||||||
; USI IS USED TO COMMUNICATE ;
|
|
||||||
; WITH SHIFT REGISTER (74HC595N) ;
|
|
||||||
;========================================;
|
|
||||||
000004 d007 rcall INIT_USI
|
|
||||||
|
|
||||||
000005 e041 ldi COUNTER, 0b00000001
|
|
||||||
000006 c01a rjmp LOOP
|
|
||||||
|
|
||||||
INIT_PORTS:
|
INIT_PORTS:
|
||||||
000007 e400 ldi r16, (1<<LED_POWER_PORT)
|
000006 e400 ldi r16, (1<<LED_POWER_PORT)
|
||||||
000008 bb01 out DDRD, r16
|
000007 bb01 out DDRD, r16
|
||||||
000009 e007 ldi r16, (1<<CLOCK_PIN) | (1<<LATCH_PIN) | (1<<DATA_PIN)
|
000008 ec01 ldi r16, (1<<USI_CLK_PIN) | (1<<USI_DO_PIN) | (1<<USI_LATCH_PIN)
|
||||||
00000a bb07 out DDRB, r16
|
000009 bb07 out DDRB, r16
|
||||||
00000b 9508 ret
|
00000a 9508 ret
|
||||||
|
|
||||||
INIT_USI:
|
|
||||||
|
|
||||||
00000c 9508 ret
|
|
||||||
|
|
||||||
;========================================;
|
;========================================;
|
||||||
; SEND BYTE TO 74HC595 ;
|
; SEND BYTE TO 74HC595 ;
|
||||||
;========================================;
|
;========================================;
|
||||||
TRANSMIT_595:
|
|
||||||
00000d b75f in r21, SREG
|
|
||||||
00000e 2f34 mov r19, COUNTER
|
|
||||||
00000f e018 ldi TEMP_REG_B, 8
|
|
||||||
_TRANSMIT_595_LOOP:
|
|
||||||
;
|
|
||||||
; Shift a bit into the Carry flag and check if it is set to 1 or 0.
|
|
||||||
000010 0f33 lsl r19
|
|
||||||
000011 f418 brcc _TRANSMIT_595_SEND_LOW
|
|
||||||
000012 f000 brcs _TRANSMIT_595_SEND_HIGH
|
|
||||||
|
|
||||||
_TRANSMIT_595_SEND_HIGH:
|
USI_TRANSMIT_595:
|
||||||
000013 9ac1 sbi PORTB, DATA_PIN
|
00000b b75f in r21, SREG
|
||||||
000014 c001 rjmp _TRANSMIT_595_COMMIT
|
00000c 2f34 mov r19, COUNTER
|
||||||
|
00000d b93f out USIDR, r19
|
||||||
|
00000e e430 ldi r19, (1<<USIOIF)
|
||||||
|
00000f b93e out USISR, r19
|
||||||
|
000010 e10b ldi TEMP_REG_A, (1<<USIWM0) | (1<<USICS1) | (1<<USICLK) | (1<<USITC)
|
||||||
|
|
||||||
_TRANSMIT_595_SEND_LOW:
|
_USI_TRANSMIT_595_LOOP:
|
||||||
000015 98c1 cbi PORTB, DATA_PIN
|
000011 b90d out USICR, TEMP_REG_A
|
||||||
|
000012 9b76 sbis USISR, USIOIF
|
||||||
|
000013 cffd rjmp _USI_TRANSMIT_595_LOOP
|
||||||
|
|
||||||
_TRANSMIT_595_COMMIT:
|
000014 9ac0 sbi PORTB, USI_LATCH_PIN
|
||||||
000016 98c0 cbi PORTB, CLOCK_PIN
|
000015 98c0 cbi PORTB, USI_LATCH_PIN
|
||||||
000017 9ac0 sbi PORTB, CLOCK_PIN
|
000016 bf5f out SREG, r21
|
||||||
000018 951a dec TEMP_REG_B
|
000017 9508 ret
|
||||||
000019 f7b1 brne _TRANSMIT_595_LOOP
|
|
||||||
|
|
||||||
;
|
|
||||||
; Copy data from shift register to storage register
|
|
||||||
00001a 9ac2 sbi PORTB, LATCH_PIN
|
|
||||||
00001b 98c2 cbi PORTB, LATCH_PIN
|
|
||||||
00001c bf5f out SREG, r21
|
|
||||||
00001d 9508 ret
|
|
||||||
|
|
||||||
SUBPROGRAM_LED_SHIFTING:
|
SUBPROGRAM_LED_SHIFTING:
|
||||||
00001e dfee rcall TRANSMIT_595
|
000018 dff2 rcall USI_TRANSMIT_595
|
||||||
00001f 1f44 rol COUNTER
|
000019 1f44 rol COUNTER
|
||||||
000020 9508 ret
|
00001a 9508 ret
|
||||||
|
|
||||||
;========================================;
|
;========================================;
|
||||||
; MAIN PROGRAM LOOP ;
|
; MAIN PROGRAM LOOP ;
|
||||||
;========================================;
|
;========================================;
|
||||||
|
|
||||||
LOOP:
|
LOOP:
|
||||||
000021 d014 rcall TOGGLE_POWER_LED
|
00001b d014 rcall TOGGLE_POWER_LED
|
||||||
000022 dffb rcall SUBPROGRAM_LED_SHIFTING
|
00001c dffb rcall SUBPROGRAM_LED_SHIFTING
|
||||||
000023 d002 rcall DELAY
|
00001d d002 rcall DELAY
|
||||||
000024 d001 rcall DELAY
|
00001e d001 rcall DELAY
|
||||||
000025 cffb rjmp LOOP
|
00001f cffb rjmp LOOP
|
||||||
|
|
||||||
DELAY:
|
DELAY:
|
||||||
000026 930f push r16
|
000020 930f push r16
|
||||||
000027 931f push r17
|
000021 931f push r17
|
||||||
000028 94f8 cli
|
000022 94f8 cli
|
||||||
000029 ef0f ldi r16, 255
|
000023 ef0f ldi r16, 255
|
||||||
_DELAY_1:
|
_DELAY_1:
|
||||||
00002a ef1f ldi r17, 255
|
000024 ef1f ldi r17, 255
|
||||||
_DELAY_2:
|
_DELAY_2:
|
||||||
00002b 951a dec r17
|
000025 951a dec r17
|
||||||
00002c 0000 nop
|
000026 0000 nop
|
||||||
00002d 0000 nop
|
000027 0000 nop
|
||||||
00002e 0000 nop
|
000028 0000 nop
|
||||||
00002f f7d9 brne _DELAY_2
|
000029 f7d9 brne _DELAY_2
|
||||||
|
|
||||||
000030 950a dec r16
|
00002a 950a dec r16
|
||||||
000031 f7c1 brne _DELAY_1
|
00002b f7c1 brne _DELAY_1
|
||||||
000032 9478 sei
|
00002c 9478 sei
|
||||||
|
|
||||||
000033 911f pop r17
|
00002d 911f pop r17
|
||||||
000034 910f pop r16
|
00002e 910f pop r16
|
||||||
000035 9508 ret
|
00002f 9508 ret
|
||||||
|
|
||||||
TOGGLE_POWER_LED:
|
TOGGLE_POWER_LED:
|
||||||
000036 e400 ldi r16, (1<<LED_POWER_PORT)
|
000030 e400 ldi r16, (1<<LED_POWER_PORT)
|
||||||
000037 b312 in r17, PORTD
|
000031 b312 in r17, PORTD
|
||||||
000038 2710 eor r17, r16
|
000032 2710 eor r17, r16
|
||||||
000039 bb12 out PORTD, r17
|
000033 bb12 out PORTD, r17
|
||||||
00003a 9508 ret
|
000034 9508 ret
|
||||||
|
|
||||||
|
|
||||||
;========================================;
|
;========================================;
|
||||||
@ -954,7 +931,7 @@ counted separately from r26..r31 here.
|
|||||||
"ATtiny2313A" register use summary:
|
"ATtiny2313A" register use summary:
|
||||||
x : 0 y : 0 z : 0 r0 : 0 r1 : 0 r2 : 0 r3 : 0 r4 : 0
|
x : 0 y : 0 z : 0 r0 : 0 r1 : 0 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 : 0 r10: 0 r11: 0 r12: 0
|
||||||
r13: 0 r14: 0 r15: 0 r16: 12 r17: 9 r18: 0 r19: 2 r20: 3
|
r13: 0 r14: 0 r15: 0 r16: 14 r17: 7 r18: 0 r19: 4 r20: 3
|
||||||
r21: 2 r22: 0 r23: 0 r24: 0 r25: 0 r26: 0 r27: 0 r28: 0
|
r21: 2 r22: 0 r23: 0 r24: 0 r25: 0 r26: 0 r27: 0 r28: 0
|
||||||
r29: 0 r30: 0 r31: 0
|
r29: 0 r30: 0 r31: 0
|
||||||
Registers used: 5 out of 35 (14.3%)
|
Registers used: 5 out of 35 (14.3%)
|
||||||
@ -962,28 +939,28 @@ Registers used: 5 out of 35 (14.3%)
|
|||||||
"ATtiny2313A" instruction use summary:
|
"ATtiny2313A" instruction use summary:
|
||||||
.lds : 0 .sts : 0 adc : 0 add : 0 adiw : 0 and : 0
|
.lds : 0 .sts : 0 adc : 0 add : 0 adiw : 0 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 : 1 break : 0 breq : 0 brge : 0 brhc : 0
|
brcc : 0 brcs : 0 break : 0 breq : 0 brge : 0 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 : 3 brpl : 0 brsh : 0 brtc : 0 brts : 0 brvc : 0
|
brne : 2 brpl : 0 brsh : 0 brtc : 0 brts : 0 brvc : 0
|
||||||
brvs : 0 bset : 0 bst : 0 cbi : 3 cbr : 0 clc : 0
|
brvs : 0 bset : 0 bst : 0 cbi : 1 cbr : 0 clc : 0
|
||||||
clh : 0 cli : 1 cln : 0 clr : 0 cls : 0 clt : 0
|
clh : 0 cli : 1 cln : 0 clr : 0 cls : 0 clt : 0
|
||||||
clv : 0 clz : 0 com : 0 cp : 0 cpc : 0 cpi : 0
|
clv : 0 clz : 0 com : 0 cp : 0 cpc : 0 cpi : 0
|
||||||
cpse : 0 dec : 3 eor : 1 icall : 0 ijmp : 0 in : 2
|
cpse : 0 dec : 2 eor : 1 icall : 0 ijmp : 0 in : 2
|
||||||
inc : 0 ld : 0 ldd : 0 ldi : 8 lds : 0 lpm : 0
|
inc : 0 ld : 0 ldd : 0 ldi : 9 lds : 0 lpm : 0
|
||||||
lsl : 1 lsr : 0 mov : 1 movw : 0 neg : 0 nop : 3
|
lsl : 0 lsr : 0 mov : 1 movw : 0 neg : 0 nop : 3
|
||||||
or : 0 ori : 0 out : 5 pop : 2 push : 2 rcall : 7
|
or : 0 ori : 0 out : 8 pop : 2 push : 2 rcall : 6
|
||||||
ret : 6 reti : 0 rjmp : 4 rol : 1 ror : 0 sbc : 0
|
ret : 5 reti : 0 rjmp : 4 rol : 1 ror : 0 sbc : 0
|
||||||
sbci : 0 sbi : 3 sbic : 0 sbis : 0 sbiw : 0 sbr : 0
|
sbci : 0 sbi : 1 sbic : 0 sbis : 1 sbiw : 0 sbr : 0
|
||||||
sbrc : 0 sbrs : 0 sec : 0 seh : 0 sei : 1 sen : 0
|
sbrc : 0 sbrs : 0 sec : 0 seh : 0 sei : 1 sen : 0
|
||||||
ser : 0 ses : 0 set : 0 sev : 0 sez : 0 sleep : 0
|
ser : 0 ses : 0 set : 0 sev : 0 sez : 0 sleep : 0
|
||||||
spm : 0 st : 0 std : 0 sts : 0 sub : 0 subi : 0
|
spm : 0 st : 0 std : 0 sts : 0 sub : 0 subi : 0
|
||||||
swap : 0 tst : 0 wdr : 0
|
swap : 0 tst : 0 wdr : 0
|
||||||
Instructions used: 21 out of 105 (20.0%)
|
Instructions used: 19 out of 105 (18.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 0x000076 118 0 118 2048 5.8%
|
[.cseg] 0x000000 0x00006a 106 0 106 2048 5.2%
|
||||||
[.dseg] 0x000060 0x000060 0 0 0 128 0.0%
|
[.dseg] 0x000060 0x000060 0 0 0 128 0.0%
|
||||||
[.eseg] 0x000000 0x000033 0 51 51 128 39.8%
|
[.eseg] 0x000000 0x000033 0 51 51 128 39.8%
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user