Luận văn tốt nghiệp 
 Mục lục
 
Chương I : Dẫn nhập
 I. Đặt vấn đề: 
 II. Mục đích yêu cầu: 
 1. Mục đích 
 2. Yêu cầu : 
 Chương II: Khảo sát vi điều khiển 8951
I. Cấu tạo vi điều khiển họ MSC-51 
1. Giới thiệu cấu trúc phần cứng họ MSC-51 (8951): 
2. Khảo sát sơ đồ chân 8951 và chức năng từng chân : 
3. Cấu trúc bên trong vi điều khiển 
II. Tóm tắt tập lệnh của 8951 : 
1. Các mode định vị (Addressing Mode) : 
2. Các kiểu lệnh (Instruction Types): 
 III. Chương trình ngôn ngữ Assembly của 8951: 
1. Giới thiệu : 
2. Hoạt động của trình biên dịch (Assembler Operation) 
3. Sự sắp đặt chương trình ngôn ngữ Assmebly : 
4. Sự tính toán biểu thức của Assemble Time (Assemble Time Expression Evaluation): 
5. Các chỉ thị biên dịch : 
 Chương III: Khảo sát vi mạch 8279
I. Cấu trúc phần cứng IC 8279 
II. Cấu trúc phần mềm của 8279 
 Chương IV: Giới thiệu kit vi điều khiển 8951
I. Sơ đồ khối kit vi điều khiển 8951: 
1. Đơn vị xử lý trung tâm : 
2. Bộ nhớ : 
 Chương V: Thiết kế phần mềm
 I. Giới thiệu : 
 II. Sơ đồ kết nối mạch nạp EPROM nội : 
 III. Khởi tạo cổng giao tiếp 8255 : 
 IV. Chương trình đọc dữ liệu từ EPROM nội : 
 V. Chương trình nạp EPROM nội : 
 VI. Chương trình xoá EPROM nội : 
Thi công mạch 
Hướng phát triển đề tài 
Kết luận 
Tài liệu tham khảo 
Phụ lục
                
              
                                            
                                
            
 
            
                 100 trang
100 trang | 
Chia sẻ: banmai | Lượt xem: 2108 | Lượt tải: 1 
              
            Bạn đang xem trước 20 trang tài liệu Khảo sát vi điều khiển 8951, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
(C) - (Rn)
	SUBB	A, direct	: (A) (A) - (C) - (direct)
	SUBB	A, @ Ri	: (A) (A) - (C) - ((Ri))
	SUBB	A, # data	: (A) (A) - (C) - # data
	INC 
	INC	A	: (A) (A) + 1
	INC	direct	: (direct) (direct) + 1
	INC	Ri	: ((Ri)) ((Ri)) + 1
	INC	Rn	: (Rn) (Rn) + 1
	INC	DPTR	: (DPTR) (DPTR) + 1
	DEC 
	DEC	A	: (A) (A) - 1
	DEC	direct	: (direct) (direct) - 1
	DEC	@Ri	: ((Ri)) ((Ri)) - 1
	DEC	Rn	: (Rn) (Rn) - 1
	MULL 	AB	: (A) LOW [(A) x (B)];coù aûnh höôûng côø OV
	: (B) HIGH [(A) x (B)];côø Cary ñöôïc xoùa.
	DIV	AB	: (A) Integer Result of [(A)/(B)]; côø OV
	: (B) Remainder of [(A)/(B)]; côø Carry xoùa
	DA	A	:Ñieàu chænh thanh ghi A thaønh soá BCD ñuùng trong pheùp coäng BCD (thöôøng DA A ñi keøm vôùi ADD, ADDC)
Neáu [(A3-A0)>9] vaø [(AC)=1] (A3A0) (A3A0) + 6.
Neáu [(A7-A4)>9] vaø [(C)=1] (A7A4) (A7A4) + 6.
2.2 Caùc hoaït ñoäng logic (Logic Operation):
Taát caû caùc leänh logic söû duïng thanh ghi A nhö laø moät trong nhöõng toaùn haïng thöïc thi moät chu kyø maùy, ngoaøi A ra maát 2 chu kyø maùy. Nhöõng hoaït ñoäng logic coù theå ñöôïc thöïc hieän treân baát kyø byte naøo trong vò trí nhôù döõ lieäu noäi maø khoâng qua thanh ghi A.
Caùc hoaït ñoäng logic ñöôïc toùm taét nhö sau:
	ANL 
	ANL	A, Rn	: (A) (A) AND (Rn).
	ANL	A, direct	: (A) (A) AND (direct).
	ANL	A,@ Ri	: (A) (A) AND ((Ri)).
	ANL	A, # data	: (A) (A) AND (# data).
	ANL	direct, A	: (direct) (direct) AND (A).
	ANL	direct, # data	: (direct) (direct) AND # data.
	ORL 
	ORL	A, Rn	: (A) (A) OR (Rn).
	ORL	A, direct	: (A) (A) OR (direct).
	ORL	A,@ Ri	: (A) (A) OR ((Ri)).
	ORL	A, # data	: (A) (A) OR # data.
	ORL	direct, A	: (direct) (direct) OR (A).
	ORL	direct, # data	: (direct) (direct) OR # data.
	XRL 
	XRL	A, Rn	: (A) (A) (Rn).
	XRL	A, direct	: (A) (A) (direct).
	XRL	A,@ Ri	: (A) (A) ((Ri)).
	XRL	A, # data	: (A) (A) # data.
	XRL	direct, A	: (direct) (direct) (A).
	XRL	direct, # data	: (direct) (direct) # data.
	CLR	A	: (A) 0
	CLR	C	: (C) 0
	CLR	Bit	: (Bit) 0
	RL	A	: Quay voøng thanh ghi A qua traùi 1 bit 
	(An + 1) (An); n = 06
	(A0) (A7)
	RLC	A	: Quay voøng thanh ghi A qua traùi 1 bit coù côø Carry
	(An + 1) (An); n = 06
	(C) (A7)
	(A0) (C)
	RR	A	: Quay voøng thanh ghi A qua phaûi 1 bit 
	(An + 1) (An); n = 06
	(A0) (A7)
	RRC	A	: Quay voøng thanh ghi A qua phaûi 1 bit coù côø Carry
	(An + 1) (An); n = 06
	(C) (A7)
	(A0) (C)
	SWAP	A	: Ñoåi choå 4 bit thaáp vaø 4 bit cao cuûa A cho nhau (A3A0)(A7A4).
2.3 Caùc leänh reõ nhaùnh:
Coù nhieàu leänh ñeå ñieàu khieån leân chöông trình bao goàm vieäc goïi hoaëc traû laïi töø chöông trình con hoaëc chia nhaùnh coù ñieàu kieän hay khoâng coù ñieàu kieän.
Taát caû caùc leänh reõ nhaùnh ñeàu khoâng aûnh höôûng ñeán côø. Ta coù theå ñònh nhaûn caàn nhaûy tôùi maø khoâng caàn roõ ñòa chæ, trình bieân dòch seõ ñaët ñòa chæ nôi caàn nhaûy tôùi vaøo ñuùng khaåu leänh ñaõ ñöa ra.
Sau ñaây laø söï toùm taét töøng hoaït ñoäng cuûa leänh nhaûy.
	JC	rel	: Nhaûy ñeán “rel” neáu côø Carry C = 1.
	JNC	rel	: Nhaûy ñeán “rel” neáu côø Carry C = 0.
	JB	bit, rel	: Nhaûy ñeán “rel” neáu (bit) = 1.
	JNB	bit, rel	: Nhaûy ñeán “rel” neáu (bit) = 0.
	JBC	bit, rel	: Nhaûy ñeán “rel” neáu bit = 1 vaø xoùa bit.
	ACALL	addr11: Leänh goïi tuyeät ñoái trong page 2K.
	(PC) (PC) + 2
	(SP) (SP) + 1
	((SP)) (PC7PC0)
	(SP) (SP) + 1
	((SP)) (PC15PC8)
	(PC10PC0) page Address.
	LCALL	addr16: Leänh goïi daøi chöông trình con trong 64K.
	(PC) (PC) + 3
	(SP) (SP) + 1
	((SP)) (PC7PC0)
	(SP) (SP) + 1
	((SP)) (PC15PC8)
	(PC) Addr15Addr0.
	RET	: Keát thuùc chöông trình con trôû veà chöông trình chính.
	(PC15PC8) (SP)
	(SP) (SP) - 1
	(PC7PC0) ((SP))
	(SP) (SP) -1.
	RETI	: Keát thuùc thuû tuïc phuïc vuï ngaét quay veà chöông trình chính hoaït ñoäng töông töï nhö RET.
	AJMP 	Addr11 	: Nhaûy tuyeät ñoái khoâng ñieàu kieän trong 2K.
	(PC) (PC) + 2
	(PC10PC0) page Address.
	LJMP 	Addr16 	: Nhaûy daøi khoâng ñieàu kieän trong 64K
	Hoaït ñoäng töông töï leänh LCALL.
	SJMP 	rel 	:Nhaûy ngaén khoâng ñieàu kieän trong (-128127) byte
	(PC) (PC) + 2
	(PC) (PC) + byte 2
	JMP @ A + DPTR:Nhaûy khoâng ñieàu kieän ñeán ñòa chæ (A) + (DPTR)
	(PC) (A) + (DPTR)
	JZ 	rel 	: Nhaûy ñeán A = 0. Thöïc haønh leänh keá neáu A 0.
	(PC) (PC) + 2
	(A) = 0 (PC) (PC) + byte 2
	JNZ	rel 	: Nhaûy ñeán A 0. Thöïc haønh leänh keá neáu A = 0.
	(PC) (PC) + 2
	(A) 0 (PC) (PC) + byte 2
	CJNE	A, direct, rel : So saùnh vaø nhaûy ñeán A direct
	(PC) (PC) + 3
	(A) (direct) (PC) (PC) + Relative Address.
	(A) < (direct) C = 1
	(A) > (direct) C = 0
	(A) = (direct). Thöïc haønh leänh keá tieáp
	CJNE A, # data, rel : Töông töï leänh CJNE A, direct, rel.
	CJNE Rn, # data, rel : Töông töï leänh CJNE A, direct, rel.
	CJNE @ Ri, # data, rel : Töông töï leänh CJNE A, direct, rel.
	DJNE Rn, rel 	: Giaûm Rn vaø nhaûy neáu Rn 0.
	(PC) (PC) + 2
	(Rn) (Rn) -1
	(Rn) 0 (PC) (PC) + byte 2.
	DJNZ direct, rel	 : Töông töï leänh DJNZ Rn, rel.
