This commit is contained in:
Sergey Yarkov 2023-01-28 14:31:23 +03:00
parent 49dc55f597
commit 1f057d5d55
No known key found for this signature in database
GPG Key ID: E91CE1FABC619B6F
6 changed files with 27 additions and 24 deletions

4
.gitignore vendored
View File

@ -1 +1,3 @@
*.lss *.lss
*.lst
*.pro

5
README.md Normal file
View File

@ -0,0 +1,5 @@
# Shift Register Example
This is my example of working with a shift register 74HC595 using an AVR microcontroller. This example does not use any data interface (SPI, USI). Instead, a small algorithm is implemented that controls the three pins of the microcontroller (DATA, LATCH and CLOCK).
![simulation](./simulation.gif)

View File

@ -14,15 +14,15 @@
.INCLUDE "tn2313Adef.inc" .INCLUDE "tn2313Adef.inc"
.LIST .LIST
.DEF COUNTER = r20 .DEF DATA = r20 ; DATA to transmit
;========================================; ;========================================;
; LABELS ; ; LABELS ;
;========================================; ;========================================;
.EQU CLOCK_PIN = PB0 ; ST_CP on 74HC595 .EQU CLOCK_PIN = PB0 ; SH_CP on 74HC595
.EQU DATA_PIN = PB1 ; DS on 74HC595 .EQU DATA_PIN = PB1 ; DS on 74HC595
.EQU LATCH_PIN = PB2 ; SH_CP on 74HC595 .EQU LATCH_PIN = PB2 ; ST_CP on 74HC595
;========================================; ;========================================;
; CODE SEGMENT ; ; CODE SEGMENT ;
@ -66,8 +66,7 @@ RESET_vect:
MCU_INIT: MCU_INIT:
rcall INIT_PORTS rcall INIT_PORTS
ldi DATA, 0b00000001
ldi COUNTER, 0
rjmp LOOP rjmp LOOP
INIT_PORTS: INIT_PORTS:
@ -80,7 +79,9 @@ ret
;========================================; ;========================================;
TRANSMIT_595: TRANSMIT_595:
push r19 push r19
mov r19, COUNTER push r21
in r21, SREG
mov r19, DATA
ldi r16, 8 ldi r16, 8
_TRANSMIT_595_LOOP: _TRANSMIT_595_LOOP:
lsl r19 lsl r19
@ -97,10 +98,12 @@ TRANSMIT_595:
_TRANSMIT_595_COMMIT: _TRANSMIT_595_COMMIT:
sbi PORTB, CLOCK_PIN sbi PORTB, CLOCK_PIN
cbi PORTB, CLOCK_PIN cbi PORTB, CLOCK_PIN
sbi PORTB, LATCH_PIN
cbi PORTB, LATCH_PIN
dec r16 dec r16
brne _TRANSMIT_595_LOOP brne _TRANSMIT_595_LOOP
sbi PORTB, LATCH_PIN
cbi PORTB, LATCH_PIN
out SREG, r21
pop r21
pop r19 pop r19
ret ret
@ -110,15 +113,12 @@ ret
LOOP: LOOP:
rcall TRANSMIT_595 rcall TRANSMIT_595
inc COUNTER
rcall DELAY rcall DELAY
rol DATA
rjmp LOOP rjmp LOOP
DELAY: DELAY:
push r16 ldi r16, 70
push r17
cli
ldi r16, 20
_DELAY_1: _DELAY_1:
ldi r17, 255 ldi r17, 255
_DELAY_2: _DELAY_2:
@ -130,8 +130,4 @@ DELAY:
dec r16 dec r16
brne _DELAY_1 brne _DELAY_1
sei
pop r17
pop r16
ret ret

View File

@ -1,8 +1,8 @@
:020000020000FC :020000020000FC
:1000000000C00FED0DBF02D040E014C007E007BBF9 :1000000000C00FED0DBF02D041E018C007E007BBF4
:1000100008953F93342F08E0330F18F400F0C19A8D :1000100008953F935F935FB7342F08E0330F18F4D0
:1000200001C0C198C09AC098C29AC2980A95A1F717 :1000200000F0C19A01C0C198C09AC0980A95B1F772
:100030003F910895EEDF439501D0FCCF0F931F93BE :10003000C29AC2985FBF5F913F910895EADF02D0F4
:10004000F89404E11FEF1A95000000000000D9F7B2 :10004000441FFCCF06E41FEF1A95000000000000DB
:0C0050000A95C1F778941F910F91089554 :08005000D9F70A95C1F70895E4
:00000001FF :00000001FF

BIN
sim_proteus.pdsprj Normal file

Binary file not shown.

BIN
simulation.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 191 KiB