Нет, вам нужно написать одну программу. Ваш инструктор просит вас понять, как работают прерывания. Я только когда-либо делал такую программу на C, поэтому вам придется искать в другом месте учебник по этой теме или ждать другого ответа.
Ваша программа установит регистры, которые управляют некоторыми часами, а затем используйте SEI
перед входом в цикл, который имеет одну инструкцию, которая помещает чип в режим сна. Вы должны выбрать правильный режим ожидания, чтобы часы все еще работали и все еще прерывались.
Вы также напишите обработчик прерываний подпрограммы, который вы никогда не вызываете. Вместо этого вы умело настроили часы, чтобы вызвать обработчик, когда происходит прерывание сравнения, когда часы достигают определенного значения.
Поскольку чип работает так быстро, обработчик будет вызван намного раньше 1 секунды, поэтому ваша процедура должна будет сделать что-то вроде увеличения переменной счетчика до тех пор, пока не достигнет определенного значения. Если он достигнет значения, сбросьте счетчик и переключите светодиод. Обработчик заканчивается инструкцией RETI
, чтобы процессор знал, что возвращает основной цикл, где он был прерван.
Вам необходимо будет изучить руководство для процессора. Он доступен на веб-сайте Atmel. В частности, выберите часы для обработчика прерываний (16 бит будут длиться дольше между прерываниями) и посмотрите описания регистров в конце главы. Вы хотите установить прекальер, чтобы замедлить счетчик часов, и выберите подходящее значение сравнения, чтобы было легко получить кратное, чтобы достичь 1 секунды.
Псевдокод для обработчика прерываний будет что-то вроде
add a number to the compare register to set up the next interrupt
if counter < limit then increment counter (this is not the clock counter. It is a variable in memory you have declared)
else reset the counter variable to 0 and toggle the LEDs
rti
также [ этот вопрос] (http://stackoverflow.com/questions/16730519/assembly-how-to-set-frequency-of-interrupt) – Jester