2.4 Caùc leänh dòch chuyeån döõ lieäu:
Caùc leänh dòch chuyeån döõ lieäu trong nhöõng vuøng nhôù noäi thöïc thi 1 hoaëc 2 chu kyø maùy. Maãu leänh MOV , cho pheùp di chuyeån döõ lieäu baát kyø 2 vuøng nhôù naøo cuûa RAM noäi hoaëc caùc vuøng nhôù cuûa caùc thanh ghi chöùc naêng ñaëc bieät maø khoâng thoâng qua thanh ghi A.
Vuøng Ngaên xeáp cuûa 8951 chæ chöùa 128 byte RAM noäi, neáu con troû Ngaên xeáp SP ñöôïc taêng quaù ñòa chæ 7FH thì caùc byte ñöôïc PUSH vaøo seõ maát ñi vaø caùc byte POP ra thì khoâng bieát roõ. 
Caùc leänh dòch chuyeån boä nhôù noäi vaø boä nhôù ngoaïi duøng söï ñònh vò giaùn tieáp. Ñòa chæ giaùn tieáp coù theå duøng ñòa chæ 1 byte (@ Ri) hoaëc ñòa chæ 2 byte (@ DPTR). Taát caû caùc leänh dòch chuyeån hoaït ñoäng treân toaøn boä nhôù ngoaøi thöïc thi trong 2 chu kyø maùy vaø duøng thanh ghi A laøm toaùn haïng DESTINATION.
Vieäc ñoïc vaø ghi RAM ngoaøi (RD vaø WR) chæ tích cöïc trong suoát quaù trình thöïc thi cuûa leänh MOVX, coøn bình thöôøng RD vaø WR khoâng tích cöïc (möùc 1).
Taát caû caùc leänh dòch chuyeån ñeàu khoâng aûnh höôûng ñeán côø. Hoaït ñoäng cuûa töøng leänh ñöôïc toùm taét nhö sau:
	MOV	A,Rn	: (A) (Rn)
	MOV 	A, direct	: (A) (direct)
	MOV	A, @ Ri	: (A) ((Ri))
	MOV 	A, # data	: (A) # data
	MOV	Rn, A	: (Rn) (A)
	MOV	Rn, direct	: (Rn) (direct)
	MOV	Rn, # data	: (Rn) # data
	MOV 	direct, A	: (direct) (A) 
	MOV 	direct, Rn	: (direct) (Rn) 
	MOV 	direct, direct	: (direct) (direct) 
	MOV 	direct, @ Ri	: (direct) ((Ri)) 
	MOV 	direct, # data	: (direct) data 
	MOV	@ Ri, A	: ((Ri)) (A)
	MOV	@ Ri, direct	: ((Ri)) (direct)
	MOV	@ Ri, # data	: ((Ri)) # data
	MOV	DPTR, # data16	: (DPTR) # data16
	MOV	A, @ A + DPTR	: (A) (A) + (DPTR)
	MOV	@ A + PC	: (PC) (PC) + 1
	 	(A) (A) + (PC)
	MOVX	A, @ Ri	: (A) ((Ri))
	MOVX	A, @ DPTR	: (A) ((DPTR))
	MOVX	@ Ri, A	: ((Ri)) (A)
	MOVX	@ DPTR, A	: ((DPTR)) (A)
	PUSH 	direct	: Caát döõ lieäu vaøo Ngaên xeáp
	 (SP) (SP) + 1
	 (SP) (Drirect) 
	POP 	direct	: Laáy töø Ngaên xeáp ra direct
	 (direct) ((SP))
	 (SP) (SP) - 1
	XCH	A, Rn	: Ñoåi choå noäi dung cuûa A vôùi Rn
	 (A) (Rn)
	XCH	A, direct	: (A) (direct)
	XCH	A, @ Ri	: (A) ((Ri))
	XCHD	A, @ Ri	: Ñoåi choå 4 bit thaáp cuûa (A) vôùi ((Ri))
	(A3A0) ((Ri3Ri0))
2.5 Caùc leänh luaän lyù (Boolean Instruction):
8951 chöùa moät boä xöû lí luaän lyù ñaày ñuû cho caùc hoaït ñoäng bit ñôn, ñaây laø moät ñieåm maïnh cuûa hoï vi ñieàu khieån MSC-51 maø caùc hoï vi ñieàu khieån khaùc khoâng coù.
RAM noäi chöùa 128 bit ñôn vò vaø caùc vuøng nhôù caùc thanh ghi chöùc naêng ñaëc bieät caáp leân ñeán 128 ñôn vò khaùc. Taát caû caùc ñöôøng Port laø bit ñònh vò, moãi ñöôøng coù theå ñöôïc xöû lí nhö Port ñôn vò rieâng bieät. Caùch truy xuaát caùc bit naøy khoâng chæ caùc leänh reõ nhaùnh khoâng, maø laø moät danh muïc ñaày ñuû caùc leänh MOVE, SET, CLEAR, COMPLEMENT, OR, AND.
Toaøn boä söï truy xuaát cuûa bit duøng söï ñònh vò tröïc tieáp vôùi nhöõng ñòa chæ töø 00H - 7FH trong 128 vuøng nhôù thaáp vaø 80H - FFH ôû caùc vuøng thanh ghi chöùc naêng ñaëc bieät.
Bit Carry C trong thanh ghi PSW\ cuûa töø traïng thaùi chöông trình vaø ñöôïc duøng nhö moät söï tích luõy ñôn cuûa boä xöû lí luaän lyù. Bit Carry cuõng laø bit ñònh vò vaø coù ñòa chæ tröïc tieáp vì noù naèm trong PSW. Hai leänh CLR C vaø CLR CY ñeàu coù cuøng taùc duïng laø xoùa bit côø Carry nhöng leänh naøy maát 1 byte coøn leänh sau maát 2 byte.
Hoaït ñoäng cuûa caùc leänh luaän lyù ñöôïc toùm taét nhö sau:
	CLR	C	: Xoùa côø Carry xuoáng 0. Coù aûnh höôûng côø Carry.
	CLR	BIT	: Xoùa bit xuoáng 0. Khoâng aûnh höôûng côø Carry
	SET	C	: Set côø Carry leân 1. Coù aûnh höôûng côø Carry.
	SET	BIT	: Set bit leân 1. Khoâng aûnh höôûng côø Carry.
	CPL	C	: Ñaûo bit côø Carry. Coù aûnh höôûng côø Carry.
	CPL	BIT	: Ñaûo bit. Khoâng aûnh höôûng côø Carry.
	ANL	C, BIT	: (C) (C) AND (BIT) : Coù aûnh höôûng côø Carry.
	ANL	C, /BIT	: (C) (C) AND NOT (BIT):Khoâng aûnh höôûng côø Carry.
	ORL	C, BIT	: (C) (C) OR (BIT) : Taùc ñoäng côø Carry.
	ORL	C, /BIT	: (C) (C) OR NOT (BIT) : Taùc ñoäng côø Carry.
	MOV	C, BIT	: (C) (BIT) : Côø Carry bò taùc ñoäng.
	MOV	BIT, C	: (BIT) (C) : Khoâng aûnh höôûng côø Carry.
