Здравствуйте, подскажите пожалуйста, почему предпологаемая мной частота не совпадает с симулируемой в Proteus'е?
Итогово должна получиться частота 50Гц, а период Т=0.02 с, а протеус показивает около Т=0.332 с, в чьом проблема?
Код: Выделить всё
#define F_CPU 16000000UL
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#define PulseLow 100
#define Period 200
#define PULSE PORTB
volatile int i=0;
int TimerStartWith = 65510;//Макс значение таймера 65535.
ISR(TIMER1_OVF_vect)
{
TCNT1 = TimerStartWith;
i++;
if(i==PulseLow){
PULSE |=(1<<5);
}
if(i==Period){
i=0;
PULSE &=~(1<<5);
}
}
int main(void)
{
DDRB = 0b00100000;
PULSE = 0b00000000;
TIMSK1 |= (1<<0);
TCCR1B = 0b00000011; /*16-ти битний таймер, 64 from rescaling.
F=16МГц. f=F/64=0.25МГц T=1/F=0.004мс*/
TCNT1 = TimerStartWith;
sei();
while(1){
}
}
- Вложения
-
- Screenshot_3.png
- (91.11 КБ) 123 скачивания
-
- Screenshot_2.png
- (88.89 КБ) 130 скачиваний
-
- Screenshot_1.png
- (31.17 КБ) 175 скачиваний
