Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
8
Добавлен:
26.01.2023
Размер:
1.72 Кб
Скачать
10.	 С использованием 8-ми разрядных таймеров напишите программу
«Задатчик интенсивности»: при подаче сигнала «1» на вход PA0 на выходе таймера
T0 (работает в режиме ТТТИМ) линейно изменяется скважность у от 0 до 1 за время
5 с (темп нарастания задается с помощью таймера Т2, работающего с прерыванием
по переполнению). При снятии сигнала PA0 скважность изменяется от 1 до 0 с тем
же темпом.
 */

#include <iom8535v.h>
#include <stdint.h>
#include <macros.h>

uint8_t iOCR = 128;

void port_init(void)
{
PORTA = 0xFF;
DDRA = 0x00;	//	порт А на вход
PORTB = 0xFF;
DDRB = 0xFF;	//	порт В на вывод (для	вывода ШИМа на вывод микросхемы PB3)
}

void timer0_init(void)
{
TCCR0 =	0x00;	//stop
TCNT0 =	0x01;	//set count
OCR0 =	0xFF;	//set compare
TCCR0 =	0x69;	//start timer TCCR0=0110 1001
// Kdel=001= 1 ^ f=8 МГц/1/256=31,2 5кГц
// rejimT0 =11 ^ быстрый ШИМ
// regimOC0=10 ^ установка 0С0 в "0
}

void timer2_init(void) // инициализация таймера Т2
{
TCCR2 =	0x00;	//остановка счетчика
TCNT2 =	0x66;	//задание начального значения в счетный	регистр 5c/255=19,6мс ~51Гц f=8000000/1024/(255-102) = 51 Гц
TCCR2 =	0x05;	//запуск таймера с параметрами TCCR = 0000 0101
//101 ^ Kdel=1024
}

#pragma interrupt_handler timer2_ovf_isr:5
void timer2_ovf_isr(void)	// Работа счетчика при	прерываниях по переполнению
{
TCNT2 = 0x66;	//установка начального	значения счетчика
if ((PINA&1)==0)
    {
    if (iOCR!=255)
        OCR0 = iOCR++;
    }
else
    {
    if (iOCR!=0)
        OCR0 = iOCR--;
    }
}


void init_devices(void)
{
CLI();
port_init();
timer0_init();
timer2_init();

TIMSK = 0x40;
SEI();
}

void main(void)
{
init_devices();

while(1)
    {
    }
}
Соседние файлы в папке LABA2