Скачиваний:
20
Добавлен:
09.05.2014
Размер:
161.28 Кб
Скачать

Сигнальная функция

SIGNAL void sin_sig (unsigned int time) {

float x;

while (1) {

for (x = 0.0; x <= 6.28; x += 0.0628) {

AIN0 = __sin(x)/1.333333 + 1;

twatch (time);

}

}

}

define button "SIN 1000", "sin_sig(1000)"

define button "KILL SIN", "signal kill sin_sig"

Измерение полупериода прямоугольного сигнала INT1

Измерить частоту прямоугольного сигнала методом Захвата (Capture) и Gate. Метод Захвата – таймер выполняет непрерывный отсчет времени с учетом переполнения, при прерываниях по фронту внешнего сигнала фиксируется значение таймера и вычисляется модуль разности двух последующих значений, или длительность периода.

В режиме GATE1 Tm1 измеряет полупериод прямоугольного сигнала INT1, значение выводим в порт Р2

Реализация задачи на с

#include <reg51.h>

unsigned char t=0;

int_0() interrupt 0

{

TR0 = 0;

P2 = TL0;

TH0 = 0;

TL0 = 0;

TR0 = 1;

}

main()

{

TMOD = 0x09;

TH0 = 0;

TL0 = 0;

TR0 = 1;

EX0 = 1;

IT0 = 1;

EA = 1;

while(1);

}

Сигнальная функция

SIGNAL void Signa (unsigned int Time)

{

twatch (Time);

while(1)

{

PORT3 = 0xF4;

twatch (Time);

PORT3 = 0;

twatch (Time);

}

}

Signa(150)

la PORT3

Реализация задачи на ассемблере

iseg at 30h

Stack: ds 10

cseg at 0

ljmp start

cseg at 03h

ljmp ex00

cseg at 40h

start:

mov P2, #0

mov SP, #Stack-1

mov TMOD, #09h

mov TH0, #0

mov TL0, #0

setb EA

setb EX0

setb IT0

setb TR0

cikl:

jmp cikl

ex00:

cpl TR0

push ACC

mov A, TL0

mov P2, A

mov TH0, #0

mov TL0, #0

pop ACC

setb TR0

Reti

end

16