MCB02

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 13

БЯЦХАН МИКРОКОНТРОЛЛЕР

2.1. МИКРОКОНТРОЛЛЕРИЙН ЭХ ХАВТАН

Атмел фирмийн АТ89С2051 микроконтроллерийн ажиллагаатай танилцаж, түүн дээр хийх


программчлалын дасгалуудыг шалгах үндсэн техник хангамж бол энэхүү бяцхан микроконтроллер
юм. Энэ нь персональ компьютертэй холбогдох RS232 интерфэйстэй (CN1) бөгөөд дасгалын
ажлуудтай холбогдох порттой (CN2). Бид контроллерийн программ хангамжийг компьютер дээр
боловсруулаад, машин кодыг АТ89С2051 микроконтроллерийн программын санах ойд шарж
суурилуулна. Ингээд бэлэн болсон микроконтроллероо уг хавтан дээрээ суурилуулаад туршилтын
хавтантай холбож тэжээл өгснөөр ажиллагааг нь туршиж үзэх боломжтой болно.
Микроконтроллерийн эх хавтантай танилцая. АТ89С2051 микроконтроллер нь:
• MCS-51 бүлд багтдаг ба Intel 8051 микроконтроллерийн үндсэн шинжүүдийг агуулсан.
• 2Кбайт флэш программын санах ой нь 1000 орчим удаа арилгаж бичих боломжтой.
• 2.7V-6.0V тэжээлийн хүчдэлд ажилладаг.
• 24MHz хүртэл CLOCK давтамжаар ажиллах боломжтой.
• 2 түвшний программын санах ойн хамгаалалт цоожтой.
• 128байт дотоод шуурхай санах ойтой.
• 15 программчлагддаг оролт гаралтын порттой.
• 2 ширхэг 16 битийн таймер/тоолууртай.
• 6 тасалдалтын (interrupt) түвшинтэй.
• Программчлагддаг цуваа мэдээллийн порттой.
• Портууд нь гэрэлт диод шууд удирдах чадвартай.
• Аналог хүчдлийг харьцуулах компаратор агуулсан.
• Тэжээлийн хүчдэл хэмнэх 2 горимтой зэрэг онцлогуудтай юм.
C1 PB1 RESET
10uF
+

+5V +5V
+5V
U2 C3 1u U1 CN2
C2 1u 1 2 R1 8.2K 1 19 P1.7
+

C1+ C3+ +5V RST P1.7 1 2


C6 33n 18 P1.6 P3.0/RX
+

3 4 P1.6 17 3 4
P1.5 P3.1/TX
C1- C5 X2 P1.5 16 5 6
1u P1.4 P3.2/INT0
C4 1u 4 6 X1 P1.4 15 7 8
P1.3 P3.3/INT1
C2+ C4- C7 33n P1.3 14 9 10
P1.2 P3.4/T0
+

5 5 P1.2 13 11 12
P1.1 P3.5/T1
C2- X1 -P1.1 12 13 14
11.059Mhz P1.0 CLK X2
CN1 13 12 2 +P1.0 11 15 16
P3.7 RX2
1 14 RXIN1 DOUT1 11 3 P3.0/RXD P3.7 17 18
TX2
2 8 TXOUT1 DIN1 9 6 P3.1/TXD 19 20
RX2 P3.0/RX
3 7 RXIN2 DOUT2 10 7 P3.2/INT0
TX2 HEADER 10X2
4 TXOUT2 DIN2 8 P3.3/INT1
5 JP1 9 P3.4/T0
ICL232C P3.5/T1
RS232
AT89C2051
2
4
6
1
3
5

J1 U3 P3.1/TX
DC IN D1 LM7805CT
1 3
IN OUT +5V
GND

CU1 CU2
1N4002 + + D2
R2
C8 C9 .1uF .1uF
2

470
100uF 47uF LED

Зураг 2.1. АТ89С2051 Микроконтроллерийн эх хавтан


15
БЯЦХАН М
МИКРОКОН
НТРОЛЛЕР

Эхх хавтангий
йн CN1 за
алгуураар микроконтро
м оллерийг Персонал
П ко
омпьютертэ
эй холбон
мэдээлэл
л дамжуула
ах дасгалууудыг хийнэ. Харин CN2
C залгуур
раар турши
илтын хавттангуудтай
лгуураар микроконтролл
холбогдохх ба энэ зал лерийн оро
олт гаралтын
н 15 порт бууюу Р1, Р3 бүхлээрээ,
б
Х1 осцил
лляторын га
аралт (U1, 5-р хөл), RX2,
R TX2 нө
өөц цуваа мэдээллийн
м н портууд туршилтын
т
хавтан рууу гарна. Мө
өн туршилттын хавтан дээрх
д элементүүдийг тэжээх
т +5V тэжээлийн хүчдэлийг
гаргана.
Микроконтрол
ллерийн 1-р
р хөл нь RE
ESET буюу микроконтро
м оллерийн аж
жиллагааг анхнаас
а нь
эхлүүлэх оролт юм. Тэжээл өгө
өгдмөгц микроконтроллерт RESET дохиог авттоматаар өггөх C1, R1
хэлхээг, дуртай
д үедэ
ээ дарж RES
SET хийж бо
олох товчлу
уурын хамт суурилуулсан байна. Энэ
Э хэлхээ
зөв угсра
агдахгүй бол
л контролле
ер хэвийн ажиллаж
а эх
хэлэх болом
мжгүй болно
о. RESET хэлхээнээс
х
гадна ква
арц осцилл
ляторыг микроконтролл
лерийн 4 ба
б 5-р хөл
лүүдэд холб
бож, тэжээл
л өгснөөр
микроконтроллер аж
жиллахад бэлэн
б болн
но. Энд 11
1.0592MHz давтамжтай
й кварц ос
сциллятор
хэрэглэсэ
эн байна. Ийм давтамжтай үед цуваа мэ
эдээллийн портыг
п ком
мпьютерт зо
охицуулан
программ
мчлахад хял
лбар байдагг. Өөрөөр хэ
элбэл цуваа
а мэдээлли
ийн портын мэдээлэл дамжуулах
д
хурдыг (b
baud rate) тодорхойлох
т х ажиллагаа
аг ийм давттамжтай оссциллятор ххялбар болггодог. Энэ
талаар цуваа
ц портто
ой ажиллахх дасгалууд
д дээр тодо
орхой үзэх болно. Миккроконтролл
лерийн эх
хавтангий
йн хэвлэмэл
л хавтангийн
н бүтцийг зураг 2.2-т хар
руулав.

