Ребят, в большом проекте попался кусок, над которым я уже туплю. Среда CVAVR 1.25. Нужно выдать на ногу, неважно какую, количество импульсов, с определенной частотой. После обработки прерывания по таймеру, где меняется сигнал на ноге, возвращается тупо не туда, где прерывание прервало работу проги.
#include <mega16.h> #include <stdio.h> #include <delay.h>
long int step_kol; int step;
interrupt [TIM0_OVF] void timer0_ovf_isr(void) { // Reinitialize Timer 0 value TCNT0=step // загрузили константу step_kol++; //счетчик количества шагов PORTC.0^=1; // дернули ногой
}
void main(void){
// уже не до красоты - переписал, чтобы понятно было порт С - выход
DDRC = 255; PORTC = 0;
TIMSK=0x3; #asm("sei")
while(1){
было step=0x100; //константа для задания частоты поправил, это просто описка step=0x10;
TCCR0 = 0x00; //stop TCNT0 = step; //set count TCCR0 = 0x05; //start timer с предделителем на 1024
while (step_kol<1000){ //жду, когда в таймере пройдет 1000 циклов #asm("wdr"); } step_kol=0; delay_ms(5000); сюда не доходит } }
кусок выдрал аккуратно вроде, точнее заново оформил что же я не так делаю?
|