Опитвам се да разделя една десетична стойност на два интиджъра (преди и след запетаята, по идея на брадър кюфт) и след тва да я притна в терминала.
Ся тва работи:
#include <stdio.h>
#include <math.h>
#include <avr/io.h>
#include <util/delay.h>
#define NUM_READINGS 10
#define USART_BAUDRATE 9600
#define UBRR_VALUE (((F_CPU / (USART_BAUDRATE * 16UL))) - 1)
#define PORT_ON(port,pin) port |= (1<<pin)
#define PORT_OFF(port,pin) port &= ~(1<<pin)
float ReadAndReturnAVG(uint8_t *values, uint8_t sizeOfValues);
void USART0Init(void)
{
// Set baud rate
UBRR0H = (uint8_t)(UBRR_VALUE>>8);
UBRR0L = (uint8_t)UBRR_VALUE;
// Set frame format to 8 data bits, no parity, 1 stop bit
UCSR0C |= (1<<UCSZ01)|(1<<UCSZ00);
//enable transmission and reception
UCSR0B |= (1<<RXEN0)|(1<<TXEN0);
}
uint8_t USART0SendByte(char u8Data, FILE *stream)
{
if(u8Data == '\n')
{
USART0SendByte('\r', stream);
}
//wait while previous byte is completed
while(!(UCSR0A&(1<<UDRE0))){};
// Transmit data
UDR0 = u8Data;
}
float ReadAndReturnAVG(uint8_t *values, uint8_t sizeOfValues) {
uint8_t i = 0;
uint8_t total = 0;
float average;
for (i = 0; i < 17; i++) {
values[i] = 9;
total = total + values[i];
}
average = (float)total / (float)sizeOfValues;
return average;
}
//set stream pointer
FILE usart0_str = FDEV_SETUP_STREAM(USART0SendByte, NULL, _FDEV_SETUP_WRITE);
int main() {
//Initialize USART0
USART0Init();
uint8_t values[NUM_READINGS] = {0};
float average = 0.0f;
//assign our stream to standard I/O streams
stdout=&usart0_str;
while(1) {
average = ReadAndReturnAVG(values, NUM_READINGS);
uint8_t d1 = average;
float f2 = average - d1;
uint8_t d2 = (uint8_t)(f2 * 100);
printf("Average: %d.%02d\n", d1
, d2
); _delay_ms(500);
}
}
Average: 15.30
Average: 15.30
Average: 15.30
Average: 15.30
Average: 15.30
Average: 15.30
Average: 15.30
Average: 15.30
Average: 15.30
Average: 15.30
Average: 15.30
Average: 15.30
Average: 15.30
Average: 15.30
Обаче, ако задам i < 18 да бъде по-малко от 18, 19, 20 и нагоре нищо не се принтва в терминала и идея си нямам защо

Стойноста на числото е 8 bit.