реклама на сайте
подробности

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Помогите пожалуйчта в разработке устройства, Вкратце: хочу собрать LED DIMMER
domowoj
сообщение Aug 10 2008, 01:57
Сообщение #16


Профессионал
*****

Группа: Участник
Сообщений: 1 548
Регистрация: 20-12-07
Из: г.Новосибирск
Пользователь №: 33 486



Конечно.
Если познал МК появляется стереотип мышления - любая схемулька - на МК ее !!!

Вот поищи в инете, книжка для первого класса
Трейстер Р. Радиолюбительские схемы на ИС типа 555
но познавательно.


--------------------
И на камнях растут деревья!
Go to the top of the page
 
+Quote Post
drovik
сообщение Aug 10 2008, 06:29
Сообщение #17


Участник
*

Группа: Новичок
Сообщений: 47
Регистрация: 7-05-07
Пользователь №: 27 573



Цитата(Herz @ Aug 10 2008, 00:29) *
Что же Вас смутило? Чем работа с полубайтами отличается от работы с битами? Операция "И" между регистром и числом 0х80 установит седьмой бит (счтая от нуля) в регистре, как и требуется. Ведь шестнадцатиричное число 80 в двоичном коде выглядит так: 10000000. Двоичную арифметику и любителю следует понимать. А флаг - это и есть бит, как правило.
P.S. Я, кажется, понял, что Вас смутило. Остальные биты в регистре будут, конечно, сброшены. Но часто именно это и есть то, что нужно. Если же требуется сохранить контекст, пользуются операцией "ИЛИ".


Операция "и" не может установить бит, если под установкой подразумевать перевод бита из "0" в "1". Если до "и" это бит был "0" он так им и останется. А вот с флагом отдельный разговор. Четкого определения мне не попадалось (наверное потому, что не искал), но в регистре CPSR ядра ARM7 для разрешения прерываний соответствующий бит нужно перевести в "0", что и называется в книге Тревора установкой флага.
А с двоичной арифметикой уже вроде более 10 лет знаком. Может у нас с Вами разные представления о термине "установка бита" ?

Цитата(Still @ Aug 10 2008, 00:39) *
2 Herz&drovik
как в анекдоте: папа а ты с кем сейчас разговаривал? lol.gif


А что делать, если автор темы редко бывает smile.gif

Сообщение отредактировал drovik - Aug 10 2008, 06:30
Go to the top of the page
 
+Quote Post
Herz
сообщение Aug 10 2008, 07:21
Сообщение #18


Гуру
******

Группа: Модераторы
Сообщений: 10 983
Регистрация: 23-11-05
Пользователь №: 11 287



Цитата(drovik @ Aug 10 2008, 08:29) *
Операция "и" не может установить бит, если под установкой подразумевать перевод бита из "0" в "1". Если до "и" это бит был "0" он так им и останется. А вот с флагом отдельный разговор. Четкого определения мне не попадалось (наверное потому, что не искал), но в регистре CPSR ядра ARM7 для разрешения прерываний соответствующий бит нужно перевести в "0", что и называется в книге Тревора установкой флага.
А с двоичной арифметикой уже вроде более 10 лет знаком. Может у нас с Вами разные представления о термине "установка бита" ?

Ну что ж, Вы правы, конечно. Это я поторопился с сарказмом. Однако для отрицательной логики (как в приведенном примере) установка флага (перевод в "0") именно операцией "И" и достигается.
Go to the top of the page
 
+Quote Post
sKWO
сообщение Aug 10 2008, 07:51
Сообщение #19


Местный
***

Группа: Участник
Сообщений: 355
Регистрация: 27-03-07
Из: Україна, Чуднів
Пользователь №: 26 530



Цитата(Herz @ Aug 10 2008, 10:21) *
Ну что ж, Вы правы, конечно. Это я поторопился с сарказмом. Однако для отрицательной логики (как в приведенном примере) установка флага (перевод в "0") именно операцией "И" и достигается.

В конец решили запутать человека с установкой битов и флагов?Still, если надумаете изучать АВР то посмотрите на следующие макросы:
Код
/* Установка и сброс бит в регистрах ввода-вывода с помощью макроса */
#define SETBIT(ADDRESS,BIT) (ADDRESS |= (1<<BIT))
#define CLEARBIT(ADDRESS,BIT) (ADDRESS &= ~(1<<BIT))
/* Макрос для проверки одного бита в области ввода-вывода */
#define CHECKBIT(ADDRESS,BIT) (ADDRESS & (1<<BIT))
/* Пример использования */
if(CHECKBIT(PORTD,PIND1)) /* Проверка, PIND1 = 1? */
{
CLEARBIT(PORTD,PIND1); /* Сброс PIND1 порта D*/
}
if(!(CHECKBIT(PORTD,PIND1))) /* Проверка, PIND1 = 0? */
{
SETBIT(PORTD,PIND1); /* Установка PIND1 порта D */
}

Теперь по флагам регистров МК (статуса таймера, и2с УАПП и др). АВР такая структура, что сброс флага
производится записью единицы.
Неправильный пример
Код
GIFR  |=  (1<<INTF0);     // сброс флага,

Правильно так
Код
GIFR  =  (1<<INTF0);     // сброс флага,

Удачи


--------------------
нельзя недооценивать предсказуемость глупости
Go to the top of the page
 
+Quote Post

2 страниц V  < 1 2
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 26th July 2025 - 07:43
Рейтинг@Mail.ru


Страница сгенерированна за 0.01375 секунд с 7
ELECTRONIX ©2004-2016