А Б

Зура
аг 2.2. Микр
роконтролле
ерийн эх хав
втан
А. Доод тал,
т Б. Дээд тал, В. Эле
ементүүдий
йн байрлал

16
БЯЦХАН МИКРОКОНТРОЛЛЕР

Микроконтроллерийн эх хавтанд AT89C2051 микроконтроллерийг олон дахин авч, буцаан


байрлуулах шаардлага гардаг учир ZIP20 суурийг ашиглахаас гадна U2 цуваа мэдээллийн түвшин
хувиргагч микросхемийг ердийн суурин дээр суурилуулна. U3 интеграл тогтворжуулагч болон
бусад элементүүдийг шууд эх хавтанд гагнаж суурилуулна. Өмнөх программаторын адил нямбай
цэвэр гагнаж микроконтроллерийн эх хавтанг бэлтгэх хэрэгтэй. Интеграл микросхемийн болон
ZIP20 сууриудыг гагнахдаа нэгдүгээр хөлний тэмдэглэгээтэй талыг заавал зөв харуулж
суурилуулна. Оюутнууд үүнийг буруу харуулж байрлуулах алдааг байнга гаргадаг. Хэдийгээр
суурийг буруу харуулж гагнасан ч гэсэн микроконтроллероо зөв харуулаад тавьчихвал болно гэж
бодвол буруу юм. Хэн нэгэн өөр хүн уг хавтанг хэрэглэх тохиолдолд АТ89С2051 микроконт-
роллерийг уг буруу харсан суурины дагуу буруу харуулж тавьбал микроконтроллерийг эвдэж
болно. Диодууд болон электролит (туйлт) конденсаторуудыг программаторыг угсарсаны адил
заавал зөв туйлаар нь холбох шаардлагатай. Кварц резонатор буюу осцилляторын давтамжийн
бичигтэй талыг нь дээш харж байхаар байрлуулбал тохиромжтой байдаг. Эх хавтангийн тэжээлийн
хэсэг нь +5V гаргах үүрэгтэй 7805 интеграл тогтворжуулагчийг ашигласан байна. Энэхүү
микроконтроллерийн эх хавтанг тэжээхэд 9-12V хүчдэл гаргадаг (программаторынхаас бага
хүчдэлтэй байгааг анхаар!), залгуурынхаа голд эерэг потенциалтай адапторыг ашиглах нь
тохиромжтой. Үүнээс их хүчдэлтэй адаптор хэрэглэх үед хөргөгчгүй 7805 тогтворжуулагч хэт их
халж улмаар эвдэрч болно. Мөн туршилтын хавтан их гүйдэл хэрэглэхээр олон элементтэй бол эх
хавтан дээрх тогтворжуулагчийг хөргөгч металлд бэхлэх нь зүйтэй.

2.1.1. Мэдээллийн цуваа портын түвшин хувиргагч

Компьютерийн Serial Port буюу цуваа мэдээллийн порттой холбогдохдоо TTL түвшний
дохиог RS232 стандартын дохионы түвшинтэй зохицуулах үүрэгтэй ICL232C микросхемийг
ашиглана. Учир нь компьютерийн сериал порт 12 вольтийн далайцтай дохио хүлээн авдаг бол
АТ89С2051 микроконтроллерийн сериал порт 5 вольтийн түвшинтэй дохио гаргадаг. Энэхүү U2
микросхем нь CN1 залгуураар компьютертэй холбогдох бөгөөд хувиргасан TTL түвшний дохиог JP1
жамперийн тусламжтай АТ89С2051 микроконтроллерийн P3.0/RXD, P3.1/TXD портуудад холбоно.
Микроконтроллерийг компьютертэй холбон ажиллуулах шаардлагагүй үед Р3.0, Р3.1 портуудыг
туршилтын хавтангууд руу гаргах сонголтыг энэ жампераар хийнэ. Зураг 2.3-т компьютерт холбох
кабель утасны холболтын схемийг харуулав.
P1
АТ89С2051 микроконтроллерийн хүлээж авах (RxD), 1 CN1
6
нэвтрүүлэх (TxD) дохионууд нь 0-5V логик түвшинтэй байна. 2 1
7 2
3
Харин персаналь компьютерийн СОМ портын дохионы түвшин 3
4
8
4 5
нь RS232 стандарт буюу логик “0” нь -12V, логик “1” нь +12V 9
RS232
5
түвшинтэй байдаг. Тэгэхээр микроконтроллерийг
PC COM PORT
компьютертэй холбон мэдээлэл дамжуулахын тулд түвшинг
Зураг 2.3. RS232 кабель
зохицуулан хувиргах шаардлагатай юм. Бидний хэрэглэсэн
ICL232C (MAX232 байж болно) микросхем нь энэхүү түвшингүүдийг хооронд нь зохицуулах
үүрэгтэй юм. Нэгэнт компьютерт очих TxD дохио нь ±12V далайцтай учир гаралтын буффер өсгөгч
нь ±12V тэжээлийн хүчдэл шаардана. Манай бяцхан микроконтроллерийн эх хавтан дээр ганцхан

17
БЯЦХАН МИКРОКОНТРОЛЛЕР

+5V тэжээл байгаа учир ICL232C микросхем нь С2-С5 электролит конденсаторуудын тусламжтай
±10V хүчдэлийг +5V хүчдэлээс хувирган гаргадаг. Энэ хүчдэл нь RS232 түвшинд ойрхон учир
саадгүй ажиллах болно. Харин холбох кабель утас нь хэт урт байж болохгүй.
ICL232C микросхем нь дотроо 4 буффертэй бөгөөд АТ89С2051 микроконтроллер зөвхөн 2
буффер ашиглана. Үлдсэн 2 буфферийг туршилтын хавтан дээр ашиглах боломжтой болгож CN2
залгуур луу гаргасан болно.

2.2. АТ89С2051 МИКРОКОНТРОЛЛЕР

2.2.1. АТ89С2051 Микроконтроллерийн бүтэц

RAM ADDR. RAM FLASH


