SlideShare a Scribd company logo
1 of 7
Download to read offline
МИКРОКОНТРОЛЛЕРИЙН ХЯЛБАР ДАСГАЛУУД
29
3.1. ГЭРЭЛТЭГЧ ДИОДЫГ УДИРДАХ
Гэрэлтэгч диодуудыг төрөл бүрийн эффекттэйгээр асааж унтраах эдгээр дасгалууд нь
портоор мэдээллийг хэрхэн гаргах талаар үзэх хичээл юм. Энэ дасгалуудыг хийж гүйцэтгэхэд
бидэнд бяцхан микроконтроллер дээр дараахь туршилтын хавтан хэрэгтэй болно. Энэ хавтан нь
тэжээлд холбогдсон 8 ширхэг гэрэлт диодыг тус бүрийг нь эсэргүүцэгчээр дамжуулан
контроллерийн портууд руу холбосон байна.
Зураг 3.1. 8 гэрэлт диодыг Р1-д холбох туршилтын хавтан
АТ89С2051 микроконтроллерийн (цаашид uC гэе) портууд нь логик “0” үедээ гэрэлт диодыг асаах
чадвартай гэж дурдаж байсан. Бид бүтэн нэг байт мэдээлэл гаргах зориулалттай P1.0-P1.7
портуудыг гэрэлт диод удирдахад ашиглах болно. Зураг 3.1-д үзүүлсэн туршилтын хавтанг угсарч
бэлэн болгох шаардлагатай. +5V хүчдэлд холбогдсон диодууд 330Ω эсэргүүцэгчээр дамжин
газардвал түүгээр 12mA орчим гүйдэл гүйж асах болно. Гэрэлт диод нь асаж байх үедээ өөр дээрээ
1V орчим хүчдэл унагадаг бөгөөд эсэргүүцэгч дээр 4V нь унана гэсэн үг. Эндээс Омын хуулиар
гүйдлийг олж болно.
Хавтангаа бэлэн болмогц программчилахдаа дараах дасгалуудад үзэх программуудыг
шууд хуулж ажиллуулаад орхиж болохгүй. Дасгал программынхаа мөр, инструкц бүрийг нарийн
судлах шаардлагатай. Тэгж бүрэн дүүрэн ойлгож авсанаар цаашид бие даан программ бичих
дадал олж авах болно. Олон оюутан тэгж хичээгээгүйгээс программ бичих чадвар суулгүй, зөвхөн
хуулбарлагч болж өнгөрдөг. Иймд хавсралтанд байгаа үйлдвэрлэгчийн гаргасан англи хэл дээрх
материалыг ашиглах шаардлагатай. Номыг уншиж байх явцад тааралдах [P:2-xxx] зүүлтүүд
хавсралтын аль хуудаснаас уншиж болохыг зааж өгөх болно. Ер нь бүх инструкцүүдийн ерөнхий
байдлыг хавсралтын 2-71-р хуудаснаас 2-80-р хуудас хүртэлх хүснэгтээс харна. 2-74-р хуудаснаас
2-76-р хуудсан дахаь хүснэгтэд инструкц хэдэн байтийн урттай болон осциляторын хэдэн үед
гүйцэтгэгдэхийг харуулсан байгаа. Жишээ нь АCALL addr11 гэсэн инструкц 2 байт, LCALL addr16
гэсэн инструкц 3 байтын урттай бөгөөд хоёул осциллаторийн 24 үед гүйцэтгэгдэнэ.
3.1.1. Нэг диод асааж унтраах
Р1.7-д холбогдсон D7 диодыг хагас секунд орчим хугацаагаар асаагаад, хагас секунд орчим
хугацаагаар унтраах гэх мэтчилэн давтаж анивчуулах программ бичье. Тэгэхээр Р1.7-г логик “0”
болговол диод асаж, логик “1” болговол унтрах болно. Энэ үйлдлийг хийхдээ битийг “0” утгатай
+5V
+5V
P1.1
P1.2
P1.5
P1.0
P1.7
P1.3
P1.6
P1.4
CN1
HEADER 10X2
12
34
56
78
910
1112
1314
1516
1718
1920
R0 -
330
R7
D7 LED
D0 LED
МИКРОКОНТРОЛЛЕРИЙН ХЯЛБАР ДАСГАЛУУД
30
болгодог CLR P1.7 (Clear буюу логик “0” болгох)[P:2-89]
SETB P1.7 (Set Bit – логик “1” болгох)[P:2-115]
инструкцүүдээр хийж болох ба логик “1” байвал “0” болгодог, “0” байвал “1” болгодог үгүйсгэл буюу
CPL Bit (complement)[P:2-90]
үйлдлийг ашиглавал бүр хялбар болно.
;Диод асааж унтраах программ
ORG 0H ;Программыг программын санах ойн хамгийн эхнээс
;эхлүүлнэ. Ө.х RESET хийгдмэгц эндээс ажиллаж эхлэнэ.
ON_RST:
CPL P1.7 ;Р1.7-г үгүйсгэнэ.Ө.х диод асаж байсан бол унтраана.
;Унтарсан байсан бол асаана.
ACALL DELAYHS ;Хагас секунд орчим саатуулдаг дэд программыг дуудна.
;[P:2-81] ;Хэрэв ингэж саатуулахгүй бол 11.0592MHz давтамжаар
;ажиллаж байгаа uC энэ диодыг нэг сек-д 153600 удаа
;асааж унтраах учир бид анивчиж байгааг нь харж
;чадахгүй.Дэд программ ажиллаж дуусаад буцаж ирмэгц
AJMP ON_RST ;ON_RST хаяг руу үсэрч үйлдлийг давтана.
;[P:2-84] ;Үндсэндээ бидний программ энэ 3 үйлдлээс бүтэх
;бөгөөд энэ 3 үйлдлээ үргэлж давтана.
;Энэ хэсгээс uC-ийг хагас секунд орчим саатуулдаг программ эхлэнэ. Маш өндөр
;давтамжаар ажиллаж буй микропроцессорыг хоосон цикл үйлдлүүдыг тодорхой
;тоогоор хийлгэснээр хэсэг хугацаанд саатуулна.
DELAYHS: ;Хагас сек орчим саатуулдаг программын эхлэл.
MOV R6,#00H ;[P:2-103] R6-д FFН буюу 255 тоог хийнэ.
MOV R7,#02H ;R7-д 02Н тоог хийнэ.
LOOPB:ACALL DELAYMS ;1mS орчим хугацаагаар саатуулдаг дэд программыг
;дуудна. Нийтдээ 255х2 буюу 510 удаа дуудах болно.
DJNZ R6,LOOPB ;R6-ийн утгыг нэгээр хорогдуулаад 00Н болоогүй бол
;[P:2-94] ;LOOPB хаяг руу үсэрч давтана.00Н болбол
DJNZ R7,LOOPB ;R7-ийн утгыг нэгээр хорогдуулаад 00Н болоогүй бол
;LOOPB хаяг руу үсэрч давтана.00Н болбол
RET ;[P:2-112] ;DELAYHS дэд программыг дуудсан цэг рүү буцна.
;Аливаа дэд программ заавал RET командаар дуусна.
DELAYMS: ;1mS орчим саатуулдаг дэд программ
MOV R5,#00H ;R5-д 00Н тоог хийнэ.
LOOPA:NOP ;[P:2-109] ;Ямар ч үйлдэл хийлгүйгээр 1 машин цикл өнгөрөөнө.
DJNZ R5,LOOPA ;R5-ийн утгыг нэгээр хорогдуулаад 00Н болоогүй бол
;LOOPA хаяг руу үсэрч давтана.00Н болбол
RET ;DELAYMS дэд программыг дуудсан цэг рүү буцна.
END ;Аливаа программ заавал END-командаар дуусах ёстой.
;R5-д 00Н тоог хийсэн боловч эхний DJNZ үйлдлээр доторхи утга нь 0FFH болох
учир цааш дахин 00Н утгатай болтлоо нийт 256 удаа циклийг давтана.
МИКРОКОНТРОЛЛЕРИЙН ХЯЛБАР ДАСГАЛУУД
31
3.1.2. Гүйдэг гэрэл ба гүйдэг нүх
Р1-д холбогдсон найман диодыг өөр янз бүрийн эффекттэйгээр асааж унтрааж болно.
Одоо диодууд нэг нэгээр ээлжлэн асаж гүйдэг гэрэл хийе.
;Гүйдэг гэрлийн программ
ORG 0H
ON_RST:
MOV A,#0FEH ;ACC-т FEH буюу 11111110B (хоёртын) тоог хийнэ.
;[P:2-103]
LOOP:
MOV P1,A ;АСС-г Р1-ээр гаргавал Р1.0 логик “0” болж D0 асна.
RL A ;[P:2-113] ;АСС-г зүүн тийш нэг эргүүлбэл утга нь 11111101B болж
;логик “0” нь зүүн тийш нэг орон шилжинэ. 7-р бит нь
;тойроод 0-р бит рүү орж ирэх учир P1.0 нь “1” болно.
;Дараагийн удаад дахин нэг орон шилжих болно.
ACALL DELAYHS ;Өмнөх дасгалд хэрэглэсэн дэд программыг хэрэглэнэ.
AJMP LOOP ;Эргүүлсэн АСС-ийн утгыг Р1-ээр гаргахын тулд LOOP
;хаяг руу үсэрч давтана.
Энэхүү программ дээрээ өмнөх дасгалын хугацааны саатал үүсгэдэг дэд программуудыг
үргэлжлүүлэн хуулж программыг гүйцээнэ. Хэрэв бид АСС-т FEH биш 01Н гэсэн тоо хийж
эхлүүлбэл 00000001В буюу D0 диод унтарч, бусад диодууд бүгд асна. Энэ нь ганц хар нүх
харагдана гэсэн үг юм. Ингээд цааш нь үргэлжлүүлбэл энэ хар нүх нэг нэг орон шилжиж гарах
болно. Үүнийг гүйдэг нүх гэж нэрлэе. Одоо программаа нэг удааг гүйдэг гэрэл, дараа нь гүйдэг нүх
байхаар прогаммчилъя.
;Гүйдэг гэрэл ба гүйдэг нүх программ
ORG 0H
ON_RST:
MOV A,#0FEH ;ACC-т FEH буюу 11111110B (хоёртын) тоог хийнэ.
DO_NEXT:
MOV R4,#8H ;R4-д 8Н тоог хийж тоолуур болгон ашиглахад бэлдэнэ.
LOOP: MOV P1,A ;АСС-г Р1-ээр гаргавал Р1.0 логик “0” болж D0 асна.
RL A ;АСС-г зүүн тийш нэг эргүүлж дараагийн диод асахад
;бэлэн болно.
ACALL DELAYHS ;Өмнөх дасгалд хэрэглэсэн дэд программыг хэрэглэнэ.
DJNZ R4,LOOP ;R4-ийн утгыг 1-ээр хорогдуулаад 0 болоогүй бол LOOP
;хаяг руу үсэрч давтана.
CPL A ;АСС-г үгүйсгэвэл бүх бит нь эсрэгээр эргэж, асаж
;байсан диод унтран унтарсан байснууд нь асна.
AJMP DO_NEXT ;Шилжих хөдөлгөөнийг эсрэгээр эргэсэн АСС-ын утгаар
;давтана.
МИКРОКОНТРОЛЛЕРИЙН ХЯЛБАР ДАСГАЛУУД
32
Мөн хугацааны саатал үүсгэдэг программаа залгаж бичээрэй. Энд нэг зүйлийг анхааруулахад 16-
тын тоог бичихдээ А, B, C, D, E, F үсгүүдээр эхэлсэн тооны өмнө заавал 0 цифр бичиж өгнө. 0FEH
гэж бичсэний учир нь ийм юм. Хэрэв FEH гэж бичвэл ассемблерийн хөрвүүлэгч ойлгохгүй алдаа
өгөх болно. Дараахь программын ажиллагааг мөр мөрөөр нь тайлж учрыг нь олоорой. Гаралтын
диодон дээр ямар эффект гарахыг олж мэдээрэй. Программыг ажиллуулж үзэхээсээ өмнө өөрсдөө
программыг хэрхэн ойлгож байгаагаа шалгаж үзэх хэрэгтэй.
ORG 0H
ON_RST:
MOV A,#0FFH
CLR C ;Carry flag битийг логик “0” болгоно.
DO_NEXT:
MOV R4,#8H
LOOP: MOV P1,A
RLC A ;[P:2-114] ;АСС-г зүүн тийш Carry flag-тай нэг эргүүлэхэд АСС.7
;бит C flag-т орж C-ийн утга АСС.0-д орно.
CPL C ;C flag-ийг үгүйсгэнэ.
ACALL DELAYHS ;Өмнөх дасгалд хэрэглэсэн дэд программыг хэрэглэнэ.
DJNZ R4,LOOP ;R4-ийн утгыг 1-ээр хорогдуулаад 0 болоогүй бол LOOP
;хаяг руу үсэрч давтана.
CPL C ;C flag-ийг үгүйсгэнэ.
AJMP DO_NEXT ;Дараагийн шилжүүлгийг хийнэ.
Энэхүү программыг микроконтроллерт суулган өөрийн бодож байсантай харьцуулж үзээрэй.
Хэрвээ төсөөлж байснаас чинь өөр үр дүн гарвал дахин программыг мөр мөрөөр нь сайтар нягталж
үз. Хаана буруу төсөөлөл гаргасанаа олох нь чухал.
3.2. ДОЛООН СЕГМЕНТИЙН ДЭЛГЭЦ ДЭЭР ТОО ГАРГАХ
Гэрэлтэгч диодуудыг нэг корпусанд байрлуулан тоо гаргадаг 7 сегменттэй дэлгэц хийсэн
байдаг. Эдгээр диодуудыг удирдан, дэлгэцэнд тоог гаргах дасгалыг одоо хийцгээе. Зураг 3.2-т 7
сементийн 2 дэлгэцийг uC-т холбох туршилтын хавтангийн зарчмийн схемийг харуулав. Нэг
дэлгэцэнд байгаа 7 диодын бүх анодууд нь хоорондоо холбогдон СА буюу Common Anode хөл
болно. Энэ хөлөнд +5V хүчдэл PNP шилжилттэй транзистороор өгөгдөх бөгөөд ABCDEFG долоон
катод нь 220Ω эсэргүүцэгчээр uC-ийн портонд холбогдоно. Хоёр транзистор хоёулаа хэзээ ч
нээлттэй байж болохгүй. Ээлжилж нээгдэн асах ёстой дэлгэцийг ээлжлэн сонгоно. Логик “0” болсон
портод харгалзах диод асна. Харин тухайн 7 сегментийн кодыг гаргах дэлгэцийг сонгох СА-ийн
хүчдэлийг өгөх транзисторыг нээхдээ Р3.4, Р3.5 портуудын аль нэгийг логик “0” болгож удирдах
болно. Жишээлбэл D1 дэлгэцэн дээр 4 гэсэн цифр асаахын тулд Р1-ээр 10011000B буюу 98Н тоог
гаргаад Р3.4-өөр логик “0” гаргах хэрэгтэй. Харин энэ үед Р3.5 логик “1” байх хэрэгтэй. D2
дэлгэцээр тоо гаргах бол харгалзах кодыг Р1-ээр гаргаад Р3.5 логик “1” болоход хангалттай.
МИКРОКОНТРОЛЛЕРИЙН ХЯЛБАР ДАСГАЛУУД
33
Зураг 3.2. Хоёр ширхэг 7 сегментийн дэлгэцийг холбох туршилтын хавтан
Гэх мэтчилэн ээлжлэн хүний нүд ээлжлэн асаж байгааг нь олж харахааргүй хурдан давтамжтайгаар
ажиллуулбал хоёр дэлгэцээр мэдээллүүд зэрэг гарч байгаа мэт харагдах болно. Нэг мэдээллийн
шугам ашиглан олон дэлгэцийн диодоор мэдээлэл гаргахыг “динамик” горим гэж нэрлэдэг.
3.2.1. Нэг дэлгэцээр 0-F хүртэл 16-тын тоо гаргах
16-тын 0-F хүртэл тоог хагас секунд тутамд нэг нэгээр ахиулж гаргах программ бичие.
CA1 EQU P3.4 ;Р3.4-ийн нэр нь СА1 болно.
CA2 EQU P3.5 ;Р3.5-ийн нэр нь СА2 болно.
ORG 0H
ON_RST:
MOV DPTR, #TABLE ;Таблицад жагсаасан тоонуудын хаягийг DPTR-т хийнэ.
CLR CA1 ;Нэг дэх дэлгэцийн СА сонгогдож асах болно.
SETB CA2 ;Хоёр дахь дэлгэц асахгүй.
MOV A,#0H ;0Н тоог дэлгэцэнд гаргахад бэлтгэнэ.
NEXT_D:
PUSH ACC ;АСС-ийн утгыг стейкд хадгална.
MOVC A,@A+DPTR ;DPTR-т буй таблицийн хаяг дээр АСС-т буй дэлгэцэнд
;гаргах тоог нэмээд АСС-т оруулбал дэлгэцэнд гаргах
;тоонд харгалзах 7 сегментийн код орж ирнэ.
MOV P1,A ;Уг кодыг порт нэгээр гаргавал сонгогдсон
;дэлгэцэнд тухайн тоо асна.
POP ACC ;АСС-т тооны код орж ирсэн учир тоог стейкээс
;буцааж дуудна.
ACALL DELAYHS ;Хагас сек саатал үүсгэдэг дэд программыг дуудна.
INC A ;АСС-ийг нэгээр нэмэгдүүлж дараагийн тоог
;дэлгэцэнд гаргахаар бэлтгэнэ.
+5V
+5V
P1.1
P1.7
P1.5
P3.5
P1.3P3.3
P1.0
P1.6
P3.4 P1.2
P3.7
P1.4
JP1
HEADER M
12
34
56
78
910
1112
1314
1516
1718
1920
R1-
220
R7
D2 LED7SEG
A
B
C
D
E
F
G
CA
R8
10K
PB1
D1 LED7SEG
A
B
C
D
E
F
G
CA
PB2
Q1
PNP
R9
10K
Q2
PNP
МИКРОКОНТРОЛЛЕРИЙН ХЯЛБАР ДАСГАЛУУД
34
CJNE A,#10H,NEXT_D ;АСС-т буй тоо 10Н-тай тэнцүү биш бол NEXT_D
;[P:2-87] ;хаяг руу үсрэнэ. Хэрэв тэнцүү бол:
AJMP ON_RST ;программыг бүр эхнээс нь эхлүүлнэ.
TABLE: ;0-FH хүртэл 16-тын тооны 7 сегментийн дэлгэцийн
;кодыг дэс дарааллаар нь байрлуулсан байна.
DB 2H,9EH,24H,0CH,98H,48H,40H,1EH,0H,08H,10H,0C0H,62H,84H,60H,70H
; 0 1 2 3 4 5 6 7 8 9 A B C D E F
Энэ программыг uC-т шарж ажиллуулж үзээд дараа нь нэг дэх дэлгэц дээр биш хоёр дахь дэлгэц
дээр тоо гарахаар болгож өөрчлөөрэй. Мөн хоёр дэлгэцийг хоёуланг нэгэн зэрэг асахаар болгон
туршиж үзээрэй. Хоёр дэлгэц үргэлж ижилхэн тоо дэлгэцэндээ гаргах болно.
3.2.2 Хоёр дэлгэцээр 00Н-FFH хүртэл 256 тоог гаргах
Өмнөх дасгалаар хоёр дэлгэцээр хоёулаа ижилхэн тоо гаргахыг үзсэн. Тэгвэл одоо хэрхэн
2 өөр тоо дэлгэцээр гаргахыг үзье. Ингэхийн тулд 00Н-FFH хүртэлх 16-тын 2 оронтой тоог
гаргахаар сонгов.
org 0h ;RESET хийгдэхэд программ эндээс эхлэнэ.
ajmp on_rst ;On_rst хаяг руу үсрэнэ.
;0BH хаяг нь таймер/тоолуур дүүрч процессорт тасалдалт ирэхэд программын
;гүйцэтгэл шилжиж ирэх хаяг юм. (Timer Interrupt vector address)
org 0bh
clr ie.1 ;Нэгэнт таймер интеррапт хэрэгжиж эхэлсэн учир дахин
;тасалдалт хүлээн авахгүйн тулд хориг тавина.
acall disp ;Энэ тасалдалтын үндсэн үүрэг нь дэлгэцийг удирдах
;ажиллагаа учир disp дэд программыг дуудна.
setb ie.1 ;Тасалдалтаар хэрэгжих ажиллагааг гүйцэтгэсэн учир
;дараагийн тасалдалтыг авахын тулд зөвшөөрөл өгнө.
reti ;Тасалдалт болсон цэг рүү буцаж очино.
on_rst: ;RST болоход тасалдалтын программыг алгасч энд ирнэ.
clr p3.5 ;Бага нибл асах дэлгэцийг сонгоно.
setb p3.4 ;Ахлах нибл асах дэлгэцийг хаана.
mov ie,#82h ;Тасалдалт зөвшөөрөх регистрт таймер тасалдалтыг
;зөвшөөрнө.
mov tmod,#01h ;Таймрийн горимыг 16 бит таймер горимд оруулна.
;Ингэснээр нэг сек-д олон удаа тасалдалт ирэх
;боломжтой болно.
mov th0,#0dch ;Т0-ийн анхны утга DC00Н байвал 10000H-DC00H=2400H
mov tl0,#00h ;буюу 9216 импульс тоолоод таймер дүүрч тасалдалт
;хэрэгжинэ. Энэ нь нэг сек-д 100 удаа давтагдана.
;Тиймээс хоёр дэлгэц нэг сек-д 50 удаа ээлжлэн асаж
;унтарна.
МИКРОКОНТРОЛЛЕРИЙН ХЯЛБАР ДАСГАЛУУД
35
setb tcon.4 ;Таймерийг сонгосон горимоор ажиллаж эхлэхийг
;зөвшөөрнө.
mov r0,#0h ;R0-ийг дэлгэцэнд гаргах тоог тоолоход зориулав.
next:
acall delayhs ;Хагас секунд тутамд
inc r0 ;R0-ийн утгыг нэгээр нэмэгдүүлнэ. Энэ үйлдлийг
ajmp next ;хязгааргүй давтана.
;Таймер тасалдалт нэг сек-д 100 удаа хэрэгжихэд ажиллах дэлгэцийн программ
disp: mov dptr, #table ;DPTR-т таблицийн анхны гишүүний хаягийг хийнэ.
mov a,r0 ;АСС-т R0-ийн утгыг хийнэ.
jb p3.5 scnd_d ;Хэрэв Р3.5=”1” байвал бага ниблийг гаргана.
swap a ;үгүй бол АСС-ийн ниблүүдийг хооронд нь сольж ахлах
;[P:2-117] ;ниблийг бага ниблд хийж дэлгэцэнд гаргана.
scnd_d:
anl a,#0fh ;Ахлах ниблийг устгаж зөвхөн бага ниблийг үлдээнэ.
movc a,@a+dptr ;бага ниблийн дугаарт тохирох кодыг АСС-т хийнэ.
mov p1,#0ffh ;Р1-ээр өмнө гарсан кодыг устгана.
cpl p3.4 ;Сонгогдсон дэлгэцийг сольж сонгоно.
cpl p3.5
mov p1,a ;Сонгогдсон дэлгэцээр гарах кодыг Р1-ээр гаргана.
ret ;энэ дэд программыг дуудсан цэг рүү буцна.
table:db 2h,9eh,24h,0ch,98h,48h,40h,1eh,0h,08h,10h,0c0h,62h,84h,60h,70h

