Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
07.09.2009, 13:07
|
|
Почётный гражданин KAZUS.RU
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,816
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
|
Re: как компилировать не поможете?
Сообщение от dexa
|
1 Как определить максимальную и минимальную задержи МК исходя из частоты кварца?
|
NM123 в своём стиле, затыкали парня ссылками..., нет что бы помочь....
код для IAR в прикреплёном - настроеный проект для IAR.
Код:
|
/************************************************** *****
ПРИМЕР 1 :: ВРАЩЕНИЕ МОТОРАМИ ВПЕРЕД-НАЗАД :: MYROBOT.RU
************************************************** ******/
#define fclc 8000000 //Hz
#include "iotiny2313.h"
//библиотеки компилятора
#include ‹inavr.h›
#include "main.h"
//-------------------------------------------------------------------------------------------------
//для удобства и читабельности обьявляем ножки портов----------------------------------------------
#define pin_out 1 //AVR для OUT
#define pin_inp 0 //AVR для IN
#define forward0_dir DDRD_Bit0 //ножки для направленния
#define forward1_dir DDRD_Bit1
#define reard0_dir DDRD_Bit2
#define reard1_dir DDRD_Bit3
#define forward0_out PORTD_Bit0 //ножки для вывода
#define forward1_out PORTD_Bit1
#define reard0_out PORTD_Bit2
#define reard1_out PORTD_Bit3
//-------------------------------------------------------------------------------------------------
void main(void){// начало основной программы
//конфигурируем ножки на вывод
forward0_dir=pin_out; //ножки для направленния
forward1_dir=pin_out; //ножки для направленния
reard0_dir=pin_out;
reard1_dir=pin_out;
while (1) { // Бесконечный цикл
// ---------- вращаем моторы вперед 1 сек ----------
forward0_out=1; // установить "1" на линии 1 порта C
forward1_out=0; // установить "0" на линии 2 порта C
reard0_out=1; // установить "1" на линии 3 порта C
reard1_out=0; // установить "0" на линии 4 порта C
// --------------------------------------------------
delay_ms(1000); // ждем 1 сек.
// ---------- вращаем моторы назад 1 сек ----------
forward0_out=1; // установить "1" на линии 1 порта C
forward1_out=0; // установить "0" на линии 2 порта C
reard0_out=1; // установить "1" на линии 3 порта C
reard1_out=0; // установить "0" на линии 4 порта C
// --------------------------------------------------
delay_ms(1000); // ждем 1 сек.
// --------------------------------------------------
} // закрывающая скобка бесконечного цикла
} // закрывающая скобка основной программы |
|
|
|
|
07.09.2009, 13:14
|
|
Почётный гражданин KAZUS.RU
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,816
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
|
Re: как компилировать не поможете?
NM123 в своём стиле, затыкали парня ссылками..., нет что бы помочь....
код для IAR в прикреплёном - настроеный проект для IAR.
Код:
|
/************************************************** *****
ПРИМЕР 1 :: ВРАЩЕНИЕ МОТОРАМИ ВПЕРЕД-НАЗАД :: MYROBOT.RU
************************************************** ******/
#define fclc 8000000 //Hz
#include "iotiny2313.h"
//библиотеки компилятора
#include ‹inavr.h›
#include "main.h"
//-------------------------------------------------------------------------------------------------
//для удобства и читабельности обьявляем ножки портов----------------------------------------------
#define pin_out 1 //AVR для OUT
#define pin_inp 0 //AVR для IN
#define forward0_dir DDRD_Bit0 //ножки для направленния
#define forward1_dir DDRD_Bit1
#define reard0_dir DDRD_Bit2
#define reard1_dir DDRD_Bit3
#define forward0_out PORTD_Bit0 //ножки для вывода
#define forward1_out PORTD_Bit1
#define reard0_out PORTD_Bit2
#define reard1_out PORTD_Bit3
//-------------------------------------------------------------------------------------------------
void main(void){// начало основной программы
//конфигурируем ножки на вывод
forward0_dir=pin_out; //ножки для направленния
forward1_dir=pin_out; //ножки для направленния
reard0_dir=pin_out;
reard1_dir=pin_out;
while (1) { // Бесконечный цикл
// ---------- вращаем моторы вперед 1 сек ----------
forward0_out=1; // установить "1" на линии 1 порта C
forward1_out=0; // установить "0" на линии 2 порта C
reard0_out=1; // установить "1" на линии 3 порта C
reard1_out=0; // установить "0" на линии 4 порта C
// --------------------------------------------------
delay_ms(1000); // ждем 1 сек.
// ---------- вращаем моторы назад 1 сек ----------
forward0_out=1; // установить "1" на линии 1 порта C
forward1_out=0; // установить "0" на линии 2 порта C
reard0_out=1; // установить "1" на линии 3 порта C
reard1_out=0; // установить "0" на линии 4 порта C
// --------------------------------------------------
delay_ms(1000); // ждем 1 сек.
// --------------------------------------------------
} // закрывающая скобка бесконечного цикла
} // закрывающая скобка основной программы |
Сообщение от dexa
|
1 Как определить максимальную и минимальную задержи МК исходя из частоты кварца?
|
для IAR AVR
#include ‹intrinsics.h› //подключить функции заддержек циклов
#define delay_us(temp)(__delay_cycles((temp * fclc)/1000000));/* макрос задержки на "temp" микросекунд. точная задержка при целом значении задающей частоты генератора в МГц (1, 2, 3, 4, ..., 10, 11, ...) */// 571 + 2, 387 + 2
#define delay_ms(temp)(__delay_cycles((temp * fclc)/1000));/* макрос задержки на "temp" миллисекунд. точная задержка при целом значении задающей частоты генератора в кГц (1, 2, 3, 4, ..., 10, 11, ...) */
#define delay_s(temp)(__delay_cycles(temp * fclc));/* макрос задержки на "temp" секунд. точная задержка при целом значении задающей частоты генератора в Гц (1, 2, 3, 4, ..., 10, 11, ...) */
вызов задержек
delay_us(1000); //в микросекундах
delay_ms(1000); //в милисекундах
delay_s(1000); //в секундах
но если могозадачаный проект, задержки организовывать по прерываниям таймера
Последний раз редактировалось picavr; 07.09.2009 в 13:24.
|
|
|
|
07.09.2009, 14:49
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
Re: как компилировать не поможете?
Сообщение от dexa
|
А стандартный метод это _delay_ms()?
|
Да.
Сообщение от dexa
|
И почему _delay_ms(250) это 0,25 секунд?
|
Потому что _delay_ms принимает как параметр величину задержки в миллисекундах. А в одной секунде, как ни странно ровно 1000 миллисекунд. Кстати можно передавать и не целое значение - _delay_ms(1.75) или _delay_ms(0.6
|
|
|
|
07.09.2009, 15:14
|
|
Почётный гражданин KAZUS.RU
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,816
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
|
Re: как компилировать не поможете?
Сообщение от kison
|
А в одной секунде, как ни странно ровно 1000 миллисекунд. (0.6
|
Школьный курс физики.. приставки к величинам системы СИ...
Мега, Кило, милли, микро, нано, пико...
|
|
|
|
07.09.2009, 18:00
|
|
Прохожий
Регистрация: 06.09.2009
Сообщений: 7
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: как компилировать не поможете?
Спасибо за ответ.
Как я понял функция имеет такой тип:
тип_возвращаемого_значения имя_ф-ии (список_параметров)
вместо тип_возвращаемого_значения просто тип int, char и т.д., или же void если ф-я не возвращает никакого значения.
1) что значит возвращает и не возвращает?
2) список_параметров тоже не совсем ясно. Например,
int primer (int n)
здесь в скобках просто объявление переменной n, что можно было сделать так 2-мя строчками:
int n
int primer ()? Все правильно понял?
3) Но в скобках иногда указано void:
void main(void) - что это значит? В книге написано что если не требуется передавать никакие параметры, то в скобках пишем void, токгда смысл пустыхскобок в чем?
Извините, просто сильно запутался((((
|
|
|
|
07.09.2009, 18:18
|
|
Почётный гражданин KAZUS.RU
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,816
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
|
Re: как компилировать не поможете?
Сообщение от dexa
|
Но в скобках иногда указано void:
void main(void) - что это значит? В книге написано что если не требуется передавать никакие параметры, то в скобках пишем void, токгда смысл пустых скобок в чем?
|
А что там непонятного?
Таков синтаксис вызова функции:
OUTPUT PARAMETER FUNKCIA (INPUTS PARAMETERS);
Есл ничего не передаём и не возвращаем то
VOID FUNKCIA (VOID);
но VOID можно заменить на пустое место (опустить как грят математики):
FUNKCIA ();
а вот скобки уже опускать нельзя.. нарушается синтаксис.
Сообщение от dexa
|
Спасибо за ответ.
Как я понял функция имеет такой тип:
тип_возвращаемого_значения имя_ф-ии (список_параметров)
вместо тип_возвращаемого_значения просто тип int, char и т.д., или же void если ф-я не возвращает никакого значения.
1) что значит возвращает и не возвращает?
2) список_параметров тоже не совсем ясно. Например,
int primer (int n)
здесь в скобках просто объявление переменной n, что можно было сделать так 2-мя строчками:
int n
int primer ()? Все правильно понял?
3) Но в скобках иногда указано void:
void main(void) - что это значит? В книге написано что если не требуется передавать никакие параметры, то в скобках пишем void, токгда смысл пустыхскобок в чем?
Извините, просто сильно запутался((((
|
Код:
|
OUTPUT PARAMETER FUNKCIA (INPUTS PARAMETERS); |
OUTPUT PARAMETER = выходной параметр функции, обычно является результатом работы функции, так удобнее записывать чем после обработки функции преверять какую то переменну...
пример:
удобнее вмеcто такой записи:
Код:
|
FUNKCIA ();
TEMP = РЕЗУЛЬТАТ ОБРАБОТКИ ФУНКЦИИ; |
INPUTS PARAMETERS - входныЕ параметрЫ. Параметры необходимые для работы функции, так же удобнее передавать непосредственно а не через дополнительные переменные:
пример:
Код:
|
TEMP = FUNKCIA (1,2,3,4,5); |
удобнее вмеcто такой записи:
Код:
|
TEMP1 = 1;
TEMP2 = 2;
TEMP3 = 3;
TEMP4 = 4;
TEMP5 = 5;
FUNKCIA (); |
Разрядность и количество входных параметров, указываются при описании функции.
//тип выходного тип входных параметров
unsigned long FUNKCIA (unsigned int a. unsigned char b. unsigned long c);
Сообщение от dexa
|
что значит возвращает и не возвращает?
|
результат работы функции нужно передавать на ружу из функции или нет...
Последний раз редактировалось picavr; 07.09.2009 в 18:24.
|
|
|
|
07.09.2009, 18:42
|
|
Прохожий
Регистрация: 06.09.2009
Сообщений: 7
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: как компилировать не поможете?
Спасибо, буду читать дальше. Кстати, читаю Шпака - "Программирование на языке C для AVR и PIC микроконтроллеров", или может есть более хорошие книги по С для AVR?
з.ы. пошел искать схему учебного стенда))
|
|
|
|
07.09.2009, 20:18
|
|
Почётный гражданин KAZUS.RU
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,816
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
|
Re: как компилировать не поможете?
Сообщение от dexa
|
Спасибо, буду читать дальше. Кстати, читаю Шпака - "Программирование на языке C для AVR и PIC микроконтроллеров", или может есть более хорошие книги по С для AVR?
з.ы. пошел искать схему учебного стенда))
|
Я вот то же с Шпака начал... пока не напоролся на то, что не всё там правильно, тут на форуме послали меня к "Язык C [Керниган Б.В., Ричи Д.М.] " и "Язык Cи Герберт Шилдт"
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 19:27.
|
|