REGISTER

B ACC STACK PROGRAM


REGISTER POINTER ADDRESS
REGISTER

TMP2 TMP1
VCC BUFFER

ALU
PC
INCREMENTER

PSW INTERRUPT, SERIAL PROGRAM


PORT, TIMER COUNTER

TIMING INSTRUCTION
RST AND REGISTER
CONTROL DPTR

COMPARATOR PORT 1 PORT 3


LATCH LATCH
+

OSC
PORT 1 DRIVERS PORT 3 DRIVERS

GND
X1 X2
P1.0-P1.7 P3.0-P3.5, P3.7

Зураг 2.4. АТ89С2051 Микроконтроллерийн дотоод бүтцийн блок диаграмм

18
БЯЦХАН МИКРОКОНТРОЛЛЕР

Бидний контроллертой харьцах үндсэн хэсэг бол түүний оролт гаралтын портууд юм. Энд
Р1-ийн 8 порт, Р3-ийн 7 порт гадагш гарсан боловч РЗ.6-д аналог компараторын гаралтыг холбосон
болохыг зургаас харж болно. Хэрэв бид энэ портыг ашиглая гэвэл Р1.0 болон Р1.1 оролтуудад
харьцуулах аналог хүчдэлээ холбож өгнө. Ингээд Р3.6-аар харьцуулсан байдлыг мэдэж болно.
Хэрэв Р3.6 логик “1” байвал VР1.0 > VР1.1 , логик “0” бол VР1.0 < VР1.1 байна. Р3.6-аар гадагш
мэдээлэл гаргах боломжгүй юм.

VCC
Бусад портуудын драйверын бүтцийг зураг
2.5-д харуулав. Портоор мэдээлэл гаргах
10K тохиолдолд гаралтын транзисторыг нээж
хаах зарчимаар логик “1” болон логик “0”
PORT IN PX.X
мэдээллийг гаргана. Харин мэдээлэл
PORT OUT оруулах бол гаралтын транзисторыг хааж
логик “1” төлөвт оруулахгүй бол оролтын
мэдээлэл үргэлж логик “0” байх болно.
Зураг 2.5. Нэг портын драйверын бүтэц Гаралтын транзистор нь логик “0” үед нэг
гэрэлт диодыг асаах буюу 20mA гүйдэл гүйлгэх чадвартай юм. Харин логик “1” үед коллекторын
эсэргүүцэгч нь 10K учир гэрэлт диод удирдаж чадахгүй. Энэ эсэргүүцэгчийг “Pull Up Resistor” гэнэ.
Харин Р1.0 ба Р1.1 портууд нь ийм “Pull Up” 10К-ийн эсэргүүцэгч байхгүй. Учир нь ийм
эсэргүүцэгч байвал оролтонд ирж байгаа аналог хүчдэлд нөлөөлж утгыг нь өөрчлөх учир
тавьдаггүй байна. Хэрэв энэ 2 портыг бусад портын адил мэдээлэл гаргахаар хэрэглэе гэвэл
микроконтроллерийн гадна талд нь 2.4К-10К орчим “Pull Up” эсэргүүцэгчүүд холбож өгөх
шаардлагатай.
Р3 нь Р1-ийн адилд ердийн оролт гаралтын порт байж болох ба зарим нэг удирдлагын
дохионуудын үүргийг давхар гүйцэтгэдэг. Тухайлбал:
RXD, TXD нь мэдээллийг цуваа
P3.0 RXD (цуваа мэдээллийн оролтын порт)
кодоор оруулах, гаргах портууд юм.
P3.1 TXD (цуваа мэдээллийн гаралтын порт)
Дамжуулах дохио нь TTL түвшинтэй
P3.2 INT0 (гаднын тасалдалт 0-ийн оролт)
байдаг.
P3.3 INT1 (гаднын тасалдалт 1-ийн оролт)
INT0, INT1 оролтууд нь гаднын
P3.4 T0 (таймер 0-ийн оролт) төхөөрөм-жүүдээс микроконтроллерт
P3.5 T1 (таймер 1-ийн оролт) тасалдалтын дохио буюу Interrupt өгөх
үүрэгтэй. Энэ дохионы идэвхтэй түвшин нь логик “0” учир дээгүүр нь зурсан байна. Түүнчлэн
тасалдалтыг логик “0” түвшинээр авч болохоос гадна импульсийн буух фронтоор авч болохоор
программчилж болдог.
АТ89С2051 микроконтроллер нь дотроо 2 ширхэг 16 битийн тоолуур/таймертай. Тоолуурын горимд
гаднын импулсийг тоолох бөгөөд 16 бит өргөнтэй учир 0-65535 импульс тоолно. Гаднын
импульсийг тоолох тохиолдолд Т0, Т1 оролтуудыг ашигладаг. Харин таймер горимд бол тодорхой
хугацааг тоолох зорилгоор ашиглагдах бөгөөд регистерт хийсэн тооноос хорогдуулж тоолох
зарчимаар ажиллана. Энэ горимд микроконтроллерийн осцилляторын CLOCK импульсийн
давтамжийг 12 дахин бууруулаад тоолуурын оролтонд шилжүүлж, Т0, Т1 оролтуудыг чөлөөтэй
порт болгодог.

19
БЯЦХАН МИКРОКОНТРОЛЛЕР

2.2.2. АТ89С2051 микроконтроллерийн регистрүүд

Микроконтроллер нь программын дагуу ажиллагаа явуулахын тулд төрөл бүрийн


тохиргооны мэдээллүүдээс гадна завсрын болон гаралтын үр дүнгүүдийг хадгалж байдаг санах ой
буюу регистрүүдтэй байдаг. Үндсэндээ регистр гэдэг бол нэг байт мэдээлэл хадгалдаг санах ой гэж
ойлгож болно. Гэхдээ энэ регистрүүд нь микроконтроллерийн шуурхай санах ойн нэг хэсэг нь
байдаг. АТ89С2051 микроконтроллер нь 0-FFH хүртэл 256 байт шуурхай санах ойтой боловч 0-7FH
хүртэл ердийн шуурхай санах ой, 80H-FFH хүртэл тусгай зориулалтын регистрүүд (Special
Function Registers – SFR) гэж ангилагддаг. Эхлээд тусгай зориулалтын регистрүүдтэй танилцая.

