/*demo*/ #include "asf.h" uint8_t data; // character holding // setup int main(void){ // bitrate selection USARTD1.BAUDCTRLA = 80; // not sure about these, read datasheet! USARTD1.BAUDCTRLB = 10; // setup interrupts USARTD1.CTRLA |= USART_RXCINTLVL_LO_gc | USART_TXCINTLVL_OFF_gc | USART_DREINTLVL_OFF_gc; // enables the module USARTD1.CTRLB = USART_TXEN_bm | USART_RXEN_bm; // sets the mode: async, no parity, 8 bit data USARTD1.CTRLC = USART_CMODE_ASYNCHRONOUS_gc | USART_PMODE_DISABLED_gc | USART_CHSIZE_8BIT_gc; // setup tx pin as output (find the pins! which ones are you using! see datasheet - have to use particular pins) PORTD.OUTSET = PIN2_bm; PORTD.DIRSET = PIN2_bm; // setup rx pin as input PORTD.OUTCLR = PIN3_bm; PORTD.DIRCLR = PIN3_bm; // now we can while(1){ while(!(USARTD1.STATUS & USART_DREIF_bm)); // hang-10, wait for data ready empty flag USARTD1.DATA = data; // return the data we received during the ISR } } ISR(USARTD1_RXC_vect){ // this function is called when the RXIN interrupt goes off data = USARTD1->DATA; }