Сегодня на доосуге проводил опыт, была составлена простейшая программа с помощью APPBuilder вот ее код:
//ICC-AVR application builder : 04.12.2005 18:35:13 // Target : 2313 // Crystal: 1.0000Mhz
#include <io2313v.h> #include <macros.h>
void port_init(void) { PORTB = 0x80; DDRB = 0x80; PORTD = 0x00; DDRD = 0x00; }
//TIMER0 initialize - prescale:1024 // desired value: 4Hz // actual value: 4,002Hz (0,1%) void timer0_init(void) { TCCR0 = 0x00; //stop timer TCNT0 = 0x0C; //set count TCCR0 = 0x05; //start timer }
#pragma interrupt_handler timer0_ovf_isr:7 void timer0_ovf_isr(void) { PORTB ^=BIT(7); TCNT0 = 0x0C; //reload counter value }
//call this routine to initialize all peripherals void init_devices(void) { //stop errant interrupts until set up CLI(); //disable all interrupts port_init(); timer0_init();
MCUCR = 0x00; GIMSK = 0x00; TIMSK = 0x02; SEI(); //re-enable interrupts //all peripherals are now initialized }
// void main(void) { init_devices(); //insert your functional code here... }
Потом она была просимулирована на симуляторе VML все мигало как надо потом это было прошито на МК, в МК я прошил фьюзы на использоваие внутренего кварца с частотой 4 МГЦ но вместо положеных 16 МГЦ мигания светодиода я получил 30 миганий за 25 секунд, тоесть примерно 0.8 Гц, потом я прошил фьзы МК на использование встроенного кварца с цастотой 8Мгц получил частоту 1.8 гц. Где я мог допустить косяк допустил косяк? Вообще я в этом деле новичок может допустил какуето глупую ошибку, подскажите если не трудно
|