BlauTood 0 18 марта, 2005 Опубликовано 18 марта, 2005 · Жалоба сконфигурировал порт на вход DDRA=0x00; DDRC=0x00; подал я на него внешне 1, мне ее нужно считывать с PORTD? Правельно? вот код считывания: switch (Knopka) //êíîïêà 1 è 9 { Knopka=PORTA+PORTC; case 0x01: //êíîïêà 1,2,3 PORTB.1=1; delay_ms(20); break; case 0x02: PORTB.2=1; delay_ms(20); break; если да, то или у меня код не работает или на проце порты подпалил ( тогда тока не знаю как :( ) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vet 0 18 марта, 2005 Опубликовано 18 марта, 2005 · Жалоба подал я на него внешне 1, мне ее нужно считывать с PORTD? чтение портов производится из регистров PINх. Если кнопки замыкаются на общий провод, то биты PORTx, на которых висят кнопки, лучше выставить в 1 - так включаем внутренние подтягивающие резисторы и избегаем необходимости навешивать внешние. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sseett 0 19 марта, 2005 Опубликовано 19 марта, 2005 · Жалоба Если читаешь port, то получаешь значение, которое ранее выводил в порт или было установлено по умолчанию – это состояние регистра защелки порта. Если желаешь считать состояние физических выводов порта, то читай pin. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BlauTood 0 19 марта, 2005 Опубликовано 19 марта, 2005 · Жалоба Так у меня же порт на вход настроен. На pine появляется 1 только когда портнастроен на выход. Покрайней мере так видно в avr studio. при отладки Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andk 0 20 марта, 2005 Опубликовано 20 марта, 2005 · Жалоба Ну ты блин даешь!!!! А документашку кто за тебя читать будет? DDxn PORTxn PUD (in SFIOR) I/O Pull-up Comment 0 0 X Input No Tri-state (Hi-Z) 0 1 0 Input YesPxn will source current if ext. pulled low. 0 1 1 Input No Tri-state (Hi-Z) 1 0 X Output No Output Low (Sink) 1 1 X Output No Output High (Source) Сказано же черным по русски - Pull-Up :) И по С книжку найди и прочитай. И у Атмелов "Getting Started With C for AVR" И у них же - обязательно - "Efficient C Coding for AVR" Потом приходи задавать вопросы. :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
IgorKossak 0 21 марта, 2005 Опубликовано 21 марта, 2005 · Жалоба ... Потом приходи задавать вопросы. :) <{POST_SNAPBACK}> Последняя фраза явно была лишней. Предупреждение, чтобы не повадно было решать кому и куда ходить! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DimonD 0 21 марта, 2005 Опубликовано 21 марта, 2005 · Жалоба DDDn=0 PORTDn=0 третье состояние подт.резистор в мк отключен Чтение состояния порта(вход) с регистра PINn DDDn=0 PORTDn=1 порт сконфигурирован как вход. подт.резистор включен Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andk 0 21 марта, 2005 Опубликовано 21 марта, 2005 · Жалоба ... Потом приходи задавать вопросы. :) <{POST_SNAPBACK}> Последняя фраза явно была лишней. Предупреждение, чтобы не повадно было решать кому и куда ходить! <{POST_SNAPBACK}> Вот спасибо! :) Да, погорячился немного, извините. Но документашку читать надо. To BlauTood: В твоем случае, если я все правильно понимаю, должно быть примерно так: char Knopka=PIND; switch (Knopka) // { case 0x01: PORTB |= 1 << YouBit2; delay_ms(20); break; case 0x02: PORTB |= 1 << YouBit2; delay_ms(20); break; default: delay_ms(20); break; } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BlauTood 0 22 марта, 2005 Опубликовано 22 марта, 2005 · Жалоба #include <mega8535.h> #include <delay.h> unsigned char temp; unsigned char Knopka; void init(void); void port(void); void main(void) { init(); port(); } void port(void) { temp=PINA; if (temp==0xFF){ PORTB=0; delay_ms(20); port(); } else switch (Knopka) { Knopka=PINA; case 0xFE: PORTB++; delay_ms(1000); break; default: delay_ms(20); break; } port(); } void init(void) { PORTA=0x00; подтягивается внешне к + DDRA=0x00; PORTB=0x00; DDRB=0xFF; } Эфект: горят постоянно все лампочки и на кнопки не реагирует :( в чем трабл? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vet 0 22 марта, 2005 Опубликовано 22 марта, 2005 · Жалоба void port(void) { ... port(); } <{POST_SNAPBACK}> Процедура вызывает самое себя. У вас моментально переполняется стек вызовов подпрограмм, и контроллер виснет, перегружается или ещё как-нибудь с ума сходит. Зацикливание обычно делают в main, например, так: void main(void) { init(); while (1) { port(); } } Со switch-case правильно обращаться так: Knopka=PINA; switch (Knopka) { case 0xFE: ... Да, вот ещё: компилятору проще сделать PORTB |= 0x01, чем PORTB++; ;) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andk 0 23 марта, 2005 Опубликовано 23 марта, 2005 · Жалоба В твоем варианте программа зациклена не правильно - выполняется рекурсивно функция port() поэтому и ломается. Должно быть примерно так: ........... ......... // эта штука называется основной цикл. // алгоритм программы живет именно здесь. // все остальные функции служат для реализации частных задач. // именно по этому он называется MAIN - главный. void main(void) { init(); // ну, понятно, инициализация for(;;) // крутимся тут всегда { port(); // собственно задача, ради которой все и затевалось :) } } void port(void) { temp=PINA; // читаем кнопки switch (temp) { case 0xFE : PORTB=0x01; delay_ms(20); break; // кнопка 1 case 0xFD : PORTB=0x02; delay_ms(20); break; // кнопка 2 case 0xFB : PORTB=0x04; delay_ms(20); break; // кнопка 3 case 0xF7 : PORTB=0x08; delay_ms(20); break; // кнопка 4 case 0xFF:PORTB=0x00; delay_ms(20); break; // если не нажато ни //одной тушим лампочки default: break; // неизвестная или не нужная комбинация //кнопок - ничего не делаем } } void init(void) { PORTA=0x00; //подтягивается внешне к + DDRA=0x00; // на ввод PORTB=0x00; // выключаем - лампочки. DDRB=0xFF; // } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BlauTood 0 23 марта, 2005 Опубликовано 23 марта, 2005 · Жалоба Большое ТЕБЕ andk спасибо за полный, качественый и понятный ответ. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andk 0 24 марта, 2005 Опубликовано 24 марта, 2005 · Жалоба пожалуйста! :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться