Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.10.2017, 12: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 в 12:34.
scccorp вне форума Ответить с цитированием
Старый 05.10.2017, 12:36   #2
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

А чем вам if не нравится? Что там может не получаться?
Можете через switch сделать.
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Старый 05.10.2017, 12: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 в 21:10.
scccorp вне форума Ответить с цитированием
Старый 05.10.2017, 12:43   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,706
По умолчанию

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

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

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

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

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


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


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