вот листинг моей программы , это грубо говоря пищалка против клопов ультро звуковая , должна настраиваться переменным резистором подключенным к порту а на нужной частоте. Но факт в том что программа на каторой компелируется текст начинает глючить , то проходит через прерывание таймера Т1 по три раза , то скачет через строчку и появляется после нескольких десятков нажатий F11 в разных местах. Самое интересное что эту же программу я заредил в VMLAB Она и там показала ту же окалесицу. Я с этой бедой борюсь больше 2 лет ( а мне не смешно.) Голова кругом!!! То-ли менять компилятор (я к этому то долгл приноравливался ) , То ли писать на Ассемблере. Я бы с Удовольствием выложил видео Файл Что эта программа вытворяет , если покажите куда.
#include <avr/io.h> #include <stdio.h> #include <util/delay.h> #include <avr/interrupt.h> #include <avr/signal.h>
volatile unsigned char a;
#define INVBIT(x,y) (x^=(1<<y))
ISR(TIMER1_OVF_vect) { INVBIT(PORTB,PB1);// управление светодиод INVBIT(PORTB,PB0);// управление светодиод a=0;
}
void display(void);
int main(void) { TIFR =0; TIMSK=0x04;// прерывание по перепол т1 TCCR1A=0; TCCR1B=1; TCNT1=65535-500; sei(); SFIOR=0; ADCSRA=0xe0;
SFIOR=0; DDRA=0x00;//in DDRB=0xff;//out DDRC=0xff;//out DDRD=0x00;//in PORTA=0x00; PORTB=0x01; PORTC=0x00; PORTD=0x00;
ADMUX=1;//vibor vhoda
horo: ADMUX=1; _delay_ms(1000); ADCCompare=ADC; ADCCompare=ADCCompare/3; ADCCompare=500-ADCCompare; TCNT1=65535-ADCCompare;
a=1; horo1: if (a==0) {goto horo;} goto horo1;
}
|