2.6 Caùc leänh xen vaøo (Miscellamous Intstruction):
NOP : Khoâng hoaït ñoäng gì caû, chæ toán 1 byte vaø 1 chu kyø maùy. Ta duøng ñeå delay nhöõng khoaûng thôøi gian nhoû.
III. Chöông trình ngoân ngöõ Assembly cuûa 8951: 
1. Giôùi thieäu : 
Ngoân ngöõ assembly giöõa ngoân ngöõ maùy vaø ngoân ngöõ caáp cao. Ngoân ngöõ caáp cao ñöôïc ñaëc tröng nhö: Pascal, C ... Coøn chöông trình ngoân ngöõ maùy laø moät chuoãi caùc byte nhò phaân ñöôïc ñaëc tröng bôûi caùc leänh maø maùy tính coù theå thöïc thi.
Ngoân ngöõ assembly thay theá caùc maõ nhò phaân cuûa ngoân ngöõ maùy ñeå söû duïng caùc “thuaät nhôù“ deã daøng trong quaù trình laäp trình. Ví duï leänh coäng trong ngoân ngöõ maùy ñöôïc ñaëc tröng bôûi maõ nhò phaân “10110011” trong khi ngoân ngöõ assembly laø “ADD“.
Moät chöông trình ngoân ngöõ assembly khoâng theå thöïc thi bôûi maùy tính maø noù phaûi ñöôïc dòch sang maõ nhò phaân ngoân ngöõ maùy.
Moät linker laø moät chöông trình maø noù keát hôïp caùc chöông trình ñaëc tröng Relocatable (modul) vaø thieát keá moät chöông trình ñaëc tröng tuyeät ñoái thöïc thi baèng maùy tính.
Segment laø moät phaàn cuûa boä nhôù maõ hoaëc döõ lieäu, noù coù theå taùi ñònh vò ñöôïc (Relocatable) hoaëc tuyeät ñoái (Absolute ). Segment Relocatable coù teân, kieåu vaø coù theå ñöôïc keát noái vôùi Segment cuïc boä khaùc. Segment Absolute khoâng coù teân vaø khoâng theå ñöïôc keát noái Segment khaùc.
Modul chöùa 1 hoaëc nhieàu segment hay caùc segment cuïc boä . Moät modul coù theå laø moät “file” ôû nhieàu tröôøng hôïp caù bieät .
Moät chöông trình Modul Absolute ñôn ñöôïc hoøa vaøo toaøn boä caùc Segment Absolute vaø Segment Relocatable töø taát caû caùc mode nhaäp.
Chöông trình chæ chöùa caùc maõ nhò phaân thay cho caùc leänh (vôùi caùc ñòa chæ vaø caùc haèng döõ lieäu ) ñöôïc hieåu bôûi maùy tính.
2. Hoaït ñoäng cuûa trình bieân dòch (Assembler Operation)
Coù nhieàu trình bieân dòch vôùi muïc ñích khaùc nhau coù taùc duïng laø deã hieåu caùc öùng duïng vi ñieàu khieån. ASM51 laø tieâu bieåu chuaån bieân dòch cuûa hoï MSC-51. ASM51 laø trình bieân dòch maïnh coù taùc duïng höõu hieäu treân heä thoáng phaùt trieån INTEL vaø hoï IBM PC cuûa maùy vi tính.
ASM51 ñöôïc goïi hieän leân töø söï chæ daãn cuûa heä thoáng bôûi:
ASM51 Source file (Assembly Control).
Trình bieân dòch nhaän moät file nguoàn vôùi tö caùch laø ngoõ nhaäp (PROGRAM.SCR) vaø hoï phaùt ra moät file ñoái töôïng (PROGRAM.OBJ) vaø file listing (PROGRAM.LST). 
Vì haàu heát caùc bieân dòch xem xeùt chöông trình nguoàn 2 laàn trong luùc thi haønh söï dòch ngoân ngöõ maùy, neân chuùng ñöôïc moâ taû qua 2 Pass bieân dòch laø Pass1 vaø Pass2.
Trong pass1, file nguoàn ñöôïc xem xeùt töøng doøng vaø baûng kyù hieäu xaây döïng.
Boä ñeám Location maëc nhieân choïn 0 hoaëc ñöôïc ñaët bôûi chæ thò ORG (ñaët Origin).
Cuõng nhö file ñöôïc xem xeùt, boä ñeám Location ñöôïc taêng leân baèng ñoä daøi moãi leänh.
Chæ thò data ñònh nghóa (ñaëc bieät hoaëc DW) taêng boä ñeám Location baèng vôùi soá byte ñònh roõ, caùc chæ thò nhôù löu tröõ (DSO taêng boä ñeám Location bôûi soá byte döï tröõ). Moãi laàn moät nhaõn ñöôïc tìm thaáy ôû söï baét ñaàu cuûa moät ñöôøng, thì noù ñöôïc ñaëc trong baûng kyù hieäu theo giaù trò hieän haønh cuûa boä ñeám Location. Caùc kyù hieäu ñöôïc ñònh nghóa bôûi duøng caùc chæ thò töông ñöông (EQU) ñöôïc ñaëc trong baûng kyù hieäu, ñöôïc caát giöõ vaø sau ñoù duøng trong pass2.
Trong Pass2, file Object vaø file Listing ñöôïc taïo ra, caùc thuaät nhôù ñöôïc bieán ñoåi thaønh Opcode vaø ñaët trong caùc file output. Caùc toaùn haïng ñöôïc xaùc ñònh giaù trò vaø ñaët phía sau Opcode leänh. ÔÛ nôi caùc kyù hieäu xuaát hieän trong toaùn haïng, caùc kyù hieäu cuûa chuùng seõ ñöôïc laáy laïi töø baûng kyù hieäu (ñöôïc taïo ra trong suoát Pass1 vaø duøng trong söï saép xeáp döõ lieäu ñuùng hoaëc ñuùng ñòa chæ bôûi caùc leänh).
Bôûi vì Pass2 ñöôïc thöïc thi neân chöông trình nguoàn coù theå duøng “söï tham khaûo tröôùc “ laø duøng kyù hieäu tröôùc khi ñònh nghóa.
File Object neáu tuyeät ñoái thì chæ chöùa caùc byte nhò phaân (00H - FFH) cuûa chöông trình ngoân ngöõ maùy. File Object Relocatable chöùa moät baûng kyù hieäu vaø thoâng tin khaùc ñöôïc yeâu caàu bôûi söï keát hôïp vaø xaùc ñònh ñuùng vò trí. File Listing chöùa maõ nguyeân baûng ASCII (20H – 7FH) cho caû hai chöông trình nguoàn vaø caùc byte Hexadecimal trong chöông trình ngoân ngöõ maùy.
3. Söï saép ñaët chöông trình ngoân ngöõ Assmebly:
Chöông trình ngoân ngöõ Asembly bao goàm: Caùc leänh maùy, lôøi chæ chò cuûa trình bieân dòch, söï ñieàu khieån bieân dòch vaø caùc chuù thích.
Caùc leänh maùy laø caùc kyõ xaûo cuûa leänh coù theå thöïc thi (ví duï nhö ANL). Caùc chæ thò cuûa trình bieân dòch laø caùc leänh ñeå trình bieân dòch ñònh caáu truùc chöông trình, caùc döõ lieäu, kyù hieäu, haèng, … (ví duï Org ). Caùc söï ñieàu khieån trình bieân dòch set caùc mode cuûa trình bieân dòch vaø ñieàu khieån söï chaïy chöông trình Assembly (ví duï STILLE ).
Caùc chuù thích hoaït ñoäng cuûa leänh.
Caùc leänh phaûi ghi theo nguyeân taéc roõ raøng ñeå ñöôïc trình bieân dòch hieåu.
Söï saép xeáp cuûa chuùng nhö sau:
(Label:) mnemonic [operand][:operand][...][:comment]
3.1 Vuøng nhaõn (label Field ):
Moät nhaõn töôïng tröng cho ñòa chæ cuûa leänh (hoaëc döõ lieäu ) theo sau nhaõn. Khi caùc reõ nhaùnh ñeán leänh naøy, nhaõn ñöôïc duøng trong vuøng toaùn haïng cuûa nhaùnh (hoaëc leänh nhaûy).
Caùc “nhaõn“ laø moät kieåu kyù hieäu, sau nhaõn phaûi coù daáu hai chaám (:) coøn sau kyù hieäu thì khoâng.
Caùc kieåu kyù hieäu ñöôïc quy cho caùc giaù trò hoaëc quy cho vieäc duøng caùc chæ thò nhö: EQU, SEGMENT, BIT, DATA, … Caùc kyù hieäu coù theå laø ñòa chæ, haèng, data, teân caùc segment hoaëc söï xaây döïng khaùc ñöôïc hieåu bôûi ngöôøi laäp trình. Sau ñaây laø moät ví duï ñeå phaân bieät nhaõn vaø kyù hieäu:
PRA EQU 500 	: PRA laø kyù hieäu töôïng tröng giaù trò 500
START :MOV A , #0FFH :START laø nhaõn töông tröng ñòa chæ leänh MOV
Moät kyù hieäu hoaëc moät nhaõn phaûi baét ñaàu moät chöõ caùi daáu “?”, hoaëc daáu “-“; phaûi ñöôïc theo sau baèng moät chöõ caùi, caùc soá, daáu “?” hay “-“, vaø coù theå chöùa tôùi 31 kyù töï.
3.2 Vuøng thuaät nhôù (Mnemonic Field ):
Caùc thuaät nhôù hay caùc chæ chò bieân dòch ñi vaøo vuøng thuaät nhôù theo sau vuøng nhaõn. Ví duï caùc thuaät nhôù leänh nhö: ADD, MOV, DIV, INC, … ; caùc chæ thò bieân dòch nhö : ORG , EQU.
3.3 Vuøng toaùn haïng (Operand Field):
Vuøng toaùn haïng theo sau vuøng thuaät nhôù. Vuøng naøy chöùa ñòa chæ hay döõ lieäu ñöôïc duøng bôûi leänh. Moät nhaõn coù theå duøng ñeå töôïng tröng cho haèng döõ lieäu. Caùc khaû naêng cho pheùp vuøng toaùn haïng phuï thuoäc lôùn vaøo caùc hoaït ñoäng. Moät vaøi hoaït ñoäng khoâng coù toaùn haïng nhö : RET, NOP trong khi caùc hoaït ñoäng khaùc cho pheùp nhieàu toaùn haïng ñöôïc phaân ra baèng daáu phaåy.
3.4 Vuøng chuù thích (Comment Field ):
Caùc chuù thích phaûi deã hieåu ñaët ñeå giaûi thích leänh, vaø coù daáu chaám phaåy ôû ñaàu. Khoái chuù thích trong khung ñeå giaûi thích tính chaát chung cuûa phaàn chöông trình ñöôïc caét ra beân döôùi.
3.5 Caùc kyù hieäu bieân dòch ñaëc bieät (Special Assembler Symbol ):
Caùc kyù hieäu bieân dòch ñaëc bieät ñöôïc duøng trong caùc mode ñònh vò thanh ghi cuï theå chuùng bao goàm caùc thanh ghi A, Ro – R7, DPTR, PC,C, AB, hay caùc kyù hieäu $ ñöôïc duøng ñeå quy vaøo giaù trò hieän haønh cuûa boä ñeám Location.
Ví duï : leänh JNZ T1 , $ töông ñöông vôùi leänh sau : HERE : JNZ T1, HERE
3.6 Ñòa chæ giaùn tieáp (Indirect Address):
Ñoái vôùi moät soá leänh duøng toaùn haïng coù theå xaùc ñònh thanh ghi maø noù chöùa ñòa chæ giaùn tieáp vaø noù chæ coù theå duøng vôùi R0, R1 , DPTR. Ví duï leänh MOV A, @R0 khoâi phuïc laïi byte döõ lieäu töø RAM noäi taïi ñòa chæ ñöôïc ñònh roõ trong R0.
 Leänh MOVC, @A + PC khoâi phuïc laïi byte döõ lieäu töø boä nhôù döõ lieäu ngoaøi taïi ñòa chæ ñöôïc taïo thaønh bôûi vieäc coäng noäi dung thanh ghi tích luõy A vaø boä ñeám chöông trình.
3.7 Döõ lieäu töùc thôøi (Immediate Data ): 
Caùc leänh duøng söï ñònh vò töùc thôøi cung caáp döõ lieäu vaøo vuøng toaùn haïng, kyù hieäu # ñaët tröôùc döõ lieäu töùc thôøi. Ví duï:
CONSTANT EQU 100
	 MOV A, 0FFH 
	 ORL 40H, # CONSTANT 
3.8 Ñòa chæ döõ lieäu (Data Address):
Nhieàu leänh truy xuaát caùc vuøng nhôù duøng söï ñònh vò tröïc tieáp vaø ñoøi hoûi moät ñòa chæ nhôù döõ lieäu treân chip (00 – FFH) hay moät ñòa chæ SFR (80H – FFH) treân vuøng toaùn haïng. Caùc kyù hieäu ñaõ ñöôïc ñònh nghóa coù theå ñöôïc duøng cho caùc ñòa chæ SFR. Ví duï:
MOV A, 45H hay MOV A, SBUF.
3.9 Ñòa chæ Bit (Bit Address):
Moät trong nhöõng ñieåm maïnh cuûa 8951 laø khaû naêng truy xuaát caùc bit rieâng leû, khoâng caàn caùc hoaït ñoäng trang bò treân byte. Caùc leänh truy xuaát caùc bit ñònh vò phaûi cung caáp moät ñòa chæ trong boä nhôù döõ lieäu noäi (00H – 7FH) hoaëc ñòa chæ bit trong caùc SFR (80H - FFH).
Coù 3 caùch ñeå xaùc ñònh ñòa chæ bit trong oâ nhôù döõ lieäu: Duøng ñòa chæ bit tröïc tieáp, duøng hoaït ñoäng ñieåm giöõa ñòa chæ byte vaø ñòa chæ bit, duøng kyù hieäu bieân dòch ñaõ ñöôïc ñònh nghóa.
Ví duï:
SETB 0E7H : Duøng ñòa chæ tröïc tieáp.
SETB ACC, 7 :Duøng hoaït ñoäng ñieåm.
JNZ T1 ,$ : Duøng kyù hieäu ñöôïc ñònh nghóa “TT”.
3.10 Ñòa chæ maõ (Code Address): 
Ñòa chæ maõ ñöôïc duøng trong toaùn haïng cho caùc leänh nhaûy, bao goàm caùc söï nhaûy töông ñoái (nhö SJMP vaø caùc leänh nhaûy coù ñieàu kieän), caùc söï nhaûy vaø caùc söï goïi tuyeät ñoái (ACALL , AJMP). Ñòa chæ maõ thöôøng ñöôïc cho ôû daïng nhaõn sau:
HERE:
 _
 _
 _
 	 SJMP HERE 
ASM51 seõ xaùc ñònh ñòa chæ maõ ñuùng vaø loàng vaøo Offset ñuùng ñöôïc kyù hieäu 8 bit leänh, ñòa chæ trang 11 bit hoaëc ñòa chæ daøi 16 bit cho thích hôïp.
3.11 Caùc söï nhaûy vaø goïi chung ( generic Jump and Calls):
ASM51 cho pheùp ngöôøi laäp trình duøng thuaät nhôù JMP chung hay CALL chung. Leänh “JMP “coù theå ñöôïc duøng thay cho “SJMP, AJMP, LJMP“ vaø “CALL” coù theå thay cho ACALL hay LCALL. Söï bieân dòch bieán ñoåi thuaät nhôù chung ñeám moät leänh “thöïc teá“ sau vaøi qui luaät ñôn giaûn, thuaät nhôù chung bieán ñoåi thaønh daïng tuyeät ñoái neáu nhaûy hay goïi trong trang 2k. Neáu caùc daïng ngaén vaø tuyeät ñoái khoâng duøng thì seõ ñöôïc chuyeån thaønh daïng daøi.
4. Söï tính toaùn bieåu thöùc cuûa Assemble Time (Assemble Time Expression Evaluation):
Khi moät bieåu thöùc ñöôïc duøng, söï bieân dòch tính toaùn giaù trò loàng vaøo leänh ñoù.
4.1 Caùc cô sôû soá (Number Basses):
Cô sôû caùc haèng soá phaûi ñöôïc theo sau caùc soá nhò phaân “B”, theo sau soá Octal “O”, hoaëc “Q”, theo sau soá thaäp phaân “D” hay khoâng coù gì , theo soá Hexa “H”. Ví duï:
MOV A, # 15 : Thaäp phaân 
MOV A , 1111B : Nhò phaân 
MOV A , 30H : Hex 
MOV A , 315D : Thaäp phaân 
MOV A , 317Q : Octal
4.2 Caùc chuoãi kyù töï (Character String):
Chuoåi duøng moät hay 2 kyù töï coù theå duøng nhö caùc toaùn haïng trong caùc bieåu thöùc. Caùc maõ ASSCII ñöôïc bieán ñoåi thaønh nhò phaân töông ñöông bôûi söï bieân dòch.
Caùc haèng ñöôïc ñi keøm theo sau 1 daáu ngoaëc keùp (‘).
Ví duï : CJNZ A , # ‘Q’, AGAIN 
4.3 Caùc kyù hieäu soá hoïc (Arithmetic Operations):
+ : Coäng 
_ : Tröø 
. : Nhaân
/ : Chia 
MOD :Pheùp laáy dö
Ví duï leänh MOV A, # 10 + 10H vaø leänh MOV A, # 1AH töông töï 2 leänh MOV A, # 25 MOD 7 vaø MOV A, # 4 cuõng gioáng nhau.
4.4 Caùc hoaït ñoäng logic (Logic Operations):
Caùc hoaït ñoäng logic laø OR, AND, XOR, NOT. Hoaït ñoäng ñöôïc aùp duïng treân caùc bit töông öùng trong moãi toaùn haïng. Söï hoaït ñoäng phaûi ñöôïc phaân ra töø caùc toaùn haïng bôûi moät khoaûng caùch kyù töï hoaëc nhieàu khoaûng kyù töï.
Ví duï 3 leänh MOV sau ñaây gioáng nhau:
THERE 	EQU
MINUS – THERE EQU- 3
MOV A, #(NOT THERE) + 1
MOV A, MINUS – THERE 
MOV A, #11111101B
4.5 Caùc hoaït ñoäng ñaëc bieät (special Operation):
Caùc hoaït ñoäng ñaëc bieät laø: SHR (dòch phaûi), SHL (dòch traùi), HIGH (byte cao), LOW (byte thaáp).
Ví duï: leänh MOV A, # HIGH 1234H vaø leänh MOV A, 12H töông ñöông.
4.6 Caùc hoaït ñoäng lieân quan:
Khi moät hoaït ñoäng coù lieân quan ñöôïc duøng giöõa hai toaùn haïng thì keát quûa hoaëc sai (0000h) hoaëc ñuùng (FFFFH). Caùc hoaït ñoäng laø:
EQ	=	: Equals (baèng)
NE	: Not equals (khoâng baèng)
LT	<	: Less than (nhoû hôn)
LE	<=	: Less than or equal (nhoû hôn hoaëc baèng)
GT	>	: Greater than (lôùn hôn)
GE	>=	: Greater than or equal (lôùn hôn hoaëc baèng)
Ví duï:
MOV A, #5
MOV A, 100 GE 50 
MOV A, 5 NE 4
Caû ba leänh treân ñeàu ñuùng neân caû ba töông ñöông vôùi leänh sau: MOV A,# 0FFH
5. Caùc chæ thò bieân dòch:
ASM51 cung caáp caùc chæ thò sau:
Söï ñieàu khieån traïng thaùi bieân dòch (ORG, AND, USING)
Söï xaùc ñònh kyù hieäu (SEGMENT, EQU, SET, DATA, NDATA, BIT, CODE)
Söï khôûi gaùn löu tröõ hay ñeå daønh tröôùc söï löu tröõ (DS, DBIT, DB, DW)
Söï keát noái chöông trình (PUBLIC, EXTRN, NAME)
Söï choïn segment (PSEG, CSEG, DSEG, ISEG, BSEG, XSEG)
5.1 Söï ñieàu khieån traïng thaùi bieân dòch:
Chæ thò ORG thay ñoåi boä ñeám vuøng nhôù ñeå ñaët söï khôûi ñaàu moät chöông trình môùi bôûi traïng thaùi theo sau ñoù, daïng cuûa chæ thò ORG laø: ORG Expression
Chæ thò END ñaët ôû cuoái cuøng trong file nguoàn. Daïng cuûa noù laø END.
Chæ thò USING cung caáp cho ASM51 daõy thanh ghi tích cöïc hieän haønh. Daïng chæ thò cuûa noù laø USING Expression
Vieäc duøng ñòa chæ caùc thanh ghi kyù hieäu ñöôïc ñònh nghóa tröôùc AR0-AR7 seõ bieán thaønh ñòa chæ tröïc tieáp phuø hôïp cuûa daõy thanh ghi tích cöïc.
Ví duï : 	USING 3 	: Duøng Bank 3 trong daõy thanh ghi.
PUSH AR7	: Push R7 (R7=1FH)
PUSH AR7	: Push R7 (R7=0FH)
5.2 Ñònh nghóa kyù hieäu (Symbol Definition):
Daïng chæ thò cuûa segment nhö sau: symbol SEGMENT segmenttype
Trong ñoù symbol laø teân cuûa segment coù theå ñoåi choã ñöôïc. Caùc kieåu segment coù theå CODE (segment maõ), XDATA (vuøng döõ lieäu ngoaøi), DATA (vuøng döõ lieäu noäi) coù theå truy xuaát baèng söï ñònh vò tröïc tieáp töø (00H-7FH), IDATA (toaøn boä vuøng döõ lieäu noäi), BIT (vuøng BIT töø 20H-2FH döõ lieäu noäi).
Ví duï : EPROM SEGMENT CODE cho bieát EPROM cuûa moät segment kieåu code.
Daïng chæ thò EQU 	: symbol EQU Expression
Daïng chæ thò BIT	: symbol BITExpression
Löu yù raèng neáu ta duøng chæ thò BIT nhö FLAGS BIT 05H thì ta coù theå SETB FLAGS maø khoâng ñöôïc duøng leänh MOV.
5.3 Söï khôûi gaùn/daønh löu tröõ tröôùc (Storage Initilization/Reservation)
Caùc chæ thò cuûa Storage Initilization khôûi gaùn vaø Storage Reservation ñeå daønh moät vuøng nhôù trong töø, byte hoaëc caùc ñôn vò bit. Vuøng ñöôïc daønh tröôùc khi baét ñaàu taïi vuøng nhôù ñöôïc chæ roõ bôûi giaù trò hieän haønh cuûa boä ñeám vuøng nhôù trong segment tích cöïc ñang hieän haønh. Caùc chæ thò naøy coù theå ñöùng tröôùc moät nhaõn.
5.3.1 Khai baùo löu tröõ DS (Define Storage)
Daïng phaùt bieåu DS laø : [label:]DS Expression
Phaùt bieåu DS daønh moät vuøng nhôù trong ñôn vò byte. Noù coù theå ñöôïc duøng trong baát kyø phaùt bieåu segment naøo ngoaïi tröø BIT. Khi phaùt bieåu DS ñöôïc baét gaëp trong chöông trình thì boä ñeám vò trí location cuûa segment hieän haønh ñöôïc taêng leân moät khoaûng baèng giaù trò cuûa bieåu thöùc. Toång cuûa boä ñeám location vaø bieåu thöùc ñaõ ñöôïc ñònh roõ seõ khoâng vöôïc quaù söï haïn cheá cuûa vuøng hieän haønh.
Phaùt bieåu sau taïo ra moät vuøng ñeäm 40 byte trong segment döõ lieäu noäi.
DSEG AT 30	: Ñaët vaøo segment data noäi.
LENGTH EQU 40
BEFFER : DS LENGTH : 40 byte ñöôïc daønh tröôùc
Nhaõn BUFFER töôïng tröng cho ñòa chæ cuûa location ñaàu tieân cuûa vuøng nhôù ñöôïc löu tröõ. Trong ví duï treân buffer ñaét ñaàu ôû ñòa chæ 30H bôûi töø “AT 30” ñöôïc ñònh roõ bôûi DSEG. Vuøng ñeäm naøy coù theå xoaù nhö sau:
MOV R7,#LENGTH 	: R7 chöùa con soá LENGTH laø 40
MOV R0,#BUFFER 	: R0 chöùa ñòa chæ taïi buffer laø 30H
LOOP : MOV @R0,#0 : Laàn löôït xoaù
DJNZ,R7,LOOP
(continue)
Ñeå taïo ra vuøng ñeäm 1000 byte trong RAM ngoaïi baét ñaàu taïi ñòa chæ 4000H, caùc chæ thò sau ñaây coù theå ñöôïc duøng:
XSTART EQU 4000H
XLENGTH EQU 1000H
XSEG AT XSTART : Phaân ñoaïn data ngoaøi baét ñaàu ôû 4000H
XBUFFER: DS XLENGTH : Taïo ra moät vuøng ñeäm coù ñoä daøi 1000byte
Caùc leänh sau ñaây coù theå duøng ñeå xoaù vuøng ñeäm treân :
MOV DPTR,#BUFFER: Ñöa ñòa chæ 4000H vaø DPTR
LOOP : CLR A
MOVX @DPTR : Xoaù noäi duïng töø ñòa chæ 4000H trôû ñi
INC DPTR : Taêng theâm 1 ( tröôøng hôïp ñaàu trôû thaønh 4001H)
MOV A,DPL
CJNZ A,#LOW (XBUFFER=LENGTH+1),LOOP
MOV A,DPH
CJNZ A,HIGH (XBUFFER=XLENGTH+1),LOOP
(Continue)
Neáu so saùnh hai caùch duøng treân daønh cho byte thaáp vaø byte cao DPTR, Vì leänh CJNZ chæ laøm nhieäm vuï ñoái vôùi thanh ghi A hoaëc thanh ghi Rn, do ñoù byte thaáp hoaëc byte cao cuûa boä ñeám döõ lieäu phaûi ñöôïc MOV vaøo A tröôùc khi ñeán leänh CJNZ. Voøng laëp chæ keát thuùc khi boä ñeám döõ lieäu ñaõ ñöôïc ñoïc ñòa chæ XBUFFER+XLENGTH+1
5.3.2 Khai baùo DBIT (Define Bit)
Söï thaønh laäp : [label:] DBIT expression 
Chæ thò DBIT daønh tröôùc vuøng nhôù caùc ñôn vò bit, noù coù theå ñöôïc duøng trong 1 segment bit. Khi phaùt bieåu naøy ñöôïc baét gaëp trong chöông trình thì boä ñeám vò trí cuûa segment hieän haønh ñöôïc coäng theâm giaù trò cuûa bieåu thöùc.
5.3.3 Khai baùo byte DB (Define Byte)
Söï thaønh laäp chæ thò ÑAËC BIEÄT : [label:] ÑAËC BIEÄT Expression [,Expression][...]
Chæ thò DB khôûi gaùn boä maõ neân segment CODE phaûi tích cöïc. Danh saùch bieåu thöùc laø moät chuoãi cuûa moät hay nhieàu giaù trò byte (moãi caùch coù theå laø moät bieåu thöùc) ñöôïc phaân ra bôûi daáu phaåy.
Chæ thò DB cho pheùp caùc chuoãi kyù töï (ñöôïc keøm trong daáu ngoaëc keùp ñôn) daøi hôn 2 kyù töï. Moãi kyù töï trong chuoãi ñöôïc bieán thaønh maõ ASCII töông öùng. Neáu moät nhaõn ñöôïc duøng thì nhaõn ñoù ñaõ ñöôïc aán ñònh ñòa chæ cuûa byte ñaàu tieân.
Ví duï : 	CSEG AT 0100H
DSQUARES : DB 0,1,4,9,16,25 :Bình phöông töø 0-5
Keát quaû cuûa söï phaân chia boä nhôù hexa cuûa boä nhôù maõ ngoaøi nhö sau : 
Address 
Content
Note
0100H
00H
Cöûa soá 0
0101H
01H
Cöûa soá 1
0102H
04H
Cöûa soá 4
0103H
9H
Cöûa soá 9
0104H
10H
Cöûa soá 16
0105H
19H
Cöûa soá 25
5.3.4 Khai baùo töø DW (Define Word)
Söï thaønh laäp : [label:]DW Expression [,Expression][...]
Chæ thò gioáng chæ thò DB ngoaïi tröø hai vò trí nhôù 16 bit ñöôïc chia laøm moãi khoaûng döõ lieäu.
Ví duï : 
CSEG AT 200H
DW 1234H,2
Address 
Content
Note
0200H
12H
Byte cao 1234H
0201H
34H
Byte thaáp 1234H
0202H
00H
Byte cao cuûa 2
0203H
02H
Byte thaáp cuûa 2
I. Caáu truùc phaàn cöùng IC 8279
Sô ñoà chaân vaø sô ñoà logic
Teân caùc chaân vaø chöùc naêng:
Teân
I/O
Chöùc naêng
DB7 - DB0
I/O
Data bus (Bi-Direction)
CLK
I
Clock input
RESET
I
Reset input
CS\
I
Chip select
RD\
I
Read input
WR\
I
Write input
A0
I
Address
IRQ
0
Interrupt Request input
SL0 - SL3
0
Scan Lines
RL0 - RL7
I
Return Lines
SHIFT
I
Shift input
CNTL/STB
I
Control/Strobe input
OUT A3-0
0
Display (A) output
OUT B3-0
0
Display (B) output
BD\
0
Blank Display Output
8279 keát noái vôùi vi ñieàu khieån thoâng qua 3 bus goàm bus döõ lieäu D7-D0, bus ñòa chæ coù moät ñöôøng A0, bus ñieàu khieån RD\, WR\, CS\, Reset, CLK.
Tín hieäu choïn CS\ ñöôïc keát noái ñeán moät ngoõ ra cuûa IC giaûi maõ ñòa chæ. Neáu xem boä nhôù thì boä nhôù naøy coù 2 oâ nhôù.
II. Caáu truùc phaàn meàm cuûa 8279	 
IC 8279 coù 1 ñöôøng ñòa chæ A0 coù chöùc naêng löïa choïn nhö sau:
A0 =0 : 8279 xem döõ lieäu töø vi ñieàu khieån gôûi ñeán laø döõ lieäu ñeå hieån thò.
A0 =1 : 8279 xem döõ lieäu töø vi ñieàu khieån gôûi ñeán laø döõ lieäu cuûa leänh ñieàu khieån 8279.
Caùc leänh ñieàu khieån cuûa 8279:
1. Keyboard/ Display Mode Set:
+ Maõ:
O
O
O
D
D 
K
K
K
+ Trong ñoù 2 bit DD duøng ñeå thieát laäp mode hieån thò, 3 bit KKK duøng ñeå thieát laäp mode queùt baøn phím.
+ Hai bit DD:
	DD=00 : hieån thò 8 kyù töï - loái vaøo traùi.
	DD=01 : hieån thò 16 kyù töï - loái vaøo traùi.
	DD=10 : hieån thò 8	kyù töï - loái vaøo phaûi.
	DD=11 : hieån thò 16 kyù töï - loái vaøo phaûi.	
