Добрый день.
программирование микроконтроллеров для меня вещь новая, поэтому хотелось бы услышать мнение более компетентных людей. Задача состоит в следующем.
Необходимо сделать генератор импульсов на ATmega8-16. Причем регулировка длительности импульсов и паузы между ними должна осуществляться раздельно. Время может изменяться от 5 микросекунд до 1 секунды.
Т.е. Время между импульсами = 5 микросекунд ... 1 секунда
Время импульса = 5 микросекунд ... 1 секунда
Передача данных по RS232
для решения задачи я решил воспользоваться кварцем на 16 МГц. Подав тактовый сигнал на Timer0 через делитель на 8. Сам Timer0 предустановлен на значение 245. Таким образом я получаю каждые 5 микросекунд (1600000 / 8 / 10 = 200000 КГц) прерывание переполнения Timer0.
Программа планируется примерно такая:
(на синтаксис не обращайте внимания, сижу на работе, нет возможности опробовать)
Dim Pausa as long
Dim Dlina Pausa as long
Dim Schetchik as long
Vihod alias Portb.1
------------------------------
коммуникация по RS232
и передача данных о длительности импульсов
Pausa= 1...200000
Dlina = 1.200000
------------------------------
Dlina:
Vihod=1
While Schetchik > 0
Wend
Pausa:
Vihod=0
While Schetchik > 0
Wend
Goto Dlina
-Обработка прерывания переполнения-
Schetlik=Schetchik-1
Вот собственно и все... А теперь к моим вопросам. Счетчик будет выдавать прерывание переполнения каждые 80 тактовых импульсов (он считает с 245 до 255, т.е. 10 импульсов). Мне удалось также узнать что "прыжок" в прерывание "стоит" микроконтроллеру около 50 тактов. Будет ли контроллер успевать выполнять основную программу на которую остается в таком случае 30 тактов?
Может я выбрал не совсем оптимальную стратегию для поставленной задачи?
Какие варианты существуют?
Надеюсь изложение было понятным, а с вопросами не перестарался... 