Так, кое-что прояснилось, но опять какие-то глюки.
1) Настраиваю пин PD5 на вход, вешаю на него кнопку (к VCC). В коде записываю условие: "if (PIND & 0b00100000) { ... }". Когда кнопка нажата, условие всегда выполняется. Но когда кнопка не нажата, условие иногда тоже выполяется! Вот код:
Код
while (1) {
//PORTD = 0xff; // "1" в порт D
PORTD |= 1<<3; // "1" в PD3
PORTD &= ~(1<<4); // "0" в PD4
_delay_ms(250); // 0.25 сек.
//PORTD = 0x00; // "0" в порт D
PORTD |= 1<<4; // "1" в PD4
PORTD &= ~(1<<3); // "0" в PD3
_delay_ms(250); // 0.25 сек.
if (PIND & 0b00100000) {
//j = PIND;
PORTD |= 1<<3; // "1" в PD3
PORTD |= 1<<4; // "1" в PD4
_delay_ms(250);
}
Мигают лампочки PD3 и PD4. Если кнопка нажата, должны загореться обе лампочки. В реальности происходит следующее: загорается первая, вторая, первая, вторая, обе, первая, вторая, первая, вторая, обе и т.д. почему?
2) Пытаюсь создать переменную в EEPROM:
char EEMEM char1[12]="123456789012";
Прошиваю программу, а потом считываю программатором EEPROM-память. Там все биты равны xFF. А где моя переменная?
3) Пытаюсь отправить байт по UART:
Код
#define USART_BAUD 9600ul
#define USART_UBBR_VALUE ((F_CPU/(USART_BAUD<<4))-1)
void USART_vInit(void)
{
// Set baud rate
unsigned short int UBRRH = USART_UBBR_VALUE>>8;
unsigned short int UBRRL = USART_UBBR_VALUE;
// Set frame format to 8 data bits, no parity, 1 stop bit
UCSR0C = (0<<USBS0)|(1<<UCSZ00)|(1<<UCSZ00);
// Enable receiver and transmitter
UCSR0B = (1<<RXEN0)|(1<<TXEN0);
}
void USART_vSendByte(unsigned short int u8Data)
{
// Wait if a byte is being transmitted
while((UCSR0A&(1<<UDRE0)) == 0);
// Transmit data
UDR0 = u8Data;
}
unsigned short int USART_vReceiveByte()
{
// Wait until a byte has been received
while((UCSR0A&(1<<RXC0)) == 0);
// Return received data
return UDR0;
}
// В основой программе
USART_vInit();
USART_vSendByte('A');
...
По UART МК должен соединиться с микросхемой FT232BL (конвертер FIFO-USB), переслать этот байт, а потом софт на ПК должен этот байт прочитать. Драйверы микросхемы установились, микросхема с ПК видна. Но этот самый байт не читается. Код взят из какого-то примера, нарытого в инете.