Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Непонятный mega8515
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > MCS51, AVR, PIC, STM8, 8bit
sealbi
Пишу программу на mega8515. К биту A6 припаян через резистор светодиод.
DDRA = 0xff; PORTA = 0xff;
PORTA = 0xBF; светодиод на зажигается
PORTA.6=0; зажигается!
В листинге ассемблер правильный.
Подскажите, кто знает, что это?
Marian
Цитата(sealbi @ Jun 1 2011, 18:46) *
Пишу программу на mega8515. К биту A6 припаян через резистор светодиод.
DDRA = 0xff; PORTA = 0xff;
PORTA = 0xBF; светодиод на зажигается
PORTA.6=0; зажигается!
В листинге ассемблер правильный.
Подскажите, кто знает, что это?

Думаете чудо?
Посмотрите куда идет второй конец цепи и все поймете.
sealbi
Второй конец цепи подключен к +питания. Да и как это влияет, команды ведь логически аналогичные?
demiurg_spb
В CodeVision ваяете?
Покажите код инициализации, листинг и фьюз-биты.
Альтернативные функции порта не используете?
Сергей Борщ
QUOTE (sealbi @ Jun 2 2011, 02:33) *
Второй конец цепи подключен к +питания. Да и как это влияет, команды ведь логически аналогичные?
Нарисуйте на схеме путь протекания тока через светодиод. Кокда вы выводите в порт единицу, на выходе появляется напряжение около +5в. На втором выводе светодиода у вас тоже +5в, т.е. на обоих выводах по +5в. Откуда взяться току? Тока нет, светодиод не светится. Все правильно.
demiurg_spb
Цитата(Сергей Борщ @ Jun 2 2011, 10:14) *
Тока нет, светодиод не светится. Все правильно.
Так он должен зажигаться и при
Код
PORTA &= ~(1<<6); //0xBF
MrYuran
Есть пред[по]ложение.
Прогоните через порт бегущий ноль.
Возможно, с/д висит не на 6, а на другом разряде. Либо закорочен с соседними.
Это в том случае, если эти две строки
Код
PORTA = 0xBF; светодиод на зажигается
PORTA.6=0; зажигается!

формируют одинаковый листинг.

Чудес не бывает, а дерьмо случается. ©
demiurg_spb
Цитата(MrYuran @ Jun 2 2011, 11:33) *
...формируют одинаковый листинг.

Не могут они одинаковый листинг формировать.
PORTA = 0xBF - запись байта в порт
PORTA.6=0 - очистка одного бита в порту.
MrYuran
Цитата(demiurg_spb @ Jun 2 2011, 14:34) *
Не могут они одинаковый листинг формировать.
PORTA = 0xBF - запись байта в порт
PORTA.6=0 - очистка одного бита в порту.

Нормальный компилятор и в том, и в другом случае вставит однобайтную инструкцию очистки бита.

Хотя нет, наверно погорячился... Это если бы маску накладывать, то да...
sealbi
Разобрался, все работает, было заклинивание мозга, перепутал 0x7F и 0xEF. Извмните! sm.gif
demiurg_spb
Пользуйтесь конструкцией (1<<x) при работе с масками и битами - мозг меньше будет уставать. Серьёзно.

Цитата(MrYuran @ Jun 2 2011, 14:40) *
Это если бы маску накладывать, то да...
Ага.
=GM=
Цитата(sealbi @ Jun 2 2011, 10:55) *
...перепутал 0x7F и 0xEF

Просветите, где там у вас 0x7F и 0xEF?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.