Вопросы по С/С++ (СИ)
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
В МикроСи, на сколько мне известно, есть доступ к отдельным битам. Почитайте хелп.
Re: Вопросы по С/С++ (СИ)
Что значит к отдельным битам?
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
Это значит к отдельным битам байта/слова.
- unalex
- Мучитель микросхем
- Сообщения: 424
- Зарегистрирован: Сб авг 25, 2007 22:02:05
- Откуда: Германия, Viernheim
Re: Вопросы по С/С++ (СИ)
Slavok47 писал(а):а если мне нужно на PB1?
Код: Выделить всё
TRISB.F1 = 0; //это чтобы назначить входом
PORTB.F1 = 0; // это чтобы вывести 0
Коктейль "Рекурсивный": 20% спирта, 30% воды, 50% коктейля "Рекурсивный"...
Re: Вопросы по С/С++ (СИ)
unalex писал(а):Slavok47 писал(а):а если мне нужно на PB1?Код: Выделить всё
TRISB.F1 = 0; //это чтобы назначить входом
PORTB.F1 = 0; // это чтобы вывести 0
Спасибо! а что такое F1? Если можно объясните словами и TRIS первый раз вижу, кстати нужно попробовать записать так:
DDRB = 0b00100001; вроде так должен быть PB2 и PB7 на вход...
- vitalik_1984
- Поставщик валерьянки для Кота
- Сообщения: 2482
- Зарегистрирован: Пт авг 27, 2010 05:57:06
- Откуда: Тюмень
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
unalex писал(а):Slavok47 писал(а):а если мне нужно на PB1?Код: Выделить всё
TRISB.F1 = 0; //это чтобы назначить входом
PORTB.F1 = 0; // это чтобы вывести 0
Не стоит путать мух с котлетами, TRIS Это для Microchip (PICXX), а DDR это для Atmel (AtmegaXX,AttinyXX)
Re: Вопросы по С/С++ (СИ)
vitalik_1984 писал(а):Не стоит путать мух с котлетами
Совершенно верно...
Тем более, что...
Код: Выделить всё
TRISB.F1 = 0;
это настроить на вывод, а не на ввод...
"Я не даю готовых решений, я заставляю думать!"(С)
- unalex
- Мучитель микросхем
- Сообщения: 424
- Зарегистрирован: Сб авг 25, 2007 22:02:05
- Откуда: Германия, Viernheim
Re: Вопросы по С/С++ (СИ)
HHIMERA писал(а):настроить на вывод, а не на ввод
сорри, очепятался
vitalik_1984 писал(а):TRIS Это для Microchip (PICXX)
честно говоря думал у обоих одинаково, в АВРками в нем дела не имел
Коктейль "Рекурсивный": 20% спирта, 30% воды, 50% коктейля "Рекурсивный"...
- Apparatchik
- Держит паяльник хвостом
- Сообщения: 908
- Зарегистрирован: Вс май 23, 2010 13:55:42
- Откуда: Украина, Александрия
Re: Вопросы по С/С++ (СИ)
dimka86 писал(а):доброго времени суток поскажите как из этого кода сделать функцию,которая возвращает строку 'txxxxxxe' символ 't' можно было заменить на любой другой, строка переменная получается путем преобразования числа в строкуСпойлер
Код: Выделить всё
for (q=0;strlen(str1)+1;q=q+1)
{
if(q==strlen(str1)+1){send_str[q]='e';send_str[q+1]='\0';break;}
if(q==0)send_str[q]='f';
else
send_str[q]=str1[q-1];
}
Вам нужна функция, меняющая первый символ в строке?
«И всё-таки она вертится!»
Re: Вопросы по С/С++ (СИ)
Не знаю почему я решил что DDB1_bit = 0; не работает, возможно и работает, не работает то что если кнопку переключить с PB0 на PB1 то она не работает, а это уже условие, а не состояние порта, так вот как это условие понимает что кнопка нажимается на PB0? и что нужно изменить что бы кнопку перенести на другой порт, объясните плиз словами
Код: Выделить всё
do {
if (Button(&PINB, 0, 1, 1)) { // Detect logical one
oldstate = 1; // Update flag
}
if (oldstate && Button(&PINB, 0, 1, 0)) { // Detect one-to-zero transition
PORTC = ~PORTC; // Invert PORTC
oldstate = 0; // Update flag
}
} while(1); // Endless loop
}- vitalik_1984
- Поставщик валерьянки для Кота
- Сообщения: 2482
- Зарегистрирован: Пт авг 27, 2010 05:57:06
- Откуда: Тюмень
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
Slavok47, вам бы в другую тему- Помогите опросить кнопку там и примеры есть и люди, от которых примеры часто тут бывают чтобы спросить, если что не понятно. Вообще из вашего примера можно только сказать что используются какие то не стандартные макросы, которые, вполне возможно будут не оптимальны.
Re: Вопросы по С/С++ (СИ)
vitalik_1984 писал(а):Вообще из вашего примера можно только сказать что используются какие то не стандартные макросы, которые, вполне возможно будут не оптимальны.
Да это пример из Хелпа по mikroC, что то я уже подумываю о переходе на AVRStudio... и кстати разобрался if (Button(&PINB, 0, 1, 1)), вот первый 0 это и есть PB0, а вот что значат другие цифры, пока не понял
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
что значат другие цифры, пока не понял
Неужели в хелпе про это не написано ? Не верюэто пример из Хелпа по mikroC
Я понимаю - лень читать, лучше на форуме вопрос задать...
"Чукча не читатель, чукча - писатель"...
Re: Вопросы по С/С++ (СИ)
Аlex писал(а):Неужели в хелпе про это не написано ? Не верю
читал, не понял
http://www.mikroe.com/download/eng/docu ... &width=970
Последний раз редактировалось Gudd-Head Пн апр 15, 2013 12:19:02, всего редактировалось 1 раз.
Причина: Нарушение п.2.7 Правил Форума
Причина: Нарушение п.2.7 Правил Форума
Re: Вопросы по С/С++ (СИ)
Apparatchik спасибо я уже разобрался
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
Slavok47 писал(а):читал, не понял
Prototype :
unsigned short Button(unsigned short *port, unsigned short pin, unsigned short time, unsigned short active_state);
Description :
Parameter port specifies the PIN register of the desired port; parameter pin is the pin number on designated port and goes from 0..7; parameter time is a debounce period in milliseconds; parameter active_state can be either 0 or 1, and it determines if the button is active upon logical zero or logical one.
- unalex
- Мучитель микросхем
- Сообщения: 424
- Зарегистрирован: Сб авг 25, 2007 22:02:05
- Откуда: Германия, Viernheim
Re: Вопросы по С/С++ (СИ)
Код: Выделить всё
unsigned short Button(unsigned short *port, unsigned short pin, unsigned short time, unsigned short active_state);для тех кто не дружит с английским(стыд и срам)))
port - НЕ нога а ПОРТ(как справедливо заметил более внимательный коллега)//стыд и срам мне невнимательному
pin - НОГА//еще раз стыд и срам мне невнимательному
time - время антидребезга(в миллисекундах)
active_state - активное состояние кнопки(0, 1)
Последний раз редактировалось unalex Пн апр 15, 2013 15:18:04, всего редактировалось 1 раз.
Коктейль "Рекурсивный": 20% спирта, 30% воды, 50% коктейля "Рекурсивный"...
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
Поправлю.port - нога(0..7)
pin - нога (0..7)
Re: Вопросы по С/С++ (СИ)
Спасибо ребята, теперь стало понятно, попробую в разных вариантах
- ibiza11
- Поставщик валерьянки для Кота
- Сообщения: 1900
- Зарегистрирован: Сб фев 21, 2009 13:11:40
- Откуда: Москва
Re: Вопросы по С/С++ (СИ)
Доброго времени суток всем Котам!
Гуру Си, помогите, я заблудился в трех соснах, двух структурах.Объявляю два типа, с первым типом screen_item_t все понятно, проблем нет (привожу его, чтобы было понятно откуда ноги растут).
Второй тип screen_t содержит несколько элементов, последний из них должен быть массив указателей на переменные типа screen_item_t.
Внимание вопрос: как мне объявить переменную типа screen_t и одновременно ее инициализировать? Точнее вопрос, как инициализировать массив внутри этой структуры?
пробовал так:пишет ошибку:
Гуру Си, помогите, я заблудился в трех соснах, двух структурах.
Код: Выделить всё
typedef struct{
const uint8_t *a;
const uint8_t b;
const void *c;
} screen_item_t;
typedef struct{
const uint8_t *a;
const void *b;
const uint8_t c;
const screen_item_t *x[];
} screen_t;
Второй тип screen_t содержит несколько элементов, последний из них должен быть массив указателей на переменные типа screen_item_t.
Внимание вопрос: как мне объявить переменную типа screen_t и одновременно ее инициализировать? Точнее вопрос, как инициализировать массив внутри этой структуры?
пробовал так:
Код: Выделить всё
const uint8_t a,b;
screen_item_t Item0 = {&a, 0, &b};
screen_item_t Item1 = {&a, 0, &b};
screen_item_t Item2 = {&a, 0, &b};
screen_item_t Item3 = {&a, 0, &b};
screen_t Screen0 = { &a,
&b,
4,
{&Item0, &Item1, &Item2, &Item3},
}; ЗЫ Поправил немного пост.test.c(55): error: #146: too many initializer values
Ставим плюсы: )