Генератор на Atmega8 (микросекунды) большие погрешности
- Сообщения: 141
- Зарегистрирован: Ср окт 26, 2011 13:38:13
Ну так это же мне тут и показали 
Это не хвост, это антенна
- Реклама
Если нужно включить конкретные биты регистра не портя остальные, используют "ИЛИ - |", а чтобы сбросить используют "И - &"
- Сообщения: 141
- Зарегистрирован: Ср окт 26, 2011 13:38:13
Пытаюсь подцепить юарт.

Спойлер
Код: Выделить всё
#define F_CPU 10000000UL
#include <stdio.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include "fifo.h"
FIFO(64) uart_tx_fifo;
FIFO(64) uart_rx_fifo;
void uart_init(unsigned int baudrate)
{
UBRRH = (unsigned char) (baudrate>>8);
UBRRL = (unsigned char) baudrate;
UCSRC = (1 << URSEL) | (1 << UCSZ1) | (1 << UCSZ0);
UCSRB = (1 << TXEN) | (1 << RXEN) | (1 << RXCIE);
}
ISR(USART_RXC_vect)
{
unsigned char rxbyte = UDR;
if( !FIFO_IS_FULL( uart_rx_fifo ) ) {
FIFO_PUSH( uart_rx_fifo, rxbyte );
}
}
ISR(USART_UDRE_vect)
{
if(FIFO_IS_EMPTY(uart_tx_fifo)){
//если данных в fifo больше нет то запрещаем это прерывание
UCSRB &= ~(1 << UDRIE);
}
else {
//иначе передаем следующий байт
char txbyte = FIFO_FRONT(uart_tx_fifo);
FIFO_POP(uart_tx_fifo);
UDR = txbyte;
}
}
int uart_getc(FILE* file)
{
int ret;
cli();
if(!FIFO_IS_EMPTY(uart_rx_fifo)){
ret = FIFO_FRONT(uart_rx_fifo);
FIFO_POP(uart_rx_fifo);
}
else {
ret = _FDEV_EOF;
}
sei();
return ret;
}
int uart_putc( char c, FILE *file )
{
int ret;
cli(); //запрещаем прерывания
if( !FIFO_IS_FULL( uart_tx_fifo ) ) {
//если в буфере есть место, то добавляем туда байт
FIFO_PUSH( uart_tx_fifo, c );
//и разрешаем прерывание по освобождению передатчика
UCSRB |= ( 1 << UDRIE );
ret = 0;
}
else {
ret = -1; //буфер переполнен
}
sei(); //разрешаем прерывания
return ret;
}
int SetPrescaller(prescaller){
puts("OK\r\n");
switch(prescaller){
case('1'):
puts("SET 256\r\n");
break;
case('2'):
puts("SET 64\r\n");
break;
case('3'):
puts("SET 8\r\n");
break;
}
}
FILE uart_stream = FDEV_SETUP_STREAM(uart_putc, uart_getc, _FDEV_SETUP_RW);
int main(void){
stdout = stdin = &uart_stream;
uart_init(67);
sei();
puts("Hello world\r\n");
while(1)
{
int c = getchar();
if(c!=EOF){
char string[25];
itoa(c, string, 10);
puts("\r\n");
puts(string);
puts("\r\n");
//printf("INT: %d, STRING: %s\n",c,string);
//puts("\r\n");
putchar(c);
//SetPrescaller(c);
}
}
}
- Вложения
-
- Снимок.png
- (14.3 КБ) 644 скачивания
-
- fifo.h
- (761 байт) 326 скачиваний
Это не хвост, это антенна
- Сообщения: 141
- Зарегистрирован: Ср окт 26, 2011 13:38:13
Как теперь с этим работать?
Насколько я понимаю это коты принятных символов
Насколько я понимаю это коты принятных символов
Это не хвост, это антенна