More Related Content

More from Babaa Naya

Суралцагчийн мэдлэг, чадвар, дадлыг үнэлэх, дүгнэх журам
Суралцагчийн мэдлэг, чадвар, дадлыг үнэлэх, дүгнэх журам Суралцагчийн мэдлэг, чадвар, дадлыг үнэлэх, дүгнэх журам
Суралцагчийн мэдлэг, чадвар, дадлыг үнэлэх, дүгнэх журам Babaa Naya
 
Мэргэжлийн болон техникийн боловсролын сургалтын байгууллагын суралцагчид тэт...
Мэргэжлийн болон техникийн боловсролын сургалтын байгууллагын суралцагчид тэт...Мэргэжлийн болон техникийн боловсролын сургалтын байгууллагын суралцагчид тэт...
Мэргэжлийн болон техникийн боловсролын сургалтын байгууллагын суралцагчид тэт...Babaa Naya
 
Мэргэжлийн болон техникийн боловсролын сургалтын байгууллагын багшид мэргэжли...
Мэргэжлийн болон техникийн боловсролын сургалтын байгууллагын багшид мэргэжли...Мэргэжлийн болон техникийн боловсролын сургалтын байгууллагын багшид мэргэжли...
Мэргэжлийн болон техникийн боловсролын сургалтын байгууллагын багшид мэргэжли...Babaa Naya
 
