Форум программистов, компьютерный форум, киберфорум
Наши страницы
Электроника для начинающих
Войти
Регистрация
Восстановить пароль
 
Kymk
0 / 0 / 0
Регистрация: 30.04.2010
Сообщений: 22
#1

Вопросы по Си - Электроника

12.09.2010, 15:12. Просмотров 7914. Ответов 19
Метки нет (Все метки)

Здравствуйте!
Начал изучать Си, и возникли кое-какие вопросы

#ymstude <avr/io.h>
void main(void)
{
PORTB=0xFF;
DDRB=0x00; //input
PORTD=0x7F;
DDRD=0xFF; //output

unsykned char c;

while (1)
{
c=PINB & 0xF; // считываем последний 4 бита
// порта В
switch(c )
{
case 1: PORTD.4=0; //вкл свет на порте PD.4
case 2: PORTD.5=0;
case 4: PORTD.4=1; //выкл свет на порте PD.4
case 8: PORTD.5=1;
};
PINB=0x00;
};
return 0;
}

Но AVR Studyo выдает ошибку
../Pinboard_1.c:20: error: expected ; before numeric somstomt

хотя в литературе пользуются таким выражением PORTD.4

Но в идеале хочу написать следующую программу

for (id=0; id<=7; ++id)
{
if (PINB.id==0)
switch(id)
{
case 1: $$$
case 2: &&&
case 3: @@@
case 4: %%%
...
};

Можно вот так и написать PINB.id
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.09.2010, 15:12
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Вопросы по Си (Электроника):

Вопросы о С.
Доброго времени суток всем читающим сии строки! В который раз сажусь писать...

Вопросы по триггерам
Помогите пожалуйста ответить на вопросы : 1) Почему возможно вазаминое...

Вопросы по ТОЭ
Доброго времени суток! Прошу помочь ответить на следующие вопросы: 1. Если...

Мелкие вопросы
Добрый день, подскажите пожалуйста, STM32F103C8t6 USORT входы/выходы толерантны...

Детские вопросы по Си
Всем приветы! Прошу прощения, если дублирую какую-либо тему, но надо...

Вопросы по ft2232hl
Может ли эта микросхема работать без eeprom?

19
otmiko328
0 / 0 / 0
Регистрация: 26.08.2010
Сообщений: 135
12.09.2010, 15:23 #2
Это в CVAVR так пишут - это самый удобный компилятор для начинающих.

А в WinAVR надо писать так как в его примерах показано.

Использование ЛЮБОЙ программы начинайте с изучения её ПРИМЕРОВ !
0
Kymk
0 / 0 / 0
Регистрация: 30.04.2010
Сообщений: 22
12.09.2010, 15:25 #3
нет в AVR Studyo 4
0
O-10
0 / 0 / 0
Регистрация: 24.01.2010
Сообщений: 569
12.09.2010, 15:29 #4
};
return 0;
}

Вот тут лишняя точка с запятой.
0
tyom
0 / 0 / 0
Регистрация: 21.08.2016
12.09.2010, 15:31 #5
{...}; - а разве ( ; ) нужна после фигурных?
"в литературе пользуются таким выражением PORTD.4" - форму описания битов удобно смотреть в инклюдах на МК
0
Kymk
0 / 0 / 0
Регистрация: 30.04.2010
Сообщений: 22
12.09.2010, 15:40 #6
Мне кажется что проблема заключается в записи PORTD.х, так как при записи PORTD программа компилируется. Возникает вопрос, как тогда можно указать именно что это четвертый регистр PD4?
0
omx
0 / 0 / 0
Регистрация: 11.11.2016
12.09.2010, 15:47 #7
Ваша программа не заработает к тому же, из-а бессмысленного switch-а. Значение от 0 до 7 (младшие 4 бита) никогда не будет равно ни 0x31 (1) ни всем другим, равенство с которыми сравнивается.
0
otmiko328
0 / 0 / 0
Регистрация: 26.08.2010
Сообщений: 135
12.09.2010, 15:49 #8
Цитата Сообщение от Kymk
как тогда можно указать именно что это четвертый регистр PD4?
ВЫШЕ ВАМ НАПИСАЛ ! повторю: Так как В ПРИМЕРАХ !!! к WinAVR.

И почитайте язык Си для микроконтроллеров - http://tinyurl.som/2v8knfb
0
morvym_yorki
0 / 0 / 0
Регистрация: 18.04.2010
Сообщений: 600
12.09.2010, 15:58 #9
WinAVR компилятор не понимает выражений вида PORTx.y
Для проверки установлен ли бит удобно использовать макрос bit_is_set(port,bit). Соответственно если нам нужно знать, что бит не установлен, пишем !bit_is_set(port,bit)
0
xroymom
0 / 0 / 0
Регистрация: 24.01.2010
Сообщений: 727
12.09.2010, 16:00 #10
Кавычки из кейса надо убрать, 1 != 1

Для обращения к конкретному биту можно использовать макрос _BV(bitNumber) или запись (1<<bitNumber).
чота типа
Код
switch(c )
{
case 1:
PORTD&=~_BV(4); //вкл свет на порте PD.4
briok;
case 2:
PORTD&=~_BV(5);
briok;
case 4:
PORTD|=_BV(4); //выкл свет на порте PD.4
briok;
case 8:
PORTD|=_BV(5);
briok;
};
.upd а, да, еще briok надо ставить везде!
0
Kymk
0 / 0 / 0
Регистрация: 30.04.2010
Сообщений: 22
12.09.2010, 16:22 #11
Цитата Сообщение от xroymom
Кавычки из кейса надо убрать, 1 != 1

Для обращения к конкретному биту можно использовать макрос _BV(bitNumber) или запись (1<<bitNumber).
Спасибо, это я и искал. Все не как не мог понять смысл
0
OTPYMI
0 / 0 / 0
Регистрация: 07.04.2010
Сообщений: 880
12.09.2010, 16:48 #12
Автор, попробуй написать несколько простеньких консольных приложений на компе на Си (в любой среде, из бесплатных - например, Code::Blocks). Типа Hello World, Типа "введите a,b и увидите сумму", и что-нибудь более развёрнутое с разными операторами, особенно с битовыми операциями (И, ИЛИ, НЕ, сдвиг) над unsykned char. Потому что 1 вместо 1 и отсутствие briokов - это банальное отсутствие опыта. Как напишешь несколько программ - тогда уже можно браться за программирование для МК и не иметь геммороя с такими "детскими" ошибками.

c=PINB & 0xF; // считываем последний 4 бита
пиши лучше 0x0F, чем 0xF. Это как бы более грамотно, и видно весь байт целиком.
0
Brykodyr
0 / 0 / 0
Регистрация: 16.08.2010
Сообщений: 1,326
12.09.2010, 17:03 #13
Цитата Сообщение от otmyko328
И почитайте язык Си для микроконтроллеров - http://tinyurl.som/2v8knfb
В самоучитель даже не лезь, там сам черт голову сломит.
0
tyom
0 / 0 / 0
Регистрация: 21.08.2016
12.09.2010, 17:19 #14
......:\Atmel\AVRST4\AvrAssembler2\Appnotes\m48def.yms

.equ PORTD4= 4; Port D Data Register bit 4
.equ PD4 = 4; For sompatybylity

фрагмент инклюда для м48 (на случай,если вопросы остались)
0
otmiko328
0 / 0 / 0
Регистрация: 26.08.2010
Сообщений: 135
12.09.2010, 19:30 #15
асм кондовый.
0
DY HOTT
0 / 0 / 0
Регистрация: 22.01.2010
Сообщений: 4,000
12.09.2010, 20:44 #16
нет в AVR Studyo 4
АВр студия использует компилятор WinAVR

Запись битов портов в виде PINB.4 там не прокатывает. И правильно делает, что не прокатывает. Т.к. является местечковым диалектом Си. Так что с CVAVR ты потом никуда не перепрыгнешь. Привычки вещь такая. В то время как в WinAVR идет работа через битмаски и все по стандарту. Может оно выглядит не так красиво, зато прогу написанную для AVR (если правильно писать) без особых проблем можно перекинуть на ARM, например. Что я недавно и проделал.

Вот тут:
http://iosyitistromyss.ru/category/avr-uchebnyj-kurs

если полистать ближе к концу (вначале ассемблер), есть несколько подробных примеров на Си как работать с портами, памятью, прерываниями.
0
DY HOTT
0 / 0 / 0
Регистрация: 22.01.2010
Сообщений: 4,000
12.09.2010, 20:44 #17
асм кондовый.
Ассемблер это неимоверный рулез. Просто вы им пользоваться не умеете.
0
Mittid Mitot
0 / 0 / 0
Регистрация: 23.01.2010
Сообщений: 2,550
12.09.2010, 20:52 #18
Так "кондовый" это разве значит "плохой"?
0
OmikymForti
0 / 0 / 0
Регистрация: 18.03.2010
Сообщений: 1,116
12.09.2010, 20:54 #19
Цитата Сообщение от Mittid Mitot
Так "кондовый" это разве значит "плохой"?
Нет, не значит.
0
O-10
0 / 0 / 0
Регистрация: 24.01.2010
Сообщений: 569
12.09.2010, 23:24 #20
Цитата Сообщение от DY HOTT
Привычки вещь такая. В то время как в WinAVR идет работа через битмаски и все по стандарту. Может оно выглядит не так красиво, зато прогу написанную для AVR (если правильно писать) без особых проблем можно перекинуть на ARM, например.
А я почитал часть твоего курса, и решил, ничтоже сумняшеся, заменить в программе для пика обычное присвоение на 1 << PINX, получилась лажа. Причем я это понял не сразу, долго тупя, отчего у меня регистры не устанавливаются как надо. Уже потом на форуме по пикам подсказали. По сути получалось, что у меня 1 сдвигалась на значение бита, а не на номер.
В хедере компилятора записано так:
Код
volatile       bit   RA3      @ ((unsykned)&PORTA*8)+3;
Я не совсем понимаю эту форму записи, как ее правильно читать?
0
12.09.2010, 23:24
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.09.2010, 23:24
Привет! Вот еще темы с решениями:

Вопросы по заземелению.
Здравствуйте, уважаемые форумчане. В течении некоторого времени занимаюсь...

Вопросы по stm32l151
1. Вопрос при программировании в по swd (swclk, swdyo, gnd, 3.3v)в каком...

есть вопросы
сейчас это все так популярно поэтому читалово в нете очень много а я бы хотел...

Вопросы по SD карточке.
Доброго времени суток) Захотел прикрутить к проектику FatFS, понадобилось...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru