- •Содержание
- •Введение
- •1 Разработка функциональной схемы системы
- •1.1Описание принципа работы объекта
- •1.2 Функциональная схема микропроцессорной системы
- •2 Разработка аппаратной части системы
- •2.1 Краткое описание микропроцессорного комплекта
- •2.2 Организация памяти микропроцессорной системы Распределение памяти контроллера приведено на рисунке 5.
- •2.3 Расчет и выбор элементов сопряжения
- •2.3.1 Выбор конденсаторов
- •K73-9-10b-0,1 мкФ±10% ожо.461.087 ту
- •2.3.2 Расчет и выбор кнопок
- •2.3.4 Выбор индикатора
- •3 Разработка программного обеспечения системы
- •3.1 Краткое описание системы команд микроконтроллера
- •Арифметические операции:
- •3.2 Описание общего алгоритма работы системы
- •3.3 Разработка текста программы
3.3 Разработка текста программы
В самом начале программы производится настройка таймеров, счетчиков, прерываний, приоритетов прерываний.
Далее вызывается подпрограмма инициализации МЖКИ. При запуске МЖКИ настраивается в четырехразрядный режим, поэтому первым шагом мы настраиваем его в восьмиразрядный режим ввода информации. Затем производим все необходимые нам настройки индикатора расписанные непосредственно в комментариях самой программы в Приложении А.
Далее организуется подпрограмма положения курсора, адрес курсора хранится в области CGRAMМЖКИ, одна строка в области начиная с 0x192, другая с 0x80.
За тем выводится надпись, с помощью подпрограммы вывода Data_MJKI. То есть подается нужная последовательность импльсов на входы МЖКИ для передачи данных( не команд), и происходит ввод в МЖКИ данных изname[].
Далее вызывается подпрограмма подсчета общего числа импульсов, она включает в себя чтения счетчика С0, формирование числа импульсов.
Подпрограмма вывода на МЖКИ, выделяет 10000, 1000, 100,10,1 части числа и выводит его с помощью рассмотренной выше подпрограммы Data_MJKI.
Ввод команд осуществляется с помощью подпрограммы Comand_MJKI.
Расчет количества импульсов в минуту с помощью таймера Т1. Таймер отсчитывает минуту и после чего в переменную minзаносится значения импульсов хранящиеся в счетчике, деленное на количество всех прошедших минут.
Таким образом работает программа счетчика импульсов.
Заключение
В результате выполнения курсовой работы было разработано микропроцессорное устройство счета импульсов на баз микроконтроллера MCS-51. Спроектированная система полностью удовлетворяет требованиям, изложенным в техническом задании. Система спроектирована на стандартных элементах и типовых структурах и серийных блоках, выпускаемых промышленностью.
Список использованной литературы
Москатов Е. А. Справочник по полупроводниковым приборам. — М.: Журнал "Радио", 2005.- 208 с.: ил.
Справочная книга радиолюбителя-конструктора. Под редакцией Н.И. Честякова. – М.: «Радио и связь»,1990. - 617с.: ил.
«Техническое описание стенда учебного СУ-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);}
}
}