Мэргэжлийн боловсрол, сургалтын байгууллагын төгсөгчдөд мэргэжлийн диплом, үн...
Мэргэжлийн боловсрол, сургалтын байгууллагын төгсөгчдөд мэргэжлийн диплом, үн...Мэргэжлийн боловсрол, сургалтын байгууллагын төгсөгчдөд мэргэжлийн диплом, үн...
Мэргэжлийн боловсрол, сургалтын байгууллагын төгсөгчдөд мэргэжлийн диплом, үн...Babaa Naya
 
Suraltsagchid chiglesen uilchilgee hesgiin notolgoo
Suraltsagchid chiglesen uilchilgee hesgiin notolgooSuraltsagchid chiglesen uilchilgee hesgiin notolgoo
Suraltsagchid chiglesen uilchilgee hesgiin notolgooBabaa Naya
 
Img 20210105 0002
Img 20210105 0002Img 20210105 0002
Img 20210105 0002Babaa Naya
 
Img 20210105 0001
Img 20210105 0001Img 20210105 0001
Img 20210105 0001Babaa Naya
 
Cisco packet tracer
Cisco packet tracerCisco packet tracer
Cisco packet tracerBabaa Naya
 
Cisco packet tracer
Cisco packet tracerCisco packet tracer
Cisco packet tracerBabaa Naya
 

