из принципаBOB51 писал(а):Нафига мозг по дурному морочить?
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
из принципаBOB51 писал(а):Нафига мозг по дурному морочить?

ладно, пусть будет не 6 тактов, а 12, т.е. 1,5 мкс джиттер - это ничто для IR-команд. или не согласны?ПростоНуб писал(а):хоть бы мигнули светодиодом для приличия
не потребуется - листинг обработчика я вам привелПростоНуб писал(а):так как потребуется сохранять и восстанавливать из стека или SREG и/или рабочий регистр
к сожалению, не всякая версия компилятора AVR-GCC согласна с вамиIvanoff-iv писал(а):"или" там лишнее...
с тех, когда она над портом PINx - "особенность архитектуры"ПростоНуб писал(а):С каких это пор команда SBI не устанавливает бит, а инвертирует?
злостный оффтоп: а давайте я нажму кнопу, а вы программно погасите светикBOB51 писал(а):кнопой и зажигаем и гасим тот светик
знаете, студент, который справится с поставленной задачей без применения прерваний, это будет гений какой-то!goldenandy писал(а):Ну вот курсовик студенту нарисовали почти.... Или лабораторку решили...
А мне все было интересно, имеет ли эта схема право на жизнь.ARV писал(а):злостный оффтоп: а давайте я нажму кнопу, а вы программно погасите светикBOB51 писал(а):кнопой и зажигаем и гасим тот светикв общем виде поставленная вами задача не решаема.
Код: Выделить всё
#define F_CPU 8000000
#define service_DDR DDRB
#define service_PIN PINB
#define pin PORTB0
#define SetBit(reg, bit) reg |= (1<<(bit))
#define ClearBit(reg, bit) reg &= (~(1<<(bit)))
#define BitIsSet(reg, bit) ((reg & (1<<(bit))) != 0)
#define BitIsClear(reg, bit) ((reg & (1<<(bit))) == 0)
#define InvBit(reg, bit) reg ^= (1<<(bit))
volatile uint8_t kn_n=0;
volatile uint8_t kn_temp=0;
volatile uint8_t kn_count=0;
// Timer 0 overflow interrupt service routine
ISR(TIMER0_OVF_vect){
switch (kn_count) {
case 0: ClearBit(service_DDR,pin); break;
case 2: {
if((BitIsClear(service_PIN,pin))&&(BitIsClear(kn_temp,pin))){
InvBit (kn_n,pin);
SetBit (kn_temp,pin);
} else {
if(BitIsSet(service_PIN,pin))
ClearBit (kn_temp,pin);
}
} break;
case 3: {
if(BitIsSet(kn_n,pin)){
SetBit(service_DDR,pin);
}
} break;
}
if(kn_count++ == 5) kn_count=0;
}
int main(void)
{
// Input/Output Ports initialization
// Port B initialization
DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (0<<DDB2) | (0<<DDB1) | (1<<DDB0);
PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 1000,000 kHz
TCCR0=(0<<CS02) | (1<<CS01) | (0<<CS00);
TCNT0=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=(0<<OCIE2) | (0<<TOIE2) | (0<<TICIE1) | (0<<OCIE1A) | (0<<OCIE1B) | (0<<TOIE1) | (1<<TOIE0);
// Global enable interrupts
sei();
while (1)
{
// Place your code here
}
}