24 Nov 16:38
pawel slave
.nolist
.include "m16def.inc"
.list
.listmac
.device atmega16
.cseg
.org 0x0000
jmp START ;
.org 0x0014
jmp SPI_Complete
.org 0x0016
jmp RX_Complete
.org 0x0030
START:
; ustawienie stosu
ldi r16, high(RAMEND)
out SPH, r16
ldi r16, low(RAMEND)
out SPL, r16
ldi r16, 0xFF
out DDRA, r16
ldi r16, 3
out UBRRL, r16
ldi r16, 0
out UBRRH, r16
ldi r16, (1 << RXCIE) | (1 << TXEN) | (1 << RXEN)
out UCSRB, r16
ldi r16, (1<<URSEL) | (0 << USBS) | (1<<UCSZ1) | (1<<UCSZ0)
out UCSRC, r16
ldi r16, 1<<DDB6 ;
out DDRB, r16
ldi r16, (1<<SPE) | (0<<MSTR) | (1<<SPIE)
out SPCR, r16
sei
MAIN:
nop
nop
nop
jmp MAIN
.org 0x0100
DELAY_1s:
ldi r16, 21
ldi r17, 75
ldi r18, 191
L1: dec r18
brne L1
dec r17
brne L1
dec r16
brne L1
nop
ret
USART_Transmit:
sbis UCSRA,UDRE
rjmp USART_Transmit
;ldi r16,0b00100001
out UDR,r16
ret
USART_Receive:
sbis UCSRA, RXC
rjmp USART_Receive
in r16, UDR
ret
; przerwanie USART RX Complete – echo na UART
RX_Complete:
in r16, UDR
rcall USART_Transmit
reti
SPI_SlaveReceive:
; Wait for reception complete
sbis SPSR,SPIF
rjmp SPI_SlaveReceive
; Read received data and return
in r16,SPDR
ret