Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсач Кириенко(Серому) / zapiska_MPSDorabotannay.doc
Скачиваний:
10
Добавлен:
29.02.2016
Размер:
1.45 Mб
Скачать

3.3 Разработка текста программы

В самом начале программы производится настройка таймеров, счетчиков, прерываний, приоритетов прерываний.

Далее вызывается подпрограмма инициализации МЖКИ. При запуске МЖКИ настраивается в четырехразрядный режим, поэтому первым шагом мы настраиваем его в восьмиразрядный режим ввода информации. Затем производим все необходимые нам настройки индикатора расписанные непосредственно в комментариях самой программы в Приложении А.

Далее организуется подпрограмма положения курсора, адрес курсора хранится в области CGRAMМЖКИ, одна строка в области начиная с 0x192, другая с 0x80.

За тем выводится надпись, с помощью подпрограммы вывода Data_MJKI. То есть подается нужная последовательность импльсов на входы МЖКИ для передачи данных( не команд), и происходит ввод в МЖКИ данных изname[].

Далее вызывается подпрограмма подсчета общего числа импульсов, она включает в себя чтения счетчика С0, формирование числа импульсов.

Подпрограмма вывода на МЖКИ, выделяет 10000, 1000, 100,10,1 части числа и выводит его с помощью рассмотренной выше подпрограммы Data_MJKI.

Ввод команд осуществляется с помощью подпрограммы Comand_MJKI.

Расчет количества импульсов в минуту с помощью таймера Т1. Таймер отсчитывает минуту и после чего в переменную minзаносится значения импульсов хранящиеся в счетчике, деленное на количество всех прошедших минут.

Таким образом работает программа счетчика импульсов.

Заключение

В результате выполнения курсовой работы было разработано микропроцессорное устройство счета импульсов на баз микроконтроллера MCS-51. Спроектированная система полностью удовлетворяет требованиям, изложенным в техническом задании. Система спроектирована на стандартных элементах и типовых структурах и серийных блоках, выпускаемых промышленностью.

Список использованной литературы

  1. Москатов Е. А. Справочник по полупроводниковым приборам. — М.: Журнал "Радио", 2005.- 208 с.: ил.

  2. Справочная книга радиолюбителя-конструктора. Под редакцией Н.И. Честякова. – М.: «Радио и связь»,1990. - 617с.: ил.

  3. «Техническое описание стенда учебного СУ-51», ООО «ОпТех», 2003г.

Приложение А

//#include math.h

sfr P0=0x80; ///инициализируем порнт P0

sfr P1=0x90; ///инициализируем порнт P1

sfr P2=0xA0; ///инициализируем порнт P2

sfr P3=0xB0; ///инициализируем порнт P3

sfr IE=0xA8; ///инициализируем регистор прерываний

sfr TMOD=0x89; ///инициализируем регистор таймера

sfr TCON=0x88; ///инициализируем регистор таймера

sfr TH0=0x8C; ///инициализируем регистор таймера

sfr TL0=0x8A; ///инициализируем регистор таймера

sfr IP=0xB8; ///инициализируем регистор парететов

sfr TH1=0x8D; ///инициализируем регистор таймера

sfr TL1=0x8B; //инициализируем регистор таймера

sbit P00=P0^0;

sbit P01=P0^1;

sbit P02=P0^2;

sbit P03=P0^3;

sbit P04=P0^4;

sbit P05=P0^5;

sbit P06=P0^6;

sbit P07=P0^7;

sbit P10=P1^0;

sbit P11=P1^1;

sbit P12=P1^2;

sbit P13=P1^3;

sbit P14=P1^4;

sbit P15=P1^5;

sbit P16=P1^6;

sbit P17=P1^7;

sbit P20=P2^0;

sbit P21=P2^1;

sbit P22=P2^2;

sbit P23=P2^3;

sbit P24=P2^4;

sbit P25=P2^5;

sbit P26=P2^6;

sbit P27=P2^7;

sbit P30=P3^0;

sbit P31=P3^1;

sbit P32=P3^2;

sbit P33=P3^3;

sbit P34=P3^4;

sbit P35=P3^5;

sbit P36=P3^6;

sbit P37=P3^7;

unsigned short count; ///Эта переменная будет соответствовать количеству импульсов

unsigned short data name[16]={0x4B,0x49,0x52,0x49,0x45,0x4E,0x4B,0x4F,0x20,0x53,0x34,0x65,0x74,0x34,0x69,0x6B,};

unsigned char var; // эта переменная будет определять нажатые кнопки(отображать МИН или кол. импульсов)

unsigned short min; // эта переменная соотв. кол. минут

void vivod() interrupt 1 using 3 // прерывания от таймера 0

{}

void vivod_min() interrupt 3 using 3 /// прерывания от таймера 1

{

unsigned short c1;

unsigned short c2;

TH1=252; /// соотв 1мс

TL1=23;

++c1;

if(c1==60000) /// соответствует 1 мин

{

c2++;

min=count/c2; /// расчет импульсов в минуту

c1=0;

}

}