+ Ba bit KKK :
	000	encode scan keyboard - 2 key lockout.
	001	decode scan keyboard - 2 key lockout.
	010	encode scan keyboard - N key rollover.
	011	decode scan keyboard - N key rollover.
	100	encode scan sensor matrix.
	101	decode scan sensor matrix.
	110	strobe input, encode display scan. 
	111	strobe input, decode display scan .
2. Program Clock:
+ Maõ 
O
O
1
P
P
P
P
P
+ Leänh naøy coù chöùc naêng chia taàn soá xung clock ôû ngoõ vaøo clk ôû chaân soá 3, caùc bit PPPPP duøng ñeå xaùc ñònh soá chia naèm trong khoaûng töø 2 ñeán 30, taàn soá hoaït ñoäng cuûa maïch queùt hieån thò vaø choùng doäi cuûa 8279 thöôøng laø 100 Khz, neáu taàn soá ôû ngoõ vaøo laø 2Mhz thì phaûi chia cho 20 ñeå ñöôïc 100 Khz, khi ñoù caùc bit PPPPP coù giaù trò laø 10100.
3. Read FIFO / sensor RAM:
+Maõ
O
1
1
AI
X
A
A
A
8279 coù 8 byte RAM beân trong ñeå chöùa maõ cuûa phím aán hay maõ cuûa caùc sensor, ñeå truy xuaát ñeán töøng byte döõ lieäu maõ cuûa phím aán hay cuûa sensor ta coù theå ñieàu chænh caùc bit AAA töông öùng. Boä nhôù naøy thuoäc kieåu FIFO.
+ Al ( automatically increment): ôû möùc 1 coù chöùc naêng laøm con troû töï ñoäng taêng leân byte keá ñeå saün saøng cho vieäc ñoïc döõ lieäu. Neáu Al= 0 con troû seõ khoâng thay ñoåi.
4. Read Display RAM:
+ Maõ
O
1
1
Al
A
A
A
A
+ 8279 coù 16 byte RAM beân trong do con troû 4 bit AAAA quaûn lyù, 16 byte RAM naøy duøng ñeå chöùa döõ lieäu caàn hieån thò do vi ñieàu khieån gôûi ñeán, ñeå ñoïc döõ lieäu oâ nhôù naøo trong vuøng nhôù RAM naøy ta coù theå ñieàu chænh caùc bit AAA töông öùng. Boä nhôù hieån thò naøy thuoäc kieåu FIFO.
+ Al (Automatically Increment): ôû möùc 1 chöùc naêng laøm con troû töï ñoäng taêng leân byte keá ñeå saün saøng cho vieäc ñoïc byte döõ lieäu. Neáu Al=0 con troû seõ khoâng thay ñoåi.
5. End Interrupt:
+ Maõ
1
1
1
E
0
0
0
0
+ Bit E baèng 1 seõ xoùa ngaét IRQ veà möùc logic 0.
6. Leänh Write Display Ram:
+ Maõ
1
0
0
Al
A
A
A
A
+ 8279 coù 16 byte RAM beân trong con troû 4 bit AAAA quaûn lyù, 16 oâ nhôù RAM naøy duøng ñeå chöùa döõ lieäu caàn hieån thò do vi ñieàu khieån gôûi ñeán, ñeå gôûi döõ lieäu ñeán 8279 taïi byte Ram thöù maáy trong 16 byte RAM ta coù theå ñieàu chænh caùc bit AAAA töông öùng.
+ Al (automatically increment): ôû möùc moät chöùc naêng laøm con troû töï ñoäng taêng leân byte keá ñeå saün saøng nhaän döõ lieäu. Neáu Al=0 con troû seõ khoâng thay ñoåi do ñoù byte döõ lieäu sau seõ ghi ñeø leân byte döõ lieäu tröôùc ñoù.
7. Leänh Clear:
+ Maõ
1
1
0
CD
CD
CF
CA
+ Nhöõng bit CD trong leänh naøy duøng ñeå xoùa taát caû caùc haøng cuûa Ram hieån thò ñeán moät maõ xoùa ñöôïc choïn loïc nhö sau:
	CD	CD
	 0	 X	Taát caû laø 0 (X : khoâng quan taâm)
	 1	 0	AB = Hex 20 (0010 0000)
	 1	 1	Taát caû laø 1
	Cho pheùp xoùa hieån thò khi =1 (hoaëc bôûi CA=1)	
