Подскажите, если не сложно, где я не прав. Контроллер ATMEGA128. Кнопка висит на первой ноге порта С. Меняется состояние первой ноги порта F.
Код: Выделить всё
PORTC=0x00;
DDRC=0x00;
PORTF=0x00;
DDRF=0x01;
if (PINC.0 ==1){
PORTF=0b00000001;
}
Код: Выделить всё
PORTC=0x00;
DDRC=0x00;
PORTF=0x00;
DDRF=0x01;
if (PINC.0 ==1){
PORTF=0b00000001;
}
Код: Выделить всё
if(!PINC.0) PORTF= 0b00000000;Код: Выделить всё
while(1)
{
if.........
if........
}ифов не надо вообще:pyzhman писал(а):Все ифы под while(1);
Код: Выделить всё
PORTF = PINC & 1;Код: Выделить всё
PORTC=0x01;это верно, однако цель МК как раз в том, что для решения задачи вместо аппаратной обвязки по максимуму используются программные средства. поэтому логичнее отказаться от внешних компонентов (резистора), а для того, чтобы "при нажатии был плюс" использовать программную инверсию сигнала. хотя для программы что плюс, что минус (правильнее - 1 или 0) все равно, все это ЧИСЛА, и с ними можно делать все, что угодно.Prosperous писал(а):Если так сделать, то получится наоборот - разомкнуто +, замкнуто -. Чтобы сделать замкнуто +, разомкнуто -, надо 1 контакт кнопки посадить на +, второй через резистор на землю и второй контакт до резистора соединить с PC0. И подтягивать этот вход к питанию не надо. Просимулировал - вроде работает
Код: Выделить всё
#include <spi.h>
unsigned char SPI_receive(void)
{
unsigned char data;
while(!(SPSR & (1<<SPIF)));
data = SPDR;
return data;
}
void main(void)
{
PORTB=0x00;
DDRB=0x08;
PORTC=0x00;
DDRC=0x00;
PORTE=0x00;
DDRE=0xFF;
PORTF=0x00;
DDRF=0x01;
SPCR=0x40;
SPSR=0x00;
PORTE = SPI_receive();
while (1)
{
PORTF= PINC&1;
};
Код: Выделить всё
PORTC=0x01;
Код: Выделить всё
while(!(SPSR & (1<<SPIF)));