роботы робототехника микроконтроллеры


 Страниц (2): « 1 [2]   

> Описание: Пара глупых вопосов о программировании на C
Роботов Post Id



Гуру


Сообщений всего: 1350
Дата рег-ции: Июнь 2011  



Резистор пишет:
что делает например << или PIND, что значит 1<<PIND

Читайте учебник по Си, там всё описано.
Резистор пишет:
if (!(PIND & (1<<PIND1)))

По русски:
если (if) отсутствует (!) на порту D (PIND) 1-й бит (1<<PIND1) то делаем следующее...
кстати можно проще, я например пишу так:
if(!PIND.1) то...
или
if(PIND.1==0) то...
или
if(PIND.1 !=1) то...

(Отредактировано автором: 12 Сентября, 2013 - 19:37:44)

 
 Top
Резистор Post Id


Лейтенант


Сообщений всего: 20
Дата рег-ции: Авг. 2013  



Всем спасибо, разобрался.
Теперь появилися ещё вопрос:
-как запретить\разрешить аппаратные прерывания на языке C?
(смотрел пример в даташите, но он не работает, в даташите просто указаны функции _CLI() и _STI() , но без указания библиотек, видимо в них вся и проблема)
 
 Top
Роботов Post Id



Гуру


Сообщений всего: 1350
Дата рег-ции: Июнь 2011  



Для того что бы разрешить глобальные прерывания не надо подключать ни какие библиотеки.
Надо просто установить в регистре "SREG" бит "I" (седьмой бит) в единицу, а для того чтобы запретить из, установите этот бит в ноль.
Вариантов установки масса.
 
 Top
Vladimir72 Post Id



Великий стратег


Сообщений всего: 193
Дата рег-ции: Май 2012  



Роботов это запись CodeVision

if(!PIND.1) то...
или
if(PIND.1==0) то...
или
if(PIND.1 !=1) то...


WinAVR Studio будет выдавать ошибки, или я ошибаюсь?
 
 Top
Роботов Post Id



Гуру


Сообщений всего: 1350
Дата рег-ции: Июнь 2011  



Vladimir72 пишет:
Роботов это запись CodeVision

Возможно. Просто я предпочитаю СV Подмигивающий
Наверняка в ВинАВР есть что-то аналогичное)
 
 Top
Vladimir72 Post Id



Великий стратег


Сообщений всего: 193
Дата рег-ции: Май 2012  



Я тоже перешел CV, раньше писал Win AVR


if (!(PIND & (1<<PIND1)))


f(!PIND.1) то...
или
if(PIND.1==0) то...
или
if(PIND.1 !=1) то... эту запись понимает только CV
 
 Top
Резистор Post Id


Лейтенант


Сообщений всего: 20
Дата рег-ции: Авг. 2013  



Да, WINAVR понимает просто PIND1 или т.п.
Ещё вопрос:
а можно ли через C управлять регистрами?Если да то как?
 
 Top
Роботов Post Id



Гуру


Сообщений всего: 1350
Дата рег-ции: Июнь 2011  



Резистор пишет:
а можно ли через C управлять регистрами?Если да то как?

PORTD или PIND это и есть регистр. И вы им уже управляете. Так же и всеми остальными)
(Добавление)
Vladimir72 пишет:
f(!PIND.1) то...
или
if(PIND.1==0) то...
или
if(PIND.1 !=1) то...

ну может просто без точки попробовать:
f(!PIND1) то...
 
 Top
Резистор Post Id


Лейтенант


Сообщений всего: 20
Дата рег-ции: Авг. 2013  



[quote=Роботов][/quote]
Может быть вы меня не поняли, имеется ввиду регистры общего назначения(РОН), которые в ассемблере обозначаются как R16, R17 и т.п.
 
 Top
Роботов Post Id



Гуру


Сообщений всего: 1350
Дата рег-ции: Июнь 2011  



Си язык более высокого уровня чем ассемблер. Зачем вам доступ к регистрам, компилятор сам решит что с ними делать, для вашего же удобства.
 
 Top
Страниц (2): « 1 [2]
« С чего начать? »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 





Powered by Exclusive Bulletin Board
ExBB FM 1.0 RC1 Smiles by Fool from Foolstown
  Яндекс.Метрика   Рейтинг@Mail.ru