Программирование МК на ассемблере ASM-51 и AVR Pascal. Китаев Ю.В. - 32 стр.

UptoLike

Составители: 

32
TIMSK.1:=1;//== бит OСIE0:=1 - разрешить прерывания при совпадении
текущего
end; //== значения таймера0 с кодом в регистре совпадения OCR0
//=====================================================
var b: boolean;//== вспомогательная логическая переменная
interrupt TIMER0COMP;//== обработчик прерывания при совпадении
begin //== кодов TCNT0 и OCR0
b:=not b; //== меняем состояние
PORTE.7:= b; //== светодиода
end;
//=====================================================
var bz:boolean; jj,ii:byte;//== ii,jj - вспом. переменные (счетчики циклов)
procedure bzzz; //== boolean bz - GLOBAL ONLY
begin//== подпрограмма подачи звукового сигнала
ii:=0;
loop//== начало бесконечного цикла
bz:=not bz;//== bz - "амплитуда" звука (от
0 до 1) - 01010101.....
PORTD.7:=bz;//== выводим "полуволну" - 01 или 10 на пьезодинамик
for jj:=0 to 250 do endfor;//== jj=250 - высота звука (длит-сть "полуволны"
ii:=ii+1;
if ii=50 then//== ii=50 - длительность звука
exitloop;//== заканчиваем подачу сигнала (выход из бескон. цикла)
endif;
endloop;//== возврат к началу бесконечного цикла
end;
//====================================================
function Dec2seg (chislo:word):array;
var cifry:array[0..2]of byte; i:byte; ostatok:word;
begin
i:=0; cifry:=blank;//== FF FF FF - коды гашения индикаторов
repeat
ostatok:=chislo mod 10;//== вычисляем очередную ДЕСЯТИЧНУЮ
цифру числа
chislo:=chislo div 10;//== путем последовательного деления результата
на 10
if ostatok<>0 then //== если остаток не равен
0, то
cifry[i]:=key8segm[ostatok-1]; //== извлекаем из таблицы код цифры от
1 до 9
else//== инче извлекаем из таблицы код цифры 0
cifry[i]:=key8segm[ostatok+10];//== цифра 0 не на "своем" месте на
клавиатуре.
endif;
Inc(i);//== переходим к следующей цифре числа (инкремент)
until chislo<1;//== до тех пор пока частное не станет < 1