Чт июл 19, 2018 08:44:10
Чт июл 19, 2018 08:57:41
Чт июл 19, 2018 10:22:12
Встречаются два мужика в пустыне. Один тащит телефонную будку, второй рельсу.
Тот что с рельсой спрашивает:
- Нафига тебе телефонная будка?
- Ну а вдруг на меня лев нападет?! Я в будку спрячусь, и он меня не съест! А ты зачем рельсу таскаешь?
- А вдруг львы?!
- И что?
- Ну дак я рельсу брошу и налегке от них убегу!
Чт июл 19, 2018 11:33:53
Пт июл 20, 2018 11:06:17
TCCR1B = 0;
TCCR1A = 0;
TCCR1B |= (1<<WGM12); // устанавливаем режим СТС (сброс по совпадению) для первого таймера
// OCR1AH = 0xFF; //записываем в регистр число для сравнения - старшый байт
// OCR1AL = 0x7F; //записываем в регистр число для сравнения - младший байт
OCR1A = 4000; //записываем в регистр число для сравнения
TCCR1B |= ( 1 << CS12 ) | ( 1 << CS10 );//устанавливаем предделитель на 1024
TIMSK1 |= (1<<OCIE1A); // Разрешить прерывание по совпадению OCR1A
//TIMSK1 |= (1<<OCIE1B); // Разрешить прерывание по совпадению OCR1B
//TIMSK1 |= (1<<TOIE1); // Разрешить прерывание по переполнению
Пт июл 20, 2018 12:55:02
Пт июл 20, 2018 14:02:27
/////////////////////////////////////////////////////////////////
#define F_CPU 20000000L
#include <avr/io.h>
#include <Util/delay.h>
#include <avr/interrupt.h>
/////////////////////////////////////////////////////////////////
void timers_ini(void)
{
/////////////////////////////////////////////////////////////////////////
//====/Настройка таймера0/===================
TCCR0A = 0;
TCCR0B = 0;
TCCR0A |= (1<<WGM01); // Режим CTC (сброс по совпадению)
//TCCR0B |= (1<<CS00); // Тактирование от CLK.
// Если нужен предделитель :
// TCCR0B = (1<<CS01); // CLK/8
// TCCR0B = (1<<CS00)|(1<<CS01); // CLK/64
// TCCR0B = (1<<CS02); // CLK/256
TCCR0B = (1<<CS00)|(1<<CS02); // CLK/1024
// Верхняя граница счета. Диапазон от 0 до 255.
OCR0A = 255; // Частота прерываний A будет = Fclk/(N*(1+OCR0A))
OCR0B = 255; // Частота прерываний B будет = Fclk/(N*(1+OCR0B))
// где N - коэф. предделителя (1, 8, 64, 256 или 1024)
TIMSK0 |= (1<<OCIE0A); // Разрешить прерывание по совпадению A
//TIMSK0 |= (1<<OCIE0B); // Разрешить прерывание по совпадению B
//TIMSK0 |= (1<<TOIE0); // Разрешить прерывание по переполнению
//====/Настройка таймера1/===================
TCCR1B = 0;
TCCR1A = 0;
TCCR1B |= (1<<WGM12); // Режим CTC (сброс по совпадению)
//TCCR1B |= (1<<CS10); // Тактирование от CLK.
// Если нужен предделитель :
// TCCR1B |= (1<<CS11); // CLK/8
// TCCR1B |= (1<<CS10)|(1<<CS11); // CLK/64
// TCCR1B |= (1<<CS12); // CLK/256
TCCR1B |= (1<<CS10)|(1<<CS12); // CLK/1024
// Верхняя граница счета. Диапазон от 0 до 65535.
OCR1A = 2678; // Частота прерываний A будет = Fclk/(N*(1+OCR1A))
OCR1B = 2678; // Частота прерываний A будет = Fclk/(N*(1+OCR1B))
// где N - коэф. предделителя (1, 8, 64, 256 или 1024)
TIMSK1 |= (1<<OCIE1A); // Разрешить прерывание по совпадению A
//TIMSK1 |= (1<<OCIE1B); // Разрешить прерывание по совпадению B
//TIMSK1 |= (1<<TOIE1); // Разрешить прерывание по переполнению
////////////////////////////////////////////////////////////////////////////////////////////////////
}
ISR (TIMER0_COMPA_vect) // вектор прерывания по совпадению таймера 0
{
/////////////////////////////////////////////////////////////////
if ((PINC&0b00000001))
{
PORTC &= ~(1<<0); //записать в PC0 ноль
}
else
{
PORTC |= (1<<0); //записать в PC0 единицу
}
////////////////////////////////////////////////////////////////////
}
ISR (TIMER1_COMPA_vect )
{
/////////////////////////////////////////////////////////////////////
if ((PINC&0b00000001))
{
PORTC &= ~(1<<2); //записать в PC0 ноль
}
else
{
PORTC |= (1<<2); //записать в PC0 единицу
}
///////////////////////////////////////////////////////////////////
}
int main(void)
{
//=========================
DDRC |= (1<<0); //записать в PC0 единицу (что бы выставить его на выход)
PORTC &= ~(1<<0); //записать в PC0 ноль
DDRC &= ~(1<<1);
PORTC |= (1<<1);
DDRC |= (1<<2); //записать в PC2 единицу (что бы выставить его на выход)
PORTC &= ~(1<<2);//записать в PC2 ноль
timers_ini();
sei();//разрешить прерывания
//=========================
while(1)
{
if (false == (PINB&0b00000010))
{
//_delay_ms(500);
}
}
//========
}
Пт июл 20, 2018 14:12:52
Пт июл 20, 2018 14:24:41
Пт июл 20, 2018 14:34:06
чтобы не попадать в подобную ситуацию, крайне настоятельно рекомендую избавиться от магических чисел при помощи соответствующих макросовDENIS451 писал(а):глаз замылился и я не вижу, что проверяю PC0 вместо того, что бы проверять PC2
Пт июл 20, 2018 16:18:43