Professional Documents
Culture Documents
FA21 - Lec17 - 2021-11-10 - UART - Programming - Part 2
FA21 - Lec17 - 2021-11-10 - UART - Programming - Part 2
Programming in
AVR (Part 2)
LECTURE# 17
MICROPROCESSOR SYSTEMS AND INTERFACING
LDI R16,(1<<RXEN0)|(1<<TXEN0)
OUT UCSR0B, R16
LDI R16,(1<<UCSZ01)|(1<<UCSZ00)
OUT UCS0RC, R16 ;move R16 to UCSR0C
.INCLUDE "M32DEF.INC"
LDI R16,(1<<TXEN0) ;enable transmitter
OUT UCSR0B, R16
LDI R16,(1<<UCSZ1)|(1<<UCSZ0);8-bit data
OUT UCSR0C, R16 ;no parity, 1 stop bit
LDI R16,0x33;9600 baud rate
OUT UBRR0L,R16;for XTAL = 8 MHz
AGAIN:
SBIS UCSR0A,UDRE0 ;is UDR0 empty
RJMP AGAIN ;wait more
LDI R16,'G' ;send ‘G’
OUT UDR0,R16 ;to UDR0
RJMP AGAIN ;do it again
.INCLUDE "M32DEF.INC"
LDI R16,(1<<RXEN0) ;enable receiver
OUT UCSR0B, R16
LDI R16,(1<<UCSZ01)|(1<<UCSZ00) ;8-bit data
OUT UCSR0C, R16 ;no parity, 1 stop bit
LDI R16,0x33 ;9600 baud rate
OUT UBRR0L,R16
LDI R16,0xFF ;Port B is output
OUT DDRB,R16
RCVE:
SBIS UCSR0A,RXC0 ;is any byte in UDR?
RJMP RCVE ;wait more
IN R17,UDR0 ;send UDR to R17
OUT PORTB,R17 ;send R17 to PORTB
RJMP RCVE ;do it again
RECEIVE:
SBIS UCSR0A,RXC0 ;is there new data?
RJMP TRANSMIT ;skip receive cmnds
IN R17,UDR0 ;move UDR to R17
OUT PORTB,R17 ;move R17 TO PORTB
TRANSMIT:
SBIS UCSR0A,UDRE0 ;is UDR empty?
RJMP SKIP_TX ;skip transmit cmnds
IN R17,PINA ;move Port A to R17
OUT UDR0,R17 ;send R17 to UDR
SKIP_TX:
RJMP RECEIVE ;do it again
UDRE_INT_HANDLER:
LDI R26,'G' ;send 'G'
OUT UDR0,R26 ;to UDR0
RETI
XTAL=8M