ÐẠI HỌC CÔNG NGHIỆP TP. HỒ CHÍ MINH ÐẠI HỌC CÔNG NGHIỆP TP. HỒ CHÍ MINH KHOA...

20
ÐẠI HỌC CÔNG NGHIỆP TP. HỒ CHÍ MINH ÐẠI HỌC CÔNG NGHIỆP TP. HỒ CHÍ MINH KHOA CÔNG NGHỆ ðIỆN TỬ KHOA CÔNG NGHỆ ðIỆN TỬ BỘ MÔN ðIỆN TỬ CÔNG NGHIỆP BỘ MÔN ðIỆN TỬ CÔNG NGHIỆP BÀI GIẢNG LÝ THUYẾT BÀI GIẢNG LÝ THUYẾT VI XỬ LÝ VI XỬ LÝ TP. HỒ CHÍ MINH TP. HỒ CHÍ MINH THÁNG 09 THÁNG 09-2009 2009 VI XỬ LÝ VI XỬ LÝ Giáo Giáo viên: PHẠM QUANG TRÍ viên: PHẠM QUANG TRÍ

Transcript of ÐẠI HỌC CÔNG NGHIỆP TP. HỒ CHÍ MINH ÐẠI HỌC CÔNG NGHIỆP TP. HỒ CHÍ MINH KHOA...

ÐẠI HỌC CÔNG NGHIỆP TP. HỒ CHÍ MINHÐẠI HỌC CÔNG NGHIỆP TP. HỒ CHÍ MINHKHOA CÔNG NGHỆ ðIỆN TỬKHOA CÔNG NGHỆ ðIỆN TỬBỘ MÔN ðIỆN TỬ CÔNG NGHIỆPBỘ MÔN ðIỆN TỬ CÔNG NGHIỆP

BÀI GIẢNG LÝ THUYẾTBÀI GIẢNG LÝ THUYẾT

VI XỬ LÝVI XỬ LÝ

TP. HỒ CHÍ MINHTP. HỒ CHÍ MINHTHÁNG 09THÁNG 09--20092009

VI XỬ LÝVI XỬ LÝ

GiáoGiáo viên: PHẠM QUANG TRÍviên: PHẠM QUANG TRÍ

ÐẠI HỌC CÔNG NGHIỆP TP. HỒ CHÍ MINHÐẠI HỌC CÔNG NGHIỆP TP. HỒ CHÍ MINHKHOA CÔNG NGHỆ ðIỆN TỬKHOA CÔNG NGHỆ ðIỆN TỬBỘ MÔN ðIỆN TỬ CÔNG NGHIỆPBỘ MÔN ðIỆN TỬ CÔNG NGHIỆP

CHƯƠNG 3CHƯƠNG 3

LẬP TRÌNH HỢP NGỮLẬP TRÌNH HỢP NGỮCHO 8051CHO 8051

CÁC KIỂU ðỊNH ðỊA CHỈCÁC KIỂU ðỊNH ðỊA CHỈ

CÁC KIỂU ðỊNH ðỊA CHỈCÁC KIỂU ðỊNH ðỊA CHỈ

�� ðịnhðịnh ñịañịa chỉchỉ thanhthanh ghighi (Register(Register Addressing)Addressing)�� ðượcðược dùngdùng ñểñể truytruy xuấtxuất dữdữ liệuliệu trongtrong cáccác thanhthanh ghighi từtừ RR00 ñếnñến RR77..

�� SốSố bytebyte củacủa lệnhlệnh:: 11 bytebyte..

�� CấuCấu trúctrúc lệnhlệnh::

�� VíVí dụdụ:: ADDADD A,A, RR55⇒⇒ LệnhLệnh cộngcộng nộinội dungdung thanhthanh ghighi AA vớivới nộinội dungdung thanhthanhghighi RR55.. (Giả(Giả sửsử:: (A)=(A)=0505H,H, (R(R55)=)=99AH)AH)..ghighi RR55.. (Giả(Giả sửsử:: (A)=(A)=0505H,H, (R(R55)=)=99AH)AH)..

⇒⇒ MãMã lệnhlệnh::

⇒⇒ MôMô tảtả lệnhlệnh::

