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

Формирование серии прямоугольных сигналов - метод шим

Таймер Тм0 переключает в режиме 2 по прерыванию бит INT1 – ШИМ на выходе Р3.3. В режиме GATE1 Tm1 измеряет полупериод прямоугольного сигнала INT1

F0/12 TF0

TL0 P3.3^1 пп прерывания таймера

TH0 3 0 P3

Int1

TH1 TL1 TL1P2 пп прерывания

F0/12 TL1=0

Временная диаграмма

TF0

Int1 TL1++ TL1++

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

#include <reg51.h>

#define con (0x10000-10000)/256;

#define con2 (0x10000-10000)%256;

unsigned int x, abs;

void signal_handler() interrupt 0

{

x = (TL1 + (TH1<<8))*2;

TL1 = 0;

TH1 = 0;

}

void time_handler() interrupt 1

{

TL0 = con2;

TH0 = con;

P3 ^= 0x7F;

}

void main()

{

TR0 = 1;

IT0 = 1;

TMOD = 0x91;

TR1 = 1;

ET0 = 1;

EX0 = 1;

EA = 1;

for(;;);

}

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

iseg at 30h

Stack: ds 10

cseg at 0

ljmp start

cseg at 0Bh

ljmp ex00

cseg at 13h

ljmp ex01

cseg at 40h

start:

mov P3, #0

mov SP, #Stack-1

mov TMOD, #11h

setb EA

setb EX1

setb IT1

setb TR1

setb TR0

setb ET0

setb IE0

cikl:

jmp cikl

ex00:

push ACC

mov TL0, #0xEF

mov TH0, #0xD8

mov a, P3

subb a, #0x7E

jz zero

mov P3, #0x7F

jmp nzero

zero:

mov P3, #0

nzero:

pop ACC

Reti

ex01:

push ACC

mov P2, TH1

mov P1, TL1

mov TH1, #0

mov TL1, #0

pop ACC

Reti

end

Adc преобразователь sab515/535

Структура блока измерения с учетом встроенных в SAB515 схем управления аналого-цифровым преобразованием включает:

1) 8 адресуемых аналоговых входа - порт P6. Входной аналоговый сигнал Uad подключается к одному из входов

2) регистр команд ADCON

3) регистр масштаба Uоп DAPR

4) результат преобразования - регистр ADDAT

5) 8-разрядный ADС-преобразователь S(Ux) последовательного приближения за 15 машинных цикла или 15 мкс при 12 МГц тактовой частоте. Завершение преобразования – по сигналу готовности в ADCON, по прерыванию или при одиночном преобразовании – по времени (задержка ~ 20 мкс). Значение аналогового сигнала

U=5.0v/28 * S

Программа чтения периодического аналогового сигнала с сохранением и обработкой в MCU

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

#include <reg515.h>

unsigned int volt,tm; //значение в мв

unsigned char max=1,min=50;

sbit x1 = P1^8;

delay(char t)

{ while(t--); }

Adc() //функция преобразования

{

DAPR=0; //запуск преобразования

delay(20); //задержка для завершения преобразования

P3=ADDAT; //чтение результата и подтверждение его в P3 для Анализатора

}

main()

{ char i;

TMOD=1;

ADCON=0; //выбирается вход 0 и режим одиночного преобразования

//найти max и min

while(x1) // ожидание завершения = нажатие клавиши INT0

{ adc();

max= (P3>max)? P3 : max;

min= (P3<min)? P3 : min;

}

//измерить период : начало измерения - ожидание max

while(P3<max) adc();

{TH0=0;TL0=0;TR0=1;} //запуск таймера по max для измерения ? периода

while(P3>min) adc(); //ожидание min

TR0=0;

tm=(TH0<<8) + TL0; //захват по min

while(1);

}