summaryrefslogtreecommitdiff
path: root/final_project/serial.c
blob: bb5b58f9a5f08d30ddf66021f1d77819dc3135c2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
/*
 * CFile1.c
 *
 * Created: 4/3/2024 10:21:26 AM
 *  Author: bsw9xd
 */ 
#include "serial.h"

void usart_init() {
	volatile int ubrr = (F_CPU / (16UL * BAUD)) - 1; //TODO: why is this volatile int???
	UCSR1A = 0; //async normal communication
	UCSR1B = (1 << TXEN) | (1 << RXEN);
	UCSR1C = (1 << UCSZ0) | (1 << UCSZ1);
	
	
	UBRR1H = (unsigned char)(ubrr << 8);
	UBRR1L = (unsigned char)ubrr;
}
void usart_txt(char data) { //transmit data
	UDR1 = data; //buffer the data
	while(~UCSR1A & (1 << TXC)); //wait until the transmission is complete
	UCSR1A |= (1 << TXC);
	
}
char usart_rxt() {
	if(UCSR1A & (1 << RXC)) {
		return UDR1;
	}
	return '\0';
}

char usart_rxt_blocking() { //TODO maybe replace usart_txt
	while(!(UCSR1A & (1 << RXC))); //TODO simplify
	return UDR1;
}

void usart_txstr(char *str) {
	for(int i = 0; str[i] != '\0'; i++) usart_txt(str[i]);
}