F8 FF
F0 B 9 F7
E8 EF
E0 ACC 9 E7
D8 DF
D0 PSW 9 D7
C8 CF
C0 C7
B8 IP 9 BF
B0 P3 9 B7
A8 IE 9 AF
A0 A7
98 SCON 9 SBUF 9F
90 P1 9 97
88 TCON 9 TMOD TL0 TL1 TH0 TH1 8F
80 SP DPL DPH PCON 87

Зураг 2.6. АТ89С2051 микроконтроллерийн тусгай зориулалтын регистрүүд

Дээрх хүснэгтээс харахад ихэнх нүднүүд хоосон байна. Харин нэртэй байгаа нүднүүд бол
тусгай зориулалтын регистрүүд бөгөөд хоосон нүднүүдэд ямар ч мэдээлэл хадгалах боломжгүй
юм. Тусгай зориулалтын регистрүүд бүгд өөр өөрийн үүрэг зориулалттай байдаг. “9” тэмдэгтэй
регистрүүдэд бүтэн байтаар мэдээлэл бичиж болохоос гадна аль хэрэгтэй битээ дангаар нь хандан
өөрчилж болдог. Эдгээр регистрүүдийг битээр хандах боломжтой (bit addressable) регистрүүд гэдэг.
Жишээлбэл Р3.7 буюу порт 3-ын 7-р битийг логик “1” болгое гэвэл ассемблерийн SETB P3.7 гэсэн
инструкцийг хэрэглэнэ. Энэ нь порт 3-ийн ганцхан битэд хандаж түүний утгыг логик “1” болгож
байгаа юм. Үүнтэй адилаар бит хандалттай регистрүүдийн бит бүртэй нь тус тусад нь харьцаж
болно. Ийм тэмдэглэгээгүй регистрүүдийн хувьд зөвхөн байтаар хандаж болно. Жишээлбэл TMOD
регистрийн 7-р битийг логик “1” болгож бусдыг нь “0” байлгая гэвэл MOV TMOD,#80H гэж хандана.
АСС Accumulator: Энэ регистрийг Аккумулятор регистр гэдэг. 1 байт мэдээлэл хадгалах бөгөөд
хамгийн гол регистр юм. Ихэнх тохиолдолд A үсгээр товчлон тэмдэглэдэг боловч ассемблерийн
зарим нэг инструкцэд заавал АСС гэж бүтнээр бичих шаардлагатай байдаг. Энэ регистрийг
ашиглан бүх арифметик болон логик үйлдлүүдийг хийж гүйцэтгэнэ. RESET-ийн дараа доторхи утга
нь 00Н болно.
20
БЯЦХАН МИКРОКОНТРОЛЛЕР

В register: Энэ регистрийг туслах аккумулятор гэж болно. Ихэнх үед онцлох үүрэггүй регистр мэт
боловч хуваах болон үржих үйлдэлд хуваагч болон үржвэрийн утгыг хадгалахад хэрэглэнэ. RESET-
ийн дараа доторхи утга нь 00Н болно.
PSW Program Status Word: Энэ регистр нь аливаа үйлдлийн дараа аккумуляторийн төлөвийг
илэрхийлэхээс гадна үйлдэлд оролцох мэдээллүүдийг хадгалж байх үүрэгтэй ерөнхий
зориулалтын регистрүүдийн (R0-R7) банкыг сонгох үүрэгтэй. RESET-ийн дараа доторхи утга нь
00Н болно.
SP Stack Pointer: PUSH гэсэн ганцхан үйлдлээр санах ойд мэдээлэл хадгалах үед уг мэдээллийг
хаана хадгалах хаягийг зааж өгдөг регистр. Мөн CALL буюу дэд программ дуудаж ажиллуулах
инструкцээр дуудагдсан дэд программ ажиллаж дуусаад үндсэн программд буцаж ирэх хаягийг
хадгалах санах ойн хаягийг зааж өгнө. RESET-ийн дараа SP-ийн анхны утга 07Н байх ба энэ нь
Stack-ийн анхны мэдээлэл 08Н хаягаас эхлэн хадгалагдана гэсэн үг. Stack нь хамгийн сүүлд хийсэн
мэдээлэл түрүүлж гарч ирдэг бууны сумны магазин шиг санах ой юм.
DPTR Data Pointer: Энэ регистр нь DPH (ахлах байт), DPL (бага байт) гэсэн 2 байтаас тогтдог
бөгөөд 16 битийн хаягийн мэдээлэл хадгалах үүрэгтэй байдаг. Гэвч АТ89С2051-ийн программын
санах ой 000Н-7FFH хүртэл буюу 2Кбайт хэмжээтэй учир хаягийн урт нь 11 бит байдаг. Нэгэнт 8
битээс урт болохоор 2 байтад хаягийн мэдээлэл хадгалагдана. RESET-ийн дараа доторхи утга нь
0000Н болно.
Р1, Р3 Ports: Р1 ба Р3 портуудаар гарах мэдээллийг хадгалах регистр. Энэ регистрүүдэд мэдээлэл
хадгалахад тэр нь тухайн харгалзах портоор гадагш шууд гарна. Харин портоор мэдээлэл
оруулахад энэ регистрийн утга өөрчлөгдөхгүй. Учир нь мэдээлэл оруулахын тулд энэ регистрийн
тухайн битэд логик “1” бичигдсэн байх ёстой. Гаднаас логик “0” орж ирсэн ч энэ регистр утгаа
өөрчлөхгүй. RESET-ийн дараа доторхи утга нь FFН болно. Өөрөөр хэлбэл бүх бит нь логик “1”
болно гэсэн үг.
SBUF Serial Data Buffer: Цуваа мэдээллийн портын регистр. Энэ регистрт мэдээлэл хийвэл уг
мэдээлэл нь цуваа портоор гарна. Хэрэв энэ регистрээс мэдээлэл уншвал энэ нь цуваа портоор
гаднаас орж ирсэн мэдээлэл байна. RESET-ийн дараа доторхи утга нь тодорхойгүй буюу ямар ч
утгатай байж болно.
TH0, TL0 Timer 0 registers: Энэ хос хоёр регистр нь 16 битийн 0 дугаар таймер/тоолуурын утгыг
хадгална. Программын замаар доторхи утгыг нь өөрчлөхөд заавал ахлах байт, бага байт тус тусад
нь хандаж өөрчлөх боловч тоолох үйлдлийнхээ үед хоёулаа нэг тоолуур мэт өөрчлөгдөнө. 16 бит
өргөнтэй учир 0-ээс эхлэн 65535 хүртэл тоолно. Хамгийн их буюу 65535 утгаа авмагц процессорт
тасалдалт (Interrupt) өгөх чадвартай байдаг. RESET-ийн дараа доторхи утга нь 0000Н болно.
TH1, TL1 Timer 1 registers: Энэ хос хоёр регистр нь 16 битийн 1 дүгээр таймер/тоолуурын утгыг
хадгална. Т0-ийн адил ажиллагаатай боловч мэдээллийн цуваа портын нэг секундэд дамжуулах
битийн тоо буюу хурдыг (baud rate) тодорхойлоход ашиглагддаг онцлогтой. RESET-ийн дараа
доторхи утга нь 0000Н болно.
IP Interrupt Priority: Таван түвшний техникийн тасалдалт байдаг учир зэрэг ирсэн тасалдалтуудын
алийг нь түрүүлж хүлээн авахыг зааж өгдөг регистр. RESET-ийн дараа доторхи утга нь ХХХ00000В
болно. Энэ тоог хоёртын тооллын системд харуулав. Эхний 3 бит Х нь ашиглагддаггүй битүүд учир
ямар утгатай байх нь тодорхойгүй байна.

