
- •Арифметика с фиксированной точкой
- •Реализация задачи на ассемблере
- •Программа беззнакового деления
- •Реализация задачи на ассемблере
- •Вычисление функции
- •Иерархия памяти эвм
- •Программа на c:
- •Битовые операции.
- •Реализация задачи на ассемблере
- •Таймеры
- •Программа часы.
- •Реализация задачи на с
- •Реализация задачи на ассемблере
- •Формирование серии прямоугольных сигналов - метод шим
- •Реализация задачи на с
- •Реализация на ассемблере
- •Adc преобразователь sab515/535
- •Реализация задачи на с
- •Сигнальная функция
- •Реализация задачи на с
- •Сигнальная функция
- •Реализация задачи на ассемблере
Формирование серии прямоугольных сигналов - метод шим
Таймер Тм0 переключает в режиме 2 по прерыванию бит INT1 – ШИМ на выходе Р3.3. В режиме GATE1 Tm1 измеряет полупериод прямоугольного сигнала INT1
F0/12
TF0
TL0
P3.3^1
пп прерывания таймера
TH0
3 0 P3
Int1
TH1
TL1 TL1P2
пп
прерывания
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);
}