Вопросы по С/С++ (СИ)

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

В МикроСи, на сколько мне известно, есть доступ к отдельным битам. Почитайте хелп.
Контактная информация:
Реклама
Встал на лапы
Сообщения: 144
Зарегистрирован: Ср дек 14, 2011 08:12:49

Сообщение Slavok47 »

Что значит к отдельным битам?
Реклама
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

Это значит к отдельным битам байта/слова.
Контактная информация:
Мучитель микросхем
Аватара пользователя
Сообщения: 424
Зарегистрирован: Сб авг 25, 2007 22:02:05
Откуда: Германия, Viernheim

Сообщение unalex »

Slavok47 писал(а):а если мне нужно на PB1?

Код: Выделить всё

TRISB.F1 = 0; //это чтобы назначить входом
PORTB.F1 = 0; // это чтобы вывести 0
Коктейль "Рекурсивный": 20% спирта, 30% воды, 50% коктейля "Рекурсивный"...
Реклама
Эиком - электронные компоненты и радиодетали
Встал на лапы
Сообщения: 144
Зарегистрирован: Ср дек 14, 2011 08:12:49

Сообщение Slavok47 »

unalex писал(а):
Slavok47 писал(а):а если мне нужно на PB1?

Код: Выделить всё

TRISB.F1 = 0; //это чтобы назначить входом
PORTB.F1 = 0; // это чтобы вывести 0
Спасибо! а что такое F1? Если можно объясните словами и TRIS первый раз вижу, кстати нужно попробовать записать так:
DDRB = 0b00100001; вроде так должен быть PB2 и PB7 на вход...
Реклама
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень

Сообщение vitalik_1984 »

unalex писал(а):
Slavok47 писал(а):а если мне нужно на PB1?

Код: Выделить всё

TRISB.F1 = 0; //это чтобы назначить входом
PORTB.F1 = 0; // это чтобы вывести 0
Не стоит путать мух с котлетами, TRIS Это для Microchip (PICXX), а DDR это для Atmel (AtmegaXX,AttinyXX)
Контактная информация:
Реклама
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

Сообщение HHIMERA »

vitalik_1984 писал(а):Не стоит путать мух с котлетами
Совершенно верно...
Тем более, что...

Код: Выделить всё

TRISB.F1 = 0; 
это настроить на вывод, а не на ввод... :))
"Я не даю готовых решений, я заставляю думать!"(С)
Мучитель микросхем
Аватара пользователя
Сообщения: 424
Зарегистрирован: Сб авг 25, 2007 22:02:05
Откуда: Германия, Viernheim

Сообщение unalex »

HHIMERA писал(а):настроить на вывод, а не на ввод
сорри, очепятался
vitalik_1984 писал(а):TRIS Это для Microchip (PICXX)
честно говоря думал у обоих одинаково, в АВРками в нем дела не имел
Коктейль "Рекурсивный": 20% спирта, 30% воды, 50% коктейля "Рекурсивный"...
Держит паяльник хвостом
Аватара пользователя
Сообщения: 908
Зарегистрирован: Вс май 23, 2010 13:55:42
Откуда: Украина, Александрия

Сообщение Apparatchik »

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];
                    }
Вам нужна функция, меняющая первый символ в строке?
«И всё-таки она вертится!»
Встал на лапы
Сообщения: 144
Зарегистрирован: Ср дек 14, 2011 08:12:49

Сообщение Slavok47 »

Не знаю почему я решил что 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
}
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень

Сообщение vitalik_1984 »

Slavok47, вам бы в другую тему- Помогите опросить кнопку там и примеры есть и люди, от которых примеры часто тут бывают чтобы спросить, если что не понятно. Вообще из вашего примера можно только сказать что используются какие то не стандартные макросы, которые, вполне возможно будут не оптимальны.
Контактная информация:
Встал на лапы
Сообщения: 144
Зарегистрирован: Ср дек 14, 2011 08:12:49

Сообщение Slavok47 »

vitalik_1984 писал(а):Вообще из вашего примера можно только сказать что используются какие то не стандартные макросы, которые, вполне возможно будут не оптимальны.
Да это пример из Хелпа по mikroC, что то я уже подумываю о переходе на AVRStudio... и кстати разобрался if (Button(&PINB, 0, 1, 1)), вот первый 0 это и есть PB0, а вот что значат другие цифры, пока не понял
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

что значат другие цифры, пока не понял
это пример из Хелпа по mikroC
Неужели в хелпе про это не написано ? Не верю :)

Я понимаю - лень читать, лучше на форуме вопрос задать...
"Чукча не читатель, чукча - писатель"... :)))
Контактная информация:
Встал на лапы
Сообщения: 144
Зарегистрирован: Ср дек 14, 2011 08:12:49

Сообщение Slavok47 »

Аlex писал(а):Неужели в хелпе про это не написано ? Не верю
читал, не понял
http://www.mikroe.com/download/eng/docu ... &width=970
Последний раз редактировалось Gudd-Head Пн апр 15, 2013 12:19:02, всего редактировалось 1 раз.
Причина: Нарушение п.2.7 Правил Форума
Первый раз сказал Мяу!
Сообщения: 32
Зарегистрирован: Вт фев 21, 2012 15:05:12

Сообщение dimka86 »

Apparatchik спасибо я уже разобрался
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

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.
:)
Контактная информация:
Мучитель микросхем
Аватара пользователя
Сообщения: 424
Зарегистрирован: Сб авг 25, 2007 22:02:05
Откуда: Германия, Viernheim

Сообщение unalex »

Код: Выделить всё

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% коктейля "Рекурсивный"...
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

port - нога(0..7)
Поправлю.
pin - нога (0..7) :)
Контактная информация:
Встал на лапы
Сообщения: 144
Зарегистрирован: Ср дек 14, 2011 08:12:49

Сообщение Slavok47 »

Спасибо ребята, теперь стало понятно, попробую в разных вариантах
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Сообщение ibiza11 »

Доброго времени суток всем Котам!
Гуру Си, помогите, я заблудился в трех соснах, двух структурах.

Код: Выделить всё

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_item_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
ЗЫ Поправил немного пост.
Ставим плюсы: )
Ответить

Вернуться в «Разные вопросы по МК»