21
БЯЦХАН МИКРОКОНТРОЛЛЕР

IE Interrupt Enable: Таван түвшний тасалдалтуудаас алийг нь зөвшөөрөх, алийг нь хориглохыг зааж
өгдөг регистр. Зарим нэг тасалдалтыг хориглох, зөвшөөрөхөөс гадна бүх тасалдалтыг зэрэг
хориглох чадвартай. RESET-ийн дараа доторхи утга нь 0ХХ00000В болно.
TMOD Timer Mode: Таймер/тоолуурын горим сонгох регистр. Таймер/тоолуурыг таймер болгох
эсвэл тоолуур болгох болон 8 битээр ажиллах эсвэл 16 битээр ажиллах гэх мэт горимуудыг
тогтоодог. Таймер/тоолуур нь 8 бит горимдоо анхны утгаа автоматаар 0-ээс өөр утга авахаар
тохируулагдаж болно. Өөрөөр хэлбэл хамгийн их утга 255 болоод дараагийн импульсээр 0
болохгүй өөр утга авна гэсэн үг. Энэ горимд TL нь үндсэн тоолуур регистр болох ба ТН нь анхны
утгыг хадгална. RESET-ийн дараа доторхи утга нь 00Н болно.
TCON Timer Control: Таймер/тоолуурын удирдлага регистр. Таймер/тоолуурын ажиллагааг түр
зогсоох, дахин эхлүүлэх болон утга нь хамгийн дээд утгандаа хүрсэн эсэхийг илтгэдэг регистр юм.
RESET-ийн дараа доторхи утга нь 00Н болно.
SCON Serial Control: Цуваа мэдээллийн портын горим сонгох регистр. Цуваа мэдээллийн портын
ажиллагааг тохируулахаас гадна портоор бүтэн нэг байт мэдээлэл ирсэн болон гарч дуусан
төлөвийг илтгэнэ. RESET-ийн дараа доторхи утга нь 00Н болно.
PCON Power Control: Энэхүү регистр нь АТ89С2051 микроконтроллерийг тэжээлийн хүчдэлээ
хэмнэх Power Down, Power Idle горимуудад оруулахад хэрэглэгдэнэ. RESET-ийн дараа доторхи
утга нь 0ХХХ0000В болно.
Ийнхүү бид SFR буюу тусгай зориулалтын регистрүүдийн үүргүүдтэй танилцлаа. Харин
регистр бүрийн дотоод бүтэц болон программчлалын аргуудтай дараа дэлгэрэнгүй танилцах
болно.

2.2.3. Шуурхай санах ой

АТ89С2051 микроконтроллер нь 128 байт шуурхай санах ойтой гэж өмнө нь дурдаж байсан
билээ. 00Н-7FH хүртэлх хаяг нь шуурхай санах ойд харъяалагдана.
Энэхүү санах ойг үндсэн 3 хэсэгт хувааж болно.
7F
А хэсэг бол ерөнхий зориулалтын регистрүүд болох
R0-R7 гэсэн 8 регистрийн хэсэг байна. Нийт 32 регистр
В
байгаа боловч программаас нэг дор наймтай нь
харьцах боломжтой. Банкийг программын замаар
3
сольж дараагийн 8 регистрт хандаж болно. Жишээ нь:
2 Bit addressable 2F Б
USING 3 гэсэн комманд өгвөл 3-р банк сонгогдоно.
1 Bank2 Bank3 1F
А RESET-ийн дараа банк 0 сонгогдох бөгөөд SP
0 Bank0 Bank1 0F
регистрийн утга 07Н болох учир банк 1 нь стейкэд
R0 R7
07 SP эхлэл хэрэглэгдэх болно. Хэрэв банк бүрийг хэрэглэнэ гэвэл

Зураг 2.7.Шуурхай санах ой SP-ийг зайлшгүй өөрчилж байт хандалттай чөлөөт В


муж руу шилжүүлэх хэрэгтэй. Б муж нь бит хандалттай
(bit addressable) учир 20Н байтын 0-р битийг 00Н гэвэл 2FH байтын 8-р бит хүртэл 7FH дээр нэмэх
1 ширхэг битүүд болно. Өөрөөр хэлбэл 80Н буюу 128 ширхэг бит юм. Энд 16 байт буюу 128 бит
мэдээлэл хадгалж болно. Харин В муж бол 30Н-7FH хүртэл нийт 80 байт мэдээлэл хадгалж болно.

22
БЯЦХАН МИКРОКОНТРОЛЛЕР

Шуурхай санах ой бол тэжээлийн хүчдэл залгаатай байхад доторхи утгаа хадгалж байдаг.
Харин тэжээлийн хүчдэл тасраад дахин ирэхэд өмнө хадгалагдаж байсан утгууд байхгүй болно.
Тэгвэл программын санах ой нь тогтмол санах ой учир тэжээл байхгүй болсон ч доторхи
программаа мартахгүй хадгалж байдаг.