+ Trong suoát thôøi gian Ram hieån thò ñang xoùa (160 s) noù khoâng ñöôïc vieát vaøo, bit lôùn nhaát cuûa töø traïng thaùi FIFO ñöôïc ñaët leân 1 trong suoát thôøi gian naøy. Khi Ram hieån thò ñöôïc söû duïng laïi thì bit naøy ñöôïc reset veà 0.
+ Neáu nhö bit CF tích cöïc (CF =1), töø traïng thaùi FIFO seõ bò xoùa vaø ngoõ ra Interrupt bò reset.
+ Bit CA coù chöùc naêng xoùa taát caû caùc bit, noù coøn aûnh höôûng bôûi bit CD vaø CF. Noù duøng bit CD ñeå xoùa maõ treân Ram hieån thò vaø noù cuõng xoùa luoân traïng thaùi FIFO.
I. Sô ñoà khoái kit vi ñieàu khieån 8951: 
Caáu taïo cuûa kit vi ñieàu khieån 8951 goàm 4 phaàn chuû yeáu: Ñôn vò xöû lí trung taâm CPU. Boä nhôù (bao goàm RAM vaø EPROM) khoái I/0 vôùi ñaàu giao tieáp laø 8255. Khoái queùt baøn phím vaø hieån thò duøng IC queùt 8279.
1. Ñôn vò xöû lyù trung taâm:
Phaàn töû trung taâm laø vi ñieàu khieån 8951 ñaõ ñöôïc giôùi thieäu phaàn treân goàm caùc chaân nhö sau:
16 ñöôøng ñòa chæ : A0 – A15.
8 ñöôøng döõ lieäu :D0 – D7.
Caùc ñöôøng ñieàu khieån : /RD , /WR , /PSEN
4 KB EPROM noäi ñöôïc ñieàu khieån chaân /EA: /EA=1 choïn EPROM noäi. /EA = 0 choïn EPROM ngoaøi.
526 byte RAM noäi töø ñòa chæ töø 00 – FF, trong ñoù coù 216 vò trí oâ nhôù coù theå truy xuaát bit coù ñòa chæ töø 20H – 2FH. 80 byte RAM muïc ñích chung ñòa chæ töø 30H – 7FH.
2. Boä nhôù:
2.1 Boä nhôù coá ñònh EPROM:
EPROM 1: Coù ñòa chæ töø 0000H – 1FFFH (8KB), chöùa chöông trình heä thoáng ñieàu khieån taát caû caùc quaù trình hoaït ñoäng cuûa maùy.
EPROM 2: Coù ñòa chæ töø 2000H – 3FFFH (8KB), chöùa chöông trình öùng duïng cho maïch ghi ñoïc EPROM.
2.2 Boä nhôù truy xuaát baát kyø (RAM):
Chöùa caùc chöông trình coøn söõa ñoåi hoaëc chöùa döõ lieäu vaø keát quaû taïm thôøi trong quaù trình tính toaùn. Ñaëc ñieåm cuûa loaïi naøy laø döõ lieäu seõ maát khi heä thoáng maát ñieän.
Trong KIT vi ñieàu khieån duøng hai RAM, loaïi 2764 coù ñòa chæ toång coäng töø 4000H – 7FFFH (16KB).
2.3 Khoái I/O: 
Khoái I/O coù nhieäm vuï giao tieáp giöõa kit vi ñieàu khieån vôùi nhöõng heä thoáng öùng duïng beân ngoaøi, ñoù laø 2 vi maïch 8255, ñòa chæ cuûa port, thanh ghi ñieàu khieån nhö sau:
5255-1 : Ñòa chæ port A : 8000H 
 : Ñòa chæ port B : 8001H
 : Ñòa chæ port C : 8002H
 : Ñòa chæ thanh ghi töø ñieàu khieån (CW ): 8003H
8255-2 : Ñòa chæ port A : A000H
 : Ñòa chæ port B: A001H 
 : Ñòa chæ port C: A002H
 : Ñòa chæ thanh ghi töø ñieàu khieån (CW ): A003H
2.4 Khoái queùt baøn phím vaø hieån thò:
Goàm coù IC queùt phím 8279, baøn phím vaø boä hieån thò 8 led 7 ñoaïn:
IC 8279 ñaõ ñöôïc giôùi thieäu ôû treân.
Baøn phím goàm 26 phím, 16 phím soá thaäp luïc phaân töø 0 – F duøng ñeå nhaäp caùc leänh vaø caùc döõ lieäu, coøn laïi laø caùc phím chöùc naêng.
Boä hieån thò : laø thieát bò xuaát duøng ñeå quan saùt vieäc thöïc hieän chöông trình, kieåm tra döõ lieäu … goàm 8 led 7 ñoaïn ñöôïc ñieàu khieån bôûi IC queùt 8279 thoâng qua caùc BJT SWITCH vaø IC ñeäm.
Quan heä giöõa ñôn vò xöû lí trung taâm vaø caùc khoái treân lieân heä nhau döïa vaøo caùc bus.
Bus döõ lieäu: duøng ñeå chuyeån soá lieäu qua laïi giöõa caùc khoái, dung löôïng cuûa khoái phuï thuoäc vaøo khaû naêng cuûa ñôn vò xöû tí trung taâm.
Bus ñòa chæ: Ñöôïc truyeàn töø ñôn vò xöû lí trung taâm ñeáùn caùc khoái, ñòa chæ naøy seõ xaùc ñònh khoái ñöôïc choïn laøm vieäc vôùi CPU. Coù toång coäng 16 ñöôøng ñòa chæ, soá oâ nhôù coù ñöôïc seõ laø: 216= 56536.
Bus ñieàu khieån : Goàm caùc tín hieäu ñieàu khieån ñeå ñaûm baûo söï hoaït ñoäng ñoàng boä nhau giöõa caùc khoái .
Vuøng ñòa chæ: EPROM1 : 0000H – 1FFFH
	 EPROM2 : 2000H – 3FFFH 
	 RAM1 : 4000H – 5FFFH 
	 RAM2 : 6000H – 7FFFH 
	 8255-1: 8000H 
	 8255-2: A000H
I. Giôùi thieäu:
Ñeå laäp trình cho EPROM noäi cuûa vi ñieàu khieån 8951 coù nhieàu phöông phaùp khaùc nhau nhö: duøng kit vi xöû lí, maùy tính … ÔÛ ñaây em duøng kit vi ñieàu khieån 8951 laäp trình cho EPROM noäi thoâng qua 2 IC giao tieáp 8255.
Vì moãi phöông phaùp coù nhöõng öu ñieåm vaø khuyeát ñieåm rieâng neân tuøy töøng tröôøng hôïp cuï theå maø ta löïa choïn phöông phaùp phuø hôïp.
Veà phaàn cöùng maïch naïp EPROM noäi do em thieát keá coù theå laäp trình ñöôïc hai caáp ñieän aùp Vpp=5v hoaëc Vpp=12v.
II. Sô ñoà keát noái maïch naïp EPROM noäi:
Caùch keát noái maïch nhö sau:
A0 – A7 (P1.0 – P1.7) cuûa 8951 keát noái vôùi portA cuûa 8255-1.
A8 – A11 (P2.0 – P2.3) cuûa 8951 keát noái vôùi portB-L cuûa 8255-1.
P2.6, P2.7, P3.6, P3.7 cuûa 8951 laàn löôït keát noái vôùi portC-L cuûa 8255-1.
Do – D7 (P0.0 – P0.7) cuûa 8951 keát noái vôùi port A cuûa 8255-2.
PROG\ALE, Vpp\EA laàn löôït keát noái vôùi PC0, PC1 (portC cuûa 8255-2)
Chaân RST ñöôïc noái leân Vcc.
Chaân PSEN\ ñöôïc noái mass.
Caùc chaân XTAL1, XTAL2 ñöôïc noái vôùi thaïch anh 12M.
Nguoàn 12v ñöôïc ñieàu khieån caáp cho Vpp nhö sau:
Khi PC1=L thì Q ngaét laøm cho D2 phaân cöïc thuaän neân Vpp=12v.
Khi PC1=H, Q daãn laøm cho D1 phaân cöïc thuaän neân Vpp=5v.
III. Khôûi taïo coång giao tieáp 8255:
Coång giao tieáp duøng ñeå giao tieáp giöõa kit vi ñieàu khieån vôùi maïch naïp EPROM noäi. Coång naøy laøm vieäc theo phöông phaùp giao tieáp song song vaø laøm vieäc ôû cheá ñoä xuaát nhaäp I/0.
Ñeå thieát laäp töø ñieàu khieån 8255 ta thieát laäp ñoaïn chöông trình sau:
MOV A , Haèng soá.
MOV DPTR , Ñòa chæ töø ñieàu khieån.
MOVX @DPTR ,A
ÔÛ ñaây giaù trò cuûa töø ñieàu khieån nhaäp vaøo laø haèng soá thaäp luïc phaân, noäi dung cuûa töø ñieàu khieån seõ quyeát ñònh caùc coång xuaát hay nhaäp theo yeâu caàu thieát keá. Caùc coång naøy phaûi ñöôïc ñieàu khieån tröôùc khi xuaát hay nhaäp döõ lieäu qua coång.
IV. Chöông trình ñoïc döõ lieäu töø EPROM noäi:
Giaûi thuaät laäp trình:
Khôûi taïo 8255.
Xuaát caùc tín hieäu ñieàu khieån.
Xuaát ñòa chæ caàn ñoïc.
Nhaän döõ lieäu töø bus döõ lieäu.
Giaûi maõ hieån thò.
Keát thuùc.
Khi chöa naïp döõ lieäu vaøo hoaëc sau khi chaïy chöông trình xoùa, neáu chöông trình ñuùng thì döõ lieäu ñoïc ra laø FFH.
Khi ñaõ chaïy chöông trình naïp roài thì döõ lieäu ñoïc ra laødöõ lieäu maø ta caàn naïp.
Taïi caùc ñòa chæ 030H, 031H, 032H ñoïc ra coù noäi dung laø:1EH, 51H, FFH (read-signature) ñoái vôùi loaïi AT89C51, ñaây laø loaïi IC maø ta thöïc hieän vieäc laäp trình.
 Ñoái vôùi caùc loaïi khaùc thuoäc hoï AT89 thì signature theo baûng sau:
