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

 
 
 
Reply to this topicStart new topic
> Не могу понять, как именно работают регистры
ZhukV
сообщение Aug 2 2012, 06:12
Сообщение #1





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



Вот есть простенький код:

Код
#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.
Go to the top of the page
 
+Quote Post
hd44780
сообщение Aug 2 2012, 06:17
Сообщение #2


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

Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980



Цитата(ZhukV @ Aug 2 2012, 09:12) *
Но код не работает на контроллере. Для проверки, пин4 соединял вместе с VCC.


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

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

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

PORTB = 0b00010001;
...........
if (PINB.4 == 0)
{ // кнопку нажали
..........
}

Сообщение отредактировал hd44780 - Aug 2 2012, 06:22


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
ZhukV
сообщение Aug 2 2012, 06:29
Сообщение #3





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



hd44780, ОГРОМНОЕ СПАСИБО. Работает.

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

Попробывал с pull-up резистором, тоже все ОК. Значит pull-up резистор можно настроить на всех пинах?
Go to the top of the page
 
+Quote Post
hd44780
сообщение Aug 2 2012, 06:32
Сообщение #4


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

Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980



Цитата(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-а.

Сообщение отредактировал hd44780 - Aug 2 2012, 06:34


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
ZhukV
сообщение Aug 2 2012, 06:43
Сообщение #5





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



Спасибо! Хоть теперь стает все намного понятней!
Go to the top of the page
 
+Quote Post

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

 


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


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