2.2.4. Программын санах ой

АТ89С2051 микроконтроллер нь дотроо 2Кбайтын флеш технологийн программын санах


ойтой байдаг. Флеш технологи гэдэг нь цахилгаанаар мэдээллийг нь арилгаж дахин
программчилдаг тогтмол санах ой хийдэг технологи юм. Үүнийг EEPROM–Electrically Erasable
Programmable Read Only Memory гэдэг. Энэ санах ойг 1000 орчим удаа арилгаж, программчилж
болдог байна. Үүнээс олон удаа арилгаж программчилахад микроконтроллерт гэмтэл гарч болно.
Микроконтроллер нь PC–Programm Counter регистрийн тусламжтай инструкцүүдийг нэг бүрчлэн
татаж (Fetching) инструкц тайлах регистертээ оруулах замаар программын санах ойгоос
программыг уншиж гүйцэтгэдэг. Харин программын санах ойд программын гүйцэтгэх явцад
ашиглагдах утга нь өөрчлөгддөггүй тогтмол мэдээллүүдийг (тухайлбал таблиц мэдээлэл гэх мэт)
хадгалж болох бөгөөд тэдгээрийг уншихын тулд MOVC инструкцийг ашиглана. Энэ нь Move Code
Byte буюу программын санах ойн байтыг зөөх гэсэн утгатай инструкц юм.
Программын санах ойн хэмжээ нь 2К буюу 000Н-7FFH хаягийн хооронд байна. Хэрвээ 16
битийн хаягийн мэдээллийг бүрэн ашигласан микроконтроллер байвал 0000H-FFFFH буюу 64Кбайт
программын санах ойтой байна. MCS-51 бүлийн 8031, 8032, 8051, 8052 микроконтроллерууд гадна
талдаа ийм хэмжээний программын санах ойтой байж болно. Харин манай бяцхан 2051 гадна
талдаа программын санах ой холбох боломжгүй юм.
Программын санах ойн эхэн хэсэгт
тасалдалтын вектор хаягууд оршдог.
Тэжээл өгөгдсөний дараа RESET
0023H Serial Port Interrupt хийгдэхэд хамгийн эхний 0000H хаягнаас
программ гүйцэтгэгдэж эхлэнэ. Гаднын
001BH Timer 1 Interrupt
төхөөрөмжүүдээс External Interrupt
0013H External 1 Interrupt
оролтонд логик “1” түвшинээс логик “0”
000BH Timer 0 Interrupt түвшин рүү шилжсэн дохио ирэхэд

External 0 Interrupt ажиллаж байсан программд тасалдалт


0003H
үүсэн тухайн харгалзах хаяг руу
0000H RESET
программын үйлдэл шилждэг. Мөн
таймерын утга 0 болоход программд
Зураг 2.8. Программын санах ой
тасалдалт үүсгэж болох бөгөөд
микроконтроллерт 2 таймер байх учир 2 тасалдалтын хаяг байна. Бидний бичих программ эдгээр
тасалдалтын хаягуудыг алгасан ажиллахаар зохион байгуулагдсан байх учиртай. Өөрөөр хэлбэл
0000H хаяг дээр ajmp 0002BH комманд заавал байх ёстой гэсэн үг.

23
БЯЦХАН МИКРОКОНТРОЛЛЕР

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


тохиолдолд дуудагдан ажиллах дэд программуудыг бичиж өгөх бөгөөд эдгээр дэд программууд нь
8 байтаас урт байх тохиолдолд acall Label;-аар эхлээд reti-аар дууссан дахин өөр дэд
программ дуудах процедур бичиж ашиглана. Ингэхгүй бол нэг тасалдалтын программ дараагийн
түвшний тасалдалтын вектор хаягийг дарж, тухайн тасалдалт хэрэгжих тохиолдолд программ
буруу ажиллах үндэс болно.

2.3. МИКРОКОНТРОЛЛЕРИЙН ПРОГРАММ

2.3.1. АТ89С2051 Микроконтроллерийн программын хязгаарлагдмал байдал

Интел фирмийн MCS-51 бүлийн микроконтроллерууд хоорондоо бараг ижил программын


орчинтой боловч тухайн контроллерын бүтцийн өөрчлөлтүүдээс хамаарч бага зэрэг ялгагдах нь
бий. Тухайлбал АТ89С2051 микроконтроллер нь энэ бүлийн программын инструкцүүдээр
программчлагдах боловч дотоод программын санах ой 2килобайтаар хязгаарлагддаг, гадаад
программын санах ой холбох боломжгүй зэрэг шалтгаануудаас үүдэн дараахь үндсэн 2
хязгаарлагдмал байдал үүснэ.
Нэгдүгээрт: Үсрэлтийн инструкцүүд 2килобайтаас хол хаяг руу үсрэх боломжгүй. LCALL,
LJMP, ACALL, AJMP, SJMP, JMP @A+DPTR зэрэг программын гүйцэтгэлийг өөр хаяг руу үсэргэх
инструкцүүдийг хэрэглэхдээ программын санах ойн 07FFH хаягнаас хэтрүүлэхгүй байх
шаардлагатай. Хэтрүүлсэн тохиолдолд MCS-51 бүлийн ассемблер хөрвүүлэгч нь 64Кбайт санах
ойд ажиллах программыг хөрвүүлэх чадвартай учир алдаа өгөлгүй хөрвүүлнэ. Харин уг программ
2К санах ойтой микроконтроллерт ажиллахгүй гэдгийг үргэлж санаж байх хэрэгтэй. Мөн түүнчлэн
CJNE [...], DJNZ [...], JB, JNB, JC, JNC, JBC, JZ, JNZ гэсэн нөхцөлт үсрэлтийн инструкцүүд ч гэсэн
дээрх шаардлагыг хангаж байх ёстой.
Хоёрдугаарт: MOVX буюу Move External Byte гэсэн гадаад санах ойтой мэдээлэл солилцох
инструкцүүд манай бяцхан микроконтроллерт хэрэгжихгүй гэдгийг анхаар. 8031, 8051, 8052 гэх мэт
40 хөлтэй корпусанд байрладаг микроконтроллерууд 64Кбайт хэмжээтэй гадаад санах ойтой
харьцах боломжтой байдаг. Энэхүү гадаад санах ойгоос мэдээлэл унших болон түүн рүү мэдээлэл
бичих тохиолдолд MOVX [...] гэсэн инструкцийг ашигладаг байна.