Signature
Moâtaû
1E 51 FF
AT89C51
1E 51 05
AT89C51
1E 61 FF
AT89VL51
1E 61 05
AT89VL51
1E 52 FF
AT89C52
1E 52 05
AT89C52
1E 62 FF
AT89VL52
1E 62 05
AT89VL52
1E 11
AT89C1051
1E 21
AT89C2051
V. Chöông trình naïp EPROM noäi: 
Vi ñieàu khieån AT89C51 ñöôïc tung ra thò tröôøng vôùi maûng boä nhôù beân trong roãng (nghóa laø noäi dung =FFH) vaø saün saøng ñöôïc laäp trình. Chöông trình naïp EPROM noäi seõ ñöôïc laäp trình moät trong hai möùc ñieän aùp 12v hoaëc 5v.
Vaäy ñeå xaùc ñònh möùc ñieän aùp laäp trình ta ñoïc signature taïi caùc ñòa chæ: 030H, 031H, 032H nhö sau:
Adress
Vpp=5v
Vpp=12v
030H
1EH
1EH
031H
51H
51H
032H
05H
FFH
Maët khaùc ta coù theå xem top -side - mark (nhaõn) nhö sau:
Vpp=12v
Vpp=5v
AT8951
AT8951
XXXX
XXXX-5
YYWW
YYWW
ÔÛ ñaây loaïi IC maø em laäp trình laø 12v.
Giaûi thuaät laäp trình:
Khôûi taïo 8255.
Troû ñòa chæ ñeán vuøng nhôù caàn naïp.
Xuaát döõ lieäu ra bus döõ lieäu.
Xuaát caùc tín hieäu ñieàu khieån.
Naâng ñieän aùp Vpp leân 12v.
Taïo xung laäp trình ALE/PROG.
Keát thuùc.
Chuù yù: Chu kyø vieát 1byte khoâng quaù 1,5ms.
Khi naïp döõ lieäu cho vi ñieàu khieån thì chöông trình naïp phaûi naïp töøng byte, ñoàng thôøi phaûi chaïy chöông trình xoùa tröôùc khi laäp trình cho EPROM noäi.
Giaûn ñoà thôøi gian laäp trình cho EPROM noäi:
VI. Chöông trình xoaù EPROM noäi:
Chöông trình xoaù phaûi ñöôïc thöïc hieän tröôùc khi laäp trình. Khi xoaù thì xoaù toaøn boä vuøng nhôù beân trong.
Giaûi thuaät laäp trình:
Khôûi taïo 8255.
Xuaát caùc tín hieäu ñieàu khieån.
Ñieàu khieån ñieän aùp Vpp=12v.
Ñieàu khieån xung ALE /PROG.
Keát thuùc.
Chuù yù: Ñeå xoaù ñöôïc noäi dung beân trong ñoøi hoûi xung laäp trình PROG\ phaûi ôû möùc thaáp khoaûng 10ms.
THI COÂNG MAÏCH
Ñöôïc söï giuùp ñôõ cuûa thaày Nguyeãn Ñình Phuù, trong thôøi gian thi coâng em thöïc hieän ñöôïc moät soá phaàn vaø traûi qua caùc böôùc sau:
Tieán haønh laøm maïch in (öùng duïng phaàn meàm veõ maïch in EAGLE).
Kieåm tra maïch in.
Raùp vaø haøn linh kieän.
Keát noái board maïch vôùi kit vi ñieàu khieån thoâng qua connector.
Kieåm tra maïch.
Naïp chöông trình.
HÖÔÙNG PHAÙT TRIEÅN ÑEÀ TAØI
Sau thôøi gian thöïc hieän em thaáy raèng ñeà taøi coøn nhieàu haïn cheá veà khaû naêng söû duïng roäng raõi trong thöïc teá. Neáu coù ñieàu kieän thì ñeà taøi neân phaùt trieån theo höôùng sau ñaây:
Maïch coù theå môû roäng ghi ñoïc cho caùc loaïi vi ñieàu khieån thuoäc hoï AT89 nhö: AT89C51, AT89VL51, AT89C52, AT89VL52, AT89C1051, AT89C2051.
Maïch coù theå ghi ñoïc cho loaïi vi ñieàu khieån nhoû (loaïi 20 chaân).
Neáu chæ ñôn thuaàn laø ghi ñoïc thì keát noái tröïc tieáp vi ñieàu khieån vôùi vi ñieàu khieån khaùc maø khoâng caàn thoâng qua 8255 ñeå maïch coù tính kinh teá hôn.
Neáu khoâng duøng kit vi ñieàu khieån thì coù theå duøng card naïp töø maùy vi tính thoâng qua coång COM. Khi ñoù ngoân ngöõ laäp trình coù theå laø ngoân ngöõ Pascal, ngoân ngöõ C…
KEÁT LUAÄN
Sau 7 tuaàn laøm vieäc khaån tröông cuøng vôùi söï nhieät tình cuûa thaày höôùng daãn Nguyeãn Ñình Phuù. Ñeà taøi: “MAÏCH GHI ÑOÏC EPROM CHO VI ÑIEÀU KHIEÅN 8951” ñaõ hoaøn thaønh ñuùng thôøi gian qui ñònh. Ñaây laø ñeà taøi mang tính toång hôïp, keát hôïp giöõa kyõ thuaät ñieän töû vaø kyõ thuaät laäp trình.
Vôùi söï quyeát taâm vaø noã löïc khoâng ngöøng, taäp luaän vaên naøy ñaõ giuùp cho em böôùc ñaàu laøm quen vôùi ñeà taøi khoa hoïc vaø em ñaõ thaät söï tích luõy moät soá kieán thöùc cô baûn veà vi ñieàu khieån, thieát keá maïch vaø kyõ thuaät laäp trình.
Maët duø thôøi gian haïn heïp, taøi lieäu tham khaûo quaù ít, vaø coù nhieàu vaán ñeà naûy sinh trong quaù trình thieát keá phaàn meàm, nhöng em ñaõ coá gaéng heát söùc mình cuõng nhö söï taän taâm giuùp ñôõ cuûa thaày höôùng daãn neân ñaõ ñaït ñöôïc nhöõng yeâu caàu ñaët ra.
Qua quaù trình thöïc hieän luaän vaên, em ñaõ töï ñaùnh giaù ñöôïc phaàn naøo coøn haïn cheá vaø ít nhieàu boå xung caùc kieán thöùc coøn haïn heïp trong thôøi gian hoïc taïi tröôøng nhaát laø moân kyõ thuaät vi xöû lí.
Em xin chaân thaønh caûm ôn moïi söï giuùp ñôõ taän tình, quùy baùu cuûa caùc thaày - coâ trong tröôøng vaø thaày höôùng daãn, ñaõ taïo nhieàu ñieàu kieän giuùp chuùng em hoaøn thaønh toát nhieäm vuï ñöôïc giao ñuùng thôøi gian qui ñònh.
Moät laàn nöõa, em raát mong söï ñoùng goùp yù kieán cuûa quí thaày - coâ cuøng vôùi caùc baïn sinh vieân tham khaûo ñeå taäp luaän vaên ñöôïc hoaøn haûo hôn.
	Thaønh Phoá Hoà Chí Minh. Ngaøy 28-02-2000
	Sinh vieân thöïc hieän
	BUØI VAÊN TRÍ
PHUÏ LUÏC
Noäi dung chöông trình
	porta1	equ	8000h	;quan li dia chi thap a7-a0
	portb1	equ	8001h	;quan li dia chi cao a11-a8	
	portc1	equ	8002h
	cw1	equ	8003h
	porta2	equ	0a000h
	portb2	equ	0a001h
	portc2	equ	0a002h
	cw2	equ	0a003h
	ht	equ	0c000h
	dk	equ	0c001h
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
;chuong trinh kiem tra - hien thi
	org 5200h
	mov dptr,#cw1	; khoi tao 8255
	mov a,#80h
	movx @dptr,a
	mov dptr,#cw2
	mov a,#90h
	movx @dptr,a
	mov dptr,#portc2 ;pc0=prog\=H
	mov a,#03h	 ;pc1=Vpp=H
 	movx @dptr,a
	mov dptr,#portc1 ;P2.6=PC0=L; P2.7=PC1=L; P3.6= PC2=H
	mov a,#0ch	 ;P3.7=PC3=H 
	movx @dptr,a
