Уже вторая тинька не отзывается. Суть в чем. Написал программу, запрограммировал и контроллер перестал отзываться. Подключение кварца ничего не дало. Что это может быть?
Вот исходный текст (hex прикрепляю):
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include <stdint.h>
#include <avr/wdt.h>
#define F_CPU 1000000UL // 1 MHz
#define time_limit 1 //(=5+Nsec*3,81)определитель задержки перед выключением
#define temp_min 16 //определитель температуры
#define temp_max 290
#define flay_off PORTB &= ~(1<<4); //выключить преобразователи (установить в 0 PORTB.4)
#define flay_on PORTB |= (1<<4); //включить преобразователи (установить в 1 PORTB.4)
volatile unsigned int N_T0_OVF;
volatile unsigned int temp_sensor;
FUSES =
{
.low = LFUSE_DEFAULT,
.high = HFUSE_DEFAULT,
};
LOCKBITS = (LB_MODE_3);
ISR(INT0_vect)
{
if(PINB & 0b01000000)
{flay_on;
TCCR0 = 0x00;
N_T0_OVF=0;}
else {TCNT0=0; TCCR0 = 0b00000101;}
}
ISR(TIMER0_OVF_vect)
{
N_T0_OVF++;
if(N_T0_OVF==time_limit)
{N_T0_OVF=0;
TCCR0=0x00;
flay_off;}
}
void read_adc_temp (void)
{
ADCSR|=0b01000000; //запустить преобразование
while ((ADCSR & 0b00010000)==0); //дождаться завершения преобразования
{asm("nop");}
ADCSR|=0b00010000; //сбросить флаг прерывания АЦП
temp_sensor=ADCW;
}
int main (void)
{
wdt_enable(WDTO_2S);
DDRB=0b01000111;
PORTB=0b00000000;
DDRA=0b00000001;
PORTA=0b00000000;
MCUCR=0b00000001;
TIMSK = 0b00000010;
GIMSK=0b01000000;
ACSR=0b10000000;
ADMUX=0b10000000;
ADCSR=0b10000011;
/*
read_adc_temp();
adc_next:
read_adc_temp();
if((temp_sensor<temp_min)||(temp_sensor>temp_max)) {goto adc_next;}
*/
asm("sei");
if(PINB & 0b01000000) {_delay_ms(20);}
if(PINB & 0b01000100) {flay_on;}
while(1)
{
/*
if((temp_sensor<temp_min)||(temp_sensor>temp_max))
{flay_off; asm("cli");}
else
{goto adc_next;}
*/
asm("nop");
wdt_reset();
}
return 0;
}