2.3.2. Программын төлөвийн регистр – PSW

Энэ регистр нь программын инструкц гүйцэтгэгдээд өнгөрсөний дараа АСС регистрийн


төлөвийг хадгалж үлддэг. Өөрөөр хэлбэл төв процессорийн төлөв гэж хэлж болно. Ерөнхийдөө
микроконтроллер маань 8 битийнх учир нэг регистр нь 1 байт буюу 8 бит мэдээлэл хадгалдаг. Энэ
регистрт арифметик үйлдэл хийхэд үр дүнгийн төлөвийг хадгалдаг флаг битүүд байна. Үүнд: Carry
(C) – санасан орон, Auxilary Carry (AC) – нэмэлт санасан орон, Overflow (OV) – халилт, Parity (P) –
тэгш сондгой тоо гэсэн флаг битүүдээс гадна Flag 0 (F0) – хэрэглэгчийн ерөнхий флаг бит байх ба
PSW 1 битийг ч хэрэглэгч өөрийн зорилгоор ашиглаж болдог бит байдаг.

RS1 ба RS0 битүүдээр ерөнхий зориулалтын регистрүүдийн банкийг сонгоход хэрэглэдэг.

24
БЯЦХАН МИКРОКОНТРОЛЛЕР

PSW 7 PSW 6 PSW 5 PSW 4 PSW 3 PSW 2 PSW 1 PSW 0


C AC F0 RS1 RS0 OV - P
0 0 Регистрийн банк 0
0 1 Регистрийн банк 1
1 0 Регистрийн банк 2
1 1 Регистрийн банк 3
Регистрүүдийн банк болон хэрхэн сонгодог талаар 2.2.3. Шуурхай санах ой сэдэвт дурдсан билээ.
Дараах хүснэгтээс АСС-ийн төлөвийг илэрхийлдэг битүүдэд нөлөөлдөг инструкцүүдийг харж болно.

Флаг Флаг
Инструкц Инструкц
C OV AC C OV AC
ADD X X X CLR C O
ADDC X X X CPL C X
SUBB X X X ANL C, bit X
MUL O X ANL C, /bit X
DIV O X ORL C, bit X
DA X ORL C, /bit X
RRC X MOV C, bit X
RLC X CJNE X
SETB C 1

Энд: Х-нь өөрчлөгдөхдөө тухайн үйлдлийн үр дүнгээс хамаарч ямар утгатай байх нь шийдэгдэнэ.
О-нь заавал логик “0” утга авахыг, 1-нь логик “1” утгатай болохыг зааж байна. PSW нь аливаа
үйлдлийн дараа программ дараагийн шийдвэрээ хэрхэн гаргахыг зааж өгдөг хамгийн чухал
регистрүүдийн нэг гэж хэлж болно.

2.3.3. Хаяглалтын горимууд

MCS-51 бүлийн микроконтроллеруудад санах ой болон тусгай зориулалтын регистрүүдэд


хандах хэд хэдэн горимууд байдаг. Ассемблерийн хэл дээр программ бичихэд “операнд” буюу
үйлдэлд оролцох мэдээллүүдийг тодорхойлдог хэд хэдэн арга байдаг. Заримдаа энэ аргуудыг
хаяглалтын горим гэж нэрлэнэ. Өөрөөр хэлбэл санах ойн мэдээлүүдтэй харьцах арга замууд гэж
болно. Жишээлбэл өмнө үзсэн PSW регистрийн аль нэг утгыг өөрчлөе гэвэл шууд тухайн бит рүү
хандах хэрэгтэй болно. SETB C гэвэл инструкц нь Set the Bit буюу битийг “1” утгатай болгох гэсэн үг
бөгөөд “1” утга авах ёстой бит нь PSW-ийн Carry бит болно. Ийм хандалтийг “бит хандалт/хаяглалт”
(Bit Addressing) гэж нэрлэдэг. Тэгвэл MOV PSW,#80H гэвэл уг регистрт 10000000В гэсэн тоог “даруй
хандалт/хаяглалт”-аар (Immediate Addressing) хадгална гэсэн үг. Энэ хоёр арга хоёулаа Carry
битийг “1” утгатай болгох боловч хоёр дахь арга нь PSW регистрийн бусад бүх утгуудыг “0” утгатай
болгоно. Тэгвэл бусад битүүдэд нөлөөлөхгүй байх арга нь эхнийх гэдэг нь ойлгомжтой байна.

Тэгэхээр санах ойн элементүүдтэй харьцах ялгаатай арга замуудыг “Хаяглалтын буюу хандалтын

горимууд” (Addressing Modes) гэж нэрлэдэг.

25
БЯЦХАН МИКРОКОНТРОЛЛЕР

Дараахь хүснэгтээс инструкцийн ард бичигддэг “Операнд”-уудын ялгаатай хэлбэрүүдийг харуулав.


Операнд гэдэг маань мэдээлэл, мэдээлэл маань санах ойд л хадгалагдана шүү дээ.

Мэдээлэл Утга Жишээ


Rn Сонгогдсон банкын R7-R0 регистрүүд дэх утга MOV A,R0
Direct Дотоод санах ой дахь 8 битийн мэдээллийн хаяг. Энэ нь MOV A,30H
санах ойн 0-127 хүртэлх хаягнаас гадна Портын дугаар,
SFR-ийн аль ч регистр байж болно.
@R1 Дотоод санах ой дахь 8 битийн мэдээллийн хаягийг R1 ба R0 MOV A,@R0
@R0 регистр дэх утгуудаар хаяглах.
#data Инструкцид хамтад нь бичиж өгсөн 8 бит мэдээлэл MOV A,#30H
#data16 Инструкцид хамтад нь бичиж өгсөн 16 бит мэдээлэл MOV DPTR,#002FH
addr16 16 бит хаяг. LCALL ба LJMP үсрэлтүүдэд хэрэглэгдэх ба LCALL Label16
АТ89С2051-д шаардлагагүй.
addr11 11 бит хаяг. Дотоод прогарммын 2 килобайт санах ой дотор ACALL Label11
үсрэх ACALL болон AJMP үйлдлүүдэд хэрэглэнэ.
Rel Ойр зайд үсрэх SJMP үйлдэлд хэрэглэдэг 8 битийн хаяг. SJMP Rel_Label
Урагшаа 128, арагшаа 127 байт зайд л үсрэнэ.
Bit Дотоод шуурхай санах ойн болон SFR-ийн битээр MOV C,P3.7
хаяглагддаг мэдээллүүд
Index Программын санах ойгоос мэдээлэл уншихад DPTR болон MOVC A,@A+PC
РС регистрүүдээр индекс хийж авна.

