MỤC LỤC
Chương 1: Thuyết minh Thiết kế và vận hành mô hình máy đo và cắt chiều dài. 1
I. Giới thiệu chung 1
II. Nguyên lí làm việc 2
III. Các Lưu đồ điều khiển hệ thống 8 
Chương 2: Thiết kế phần cứng 13
1. Mạch Vi Xử Lí 13
2. Khối tạo địa chỉ 15
3. Khối giao tiếp Vi xử lý và RAM(62256) 18
4. Khối đếm xung 19
5. Khối hiển thị 20
6. Khối bàn phím 21
7. Khối Mạch động lực 22
8. Mạch đóng ngắt dao 23
Chương 3: Điều Chỉnh Vị Trí Động Cơ DC 25
I. Khái niệm 25
II. Điều khiển vị trí dùng các vòng phản hồi 25
III. Thuật toán điều khiển PID 26
IV. Điều khiển vị trí dùng logic mờ 39
Chương 4: 
A. Động Cơ DC 41
I. Đặc tính cơ của động cơ DC kích từ
 độc lập hoặc kích từ kích thích song song 41
II. Đặc tính cơ của động cơ kích từ nối tiếp 49
III. Các phương pháp điều chỉnh tốc 
độ động cơ điện một chiều 51
B. Bộ giải mã vị trí 54
I. Encoder số 54
Chương 5: Phụ lục 59
A. Giới Thiệu Vi Xử Lý AT89C52 59
B. Giới Thiệu Các IC Sử Dụng Trong Đề Tài 74
C. Chương trình điều khiển 80
                
              
                                            
                                
            
 
            
                 112 trang
112 trang | 
Chia sẻ: banmai | Lượt xem: 2370 | Lượt tải: 1 
              
            Bạn đang xem trước 20 trang tài liệu Điều khiển đo và cắt chiều dài dùng vi xử lý, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
gioáng nhö nhieàu loaïi Encoder khaùc, boä giaûi maõ tuyeät ñoái goàm moät ñóa troøn, treân ñoù coù nhöõng khoaûng trong suoát vaø ñuïc. Aùnh saùng coù theå xuyeân qua nhöõng phaàn trong suoát ñeán boä caûm bieán quang ( Photo transistor ), khi ñóa quay thì boä caûm bieá baät leân 1 vaø phaàn aùnh saùng bò chaën bôûi nhöõng phaàn ñuïc laøm caûm bieán quang xuoáng 0. Nhö vaäy caûm bieán quang seõ taïo thaønh nhöõng xung tuaàn töï:
Khi thieát bò maõ hoùa naøy ñöôïc söû duïng vôùi cuøng moät thieát bò khaùc, thì vò trí 0 cuûa truïc xem nhö goùc toïa ñoä. Khi truïc cuûa thieát bò maõ hoùa quay veà toïa ñoä goùc naøy thì goùc quay coù theå ñöôïc hieån thò treân boä chæ thò cuûa maùy. Tín hieäu ñaàu ra cuûa thieát bò maõ hoùa khoâng bò aûnh höôûng bôûi nhieãu cuûa thieát bò ñoùng, ngaét vaø khoâng yeâu caàu ñieàu chænh goùc quay chính xaùc. Hôn nöõa, thaäm chí neáu tín hieäu maõ hoùa ñaàu ra khoâng theå ñoïc vì truïc quay quaù nhanh, thì goùc quay chính xaùc ñöôïc ghi khi toác ñoä quay giaûm xuoáng, hoaëc ngay khi nguoàn cho thieát bò maõ hoùa bò ngaét. Theâm nöõa, maõ hoùa seõ khoâng hoaït ñoäng do söï rung ñoäng cuûa caùc thieát bòsöû duïng noù.
Loaïi thieát bò maõ hoùa tuyeät ñoái, coù ñoä phaân giaûi cao hôn vaø cho ra caùc giaù trò thay ñoåi trong phaïm vi roäng hôn so vôùi thieát bò maõ hoùa taêng daàn ( Incremental Encoder ).
Thieát bò maõ hoùa taêng daàn ( Incremental Encoder )
Laø loaïi thieát bò maõ hoùa coù daõy xung ra phuø hôïp vôùi goùc cuûa truïc quay. Thieát bò maõ hoùa naøy khoâng coù xung ra khi truïc khoâng laøm vieäc. Do ñoù caàn coù moät boä ñeáám ñeå xung ra. 
Thieát bò maõ hoùa cho bieát vò trí cuûa truïc quay baèng soá xung ñöôïc ñeám. Daïng thieát bò maõ hoùa naøy chæ coù 1 hay 2 keânh ngoõ ra :
+Loaïi 1 chieàu ( chæ coù ñaàu keânh A ) laø loaïi chæ sinh ra xung khi truïc quay.
+Loaïi 2 chieàu ( coù ñaàu ra keânh A vaø B ) cuõng coù theå cho bieát chieàu cuûa truïc quay, nghóa laø thuaän chieàu kim ñoàng hoà. Ngoaøi ra coøn coù ñaàu daây trung tính ( xung Z ) cho moãi voøng quay, coù nghóa laø neáu quay ñöôïc 1 voøng thì xung Z leân 1.
- khi ñóa quay theo chieàu kim ñoàng hoà
-Khi ñóa quay theo chieàu kim ñoàng hoà thì xung track 1 (B) treã pha hôn xung track 2 (A).
-Ngöôïc laïi, khi ñóa quay ngöôïc chieàu kim ñoàng hoà thì xung track 1 (B) nhanh pha hôn xung track 2 (A).
*Quay thuaän chieàu kim ñoàng hoà :
Ñaàu A vöôït quaù B ( ñoä leäch pha ) = 90 +- 45 (T/4 +- T/8)
*Quay ngöôïc chieàu kim ñoàng hoà :
Moät soá thuaät ngöõ cô baûn ñeå xaùc ñònh Encoder:
	*Ñieän aùp nguoàn : Ñieän aùp ñaët treân 2 ñaàu Encoder.
*Doøng tieâu thuï : Doøng ñieän lôùn nhaát coù theå chaïy qua Encoder khi ñaët ñieän aùp nguoàn.
*Taàn soá ñaùp öùng cöïc ñaïi :
	-Laø taàn soá lôùn nhaát maø thieát bò maõ hoùa quay coù theå ñaùp öùng. Vôùi daïng maõ hoùa taêng daàn, taàn soá naøy töông öùng vôùi xung ra trong 1 giaây. Vì vaäy thieát bò phaûi thoûa maõn quan heä sau :
( Soá voøng quay + 60 voøng/phuùt ) x ñoä phaân giaûi <= taàn soá ñaùp öùng lôùn nhaát
*Momen quaùn tính :
	-Laø moment cuûa quaùn tính truïc quay. Moment quaùn tính caøng nhoû truïc ñöôïc döøng caøng nhanh vaø eâm.
*Ñaàu ra A vaø B:
	Ñoái vôùi thieát bò maõ hoùa 2 chieàu thì ngöôøi ta söû duïng 2 ñaàu ra song song ñeå xaùc ñònh truïc quay theo chieàu kim ñoàng hoà(CCW) döïa treân ñoä leäch pha cuûa ñaàu ra A vaø B. Maëc duø ñoä leäch pha lyù töôûng90 +- 0 song sai soá cho pheùp ñeán +-45. Ngoaøi ra coøn coù xung chuaånôû ñaàu ra cho moãi voøng quay cuûa truïc thieát bò, chöùc naêng chæ thò 0 naøy cuøng vôùi thieát bò maõ hoùa daïng soá ñöôïc duøng ñeå ñaët taïi ñieåm 0 cuûa moät boä ñeám noái beân ngoaøi hoaëc traïng thaùi nghæ cuûa boä nhaän bieát vò trí.
*Ñoä phaân giaûi:
	Ñoái vôùi loaïi maõ hoùa taêng daàn, thì thuaät ngöõ naøy öùng vôùi soá 
xung ñaàu ra cho moãi voøng quay cuûa truïc.
*Taûi troïng truïc:
Laø taûi lôùn nhaát maø truïc coù theå chòu ñöôïc. Taûi troïng coù aûnh höôûng tröïc tieáp ñeán tuoåi thoï cuûa truïc.
*Toác ñoä quay:
Laø toác ñoä quay lôùn nhaát maø theát bò maõ hoùa coù theå chòu ñöïng veà maët cô hoïc.
Moment khôûi ñoäng	:	
Laø Moment caàn ñeå khôûi ñoäng truïc quay töø traïng thaùi nghæ, Moment khôûi ñoäng caøng nhoû thì truïc quay caøng eâm.
Chöông 5: 	Phuï luïc.
A. 	GIÔÙI THIEÄU VI XÖÛ LYÙ AT89C52
 &
