Код: Выделить всё
void mugaga(volatile unsigned int arr[])
{
unsigned int tick=9999;
unsigned int num=7;
tick--;
unsigned int tmp=tick;
while( num >4 ){
arr[num]=tmp%10;
tmp=tmp/10;
num--;
}
}
Код: Выделить всё
void mugaga(volatile unsigned int arr[])
{
unsigned int tick=9999;
unsigned int num=7;
tick--;
unsigned int tmp=tick;
while( num >4 ){
arr[num]=tmp%10;
tmp=tmp/10;
num--;
}
}
когда я читаю подобные просьбы, сразу вспоминаю, как в первом классе соседка по парте объясняла учителю: "у меня палочки кривые, потому что я папиной ручкой писала - у него почерк кривой, вот и ручка пишет криво".shootnikS писал(а):Пожалуйста напишите код инициализации на WinAVR
Код: Выделить всё
void mugaga(volatile unsigned int arr[] /* это еще зачем?! */){
unsigned int tick=9999;
unsigned int num=7;
tick--; // нафига?! сразу сделать tick = 9998; было нельзя?!
unsigned int tmp=tick; // нафига?! tick у вас нигде более не используется, зачем его копировать в ДРУГУЮ переменную?!
while( num >4 ){ // нафига?! начальное значение num известно, поэтому цикл ВСЕГДА будет прокручиваться 3 раза
// либо изначально не надо было 7 присваивать, либо с условием цикла что-то не то - где логика?!
arr[num]=tmp%10;
tmp=tmp/10;
num--;
}
}Код: Выделить всё
arr[7] = 8;
arr[6] = 9;
arr[5] = 9;Код: Выделить всё
void Ftype_1(volatile unsigned int array[], unsigned int tick) {
unsigned int num=3;
tick--;
while(num){array[num]=tick%10;tick=tick/10; num--;}
}Код: Выделить всё
array[3] = 8;
array[2] = 9;
array[1] = 9;
array[0] = 9;Код: Выделить всё
// i n i t TCNT0:
TIMSK =(1<<TOIE0); // Timer0 overflow interrupt enable
TCCR0 = 3; // Prescaller > ;0=STOP; 2=F/8; 3=F/64 4=F/256;
cnt_S = 0;
sei();
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
while(1)
{
if (cnt_1000ms == 1000) cnt_1000ms = 0; // clear conter 1ms
if (int_1ms == 1) cnt_1000ms ++; // if interrupt. Ò0 - increment counter 1 sec
int_1ms = 0; // clear flag int_1ms
//...................
if (cnt_S == 1000) // if 1000ms -
{ InvBit(PORTC, 5); // invert. PIN C.5
cnt_S = 0; }; // clear cnt_S
if (cnt_1000ms ==1000) InvBit(PORTA, 0); // if 1000ms - invert. PIN A.0
};
return (0);
}
//*****************************************************************
ISR (TIMER0_OVF_vect)
{
cnt_S ++ ;
TCNT0 = 0x06 ; // interrupt 1ms
int_1ms = 1; // set flag int_1ms
} и не получите. в WinAVR для работы с консольным вводом-выводом надо создать функции ввода-вывода байтов, указать их при инициализации потока стандартного ввода-вывода, и только потом пользоваться функциями printf-scanfVictor Gordienko писал(а):Прог. для передачи через UART
#include <avr/io.h>
#include <stdio.h>
int main (void)
{
int i=10;
UCSRB=(1<<RXEN)|(1<<TXEN);
UBRRL=0x33;
while (1)
{
printf ("i=i%\n\r",i);
}
}
Тестирую в протеусе но ничего не получаю на UART
Нашел пример с книги Программирование на языке С для AVR и PIC микроконтроллеров (Шпак Ю.А., 2006)ARV писал(а):и не получите. в WinAVR для работы с консольным вводом-выводом надо создать функции ввода-вывода байтов, указать их при инициализации потока стандартного ввода-вывода, и только потом пользоваться функциями printf-scanfVictor Gordienko писал(а):Прог. для передачи через UART
#include <avr/io.h>
#include <stdio.h>
int main (void)
{
int i=10;
UCSRB=(1<<RXEN)|(1<<TXEN);
UBRRL=0x33;
while (1)
{
printf ("i=i%\n\r",i);
}
}
Тестирую в протеусе но ничего не получаю на UART
ранее я давал ссылочку о моем переводе доки WinAVR - скачайте, почитатйте... описание stdio.h идет здесь
да, в протеусе вложено .lix писал(а):режимы портов на хосте и МК точно совпадают?
Код: Выделить всё
eeprom_read_block( (void*)&set_value, (void*)2, SCHED_STORE_LENGTH);
for( i=0; i<SCHED_STORE_LENGTH; i++ ){
set_value[i]=eeprom_read_byte((void*)2+i);
}
if( eeprom_is_ready() ) i++;
Хм, ну ладно. Убрал вызов eeprom_read_block, заменил его циклом, в котором читаю по байтам. Все хорошо, компилится. Т.к. проц уже под завязку, откладываю работу с eeprom и иду шерстить внешние библиотеки, выкидывать из них ненужные функции и сокращать возможности. Спустя какое-то время ковыряния во внешних библиотеках проект опять перестает компилиться:obj\Debug\main.o||In function `main':|
D:\HPMon\main.c|470|undefined reference to `__eerd_block_m8535'|
Что за? Убираю вызов eeprom_read_byte, добавляю вызов eeprom_is_ready просто для того чтобы убедиться в работоспособности библиотеки - нормально. Возвращаю назад вызов eeprom_read_* - ошибки. Переставляю winavr - ошибки. Гуглю - ноль результатов (проблема у человека на avrfreaks - не в счет, там косяк visual studio был). Параллельно установил winavr-20090313, подменил его вместо 20100110 - о, проект скомпилился без ошибок. Проверил, вернул назад 20100110 - ошибки. Правда, в железе пока не проверял, код для eeprom, кроме этих двух тестовых вызовов eeprom_read_*, я еще не писал.obj\Debug\main.o||In function `main':|
D:\HPMon\main.c|473|undefined reference to `__eerd_byte_m8535'|
вот так:alexval2006 писал(а):в проге на CV встретилась такая строчка
code [cnt_bit] = !PIND.2; //записываем бит кода, PIND.2 - входная нога, прерывание 0
как выглядит её аналог в WinAVR ?
code [cnt_bit] = !(((PIND) >> (2)) & 0x01); // ???
Код: Выделить всё
code[cnt_bit] = !(PIND & _BV(PD2));