Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Не могу понять, как именно работают регистры
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > MCS51, AVR, PIC, STM8, 8bit
ZhukV
Вот есть простенький код:

Код
#include <tiny13a.h>

void main(void)
{
    DDRB = 0b00000001;
    PORTB = 0b00000001;  
      
    while (1) {
        if (PORTB.4 == 0) {
            PORTB.0 = 1;
        }              
        else {
            PORTB.0 = 0;
        }
    }    
}


Идея такова: Свтодиод светиться на пине 0. Когда я подаю сигнал (логическую еденицу) на пин 4, то он должен погаснуть. Проверяю в цыкле.
Но код не работает на контроллере. Для проверки, пин4 соединял вместе с VCC.
hd44780
Цитата(ZhukV @ Aug 2 2012, 09:12) *
Но код не работает на контроллере. Для проверки, пин4 соединял вместе с VCC.


И не будет работать. У тебя ошибка. Надо проверять так:

if (PINB.4 == 1)
{
..........
}

И ногу соединять с vcc надо через резюк типа 1кил....
А самое нормальное - включить на 4-й ноге pull-up, а ногу в лоб к земле кнопкой:

PORTB = 0b00010001;
...........
if (PINB.4 == 0)
{ // кнопку нажали
..........
}
ZhukV
hd44780, ОГРОМНОЕ СПАСИБО. Работает.

Но остались вопросы. Почему нудно ногу подсойденять через резистор? Пытался без него, то какие-то глюки ))
Какая разница между PORTB.4 и PINB.4?

Попробывал с pull-up резистором, тоже все ОК. Значит pull-up резистор можно настроить на всех пинах?
hd44780
Цитата(ZhukV @ Aug 2 2012, 09:22) *
Почему нудно ногу подсойденять через резистор? Пытался без него, то какие-то глюки ))

Там на пине нету входных токоограничительных резисторов. Поэтому надо перестраховаться. Чтоб козы не было и чтобы порт не сгорел rolleyes.gif .
Поэтому я всегда кнопки к земле цепляю.

Цитата(ZhukV @ Aug 2 2012, 09:22) *
Какая разница между PORTB.4 и PINB.4?


PORTB - выходной регистр. Считаешь всегда то, что сам в него запишешь. После сброса или запуска там всегда 0x00.
PINB - регистр, отражающий состояние ног. Для ног, настроенных на OUT, читать бессмысленно, там будет то же, что и в соотв. битах PORTB.
Но т.к. у тебя нога на вход, то PINB отражает состояние ноги. А PORTB для таких ног включает/выключает внутренний pull-up. И считывая PORTB.4 ты и получил не состояние ноги, а состояние этого pull-up-а.
ZhukV
Спасибо! Хоть теперь стает все намного понятней!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.