VI ÑIEÀU KHIEÅN HOÏ MCS-51MCS-51tm
Laø hoï vi ñieàu khieån do haõng intel saûn xuaát vaøo ñaàu nhöõng naêm 80 vaø ngaøy nay ñaõ trôû thaønh moät chuaån trong coâng nghieäp. baét ñaàu töø ic tieâu bieåu laø 8051 ñaõ cho thaáy khaû naêng thích hôïp vôùi nhöõng öùng duïng mang tính ñieàu khieån. vieäc xöû lí treân byte vaø caùc pheùp toaùn soá hoïc ôû caáu truùc döõ lieäu nhoû ñöôïc thöïc hieän baèng nhieàu cheá ñoä truy xuaát döõ lieäu nhanh treân ram noäi. taäp leänh cung caáp moät baûn tieän duïng cuûa nhöõng leänh soá hoïc 8 bit goàm caû leänh nhaân vaø leänh chia. noù cung caáp nhöõng hoã trôï môû roäng on-chip duøng cho nhöõng bieán 1 bit nhö laø kieåu döõ lieäu rieâng cho pheùp quaûn lí vaø kieåm tra bit tröïc tieáp trong ñieàu khieån vaø nhöõng heä thoáng logic ñoøi hoûi xöû lí luaän lí.
Sau ñaây laø baûng so saùnh caùc IC trong hoï MCS-51TM :
TEÂN LINH KIEÄN
BOÄ NHÔÙ CHÖÔNGù TRÌNH ON CHIP
BOÄ NHÔÙ DÖÕ LIEÄU ON CHIP
TIMER
8051
4 KB MROM
128 Bytes
2
8031
0 KB
128 Bytes
2
8751
4 KB EPROM
128 Bytes
2
8951
4 KB Flash ROM
128 bytes
2
8052
8 KB MROM
256 Bytes
3
8032
0 KB
256 Bytes
3
8752
8 KB EPROM
256 Bytes
3
8952
8 KB Flash ROM
256 Bytes
3
2. VI ÑIEÀU KHIEÅN AT89C52
Do hoï MCS-51TM ñaõ trôû thaønh chuaån coâng nghieäp neân coù raát nhieàu haõng saûn xuaát ra noù, ñieån hình laø ATMEL Corporation. Haõng naøy ñaõ keát hôïp raát nhieàu tính naêng döïa treân neàn taûng kyõ thuaät cuûa mình ñeå taïo ra caùc vi ñieàu khieån töông thích vôùi MCS-51TM nhöng maïnh meõ hôn.
AT89C52 laø moät vi ñieàu khieån 8 bit do ATMEL saûn xuaát, cheá taïo theo coâng ngheä CMOS, coù chaát löôïng cao, coâng suaát thaáp vôùi 8 KB Flash (flash programmable and erasable read only memory). Thieát bò naøy ñöôïc cheá taïo baèng caùch söû duïng kyõ thuaät boä nhôù khoâng boác hôi maät ñoä cao cuûa ATMEL vaø töông thích vôùi chuaån coâng nghieäp MCS-51TM veà taäp leänh vaø caùc chaân ra. Flash on-chip cho pheùp boä nhôù laäp trình ñöôïc laäp trình trong heä thoáng bôûi moät laäp trình vieân bình thöôøng. Baèng caùch noái 1 CPU 8 bit vôùi moät Flash treân moät chip ñôn, AT89C52 laø moät vi ñieàu khieån maïnh (coù coâng suaát lôùn), cung caáp moät söï linh ñoäng cao vaø giaûi phaùp veà giaù caû ñoái vôùi nhieàu öùng duïng vi ñieàu khieån.
Caùc ñaëc ñieåm chuû yeáu cuûa AT89C52 :
Töông thích hoaøn toaøn vôùi hoï MCS-51TM cuûa Intel.
Boä nhôù chöông trình 8K Byte thuoäc loaïi Flash Memory.Ñoä beàn : 1000 laàn ghi/xoùa.
Taàn soá hoaït ñoäng : 0 Hz ñeán 24 MHz.3 cheá ñoä khoùa boä nhôù.
256 x 8-Bit RAM noäi.32 ñöôøng I/O laäp trình ñöôïc (4 port).
3 timer/counter 16-bit.8 nguoàn ngaét.
Cheá ñoä haï nguoàn vaø cheá ñoä löôøi tieâu toán coâng suaát thaáp.
2.1. Caáu taïo chaân
Tuøy theo khaû naêng (veà kinh teá, kyõ thuaät, …) maø caùc nhaø saûn xuaát caùc saûn phaåm öùng duïng coù theå choïn moät trong 3 kieåu chaân do ATMEL ñöa ra. 
2.2. Sô ñoà khoái
2.3. Moâ taû chöùc naêng cuûa caùc chaân
Vcc : aùp nguoàn.
GND : ñaát.
Port 0 : laø moät port I/O 8-bit hai chieàu, cöïc maùng hôû. Khi xuaát ra, moãi chaân port coù theå laùi 8 ñaàu vaøo TTL. Neáu ghi caùc möùc 1 ra caùc chaân port thì caùc chaân naøy coù theå duøng nhö caùc ñaàu vaøo trôû khaùng cao.
Port 0 cuõng coù theå ñöôïc caáu hình thaønh moät bus multiplex giöõa ñòa chæ thaáp vaø döõ lieäu khi truy caäp chöông trình hay döõ lieäu töø beân ngoaøi. Trong cheá ñoä naøy, port 0 coù ñieän trôû pullup noäi.
Port 0 cuõng nhaän caùc byte maõ chöông trình khi laäp trình Flash vaø xuaát ra maõ chöông trình khi kieåm tra, khi ñoù caàn coù ñieän trôû pullup beân ngoaøi.
Port 1 : laø moät port I/O 8-bit hai chieàu coù pullup noäi. Ñaàu ra port 1 coù theå laùi 4 ñaàu vaøo TTL. Khi vieát caùc möùc 1 ra caùc chaân port thì chuùng ñöôïc keùo leân do coù ñieän trôû noäi vaø coù theå duøng laøm ñaàu vaøo. Khi vai troø laø coång nhaäp, nhöõng chaân cuûa port 1 bò keùo xuoáng thaáp seõ ñoå doøng vì coù noäi trôû keùo leân.
Hôn nöõa, P1.0 vaø P1.1 coù theå ñöôïc duøng nhö laø ñaàu vaøo boä ñeám timer/counter 2 beân ngoaøi (P1.0/T2) vaø xung kích (P1.1/T2EX).
Port 1 cuõng nhaän nhöõng byte ñòa chæ thaáp trong khi laäp trình Flash vaø trong khi kieåm tra Flash .
Port 2 : laø moät port I/O 8-bit hai chieàu coù pullup noäi. Ñaàu ra port 2 coù theå laùi 4 ñaàu vaøo TTL. Khi vieát caùc möùc 1 ra caùc chaân port thì chuùng ñöôïc keùo leân do coù ñieän trôû noäi vaø coù theå duøng laøm ñaàu vaøo. Khi vai troø laø coång nhaäp, nhöõng chaân cuûa port 2 bò keùo xuoáng thaáp seõ ñoå doøng vì coù noäi trôû keùo leân.
Port 2 phaùt byte ñòa chæ cao trong khi nhaän leänh töø boä nhôù chöông trình ngoaøi vaø trong luùc truy xuaát ñeán boä nhôù döõ lieäu ngoaøi maø coù söû duïng ñòa chæ 16 bit (MOVX A, @DPTR). Trong öùng duïng naøy noù duøng ñieän trôû noäi keùo leân maïnh khi xuaát 1. Khi truy xuaát boä nhôù döõ lieäu ngoaøi duøng ñòa chæ 8 bit, port 2 seõ phaùt noäi dung cuûa thanh ghi P2 
Port 2 cuõng nhaän byte ñòa chæ cao trong luùc laäp trình Flash vaø trong luùc kieåm tra Flash.
Port 3 : laø moät port I/O 8-bit hai chieàu coù pullup noäi. Ñaàu ra port 3 coù theå laùi 4 ñaàu vaøo TTL. Khi vieát caùc möùc 1 ra caùc chaân port thì chuùng ñöôïc keùo leân do coù ñieän trôû noäi vaø coù theå duøng laøm ñaàu vaøo. Khi vai troø laø coång nhaäp, nhöõng chaân cuûa port 3 bò keùo xuoáng thaáp seõ ñoå doøng vì coù noäi trôû keùo leân.
Port 3 cuõng coù nhöõng chöùc naêng cuûa hoï MSC-51 ñöôïc ieät keâ ôû baûng sau:
BIT
TEÂN
ÑÒA CHÆ BIT
CHÖÙC NAÊNG THAY THEÁ
P3.0
RXD
B0H
Nhaän döø lieäu cho port noái tieáp
P3.1
TXD
B1H
Truyeàn döø lieäu cho port noái tieáp
P3.2
INT0
B2H
Ngaét ngoaøi 0
P3.3
INT1
B3H
Ngaét ngoaøi 1
P3.4
T0
B4H
Ngoõ vaøo töø beân ngoaøi cho timer/counter 0
P3.5
T1
B5H
Ngoõ vaøo töø beân ngoaøi cho timer/counter 1
P3.6
WR
B6H
Xung ghi boä nhôù döõ lieäu ngoaøi
P3.7
RD
B7H
Xung ñoïc boä nhôù döõ lieäu ngoaøi
Port 3 cuõng nhaän vaøi tín hieäu ñieàu khieån trong luùc laäp trình Flash vaø trong luùc kieåm tra Flash.
RST : laø ngoõ vaøo Reset. Khi ngoõ naøy ñöôïc ñöa leân cao (trong ít nhaát hai chu kì maùy), caùc thanh ghi beân trong AT89C51 ñöôïc taûi nhöõng giaù trò thích hôïp ñeå khôûi ñoäng heä thoáng.
ALE/PROG (Address Latch Enable) : ALE laø xung xuaát cho pheùp choát byte ñòa chæ thaáp khi truy caäp boä nhôù ngoaøi. Chaân naøy coøn laø ngoõ vaøo cuûa xung laäp trình (PROG) khi laäp trình Flash.
Trong hoaït ñoäng bình thöôøng, ALE ñöôïc phaùt xung vôùi taàn soá 1/6 taàn soá dao ñoäng on-chip vaø coù theå ñöôïc duøng nhö xung thôøi gian chuaån beân ngoaøi. Tuy nhieân, caàn chuù yù laø moät xung ALE seõ bò maát khi truy caäp boä nhôù ngoaøi.
Coù theå huûy boû chöùc naêng cuûa ALE baèng caùch set bit 0 cuûa thanh ghi ôû vò trí 8EH. Moät khi bit naøy ñöôïc set, ALE chæ tích cöïc khi coù leänh MOVX hoaëc MOVC. Neáu khoâng coù caùc leänh naøy thì ALE ôû möùc cao. Vieäc set bit 0 cuûa thanh ghi ôû vò trí 8EH khoâng laøm aûnh höôûng ñeán vi ñieàu khieån khi truy caäp boä nhôù ngoaøi.
PSEN (Program Store Enable) : PSEN laø xung strobe baùo hieäu vieäc ñoïc boä nhôù chöông trình ngoaøi, PSEN tích cöïc hai laàn (möùc thaáp) moãi chu kì maùy, ngoaïi tröø hai xung PSEN bò maát khi truy xuaát döõ lieäu ngoaøi. Khi thi haønh chöông trình trong RAM noäi, PSEN seõ ôû möùc thuï ñoäng (möùc cao).
EA/VPP (External Access) : EA laø ngoõ vaøo ñeå cho pheùp truy xuaát boä nhôù chöông trình töø beân ngoaøi khi ñöôïc noái vôùi GND. Khi EA ñöôïc treo leân nguoàn VCC, chöông trình seõ ñöôïc thöïc thi trong ROM noäi. Chaân naøy cuõng nhaän ñieän aùp 12v (VPP) trong khi laäp trình Flash.
XTAL1 : Ñaàu vaøo cuûa boä khueách ñaïi dao ñoäng ñaûo vaø cuõng laø ñaàu vaøo ñeán maïch taïo xung clock noäi.
XTAL2 : Ñaàu ra cuûa boä khueách ñaïi dao ñoäng ñaûo.
2.4. Caùc thanh ghi chöùc naêng (SFR-Special Funtion Reisters)
AT89C52 coù 26 thanh ghi chöùc naêng ñöôïc thieát keá nhö laø moät thaønh phaàn cuûa RAM on-chip. Do ñoù moãi thanh ghi coù moät ñòa chæ cuûa noù, naèm trong vuøng töø 80H ñeán FFH. Tuy nhieân, vuøng naøy cuõng laø vuøng boä nhôù neân vieäc truy caäp caùc thanh ghi naøy thoâng qua caùc leänh duøng ñònh vò tröïc tieáp khaùc vôùi vieäc truy caäp vuøng nhôù duøng ñònh vò giaùn tieáp.
Baûng vò trí caùc thanh ghi chöùc naêng :
 Chuù yù laø khoâng phaûi taát caû caùc ñòa chæ ñeàu coù caùc thanh ghi, nhöõng ñòa chæ khoâng coù thanh ghi naøy coù theå khoâng coù treân chip. Ñoïc nhöõng ñòa chæ naøy seõ coù nhöõng giaù trò ngaãu nhieân vaø ghi nhöõng giaù triï naøy coù nhöõng taùc ñoäng khoâng xaùc ñònh tröôùc.
