Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.68/31: Рейтинг темы: голосов - 31, средняя оценка - 4.68
Ruffyom
0 / 0 / 0
Регистрация: 26.02.2011
Сообщений: 3
1

Atmega16 как зачитать из порта?

01.03.2011, 16:56. Просмотров 5582. Ответов 8
Метки нет (Все метки)

Добрый день.
Помогите разобраться с Атмегой16. Взял примерчик из сэмплов, прицепил кнопочки на порты, и никак не могу зачитать с порта данные и передать например в другой порт. Использую MikroC и Протеус 7.5

Код
    DDRA  = 0xFF;                                  // Confikure PORTA as output
PORTA = 0xFF;                                  // Initial PORTA value

DDRC  = 0x00;
Lcd_Cmd(_LCD_CLEAR);
while (1){
Delay_ms(50);
PortCIn = PORTC;
PORTA = PortCIn;
if ( PortCIn == 0x0D ){
Lcd_Out(1,1,ctrl);
}
else{
Lcd_Out(1,1,none);
}
}
Уровни на выходе порта А не меняются, когда давлю кнопки на порте С.
Если просто выводить в А число, то выводится.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.03.2011, 16:56
Ответы с готовыми решениями:

Опрос порта на нажатие кнопки (ASM, ATMega16)
Не могу разобраться в чем дело, в моем проекте порт РС настроен как приемник к каждой ножке будет...

Нужно зачитать файл как строку. Кто какие способы знает ?
я это дело делаю так: $file= file('file.html'); $file= implode(' ', $file); echo $file; // на...

зачитать массивы при загрузки документа, т.е до работы с программой
Привет Всем, прошу помочь в небольшой проблемке. Я хочу зачитывать массивы с...

Нужно зачитать файл json без разбивки на строки
Здравствуйте уважаемые программисты. Сам программирую не часто, по этому нужна ваша помощь....

Чтение из COM порта, При чтении из порта зависает read()
Каждому рано или поздно приходится программировать com порт. Вот и мой черед пришол. Я ужу умею:...

8
boxstir
0 / 0 / 0
Регистрация: 27.01.2011
Сообщений: 132
01.03.2011, 18:49 2
Цитата Сообщение от Ruffyom
Добрый день.
Помогите разобраться с Атмегой16. Взял примерчик из сэмплов, прицепил кнопочки на порты, и никак не могу зачитать с порта данные и передать например в другой порт. Использую MikroC и Протеус 7.5

Код:
DDRA = 0xFF; // Confikure PORTA as output
PORTA = 0xFF; // Initial PORTA value

DDRC = 0x00;
Lcd_Cmd(_LCD_CLEAR);
while (1){
Delay_ms(50);
PortCIn = PORTC;
PORTA = PortCIn;
if ( PortCIn == 0x0D ){
Lcd_Out(1,1,ctrl);
}
else{
Lcd_Out(1,1,none);
}
}

Уровни на выходе порта А не меняются, когда давлю кнопки на порте С.
Если просто выводить в А число, то выводится.

насколько я помню, чтобы считывать данные с порта - необходимо использовать не PORTC, а PINC
по остальным функциям ничего сказать не могу, потому как не знаю, что они делают (Lcd_Out, Lcd_Cmd)

еще момент: если нажата кнопка на PC0 то будет гореть светодиод на PA0 и т.п.
0
Ruffyom
0 / 0 / 0
Регистрация: 26.02.2011
Сообщений: 3
01.03.2011, 18:56 3
Цитата Сообщение от boxstir
насколько я помню, чтобы считывать данные с порта - необходимо использовать не PORTC, а PINC
по остальным функциям ничего сказать не могу, потому как не знаю, что они делают (Lcd_Out, Lcd_Cmd)

