Back to posts Edit this post
Copy content

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

No files