Phaàn meàm cuûa ngöôøi duøng khoâng neân ghi nhöõng giaù trò 1 ñeán caùc vò trí naøy, bôûi vì chuùng coù theå ñöôïc duøng trong töông lai. Trong tröôøng hôïp ñoù, giaù trò cuûa caùc bit luoân laø 0.
Ngoaøi nhöõng thanh ghi töông töï 8051, AT89C52 coù theâm :
Caùc thanh ghi Timer 2 caùc bit ñieàu khieån vaø traïng thaùi chöùa trong thanh ghi T2CON vaø T2MOD cho Timer 2. Caëp thanh ghi RCAP2H vaø RCAP2L laø nhöõng thanh ghi Capture/Reload trong cheá ñoä capture 16 bit hay cheá ñoä auto-reload 16 bit.
Kyù hieäu
Chöùc naêng
TF2
Côø traøn Timer 2, set khi Timer 2 traøn vaø phaûi ñöôïc clear baèng phaàn meàm. TF2 seõ khoâng set khi RCLK = 1 hoaëc TCLK = 1.
EXF2
Côø ngoaøi cuûa Timer 2, set khi xaûy ra capture hoaëc reload do T2EX xuoáng thaáp vaø EXEN2 = 1. Neáu ngaét Timer 2 ñöôïc kích hoaït, EXF2 = 1 seõ laøm CPU troû ñeán ISR cuûa Timer 2. EXF2 phaûi ñöôïc xoùa baèng phaàn meàm. EXF2 khoâng gaây neân ngaét trong cheá ñoä ñeám leân/xuoáng (DCEN = 1).
RCLK
Kích hoaït xung clock boä thu. Khi set, caùc xung traøn Timer 2 seõ laø xung clock cho boä thu port noái tieáp trong mode 1 vaø 3. RCLK = 0 thì boä thu port noái tieáp seõ duøng caùc xung traøn cuûa Timer 1.
TCLK
Kích hoaït xung clock boä phaùt. Khi set, caùc xung traøn Timer 2 seõ laø xung clock cho boä phaùt port noái tieáp trong mode 1 vaø 3. TCLK = 0 thì boä phaùt port noái tieáp seõ duøng caùc xung traøn cuûa Timer 1.
EXEN2
Kích hoaït beân ngoaøi. Khi set, cho pheùp capture hay reload khi T2EX xuoáng thaáp (neáu Timer 2 khoâng söû duïng cho port noái tieáp). EXEN2 = 0 laøm cho Timer 2 boû qua caùc söï kieän treân T2EX.
TR2
Khôûi ñoäng/Döøng Timer 2. TR2 = 1 laøm khôûi ñoäng Timer 2.
C/T2
Bit löïa choïn timer hay counter. C/T2 = 0 : timer. C/T2 = 1 : counter ñeám söï kieän beân ngoaøi (kích caïnh xuoáng).
CP/RL2
Löïa choïn capture hay reload. CP/RL2 = 1: capture xaûy ra khi T2EX xuoáng thaáp neáu EXEN2 = 1. CP/RL2 = 0 : reload xaûy ra khi Timer 2 traøn hoaëc khi T2EX xuoáng thaáp neáu EXEN2 = 1. Neáu TCLK hay RCLK = 1, bit naøy bò boû qua vaø timer bò eùp vaøo cheá ñoä reload khi Timer 2 traøn.
Caùc thanh ghi ngaét taäp caùc bit rieâng leû cho pheùp ngaét chöùa trong thanh ghi IE. Thieát laäp hai möùc öu tieân cho 6 nguoàn ngaét baèng caùch set caùc bit thanh ghi IP.
2.5. Boä nhôù döõ lieäu
AT89C52 coù 256 byte boä nhôù RAM on-chip. Trong ñoù, 128 byte treân coù cuøng ñòa chæ vôùi vuøng thanh ghi chöùc naêng nhöng coù caáu taïo vaät lyù rieâng bieät.
Khi moät leänh truy caäp moät vò trí noäi coù ñòa chæ treân 7FH, cheá ñoä ñòa chæ noù söû duïng seõ baùo cho CPU bieát vuøng ñòa chæ naøo noù caàn truy caäp : RAM hay SFR. Caùc leänh duøng ñòa chæ tröïc tieáp seõ truy caäp vuøng SFR. Ví duï nhö leänh sau ñaây seõ truy caäp SFR ôû ñòa chæ 0A0H (port 2)
	MOV	0A0H,#data
Leänh duøng ñòa chæ giaùn tieáp seõ truy caäp 128 byte treân cuûa RAM. Ví duï nhö cuõng truy caäp ñòa chæ 0A0H nhöng giaùn tieáp thoâng qua R0.
MOV	R0,#0A0H
MOV	@R0,#data
Chuù yù raèng caùc taùc vuï cuûa stack voán ñaõ söû duïng ñòa chæ giaùn tieáp neân vuøng 128 byte treân cuûa RAM raát tieän duïng ñeå laøm vuøng stack.
2.6. Ñaëc tính boä dao ñoäng
XTAL1 laø ñaàu vaøo vaø ñaàu ra töông öùng cuûa boä khueách ñaïi ñaûo ñöôïc duøng laøm boä dao ñoäng noäi on-chip. Coù theå duøng thaïch anh hay boä coäng höôûng ceramic ñeàu ñöôïc. 
Ñeå laùi vi ñieàu khieån töø nguoàn xung clock beân ngoaøi, XTAL2 phaûi ñöôïc ñeå troáng trong khi XTAL1 noái ñeán nguoàn laùi. Khoâng coù yeâu caàu gì veà duty cycle nhöng phaûi chuù yù ñeán thôøi gian toái ña vaø toái thieåu cuûa möùc ñieän aùp cao cuõng nhö möùc ñieän aùp thaáp.
2.7. Cheá ñoä löôøi
Trong cheá ñoä löôøi, CPU rôi vaøo traïng thaùi “nguû” trong khi taát caû thieát bò ngoaïi vi vaãn coøn tích cöïc. Cheá ñoä naøy ñöôïc taïo ra baèng phaàn meàm. Noäi dung cuûa RAM on-chip vaø giaù trò cuûa caùc SFR vaãn ñöôïc giöõ nguyeân. Keát thuùc cheá ñoä löôøi baèng caùch kích hoaït moät ngaét hoaëc reset phaàn cöùng.
Chuù raèng khi keát thuùc cheá ñoä löôøi baèng caùch reset phaàn cöùng thì thoâng thöôøng vi ñieàu khieån seõ goïi laïi chöông trình maø noù vöøa thoaùt, cho ñeán hai chu kyø maùy tröôùc khi thuaät toaùn reset chieám quyeàn ñieàu khieån. Phaàn cöùng caám truy caäp RAM noäi trong tröôøng hôïp naøy nhöng khoâng caám truy caäp ñeán caùc chaân port, do ñoù coù theå xaûy ra nhöõng tröôøng hôïp khoâng mong muoán. Ñeå loaïi boû tröôøng hôïp naøy, leänh ngay sau leänh goïi cheá ñoä löôøi khoâng neân laø leänh ghi port hay ghi boä nhôù ngoaøi.
2.8. Cheá ñoä haï nguoàn
Trong cheá ñoä haï nguoàn, boä dao ñoäng ngöøng, vaø leänh goïi haï nguoàn laø leänh cuoái cuøng ñöôïc thöïc thi. RAM on-chip vaø SFR duy trì giaù trò cuûa noù cho ñeán khi keát thuùc cheá ñoä haï nguoàn. 
Keát thuùc cheá ñoä haï nguoàn chæ baèng moät caùch duy nhaát : reset phaàn cöùng. Reset seõ taïo laïi giaù trò cho SFR nhöng khoâng thay ñoåi noäi dung cuûa RAM on-chip. Khoâng neân reset tröôùc khi Vcc phuïc hoài möùc ñieän aùp thoâng thöôøng cuûa noù vaø phaûi giöõ ñuû laâu ñeå boä dao ñoäng phuïc hoài vaø oån ñònh. 
2.9. Traïng thaùi cuûa moät soá chaân trong cheá ñoä löôøi vaø cheá ñoä haï nguoàn
IX. TAÄP LEÄNH CUÛA 89C51:
AT89C51 coù 255 leänh chia thaønh caùc nhoùm leänh:
+ Nhoùm leänh chuyeån dôøi
+ Nhoùm leänh soá hoïc
+ Nhoùm leänh logic
+ Nhoùm leänh chuyeån ñieàu khieån
Sau ñaây laø taäp leänh cô baûn cuûa vi xöû lyù AT89C51:
Caùc chæ daån thieát laäp leänh 
Rn	: Thanh ghi R0 ñeán R7
Data	: 8 bit ñòa chæ vuøng döõ lieäu beân trong
@Ri	: Ñònh chæ giaùn tieáp qua R0 hay R1
#data	: Haèng soá 8 bit
#data16	: Haèng soá 16 bit
addr 16	: 16 bit ñòa chæ ñích
addr 11	: 11 bit ñòa chæ ñích
rel	: Ofset 8 bit coù daáu
bit 	: Bit ñöôïc ñònh ñòa chæ tröïc tieáp
a) Nhoùm leänh xöû lyù soá hoïc :
ADD A,Rn	(1 byte,1chu kyø maùy): (A) =	(A)+(Rn)
ADD A,data	(2;1)	: (A) = (A) + (data)
ADD A,@Ri	(1;1)	: (A) = (A) + ((Ri))
ADD A,#data	 (2;1)	: (A) = ( A) + #data
ADDC A,Rn	 (1;1)	: (A) = ( A) + (C) +(Rn)
ADDC A,data	 ( 2;1)	: (A) = (A) + (C) + (data)
ADDC A,@Ri	 (1;1)	: (A) = (A) + ((Ri)) + (C)
ADDC A,#data	 ( 2;1)	: (A) = (A) + (C) + #data
SUBB A,Rn	 (1;1)	: (A) = (A) - (C)- (Rn)
SUBB A,data	(2;1)	: (A) = (A) - (C) -( data)
SUBB A,@Ri	(1;1)	: (A) =(A) -(C) -((Ri))
SUBB A,#data	 (2;1)	: (A) = (A) - (C) - #data
INC A	 (1;1)	: (A) = (A) +1
INC Rn	 (1;1)	: (Rn) = (Rn) +1
INC data	 (2;1)	: (data) = (data) +1
INC @Ri	 (1;1)	: ((Ri)) =((Ri))+1
DEC A	 (1;1)	: (A) =(A) – 1
DEC Rn	 (1;1)	: (Rn) =(Rn) -1	
DEC data	 (2;1)	: (data) =(data) –1
DEC @Ri	(1;1)	: ((Ri)) =((Ri)) –1
INC DPTR	(1;2)	: (DPTR) =(DPTR) +1
MUL AB	 (1;4)	: (A) = byte cao cuûa (A) * (B)
	 (B) = byte thaáp cuûa (A)* (B)
