24 Nov 16:41
barti master 57600
.nolist // komentarz
.include "m16def.inc" ; komentarz
.list
.listmac
.device ATmega16
.cseg
// wektory przerwań
.org 0x0016
jmp RX_Complete
.org 0x0000
jmp START ;skok do etykiety
;START (adres 0x0030)
// wektory przerwań
.org 0x0030
START:
//ustawienie stosu
ldi r16, 0x5F
out SPL, r16
ldi r17, 0x04
out SPH, r17
//ustawienie portu A jako wyjścia
ldi r16, 0xFF
out DDRA, r16
// ustawienie parametrów UART
; zapisujemy rejestr UBRR
ldi r16, 3 ; dla 8MHz 57600
out UBRRL, r16
ldi r16, 0
out UBRRH, r16
; uaktywnienie nadajnika (Enable transmitter)
ldi r16, (1<<RXCIE)|(1<<TXEN)|(1<<RXEN)
out UCSRB,r16
; format ramki (Set frame format): 8data, 1stop bit
ldi r16, (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0)
out UCSRC, r16
; uaktywnienie odbiornika
ldi r16, (1<<TXEN) | (1<<RXEN) | (1<<RXCIE)
out UCSRB, r16
; ustawienia interfejsu SPI
; ustawienie SCK, MOSI, SS jako wyjścia
ldi r16, (1<<DDB7)|(1<<DDB5)|(1<<DDB4)
;0b10110000
out DDRB, r16
; SPI jako MASTER
ldi r16, (1<<SPE)|(1<<MSTR)|(1<<SPR0)
out SPCR, r16
sei
MAIN:
jmp MAIN
.org 0x0100
USART_Transmit:
; Wait for empty transmit buffer
sbis UCSRA,UDRE
rjmp USART_Transmit
; Put data (r16) into buffer, sends the data
; ldi r16, 0x31
out UDR,r16
ret
//podprogram dla MASTER
SPI_MasterTransmit:
; Start transmission of data (r16)
out SPDR,r16
Wait_Transmit:
; Wait for transmission complete
sbis SPSR,SPIF
rjmp Wait_Transmit
ret
RX_Complete:
in r16, UDR
call USART_Transmit
out PORTA, r16
reti
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_Receive:
; Wait for data to be received
sbis UCSRA, RXC
rjmp USART_Receive
; Get and return received data from buffer
in r16, UDR
ret