P.S. гугль знает все, ну так он пусть и напишет на форуме
P.S. гугль знает все, ну так он пусть и напишет на форуме
Мастер Ломастер писал(а): что ж, выход один - снова подкорректировать константу, которая соответствует "чистой" задержке в1 микросекунду, т.е. взять не 0.8, а меньше. т.е. в моих опытах вместо 100-101-102 и т.п. задержек получалось примерно (десятые доли откидываю) 112-113-114 и т.д.
Код: Выделить всё
void UART_Init(void)
{
UBRRH = UBRRH_VALUE;
UBRRL = UBRRL_VALUE;
UCSRB = (1 << TXEN) | (1 << RXEN);
UCSRC = (1 << USBS) | (3 << UCSZ0);
stdin = &UART_console;
stdout = &UART_console;
}Код: Выделить всё
void getstring(char *a, char size){
char ch, i = 0;
do{
//ch = fgetc(stdin);
//ch = getchar(stdin);
while ( !(UCSRA & (1<<RXC)) )
ch = UDR;
if(ch == '\n' || ch == '\r') ch = '\0';
if(i == size) ch = '\0';
a[(int)i] = ch;
i++;
} while(ch != '\0' && i <= size);
}Код: Выделить всё
puts("Hello\r");
char a[bufersize];
getstring(a, bufersize);
//puts(a);
Код: Выделить всё
//ch = fgetc(stdin);
//ch = getchar(stdin);
while ( !(UCSRA & (1<<RXC)) )
ch = UDR;если не ошибетесь - это будет первое очко в вашу пользуBerZerK-ku писал(а):который раз приходится править "банальный пример", чтобы он заработал?
Подскажите, и что же надо запихнуть в _delay_us() в вашей функции, чтобы получить желаемый результат для 100, 200 и т.д. мкс? Вряд ли ошибусь, если скажу что ничего не получится.
там писали не совсем об этой теме. здесь, очевидно, нерешаемая задача в рамках WinAVR - возможно, на чистом ассемблере и можно добиться почти нормального решения, но на Си - маловероятно. кратко: здесь идет речь о функциях ПРОГРАММНОЙ задержки, задаваемой значением переменной. причем кое-кому хочется иметь возможность получать задержки с шагом в 1 микросекунду в диапазоне от 1 микросекунды до часов и болееurry писал(а):так вроде писали
http://www.radiokot.ru/forum/viewtopic. ... &start=600
http://kazus.ru/forums/showthread.php?t=17495&page=9
не, незачет как 4 применение
А куда его включать-тоurry писал(а):включить в makefile uart.c, возможно.
Код: Выделить всё
...
# Target file name (without extension).
TARGET = main
# Object files directory
# To put object files in current directory, use a dot (.), do NOT make
# this an empty or blank macro!
OBJDIR = .
# List C source files here. (C dependencies are automatically generated.)
SRC = $(TARGET).c
# List C++ source files here. (C dependencies are automatically generated.)
CPPSRC =
...urry писал(а):приложите мейкфайл
Код: Выделить всё
# List C source files here. (C dependencies are automatically generated.)
SRC = $(TARGET).c uart.c Код: Выделить всё
TARGET = rom_winavr_mob
F_CPU = 20000000
CSRC = main.c lmx2322.c
ASRC =
MCU_TARGET = atmega48
OPTIMIZE = -Os -mcall-prologues
DEFS =
LIBS =
DEBUG = dwarf-2
CC = avr-gcc
ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs $(DEFS)
ALL_ASFLAGS = -mmcu=$(MCU_TARGET) -I. -x assembler-with-cpp $(ASFLAGS)
CFLAGS = -g$(DEBUG) -Wall $(OPTIMIZE) -mmcu=$(MCU_TARGET) $(DEFS)
LDFLAGS = -Wl,-Map,$(TARGET).map
OBJ = $(CSRC:.c=.o) $(ASRC:.S=.o)
OBJCOPY = avr-objcopy
OBJDUMP = avr-objdump
SIZE = avr-size
all: clean $(TARGET).elf lst text size
$(TARGET).elf: $(OBJ)
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^ $(LIBS)
clean:
rm -rf *.o $(TARGET).elf *.eps *.bak *.a
rm -rf *.lst *.map $(EXTRA_CLEAN_FILES)
rm -rf $(TARGET).hex
size: $(TARGET).elf
$(SIZE) -C --mcu=$(MCU_TARGET) $(TARGET).elf
lst: $(TARGET).lst
%.lst: %.elf
$(OBJDUMP) -h -S $< > $@
%.o : %.S
$(CC) -c $(ALL_ASFLAGS) $< -o $@
text: hex
hex: $(TARGET).hex
%.hex: %.elf
$(OBJCOPY) -j .text -j .data -O ihex $< $@
urry писал(а):это как бы немного неправильно, при очистке может не задеть объектный файл, все как-то проще.
кусок мой мейкфайл от чего-то там
может и можно, просто вдруг я страшный извращенец, я спросил, и жду ответа. да или нет, если да то как?BCluster писал(а):Ну в винавр я не знаю если возможно, в IAR возможно точно. Вопрос - а зачем вам это нужно? Может есть другой способ решить проблему?
если вам в жизни не хватает геморроя, то можно его получить. WinAVR для задуманного вами предоставляет 2 способа:shurikss123 писал(а):Привет всем, есть вопрос по поводу работы внутренней eepprom.
в интернетах надыбал что если задать переменную так volatile int EEMEM butt1=0; то он сформирует файл с данными eeprom, и его можно записать, так вот а как задать адрес этой переменной (чтоб он эти данные засунул не в первую ячейку, а к примеру в 20-ю).