DIV AB	 (1;4)	: chia (A) cho (B) ,keát quaû:
	 ( A) = thöông soá 
	 (B) = soá dö
DA A	 (1;1)	: hieäu chænh thaäp phaân thanh ghi A
	b) Nhoùm leänh luaän lyù:
ANL A,Rn	(1;1)	: (A) =(A) and (Rn)
ANL	A,data	(2;1)	: (A) =(A) and (data)
ANL	A,@Ri	(1;1)	: (A) = (A) and ((Ri))
ANL	A,#data	(2;1)	: (A) = (A) and #data
ANL	data,A	(2;1)	: (data) = (data) and (A)
ANL	data,#data	(3;2)	: (data) =(data) and #data
ANL	C,bit	(2;2)	: (C) =(C) and (bit)
ANL	C, bit	(2;2)	: (C) =(C) and not (bit)
ORL	A,Rn	(1;1)	: (A) = (A) or (Rn)
ORL	A,data	(2;1)	: (A) = (A) or data
ORL	A,@Ri	(1;1)	: (A) = (A) or ((Ri))
ORL	A,#data	(2;1)	: (A) = (A) or #data
ORL	data,A	(2;1)	: (data) = (data) or (A)
ORL	data,#data	(3;2)	: (data ) = (data) or # data
ORL	C,bit	(2;2)	: (C) = (C) or bit
ORL	C,/bit	(2;2)	: (C) = (C) or not bit
XRL	A,Rn	(1;1)	: (A) =(A) xor (Rn)
XRL	A,data	(2;1)	: (A) = (A) xor (data)
XRL	A,@Ri	(1;1)	: (A) = (A) xor ((Ri))
XRL	A,#data	(2;1)	: (A) = (A) xor #data
XRL	data,A	(2;1)	: (data) = (data) xor (A)
 XRL	data,#data	(3;2)	: (data) = (data) xor #data
SETB	C	(1;1)	: (C) =1
SET	bit	(2;1)	: (bit) = 1
CLR	A	(1;1)	: (A) = 0
CLR	bit	(2;1)	: (bit) =0
CLR	C	(1;1)	: (C) = 0
CPL	A	(1;1)	: (A) = not (A)
CPL	C	(1;1)	: (C) = not (C)
CPL	bit	(2;1)	: (bit) = not (bit)
RL	A	(1;1)	: quay traùi noäi dung thanh ghi A
RLC	A	(1;1)	: quay traùi noäi dung thanh ghi A 
RR	A	(1;1)	: quay phaûi noäi dung thanh ghi A
RRC	A	(1;1)	: quay phaûi noäi dung thanh ghi A 
 qua côø nhôù
SWAP	A	(1;1)	: quay traùi noäi dung thanh ghi A 
 moät nibble
	c) Nhoùm leänh chuyeån döõ lieäu :	
MOV	A,Rn	(1;1)	: (A) =(Rn)
MOV	A,data	(2;1)	: (A) = (data)
MOV	A,@Ri	(1;1)	: (A) = ((Ri))
MOV	A,#data	(2;1)	: (A) = #data
MOV	Rn,A	(1;1)	: (Rn) = (A)
MOV	Rn,data	(2;2)	: (Rn) = (data)
MOV	Rn,#data	(2;1)	: (Rn) = #data
MOV	data,A	(2;1)	:(data) = (A)
MOV	data,Rn	(2;2)	: (data) = (Rn)
MOV	data,data	(3;2)	: (data) = (data)
MOV	data,@Ri	(2;2)	: (data) = ((Ri))
MOV	data,#data	(3;2)	: (data) = #data
MOV	@Ri,A	(1;1)	: ((Ri)) = (A)
MOV	@Ri,data	(2;2)	: ((Ri)) = (data)
MOV 	@Ri,#data	(2;1)	: ((Ri)) = #data
MOV	DPTR,#data16 (3;2)	: (DPTR) = #data16
MOV	C,bit	(2;1)	: (C) = (bit)
MOV	bit,C	(2;2)	: (bit) = (C)
MOVC A,@A+DPTR (1;2)	: (A) = ((A)+(DPTR))
MOVC A,@A+PC	 (1;2)	: (A) = ((A)+(PC))
MOVX A,@Ri	 (1;2)	: chuyeån döõ lieäu ngoaøi 8 bít 
 vaøo thanh ghi A .
MOVX A,@DPTR (1;2)	: chuyeån döõ kieäu ngoaøi 16 bit vaøo 
 thanh ghi A.
MOVX @Ri,A	 (1;2)	: chuyeån noäi dung thanh ghi A ra döõ 
 lieäu ngoaøi 8 bit ñòa chæ. 
MOVX @DPTR,A (1;2)	: chuyeån noäi dung thanh ghi A ra döõ 
 lieäu ngoaøi 16 bit ñòa chæ.
PUSH	 data	 (2;2)	: (SP) =(SP) +1
	 ((SP)) = (data)
POP data	(2;2)	: (data) = ((SP))
	 (SP) = (SP) -1
XCH	A,Rn	(1;1)	: trao ñoåi döõ lieäu giöõa thanh ghi Rn 
 vaø thanh ghi A.
XCH	A,data	(2;1)	: trao ñoåi giöûa thanh ghi A vaø data.
XCH	A,@Ri	(1;1)	: trao ñoåi giöõa thanh ghi A vaø moät 
 	 döõ lieäu giaùn tieáp. 
XCHD	A,@Ri	(1;1)	: trao ñoåi giöõa nibble thaáp 
cuûa thanh ghi A vaø nibble thaáp cuûa byte döõ lieäu giaùn tieáp.
d) Nhoùm leänh chuyeån ñieàu khieån :
ACALL	addr11	(2;2) : Goïi chöông trình con duøng ñòa
 chæ tuyeät ñoái.
LCALL	addr16	(3;2)	: Goïi chöônhg trình con duøng ñòa chæ daøi.
RET	(1;2)	: Trôû veà töø leänh goïi chöông trình 
	 con	
RETI	(1;2)	:Trôû veà töø leänh goïi ngaét
AJMP	addr11	(2;2)	: Nhaûy tuyeät ñoái 
LJMP	addr16	(3;2)	: Nhaûy daøi 
SJMP	rel	(2;2)	: Nhaûy ngaén
JMP @A+DPTR	(1;2)	: Nhaûy giaùn tieáp töø con troû döõ lieäu
JZ	 rel	(2;2)	: Nhaûy neáu A baèng 0
JNZ	rel	(2;2)	: Nhaûy neáu A khoâng baèng khoâng
JC	 	rel	(2;2)	: Nhaûy neáu côø nhôù ñöôïc ñaët
JNC	rel	(2;2)	: Nhaûy neáucôø nhôù khoâng ñöôïc ñaët 
JB	 	bit,rel 	(3;2) 	: Nhaûy töông ñoái neáu bit tröïc tieáp ñöôïc ñaët
JNB	bit,rel	(3;2)	: Nhaûy neáu bit khoâng ñöôïc ñaët
JBC	bit, rel	(3;2)	: Nhaûy töông ñoái neáu bit tröïc tieáp ñöôïc 
 ñaët roài xoùa bit
CJNE	A,data,rel	(3;2)	: So saùnh döõ lieäu tröïc tieáp vôùi A 
 vaø nhaûy neáu khoâng baèng 
CJNE A,#data,rel	(3;2)	: So saùnh döõ lieäu öùc thôøi vôùi Avaø nhaûy neáu 
 	 khoâng baèng
CJNE Rn,#data,rel	(3;2)	: So saùnh döõ lieäu töùc thôøi vôùi (Rn) vaø nhaûy 
 neáu khoâng baèng	
CJNE @Ri,#data,rel	(3;2)	: So saùnh döõ lieäu töùc thôøi vôùi 
döõ lieäu giaùn tieáp vaø nhaûy neáu khoâng baèng	
DJNZ Rn,rel	(2;2)	: Giaûm thanh ghi Rn vaø nhaûy neáu 
 	 khoâng baèng khoâng	
DJNZ data,rel	(3;2)	: Giaûm döõ lieäu tröïc tieáp vaø nhaûy 
 neáu khoâng baèng 	
B.	 GIÔÙI THIEÄU CAÙC IC SÖÛ DUÏNG TRONG ÑEÀ TAØI
&
PPI 8255 ( Programing Peripheral Interface ):
Caáu truùc toång quaùt: 
Ñeäm data
Kieåm soaùt ñoïc ghi
Ñieàu khieån nhoùm B
Ñieàu khieån nhoùm A
Nhoùm A
Port A
Nhoùm A
½ port C
Nhoùm B
½ port C
Nhoùm B
 Port B
