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

UptoLike

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

23
// 1 2 3 4 5 6
$xx,$80,$xx,$7F,$xx,$B6);//инв. 8-ми сегм. коды
// 7 8 9 * 0 #
{--------------------------------------------------------------}
{ Var Declarations }
{$IDATA}
var s:array[0..2]of byte;key,kn:byte; adccode:word;
{--------------------------------------------------------------}
{ functions }
{$I C:\EMUL\Work\KeyLib4PascaL.pas}//== ф-ии для работы с клав-ой
//===================================================
procedure Init_Ports; //== задаем направления передачи данных
begin //== через порты, а также начальные значения
DDRC:=$FF;//== или так DDRC:=%11111111;
DDRD:=$8f;//== значение $70 для примера (пересчитать)
DDRE:=$f0;//== значение $F для примера (пересчитать)
PORTE:=%11111111;//== гасим индикаторы, подавая на
end; //== аноды светодиодов нули через инверторы
//===================================================
procedure Init_Timer0_Async;
begin
TCCR0:=$0D;//== биты CS00,02=1(Rпреддел=128),WGM01=1-сброс
счетчика при совп.
OCR0:=$FF;//== код совпадения
ASSR.3:=1; //== бит AS0=1 - асинхронный режим Timer0 от кварца
32768Гц
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;begin//== подпрограмма подачи звукового сигнала
ii:=0;
loop//== начало бесконечного цикла
bz:=not bz;//== bz - "амплитуда" звука (от 0 до 1) - 01010101.....
PORTx.x:=bz;//== выводим "полуволну" - 01 или 10 на пьезодинамик