;chuyen dia chi bat dau doc va dia chi ket thuc vao cac o nho ben trong
	mov dptr,#4f00h	;nap dia chi luu Begin_Addr can doc
	movx a,@dptr	
	mov 10h,a	;cat tam byte B_A_L vao o nho 10h
	inc dptr
	movx a,@dptr	
	mov 11h,a	;cat tam byte B_A_H vao o nho 11h
	inc dptr
	movx a,@dptr	
	mov 12h,a	;cat tam byte E_A_L vao o nho 12h
	inc dptr
	movx a,@dptr	
	mov 13h,a	;cat tam byte E_A_H vao o nho 13h
;goi dia chi can doc ra 8255 de dieu khien Addr cua EPROM trong 8951
rd2:	mov dptr,#porta1 
	mov a,10h	;chuyen byte B_A_L vao dpl
	movx @dptr,a
	mov dptr,#portb1
	mov a,#11h	;chuyen byte B_A_H vao dph
	movx @dptr,a
	mov dptr,#porta2
	movx a,@dptr 	;xuat data ra thanh ghi a
	mov 14h,a	;cat byte data vua doc vao o nho 14h
	lcall decode	;goi chtr con giai ma hien thi
	lcall display	;goi chtr con hien thi
rd5:	lcall key	;goi chtr quet phim cho nhan phim de doc byte ke
	cjne a,#0ffh,rd4
	sjmp rd5	;quay lai cho
rd4:	mov a,11h	;chuyen dia chi byte H vao a de so sanh
	cjne a,13h,rd1	;so sanh dia chi byte H neu chua bang thi tang len 1
	mov a,10h	;chuyen dia chi byte L vao a de so sanh
	cjne a,12h,rd1	;so sanh dia chi byte L neu chua bang thi tang len 1
;hien thi chu END de bao ket thuc 
	mov 25h,#79h	;ma chu E
	mov 26h,#37h	;ma chu N
	mov 27h,#5eh	;ma chu d
	lcall display
	sjmp $	;ngung
rd1:	inc 10h	;tang B_A_L len 1
	mov a,10h	;kiem tra xem co bang 0 hay khong
	cjne a,#00,rd2	;nhay ve vi chua bang 0
	inc 11h	;tang B_A_H len 1
	sjmp rd2	
;chuong trinh con giai ma hien thi
	org 5280h
decode:	mov dptr,#0200h
	mov a,11h	;lay byte B_A_H de giai ma hien thi
	push 0e0h	;cat A
	swap a	;xu li so thu nhat
	anl a,#0fh
	mov dpl,a
	movx a,@dptr
	mov 20h,a
	pop 0e0h	;lay lai A
	anl a,#0fh	;xu li so thu 2
	mov dpl,a
	movx a,@dptr
	mov 21h,a
	mov a,10h	;lay byte B_A_L de giai ma hien thi 
	push 0e0h	;cat A
	swap a	;xu li so thu nhat
	anl a,#0fh
	mov dpl,a
	movx a,@dptr
	mov 22h,a
	pop 0e0h	;lay lai A
	anl a,#0fh	;xu li so thu 2
	mov dpl,a
	movx a,@dptr
	mov 23h,a
	mov a,14h	;lay byte DATA de giai ma hien thi 
	push 0e0h	;cat A
	swap a	;xu li so thu nhat
	anl a,#0fh
	mov dpl,a
	movx a,@dptr
	mov 26h,a
	pop 0e0h	;lay lai A
	anl a,#0fh	;xu li so thu 2
	mov dpl,a
	movx a,@dptr
	mov 27h,a
	mov 24h,#00
	mov 25h,#00
	ret
	org 52d5h
display:	
	mov r1,#80h	;tu dieu khien 8279 chong nhap nhay
	mov r0,#20h	;quan li dia chi ma hien thi
dis1:	mov dptr,#dk
	mov a,r1
	movx @dptr,a	
	mov dptr,#ht
	mov a,@r0
	movx @dptr,a	
	inc r1
	inc r0
	mov a,r0
	cjne a,#28h,dis1
	ret
	org 0223h
key:	
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
;chuong trinh nap EPROM trong 8951 co hien thi dia chi va du lieu
	org 5300h
	mov dptr,#cw1	; khoi tao 8255
	mov a,#80h
	movx @dptr,a
	mov dptr,#cw2
	mov a,#80h
	movx @dptr,a
;dieu khien Vpp = 5V
	mov dptr,#portc2 ;pc0=prog\=H
	mov a,#00000011b ;pc1=Vpp=H=5v
 	movx @dptr,a
;chuyen dia chi bat dau Write cho EPROM vao cac o nho noi
;dia chi bat dau DATA va dia chi ket thuc DATA vao cac o nho ben trong
	mov dptr,#4f10h	;nap dia chi luu Begin_Addr can doc
	movx a,@dptr	
	mov 16h,a	;cat tam byte B_A_E_L vao o nho 16h
	inc dptr
	movx a,@dptr	
	mov 17h,a	;cat tam byte B_A_E_H vao o nho 17h
	inc dptr
	movx a,@dptr	
	mov 18h,a	;cat tam byte B_D_L vao o nho 18h
	inc dptr
	movx a,@dptr	
	mov 19h,a	;cat tam byte B_D_H vao o nho 19h
	inc dptr
	movx a,@dptr	
	mov 1Ah,a	;cat tam byte E_A_H vao o nho 1Ah
	inc dptr
	movx a,@dptr	
	mov 1Bh,a	;cat tam byte E_A_H vao o nho 1Bh
;goi ADDR can write ra 8255 de dieu khien Addr cua EPROM trong 8951
wr4:	mov dptr,#porta1 
	mov a,16h	;chuyen byte B_A_E_L vao dpl
	movx @dptr,a
	mov dptr,#portb1
	mov a,#17h	;chuyen byte B_A_E_H vao dph
	movx @dptr,a
;goi DATA ra data bus de nap cho EPROM	
	mov dpl,18h	;lay Addr_L quan li vung data
	mov dph,19h	;lay Addr_H quan li vung data
	movx a,@dptr	;lay DATA can nap tu RAM ngoai
	mov dptr,#porta2 ;nap dia chi dieu khien DATA vao dptr
	movx @dptr,a	;xuat DATA ra bus data
;chuyen dia chi va data can nap de hien thi
	mov 10h,16h	;chuyen dia chi cua EPROM
	mov 11h,17h
	mov 14h,a	;cat tam vao o nho 14H de giai ma hien thi	
	lcall decode	;goi chtr con giai ma 
	lcall display	;goi chtr con hien thi
;tao xung Vpp va PROG\
	mov dptr,#portc1 ;P2.6=PC0=L; P2.7=PC1=H; P3.6= PC2=H
	mov a,#00001110b	 ;P3.7=PC3=H 
	movx @dptr,a
	mov dptr,#portc2 ;pc0=prog\=H
	mov a,#01h	 ;pc1=Vpp=L tuong duong 12V
 	movx @dptr,a	 ;pc0=prog\=L
	mov a,#00h	 ;pc1=Vpp=L
 	movx @dptr,a
	mov 1fh,#10	;delay
wr1:	djnz 1fh,wr1
	mov a,#01h	 ;pc1=Vpp=L tuong duong 12V
 	movx @dptr,a	 ;pc0=prog\=H
	mov a,#03h	 ;pc1=Vpp=H tuong duong 5V
 	movx @dptr,a	 ;pc0=prog\=H
;ket thuc doan chtr tao xung nap cham dut qua trinh nap 1 BYTE
	inc 16h	;tang ADDR_L cua EPROM len 1
	mov a,16h
	cjne a,#00h,wr2
	inc 17h	;tang ADDR_H cua EPROM len 1 khi byte L ve 00h
wr2:	mov a,19h	;chuyen dia chi byte H vao a de so sanh
	cjne a,1bh,wr3	;so sanh dia chi byte H neu chua bang thi tang len 1
	mov a,18h	;chuyen dia chi byte L vao a de so sanh
	cjne a,1ah,wr3	;so sanh dia chi byte L neu chua bang thi tang len 1
;hien thi chu END de bao ket thuc 
	mov 25h,#79h	;ma chu E
	mov 26h,#37h	;ma chu N
	mov 27h,#5eh	;ma chu d
	lcall display
	sjmp $	;ngung
wr3:	inc 18h	;tang B_A_L len 1
	mov a,18h	;kiem tra xem co bang 0 hay khong
	cjne a,#00,wr4	;nhay ve vi chua bang 0
	inc 19h	;tang B_A_H len 1
	sjmp wr4	
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
;chuong trinh xoa eprom 
	org 5400h ; dia chi xoa
	mov dptr ,# cw1 ; tu dieu khien 8255-1
	mov a, #80h ; A,B,C: xuat 
	movx @dptr,a
	mov dptr, #cw2 ; tu dieu khien 8255-2 
	mov a ,#80h ; A,B,C:xuat 
	movx @dptr ,a
;xuat cac tin hieu dieu khien xoa eprom	
	mov dptr,#portc1 
	mov a,#01h ;p2.6=h , p2.7=p3.6=p3.7=l
	movx @dptr,a
	mov dptr,#portc2 ;tao xung prog\ =h
	movx @dptr ,a
	mov a,#00h ;tao xung prog\ =l
	movx @dptr ,a
;toa xung delay 10ms 
	push #06h
	push #07h
 	mov r6,#28h
 y2:	mov r7,#FFh
 y1:	djnz r7 ,y1 ;nhay neu r7 chua bang ffh
	djnz r6 ,y2 ;nhay neu r6 chua bang 28h
	pop #07h
	pop #06h
	mov a,#01h
	movx @dptr ,a
;ket thuc hien thi chu END
	mov 25h ,79h ;ma chu E
	mov 26h ,37h ;ma chu N
	mov 27h ,5eh ;ma chu D 
	lcall display ; goi chuong trinh hien thi 
	sjmp $ ; ngung
 end.
Muïc luïc
 	Trang
Chöông I : Daãn nhaäp
Thi coâng maïch	62
Höôùng phaùt trieån ñeà taøi	63
Keát luaän	64
Taøi lieäu tham khaûo	
Phuï luïc	65
            Các file đính kèm theo tài liệu này:
 LUANVAN.DOC LUANVAN.DOC