CÁC KIỂU ðỊNH ðỊA CHỈCÁC KIỂU ðỊNH ðỊA CHỈ

�� ðịnhðịnh ñịañịa chỉchỉ trựctrực tiếptiếp (Direct(Direct Addressing)Addressing)�� ðượcðược dùngdùng ñểñể truytruy xuấtxuất dữdữ liệuliệu trongtrong cáccác ôô nhớnhớ RAMRAM nộinội ((0000HH -- 77FHFH)) vàvà

trongtrong cáccác SFRSFR ((A,A, B,B, PP00,, PP11,, PP22,, PP33,, DPH,DPH, DPL,DPL, ……)) hayhay ((8080HH -- FFHFFH))..

�� SốSố bytebyte củacủa lệnhlệnh:: 22 bytebyte..

�� CấuCấu trúctrúc lệnhlệnh::

�� VíVí dụdụ:: ADDADD A,A, PP11 hoặchoặc ADDADD A,A, 9090HH ⇒⇒ LệnhLệnh cộngcộng nộinội dungdung thanhthanh ghighi AAvớivới nộinội dungdung PortPort 11 hayhay ôô nhớnhớ 9090HH.. (Giả(Giả sửsử:: (A)(A) == 0505H,H, (P(P11)) == ((9090H)H) ==vớivới nộinội dungdung PortPort 11 hayhay ôô nhớnhớ 9090HH.. (Giả(Giả sửsử:: (A)(A) == 0505H,H, (P(P11)) == ((9090H)H) ==99AH)AH)..

⇒⇒ MãMã lệnhlệnh::

⇒⇒ MôMô tảtả lệnhlệnh::

CÁC KIỂU ðỊNH ðỊA CHỈCÁC KIỂU ðỊNH ðỊA CHỈ

�� ðịnhðịnh ñịañịa chỉchỉ giángián tiếptiếp (Indirect(Indirect Addressing)Addressing)�� ðượcðược dùngdùng ñểñể truytruy xuấtxuất dữdữ liệuliệu trongtrong cáccác ôô nhớnhớ RAMRAM nộinội cócó ñịañịa chỉchỉ thaythay

ñổiñổi liênliên tụctục khikhi chươngchương trìnhtrình ñangñang chạychạy.. RR00 vàvà RR11 hoạthoạt ñộngñộng nhưnhư cáccácconcon trỏtrỏ vàvà nộinội dungdung củacủa chúngchúng chỉchỉ rara ñịañịa chỉchỉ ôô nhớnhớ RAMRAM cầncần truytruy xuấtxuất..

�� SốSố bytebyte củacủa lệnhlệnh:: 11 bytebyte..

�� CấuCấu trúctrúc lệnhlệnh::

VíVí dụdụ:: ADDADD A,A, @@RR00 ⇒⇒ LệnhLệnh cộngcộng nộinội dungdung thanhthanh ghighi AA vớivới nộinội dungdung ôô�� VíVí dụdụ:: ADDADD A,A, @@RR00 ⇒⇒ LệnhLệnh cộngcộng nộinội dungdung thanhthanh ghighi AA vớivới nộinội dungdung ôônhớnhớ cócó ñịañịa chỉchỉ chứachứa trongtrong thanhthanh ghighi RR00.. ((GiảGiả sửsử:: (A)(A) == 0505H,H, (R(R00)) == 33BH,BH,((33BH)BH) == 99AHAH))..

⇒⇒ MãMã lệnhlệnh::

⇒⇒ MôMô tảtả lệnhlệnh::

CÁC KIỂU ðỊNH ðỊA CHỈCÁC KIỂU ðỊNH ðỊA CHỈ

�� ðịnhðịnh ñịañịa chỉchỉ tứctức thờithời (Immediate(Immediate Addressing)Addressing)�� ðượcðược dùngdùng ñểñể truytruy xuấtxuất mộtmột hằnghằng sốsố ((giágiá tr�tr� bi�tbi�t trctrc)) thaythay vìvì làlà mộtmột

biếnbiến ((giágiá tr�tr� khôngkhông bi�tbi�t trctrc)) nhưnhư cáccác kiểukiểu ñịnhñịnh ñịañịa chỉchỉ trêntrên.. CóCó thểthểdùngdùng ñểñể nạpnạp dữdữ liệuliệu vàovào mọimọi ôô nhớnhớ vàvà thanhthanh ghighi bấtbất kỳkỳ ((ñốiñối vớivới thanhthanh ghighi88 bitbit:: ##0000HH -- ##00FFHFFH,, ñốiñối vớivới thanhthanh ghighi 1616 bitbit:: ##00000000HH -- ##00FFFFHFFFFH))..

�� SốSố bytebyte củacủa lệnhlệnh:: 22 bytebyte..

�� CấuCấu trúctrúc lệnhlệnh::

�� VíVí dụdụ:: ADDADD A,A, ##99AHAH ⇒⇒ LệnhLệnh cộngcộng nộinội dungdung thanhthanh ghighi AA vớivới giágiá trịtrị 99AHAH..((GiảGiả sửsử:: (A)(A) == 0505HH))..

⇒⇒ MãMã lệnhlệnh::

⇒⇒ MôMô tảtả lệnhlệnh::

CÁC KIỂU ðỊNH ðỊA CHỈCÁC KIỂU ðỊNH ðỊA CHỈ

�� ðịnhðịnh ñịañịa chỉchỉ tươngtương ñốiñối (Relative(Relative Addressing)Addressing)�� ðược sử dụng cho các lệnh nhảy (rẽ nhánh).ðược sử dụng cho các lệnh nhảy (rẽ nhánh).

�� ðịa chỉ tương ñối (ðịa chỉ tương ñối (hay offsethay offset) là một giá trị ) là một giá trị 8 bit có dấu8 bit có dấu..

�� Tầm nhảy giới hạn là: Tầm nhảy giới hạn là: --128 byte … 127 byte 128 byte … 127 byte từ vị trí của lệnh tiếp theo từ vị trí của lệnh tiếp theo sau lệnh nhảy.sau lệnh nhảy.

�� Số byte của lệnh: Số byte của lệnh: 2 byte2 byte..

�� Cấu trúc lệnh: Cấu trúc lệnh:

CÁC KIỂU ðỊNH ðỊA CHỈCÁC KIỂU ðỊNH ðỊA CHỈ

�� ðịnhðịnh ñịañịa chỉchỉ tươngtương ñốiñối (Relative(Relative Addressing)Addressing)�� Ví dụ 1:Ví dụ 1: SJMP SJMP AAAAAA⇒⇒ Lệnh nhảy ñến nhãn AAA (Lệnh nhảy ñến nhãn AAA (Giả sử: nhãn AAA ñặt Giả sử: nhãn AAA ñặt

trước lệnh ở ñịa chỉ 0107H, lệnh SJMP nằm trong bộ nhớ tại ñịa chỉ trước lệnh ở ñịa chỉ 0107H, lệnh SJMP nằm trong bộ nhớ tại ñịa chỉ 0100H và 0101H0100H và 0101H).).

⇒⇒ MãMã lệnhlệnh::

⇒⇒ MôMô tảtả lệnhlệnh::⇒⇒ MôMô tảtả lệnhlệnh::

CÁC KIỂU ðỊNH ðỊA CHỈCÁC KIỂU ðỊNH ðỊA CHỈ

�� ðịnhðịnh ñịañịa chỉchỉ tươngtương ñốiñối (Relative(Relative Addressing)Addressing)�� Ví dụ 2:Ví dụ 2: SJMP SJMP AAAAAA⇒⇒ Lệnh nhảy ñến nhãn AAA (Lệnh nhảy ñến nhãn AAA (Giả sử: nhãn AAA ñặt Giả sử: nhãn AAA ñặt

trước lệnh ở ñịa chỉ 203BH, lệnh SJMP nằm trong bộ nhớ tại ñịa chỉ trước lệnh ở ñịa chỉ 203BH, lệnh SJMP nằm trong bộ nhớ tại ñịa chỉ 2040H và 2041H2040H và 2041H).).

⇒⇒ MãMã lệnhlệnh::

⇒⇒ MôMô tảtả lệnhlệnh::⇒⇒ MôMô tảtả lệnhlệnh::

CÁC KIỂU ðỊNH ðỊA CHỈCÁC KIỂU ðỊNH ðỊA CHỈ

�� ðịnhðịnh ñịañịa chỉchỉ tuyệttuyệt ñốiñối (Absolute(Absolute Addressing)Addressing)�� ðược sử dụng cho các lệnh nhảy (rẽ nhánh): ðược sử dụng cho các lệnh nhảy (rẽ nhánh): ACALLACALL và và AJMPAJMP..

�� ðịa chỉ tuyệt ñối là một giá trị ðịa chỉ tuyệt ñối là một giá trị 11 bit11 bit..

�� Tầm nhảy giới hạn là: Tầm nhảy giới hạn là: trong cùng trang 2KB hiện hànhtrong cùng trang 2KB hiện hành..

�� Số byte của lệnh: Số byte của lệnh: 2 byte2 byte..

�� Cấu trúc lệnh: Cấu trúc lệnh:

CÁC KIỂU ðỊNH ðỊA CHỈCÁC KIỂU ðỊNH ðỊA CHỈ

�� ðịnhðịnh ñịañịa chỉchỉ tuyệttuyệt ñốiñối (Absolute(Absolute Addressing)Addressing)�� Ví dụ:Ví dụ: AJMP AJMP AAAAAA⇒⇒ Lệnh nhảy ñến nhãn AAA (Lệnh nhảy ñến nhãn AAA (Giả sử: nhãn AAA ñặt Giả sử: nhãn AAA ñặt

trước lệnh ở ñịa chỉ 0F46H, lệnh AJMP nằm trong bộ nhớ tại ñịa chỉ trước lệnh ở ñịa chỉ 0F46H, lệnh AJMP nằm trong bộ nhớ tại ñịa chỉ 0900H và 0901H0900H và 0901H).).

⇒⇒ MãMã lệnhlệnh::

CÁC KIỂU ðỊNH ðỊA CHỈCÁC KIỂU ðỊNH ðỊA CHỈ

�� ðịnhðịnh ñịañịa chỉchỉ tuyệttuyệt ñốiñối (Absolute(Absolute Addressing)Addressing)⇒⇒ MôMô tảtả lệnhlệnh::

CÁC KIỂU ðỊNH ðỊA CHỈCÁC KIỂU ðỊNH ðỊA CHỈ

�� ðịnhðịnh ñịañịa chỉchỉ dàidài (Long(Long Addressing)Addressing)�� ðược sử dụng cho các lệnh nhảy (rẽ nhánh): ðược sử dụng cho các lệnh nhảy (rẽ nhánh): LCALLLCALL và và LJMPLJMP..

�� ðịa chỉ dài là một giá trị ðịa chỉ dài là một giá trị 16 bit16 bit..

�� Tầm nhảy giới hạn là: Tầm nhảy giới hạn là: toàn bộ không gian nhớ 64KBtoàn bộ không gian nhớ 64KB..

�� Số byte của lệnh: Số byte của lệnh: 3 byte3 byte..

�� Cấu trúc lệnh: Cấu trúc lệnh:

CÁC KIỂU ðỊNH ðỊA CHỈCÁC KIỂU ðỊNH ðỊA CHỈ

�� ðịnhðịnh ñịañịa chỉchỉ dàidài (Long(Long Addressing)Addressing)�� Ví dụ:Ví dụ: LJMP LJMP AAAAAA⇒⇒ Lệnh nhảy ñến nhãn AAA (Lệnh nhảy ñến nhãn AAA (Giả sử: nhãn AAA ñặt Giả sử: nhãn AAA ñặt

trước lệnh ở ñịa chỉ A209H, lệnh LJMP nằm trong bộ nhớ tại ñịa chỉ trước lệnh ở ñịa chỉ A209H, lệnh LJMP nằm trong bộ nhớ tại ñịa chỉ 0100H, 0101H và 0102H0100H, 0101H và 0102H).).

⇒⇒ MãMã lệnhlệnh::

⇒⇒ MôMô tảtả lệnhlệnh::

CÁC KIỂU ðỊNH ðỊA CHỈCÁC KIỂU ðỊNH ðỊA CHỈ

�� ðịnhðịnh ñịañịa chỉchỉ chỉchỉ sốsố (Indexed(Indexed Addressing)Addressing)�� ðượcðược dùngdùng trongtrong cáccác ứngứng dụngdụng cầncần tạotạo bảngbảng nhảynhảy hayhay bảngbảng tìmtìm kiếmkiếm..

KiểuKiểu ñịnhñịnh ñịañịa chỉchỉ nàynày dùngdùng mộtmột thanhthanh ghighi nềnnền ((PCPC hayhay DPTRDPTR)) kếtkết hợphợpvớivới mộtmột offsetoffset ((AA)) ñểñể tạotạo thànhthành dạngdạng ñịañịa chỉchỉ chocho lệnhlệnh:: JMPJMP vàvà MOVCMOVC..

�� SốSố bytebyte củacủa lệnhlệnh:: 11 bytebyte..

�� CấuCấu trúctrúc lệnhlệnh::

�� VíVí dụdụ:: JMPJMP @A+DPTR@A+DPTR ⇒⇒ LệnhLệnh nhảynhảy giángián tiếptiếp ((GiảGiả sửsử:: (A)(A) == 2525HH vàvà(DPTR)(DPTR) == 12341234HH))..

(A) + (DPTR) = 25H + 1234H = (A) + (DPTR) = 25H + 1234H = 1259H1259H

⇒⇒ Vậy chương trình sẽ nhảy ñến thực thi lệnh tại ñịa chỉ 1259HVậy chương trình sẽ nhảy ñến thực thi lệnh tại ñịa chỉ 1259H

CÁC KIỂU ðỊNH ðỊA CHỈCÁC KIỂU ðỊNH ðỊA CHỈ

�� ðịnhðịnh ñịañịa chỉchỉ thanhthanh ghighi (Register(Register Addressing)Addressing)

�� ðịnhðịnh ñịañịa chỉchỉ trựctrực tiếptiếp (Direct(Direct Addressing)Addressing)

�� ðịnhðịnh ñịañịa chỉchỉ giángián tiếptiếp (Indirect(Indirect Addressing)Addressing)

�� ðịnhðịnh ñịañịa chỉchỉ tứctức thờithời (Immediate(Immediate Addressing)Addressing)

�� ðịnhðịnh ñịañịa chỉchỉ tươngtương ñốiñối (Relative(Relative Addressing)Addressing)

�� ðịnhðịnh ñịañịa chỉchỉ tuyệttuyệt ñốiñối (Absolute(Absolute Addressing)Addressing)ðịnhðịnh ñịañịa chỉchỉ tuyệttuyệt ñốiñối (Absolute(Absolute Addressing)Addressing)

�� ðịnhðịnh ñịañịa chỉchỉ dàidài (Long(Long Addressing)Addressing)

�� ðịnhðịnh ñịañịa chỉchỉ chỉchỉ sốsố (Indexed(Indexed Addressing)Addressing)

TẬP LỆNH CỦA 8051TẬP LỆNH CỦA 8051

�� GiớiGiới thiệuthiệu tậptập lệnhlệnh củacủa 80518051::�� TốiTối ưuưu hóahóa chocho cáccác ứngứng dụngdụng ñiềuñiều khiểnkhiển 88 bitbit..

�� CóCó nhiềunhiều kiểukiểu ñịnhñịnh ñịañịa chỉchỉ ñểñể truytruy xuấtxuất dữdữ liệuliệu..

�� HỗHỗ trợtrợ cáccác ứngứng dụngdụng ñiềuñiều khiểnkhiển 11 bitbit..

�� TậpTập lệnhlệnh gồmgồm 255255 lệnhlệnh::•• 139139 lệnhlệnh cócó ñộñộ dàidài 11 bytebyte..

•• 9292 lệnhlệnh cócó ñộñộ dàidài 22 bytebyte..

•• 2424 lệnhlệnh cócó ñộñộ dàidài 33 bytebyte..

�� TậpTập lệnhlệnh ñượcñược chiachia làmlàm 55 nhómnhóm::•• NhómNhóm lệnhlệnh sốsố họchọc ((ArithmeticArithmetic Operations)Operations)..

•• NhómNhóm lệnhlệnh logiclogic ((LogicalLogical Operations)Operations)..

•• NhómNhóm lệnhlệnh didi chuyểnchuyển dữdữ liệuliệu ((DataData Transfer)Transfer)..

•• NhómNhóm lệnhlệnh xửxử lýlý bitbit ((BooleanBoolean VariableVariable Manipulation)Manipulation)..

•• NhómNhóm lệnhlệnh rẽrẽ nhánhnhánh ((ProgramProgram Branching)Branching)..

TẬP LỆNH CỦA 8051TẬP LỆNH CỦA 8051

�� MộtMột sốsố kýký hiệuhiệu dùngdùng trongtrong lệnhlệnh ::�� RnRn ðịa chỉ thanh ghi sử dụng (ðịa chỉ thanh ghi sử dụng (R0 R0 –– R7R7).).�� directdirect ðịa chỉ trực tiếp của một byte trong RAM nội.ðịa chỉ trực tiếp của một byte trong RAM nội.�� @Ri@Ri ðịa chỉ gián tiếp sử dụng (ðịa chỉ gián tiếp sử dụng (R0 hoặc R1R0 hoặc R1).).�� sourcesource Toán hạng nguồn (Toán hạng nguồn (Rn, direct hoặc @RiRn, direct hoặc @Ri).).�� destdest Toán hạng ñích (Toán hạng ñích (Rn, direct hoặc @RiRn, direct hoặc @Ri).).�� #data#data Hằng số 8 bit .Hằng số 8 bit .�� #data16#data16 Hằng số 16 bit.Hằng số 16 bit.�� bitbit ðịa chỉ trực tiếp của một bit (ðịa chỉ trực tiếp của một bit (ñịa chỉ bitñịa chỉ bit).).�� bitbit ðịa chỉ trực tiếp của một bit (ðịa chỉ trực tiếp của một bit (ñịa chỉ bitñịa chỉ bit).).�� relrel Offset 8 bit có dấu.Offset 8 bit có dấu.�� addr11addr11 ðịa chỉ 11 bit.ðịa chỉ 11 bit.�� addr16addr16 ðịa chỉ 16 bit.ðịa chỉ 16 bit.�� ←←←←←←←←…… ðược thay thế bởi …ðược thay thế bởi …�� (…)(…) Nội dung của …Nội dung của …�� ((…))((…)) Nội dung ñược chứa bởi …Nội dung ñược chứa bởi …�� rrrrrr Thanh ghi của dãy thanh ghi (Thanh ghi của dãy thanh ghi (R0 R0 -- R7R7).).�� ii ðịa chỉ gián tiếp sử dụng (R0 hoặc R1).ðịa chỉ gián tiếp sử dụng (R0 hoặc R1).�� dddddddddddddddd Các bit dữ liệu.Các bit dữ liệu.�� aaaaaaaaaaaaaaaa Các bit ñịa chỉ.Các bit ñịa chỉ.�� eeeeeeeeeeeeeeee ðịa chỉ tương ñối.ðịa chỉ tương ñối.

TẬP LỆNH CỦA 8051TẬP LỆNH CỦA 8051NHÓM LỆNH SỐ HỌCNHÓM LỆNH SỐ HỌC

�� 11.. LệnhLệnh cộngcộng (Add)(Add)::

ADD A, <srcADD A, <src--byte>byte>�� MôMô tảtả:: ADDADD cộngcộng nộinội dungdung củacủa thanhthanh ghighi AA ((AA)) vớivới nộinội dungdung củacủa mộtmột

bytebyte cócó ñịañịa chỉchỉ ñượcñược chỉchỉ rara trongtrong lệnhlệnh ((srcsrc--bytebyte)) vàvà ñặtñặt kếtkết quảquả vàovàothanhthanh ghighi AA.. CácCác cờcờ bịbị ảnhảnh hưởnghưởng..

�� CácCác dạngdạng lệnhlệnh::��ADDADD A,A, RnRn

←←←←←←←←(A) (A) ←←←←←←←← (A) + (Rn)(A) + (Rn)

��ADDADD A,A, directdirect

(A) (A) ←←←←←←←← (A) + (direct)(A) + (direct)

��ADDADD A,A, @Ri@Ri

(A) (A) ←←←←←←←← (A) + ((Ri))(A) + ((Ri))

��ADDADD A,A, #data#data

(A) (A) ←←←←←←←← (A) + #data(A) + #data