RD 
WR
CS
RST
A1
A2	 WR	 CS	PB0¸P	B7	 RTS	 A0
A 1	RD	 WR	 CS	PB0¸P	B7	 RTS	 A0
A 1	 WR	 CS	PB0¸P	B7	 RTS	 A0
A 1
PC0¸PC3	
PA0¸PA7	
PC4¸P	C7
PB0¸PB7
Bus data
D0¸D7
Boä ñeäm truyeàn data : Boä ñeäm 8 bit , hai chieàu , ba traïng thaùi duøng ñeå giao tieáp bus data 8255 vôùi bus data CPU.
Boä kieåm soaùt ñoïc ghi : kieåm soaùt taát caû söï truyeàn ñaït beân trong vaø ngoaøi cuûa töø ñieàu khieån vaø data nhaän tín hieäu A0,A1 töø bus ñòa chæ , caùc tín hieäu RD ,WR, CS, RST töø bus ñòa chæ phaùt ra caùc leänh cho hai nhoùm A vaø B
Khoái töø ñieàu khieån : Ñeå ñieàu khieån hoaït ñoäng hai nhoùm A vaø B ta phaûi xuaát töø ñieàu khieån ñeán thanh ghi ñieàu khieån 8255 , töø ñieàu khieån bao goàm caùc thoâng tin veà choïn mode , set bit ,reset bit… Noù seõ khoûi ñoäng caáu hình hoaït ñoäng cho 8255, thanh ghi ñieàu khieån chæ ghi vaøo chöù khoâng ñoïc ra ñöôïc.
Caùc port : 8255 goàm 3 port , kyù hieäu A,B,C, moãi port goàm 8 bit coù theå laäp trình ñöôïc ñeå xaùc ñònh cheá ñoä hoaït ñoäng thích hôïp, caùc port A vaø B goàm boä ñeäm choát ngoõ ra 8 bit vaø choát ngoõ vaøo 8 bit. Port C coù choát ngoõ ra 8bit vaø ñeäm khoâng choát ngoõ vaøo 8 bit , port C ñöôïc phaân ra laøm hai phaàn : 4 bit cao PC4¸PC7 cuøng vôùi port A hình thaønh nhoùm A, boán bit thaáp PC0¸PC4 cuøng port B hình thaønh nhoùm B .
Caùc tín hieäu ñieàu khieån :
+ CS :choïn chip , tích cöïc möùc 0
+ RD :ñoïc data , tích cöïc möùc 0
+ WR : ghi data, tích cöïc möùc 0
+ RST : Reset, xoùa caùc thanh ghi ñieàu ñieàu khieån vaø caùc port A, B ,C veà mode nhaäp , tích cöïc möùc 1.
+ Choïn mode:
	A1	A0	port
	 0	 0	 A
	 0	 1	 B
	 1	 0	 C
	 1	 1	 töø ñieàu khieån
- Nguoàn cung caáp : 5V
l 8255 coù nhieàu mode laøm vieäc , tuy nhieân mode laø mode ñöôïc söû duïng phoå bieán trong caùc öùng duïng cuûa noù, ñaây laø mode xuaát nhaäp ñôn giaûn : caùc port coù theå ñöôïc laäp trình laø ngoõ vaøo hay ngoõ ra.
PC¸PC3
0:out put, 1: input
Port B
0:output, 1: input
Mode nhoùm A
00:mode0,01:mode 1
Mode nhoùm B:
O:mode 0, 1:mode 1
PC4¸PC7
0:output,1 : input
Port A
0:output, 1: input
Choïn mode
0: BSR mode
1: I/O mode
D7 D6 D5 D4 D3 D2 D1 D0
l Khôûi ñoäng 8255:
Ñeå hoaït ñoäng ñaàu tieân ta phaûi khôûi ñoäng 8255: khôûi ñoäng 8255 laø ghivaøo töø ñieàu khieån moät giaù trò thích hôïp ñeå choïn mode laøm vieäc , qui ñònh ngoõ vaøo , ngoõ ra cho caùc port.
lTöø ñieàu khieån : ( hình veõ treân )
II. RAM 62256:
Boä nhôù Ram thöôøng ñöôïc duøng trong caùc thieát bò tính ñeå caát giöõ caùc keát quaû trung gian hay keát quaû taïm thôøi trong khi thöïc hieän caùc chöông trình ñieàu khieån.
- Dung löôïng :32kbyte. 
Töø D0® D7 :Data
Töø A0®A14 : Ñòa chæ
Chaân /CE: cho pheùp RAM xuaát nhaäp data .
Chaân /WE =0 : cho pheùp RAM ghi data 
Chaân /OE = 0 : cho pheùp RAM xuaát data.
Sô ñoà chaân linh kieän :
III. IC 75176:
 Laø IC chuyeån ñoåi tín hieäu ñieän aùp so vôùi mass thaønh tín hieäu ñieän aùp vi sai .
Sô ñoà chaân linh kieän :	
IV. MAX 232:
Laø vi maïch chuyeån ñoåi tín hieäu theo chuaån RS232 sang chuaån TTL vaø ngöôïc laïi.
Trong thöïc teá coù raát nhieàu vi maïch chuyeån ñoåi töø RS_232 sang TTL vaø ngöôïc laïi. Theá nhöng MAX232 coù öö ñieåm hôn caùc vi maïch khaùc vaø raát phoå bieán hieän nay, öu ñieåm cuûa MAX 232 laø chæ söû duïng nguoàn ñôn cöïc +5V.
Beân trong MAX 232 coù moät boä nhaân ñoâi ñieän aùp ñeå taïo ra ñieän aùp +10V vaø moät boä taïo ra ñieän aùp aâm. Nhö vaäy noù taïo ra boä nguoàn +/-10V,ñaùp öùng ñöôïc möùc ñieän aùp cho RS_232.
Sô ñoà chaân linh kieän :
Giaûi thích tín hieäu :
R2IN: ngoõ vaøo RS_232 ®R2OUT: ngoõ ra TTL
T2OUT: ngoõ ra RS_232¬T2IN: ngoõ vaøo TTL
R1IN: ngoõ vaøoRS_232®R1OUT: ngoõ ra TTL
T1OUT : ngoõ ra RS_232®T1 IN :ngoõ vaøo TTL
C1+, C1-: tuï C1= 10mF beân ngoaøi
C2+, C2-: tuï C2= 10mF beân ngoaøi
+V: nguoàn +10V
-V: nguoàn -10V
VCC,GND: nguoàn cung caáp ñôn cöïc +5V
IC 74573 :
Laø IC choát coù ngoõ ra 3 traïng thaùi.
sô ñoà chaân vaø baûng söï thaät :
OC
C
Input (D)
Output (Q)
L
H
H
H
L
H
L
L
L
L
X
Q1
H
X
X
Z
IC 74138 : 
Laø IC giaûi maõ 3 sang 8. Coù ngoõ ra tích cöïc möùc thaáp
Sô ñoà chaân vaø baûng söï thaät :
INPUTS
OUTPUTS
ENABLE
SELECT
G1 G2
C B A
Y0
Y1
Y2
Y3
Y4
Y5
Y6
Y7
X H
X X X
H
H
H
H
H
H
H
H
L X
X X X
H
H
H
H
H
H
H
H
H L
L L L
L
H
H
H
H
H
H
H
H L
L L H
H
L
H
H
H
H
H
H
H L
L H L
H
H
L
H
H
H
H
H
H L
L H H
H
H
H
L
H
H
H
H
H L
H L L
H
H
H
H
L
H
H
H
H L
H L H
H
H
H
H
H
L
H
H
H L
H H L
H
H
H
H
H
H
L
H
H L
H H L
H
H
H
H
H
H
H
L
VII . IC74LS393. 
 IC naøy coù 2 keânh 1, moãi keânh laø 1 boä ñeám 4 bit, ñöôïc duøng laøm boä ñeám, chia taàn soá, caùc öùng duïng khaùc. Moãi boä ñeám chöùa 4 Fiplop beân trong. Caùc Fiplop naøy ñöôïc kích caïnh xuoáng vaøo ngoõ A.
Chöông trình ñieàu khieån
	PORTA1 	EQU	4000H
	PORTB1	EQU 	4001H
	PORTC1	EQU 	4002H
	CTRWL1 	EQU 	4003H
	AL	EQU	30H
	AH	EQU	31H
	BL	EQU	32H
	BH	EQU	33H
	XL	EQU	34H
	XH	EQU	35H
	YL	EQU	36H
	YH	EQU	37H
	ZL	EQU	38H
	ZH	EQU	39H
	TEMP	EQU	40H
	KPL	EQU	41H
	KPH	EQU	42H
	EORL	EQU	43H
	EORH	EQU	44H
	DUTY_CYCLE	EQU	45H
	PULSL	EQU	46H
	PULSH	EQU	47H
	PULFL	EQU	48H
	PULFH	EQU	49H
	CONSTN	EQU	50H
	CONSTD	EQU	51H
	TEMP2L	EQU	52H
	TEMP2H	EQU	53H
	TEMP3L	EQU	54H
	TEMP3H	EQU	55H
	CL	EQU	56H
	CH	EQU	57H
	CBC	EQU	58H
	DU	EQU	59H
	TEMP4L	EQU	60H
	SCKP1	EQU	61H
	SCKP2	EQU	62H
	LD1L	EQU	63H
	LD1H	EQU	64H
	CDAIT	EQU	65H
	CDAIC	EQU	66H
	SLCATT	EQU	67H
	SLCATC	EQU	68H
	TGCATT	EQU	69H
	TGCATC	EQU	6AH
	ORG	0000H
	JMP	MAIN
	ORG	001BH
	LJMP	ISR_TOKP
	ORG	0030H
	MAIN:	CALL	NAP_DULIEU
	CALL	INIT
	SETB	TF1
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
	;DIEU KHIENDONG CO, DAO CAT
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
AGAIN:	CALL	PWM
	CALL DISPLAY
	JNB	03H,AGAIN
	CLR 	ET1
	MOV	 A,#80H
	;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
	; NGAT DAO CAT
	;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
	MOV	 DPTR,#CTRWL1
	MOVX @DPTR,A
	INC	3EH
	MOV	A,3EH
	CJNE	A,SLCATT,AGAIN4
	AGAIN4:	JNC	AGAIN3
	MOV	A,3EH
	MOV	B,#10
	DIV	AB
	SWAPA
	ORL	A,B
	MOV	3CH,A
	MOV	6EH,#100
AGAIN1:	CALL	PWM
	CALL DISPLAY
	MOV	6FH,#100
	DJNZ 6FH,$
	DJNZ	6EH,AGAIN1
	MOV 	DPTR,#CTRWL1
	MOV 	 A,#02H
	MOVX @DPTR,A	 
	MOV	 A,#03H
	MOVX @DPTR,A
	MOV	 A,#02H
	MOVX @DPTR,A
	;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
	; DONG DAO CAT
	;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
	MOV	 A,#90H
	MOV	 DPTR,#CTRWL1
	MOVX @DPTR,A
	CLR	03H
	SETB 	 ET1
	JMP	 AGAIN	
	AGAIN3:	MOV	 A,#80H
	MOV	 DPTR,#CTRWL1
	MOVX @DPTR,A	
	CALL PWM
	CALL DISPLAY	
	SJMP AGAIN3
	RET
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
	INIT:	MOV	TMOD,#11H
	MOV	TH1,#HIGH(-10000)
	MOV	 TL1,#LOW(-10000)
	SETB	 TR1
	MOV	 IE,#88H
	MOV	 A,#100
	MOV	 B,#24
	DIV	 AB
	CLR 00H
	CLR	 01H
	CLR	 02H
	CLR	 03H
	CLR 	 10H
	CLR 	 11H
	CLR 	 12H
	CLR 	 13H
	CLR 	 14H
	CLR 	 15H
	SETB	 30H
	CLR	 31H
	CALL	 DKD
	MOV	 5AH,#1
	MOV	 5BH,#0
	MOV	 5CH,#0
	MOV 	 5DH,#0
	MOV 	 5EH,#0
	MOV	 5FH,#0
	MOV	7CH,#0
	MOV	7DH,#2	;VI TRI LED TRUY XUAT
	MOV	7EH,#0
	MOV	7FH,#0
	MOV	3CH,#0
	MOV	3EH,#0
	MOV	DUTY_CYCLE,#0
	MOV	3DH,#1
	MOV	4AH,#40H
	MOV	4BH,#30H
	MOV	4CH,#20H
	MOV	4DH,#10H
	MOV	4EH,#60H
	MOV	4FH,#50H
	MOV	R0,#3AH
	MOV	R1,#4AH
	MOV 	R3,#0
	MOV	CONSTN,A
	MOV	CONSTD,B
	MOV	PULSL,CDAIT
	MOV	PULSH,CDAIC
	MOV	PULFL,#00H
	MOV	PULFH,#00H
	MOV	KPL,#1
	MOV	KPH,#0
	MOV	 A,#92H	
	MOV	 DPTR,#CTRWL1
	MOVX 	@DPTR,A
	MOV 	A,#05H
	MOVX 	@DPTR,A
	MOV 	A,#07H
	MOVX 	@DPTR,A
	MOV 	A,#02H
	MOVX 	@DPTR,A
	MOV 	A,#03H
	MOVX 	@DPTR,A
	MOV 	A,#02H
	MOVX 	@DPTR,A
	MOV	 A,#90H
	MOV	 DPTR,#CTRWL1
	MOVX 	@DPTR,A
	RET
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
	; CT NGAT ISR_TOKP 
	;DOC XUNG,TINH TOAN DUTY_CYCLE 
	;CHU KI NGAT 10mS
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
	ISR_TOKP:	CLR	TR1
	MOV	TL1,#LOW(-10000)
	MOV	TH1,#HIGH(-10000)
	SETB	TR1
	CALL	DOC_XUNG
	MOV	PULFL,R6
	MOV	PULFH,R7
	MOV	XL,PULSL
	MOV	XH,PULSH
	MOV	YL,PULFL
	MOV	YH,PULFH
	CALL	SUBB16
	MOV	EORL,ZL
	MOV	EORH,ZH
	MOV 	AL,EORL
	MOV	AH,EORH
	MOV	BL,#0
	MOV	BH,#0
	CALL 	COMPAB
	JNB	01H,EXIT7
	JMP	LABEL
	EXIT7:	LJMP	EXIT2
	;LENH THUC HIEN KHI A>B	
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
	;TEMP2:=TEMP2H:TEMP2L:=E[N]*KP
	LABEL:	MOV	XL,EORL
	MOV	XH,EORH
	MOV	YL,KPL
	MOV	YH,KPH
	CALL	MUL_16
	MOV	TEMP2L,ZL
	MOV	TEMP2H,ZH
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
	;(CONST:=CONSTD:CONSTN:=100/(Umax=24))*TEMP2
	MOV	XL,ZL
	MOV	XH,ZH
	MOV	YL,CONSTN
	MOV	YH,#0
	CALL	MUL_16
	MOV	TEMP3L,ZL
	MOV	TEMP3H,ZH
	MOV	XL,TEMP2L
	MOV	XH,TEMP2H
	MOV	YL,CONSTD
	MOV	YH,#0
	CALL	MUL_16
	MOV	R6,ZL
	MOV	R7,ZH
	MOV	B,#24
	CALL	DIV_16_8
	MOV	XL,R6
	MOV	XH,R7
	MOV	YL,TEMP3L
	MOV	YH,TEMP3H
	CALL	ADD16
;TRUONG HOP TREN TINH VOI KP=(1....9)
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *	
;DUOI DAY SE TINH THEM CHO SO CHIA CUA KP	
	MOV 	CL,#1
	MOV 	CH,#0
	MOV 	XL,ZL
	MOV 	XH,ZH
	MOV	CBC,SCKP1
	CALL	TG_DUNG
	MOV 	CL,#1
	MOV 	CH,#0
	MOV 	XL,ZL
	MOV 	XH,ZH
	MOV	CBC,SCKP2
	CALL	TG_DUNG
	MOV	DUTY_CYCLE,ZL
	MOV 	AL,DUTY_CYCLE
	MOV	AH,#0
	MOV	BL,#50
	MOV	BH,#0
	CLR	01H
	CALL 	COMPAB
	CLR	00H
	CLR	02H
	JNB	01H,LABEL2
	MOV	DUTY_CYCLE,LD1T
	CLR	01H	
LABEL2:	MOV	R5,DUTY_CYCLE
	CJNE	R5,#7,STOP
STOP:	JNC	EXIT2	
	MOV	DUTY_CYCLE,#0
	CLR	ET1
	SETB 	03H
	JMP	EXIT4
	CLR	01H
EXIT2:	JNB	02H,EXIT3
;LENH THUC HIEN KHI A<B
	MOV 	DUTY_CYCLE,#0
	CLR 	02H
EXIT3:	JNB	00H,EXIT4
;LENH THUC HIEN KHI A=B
	MOV	DUTY_CYCLE,#0
	CLR	00H
EXIT4:	MOV	R7,#0
	MOV	R6,DUTY_CYCLE	
	ACALL	 BINTOBCD	
	CALL	CDL
	RETI
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;CT CON DOC_XUNG
;DOC XUNG TU PORTA,B CUA 8255
; NGO RA PC1,PC2,PC3 DIEU KHIEN XOA,CHOT XUNG KHI LAY XUNG
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 DOC_XUNG:	MOV 	A,#04H
	MOV 	DPTR,#CTRWL1
	MOVX 	@DPTR,A
	MOV 	A,#06H
	MOV 	DPTR,#CTRWL1
	MOVX 	@DPTR,A
	MOV 	DPTR,#PORTA1
	MOVX 	A,@DPTR
	MOV 	R6,A
	MOV 	A,#05H
	MOV 	DPTR,#CTRWL1
	MOVX 	@DPTR,A
	MOV 	DPTR,#PORTB1
	MOVX 	A,@DPTR
	MOV 	R7,A	
	MOV 	A,#07H
	MOV 	DPTR,#CTRWL1
	MOVX 	@DPTR,A
	RET
;*****************************************************************
;CHUONG TRINH CON DIEU RONG XUNG
; CHU KI DIEU RONG T= 200*R3uS
; T1\T*100= DUTY_CYCLE
;THOI GIAN THUC THI LA 1324uS
;*****************************************************************
	PWM:	MOV	 R2, DUTY_CYCLE
	CJNE	 R2,#01H,MAIN_L2
MAIN_L2:	JC	 MAIN_L3	
	MOV	 A,#01H
	MOV	 DPTR,#CTRWL1
	MOVX 	@DPTR,A
	ACALL	 DELAY
MAIN_L3:	MOV 	A,#100
	SUBB 	 A,DUTY_CYCLE
	MOV	 R2,A
	CJNE 	 R2,#01H,MAIN_L4
MAIN_L4:	 	JC	 MAIN_L5
	MOV	 A,#00H
	MOV	 DPTR,#CTRWL1
	MOVX	 @DPTR,A
	ACALL 	 DELAY
MAIN_L5:	RET
;*****************************************************************
	DELAY:	 MOV R3,#5	
	DELAY_L1: 	DJNZ R3,DELAY_L1
	 	DJNZ R2,DELAY
	 	RET
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
;Chuong trinh so sanh 2 so 16 bit
;	A=AHAL	B=BHBL
;	IF	A>B	THEN	00 =1
;	IF	A<B	THEN	01 =1
;	IF	A=B	THEN	02 =1
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
COMPAB:	MOV	A,AH
	CJNE	A,BH,BIGGER
	MOV	A,AL
	CJNE	A,BL,BIGGER
	SETB	00H	;	A=B
	JMP 	EXIT
BIGGER:	JC	SMALLER	
	SETB	01H
	JMP	EXIT
SMALLER:	JNC	EXIT
	SETB	02H
	EXIT:	RET
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
;Chuong trinh cong 2 so 16 bit
;INPUT 	 	X=XH_XL
;	Y=YH_YL
;OUT PUT	Z=X+Y
;	Z=ZH_ZL
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
ADD16: 	MOV	 A,XL
	ADD 	 A,YL
	MOV	 ZL,A
	MOV 	A,XH
	ADDC 	A,YH
	MOV 	ZH,A
	RET
;*****************************************************************
	;CHUONG TRINH TRU HAI SO NGUYEN 16 BIT
;INPUT 	 X=XH_XL
;	Y=YH_YL
;OUT PUT	Z=X-Y
;	Z=ZH_ZL
;*****************************************************************
SUBB16: 	MOV 	A,XL
	SUBB 	A,YL
	MOV 	ZL,A
	MOV 	A,XH
	SUBB 	A,YH
	MOV 	ZH,A
	RET
