Пн окт 08, 2018 10:04:55
if (!(PINE &= (1<<PE1)))
if(!(PINE & (1<<PE1)))
Пн окт 08, 2018 10:05:38
Пн окт 08, 2018 10:06:42
PORTE = (1<<PE0) | (1<<PE1);
Пн окт 08, 2018 10:11:27
Пн окт 08, 2018 10:14:39
Пн окт 08, 2018 10:17:28
по идее, это не косяк: по правилу экранирования локальная переменная (параметр) экранирует глобальную, т.е. внутри функции видна именно переменная-параметр.prinv писал(а):Я кажется нашёл косяк.
У вас и глобальная переменная, и параметр функции имеют одно имя - Sch
Пн окт 08, 2018 10:18:43
Пн окт 08, 2018 10:20:47
Пн окт 08, 2018 10:24:31
Пн окт 08, 2018 10:29:04
#define F_CPU 8000000UL //obyavleniye chastoty CPU mk
#include <avr/io.h> //podklucheniye biblioteki mk
#include <avr/interrupt.h> //podklucheniye biblioteki zaderjek
#include <util/delay.h> //podklucheniye zaderjek
#include <stdio.h>
static void ti_in(void)
{
TCCR1A|=0; //регистр управления таймером/счетчиком
TCNT1|=0; //Регистр таймера/счетчика
OCR1A=Sch; //значение сравнения, до 16 бит
TIMSK|=(1<<OCIE1A);
TCCR1B|=(1<<CS12)|(1<<WGM12); //установка делителя, режима работы таймера
}
ISR(TIMER1_COMPA_vect) //функция, выполняемая автоматически, при совпадении числел - счетчика и установленного значения
{
PORTC=~PORTC;
}
static void TI_Write(unsigned int Sch)
{
//unsigned int sreg = SREG;
//cli();
OCR1A=Sch;
//SREG=sreg;
}
int main(void)
{
cli();
DDRC=0xFF;
PORTE = (1<<PE0) | (1<<PE1);
unsigned int Sch=100; //в реале период / 2
ti_in();
sei();
while (1)
{
if (!(PINE & (1<<PE1)))
TI_Write(300);
if (!(PINE & (1<<PE0)))
TI_Write(1000);
}
}
Пн окт 08, 2018 10:31:02
void TI_Write(unsigned int Sch1)
{
OCR1A=Sch1;
}
Пн окт 08, 2018 10:32:39
Пн окт 08, 2018 10:33:23
Пн окт 08, 2018 10:36:16
void ti_in(void)
{
TCCR1B = 0; // И ПЕРВОЙ СТРОЧКОЙ ЭТО БЫ ДОБАВИЛ
TCCR1A=0; //регистр управления таймером/счетчиком
TCNT1=0; //Регистр таймера/счетчика
OCR1A=Sch; //значение сравнения, до 16 бит
TIMSK=(1<<OCIE1A);
TCCR1B=(1<<CS12)|(1<<WGM12); //установка делителя, режима работы таймера
}
Пн окт 08, 2018 10:38:35
Пн окт 08, 2018 10:38:58
прогляделprinv писал(а):Только WGM12 установлен
Пн окт 08, 2018 10:40:20
Я бы только поменял всё на безусловное присваивание
Пн окт 08, 2018 10:42:32
while (1)
{
uint8_t Value;
Value = PINE;
if (!(Value & (1<<PE1)))
OCR1A=300;
if (!(Value & (1<<PE0)))
OCR1A=1000;
}
Пн окт 08, 2018 10:51:42
Пн окт 08, 2018 10:57:12
OCR1A = 300;
_delau_ms(1000);
OCR1A = 1000;
_delay_ms(1000);