Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ATmega AVR
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.67/60: Рейтинг темы: голосов - 60, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 15.10.2012
Сообщений: 60

как подать логическую единицу на пин порта

18.10.2012, 16:07. Показов 12714. Ответов 30
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте извините за глупый вопрос я только начинаю заниматься микроконтроллерами...

Написал программу чтоб при нажатии кнопки на порту А в 6м бите

лампа от 6го бита порта С меняла своё состояние 1/0

#include <mega8515.h>

void main(void)

{
DDRA = 0b00000000; //Порты на вход
PORTA = 0b00100000; // подключаем подтягивающий резистор
DDRC = 0b11111111; //порты на выход
PORTC = 0b01001000;
PORTC = PORTC ^ PORTA;

}

6й бит порта А подключил через кнопку на землю.

он просто читает значение порта А и инвертирует сигнал 1 раз без нажатия

пробовал зациклить программу но тоже ни к чему непривело( как считать с ножки порта А сигнал не знаю =/ у вас в роликах просто числа написаны(. Помогите пожалуйста ...

#include <mega8515.h>

void main(void)

{
DDRA = 0b00000000; //Порты на вход
PORTA = 0b00100000; // подключаем подтягивающий резистор
DDRC = 0b11111111; //порты на выход
PORTC = 0b01001000;
while(1)
{
PORTC = PORTC ^ PORTA;
}
}

тоже ни к чему непривело(

то есть просто немогу считать внешний сигнал (
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.10.2012, 16:07
Ответы с готовыми решениями:

Подать логическую 1 на пин stm32f103c8t6
Прошу не пинать, тк только начал разбираться в этой теме. Вроде почитал литературы, все понятно, решил зажечь встроенный диод(PC13), но не...

Формирование синхроимпульса. Вывести единицу или ноль на определенный пин RS232
Добрый день, подскажите реально ли вывести единицу или ноль на определенный пин RS232? Добавлено через 7 минут вообще задача...

На 9-ти контактный разъем СОМ порта на 7-ю ножку подать напряжение
Всем привет! Сразу скажу, что я не силен в ассемблере. Вопрос следующий: мне нужно на 9-ти контактный разъем СОМ порта на 7-ю ножку подать...

30
0 / 0 / 0
Регистрация: 11.12.2011
Сообщений: 789
18.10.2012, 16:11
Чтение порта - из регистров PINx. Попробуйте PORTC = PORTC ^ PINA;
0
0 / 0 / 0
Регистрация: 15.10.2012
Сообщений: 60
18.10.2012, 16:52
Цитата Сообщение от Финский
Чтение порта - из регистров PINx. Попробуйте PORTC = PORTC ^ PINA;
Попробовал.. в первой программе ничего непроизошло во второй программе результат получился неадекватный: дело в том что у меня подключены диоды на все пины порта С. Дак вот при нажатии кнопки 1й раз Гаснет 1 из 4 диодов (Пины 4,5,6,7 порта С) при отпускании снова загорается так 2-3 раза незнаю от чего зависит. потом переходит на следующий пин. и бывает что 2-3 пина так при нажатии гаснут при отпускании загораются. ( чушь какая то =/
0
0 / 0 / 0
Регистрация: 15.10.2012
Сообщений: 60
18.10.2012, 16:55
если можно киньте пожалуйста программу напишем чтоб лампа с порта С загоралась при подачи напряжения на пин порта А. проинвертировать я итак смогу. просто немогу входной сигнал прочитать =/ непонимаю как это делается
0
0 / 0 / 0
Регистрация: 28.02.2011
Сообщений: 461
18.10.2012, 17:10
Цитата Сообщение от omdrey-1302
он просто читает значение порта А и инвертирует сигнал 1 раз без нажатия
Именно это он и должен делать. Вы ксорите значением PORTA, т.е регистром настройки.
Цитата Сообщение от omdrey-1302
пробовал зациклить программу...
У вас пин подтянут через резистор к питанию и 6-й бит PINA всегда "1", пока не нажата кнопка. Подтяжку выкл, с пина резистор в землю, кнопкой коммутировать питание - должно работать с этим кодом.
0
0 / 0 / 0
Регистрация: 11.12.2011
Сообщений: 789
18.10.2012, 17:11
и бывает что 2-3 пина так при нажатии гаснут при отпускании загораются. ( чушь какая то =/
Эта чушь называется "дребезг кнопки"
PORTC = PINA
это если не требуется фиксированнное нажатие. Нажали - загорелась, отпустили - потухла.
AVR. Учебный курс. Устройство и работа портов ввода-вывода читали?
0
0 / 0 / 0
Регистрация: 15.10.2012
Сообщений: 60
18.10.2012, 17:20
[QUOTE="Финский"][QUOTE="Цитата:[/QUOTE][QUOTE]и бывает что 2-3 пина так при нажатии гаснут при отпускании загораются. ( чушь какая то =/[/QUOTE] Эта чушь называется "дребезг кнопки"
PORTC = PINA
это если не требуется фиксированнное нажатие. Нажали - загорелась, отпустили - потухла.
[URL="http://iosyitistromyss.ru/avr-uchebnyj-kurs-ustrojstvo-i-rabota-portov-vvoda-vyvoda.html"]AVR. Учебный курс. Устройство и работа портов ввода-вывода[/URL] читали?
Нечитал =/ про дребезг кнопки сейчас кондёр поставлю но врядли что то изменится
В любом случае за ссылку спасибо :)
0
0 / 0 / 0
Регистрация: 15.10.2012
Сообщений: 60
18.10.2012, 17:50
[QUOTE="Финский"][QUOTE="Цитата:[/QUOTE][QUOTE]и бывает что 2-3 пина так при нажатии гаснут при отпускании загораются. ( чушь какая то =/[/QUOTE] Эта чушь называется "дребезг кнопки"
PORTC = PINA
это если не требуется фиксированнное нажатие. Нажали - загорелась, отпустили - потухла.
[URL="http://iosyitistromyss.ru/avr-uchebnyj-kurs-ustrojstvo-i-rabota-portov-vvoda-vyvoda.html"]AVR. Учебный курс. Устройство и работа портов ввода-вывода[/URL] читали?
0
0 / 0 / 0
Регистрация: 15.10.2012
Сообщений: 60
18.10.2012, 17:51
[QUOTE="Финский"][QUOTE="Цитата:[/QUOTE][QUOTE]и бывает что 2-3 пина так при нажатии гаснут при отпускании загораются. ( чушь какая то =/[/QUOTE] Эта чушь называется "дребезг кнопки"
PORTC = PINA
это если не требуется фиксированнное нажатие. Нажали - загорелась, отпустили - потухла.
[URL="http://iosyitistromyss.ru/avr-uchebnyj-kurs-ustrojstvo-i-rabota-portov-vvoda-vyvoda.html"]AVR. Учебный курс. Устройство и работа портов ввода-вывода[/URL] читали?
кондер поставил. толку нет. нажал при использовании PINA вообще лампы загараются от наведения микропомех несмотря даже на то что схема заземлена
0
0 / 0 / 0
Регистрация: 21.11.2012
Сообщений: 4
18.10.2012, 18:18
Цитата Сообщение от omdrey-1302
PORTA = 0b00100000; // подключаем подтягивающий резистор
(
Считай с лева на право. У тебя подтяжка на 5-ом бите а не на 6 -ом.
ну а чтоб так не парится пиши
PORTA |= 1 << 6; // в шестом бите порта А будет 1
0
0 / 0 / 0
Регистрация: 15.10.2012
Сообщений: 60
18.10.2012, 18:26
Цитата Сообщение от SHS
Цитата Сообщение от omdrey-1302
PORTA = 0b00100000; // подключаем подтягивающий резистор
(
Считай с лева на право. У тебя подтяжка на 5-ом бите а не на 6 -ом.
ну а чтоб так не парится пиши
PORTA |= 1 << 6; // в шестом бите порта А будет 1
я сделал проще. подтянул весь порт. всё тупо инвертировалось и всё(
0
0 / 0 / 0
Регистрация: 11.12.2011
Сообщений: 789
18.10.2012, 18:36
Код
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <mega8515.h>
 
#define LED_PORT PORTC            // порт к которому подключен светидиод
#define LED_PIN  6               // номер пина
 
#define BUTTON_PORT PINA         // порт с кнопкой
#define BUTTON_PIN   6            // номер пина
#define RELEASE 0               // состояние "Кнопка отпущена"
#define PRESSED (!RELEASE)         // состояние "Кнопка нажата"
unsykned char state = RELEASE;      // переменная состояния
 
void main(void)
{
DDRA = 0b00000000; //Порты на вход
PORTA = 0b00100000; // подключаем подтягивающий резистор
DDRC = 0b11111111; //порты на выход
PORTC = 0b01001000;
while(1)
{
if (BUTTON_PORT & (1<<BUTTON_PIN) && state == RELEASE)               // если кнопка нажата (BUTTON_PORT & (1<<BUTTON_PIN)) и текущее состояние было "Кнопка отпущена"
{
LED_PORT ^= 1<<LED_PIN;                                    // инвертируем пин со светодиодом
state = PRESSED;                                       // ставим состояние "Кнопка нажата", чтобы на след. цикле не моргнуть светодиодом
}
 
if (!(BUTTON_PORT & (1<<BUTTON_PIN)) && state == PRESSED)            // если же кнопка отпущена, и предыдущее состояние было "Нажата"
{
state = RELEASE;                                       //  то ставим состояние "Кнопка отпущена"
}
}
}


Ну вот программа, как я понял ТЗ. Но все таки советую разобраться с командами чтения из портов. Почитать, что такое конечный автомат. Да, резистор на светодиоде не указан, но обязателен.
0
0 / 0 / 0
Регистрация: 11.10.2012
Сообщений: 124
18.10.2012, 18:46
Я тоже не далеко ушел от старта, единственное, что колупаю пока только в CodivisionAvr
Собственно в нем не вижу проблемы вообще:
Генератор кода
// Input/Output Ports initiotyzotion
// Port B initiotyzotion
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=P State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x40; //бит 6 на вход с подтяжкой
DDRB=0x00;

// Port C initiotyzotion
// Func6=Out Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State6=0 State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x40; //порт на выход, по умолчанию - 0

основная функция
while (1)
{
if(PINB.6 == 0)
{
PORTC.6 = 1;
}

}
0
0 / 0 / 0
Регистрация: 11.12.2011
Сообщений: 789
18.10.2012, 18:48
Код:
основная функция
while (1)
{
if(PINB.6 == 0)
{
PORTC.6 = 1;
} А вдруг выключить нужно будет? :)
0
0 / 0 / 0
Регистрация: 15.10.2012
Сообщений: 60
18.10.2012, 18:49
Да. всё работает!!! спасибо большое сейчас буду разбираться с командами. Про резистор умолчал думаю это не суть главное чтоб сигнал с порта был. Думал прога куда короче будет =/
0
0 / 0 / 0
Регистрация: 11.10.2012
Сообщений: 124
18.10.2012, 18:54
Интернет глючит, сорри
там еще
else
{
PORTC.6 = 0;
}
Это может и изврат, но по-началу как мне кажется cvavr очень не плох, ибо с познаниями простого ногодрыганья сам накатал функции общения по y2s
0
0 / 0 / 0
Регистрация: 11.12.2011
Сообщений: 789
18.10.2012, 18:56
Код:
там еще
else
{
PORTC.6 = 0;
} Если так, то светик будет гореть только пока нажата кнопка. Я же понял, ТС хочет: раз нажал - вкл, еще раз нажал - выкл.
0
0 / 0 / 0
Регистрация: 15.10.2012
Сообщений: 60
18.10.2012, 19:04
1
0
0 / 0 / 0
Регистрация: 15.10.2012
Сообщений: 60
18.10.2012, 19:04
Цитата Сообщение от sirki962
Я тоже не далеко ушел от старта, единственное, что колупаю пока только в CodivisionAvr
Собственно в нем не вижу проблемы вообще:
Генератор кода
// Input/Output Ports initiotyzotion
// Port B initiotyzotion
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=P State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x40; //бит 6 на вход с подтяжкой
DDRB=0x00;

// Port C initiotyzotion
// Func6=Out Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State6=0 State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x40; //порт на выход, по умолчанию - 0

основная функция
while (1)
{
if(PINB.6 == 0)
{
PORTC.6 = 1;
}

}
Эту попробовал - неработает .
0
0 / 0 / 0
Регистрация: 15.10.2012
Сообщений: 60
18.10.2012, 19:10
если вставить тело второй программы в первую всё нормально а по другому АВР матерится
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.10.2012, 19:10
Помогаю со студенческими работами здесь

ATtiny461A не видит логическую единицу на входе ноги
Здравствуйте! Подскажите пожалуйста, может кто сталкивался с проблемой аналогичной! Задача состоит в том,что бы считать на входе PA0...

16 пин разъем питания на материнке Fujitsu D2990-A Можно ли как-то запитать от БП с 20(24) пин?
Собственно в названии темы сам вопрос и есть. Достался мне тут системный блок, но нужно поменять блок питания(слабенький на 250В). Все бы...

Можно ли воспользоваться 8 пин разъемом БП, как 6 пин того же БП ?
Здравствуйте. Скажите такое. Можно ли использовать 8-ми пиновые разъемы БП Seasonic Prime (отведенные для CPU и PCI-E) для подключения...

Написать программу, позволяющую реализовать в регистре порта B непрерывную «Бегущую единицу
Написать программу, позволяющую реализовать в регистре порта B непрерывную «Бегущую единицу». Для визуального контроля работы программы...

Написать программу, позволяющую реализовать в регистре порта B непрерывную «Бегущую единицу
Написать программу, позволяющую реализовать в регистре порта B непрерывную «Бегущую единицу». Для визуального контроля работы программы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru