Всё, башка больше не рубит.

Объясните мне тупому

почему этот код не хочет выполняться по порядку, как положено любому добропорядочному коду????????
CODE
#include <stdint.h>
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#define CD4094_PORT PORTB
#define CD4094_DDR DDRB
#define CD4094_PIN_DATA 3
#define CD4094_PIN_CLK 2
#define CD4094_PIN_STB 4
#define OnBit(address,bit) (address|=(1<<bit))
#define OffBit(address,bit) (address&=~(1<<bit))
#define Rstop 1
#define Lstop 2
#define Run 0
//объявление прототипов функций
void CD4094_init(void);
void CD4094_CLK(void);
void CD4094_STB(void);
void Shift_Reg(void);
void Shift_One_Byte(uint8_t r);
uint16_t Analog(void);
uint8_t Datchik_Pos(void);
void Led_Pos(void);
void RotorL(void);
void RotorR(void);
//определение переменных
volatile uint8_t TH;
uint8_t Led[2];
uint8_t Povorot;
uint8_t N;
void main(void){
// инициализация порта D и B
PORTD=0x70; //установка битов порта D в 0 или 1
DDRD=0x06; //установка порта D на in или out
DDRB=0x1C; //установка stb,data,clk на выход,уровень 0
//инициализация прерываний по переполнению таймера0
TIMSK=0x2;
//инициализация аналогового компаратора
ACSR=0x00;
Led[0]=Led[1]=0;
Povorot=0;
N=0;
CD4094_init(); //инициализация регистров
OffBit(DDRB,7); //выключаем транзистор
OnBit(DDRB,0); //разряжаем кондёр
_delay_ms(2); //время для разряда кондёраPovorot=0;
sei(); //разрешение глобальных прерываний
//основной цикл
while(1){
if((!(PIND&1<<PIND6))||(!(PIND&1<<PIND4))){ //если нажата одна из кнопок
N=Datchik_Pos();
if(N<1) Povorot=Rstop; //определение конечного правого положения датчика
else if(N>48) Povorot=Lstop; //определение конечного левого положения датчика
else Povorot=Run;
if(!(PIND&1<<PIND6)) RotorR(); //если нажата кнопка S0
if(!(PIND&1<<PIND4)) RotorL(); //если нажата кнопка S2
}
else {OffBit(PORTD,1);OffBit(PORTD,2);} //если не нажата ни одна из кнопок
}
}
void RotorR(void){
if(Povorot==Rstop){
OffBit(PORTD,2);
OffBit(PORTD,1);
return;} //если в крайнем правом положении то стоп
else{
OnBit(PORTD,2); //включить поворот (RUN)
OffBit(PORTD,1); //реверс не включать
Datchik_Pos();
Led_Pos();
Shift_Reg();
_delay_ms(300);
}
}
void RotorL(void){
if(Povorot==Lstop){
OffBit(PORTD,1);
OffBit(PORTD,2);
return;} //если в крайнем левом положении то стоп
else{
OnBit(PORTD,2); //включить поворот (RUN)
OnBit(PORTD,1); //реверс включить
Datchik_Pos();
Led_Pos();
Shift_Reg();
_delay_ms(300);
}
}
uint8_t Datchik_Pos(void){ //перевод тиков в номер положения датчика
uint16_t n;
uint8_t m;
n=Analog(); //получаем тики
m=((n-30)*100)/476; //переводим тики в номер положения переменника
return(m);
}
void Led_Pos(void){ //перевод номера положения датчика в код светодиода и группы
uint8_t m;
m=Datchik_Pos();
Led[0]=(1<<((m-(((m-1)>>3)<<3))-1)); //переводим номер положения переменника в номер светодиода в группе
Led[1]=~(1<<((m-1)>>3)); //переводим номер положения переменника в номер группы с инверсией битов
}
void CD4094_init(void){ //инициализация регистров
uint16_t i;
for(i=0;i<16;i++){OffBit(CD4094_PORT,CD4094_PIN_DATA) ; CD4094_CLK(); }
}
void CD4094_CLK(void){ //дёргаем ногу clk для проталкивания битов по регистру
OnBit(CD4094_PORT,CD4094_PIN_CLK);
_delay_us(15);
OffBit(CD4094_PORT,CD4094_PIN_CLK);
}
void CD4094_STB(void){ //дёргаем ногу stb для поджига светодиодов
OnBit(CD4094_PORT,CD4094_PIN_STB);
_delay_us(10);
OffBit(CD4094_PORT,CD4094_PIN_STB);
}
void Shift_Reg(void){ //загрузка сдвигового регистра
Shift_One_Byte(Led[1]);//загрузка кода группы в регистр
Shift_One_Byte(Led[0]);//загрузка кода светодиода в группе регистр
OffBit(CD4094_PORT,CD4094_PIN_DATA);
CD4094_STB(); //зажигаем светодиоды
}
void Shift_One_Byte(uint8_t r){ //загрузка одного байта
uint8_t i=8;
while(i--){
if(r&0x80) OnBit(CD4094_PORT,CD4094_PIN_DATA);
else OffBit(CD4094_PORT,CD4094_PIN_DATA);
CD4094_CLK();
r<<=1;
}
}
uint16_t Analog(void){ //используем аналоговый компаратор для замера времени заряда кондёра
OffBit(DDRB,0); //переводим 0 выход порта В в третье состояние
TCNT0=0; //очистим счётчик-накопитель
TH=0;
TCCR0B=2; //включаем таймер0 с пределителем CLK/8
OnBit(DDRB,7); //включить транзистор
while(!(ACSR&(1<<ACO))); //ждём изменения состояния бита АСО на выходе компаратора
TCCR0B=0; //выключаем таймер
OffBit(DDRB,7); //выключаем транзистор
OnBit(DDRB,0); //разряжаем кондёр
_delay_ms(2); //время для разряда кондёра
return(TH<<8|TCNT0); //возвращаем результат замера времени
}
ISR(TIMER0_OVF_vect){ //обработка прерывания таймера0 по переполнению
//при переполнении 8-битного счётчика таймера увеличивать байт ТН на 1
TH++;
}
Почему эта зараза при заходе в главный цикл не проверяет условие первого if, а сразу лезет к else if(N>48)??????? И вообще при шаговом выполнении наблюдаются скачки в такие места кода, куда даже "Макар телят не гонял"

А когда я попробовал вместо Analog() вставить просто число что бы прогнать код по функциям, то он наотрез отказался заходить в Datchik_Pos(). Блок
Код
N=Datchik_Pos();
if(N<1) Povorot=Rstop; //определение конечного правого положения датчика
else if(N>48) Povorot=Lstop; //определение конечного левого положения датчика
else Povorot=Run;
я пробовал заменить функцией - вообще код сбрендил и прыгал куда попало. Вообщем это не отладка кода, а отладка моей нервенной очень системы