More from Babaa Naya (20)

Суралцагчийн мэдлэг, чадвар, дадлыг үнэлэх, дүгнэх журам
Суралцагчийн мэдлэг, чадвар, дадлыг үнэлэх, дүгнэх журам Суралцагчийн мэдлэг, чадвар, дадлыг үнэлэх, дүгнэх журам
Суралцагчийн мэдлэг, чадвар, дадлыг үнэлэх, дүгнэх журам
 
Мэргэжлийн болон техникийн боловсролын сургалтын байгууллагын суралцагчид тэт...
Мэргэжлийн болон техникийн боловсролын сургалтын байгууллагын суралцагчид тэт...Мэргэжлийн болон техникийн боловсролын сургалтын байгууллагын суралцагчид тэт...
Мэргэжлийн болон техникийн боловсролын сургалтын байгууллагын суралцагчид тэт...
 
Мэргэжлийн болон техникийн боловсролын сургалтын байгууллагын багшид мэргэжли...
Мэргэжлийн болон техникийн боловсролын сургалтын байгууллагын багшид мэргэжли...Мэргэжлийн болон техникийн боловсролын сургалтын байгууллагын багшид мэргэжли...
Мэргэжлийн болон техникийн боловсролын сургалтын байгууллагын багшид мэргэжли...
 
