Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Технологии > Общие вопросы по программированию, компьютерным наукам
Регистрация

Восстановить пароль
Повторная активизация e-mail


Ответ
 
Опции темы
Старый 05.10.2017, 13:28   #1
scccorp
Пользователь
 
Регистрация: 05.10.2017
Сообщений: 44
Сообщение програмирую атмега8 на порты РВ0,1,2,3,4 приходят сигналы, в зависимости от комбинации нужно подавать сигнал на порты РD. не могу найти решение

Всем привет. в программировании не долго, но есть один вопрос. такая зачача програмирую атмега8 на порты РВ0,1,2,3 приходит сигнал 0 или 1, на порт РВ4 поступает разрешающий сигнал. Так вот в зависимости от комбинации единиц и нулей нужно подавать сигнал на порты РD. (например на PB0-1 PB1-0 PB2-0 PB3-1 получаеться 1001+ разрешающий сигнал обязательно 1 и при єтом условии получаем на PD 0 единицу иначе 0) думал сделать через if но что-то у меня не шибко получается помогите пожалуйсто. прогаю на С++ через atmel 7

Последний раз редактировалось scccorp; 05.10.2017 в 13:34.
scccorp вне форума Ответить с цитированием
Старый 05.10.2017, 13:36   #2
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,489
По умолчанию

А чем вам if не нравится? Что там может не получаться?
Можете через switch сделать.
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Старый 05.10.2017, 13:40   #3
scccorp
Пользователь
 
Регистрация: 05.10.2017
Сообщений: 44
По умолчанию

что я делаю не так здесь)
Код:
#include <avr/io.h>



int main(void)
{
	DDRB = 0x00; //порт B - вход
	PORTB = 0x00; //подключаем нагрузочный резистор
	DDRD = 0xFF; //порт B - выход
	PORTD = 0x00; //устанавливаем 0 на выходе
	PORTD |= (1<<4);

   while (1) 
    {
		if  (!(PINB = 0b00001000)  )  
	    {
			 PORTD |= (1<<3);
		}
			else 
		{
			PORTD = 0x00;
		}

Последний раз редактировалось Вадим Мошев; 09.10.2017 в 22:10.
scccorp вне форума Ответить с цитированием
Старый 05.10.2017, 13:43   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,103
По умолчанию

= - присваивание, == - сравнение
p51x вне форума Ответить с цитированием
Старый 05.10.2017, 13:54   #5
scccorp
Пользователь
 
Регистрация: 05.10.2017
Сообщений: 44
По умолчанию

спасибо это немного помогло но теперь у меня всегда на РD3 единица почему так?
scccorp вне форума Ответить с цитированием
Старый 05.10.2017, 13:55   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,103
По умолчанию

Потому что вы проверили только один бит, а не маску
p51x вне форума Ответить с цитированием
Старый 05.10.2017, 13:57   #7
scccorp
Пользователь
 
Регистрация: 05.10.2017
Сообщений: 44
По умолчанию

понаглею и порошу подсказать как проверить маску
scccorp вне форума Ответить с цитированием
Старый 05.10.2017, 14:02   #8
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,489
По умолчанию

Блин. Напишите при каких возможных сигналах PB 0-3 и PB4 какое значение должно быть на PD0. Получится таблица и дальше код уже сам собой сложиться.
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Старый 05.10.2017, 14:10   #9
scccorp
Пользователь
 
Регистрация: 05.10.2017
Сообщений: 44
По умолчанию

Код:
#include <avr/io.h>



int main(void)
{
	DDRB = 0x00; //порт B - вход
	PORTB = 0x00; //подключаем нагрузочный резистор
	DDRD = 0xFF; //порт B - выход
	PORTD = 0x00; //устанавливаем 0 на выходе
	

   while (1) 
    {
		if  (!(PORTB == 0b00011000)  )  
	    {
			 PORTD = 0b00000001;
		}
			else 
		{
			PORTD = 0x00;
		}
типо этого? он горит постоянно

Последний раз редактировалось scccorp; 05.10.2017 в 15:37.
scccorp вне форума Ответить с цитированием
Старый 05.10.2017, 15:36   #10
scccorp
Пользователь
 
Регистрация: 05.10.2017
Сообщений: 44
По умолчанию

Код:
#include <avr/io.h>



int main(void)
{
	DDRB = 0x00; //порт B - вход
	PORTB = 0x00; //подключаем нагрузочный резистор
	DDRD = 0xFF; //порт B - выход
	PORTD = 0x00; //устанавливаем 0 на выходе
	

   while (1) 
    {
		if  ((PINB == 0b00010000 ) & (PINB == 0b00000100) )  
	    {
			 PORTD = 0b00000001;
		}
			else 
		{
			PORTD = 0x00;
		}
в таком варианте вообще не срабатывает
scccorp вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Порты Novichek_1996 Помощь студентам 3 22.04.2014 19:55
Не могу открыть порты. aszaszasz Помощь студентам 0 26.05.2010 14:27
Порты Троян Помощь студентам 1 12.02.2010 15:55
порты Rabitka Безопасность, Шифрование 0 16.10.2009 16:09
COM Порты Skazi21101 Помощь студентам 0 02.11.2008 13:24