Описание алгоритма прерываний по переполнению Т0

Описание алгоритма:

- останавливаем счет таймера Т0

- загружаем 16-ти разрядные регистры данных таймера Т0 побайтно

- запускаем счет таймера Т0

- увеличение счетчика времени на 1

Схема алгоритма рассмотрена на рисунке 10:

Описание алгоритма прерываний по переполнению Т0 - student2.ru

Рисунок 10. Схема алгоритма прерывания по переполнению таймера 0

Описание алгоритма работы динамической индикации

Описание алгоритма:

- выключаем все порты индикации

- производим индикацию знакоместа

- инкремент знакоместа

- если все знакоместа обновлены, то переходим к начальному, иначе заканчиваем.

Схема алгоритма рассмотрена на рисунке 11:

Описание алгоритма прерываний по переполнению Т0 - student2.ru

Рисунок 11. Схема алгоритма работы подпрограммы динамической индикации

Заключение

После проделанной работы, была разработанная принципиальная схема устройства генерирующего прямоугольные сигналы на основе ЦАП К572ПА1. Разработанное устройство может применяться, для синхронизации различных процессов в цифровых устройствах — ЭВМ, электронных часах, таймерах и других. А также его можно использовать в измерительной технике для наладки и ремонта различных цифровых устройств.

Питание осуществляется от источника 5 В. Потребляемая мощность – 1.277 Вт. Потребляемый ток – 0.255А

Устройство может работать при температуре от -10 до +70 ºC.

Литература

1) Аверченков О.Е. Схемотехника: аппаратура и программы. – М.:ДМК Пресс 2012. – 588 с.

2) Аверченков О.Е. Схемотехника: Особенности программирования однокристалльной ВМ x51 на языке Си. – М.:ДМК Пресс 2012.

3) Аверченков О.Е. Основы схемотехники однокристальной ВМ х51: учебно-методическое пособие по курсу «Схемотехника ЭВМ» / О.Е. Аверченков. – Смоленск: РИО филиала ГОУВПО «МЭИ(ТУ)» в г. Смоленске, 2010. – 88с.

4) AT89C51 Complete datasheet [Электронный ресурс]http://www.atmel.com/images/doc0368.pdf

5) AT89C2051 [Электронный ресурс] http://www.atmel.com/ru/ru/devices/at89c51.aspx

6) КАЕВЧЕНКО М.А. Графические и текстовые конструкторские документы. Методические указания к оформлению по ЕСКД конструкторских документов, курсовых и дипломных проектов по курсу “Конструкторско-техническое обеспечение производства ЭВМ” Смоленск: ГОУВПО СФМЭИ (ТУ), 2005.

7) НЕФЕДОВ А.В. Интегральные микросхемы и их зарубежные аналоги: Справочник в 12 томах. -М.: ИП РадиоСофт, 2000.

8) [Электронный ресурс] https://ru.wikipedia.org/wiki/Генератор_сигналов

9) [Электронный ресурс] http://www.texnic.ru/konstr/izm/izm7.html

Приложение А. Принципиальная схема устройства

Описание алгоритма прерываний по переполнению Т0 - student2.ru

Приложение В. Перечень элементов

Описание алгоритма прерываний по переполнению Т0 - student2.ru

Приложение С. Текст программы

//Программа для КП на тему "Генератор прямоугольных импульсов на основе ЦАП(изменение амплитуды)"

//выполнена Василенко П.В., студентом группы АС-14.

//Версия программы: 1.1 beta, //05.06.2017//

#include <at89x51.h> //подключение файла используемого процессора, где определены стандартные имена регистров и битов

#define mPort P1

#define Tik (10000) //задание "тика" системного таймера Tic, Tic = 10000мкс = 10мс

#define mKvoZn 3

unsigned char //задание переменных

mPtrZn=0, mCount10ms=0, mBufInd[]={0,0,0}, mCount1s=0;

int T,T_PULSE,T_PAUSE,T2, FLAG;

char amp; //значение амплитуды

char n; //переменая фиксации переключения 0 и 1 (давать паузу или нет)

void mInitT0 (void){

TR0=0; //установка времени, которое будет //это бит управления запуском таймера 0 останавливает счет таймера 0

TMOD=(TMOD&0xf0)|0x1; //задание режима таймера

TL0=(~Tik); //установка времени, которое будет

TH0=(~Tik)>>8; //отсчитываться таймером, сдвиг вправо на 8 битов

TR0=1; //разрешает счет таймера 0

ET0=1; //разрешить прерывание по таймеру Т0

EA=1; //разрешить все разрешенные прерывания

}

void mInd (void){

mPort=0xf0; // выключаем все индикаторы

mPort=mPort|mBufInd[mPtrZn]; // выводим информацию

mPort=mPort&(~(1<<mPtrZn+4)); // включаем текущий индикатор

mPtrZn++;

if (mPtrZn==mKvoZn) mPtrZn=0;

}

void mInterrutT0 (void) __interrupt (TF0_VECTOR){ //процедура прерывания по переполнению для таймера 0

TR0=0; //установка времени, которое будет //это бит управления запуском таймера 0 останавливает счет таймера 0

TL0=(~Tik); //установка времени, которое будет

TH0=(~Tik)>>8; //отсчитываться таймером, сдвиг вправо на 8 битов

TR0=1; //разрешает счет таймера 0

mCount10ms++;

mInd();

FLAG=~FLAG;

}

void mByteToBCDtoBufInd (unsigned char mB){

mBufInd[2]=mB/100; // сотни

mBufInd[1]=(mB%100)/10; // десятки

mBufInd[0]=(mB%100)%10; // единицы

}

void main(void)

{

amp = 0; //Изначальная амплитуда

n = 0; //Фиксирует переключение из 0 в 1

mInitT0();

P2_3=0; //Порт для кнопки уменьшения

P2_2=0; //Порт для кнопки увеличения

//Предподготовительный этап для настройки амплитуды

while(1) //Работает постоянно

{

mByteToBCDtoBufInd(amp);

if (P2_2 == 1 && amp < 9) //увеличиваем амплитуду

{

amp = amp + 1;

}

if (amp > 0 && P2_3 == 1)//уменьшаем амплитуду

{

amp = amp - 1;

}

//Основной этап

mByteToBCDtoBufInd(amp); // Индикатор показывает значение амплитуды

if(FLAG) P3 = amp; // Посылаем амплитуду на ЦАП

else P3 = 0; // Посылаем 0 на ЦАП

}

}

Наши рекомендации