- •Содержание
- •Введение
- •1 Разработка функциональной схемы системы
- •Описание принципа работы объекта
- •1.2 Функциональная схема микропроцессорной системы
- •2 Разработка аппаратной части системы
- •2.1 Краткое описание микропроцессорного комплекта
- •2.2 Организация памяти микропроцессорной системы Распределение памяти контроллера приведено на рисунке 5.
- •2.3 Расчет и выбор элементов сопряжения
- •2.3.1 Выбор терморезистора и элементов схемы сопряжения его с ацп.
- •2.3.2 Выбор ацп
- •2.3.3 Выбор индикатора и элементов сопряжения с ним
- •2.3.4 Расчет и выбор кнопок
- •2.3.5 Выбор конденсаторов
- •K73-9-10b-0,1 мкФ±10% ожо.461.087 ту
- •2.4 Описание схемы электрической принципиальной
- •3 Разработка программного обеспечения системы
- •3.1 Краткое описание системы команд микроконтроллера
- •Группа команд арифметических операций:
- •3.2 Описание общего алгоритма работы системы
- •3.3 Разработка текста программы
- •Заключение
- •Список использованной литературы
Заключение
В результате выполнения курсовой работы было разработано микропроцессорное устройство измерения мгновенного значения температуры с датчика температуры типа терморезистор pt100-2. Устройство может также измерять среднесуточное значение температуры, а если значения превысит номинальное или будит слишком мало, то на экран ССИ выводится предупреждение в виде (erro).
Данное устройство было собрано и проверено в программе позволяющей моделировать микропроцессорные системы Proteus(ISIS7).
Данное устройство и .hexфайл к нему можете скачать с моей страницеvk.com.
Список использованной литературы
www.atmel.com/literature
www.kazus.ru›datasheet-download/517468
www.kazus.ru/datasheet-download/90021d
www.intel.com/design/mcs51/docs_mcs51.htm
Москатов Е. А. Справочник по полупроводниковым приборам. — М.: Журнал "Радио", 2005.- 208 с.: ил.
Справочная книга радиолюбителя-конструктора. Под редакцией Н.И. Честякова. – М.: «Радио и связь»,1990. - 617с.: ил.
«Техническое описание стенда учебного СУ-51», ООО «ОпТех», 2003г.
Приложение А
sfr P0=0x80;
sfr P1=0x90;
sfr P2=0xA0;
sfr P3=0xB0;
sfr IE=0xA8;
sfr TMOD=0x89;
sfr TCON=0x88;
sfr TH0=0x8C;
sfr TL0=0x8A;
sfr IP=0xB8;
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 char data q;
unsigned char data w;
unsigned short data res;
unsigned char data res1;
unsigned char data res2;
unsigned char data res3,middle;
unsigned int swittch;
unsigned char data inbuf[3];
unsigned char data charteibl[12]= {192,249,164,176,153,146,130,248,128,144,255,191};
unsigned char catodnum,znak,znak2;
unsigned short code BufferACP[52]={0x8CB,0x8C1,0x8B7,0x8AD,0x8A4,0x89A,0x891,0x887,0x87E,0x875,0x86B,
0x862,0x859,0x850,0x848,0x83F,0x836,0x82E,0x825,0x81D,0x808,0x80C,0x804,0x7FB,0x7F3,0x7EB,0x7E3,0x7DB,
0x7D4,0x7CC,0x7C4,0x7BC,0x7B5,0x7AD,0x7A6,0x79F,0x797,0x790,0x789,0x781,0x77A,0x773,0x76C,0x765,0x75F,0x758,0x751,0x74A,0x744,0x73D,0x736};
unsigned char code BufferTemper[52]={50,48,46,44,42,40,38,36,34,32,30,28,26,24,22,20,18,16,14,12,10,
8,6,4,2,0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50};
unsigned int char nado;
int i;
void delay10mkc (void)
{
unsigned char x;
x=10;
while(--x!=0);
}
void delay1mkc (void)
{
unsigned char x;
x=1;
while(--x!=0);
}
void vivod3(void)
{
P1=206;
P31=1;
delay10mkc();
P31=0;
P1=206;
P36=1;
delay10mkc();
P36=0;
P1=192;
P37=1;
delay10mkc();
P37=0;
P1=132;
P30=1;
delay10mkc();
P30=0;
}
void acp (void)
{
P20=0;
P21=0;
P22=1;
P20=1;
P21=1;
P22=0;
delay10mkc();
P20=0;
P22=1;
delay1mkc();
q=P0;
w=P2;
P20=1;
P22=0;
res=w;
res=res&240;
res=res<<4;
res=res+q;
}
void temperatura(void)
{
unsigned char count1;
count1=0;
for( i=0; i<=50;i++)
{
count1++;
if((res<=BufferACP[i])&&(res>BufferACP[i+1]))
{
nado=BufferTemper[i];
catodnum=count1;
}
if((res>=0x8CB)||(res<0x736))
{
vivod3();
}
}
}
void ssi(unsigned char xxx)
{
unsigned char digit;
unsigned char d;
digit=xxx/100;
d=digit;
if(d==0){inbuf[1]=255;}
else{inbuf[1]=charteibl[digit];}
digit=(xxx-d*100)/10;
if((d==0)&&(digit==0)){inbuf[2]=255;}
else {inbuf[2]=charteibl[digit];}
digit=xxx-d*100-digit*10;
inbuf[3]=charteibl[digit];
inbuf[0]=191;
}
void vivod() interrupt 3 using 3
{unsigned short c1;
unsigned short c2;
TH0=252;
TL0=23;
c1=0;
++c1;
if(c1==60000)
{c1=0;
++c2;
if (c2==720)
{
c2=0;
res3=res2+0;
res2=nado+0;
znak2=znak+0;
znak=catodnum+0;
}
}
}
void vivod1(void)
{
P1=inbuf[1];
P31=1;
delay10mkc();
P31=0;
P1=inbuf[2];
P36=1;
delay10mkc();
P36=0;
P1=inbuf[3];
P37=1;
delay10mkc();
P37=0;
}
void vivod2(void)
{
P1=inbuf[1];
P31=1;
delay10mkc();
P31=0;
P1=inbuf[2];
P36=1;
delay10mkc();
P36=0;
P1=inbuf[3];
P37=1;
delay10mkc();
P37=0;
P1=inbuf[0];
P30=1;
delay10mkc();
P30=0;
}
void srednesutochnoe(void)
{
if((znak>=25)&&(znak2>=25))
{
middle=(res3+res2)/2;
ssi(middle);
vivod1();
}
if((znak<25)&&(znak2>=25))
{
middle=(res3-res2)/2;
if(res3>=res2)
{
ssi(middle);
vivod1();
}
else
{
ssi(middle);
vivod2();
}
}
if((znak>=25)&&(znak2<25))
{
middle=(-res3+res2)/2;
if(res3>res2)
{
ssi(middle);
vivod2();
}
else
{
ssi(middle);
vivod1();
}
}
if((znak<25)&&(znak2<25))
{
middle=(res3+res2)/2;
ssi(middle);
vivod2();
}
}
void int1() interrupt 0
{
swittch=5;
P32=1;
}
void int3() interrupt 2 using 3
{
swittch=0;
P33=1;
}
void main (void)
{
unsigned char one;
one=1;
P31=0;
P30=0;
P36=0;
P37=0;
TH0=0;
TL0=0;
IE=255;
TMOD=1;
TCON=16;
IP=5;
while(1)
{
acp();
temperatura();
if(swittch==0)
{
if(catodnum>=25)
{ ssi(nado);
vivod1();
}
else
{
ssi(nado);
vivod2();
}
}
else
{
srednesutochnoe();
ssi(middle);
vivod1();
}
}
}