Мэргэжлийн боловсрол, сургалтын байгууллагын төгсөгчдөд мэргэжлийн диплом, үн...
Мэргэжлийн боловсрол, сургалтын байгууллагын төгсөгчдөд мэргэжлийн диплом, үн...Мэргэжлийн боловсрол, сургалтын байгууллагын төгсөгчдөд мэргэжлийн диплом, үн...
Мэргэжлийн боловсрол, сургалтын байгууллагын төгсөгчдөд мэргэжлийн диплом, үн...
 
Suraltsagchid chiglesen uilchilgee hesgiin notolgoo
Suraltsagchid chiglesen uilchilgee hesgiin notolgooSuraltsagchid chiglesen uilchilgee hesgiin notolgoo
Suraltsagchid chiglesen uilchilgee hesgiin notolgoo
 
Img 20210105 0002
Img 20210105 0002Img 20210105 0002
Img 20210105 0002
 
Img 20210105 0001
Img 20210105 0001Img 20210105 0001
Img 20210105 0001
 
Cisco packet tracer
Cisco packet tracerCisco packet tracer
Cisco packet tracer
 
Cisco packet tracer
Cisco packet tracerCisco packet tracer
Cisco packet tracer
 
Lab10
Lab10Lab10
Lab10
 
Lab9
Lab9Lab9
Lab9
 
Lab8
Lab8Lab8
Lab8
 
Lab7
Lab7Lab7
Lab7
 
Lab6
Lab6Lab6
Lab6
 
Lab 6
Lab 6Lab 6
Lab 6
 
Lab5
Lab5Lab5
Lab5
 
Lab4
Lab4Lab4
Lab4
 
Lab3
Lab3Lab3
Lab3
 
Lab2
Lab2Lab2
Lab2
 
Lab1
Lab1Lab1
Lab1
 