;*****************************************************************
;CHUONG TRINH NHAN HAI SO NGUYEN 16 BIT
;INPUT 	 X=XH_XL
;	Y=YH_YL
;OUT PUT	Z=X*Y
;	Z=ZH_ZL
;*****************************************************************
MUL_16:	MOV 	A,XL
	MOV 	TEMP,A
	MOV 	B,YL
	MUL 	AB
	MOV 	ZL,A
	MOV 	A,YL
	XCH 	A,B
	XCH 	A,XH
	MUL 	AB
	ADD 	A,XH
	MOV 	XH,A
	MOV	A,XH
	MOV 	A,YH
	MOV 	B,TEMP
	MUL 	AB
	ADD 	A,XH
	MOV 	ZH,A
	RET
;*****************************************************************
;CHUONG TRINH CHIA 1 S0 16 BIT CHO 1 SO 8 BIT
;INPUT 	 SO(16BIT) BI CHIA R7:R6	SO CHIA 8 BIT THANH GHI B
;OUT PUT	R7:R6=KET QUA CAN CHIA	B: SO DU
;*****************************************************************
DIV_16_8:	PUSH 	02H
	PUSH 	ACC
	MOV 	R2,#16
	CLR 	A
DIVIDE:	XCH 	A,R6
	CLR	 C
	RLC	 A
	XCH 	A,R6
	XCH 	A,R7
	RLC 	A
	XCH 	A,R7
	RLC	 A
	CJNE 	A,B,NOT_EQUAL
	SJMP	 A_GREATER_EQ_B
NOT_EQUAL:	 JC	 BELOW
A_GREATER_EQ_B:
	SUBB	 A,B	
	XCH	 A,R6
	ORL	 A,#1
	XCH 	A,R6
BELOW: 	DJNZ	 R2,DIVIDE
	XCH	 A,B
	POP 	ACC	
	POP 	02H
	RET
;** *** *** *** **** *** *** ** ** *** ** ** ** *** *** *** *** ****** *** 
;CT CON DELAY 1000US, DUNG TIMER 0
;** *** *** *** **** *** *** ** ** *** ** ** ** *** *** *** *** ****** *** 
DELAY1:	 MOV 	TH0,#HIGH(-1000)
	MOV 	TL0,#LOW(-1000)
	SETB	 TR0
	JNB	 TF0,$
	CLR 	TR0
	CLR 	TF0
	RET
; *** *** *** **** *** *** ** ** *** ** ** ** *** *** *** *** ****** *** ** 
; CTC BINTOBCD
; CHUYEN DOI TU SO NHI PHAN 16 BIT (<9999) SANG SO BCD
;INPUT : 	R7:R6 = SO NHI PHAN 16 BIT
;OUTPUT: 	R7:R6 = SO BCD, R7:R6=NGHIN,TRAM ,CHUC ,DON VI
; *** *** *** **** *** *** ** ** *** ** ** ** *** *** *** *** ****** *** ** 
	BINTOBCD:
	 	PUSH	 ACC
	PUSH	 B
	MOV	 B,#10
	ACALL	 DIV_16_8
	PUSH	B
	MOV	 B,#10
	ACALL	 DIV_16_8
	PUSH	 B
	MOV 	B,#10
	MOV 	A,R6
	DIV	 AB
	PUSH 	B
	SWAP 	A
	POP	 B
	ORL 	A,B
	MOV 	R7,A
	POP 	ACC
	SWAP	 A
	POP 	B
	ORL 	A,B
	MOV	 R6,A	
	POP	 B
	POP 	ACC
	RET
;*****************************************************************
	;CT CON CDT,CDC,XUAT PHUC VU XUAT LED
;*****************************************************************
	CDT:	MOV 	A,@R0
	ANL	 A,#0FH
	RET
	CDC:	MOV 	A,@R0
	SWAP	 A
	ANL 	A,#0FH	
	RET
	XUAT:	ORL 	A,@R1
	MOV 	P1,A
	RET
;*****************************************************************
;CHUONG TRINH CHIA 1 S0 16 BIT CHO 1 SO 8 BIT
;INPUT 	 SO(16BIT) BI CHIA R7:R6	SO CHIA 8 BIT THANH GHI B
;OUT PUT	R7:R6=KET QUA CAN CHIA	B: SO DU	
;KET QUA SAI SO(O SO DU B) DOI VOI SO LE LON HON 128	
;*****************************************************************
	DIV_16_81:	PUSH	ACC
	MOV	A,B
	JNB	ACC.7,NH128
	JNB	ACC.0,EVEN
	INC	A
	CJNE	A,#0,EVEN
	MOV	A,#0FEH
	EVEN:	MOV	B,#2
	DIV	AB
	MOV	B,A
	MOV	TEMP4L,A
	CALL	DIV_16_8	
	MOV	DU,B
	MOV	B,#2
	CALL	DIV_16_8
	MOV	A,B
	JZ	LAMT1
	MOV	A,TEMP4L
	ADD	A,DU 
	MOV	B,A
	LAMT1:	POP	ACC
	JMP	EXIT5
	NH128:	CALL	DIV_16_8
	POP	ACC
	EXIT5:	RET
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 	
;CT CON TG_DUNG
;Chuong trinh tinh (A/B)*C=A1*C+B1*C/B=A1*C+A2*C+E(sai so)	(C<B)
;INPUT: 	A=XL:XH, B=B, C:YL:YH
;OUTPUT:	PHAN NGUYEN:ZL:ZH, PHAN DU B
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
	TG_DUNG:	MOV	R6,XL
	MOV	R7,XH
	MOV	B,CBC	
	CALL	DIV_16_81
	MOV	XL,R6
	MOV	XH,R7
	MOV	TEMP3L,B
	MOV	YL,CL
	MOV	YH,CH
	CALL	MUL_16
	MOV	TEMP2L,ZL
	MOV	TEMP2H,ZH
	MOV	XL,TEMP3L
	MOV	XH,#0
	MOV	YL,CL
	MOV	YH,CH
	CALL	MUL_16
	MOV	R6,ZL
	MOV	R7,ZH
	MOV	B,CBC
	CALL	DIV_16_81
	MOV	XL,R6
	MOV	XH,R7
	MOV	TEMP3H,B
	MOV	YL,TEMP2L
	MOV	YH,TEMP2H	
	CALL	ADD16
	MOV	B,TEMP3H
	RET
	CDL:	MOV	3AH,R6
	MOV	3BH,R7
	RET
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;CT CON HIEN THI CHIEU DAI KHI CAT
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
	DISPLAY:	MOV	A,3DH
	MOV	B,#2
	DIV	AB
	MOV	A,B
	CJNE	A,#0,ELSE
	CALL	CDC
	CALL	XUAT
	INC 	R0
	JMP	BQ1
	ELSE:	CALL	CDT
	CALL	XUAT
	BQ1:	INC	R1
	INC	3DH
	MOV	A,3DH
	CJNE	A,#7,ELSE1
	MOV	3DH,#1
	MOV	R0,#3AH
	MOV	R1,#4AH
	ELSE1:	RET
	DKD:	CLR 	26H
	CLR 	25H
	CLR 	24H
	CLR 	23H
	CLR 	22H
	CLR 	21H
	MOV	7AH,#200
	MOV	7BH,#200
	RET
;** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **
CHUONG TRINH CON NAP XUAT DU LIEU 
;** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **
	NAP_DULIEU:	NOP
	QUETPHIM:	MOV 	R2,#100
	BACK0:	JB 	P2.2,PHIM_1
;** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **
; TANG GIA TRI CAC LED(3->6) : 	 0 ->9->0
;TANG GIA TRI CAC LED(2) 	 :	 0 ->4->0
;** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **
	DJNZ 	R2,BACK0
	MOV	A,7DH 
	ADD	A,#59H	
	MOV	R0,A
	INC	@R0
	MOV	A,@R0
	CJNE	A,#10,$+7
	JC	$+4
	MOV	@R0,#0
	CJNE	R0,#5BH,$+10
	CJNE	A,#5,$+7
	JC	$+4
	MOV	@R0,#0
	NOP
;** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **
;HIEN THI LED 6 : 	NHAP NHAYKHI DUOC CHON
;	 	 :	KHONG NHAP NHAY KHI DUOC KHONG CHON
;** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **
PHIM_1:	JNB	26H,QLED6ON
	MOV	 A,5FH
	ORL	A,#00H
	MOV 	P1,A
	ACALL 	DELAY1
	DJNZ	7BH,QLED6OFF
	CLR	26H
	MOV	7BH,#200
	QLED6ON:	MOV	 A,5FH
	ORL 	A,#40H
	MOV 	P1,A
	ACALL 	DELAY1
	MOV	A,7DH
	CJNE	A,#6,QLED6OFF
	DJNZ 	7AH,QLED6OFF
	MOV	7AH,#200
	SETB	26H
	QLED6OFF:	MOV 	 R2,#100
;** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **
;GIAM GIA TRI CAC LED(3->6) : 	 9 ->0->9
;GIAM GIA TRI CAC LED(2) 	 :	 4 ->0->4
;XUAT LAI DATA DA NHAP THEO THU TU GIAM DAN THEO TUNG CHE ;DO
;** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **
BACK1:	JB	 P2.3,PHIM_2
	DJNZ 	R2,BACK1
	MOV	A,7DH
	ADD	A,#59H
	MOV	R0,A
	DEC	@R0
	MOV	A,@R0
	CJNE	A,#255,$+5
	MOV	@R0,#9
	CJNE	R0,#5BH,$+8
	CJNE	A,#255,$+5
	MOV	@R0,#4
	MOV	A,7DH
	CJNE	A,#2,$+7
	JNB	30H,$+4
	CALL	XUATDATA
	NOP
;** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **
;HIEN THI LED 5 : 	NHAP NHAYKHI DUOC CHON
;	 :	KHONG NHAP NHAY KHI DUOC KHONG CHON
;** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** 
PHIM_2:	JNB	25H,QLED5ON
	MOV	 A,5EH
	ORL	A,#00H
	MOV 	P1,A
	ACALL 	DELAY1
	DJNZ	7BH,QLED5OFF
	CLR	25H
	MOV	7BH,#200
	QLED5ON:	MOV	 A,5EH
	ORL 	A,#30H
	MOV 	P1,A
	ACALL 	DELAY1
	MOV	A,7DH
	CJNE	A,#5,QLED5OFF
	DJNZ 	7AH,QLED5OFF
	MOV	7AH,#200
	SETB	25H
	QLED5OFF:	MOV 	 R2,#100
;** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **
;CHON LED TU PHAI SANG TRAI :	6->2->6
;LED DUOC CHON NHAP NHAY
;** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **
BACK2:	JB	 P2.4,PHIM_3
	DJNZ	 R2,BACK2
	DEC 	7DH
	CALL 	DKD
	MOV	A,7DH
	CJNE	A,#2,$+8
	MOV	5AH,#1
	SETB	30H
	JMP	$+5
	MOV	5AH,#0
	CLR	30H
	MOV	A,7DH
	CJNE	A,#1,$+5
	MOV	7DH,#6
	NOP
;** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **
;HIEN THI LED 4 : 	NHAP NHAYKHI DUOC CHON
;	 :	KHONG NHAP NHAY KHI DUOC KHONG CHON
;** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** 
PHIM_3:	JNB	24H,QLED4ON
	MOV	 A,5DH
	ORL	A,#00H
	MOV 	P1,A
	ACALL 	DELAY1
	DJNZ	7BH,QLED4OFF
	CLR	24H
	MOV	7BH,#200
	QLED4ON:	MOV	 A,5DH
	ORL 	A,#20H
	MOV 	P1,A
	ACALL 	DELAY1
	MOV	A,7DH
	CJNE	A,#4,QLED4OFF
	DJNZ 	7AH,QLED4OFF
	MOV	7AH,#200
	SETB	24H
	QLED4OFF:	MOV 	 R2,#100
;** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **
;CHON LED TU TRAI SANGPHAI :	2->6->2
;LED DUOC CHON NHAP NHAY
;** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **
BACK3:	JB	P2.5,PHIM_4
	DJNZ 	R2,BACK3
	INC	 7DH
	CALL 	DKD
	MOV	A,7DH
	CJNE	A,#2,ST11
	MOV	5AH,#1
	SETB	30H
	ST11:	MOV	5AH,#0
	CLR	30H
	MOV	A,7DH
	CJNE	A,#7,ST
	MOV	7DH,#2
	ST:	NOP
;** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **
;HIEN THI LED3 : 	NHAP NHAYKHI DUOC CHON
;	 :	KHONG NHAP NHAY KHI DUOC KHONG CHON
;** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **
PHIM_4:	JNB	23H,QLED3ON
	MOV	 A,5CH
	ORL	A,#00H
	MOV 	P1,A
	ACALL 	DELAY1
	DJNZ	7BH,QLED3OFF
	CLR	23H
	MOV	7BH,#200
	QLED3ON:	MOV	 A,5CH
	ORL 	A,#10H
	MOV 	P1,A
	ACALL 	DELAY1
	MOV	A,7DH
	CJNE	A,#3,QLED3OFF
	DJNZ 	7AH,QLED3OFF
	MOV	7AH,#200
	SETB	23H
	QLED3OFF:	MOV 	 R2,#100
;** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **
;LUU GIA TRI CAN NAP THEO TUNG CHE DO
;** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **
BACK4:	JB	 P2.6,PHIM_5
	DJNZ	 R2,BACK4
	INC	5AH
	MOV	A,5AH
	MOV	B,#2
	DIV	AB
	MOV	A,B
	CJNE	A,#0,$+8
	MOV	5AH,#0
	CLR	30H
	JMP	$+7
	MOV	5AH,#1
	SETB	30H	
	CALL	NAPDATA	
	NOP
;** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **
;HIEN THI LED2 : 	NHAP NHAYKHI DUOC CHON
;	 :	KHONG NHAP NHAY KHI DUOC KHONG CHON
;	CHI DINH CHE DO TU : 0->4	
;** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **
PHIM_5:	JNB	22H,QLED2ON
	MOV	 A,5BH
	ORL	A,#00H
	MOV 	P1,A
	ACALL 	DELAY1
	DJNZ	7BH,QLED2OFF
	CLR	22H
	MOV	7BH,#200
	QLED2ON:	MOV	 A,5BH
	ORL 	A,#60H
	MOV 	P1,A
	ACALL 	DELAY1
	MOV	A,7DH
	CJNE	A,#2,QLED2OFF
	DJNZ 	7AH,QLED2OFF
	MOV	7AH,#200
	SETB	22H
	QLED2OFF:	MOV 	 R2,#100
;** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **
; KET HOP VOI LED1=1 THOAT KHOI CHUONG TRINH NHAP DATA
;** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **
BACK5:	JB 	P2.7,THOAT
	DJNZ	 R2,BACK5
	INC	7FH
	MOV	A,7FH
	MOV	B,#2
	DIV	AB
	MOV	A,B
	CJNE	A,#0,$+8
	MOV	7FH,#0
	CLR	31H
	JMP	$+5
	MOV	7FH,#1
	SETB	31H	
	NOP
;** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **
;HIEN THI LED1 : 	GOM 2 GIA TRI (0,1)
;	0: NAP GIA TRI ,0->1 :LUU GIA TRI
;	1:KET HOP VOI PHIM 5 XEM DATA DA NHAP
;** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **
THOAT:	JNB	21H,QLED1ON
	MOV	 A,5AH
	ORL	A,#00H
	MOV 	P1,A
	ACALL 	DELAY1
	DJNZ	7BH,QLED1OFF
	CLR	21H
	MOV	7BH,#200
	QLED1ON:	MOV	 A,5AH
	ORL 	A,#50H
	MOV 	P1,A
	ACALL 	DELAY1
	MOV	A,7DH
	CJNE	A,#1,QLED1OFF
	DJNZ 	7AH,QLED1OFF
	MOV	7AH,#200
	SETB	21H
	QLED1OFF:	JNB	30H,$+3
	JMP	$+4
	JMP 	QUETPHIM
	JNB	31H,TTQP1
	CLR	30H
	CLR	31H
	MOV	7EH,#0
	MOV	7FH,#0
	JMP	$+3
TTQP1:	JMP 	QUETPHIM
	RET
;** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **
;CHUONG TRINH CON NHAP DATA
;** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **
	NAPDATA:	MOV	A,5BH
	CJNE	A,#0,NAPDATA0
	MOV	A,5EH
	SWAP	A
	ORL	A,5FH
	MOV	LENGTHL,A
	MOV	A,5CH
	SWAP	A
	ORL	A,5DH
	MOV	LENGTHH,A
NAPDATA0:	MOV	A,5BH
	CJNE	A,#1,NAPDATA1
	MOV	A,5EH
	SWAP	A
	ORL	A,5FH
	MOV	TGCCL,A
	MOV	A,5CH
	SWAP	A
	ORL	A,5DH
	MOV	TGCCH,A
NAPDATA1:	MOV	A,5BH
	CJNE	A,#2,NAPDATA2
	MOV	A,5EH
	SWAP	A
	ORL	A,5FH
	MOV	SLCCL,A
	MOV	A,5CH
	SWAP	A
	ORL	A,5DH
	MOV	SLCCH,A
NAPDATA2:	MOV	A,5BH
	CJNE	A,#3,NAPDATA3
	MOV	A,5EH
	SWAP	A
	ORL	A,5FH
	MOV	SCKP1,A
	MOV	A,5CH
	SWAP	A
	ORL	A,5DH
	MOV	SCKP2,A
NAPDATA3:	MOV	A,5BH
	CJNE	A,#4,NAPDATA4
	MOV	A,5EH
	SWAP	A
	ORL	A,5FH
	MOV	LD1L,A
	MOV	A,5CH
	SWAP	A
	ORL	A,5DH
	MOV	LD1H,A
NAPDATA4:	NOP
	RET
;** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **
;CHUONG TRINH CON XUAT DATA DA NHAP
;** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **
XUATDATA:	MOV	A,5BH
	CJNE	A,#0,XUATDATA0
	MOV	A,LENGTHL
	ANL	A,#0FH
	MOV	5FH,A
	MOV	A,LENGTHL
	SWAP	A
	ANL	A,#0FH
	MOV	5EH,A
	MOV	A,LENGTHH
	ANL	A,#0FH
	MOV	5DH,A
	MOV	A,LENGTHH
	SWAP	A
	ANL	A,#0FH
	MOV	5CH,A
	XUATDATA0:	MOV	A,5BH
	CJNE	A,#1,XUATDATA1
	MOV	A,TGCCL
	ANL	A,#0FH
	MOV	5FH,A
	MOV	A,TGCCL
	SWAP	A
	ANL	A,#0FH
	MOV	5EH,A
	MOV	A,TGCCH
	ANL	A,#0FH
	MOV	5DH,A
	MOV	A,TGCCH
	SWAP	A
	ANL	A,#0FH
	MOV	5CH,A
XUATDATA1:	MOV	A,5BH
	CJNE	A,#2,XUATDATA2
	MOV	A,SLCCL
	ANL	A,#0FH
	MOV	5FH,A
	MOV	A,SLCCL
	SWAP	A
	ANL	A,#0FH
	MOV	5EH,A
	MOV	A,SLCCH
	ANL	A,#0FH
	MOV	5DH,A
	MOV	A,SLCCH
	SWAP	A
	ANL	A,#0FH
	MOV	5CH,A
XUATDATA2:	MOV	A,5BH
	CJNE	A,#3,XUATDATA3
	MOV	A,SCKP1
	ANL	A,#0FH
	MOV	5FH,A
	MOV	A,SCKP1
	SWAP	A
	ANL	A,#0FH
	MOV	5EH,A
	MOV	A,SCKP2
	ANL	A,#0FH
	MOV	5DH,A
	MOV	A,SCKP2
	SWAP	A
	ANL	A,#0FH
	MOV	5CH,A
XUATDATA3:	MOV	A,5BH
	CJNE	A,#4,XUATDATA4
	MOV	A,LD1L
	ANL	A,#0FH
	MOV	5FH,A
	MOV	A,LD1L
	SWAP	A
	ANL	A,#0FH
	MOV	5EH,A
	MOV	A,LD1H
	ANL	A,#0FH
	MOV	5DH,A
	MOV	A,LD1H
	SWAP	A
	ANL	A,#0FH
	MOV	5CH,A
	XUATDATA4:	NOP
	RET
;** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **
;CT CON KIEM TRA 2 NUT STOP/START,PAUSE KHI CT DANG CHAY
;** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **
	Q1P:	MOV	R3,#100
	BACK7:	JB 	P2.7,EXITQ2P
	DJNZ 	2,BACK7
	SETB	31H
	EXITQ2P: 	NOP
	RET
	END