Эдгээрийг MOV буюу ассемблерийн хэлний байт шилжүүлэх Move үйлдэл дээр тулгуурлан
тайлбарлая. Энэ үйлдэл нь программын санах ой, шуурхай санах ой, регистрүүд болон портуудын
хооронд мэдээллийг нэгээс нөгөөд дамжуулах үйлдэл хийдэг. MOV коммандын араас эхлээд
мэдээллийг хүлээн авагч, дараа нь мэдээллийг өгөгч нь бичигддэг.
MOV A,#30H ;Immediate mode-Даруй горим: АСС-т 30Н гэсэн тоог хийх.
MOV A,30H ;Direct mode-Шууд горим: АСС-т RAM-ын 30Н хаяг дахь
мэдээллийг авч хийх.
MOV A,R0 ;Register mode-Регистрийн горим: АСС-т регистрийн утгыг хийх.
MOV A,@R0 ;Indirect mode-Шууд бус горим: АСС-т регистрт байгаа хаягаар
санах ойгоос авч хийх.
MOV C,P3.7 ;Bit addressing-Бит хаяглалт: Carry flag-т Р3.7-г хийх.
MOVC A,@A+DPTR ;Index mode-Индекст горим: АСС-т программын санах ойгоос
DPTR+A хаягаар мэдээллийг авч хийх.
SETB P1.7 ;Bit mode-Бит хандалтын горим: Р1.7-г логик “1” болгох.
MOVC мнемоникийг MOV C буюу Carry flag-т мэдээлэл хийх мнемониктой андуурч болохгүй. Энэ нь
Move Code Byte буюу шуурхай санах ойгоос бус, программ бичигддэг программын санах ойгоос
мэдээлэл уншихад хэрэглэгддэг.

26
БЯЦХАН МИКРОКОНТРОЛЛЕР

2.3.4. Тасалдалт (Interrupts)

Микроконтроллерийн программ ажиллаж байх явцад гаднын дохио ирмэгц процессор


гүйцэтгэж байсан программаа түр орхин өөр дэд программыг гүйцэтгээд өмнө гүйцэтгэж байсан
үйлдэл рүүгээ буцаж ирэхийг тасалдалт (Interrupt) гэж нэрлэнэ. Ингэж тасалдалт үүсгэдэг гаднын
дохио хэд хэдэн төхөөрөмжөөс ирж болно. Тухайлбал: INT0, INT1 оролтууд болон
микроконтроллерийн дотор байрлах Т0, Т1 таймерууд, мөн мэдээллийг цуваа кодоор гаднын
төхөөрөмжүүдтэй солилцдог сериал портын RI&TI тасалдалтууд байна. Өөрөөр хэлбэл АТ89С2051
микроконтроллер нь 5 өөр тасалдалтын түвшинтэй байна. Аливаа тасалдалтын процедурыг
ашиглахдаа дараахь гурван алхамыг хэрэгжүүлэх шаардлагатай. Үүнд:
1. IE (Interrupt Enable) регистрийн EA (Enable All) битийг 1 болгох хэрэгтэй. Ингэвэл бүх
тасалдалт ашиглагдах боломжтой болно.
2. IE регистртийн тасалдалт бүрийг тус тусад нь зөвшөөрөх битүүдийн аль ашиглагдахыг 1
болгох хэрэгтэй.
3. Тухайн тасалдалтад хамаарах дэд программыг тасалдалтын вектор хаяг дээр бичиж өгнө.
Аль хаяг дээр аль тасалдалтын программ бичигдэх ёстойг Зураг 2.8 болон дараах
хүснэгтээс хар.
Тасалдалт Вектор Тайлбар
IE0 0003H Гаднын тасалдалт 0, INT0 (P3.2) оролт
TF0 000BH Таймер 0 дүүрсэн тасалдалт
IE1 0013H Гаднын тасалдалт 1, INT1 (P3.3) оролт
TF1 001BH Таймер 1 дүүрсэн тасалдалт
RI&TI 0023H Сериал портын тасалдалт

Мөн гаднын тасалдалтыг INT0, INT1 оролтуудаар авч байх тохиолдолд Р3.2 болон Р3.3 портуудыг
1 болгосон байх хэрэгтэй. Мөн гаднын тасалдалтын дохио түвшинээр юмуу фронтоор идэвхжихийг
TCON регистр дэх IT1, IT0 битүүдээр тодорхойлж өгнө.

IE 7 IE 6 IE 5 IE 4 IE 3 IE 2 IE 1 IE 0
EA – ET2 ES ET1 EX1 ET0 EX0

EA “0” утгатай бол бүх тасалдалт хориглогдоно.


– Нөөцлөгдсөн бит, ашиглах боломжгүй.
ET2 8032, 8052-т хэрэглэгдэнэ.
ES ”1” утгатай бол Serial портын тасалдалтыг зөвшөөрөх бит.
ET1 ”1” утгатай бол Таймер 1-ийн тасалдалтыг зөвшөөрөх бит.
EX1 ”1” утгатай бол гаднын тасалдалт 1-ийг зөвшөөрөх бит.
ET0 ”1” утгатай бол Таймер 0-ийн тасалдалтыг зөвшөөрөх бит.
EX0 ”1” утгатай бол гаднын тасалдалт 0-ийг зөвшөөрөх бит.
Ингээд цааш элдвийг нуршилгүй тодорхой жишээнүүдээр дасгалууд хийж үзвэл сонирхолтой байх
болов уу. Программын жишээг бүрэн ойлгохын тулд хавсралт материалыг залхууралгүй нээж
үзэхийг зөвлөе.

27

You might also like