Mcb03

  • 1. МИКРОКОНТРОЛЛЕРИЙН ХЯЛБАР ДАСГАЛУУД 29 3.1. ГЭРЭЛТЭГЧ ДИОДЫГ УДИРДАХ Гэрэлтэгч диодуудыг төрөл бүрийн эффекттэйгээр асааж унтраах эдгээр дасгалууд нь портоор мэдээллийг хэрхэн гаргах талаар үзэх хичээл юм. Энэ дасгалуудыг хийж гүйцэтгэхэд бидэнд бяцхан микроконтроллер дээр дараахь туршилтын хавтан хэрэгтэй болно. Энэ хавтан нь тэжээлд холбогдсон 8 ширхэг гэрэлт диодыг тус бүрийг нь эсэргүүцэгчээр дамжуулан контроллерийн портууд руу холбосон байна. Зураг 3.1. 8 гэрэлт диодыг Р1-д холбох туршилтын хавтан АТ89С2051 микроконтроллерийн (цаашид uC гэе) портууд нь логик “0” үедээ гэрэлт диодыг асаах чадвартай гэж дурдаж байсан. Бид бүтэн нэг байт мэдээлэл гаргах зориулалттай P1.0-P1.7 портуудыг гэрэлт диод удирдахад ашиглах болно. Зураг 3.1-д үзүүлсэн туршилтын хавтанг угсарч бэлэн болгох шаардлагатай. +5V хүчдэлд холбогдсон диодууд 330Ω эсэргүүцэгчээр дамжин газардвал түүгээр 12mA орчим гүйдэл гүйж асах болно. Гэрэлт диод нь асаж байх үедээ өөр дээрээ 1V орчим хүчдэл унагадаг бөгөөд эсэргүүцэгч дээр 4V нь унана гэсэн үг. Эндээс Омын хуулиар гүйдлийг олж болно. Хавтангаа бэлэн болмогц программчилахдаа дараах дасгалуудад үзэх программуудыг шууд хуулж ажиллуулаад орхиж болохгүй. Дасгал программынхаа мөр, инструкц бүрийг нарийн судлах шаардлагатай. Тэгж бүрэн дүүрэн ойлгож авсанаар цаашид бие даан программ бичих дадал олж авах болно. Олон оюутан тэгж хичээгээгүйгээс программ бичих чадвар суулгүй, зөвхөн хуулбарлагч болж өнгөрдөг. Иймд хавсралтанд байгаа үйлдвэрлэгчийн гаргасан англи хэл дээрх материалыг ашиглах шаардлагатай. Номыг уншиж байх явцад тааралдах [P:2-xxx] зүүлтүүд хавсралтын аль хуудаснаас уншиж болохыг зааж өгөх болно. Ер нь бүх инструкцүүдийн ерөнхий байдлыг хавсралтын 2-71-р хуудаснаас 2-80-р хуудас хүртэлх хүснэгтээс харна. 2-74-р хуудаснаас 2-76-р хуудсан дахаь хүснэгтэд инструкц хэдэн байтийн урттай болон осциляторын хэдэн үед гүйцэтгэгдэхийг харуулсан байгаа. Жишээ нь АCALL addr11 гэсэн инструкц 2 байт, LCALL addr16 гэсэн инструкц 3 байтын урттай бөгөөд хоёул осциллаторийн 24 үед гүйцэтгэгдэнэ. 3.1.1. Нэг диод асааж унтраах Р1.7-д холбогдсон D7 диодыг хагас секунд орчим хугацаагаар асаагаад, хагас секунд орчим хугацаагаар унтраах гэх мэтчилэн давтаж анивчуулах программ бичье. Тэгэхээр Р1.7-г логик “0” болговол диод асаж, логик “1” болговол унтрах болно. Энэ үйлдлийг хийхдээ битийг “0” утгатай +5V +5V P1.1 P1.2 P1.5 P1.0 P1.7 P1.3 P1.6 P1.4 CN1 HEADER 10X2 12 34 56 78 910 1112 1314 1516 1718 1920 R0 - 330 R7 D7 LED D0 LED
  • 2. МИКРОКОНТРОЛЛЕРИЙН ХЯЛБАР ДАСГАЛУУД 30 болгодог CLR P1.7 (Clear буюу логик “0” болгох)[P:2-89] SETB P1.7 (Set Bit – логик “1” болгох)[P:2-115] инструкцүүдээр хийж болох ба логик “1” байвал “0” болгодог, “0” байвал “1” болгодог үгүйсгэл буюу CPL Bit (complement)[P:2-90] үйлдлийг ашиглавал бүр хялбар болно. ;Диод асааж унтраах программ ORG 0H ;Программыг программын санах ойн хамгийн эхнээс ;эхлүүлнэ. Ө.х RESET хийгдмэгц эндээс ажиллаж эхлэнэ. ON_RST: CPL P1.7 ;Р1.7-г үгүйсгэнэ.Ө.х диод асаж байсан бол унтраана. ;Унтарсан байсан бол асаана. ACALL DELAYHS ;Хагас секунд орчим саатуулдаг дэд программыг дуудна. ;[P:2-81] ;Хэрэв ингэж саатуулахгүй бол 11.0592MHz давтамжаар ;ажиллаж байгаа uC энэ диодыг нэг сек-д 153600 удаа ;асааж унтраах учир бид анивчиж байгааг нь харж ;чадахгүй.Дэд программ ажиллаж дуусаад буцаж ирмэгц AJMP ON_RST ;ON_RST хаяг руу үсэрч үйлдлийг давтана. ;[P:2-84] ;Үндсэндээ бидний программ энэ 3 үйлдлээс бүтэх ;бөгөөд энэ 3 үйлдлээ үргэлж давтана. ;Энэ хэсгээс uC-ийг хагас секунд орчим саатуулдаг программ эхлэнэ. Маш өндөр ;давтамжаар ажиллаж буй микропроцессорыг хоосон цикл үйлдлүүдыг тодорхой ;тоогоор хийлгэснээр хэсэг хугацаанд саатуулна. DELAYHS: ;Хагас сек орчим саатуулдаг программын эхлэл. MOV R6,#00H ;[P:2-103] R6-д FFН буюу 255 тоог хийнэ. MOV R7,#02H ;R7-д 02Н тоог хийнэ. LOOPB:ACALL DELAYMS ;1mS орчим хугацаагаар саатуулдаг дэд программыг ;дуудна. Нийтдээ 255х2 буюу 510 удаа дуудах болно. DJNZ R6,LOOPB ;R6-ийн утгыг нэгээр хорогдуулаад 00Н болоогүй бол ;[P:2-94] ;LOOPB хаяг руу үсэрч давтана.00Н болбол DJNZ R7,LOOPB ;R7-ийн утгыг нэгээр хорогдуулаад 00Н болоогүй бол ;LOOPB хаяг руу үсэрч давтана.00Н болбол RET ;[P:2-112] ;DELAYHS дэд программыг дуудсан цэг рүү буцна. ;Аливаа дэд программ заавал RET командаар дуусна. DELAYMS: ;1mS орчим саатуулдаг дэд программ MOV R5,#00H ;R5-д 00Н тоог хийнэ. LOOPA:NOP ;[P:2-109] ;Ямар ч үйлдэл хийлгүйгээр 1 машин цикл өнгөрөөнө. DJNZ R5,LOOPA ;R5-ийн утгыг нэгээр хорогдуулаад 00Н болоогүй бол ;LOOPA хаяг руу үсэрч давтана.00Н болбол RET ;DELAYMS дэд программыг дуудсан цэг рүү буцна. END ;Аливаа программ заавал END-командаар дуусах ёстой. ;R5-д 00Н тоог хийсэн боловч эхний DJNZ үйлдлээр доторхи утга нь 0FFH болох учир цааш дахин 00Н утгатай болтлоо нийт 256 удаа циклийг давтана.
  • 3. МИКРОКОНТРОЛЛЕРИЙН ХЯЛБАР ДАСГАЛУУД 31 3.1.2. Гүйдэг гэрэл ба гүйдэг нүх Р1-д холбогдсон найман диодыг өөр янз бүрийн эффекттэйгээр асааж унтрааж болно. Одоо диодууд нэг нэгээр ээлжлэн асаж гүйдэг гэрэл хийе. ;Гүйдэг гэрлийн программ ORG 0H ON_RST: MOV A,#0FEH ;ACC-т FEH буюу 11111110B (хоёртын) тоог хийнэ. ;[P:2-103] LOOP: MOV P1,A ;АСС-г Р1-ээр гаргавал Р1.0 логик “0” болж D0 асна. RL A ;[P:2-113] ;АСС-г зүүн тийш нэг эргүүлбэл утга нь 11111101B болж ;логик “0” нь зүүн тийш нэг орон шилжинэ. 7-р бит нь ;тойроод 0-р бит рүү орж ирэх учир P1.0 нь “1” болно. ;Дараагийн удаад дахин нэг орон шилжих болно. ACALL DELAYHS ;Өмнөх дасгалд хэрэглэсэн дэд программыг хэрэглэнэ. AJMP LOOP ;Эргүүлсэн АСС-ийн утгыг Р1-ээр гаргахын тулд LOOP ;хаяг руу үсэрч давтана. Энэхүү программ дээрээ өмнөх дасгалын хугацааны саатал үүсгэдэг дэд программуудыг үргэлжлүүлэн хуулж программыг гүйцээнэ. Хэрэв бид АСС-т FEH биш 01Н гэсэн тоо хийж эхлүүлбэл 00000001В буюу D0 диод унтарч, бусад диодууд бүгд асна. Энэ нь ганц хар нүх харагдана гэсэн үг юм. Ингээд цааш нь үргэлжлүүлбэл энэ хар нүх нэг нэг орон шилжиж гарах болно. Үүнийг гүйдэг нүх гэж нэрлэе. Одоо программаа нэг удааг гүйдэг гэрэл, дараа нь гүйдэг нүх байхаар прогаммчилъя. ;Гүйдэг гэрэл ба гүйдэг нүх программ ORG 0H ON_RST: MOV A,#0FEH ;ACC-т FEH буюу 11111110B (хоёртын) тоог хийнэ. DO_NEXT: MOV R4,#8H ;R4-д 8Н тоог хийж тоолуур болгон ашиглахад бэлдэнэ. LOOP: MOV P1,A ;АСС-г Р1-ээр гаргавал Р1.0 логик “0” болж D0 асна. RL A ;АСС-г зүүн тийш нэг эргүүлж дараагийн диод асахад ;бэлэн болно. ACALL DELAYHS ;Өмнөх дасгалд хэрэглэсэн дэд программыг хэрэглэнэ. DJNZ R4,LOOP ;R4-ийн утгыг 1-ээр хорогдуулаад 0 болоогүй бол LOOP ;хаяг руу үсэрч давтана. CPL A ;АСС-г үгүйсгэвэл бүх бит нь эсрэгээр эргэж, асаж ;байсан диод унтран унтарсан байснууд нь асна. AJMP DO_NEXT ;Шилжих хөдөлгөөнийг эсрэгээр эргэсэн АСС-ын утгаар ;давтана.
  • 4. МИКРОКОНТРОЛЛЕРИЙН ХЯЛБАР ДАСГАЛУУД 32 Мөн хугацааны саатал үүсгэдэг программаа залгаж бичээрэй. Энд нэг зүйлийг анхааруулахад 16- тын тоог бичихдээ А, B, C, D, E, F үсгүүдээр эхэлсэн тооны өмнө заавал 0 цифр бичиж өгнө. 0FEH гэж бичсэний учир нь ийм юм. Хэрэв FEH гэж бичвэл ассемблерийн хөрвүүлэгч ойлгохгүй алдаа өгөх болно. Дараахь программын ажиллагааг мөр мөрөөр нь тайлж учрыг нь олоорой. Гаралтын диодон дээр ямар эффект гарахыг олж мэдээрэй. Программыг ажиллуулж үзэхээсээ өмнө өөрсдөө программыг хэрхэн ойлгож байгаагаа шалгаж үзэх хэрэгтэй. ORG 0H ON_RST: MOV A,#0FFH CLR C ;Carry flag битийг логик “0” болгоно. DO_NEXT: MOV R4,#8H LOOP: MOV P1,A RLC A ;[P:2-114] ;АСС-г зүүн тийш Carry flag-тай нэг эргүүлэхэд АСС.7 ;бит C flag-т орж C-ийн утга АСС.0-д орно. CPL C ;C flag-ийг үгүйсгэнэ. ACALL DELAYHS ;Өмнөх дасгалд хэрэглэсэн дэд программыг хэрэглэнэ. DJNZ R4,LOOP ;R4-ийн утгыг 1-ээр хорогдуулаад 0 болоогүй бол LOOP ;хаяг руу үсэрч давтана. CPL C ;C flag-ийг үгүйсгэнэ. AJMP DO_NEXT ;Дараагийн шилжүүлгийг хийнэ. Энэхүү программыг микроконтроллерт суулган өөрийн бодож байсантай харьцуулж үзээрэй. Хэрвээ төсөөлж байснаас чинь өөр үр дүн гарвал дахин программыг мөр мөрөөр нь сайтар нягталж үз. Хаана буруу төсөөлөл гаргасанаа олох нь чухал. 3.2. ДОЛООН СЕГМЕНТИЙН ДЭЛГЭЦ ДЭЭР ТОО ГАРГАХ Гэрэлтэгч диодуудыг нэг корпусанд байрлуулан тоо гаргадаг 7 сегменттэй дэлгэц хийсэн байдаг. Эдгээр диодуудыг удирдан, дэлгэцэнд тоог гаргах дасгалыг одоо хийцгээе. Зураг 3.2-т 7 сементийн 2 дэлгэцийг uC-т холбох туршилтын хавтангийн зарчмийн схемийг харуулав. Нэг дэлгэцэнд байгаа 7 диодын бүх анодууд нь хоорондоо холбогдон СА буюу Common Anode хөл болно. Энэ хөлөнд +5V хүчдэл PNP шилжилттэй транзистороор өгөгдөх бөгөөд ABCDEFG долоон катод нь 220Ω эсэргүүцэгчээр uC-ийн портонд холбогдоно. Хоёр транзистор хоёулаа хэзээ ч нээлттэй байж болохгүй. Ээлжилж нээгдэн асах ёстой дэлгэцийг ээлжлэн сонгоно. Логик “0” болсон портод харгалзах диод асна. Харин тухайн 7 сегментийн кодыг гаргах дэлгэцийг сонгох СА-ийн хүчдэлийг өгөх транзисторыг нээхдээ Р3.4, Р3.5 портуудын аль нэгийг логик “0” болгож удирдах болно. Жишээлбэл D1 дэлгэцэн дээр 4 гэсэн цифр асаахын тулд Р1-ээр 10011000B буюу 98Н тоог гаргаад Р3.4-өөр логик “0” гаргах хэрэгтэй. Харин энэ үед Р3.5 логик “1” байх хэрэгтэй. D2 дэлгэцээр тоо гаргах бол харгалзах кодыг Р1-ээр гаргаад Р3.5 логик “1” болоход хангалттай.
  • 5. МИКРОКОНТРОЛЛЕРИЙН ХЯЛБАР ДАСГАЛУУД 33 Зураг 3.2. Хоёр ширхэг 7 сегментийн дэлгэцийг холбох туршилтын хавтан Гэх мэтчилэн ээлжлэн хүний нүд ээлжлэн асаж байгааг нь олж харахааргүй хурдан давтамжтайгаар ажиллуулбал хоёр дэлгэцээр мэдээллүүд зэрэг гарч байгаа мэт харагдах болно. Нэг мэдээллийн шугам ашиглан олон дэлгэцийн диодоор мэдээлэл гаргахыг “динамик” горим гэж нэрлэдэг. 3.2.1. Нэг дэлгэцээр 0-F хүртэл 16-тын тоо гаргах 16-тын 0-F хүртэл тоог хагас секунд тутамд нэг нэгээр ахиулж гаргах программ бичие. CA1 EQU P3.4 ;Р3.4-ийн нэр нь СА1 болно. CA2 EQU P3.5 ;Р3.5-ийн нэр нь СА2 болно. ORG 0H ON_RST: MOV DPTR, #TABLE ;Таблицад жагсаасан тоонуудын хаягийг DPTR-т хийнэ. CLR CA1 ;Нэг дэх дэлгэцийн СА сонгогдож асах болно. SETB CA2 ;Хоёр дахь дэлгэц асахгүй. MOV A,#0H ;0Н тоог дэлгэцэнд гаргахад бэлтгэнэ. NEXT_D: PUSH ACC ;АСС-ийн утгыг стейкд хадгална. MOVC A,@A+DPTR ;DPTR-т буй таблицийн хаяг дээр АСС-т буй дэлгэцэнд ;гаргах тоог нэмээд АСС-т оруулбал дэлгэцэнд гаргах ;тоонд харгалзах 7 сегментийн код орж ирнэ. MOV P1,A ;Уг кодыг порт нэгээр гаргавал сонгогдсон ;дэлгэцэнд тухайн тоо асна. POP ACC ;АСС-т тооны код орж ирсэн учир тоог стейкээс ;буцааж дуудна. ACALL DELAYHS ;Хагас сек саатал үүсгэдэг дэд программыг дуудна. INC A ;АСС-ийг нэгээр нэмэгдүүлж дараагийн тоог ;дэлгэцэнд гаргахаар бэлтгэнэ. +5V +5V P1.1 P1.7 P1.5 P3.5 P1.3P3.3 P1.0 P1.6 P3.4 P1.2 P3.7 P1.4 JP1 HEADER M 12 34 56 78 910 1112 1314 1516 1718 1920 R1- 220 R7 D2 LED7SEG A B C D E F G CA R8 10K PB1 D1 LED7SEG A B C D E F G CA PB2 Q1 PNP R9 10K Q2 PNP
  • 6. МИКРОКОНТРОЛЛЕРИЙН ХЯЛБАР ДАСГАЛУУД 34 CJNE A,#10H,NEXT_D ;АСС-т буй тоо 10Н-тай тэнцүү биш бол NEXT_D ;[P:2-87] ;хаяг руу үсрэнэ. Хэрэв тэнцүү бол: AJMP ON_RST ;программыг бүр эхнээс нь эхлүүлнэ. TABLE: ;0-FH хүртэл 16-тын тооны 7 сегментийн дэлгэцийн ;кодыг дэс дарааллаар нь байрлуулсан байна. DB 2H,9EH,24H,0CH,98H,48H,40H,1EH,0H,08H,10H,0C0H,62H,84H,60H,70H ; 0 1 2 3 4 5 6 7 8 9 A B C D E F Энэ программыг uC-т шарж ажиллуулж үзээд дараа нь нэг дэх дэлгэц дээр биш хоёр дахь дэлгэц дээр тоо гарахаар болгож өөрчлөөрэй. Мөн хоёр дэлгэцийг хоёуланг нэгэн зэрэг асахаар болгон туршиж үзээрэй. Хоёр дэлгэц үргэлж ижилхэн тоо дэлгэцэндээ гаргах болно. 3.2.2 Хоёр дэлгэцээр 00Н-FFH хүртэл 256 тоог гаргах Өмнөх дасгалаар хоёр дэлгэцээр хоёулаа ижилхэн тоо гаргахыг үзсэн. Тэгвэл одоо хэрхэн 2 өөр тоо дэлгэцээр гаргахыг үзье. Ингэхийн тулд 00Н-FFH хүртэлх 16-тын 2 оронтой тоог гаргахаар сонгов. org 0h ;RESET хийгдэхэд программ эндээс эхлэнэ. ajmp on_rst ;On_rst хаяг руу үсрэнэ. ;0BH хаяг нь таймер/тоолуур дүүрч процессорт тасалдалт ирэхэд программын ;гүйцэтгэл шилжиж ирэх хаяг юм. (Timer Interrupt vector address) org 0bh clr ie.1 ;Нэгэнт таймер интеррапт хэрэгжиж эхэлсэн учир дахин ;тасалдалт хүлээн авахгүйн тулд хориг тавина. acall disp ;Энэ тасалдалтын үндсэн үүрэг нь дэлгэцийг удирдах ;ажиллагаа учир disp дэд программыг дуудна. setb ie.1 ;Тасалдалтаар хэрэгжих ажиллагааг гүйцэтгэсэн учир ;дараагийн тасалдалтыг авахын тулд зөвшөөрөл өгнө. reti ;Тасалдалт болсон цэг рүү буцаж очино. on_rst: ;RST болоход тасалдалтын программыг алгасч энд ирнэ. clr p3.5 ;Бага нибл асах дэлгэцийг сонгоно. setb p3.4 ;Ахлах нибл асах дэлгэцийг хаана. mov ie,#82h ;Тасалдалт зөвшөөрөх регистрт таймер тасалдалтыг ;зөвшөөрнө. mov tmod,#01h ;Таймрийн горимыг 16 бит таймер горимд оруулна. ;Ингэснээр нэг сек-д олон удаа тасалдалт ирэх ;боломжтой болно. mov th0,#0dch ;Т0-ийн анхны утга DC00Н байвал 10000H-DC00H=2400H mov tl0,#00h ;буюу 9216 импульс тоолоод таймер дүүрч тасалдалт ;хэрэгжинэ. Энэ нь нэг сек-д 100 удаа давтагдана. ;Тиймээс хоёр дэлгэц нэг сек-д 50 удаа ээлжлэн асаж ;унтарна.
  • 7. МИКРОКОНТРОЛЛЕРИЙН ХЯЛБАР ДАСГАЛУУД 35 setb tcon.4 ;Таймерийг сонгосон горимоор ажиллаж эхлэхийг ;зөвшөөрнө. mov r0,#0h ;R0-ийг дэлгэцэнд гаргах тоог тоолоход зориулав. next: acall delayhs ;Хагас секунд тутамд inc r0 ;R0-ийн утгыг нэгээр нэмэгдүүлнэ. Энэ үйлдлийг ajmp next ;хязгааргүй давтана. ;Таймер тасалдалт нэг сек-д 100 удаа хэрэгжихэд ажиллах дэлгэцийн программ disp: mov dptr, #table ;DPTR-т таблицийн анхны гишүүний хаягийг хийнэ. mov a,r0 ;АСС-т R0-ийн утгыг хийнэ. jb p3.5 scnd_d ;Хэрэв Р3.5=”1” байвал бага ниблийг гаргана. swap a ;үгүй бол АСС-ийн ниблүүдийг хооронд нь сольж ахлах ;[P:2-117] ;ниблийг бага ниблд хийж дэлгэцэнд гаргана. scnd_d: anl a,#0fh ;Ахлах ниблийг устгаж зөвхөн бага ниблийг үлдээнэ. movc a,@a+dptr ;бага ниблийн дугаарт тохирох кодыг АСС-т хийнэ. mov p1,#0ffh ;Р1-ээр өмнө гарсан кодыг устгана. cpl p3.4 ;Сонгогдсон дэлгэцийг сольж сонгоно. cpl p3.5 mov p1,a ;Сонгогдсон дэлгэцээр гарах кодыг Р1-ээр гаргана. ret ;энэ дэд программыг дуудсан цэг рүү буцна. table:db 2h,9eh,24h,0ch,98h,48h,40h,1eh,0h,08h,10h,0c0h,62h,84h,60h,70h