void int1() interrupt 0 ///прерывание от кнопки 1

{

var=1;

P32=1;

}

void int3() interrupt 2 using 3///прерывание от кнопки 2

{

var=0;

P33=1;

}

void Comand_MJKI (unsigned char command)//Обработка команд на МЖКИ, начале мжки работает в 8-разрядном режиме

{

unsigned char temp_int_1;

P12=1;

P2=command;

P12=0;

for (temp_int_1 = 0; temp_int_1 < 1000; temp_int_1++); ///задержка 2 мс

}

void Data_MJKI (unsigned char data_mgki)//Вывод данных на МЖКИ записанных в сам генератор символов

{

unsigned char temp_int_1;

P12=1;

P10=1;

P2=data_mgki;

P12=0;

P10=0;

for (temp_int_1 = 0; temp_int_1 < 1000; temp_int_1++);///задержка 2 мс

}

void impulsi_vsego (void) /// расчитываем количество импульсов, спомощью счетчика C/T0

{

count+=TH0 ;

count=count<<4;

count+=TL0;

}

void Go_to_XY(unsigned char x, unsigned char y) // установка курсора в нужную нам строку и сегмент

{

if (x > 15 ) { x=15;} // Коррекция возможной ошибки входных параметров

if (y > 1 ) { y=1; }

if (y != 0 )

{

x = x+ 0x80; ///установка курсора в нужную нам строку 1

}

if(y==0){ x=x+192;}/// установка курсора в нужную нам строку 2

Comand_MJKI(x);

}

void MJKI(unsigned short mjki)/// выделение числа и вывод его на мжки, макс число : 65000 импульсов

{

unsigned char digit,d,n,k,t;

digit=mjki/10000;// выдуление 10000

d=digit;

if(d==0){Data_MJKI(0x20);}

else{Data_MJKI(0x30+digit);}

digit=(mjki-d*10000)/1000;//выдуление 1000

if((d==0)&&(digit==0)){Data_MJKI(0x20);}

else {Data_MJKI(0x30+digit);}

n=(mjki-d*10000-digit*1000)/100;//выдуление 100

if((d==0)&&(digit==0)&&(n==0)){Data_MJKI(0x20);}

else {Data_MJKI(0x30+n);}

k=(mjki-d*10000-digit*1000-n*100)/10;//выдуление 10

if((d==0)&&(digit==0)&&(n==0)&&(k==0)){Data_MJKI(0x20);}

else {Data_MJKI(0x30+k);}

t=mjki-d*10000-digit*1000-n*100-k*10;

Data_MJKI(0x30+t); //выдуление 1

}

void Init_MJKI (void) /////Вначале мжки работает в 4-разрядном режиме

{

unsigned int temp_int_1;

P10=0;

P11=0;

P12=0;

for (temp_int_1 = 0; temp_int_1 < 7000; temp_int_1++); // Пауза 15 мс, ждем пока выставятся начальные настройки.

P2=52; // Настраиваем на 8-битную передачу команд/данных(отправляем старшую тетраду данных)

P12=1; // Мигнал eneibl в высокий уровень

P12=0; //Мигнал eneibl в низкий уровень, что соответствует записи данных в МЖКИ

P2=255;//// Настраиваем на 8-битную передачу команд/данных(отправляем младшую тетраду данных)

P12=1; //Мигнал eneibl в высокий уровень

P12=0; //Мигнал eneibl в низкий уровень, что соответствует записи данных в МЖКИ

for (temp_int_1 = 0; temp_int_1 < 2000; temp_int_1++);

Comand_MJKI(0x01);//очистка экрана

Comand_MJKI(0x0F);// режим отображения, задаем параметры курсора

Comand_MJKI(0x32); // присваение адреса СА в области СGRAM

Comand_MJKI(0x14); // разрешение сдвига влево курсора

Comand_MJKI(0x3C);// установка 2 строки

}

void main (void)

{unsigned int i;

IE=255; // разрешение всех видов прерываний

IP=5; /// пререоретет от 1 и 2 инта

TMOD=29;// Настройка таймера Т0 в режим счетчика с режимом работы 1

TCON=80; // Запуск счетчика;

TH1=0; // заполнение таймера

TL1=0;// заполнение таймера

Init_MJKI();//Инициализая МЖКИ

Go_to_XY(0,1); ////Выводим в верхнюю строку (KIRIENKO s4ey4ik)

for( i=0;i<16;i++)

{

Data_MJKI(name[i]);

}

while(1)

{

P34=1;

impulsi_vsego();

Go_to_XY(8,0);///В эту область (верхняя строка, 8 сегмент) будет выводится число импульсов.

if(var==1)

{

MJKI(min);

}

if(var==0){MJKI(count);}

}

}

Соседние файлы в папке Курсач Кириенко(Серому)