This commit is contained in:
Sergey Yarkov 2023-01-29 22:16:52 +03:00
parent af37b72a24
commit 885a4db18e
No known key found for this signature in database
GPG Key ID: E91CE1FABC619B6F
3 changed files with 95 additions and 142 deletions

View File

@ -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

View File

@ -1,10 +1,9 @@
:020000020000FC :020000020000FC
:1000000000C00FED0DBF03D007D041E01AC000E4DF :1000000000C00FED0DBF02D041E015C000E401BB00
:1000100001BB07E007BB089508955FB7342F18E0D0 :1000100001EC07BB08955FB7342F3FB930E43EB918
:10002000330F18F400F0C19A01C0C198C098C09A6B :100020000BE10DB9769BFDCFC09AC0985FBF0895D4
:100030001A95B1F7C29AC2985FBF0895EEDF441FC8 :10003000F2DF441F089514D0FBDF02D001D0FBCFC4
:10004000089514D0FBDF02D001D0FBCF0F931F9394 :100040000F931F93F8940FEF1FEF1A950000000015
:10005000F8940FEF1FEF1A95000000000000D9F789 :100050000000D9F70A95C1F778941F910F91089580
:100060000A95C1F778941F910F91089500E412B397 :0A00600000E412B3102712BB08954C
:06007000102712BB0895E9
:00000001FF :00000001FF

View File

@ -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%