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

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

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

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

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

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

Сообщение Slavok47 »

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

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

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

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

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

Сообщение unalex »

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


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

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

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

Сообщение Slavok47 »

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: Вопросы по С/С++ (СИ)

Сообщение vitalik_1984 »

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


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

TRISB.F1 = 0; //это чтобы назначить входом
PORTB.F1 = 0; // это чтобы вывести 0

Не стоит путать мух с котлетами, TRIS Это для Microchip (PICXX), а DDR это для Atmel (AtmegaXX,AttinyXX)
HHIMERA
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

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

Сообщение HHIMERA »

vitalik_1984 писал(а):Не стоит путать мух с котлетами

Совершенно верно...
Тем более, что...

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

TRISB.F1 = 0; 

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

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

Сообщение unalex »

HHIMERA писал(а):настроить на вывод, а не на ввод

сорри, очепятался

vitalik_1984 писал(а):TRIS Это для Microchip (PICXX)

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

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

Сообщение 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];
                    }

Вам нужна функция, меняющая первый символ в строке?
«И всё-таки она вертится!»
Slavok47
Встал на лапы
Сообщения: 144
Зарегистрирован: Ср дек 14, 2011 08:12:49

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

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

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

Сообщение vitalik_1984 »

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

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

Сообщение Slavok47 »

vitalik_1984 писал(а):Вообще из вашего примера можно только сказать что используются какие то не стандартные макросы, которые, вполне возможно будут не оптимальны.

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

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

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

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

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

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

Сообщение Slavok47 »

Аlex писал(а):Неужели в хелпе про это не написано ? Не верю

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

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

Сообщение dimka86 »

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

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

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

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

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

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

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

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

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

Сообщение Slavok47 »

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

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

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

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