Пт апр 12, 2019 14:53:58
#define F_CPU 8000000UL
#define XTAL 8000000UL
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
static uint8_t s;
void timer0_init (void){
DDRD=(1<<PD0); /* PD0 в режим выхода*/
TCCR0B|=(1<<CS02)|(1<<CS00);/*Предделитель = 1024*/
TIFR0 = (1<<TOV0);/*флаг прерывания по переполнению*/
TCNT0 = 255;
s = 0;
TIMSK0=(1<<TOIE0);//прерывание по переполнению таймера 1
sei();//Разрешить прерывания
}
ISR(TIMER0_OVF_vect)
{
PORTD=(1<<s);
s++;
if(s==120)
{
s=0;
}
TCNT0= 255;/*начальное значение таймера*/
}
int main(void)
{ timer0_init();
while(1)
{
}
}
Пт апр 12, 2019 15:46:42
Импульса или импульсов?yan671games писал(а):сделать генерацию импульсов
Пт апр 12, 2019 16:03:33
Пт апр 12, 2019 16:24:36
Пт апр 12, 2019 16:24:50
И такyan671games писал(а):Импульсов
yan671games писал(а):импульсов длительностью 100микросекунд
значит 1000 импульсов длительностью 100мкс, пауза между импульсами пусть будет то же 100мкс (должна же быть пауза между импульсами?) и вся это пачка импульсов повторяется 1 раз в 4 секунды.yan671games писал(а):генерироваться они должны 1 раз в 4 секунды
Пт апр 12, 2019 16:58:16
Пт апр 12, 2019 17:06:54
Но вот так бы и сразу.yan671games писал(а):Нет, один импульс длительностью 100мкс, который повторяется раз в 4 секунды
#define F_CPU 8000000UL
#define XTAL 8000000UL
#include <inttypes.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay_basic.h>
ISR(TIMER1_COMPA_vect){
PORTD |= (1<<(PIND0));
_delay_loop_2(199);
PORTD &= (~(1<<(PIND0)));
}
int main()
{
DDRD |=(1<<DDD0);
PORTD |=(0<<PIND0);
// Timer/Counter 1 initialization
// Timer Period: 3,9999 s
TCCR1A=(0<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (0<<WGM10);
TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (1<<WGM12) | (1<<CS12) | (0<<CS11) | (1<<CS10);
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x7A;
OCR1AL=0x10;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 1 Interrupt(s) initialization
TIMSK1=(0<<ICIE1) | (0<<OCIE1B) | (1<<OCIE1A) | (0<<TOIE1);
// Global enable interrupts
sei();
while (1)
;
return 0;
}
Пн апр 15, 2019 09:16:17
Пн апр 15, 2019 12:02:05
Можно и на 8-битном таймере, по аналогии с 16-битным таймером.yan671games писал(а):А на 8-битном таймере можно этот же процесс сделать?
Чт май 02, 2019 11:07:55