CODE:
#define F_CPU 20000000UL // 20 MHz
#define BAUD 9600
#include <util/setbaud.h>
#include <avr/io.h> // ввод-вывод
#include <util/delay.h>
void UART_Init(void)
{
UBRRH = UBRRH_VALUE;
UBRRL = UBRRL_VALUE;
UCSRB = (1 << TXEN) | (1 << RXEN);
UCSRC = (1 << USBS) | (3 << UCSZ0);
}
void Send(unsigned char *data)
{
USART_Send(data);
}
void USART_Send(unsigned char *data)
{
int i;
while(data[i]){
if (data == '\n')
USART_Send('\r');
while ( !( UCSRA & (1<<UDRE)) ){};
UDR = data[i];
i++;
}
}
int main(void)
{
DDRA = 0x00; // Весь порт как вход
DDRB = 0x00; // Весь порт как вход
UART_Init();
int tmp=2;
while (1){
if ((PINB & _BV(PB1)) == 1) {
if(tmp != 1) Send("Test 1\n");
tmp = 1;
} else {
if(tmp != 0) Send("Test 0\n");
tmp = 0;
}
}
return 0;
}
#define BAUD 9600
#include <util/setbaud.h>
#include <avr/io.h> // ввод-вывод
#include <util/delay.h>
void UART_Init(void)
{
UBRRH = UBRRH_VALUE;
UBRRL = UBRRL_VALUE;
UCSRB = (1 << TXEN) | (1 << RXEN);
UCSRC = (1 << USBS) | (3 << UCSZ0);
}
void Send(unsigned char *data)
{
USART_Send(data);
}
void USART_Send(unsigned char *data)
{
int i;
while(data[i]){
if (data == '\n')
USART_Send('\r');
while ( !( UCSRA & (1<<UDRE)) ){};
UDR = data[i];
i++;
}
}
int main(void)
{
DDRA = 0x00; // Весь порт как вход
DDRB = 0x00; // Весь порт как вход
UART_Init();
int tmp=2;
while (1){
if ((PINB & _BV(PB1)) == 1) {
if(tmp != 1) Send("Test 1\n");
tmp = 1;
} else {
if(tmp != 0) Send("Test 0\n");
tmp = 0;
}
}
return 0;
}
Гоняю это дело в эмуляторе, но почему то все время мк считает что на линии 0, в терминале только один раз вижу "Test 0". Хотя я туда то 0 то 1 загоняю. Для этого завел две кнопки одна на минус вторая на плюс.
Похоже косяк тут:
CODE:
if ((PINB & _BV(PB1)) == 1)
Но я его не вижу

Помогите!