Ср мар 04, 2015 12:32:33
Ср мар 04, 2015 12:37:58
Ср мар 04, 2015 12:43:53
Compressor писал(а):LED_PORT = LED_PORT & (0<<LED2);
Получается тут обн. Весь порт?
Ср мар 04, 2015 12:48:32
Чт мар 05, 2015 09:17:08
lcd_putchar(0xA5);
Чт мар 05, 2015 09:48:16
Чт мар 05, 2015 09:53:40
Чт мар 05, 2015 10:00:06
Чт мар 05, 2015 10:02:06
Чт мар 05, 2015 10:37:29
akl писал(а):Попробуйте загрузить 0xB1. Может повезёт.
Чт мар 05, 2015 14:38:06
В корне неверно. Первая операция обнуляет весь порт, а вторая операция не делает ничего вообще. Не учите неправильным и неработающим вещам.FreshMan писал(а):эта операция, ее можно записать проще PORT & = (0<<bit) выполняет не что иное как логическое И над портом
а эта PORT & =~ (0<<bit) делает сброс нужного вам бита в порте, в данном случае нулевого
Именно так. Порт логически умножается на ноль.Compressor писал(а):LED_PORT = LED_PORT & (0<<LED2);
Получается тут обн. Весь порт?
Насколько я понял, Вы русские буквы в протеусе видите. Значит, вероятнее всего, подменили библиотеку тамошнюю на русифицированную.kk042fjv писал(а):Это я в протеусе все пробовал.
Чт мар 05, 2015 19:46:31
Чт мар 05, 2015 20:36:43
самым тривиальным способом: http://arv.radioliga.com/content/category/6/33/49/ - первые два пункта FAQDrRain писал(а):как рулить отдельно каждым пином если все пины находятся на одном порту?
Чт мар 05, 2015 21:31:31
WiseLord писал(а):вторая операция не делает ничего вообще.
Пт мар 06, 2015 18:34:02
Пт мар 06, 2015 20:01:30
Сб мар 07, 2015 09:13:05
#include <avr/io.h>
#include <avr/interrupt.h>
unsigned char cou1; // назначаем переменную
char Flag1=0; // переменная флаг изначально сброшенный.
ISR (TIMER1_OVF_vect)
{
if ((PIND&(1 << PD0)) == 0) // если кнопка PD0 нажата
{
if(Flag1==0)
{
PORTB=0b00000001; //включить ламочку
cou1 = cou1+1; // пока кнопка нажата добавляем +1 в перем нную каждый цикл
}
else // если флаг не равен 0
{
cou1=0; //сбросим счетчик
Flag1=0; // сбросим флаг
}
}
if ((PIND&(1 << PD0)) == 1) // если кнопка отпущена
{
if(cou1<2000) // еслисчетчик не достиг значение
{
PORTB=0b00000000; //выключим лампочку
cou1=0; //сбросим счетчик
}
else // если достиг
{
PORTB=0b00000001; //включаем лампочку
Flag1=1; //устанавливаем флаг
}
}
}
int main(void)
{
DDRB= 0b11111111; //определяем PORTB на выход
PORTB= 0x00; // изначально все лампочки на порту B выключены
DDRD = 0b11111000; //устанавливаем первые три ножки на вход остальные на выход
PORTD= 0b00000111; //подключаем к первым трем ножкам подт резисторы остальные уст в 0
TCCR1B = (1 << CS12)|(0 << CS11)|(1 << CS10)|(1 << WGM12); //предделитель clk/1024, режим таймера СТС
TCNT1 = 0;
TIMSK |= (1<<TOIE1); // разрешаем прерывание по переполнению таймера
cou1 = 0; // Присвоение начального значения
sei(); // Разрешение прерываний
while (1) {}; // Бесконечный цикл
}
Сб мар 07, 2015 11:34:29
Сб мар 07, 2015 14:51:51
Сб мар 07, 2015 16:22:30
#include <avr/io.h>
#include <avr/interrupt.h>
volatile int cou1; // назначаем переменную
volatile char Flag1; // переменная флаг
ISR (TIMER1_COMPA_vect)
{
if ((PINC&(1 << PC0)) == 0) // Проверка состояния переключателя
{
cou1 = cou1++;
}
}
int main(void)
{
// настройки портов ввода и вывода
DDRB= 0b11111111; //определяем PORTB на выход
PORTB= 0b00000000; // изначально все лампочки на порту B выключены
DDRD = 0b11111000; //устанавливаем первые три ножки на вход остальные на выход
PORTD= 0b00000111; //подключаем к первым трем ножкам подт резисторы остальные уст в 0
TCCR1A = 0x00;
TCCR1B = (1 << CS12)|(0 << CS11)|(1 << CS10)|(1 << WGM12); //предделитель clk/1024, режим таймера СТС
TCNT1 = 0x00;
OCR1A = 489; // максимальный предел счета (при 1 MHz это 500мс)
TIMSK |= (1 << OCIE1A); // разрешение прерывания по совпадению
cou1 = 0b00000000; // Присвоение начального значения
Flag1 = 0b00000000; //изначально сброшенный
sei(); // Разрешение прерываний
while (1)
{
if ((PIND&(1 << PD0)) == 0) // если кнопка PD0 нажата
{
if(Flag1==0)
{
PORTB=_BV(0); //включить ламочку
}
else // если флаг не равен 0
{
Flag1=1; // установим флаг в 1 (лампочка горит)
}
};
if ((PIND&(1 << PD0)) == 1) // когда кнопку отпустили
{
if(cou1< 4) // проверяем достиг ли счетчик указанного значения
{
PORTB &= ~_BV(0); //выключим лампочку
cou1=0; //сбросим счетчик
Flag1=0; // снимим флаг (лампочка не горит)
}
else // если достиг
{
//PORTB=_BV(0); //включаем лампочку
Flag1=1; //устанавливаем флаг
cou1=0; //сбросим счетчик
}
}
}; // Бесконечный цикл
}