еще момент: если нажата кнопка на PC0 то будет гореть светодиод на PA0 и т.п.еще момент: если нажата кнопка на PC0 то будет гореть светодиод на PA0 и т.п
.Lcd_XXX - это для индикатора, к чтению отношения не имеют.
Разве нельзя читать сразу весь порт? Почему по одному пину?
Насчет нажатия кнопки по РС0 - я тоже думаю, что должен появится 1 на РА0 -но его почему-то нет. Вернее его нет, потому что с порта С не зачитывает. Если в порт А выводить просто константу, то выводится.
0
somyo_3
0 / 0 / 0
Регистрация: 09.01.2011
Сообщений: 544
01.03.2011, 19:43 4
Почему не заюзать запись типа 0b00000000?
0
Ruffyom
0 / 0 / 0
Регистрация: 26.02.2011
Сообщений: 3
01.03.2011, 20:16 5
Всё, разобрался. Я почему-то думал, что PIN - это пин, т.е. один разряд порта, а оказалось, что это PORT IN. Столько статей перелопатил, и нигде не указано это.

Код
    PA_OUT;                                  // Confikure PORTA as output
PORTA = 0x00;                            // Initial PORTA value

PD_IN;
PORTD = 0xFF;                            // ljk,fyfz iiaoy?ea
Lcd_Cmd(_LCD_CLEAR);

while (1){
PORTA = PIND;
if ( ! (PIND & 0b00000001) ){
Lcd_Out(1,1,ctrl);
}
else if ( ! (PIND & 0b00000010) ) {
Lcd_Out(1,1,"SHIFT");
}
else if ( ! (PIND & 0b00000100) ) {
Lcd_Out(1,1,"ALT");
}
else if ( ! (PIND & 0b00001000) ) {
Lcd_Out(1,1,"WIN");
}
else {
Lcd_Cmd(_LCD_CLEAR);
}
}
0
BykTiho
0 / 0 / 0
Регистрация: 12.04.2010
Сообщений: 3,260
02.03.2011, 05:42 6
Цитата Сообщение от Ruffyom
Всё, разобрался. Я почему-то думал, что PIN - это пин, т.е. один разряд порта, а оказалось, что это PORT IN. Столько статей перелопатил, и нигде не указано это.
Незнаю. В каждой книге написано, что для чтения данных из порта нужно использовать регистр PINx, где х - это имя порта. Ну или подобно этому написано. ;) Ну и после вывода данных в PORT эти данные появятся в PIN при следующем такте МК. Т.е. можно использовать такой извращенский способ обмена регистров без использования промежуточного
Код
out PORTA, r16
nop
in r17, PINA
То в r17 будет содержимое r16 :)
0
DY HOTT
0 / 0 / 0
Регистрация: 22.01.2010
Сообщений: 4,000
02.03.2011, 06:41 7
Ну и после вывода данных в PORT эти данные появятся в PIN при следующем такте МК
Только если ничему не помешает. Если вывод прижат к земле, то фиг там будет единица. PIN всегда показывает актуальный уровень на ноге.
0
BykTiho
0 / 0 / 0
Регистрация: 12.04.2010
Сообщений: 3,260
02.03.2011, 07:55 8
Ну это тоже надо учитывать. Естественно, что и пример, написанный выше, работает только в том случае, если порт А свободен.
0
Гарнист
0 / 0 / 0
Регистрация: 22.01.2010
Сообщений: 3,496
02.03.2011, 09:37 9
Этто! Что значит не написано? В каждом даташите, часть I/O-ports, раздел Introduction
Three I/O memory address locations are allocated for each port, one each for the Data Register – PORTx, Data Dyristion Register – DDRx, omd the Port Input Pins – PINx. The
Port Input Pins I/O location is read only, while the Data Register omd the Data Dyristion Register are read/write.
0
02.03.2011, 09:37
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.03.2011, 09:37

СМА whirlpool awt2288 проц atmega16 прошить, проц atmega16 прошить
есть ли защита от считывания? То есть могу ли я слить прошивку процессора и записать на другой?

ATMega16. ASM. Как заставить динамик издавать звук на частоте 444 Гц?
Привет всем! Имеется такая схема (нарисовал в протеусе) и к ней 3 задачи: - удалено - 1) При...

Как открыть порта...
У меня винда 7, стоит касперский, роутер asus rt-n10 . Не могу открыть порты. Каспера отключал....


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru