Nghề: Sửa chữa thiết bị điện công nghiệp ở cấp trình độ lành nghề. Tài liệu này được thiết kế theo từng mô đunmôn học thuộc hệ thống mô đunmôn học của một chương trình, để đào tạo hoàn chỉnh Nghề: Sửa chữa thiết bị điện công nghiệp ở cấp trình độ lành nghề. Được dùng làm giáo trình cho học viên ở các khóa đào tạo, cũng có thể sử dụng cho đào tạo ngắn hạn hoặc cho các công nhân kỹ thuật, các nhà quản lý và người sử dụng nhân lực tham khảo. Đây là tài liệu thử nghiệm sẽ được hoàn chỉnh để trở thành giáo trình chính thức trong hệ thống dạy nghề.
Trang 2LỜI GIỚI THIỆU
Nghề: Sửa chữa thiết bị điện công nghiệp ở cấp trình độ lành nghề.Tài liệu này được thiết kế theo từng mô đun/môn học thuộc hệ thống
mô đun/môn học của một chương trình, để đào tạo hoàn chỉnh Nghề: Sửachữa thiết bị điện công nghiệp ở cấp trình độ lành nghề
Được dùng làm giáo trình cho học viên ở các khóa đào tạo, cũng có thể
sử dụng cho đào tạo ngắn hạn hoặc cho các công nhân kỹ thuật, các nhà quản
lý và người sử dụng nhân lực tham khảo
Đây là tài liệu thử nghiệm sẽ được hoàn chỉnh để trở thành giáo trìnhchính thức trong hệ thống dạy nghề
Thái Nguyên, ngày tháng… năm 2014
Tham gia biên soạn:
Trang 3MỤC LỤC
1 Lời Tựa 3
2 Giới thiệu môn học 5
3 Mục lục 6
4 Bài 1: Sơ lược về kich sử hướng phát triển của vi điều khiển
7 5 Bài 2: Cấu trúc vi điều khiển8051 8
6 Bài 3: Tập lênh vi điều khiển 8051 9
7 Bài 4: Bộ định thời 51
8 Bài 5: Cổng nối tiếp 70
9 Bài 6: Ngắt 89 10 Tài liệu tham khảo 104
11 Thuật ngữ 140
MÔ ĐUN: VI ĐIỀU KHIỂN
Mã mô đun: CIE 02 31 00
Vị trí, tính chất, ý nghóa và vai trò của mô đun :
Trang 4Đây là một mô đun chuyên ngành được học vào năm thứ hai của trình
độ 3 sau khi học viên đã hoàn tất các mô đun hỗ trợ trước đó như : Linh kiện điện tử , mạch điện tử , kỹ thuật số
Trong các dây chuyền sản xuất, cũng như các thiết bị tự động đơn lẻ
hiện nay việc ứng dụng vi xử lý trong các lĩnh vự c này là rất phổ biến
nhằm tăng tính linh hoạt, độ chính xác cũng như độ ổn định của hệ
thống Do đó, kiến thức về vi xử lý rất cần thiết cho công nhân ngành
sửa chữa thiết bị điện tử công nghiệp
Mục tiêu của mô đun:
Sau khi hoàn tất mô-đun này, học viên có năng lực:
- Hiểu được các kiến thức cơ bản về vi điều khiển họ 8051
- Giải thích được nguyên lý hoạt động của hệ dùng vi điều khiển
- Kiểm tra và viết được các chương trình ứng dụng dùng vi điều khiển
- Vận hành được các thiết bị và dây chuyền sản xuất dùng vi điều khiển
- Phát huy tính tích cực, chủ động, sáng tạo và tư duy khoa học trong côngviệc
Nội dung chính của mô đun:
Để thực hiện mục tiêu bài học này, nội dung bao gồm:
• Lịch sử phát triển của vi điều khiển
• Định nghóa về vi điều khiển
• Các kiểu cấu trúc bộ nhớ trong vi điều khiển và vi xử lý
• Lĩnh vực ứng dụng vi điều khiển
• Hướng phát triển trong tương lai
Mô đun vi điều khiển gồm các nội dung chính sau:
Bài 1: Sơ lược về kich sử hướng phát triển của vi điều khiển
Bài 2: Cấu trúc vi điều khiển8051
Bài 3: Tập lênh vi điều khiển 8051
Bài 4: Bộ định thời
Bài 5: Cổng nối tiếp
Bài 6: Ngắt
Bài 1 SƠ LƯỢC VỀ LỊCH SỬ HƯỚNG PHAT TRIỂN VI ĐỀU KHIỂN
Thời gian: 02 giờ
Trang 5Mã mô đun: CIE 02 31 00 Giới thiệu:
Đặc điểm của bài chỉ là phần mở đầu trình bày lịch sử xuất hiện các họ vi mạch nói chung và sau đó là vi điều khiển cũng như hướng phát triển trong tương lai, Vì vậy trong nội dung không đòi hỏi người học phải chuẩ n bị nhiều kiến thức hỗ trợ khác, nhưng sau khi học xong cần phải hiể u rõ bản chất vi điều khiển để có thể áp dụng một cách hợp lý nhất cho các yêu cầu trong thực tế
Mục tiêu:
- Hiểu lịch sử phát triển của vi điều khiển
- Hiểu được cấu trúc chung của vi điều khiển
- Biết được các lĩnh vực ứng dụng và hướng phát triển trong tương lai của
vi điều khiển
- Nghiêm túc chấp hành nội quy học tập
Nội dung:
1.Lịch sử phát triển
2.Vi điều khiển
2.1.Nguyên lý cấu tạo
Nội dung chi tiết, phân bổ thời gian và hình thức giảng dạy của Bài 1
Tiêu đề/Tiểu tiêu đề Thời gian (giờ) Hình thức giảng dạy
1.Lịch sử phát triển 0,5 0.5 LT2.Vi điều khiển 1 1
2.1.Nguyên lý cấu tạo 0,5 LT2.2.Các kiểu cấu trúc bộ nhớ 0,25
2.2.1.Cấu trúc Von Neumann 0,25 LT2.2.2.Cấu trúc Harvard 0,25 LT3.Lĩnh vực ứng dụng 0,25 0,25 LT4.Hướng phát triển 0,25 0,25 LT
Trang 6càng nhỏ Linh kiện hội đủ 2 ưu điểm trên chính là vi xử lý
Máy tính điện tử đầu tiên của mỹ năm 1946 tên gọi ENIAC đẫ sử dụng18.000 bóng đèn điện tử và sau đầu năm 1960 được IBM thay thế bằng model
1410 với tồn bộ linh kiện là transistor Vì chức nă ng phức tạp nên việc lắpráp hệ thố ng cũng rất khó khăn và tốn kém, do đã đã phát sinh ý tưởng phảitìm cách thu nhỏ kích thước của các linh kiện rời như: transistor, diode, điệntrở và kết quả là sự ra đời của công nghệ vi mạch
Theo yêu cầu của các chuyên viên về tên lửa của cơ quan NASA luônđòi hỏi tính ổn định và kích thước thật nhỏ nên vào năm 1958 Jack Kilby củahãng Texas instrument đã thiết kế được vi mạch đầu tiên và năm 1963 công tyRockwell đã cho ra đời tên lửa Minerva II được chế tạo tòan bộ bằng vi mạchTrong lĩnh vự c dân sự vào năm 1961 công ty Fairchild lần đầu tiên giớithiệu một FF không dùng 2 hoặc 4 transistor rời mà được tích hợp trong một
vi mạch đơn tinh thể
Các thế hệ vi mạch đầu tiên chỉ được sản xuất theo công nghệ lưỡng cực,trong trường hợp cần nhiều lớp khuếch tán, nhiều lổ tiếp xúc và đườngdẫn giá thành có thể lên đến 10 - 20 đô la một mạch Nhờ kỹ thuật MOS mật
độ tích hợp được tăng cao hơn hẳn kỹ thuật lưỡng cực
Hướng phát triển tiếp theo sau đó là công nghệ CMOS bao gồm 2transistor trường bổ túc làm giảm công suất tiêu thụ vì tại cùng một thời điểmluôn có 1 transistor bị khóa
Với yêu cầu ngày càng phức tạp và đa dạng làm cho việc sản xuất vimạch với số lượng lớn cũng khó khăn, điều này dẩn đến mộ t suy nghỉ mới vềmột vi mạch có khả năng lập trình, các vi mạch này có cấu tạo giống nhau vàchức năng sẽ thay đổi sau khi lập trình V.D: Bằng ph ương pháp làm chảy cácđường dẫn điện Không bao lâu vào năm 1974 hãng INTEL đã sản xuất đượcchíp vi xử lý đầu tiên lập trình theo yêu cầu của khách hàng mở đầu cho kỉnguyên vi xử lý cũng còn được gọi là cuộc cách mạng công nghiệp lần thứ II
2.Vi điều khiển.
Một vi xử lý chỉ giao tiếp được với bên ngoài thông qua các khối vào - ra
và để lưu trử dữ liệu lại phải cần đến bộ nhớ Dữ liệu nhận vào được xử lý bởichương trình và sau đó kết quả cũng như các tín hiệu điều khiển sẽ được đưađến khối ra Đầu tiên ba khối chức năng này được kết hợp với nhau: Đơn vị
xử lý trung tâm, khối vào-ra và bộ nhớ để tạo thành micro computer, bus hệthống cũ nhiệm vụ kết nối các khối kể trên với nhau
Do yêu cầu giảm nhỏ kích thước và giá thành sản xuất, người ta đã tíchhợp các khối chức năng của micro computer trong cùng mõt linh kiện và đượcđặt tên là vi điều khiển (microcontroller)
2.1.Nguyên lý cấu tạo.
Điểm cần lưu ý về vi điều khiển là sơ đồ khối cấu tạo của nó Cấu tạomột họ microcontroller chủ yếu dựa trên một kiểu tiêu chuẩn bao gồm cáctính năng quan trọng nhất, nhiều chủng loại phù hợp với các lĩnh vực ứngdụng đặc biệt khác nhau, có thể kết hợp thêm thiết bị ngoại vi để tăng khảnăng hoặc giảm nhỏ kích thước đến mức tối thiểu trong các ứng dụng chuyênbiệt như: Kết nối bus, kết nối video hoặ c điều khiển trực tiếp các cơ cấu hiển
Trang 7thị LCD Với kiểu tiêu chuẩn cũng đủ dùng cho hầu hết các ứng dụng
Bus ngoại vi
Bộ nhớChương trình
Vi xử lý Clock
Đến bộNhớ mởRộng
Đến ngoại
Vi mởRộng
Digital I/0 Analog I/0 Serial I/0
Bus bộ nhớ
Hình 1.1 Cấu trúc máy tính
Hằng sốBiến
ROM/
EPROM
Giao tiếpNối tiếp
Trang 8Hình 1.2 Cấu trúc vi điều khiểnPort 0
Bus dữ liệu và địa chỉ
Port 1 Port 2 Port 3
Biến đổiA/D
Realtime-Clock
Hình 1.3 Sơ đồ khối vi điều khiển
Trang 92.2.Các kiểu cấu trúc bộ nhớ.
Điểm cần lưu ý về vi điều khiển là sơ đồ khố i cấu tạo của nó Cấu tạomột họ microcontroller chủ yế u dự a trên m ột ki ểu tiêu chuẩn bao gồm cáctính năng quan trọng nhất, nhiề u chủng loại phù hợp với các lĩnh vực ứngdụng đặc biệt khác nhau, có thể kết hợp thêm thiết bị ngoại vi để tăng khảnăng hoặc giảm nhỏ kích thước đế n mức tối thiểu trong các ứng d ụngchuyên biệt như: Kết nối bus, kết nối video hoặ c điều khiển trực tiếp các cơcấu hiển thị LCD Với kiểu tiêu chuẩn cũng đủ dùng cho hầu hết các ứngdụng
2.2.1.Cấu trúc Von Neumann.
Trong cấu trúc Von Neumann chỉ có mộ t vùng đị a chỉ tuyến tính bao g
Trang 10ồm tất c ả dữ liệu và l ệnh đ iều khiển, độ lớn c ủa vùng địa chỉ ph ụ thuộc vàochiều dài của bộ đếm chương trình, n ếu không trang bị thêm linh kiện phụ thìviệc đị nh địa chỉ b ộ nhớ chương trình và bộ nhớ dữ liệu không độc lập vớinhau Trong cấu trúc này chỉ tồn tại một bus dữ liệu và một bus đị a chỉ đểđọc-ghi dữ li ệu và đọc lệnh điều khiển chương trình và không có kh ả năngthực hiện song song (truy xuất đồng thời bộ nhớ dữ liệu và bộ nhớ chươngtrình)
2.2.2.Cấu trúc Harvard.
Gồm hai vùng địa ch ỉ riêng biệt cho bộ nhớ dữ li ệu và bộ nhớ chươngtrình nên có th ể truy xuất song song dữ liệu và lệnh điều khiển, cấu trúc nàyđặc biệ t thích hợp với các vi điều khiển 16 và 32 bít vì làm tăng tốc độ làm vi
ệc Nếu chỉ có một hệ th ống bus như thường thấy ở vi đ iều khiển 8 bít thì vi
ệc truy xuất bộ nhớ dữ liệu hoặc bộ nhớ chương trình sẽ được thực hiện thơngqua các tín hiệ u điều khiển, nếu không có yêu cầu ghi vào bộ nhớ chươngtrình thì cấu trúc này cịn cho phép tăng tính an tồn của chương trình
Bus địa chỉBus điều khiển
Cấu trúc busPhân bố bộ nhớ
Hình 1.4 Cấu trúc Von Neumann
1Bus địa chỉ
1Bus điều khiển
Bộ nhớ chương Trình và hằng số
Bộ nhớchươngtrình
2Bus điều khiển
2Bus địa chỉ2Bus dữ liệu
Trang 113.Lĩnh vực ứng dụng.
Vi đ iều khiển hiện nay được ứng dụng trong nhiề u lĩnh vực như: TV,thi ết bị HiFi, máy giặt, điện thoại và trong ơ tơ gĩp phần làm đơn giản hóa
Trang 12quá trình s ử dụng với nhiều tính năng và độ an tồn cao hơn Ngồi ra vi điề ukhiển cịn được áp dụng trong lĩnh vực khoa học kỹ thuật như: các thiết bịphân tích và đ o lường, trong công nghiệp như các dây chuyền sản xuất tựđộng, trong lĩnh vực máy công cụ như CNC và điều khiển chất lượng sảnphẩm
4.Hướng phát triển.
Yêu cầu đặt ra cho vi điều khiển hiện nay là tă ng lĩnh vực ứng dụng với
tố c độ xử lý ngày càng nhanh và kích thước nhỏ gọn, công suất tiêu th ụ thấp.Vấn đề đặt ra là li ệu với vi điều khiển 8 bít có cịn phù hợp hay không ? hoặctrong tương lai phải thay bằng các vi điều khiển 16/32 bít
Khác với vi xử lý việc phát triển luơn kèm theo việc nâng cao khả năngtính tốn bằng cách mở rộng hệ thống bus Đối với vi điề u khiể n không nhấtthiết phải như thế , một vi đi ều khiển 8 bít cũng đủ cho rất nhiều ứngs dụng
và vi điều khiển 16 bít là hồn tồn quá dư thừa, trong trường hợp c ần giảm giáthành, kích thước và công suất tiêu thụ thì vi điều khiển 4 bít là giải pháp tối
ưu Một vài ứng dụng cần vi điều khiển có nhiều khối ngoại vi, có ứng dụnglại cần ngoại vi tốc độ cao, hướng phát triển tương lai là tăng khả năng củaCPU và khối ngoại vi
Một hướng đơn gi ản là tăng tần số xung đồng h ồ để rút ngắ n thời gianthự c hiện chương trình, giảm thời gian biến đổi A/D và tăng tần s ố gi ới hạncủa timer Tuy nhiên các linh ki ện bên ngồi cũng phải có khả nă ng làm việc
ở tần số cao, khi tăng tần số đồng thời cũng làm tăng công suất tiêu thụ của viđiều khiển
Việc tối ưu hóa cấu trúc chương trình và bộ nhớ cũ ng gĩp phầ n nângcao khả năng hệ thống Trong các ứng dụng đa nhiệm, phương pháp phânđoạn và phân dãy hóa có một ý nghỉa rất lớn
Với công nghệ sả n xuất mới có thể đồng thời tăng tầ n số làm việc và gi
ảm công suất tiêu thụ và cả điện áp nuơi điều này s ẽ mở ra các lĩnh vực ứng
dụ ng mới trong đã mạch điện rất đơn giản và năng lượng tiêu thụ rất thấp,bằng cách thay đổi cú pháp tập lệnh thích hợp cho phép biên dịch dễ dàng từcác ngơn ngử cấp cao như ``C'' hoặc ``FORTH'' sang mã lệnh của vi điềukhiển
Trang 13Hình 1.6 Lĩnh vực ứng dụng
Hình 1.7 Hướng phát triển vi điều khiển
Bài 2 CẤU TRÚC VI ĐỀU KHIỂN 8051
Thời gian: 05 giờ
Trang 14Mã mô đun: CIE 02 31 00 Giới thiệu:
Nội dung c ủa bài chỉ thuần túy là lý thuyết, để hiể u rỏ c ần phải chu ẩn
bị các ki ến thức về kỹ thuật số, các hệ thống số đặc bi ệt là số nhị phân vàthập lục phân, cách tổ chức và các đặc tính cơ bản của bộ nhớ bán dẩn ROM
và RAM, khái niệm về đơn vị xử lý thơng tin: Bít, byte, word
Mục tiêu:
- Hiểu được cấu trúc phần cứng vi điều khiển 8051
- Hiểu được cấu trúc bộ nhớ, biết được cách truy xuất bộ nhớ dữ liệu và bộnhớ chương trình
- Hiểu được đặc tính của các thanh ghi đặc biệt
- Biết cách mở rộng thêm bộ nhớ ngoài
- Hiểu nguyên lý hoạt động của mạch reset
- Đảm bảo vệ sinh công nghiệp và an toàn cho người, thiết bị
2.3.RAM có thể truy xuất từng bit
2.4.Các bank thanh ghi
3.Các thanh ghi chức năng đặc biệt
3.1.Thanh ghi trạng thái chương trình
3.2.Thanh ghi B
3.3.Con trỏ Ngăn xếp SP (Stack Pointer)
3.4.Con trỏ dữ liệu DPTR (Data Pointer)
3.5.Các thanh ghi Port (Port Register)
3.6.Các thanh ghi Timer (Timer Register)
3.7.Các thanh ghi Port nối tiếp (Serial Port Register)
3.8.Các thanh ghi ngắt (Interrupt Register)
3.9.Thanh ghi điều khiển nguồn PCON (Power Control Register).4.Bộ nhớ ngoài
4.1.Truy xuất bộ nhớ chương trình ngoài
4.2.Truy xuất bộ nhớ dữ liệu ngoài
5.Hoạt động reset
Trang 15Nội dung chi tiết, phân bổ thời gian và hình thức giảng dạy của Bài 2
Tiêu đề/Tiểu tiêu đề Thời gian (giờ) Hình thức giảng dạy
1.Cấu trúc phần cứng vi điều khiển
3.1.Thanh ghi trạng thái chương
3.7.Các thanh ghi Port nối tiếp
(Serial Port Register)
3.8.Các thanh ghi ngắt (Interrupt
Register)
3.9.Thanh ghi điều khiển nguồn
PCON (Power Control Register)
- Kiến thức cần thiết để thực hiện công việc:
1.Cấu trúc phần cứng vi điều khiển 8051.
1.1.Đặc điểm chung.
MCS-51 là họ vi điều khiển của Intel Các nhà sản xuất IC khác nhưSiemens, Advanced Micro Device, Fujitsu và Philips được cấp phép là các
Trang 16nhà cung cấp thứ hai cho các vi mạch họ MCS-51.
Vi mạch tổng quát của họ MCS-51 là chip 8051, linh kiện đầu tiên của
họ này được đưa ra thị trường Chip 8051 có các đặc điểm được tóm tắt nhưsau:
• 4 Kbyte ROM nội
• 128 byte RAM nội
• 4 port I/O 8 bít
• 2 bộ định thời 16 bít (timer)
• Cổng giao tiếp nối tiếp
• Không gian chương trình ngồi 64 K
• Không gian nhớ dữ liệu ngồi 64 K
Trang 17Hình 2.1 Sơ đồ khối 8051
1.3.Sơ đồ chân.
Hình 2.2 Sơ đồ chân của 8051
Chức năng từng chân của 8051 được mô tả tóm tắt như sau:
Như trong hình 2.2, 32 trong số 40 chân của 8051 có công dụngxuất/nhập Tuy nhiên, 24 trong 32 chân này có hai chức năng (26/32 đối với
8032 và 8052) Mỗi một chân ngồi chức năng xuất nhập cịn có thể hoạtđộng như một đường điều khiển, đường dữ liệu hoặc đường địa chỉ
32 chân nói trên hình thành 4 port 8 bít, với các thi ết kế yêu cầu tốithiểu các thành phần bên ngoài có thể sử dụng các port này làm nhiệm vụxuất/nhập 8 đường cho mỗi port có thể được xử lý như một đơn vị giao tiếpvới các thiết bị song song như máy in, bộ biến đổi D-A hoặc mỗi đường
Trang 18có thể hoạt động độc lập giao tiếp với một thiết bị đơn bít như tiếp điểm,LED, BJT, FET, cuộn dây, động cơ, loa
2.1 Port 0
Port gồm các chân từ 32 đến 39 đối với 8051 có 2 công dụng Trongcác thiết kế cần tối thiểu hóa thành phần, port 0 được sử dụng làm nhiệm vụxuất/nhập Trong các thiết kế lớn hơn có bộ nhớ ngoài, port 0 trở thành busđịa chỉ/dữ liệu đa hợp (byte thấp địa chỉ)
2.2 Port 1
Port 1 chỉ có một công dụng là xuất/nhập (các chân 1…8 trên 8051).Các chân của port 1 được ký hiệu là P1.0, P1.1 P1.7 và được dùng để giaotiếp với thiết bị bên ngoài khi có yêu cầu Không có chức năng nào khácnữa gán cho các chân của port 1, nghóa là chúng chỉ được sử dụng để giaotiếp với các thiết bị ngoại vi (ngoại lệ với 8032, 8052 có thể dùng P1.0 vàP1.1 làm ngõ vào cho mạch định thời thứ ba)
2.3 Port 2
Port 2 gồm các chân từ 21…28 trên 8051 có hai công dụng hoặc làmnhiệm vụ xuất/nhập hoặc là byte địa chỉ cao của bus địa chỉ 16 bít cho cácthiết kế có bộ nhớ chương trình ngồi hoặc các thiết kế có nhiều hơn 256byte bộ nhớ dữ liệu ngoài
2.4 Port 3
Port 3 gồm các chân từ 10…17 trên 8051 có hai công dụng, ngoài chứcnăng xuất/nhập các chân của port 3 còn có chức năng riêng như trình bàytrong bảng 2.2
BẢNG 2.2 CHỨC NĂNG CÁC CHÂN PORT 3 VÀ PORT 1
P3.0 RxD B0H Nhận dữ liệu port nối tiếp
P3.1 TxD B1H Phát dữ liệu port nối tiếp
P3.2 INT0 B2H Ngõ vào ngắt 0 ngoài
P3.3 INT1 B3H Ngõ vào ngắt 1 ngoài
Trang 19Hầu hết các bộ vi xử lý đều có không gian nhớ chung cho dữ liệu vàchương trình Điều này cũng hợp lý vì các chương trình thường được lưu trênđãa và được nạp vào RAM để thực hiện, vậy thì cả hai dữ liệu và chươngtrình đều lưu trú trên RAM.
Các chíp vi điều khiển hiếm khi được sử dụng giống như các vi xử lýtrong máy tính, thay vào đó chúng được dùng làm thành phần trung tâm trongcác thiết kế hướng điều khiển Trong đó bộ nhớ có dung lượng giới hạnkhông có ổ đãa và hệ điều hành Chương trình điều khiển phải thường trútrong ROM
Do lý do trên, 8051 có không gian bộ nhớ riêng cho chương trình và dữliệu Như đã thấy trong bảng 2.1 cả 2 bộ nhớ chương trình và dữ liệu đều đặtbên trong chíp, tuy nhiên có thể mở rộng bộ nhớ chương trình và dữ liệu bằngcách dùng thêm các chip nhớ bên ngồi với dung lượng tối đa là 64 K cho bộnhớ chương trình và 64 K cho bộ nhớ dữ liệu
Bộ nhớ nội trong chíp bao gồm ROM (chỉ có trong 8051/8052) và RAM.RAM trên chíp bao gồm vùng RAM đa chức năng, vùng RAM địa chỉ bít, cácdãy thanh ghi và các thanh ghi chức năng đặc biệt SFR (special funtionregisters), hai đặc tính đáng lưu ý là:
a) Các thanh ghi và các port xuất/nhập được định địa chỉ theo kiểu
ánh xạ bộ nhớ và được truy xuất như một vị trí nhớ trong bộ nhớ
b) Vùng ngăn xếp thường trú trong RAM trên chíp thay vì trong
RAM ngồi như đối với các bộ vi xử lý
Hình 2.5 tóm tắt các không gian nhớ của chíp 8031 không có ROM nội,không trình bày chi tiết về bộ nhớ dữ liệu trên chíp
Hình 2.6 trình bày chi tiết bộ nhớ dữ liệu trên chíp, không gian nhớ nộinày được chia thành: Các dãy thanh ghi (00H 1FH) vùng RAM địa chỉ bít(20H 2FH), vùng RAM đa năng (30H 7FH) và các thanh ghi chức năng đặcbiệt (80H FFH)
Hình 2.5 Tổ chức bộ nhớ của 8031
2.2.RAM đa dụng.
Mặc dù hình 2.6 trình bày vùng RAM đa năng có 80 byte đặt ở địa chỉ từ30H đến 7FH, bên dưới vùng này từ địa chỉ 00H đến 2FH là vùng nhớ có thểđược sử dụng tương tự (mặc dù vùng này có công dụng khác) Bất kỳ vị trí
FF
00
RAM nội
Bộ nhớchương trình
Cho phép bởiPSEN
FFFF
0000
Bộ nhớ dữ liệu
Cho phép bởi
RD và WR
Bộ nhớ ngoài
Trang 20nhớ nào trong vùng RAM đa năng đều có thể được truy xuất tự do bằng cách
sử dụng cách định địa chỉ trực tiếp hoặc gián tiếp Ví dụ để đọc nội dung tại5FH của RAM nội vào thanh ghi A có thể dùng lệnh sau:
MOV A, 5FH
Lệnh trên di chuyển một byte dữ liệu bằng cách dùng kiểu định địa chỉtrực tiếp để xác định vị trí nguồn (nghóa là địa chỉ 5FH) Đích của dữ liệuđược xác định rỏ ràng trong mã lệnh là thanh ghi A
Vùng RAM đa năng còn có thể được truy xuất bằng cách dùng kiểu địnhđịa chỉ gián tiếp qua các thanh ghi R0, R1 Ví dụ hai lệnh sau thực hiện cùngcông việc như ở ví dụ trên
BB
B
A B9 B8 IP2F 7F 7E 7D 7C 7B 7A 79 78
AB
Trang 21Hình 2.6 Cấu trúc RAM nội của 8051
2.3.RAM có thể truy xuất từng bit.
8051 chứa 210 vị trí bít được định địa chỉ trong địa 128 bít chưa trong cácbyte ở địa chỉ tù 20H đến 2FH (16 byte x 8 bít = 128 bít) và phần còn lại chứa
Trang 22trong các thanh ghi chức năng đặc biệt.
Ý tưởng truy xuất các bít riêng lẻ thông qua phần mềm là một đặc trưngmạnh của hầu hết các bộ vi điều khiển Các bít có thể được set, xóa, AND,OR…bằng một lệnh Hầu hết các bộ vi xử lý yêu cầu một chuỗI lệnh đọc-sửa-ghi để nhận được cùng một kết quả Ngoài ra, 8051 còn có port xuất/nhập cóthể định địa chỉ từng bít, điều này làm đơn giản việc giao tiếp bằng phần mềmvới các thiết bị xuất/nhập đơn bít
Như vừa đề cập ở trên, 8051 có 128 vị trí bít được định địa chỉ và có nhiềumục đích ở các byte có địa chỉ từ 20H đến 2FH Các địa chỉ này được truy xuấtnhư là các byte hay các bít tùy vào lệnh cụ thể Ví dụ để set bít 67H bằng 1 tadùng lệnh sau
SETB 67HTheo hình 2.6 cho thấy bít ở địa chỉ 67H là bít có ý nghóa lớn nhất củabyte ở địa chỉ 2CH Lệnh vừa nêu trên không ảnh hưởng đến các bít khác trongbyte này Hầu hết các bộ vi xử lý muốn thực hiện công việc như trên phải dùngcác lệnh có dạng tương tự như sau:
MOV A, 2CH ; đọc cả byte
MOV A, #10000000B ; set bít có ý nghóa lớn nhất
MOV 2CH, A ; ghi trở lạI cả byte
2.4.Các bank thanh ghi.
32 vị trí thấp nhất của bộ nhớ nội chứa các dãy thanh ghi Các lệnh của
8051 hổ trợ 8 thanh ghi từ R0 đến R7 thuộc dãy 0 (bank 0) Đây là dãy mặcđịnh sau khi reset hệ thống Các thanh ghi này ở các địa chỉ từ 00H đến 07H.Lệnh sau đây đọc niI dung tại địa chỉ 05H vào thanh ghi A
MOV A, R5
Lệnh này là lệnh 1 byte dùng kiểu định địa chỉ thanh ghi Dĩ nhiên thao táctương tự có thể thực hiện với một lệnh 2 byte bằng cách dùng kiểu định địa chỉtrực tiếp
MOV A, 05H
Các lệnh sử dụng các thanh ghi từ R0 đến R7 là các lệnh ngắn và thực hiệnnhanh hơn so với các lệnh tương đương sử dụng cách định địa chỉ trực tiếp Cácgiá trị dữ liệu thường được sử dụng nên chứa ở một trong các thanh ghi này.Dãy thanh ghi đang được sử dụng được gọi là dãy thanh ghi tích cực Dãy thanhghi tích cực có thể được thay đổi bằng cách thay đổi các bít chọn dãy trong từtrạng thái chương trình PSW Giả sử rằng dãy thanh ghi 3 (bank 3) tích cực,Lệnh sau đây ghi nội dung thanh ghi A vào vị trí 18H
MOV R0, A
Ý tưởng “các dãy thanh ghi” cho phép chuyển đổi ngữ cảnh nhanh và cóhiệu quả ở những nơi mà các phần riêng lẻ của phần mềm sử dụng một tậpthanh ghi riêng, độc lập với các phần khác của phần mềm
3.Các thanh ghi chức năng đặc biệt.
3.1.Thanh ghi trạng thái chương trình.
Trang 23PSW.4 RS1 D4H Chọn dãy thanh ghi (bít 1)
PSW.3 RS0 D3H Chọn dãy thanh ghi (bít 0)
0
0 = bank 00
1 = bank 11
0 = bank2PSW.2 OV D2H
1
1 = bank 3
Cờ trànPSW.1 - D1H Dự trử
Sẽ làm cho A có nội dung là 00H và cờ CY trong PSW được set bằng 1
Cờ nhớ CY còn là một bộ tích lũy logic được dùng như một thanh ghi 1 bít đốivới các lệnh logic thao tác trên các bít VD: Lệnh sau đây sẽ AND bít 25H với
Cờ 0
Đây là cờ có nhiều mục đích dành cho các ứng dụng của người lập trình
Các bít chọn dãy thanh ghi
Các bít chọn dãy thanh ghi RS0, RS1 dùng để xác định dãy thanh ghi tíchcực Các bít này được xóa sau khi có thao tác reset hệ thống và đổi mức logicbởi phần mềm khi cần VD: Ba lệnh sau cho phép dãy thanh ghi 3 (bank 3) tíchcực, sau đã di chuyển nội dung của R7 (địa chỉ byte 1FH) vào thanh ghi A
SETB RS1
Trang 24SETB RS0
MOV A, R7
Khi đoạn chương trình trên được dịch, các địa chỉ bít sẽ thay thế cho các
ký hiệu RS0 và RS1, vậy thì lệnh SETB RS1 tương đương với lệnh SETB0D4H
Cờ tràn
Cờ tràn OV (over flag) được set bằng 1 sau phép tốn cộng hoặc trừ nếu cóxuất hiện một tràn số học Khi các số có dấu được cộng hoặc được trừ, phầnmềm có thể kiểm tra bít tràn OV để xác định xem kết quả có nằm trong phạm vihợp lệ hay không
Với phép cộng các số không dấu, c ờ tràn OV được bỏ qua Kết quả lớnhơn +128 hoặc nhỏ hơn -127 sẽ set cờ OV bằng 1, ví dụ phép cộng sau đây gây
ra một tràn và set cờ OV trong PSW
Số hex 0F Số thập phân 15
8EH biểu diển số âm -116, như vậy không đúng với kết quả mong muốn là
142 nên cờ OV được set bằng 1
Cờ chẳn lẻ
Bít chẵn lẻ P tự động được set bằng 1 hay xóa bằng 0 ở mỗi chu kỳ máy đểthiết lập kiểm tra chẳn cho thanh ghi A Số các bít 1 trong A cộng với bít P luônluôn là số chẳn Ví dụ nếu thanh ghi A có nội dung là 10101101B, bít P sẽ là 1
để có số bít 1 là 6 Bít chẳn lẻ được sử dụng nhiều để kết hợp với các chươngtrình xuất/nhập nối tiếp trước khi truyền dữ liệu hoặc để kiểm tra chẳn lẻ saukhi nhận dữ liệu
3.2.Thanh ghi B.
Thanh ghi B ở địa chỉ F0H được dùng chung với thanh ghi A trong cácphép toán nhân, chia Lệnh MUL AB nhân hai số 8 bít không dấu chứa trong A
và B và chứa k ết quả 16 bít vào cặp thanh ghi B:A (thanh ghi A cất byte thấp
và thanh ghi B cất byte cao)
Lệnh chia DIV AB chia A cho B, th ương số cất trong A và d ư số cấttrong B Thanh ghi B cịn được xử lý như một thanh ghi nháp, các bít được địnhđịa chỉ của thanh ghi B có địa chỉ từ F0H đến F7H
3.3.Con trỏ Ngăn xếp SP (Stack Pointer).
Con trỏ stack SP (stack pointer) là một thanh ghi 8 bít ở địa chỉ 81H SPchứ a địa chỉ của dữ liệu hiện đang ở đỉnh của stack Các lệnh liên quan đếnstack bao gồm l ệnh cất dữ liệu vào stack và lệnh lấy dữ liệu ra khỏi stack Việccất vào stack làm tăng SP trước khi ghi dữ liệu và việc lấy dữ liệu ra khỏi stack
sẽ giảm SP Vùng stack của 8051 được giữ trong RAM nội và được giới hạnđến các địa chỉ truy xu ất được bởi kiểu định địa chỉ gián tiếp Vùng RAM nội
có 128 byte trên 8031/8051 hoặc 256 byte trên 8032/8052, lệnh sau khởi động
SP để bắt đầu stack tại địa chỉ 60H
MOV SP,#5FH
Trang 25Vùng stack được giới hạn là 32 byte trên 8031/8051 vì địa chỉ cao nhất c
ủa RAM trên chíp là 7FH Giá trị 5FH được dùng ở đây vì SP tăng lên 60Htrước khi thực hiện cất vào stack
Nếu không khởi động SP, nội dung mặc định của thanh ghi này là 07Hnhằm duy trì sự tương thích với 8048, bộ vi điều khi ển đời trước của 8051 Kếtquả là thao tác cất vào stack đầu tiên sẽ lưu dữ liệu vào vị trí nhớ có địa chỉ08H Như vậy, n ếu phần mềm ứng dụng không khởi động SP, dãy thanh ghi 1
và có thể 2 và 3 không cịn hợp lệ vì vùng này được sử dụng làm stack Cáclệnh PUSH và POP sẽ cất dữ liệu vào stack và lấy dữ liệu từ stack, các lệnh gọichương trình con (ACALL, LCALL) và lệnh trở về RET, RETI cũng cất vàphục hồi nội dung của bộ đếm chương trình PC (program counter)
3.4.Con trỏ dữ liệu DPTR (Data Pointer).
Con trỏ dữ liệu DPTR (data pointer) được dùng để truy xuất bộ nhớchương trình ngồi hoặc bộ nhớ dữ liệu ngồi DPTR là một thanh ghi 16 bít cóđịa chỉ là 82H (DPL byte thấp) và 83H (DPH byte cao), 3 lệnh sau đây ghi 55Hvào RAM ngồi ở địa chỉ 1000H
3.5.Các thanh ghi Port (Port Register).
Các port xuất/nhập của 8051 bao gồm port 0 tại địa chỉ 80H, port 1 tại90H, port 2 tại A0H và port 3 tại B0H Các port 0, 2 và 3 không được dùng đểxuất nhập nếu dùng thêm bộ nhớ ngồi hoặc nếu có một số đặc tính đặc biệt của
8051 được sử dụng (như là ngắt, cổng nối tiếp )Ngược lại, P1.2 đến P1.7 luơnluơn là các đường xuất/nhập đa mục đích hợp lệ
Tất cả các port đều được định địa chỉ từng bít nhằm cung cấp các khảnăng giao tiếp mạnh, ví dụ một động cơ nối qua một cuộn dây và một mạchkích dùng transistor nối đến bít 7 của port 1, động cơ có thể dừng hay chạy chỉnhờ vào một lệnh đơn của 8051
Trang 26CLR 97H
Việc sử dụng các ký hiệu được định nghóa trước của trình dịch hợp ngữ
sẽ được thảo luận chi tiết ở các bài sau
Ví dụ sau đây khảo sát việc giao tiếp với một thiết bị có bít trạng thái gọi
là BUSY, bít này được set bằng 1 khi thiết bị đang bận và được xóa khi thiết
bị đã sẳn sàng Nếu BUSY được nối với bít 5 của port 1, vịng lặp sau đâyđược dùng để chờ cho đến khi thiết
bị sẳn sàng
WAIT: JB P1.5, WAIT
Lệnh trên có nghóa là nếu bít P1.5 được set thì nhảy đến nhản WAITcũng có nghóa là nhảy về và kiểm tra lần nữa
3.6.Các thanh ghi Timer (Timer Register).
8051 có hai bộ đếm/định thời (timer/cunter) 16 bít để đị nh các khoảngthời gian hoặc để đếm các sự kiện Bộ định thời 0 có địa chỉ 8AH (TL0, bytethấp) và 8CH (TH0, byte cao), bộ định thời 1 có địa chỉ 8BH (TL1, byte thấp)
và 8DH (TH1, byte cao)
Hoạt động của bộ định thời được được thiết lập bởi thanh ghi chế độđịnh thời TMOD (timer mode register) ở địa chỉ 89H và thanh ghi điều khiểnđịnh thời TCON (timer control register) ở địa chỉ 88H Chỉ có TCON đượcđịnh địa chỉ từng bít
3.7.Các thanh ghi Port nối tiếp (Serial Port Register).
Bên trong 8051 có một port nối tiếp để truyền thông với các thiết bị nốitiếp như các thiết bị đầu cuối hoặc modem, hoặc để giao tiếp với các IC khác
có mạch giao tiếp nối tiếp (như các thanh ghi dịch) Một thanh ghi được gọi là
bộ đệm dữ liệu nối tiếp SBUF (serial data buffer) ở địa chỉ 99H lưu dữ liệutruyền đi và dữ liệu nhận về Việc ghi lên SBUF sẽ nạp dữ liệu để truyền vàviệc đọc SBUF sẽ lấy dữ liệu đã nhận được
Các chế độ hoạt động khác nhau được lập trình thông qua thanh ghi điềukhiển port nối tiếp SCON (serial port control register) ở địa chỉ 98H, thanhghi này được định địa chỉ từng bít
3.8.Các thanh ghi ngắt (Interrupt Register).
8051 có một cấu trúc ngắt với hai mức ưu tiên và năm nguyên nhân ngắt,các ngắt bị vô hiệu hóa sau khi reset hệ thống và sau đó được cho phép bằngcách ghi vào thanh ghi cho phép ngắt IE (interupt enable register) ở địa chỉA8H, mức ưu tiên ngắt được thiết lập qua thanh ghi ưu tiên ngắt IP (interuptpriority register) ở địa chỉ B8H, cả hai thanh ghi này đều được định địa chỉtừng bít
3.9.Thanh ghi điều khiển nguồn PCON (Power Control Register).
Thanh ghi điều khiển nguồn PCON (power control register) có địa chỉ87H chứa các bít điều khiển được tóm tắt trong bảng 2.4
Bít SMOD tăng gấp đơi tốc độ baud của port nối tiếp khi port này hoạtđộng ở các chế độ 1, 2 hoặc 3 các bít 4, 5 và 6 của PCON không được địnhnghóa, các bít 2 và 3 là các bít cờ đa mục đích dành cho các ứng dụng củangười sử dụng
Các bít điều khiển nguồn, nguồn giảm PD và nghỉ IDL, hợp lệ trong tất
Trang 27cả các chip họ MCS-51 nhưng chỉ được hiện thực trong các phiên bản CMOScủa MCS-51, PCON không được định địa chỉ bít.
Chế độ nguồn giảm
Lệnh thiết lập bít PD bằng 1 s ẽ là lệnh sau cùng được thực hiện trướckhi đi vào chế độ nguồn giảm Ở chế độ nguồn giảm:
1) Mạch dao động trên chip ngừng hoạt động
2) Mọi chức năng ngừng hoạt động
3) Nội dung của RAM trên chíp được duy trì
4) Các chân port duy trì mức logic của chúng
5) ALE và PSEN được giữ ở mức thấp, chỉ thốt khỏi chế độ này bằngcách reset hệ thống
Trong suốt thời gian ở chế độ nguồn giảm, VCC có điện áp là 2 V,
cần phải giử cho VCC không thấp hơn sau khi đạt được chế độ nguồn
giảm và c ần phục hồi VCC = 5 V tối thiểu 10 chu kỳ dao động trước
khi chân reset đạt mức thấp lần nữa
BẢNG 2.4 Thanh ghi PCON
Lệnh thiết lập bít IDL bằng 1sẽ là lệnh sau cùng được thực hiện
trước khi đi vào chế độ nghỉ Ở chế độ nghỉ tín hiệu clock nội được
khóa không cho đến CPU nhưng không khóa đối với các chức năng
ngắt, định thời và port nối tiếp Trạng thái của CPU được duy trì và nội
dung của tất cả các thanh ghi cũng được giữ không đổi
Các chân port cũng được duy trì các mức logic của chúng ALE và
PSEN được giữ ở mức cao
Chế độ nghỉ kết thúc bằng cách cho phép ngắt hoặc bằng cách
reset hệ thống, cả hai cách vừa nêu trên đều xóa bít IDL
4.Bộ nhớ ngoài.
4.1.Truy xuất bộ nhớ chương trình ngoài.
Bộ nhớ chương trình ngoài là bộ nhớ chỉ đọc, được cho phép bởi tín hiệuPSEN
8051 Port 0EAALA Port 2
PSEN
ROMD0-D7A0-A7
A8-A15
OE
373
D Q C
Trang 28Hình 2.8 Truy xuất ROM ngoài
Khi có một ROM ngoài được sử dụng, cả hai port 0 và port 2 đều khôngcòn là các port xuất/nhập Kết nối phần cứng với bộ nhớ ngồi được trình bày
ở hình 2.8
Một chu kỳ máy của 8051 có 12 chu kỳ dao động Nếu bộ dao động trênchíp có tần số 12 MHz thì một chu kỳ máy dài 1 μS Trong 1 chu kỳ máy điểnhình, ALE có hai xung và 2 byte của lệnh được đọc từ bộ nhớ chương trình(nếu lệnh chỉ có 1 byte, byte thứ hai bị loại bỏ) Giản đồ thời gian của chu kỳmáy này được gọi là chu kỳ tìm-nạp lệnh được trình bày ở hình 2.9
Trang 29Một chu kỳ máy S1 S2 S3 S4 S5 S6 S1P
1
P2
P1P2 P1
P1
P2OSC
ALE
PSEN
Port 2 PCH PCH
Hình 2.9 Chu kỳ tìm nạp lệnh ROM ngồi
4.2.Truy xuất bộ nhớ dữ liệu ngoài.
Bộ nhớ dữ liệu ngoài là bộ nhớ đọc-ghi được cho phép bởi các tín hiệu RDvà
WR ở các chân P3.7 và P3.6 Lệnh dùng để truy xuất bộ nhớ dữ liệu ngồi làMOVX, sử dụng hoặc con trỏ dữ liệu 16 bít DPTR hoặc R0, R1 làm thanh ghichứa địa chỉ
RAM có thể giao tiếp với 8051 theo cùng cách như ROM ngoại trừ đường
RD nối
với đường cho phép xuất OE của RAM và đường WR nối với đường W củaRAM Các kết nối với bus dữ liệu và bus địa chỉ giống như ROM bằng cách sửdụng port 0 và port 2 như ở phần trên dung lượng của RAM lên đến 64 K
Giản đồ thời gian của thao tác đọc dữ liệu ở bộ nhớ dữ liệu ngồi được trìnhbày ở
hình 2.10 cho lệnh MOVX A,@DPTR Lưu ý là cả hai xung ALE và PSEN được bỏ qua
ở nơi mà xung RD cho phép đọc RAM, nếu lệnh MOVX và RAM ngồi khôngbao giờ được dùng, các xung ALE luơn có tần số bằng 1/6 tần số của mạch daođộng
Giản đồ thời gian của chu kỳ ghi (lệnh MOVX @DPTR, A) cũng tương tự ngoại trừ
Trang 30các xung WR ở mức thấp và dữ liệu được xuất ra ở port 0 (RD vẩn ở mức cao)
Một chu kỳ máy Một chu kỳ máyS1 S2 S3 S4 S5 S6 S1 S2 S3 S4 S5
S6
Hình 2.10 Giản đồ thời gian lệnh MOVX
RAM (1 k)
Trang 31Hình 2.11 Giao tiếp với 1 K RAM
5.Hoạt động reset.
8051 được reset bằng cách giữ chân RST ở mức cao tối thiểu 2 chu kỳmáy và sau đó chuyển về mức thấp RST có thể được tác động bằng tay hoặcđược tác động khi cấp nguồn bằng cách dùng một mạch RC như trình bày ởhình 2.15 Trạng thái của tất cả các thanh ghi sau khi reset hệ thống được tómtắt ở bảng 2.6
Quan trọng nhất trong các thanh ghi này có lẻ là thanh ghi PC (bộ đếmchương trình) được nạp 0000H Khi RST trở lại mức thấp, việc thực hiệnchương trình luơn luơn bắt đầu ở vị trí đầu tiên trong bộ nhớ chương trình đãchính là địa chỉ 0000H, nội dung của RAM trên chíp không bị ảnh hưởng bởireset
BẢNG 2.6 Giá trị của các thanh ghi sau khi reset hệ thống
0x000000B (8032/8052)00H
8051Port 0
EAALEP2.0P2.1RDWRPSEN
D0-D7A0-A7
A8 A9 OE
W CS
373
D Q C
Trang 32a) Bằng tay b) Khi cấp nguồn
Hình 2.15 Sơ đồ mạch
RESET
Bài 3 TẬP LỆNH VI ĐỀU KHIỂN 8051
Trang 33Thời gian: 17 giờ
Mã mô đun: CIE 02 31 00 Giới thiệu:
Bài này trình bày tóm tắt về tập lệnh của họ MCS-51 thơng qua việckhảo sát các kiểu định địa chỉ và các ví dụ về các tình huống lập trình điểnhình
Nội dung gồm cả lý thuyết và thực hành trên bộ thực tập UNIKIT, cácbài thực hành không phải là các chương trình hoàn chỉnh mà chỉ là các chuỗilệnh thực hiện một vài thao tác nhất định nhằm minh họa kết quả của các lệnhđiều khiển
Mục tiêu:
- Hiểu và phân biệt được các kiểu định địa chỉ dữ liệu
- Biết được đặc tính và công dụng của từng lệnh trong 8051
- Xác định được độ lớn cũng như thời gian thực hiện của chương trình
- Kết hợp được các lệnh riêng lẻ để viết chương trình
- Đảm bảo vệ sinh công nghiệp và an toàn cho người, thiết bị
1.5.Định địa chỉ tương đối
1.6.Định địa chỉ tuyệt đối
Nội dung chi tiết, phân bổ thời gian và hình thức giảng dạy của Bài 3
Tiêu đề/Tiểu tiêu đề Thời gian (giờ) Hình thức giảng dạy
1.Các cách định địa chỉ 2 2
1.1.Định địa chỉ thanh ghi 0,25 LT1.2.Định địa chỉ trực tiếp 0,25 LT1.3.Định địa chỉ gián tiếp 0,25 LT
Trang 341.4.Định địa chỉ tức thời 0,25 LT1.5.Định địa chỉ tương đối 0,25 LT1.6.Định địa chỉ tuyệt đối 0,25 LT1.7.Định địa chỉ dài 0,25 LT1.8.Định địa chỉ chỉ số 0,25 LT2.Các nhóm lệnh 15 8 6 1
2.1.Nhóm lệnh số học 2 2 LT-TH2.2.Nhóm lệnh logic 1 1 LT-TH2.3.Nhóm lệnh di chuyển dữ liệu 2 1 LT-TH2.4.Nhóm lệnh xử lý bit 1 1 LT-TH2.5.Nhóm lệnh rẽ nhánh chương
1.1.Định địa chỉ thanh ghi.
MCs 8051 có 8 thanh ghi làm việc được đánh số từ R0 đến R7, trong cáclệnh áp dụng cách định địa chỉ này, thanh ghi được mã hóa bởi 3 bít trongbyte mã lệnh như trình bày ở hình 3.1a
Trong cú pháp hợp ngữ của 8051 các thanh ghi được ký hiệu là Rn (n =0 7) VD lệnh sau đây sẽ cộng nội dung bộ tích lũy với nội dung của thanh ghiR7
sẽ xác định dãy thanh ghi đang hoạt động, khi reset hệ thống thì dãy thanh ghihoạt động mặc định là dãy 0, nhưng cũng có thể chọn dãy thanh ghi khácbằng cách thay đổi giá trị bít 4 và bít 3 của thanh ghi PSW VD:
MOV PSW, #00011000BLúc này dãy thanh ghi hoạt động là dãy 3, bít 4 của PSW là bít RS1 vàbít 3 của PSW là RS0
Có một số lệnh đặc biệt tác động đến một thanh ghi mặc định như : Bộtích lũy, con trỏ dữ liệu …Do đó, không cần đến các bít địa chỉ, trong trườnghợp này bộ tích lũy được ký hiệu là A, con trỏ dữ liệu là DPTR, bộ đếmchương trình là PC, thanh ghi cờ là C, và cặp bộ tích lũy-thannh ghi B là AB.VD:
INC DPTRĐây là lệnh có độ dài 1 byte, kết quả là con trỏ dữ liệu DPTR sẽ tăng lên
1 sau khi lệnh này được thực hiện
Trang 35n n n
Mã lệnh
(a) Bằng thanh ghi (VD: ADD A, R5)
Mã lệnh Địa chỉ trực tiếp(b) Định địa chỉ trực tiếp (VD: ADD A, trực tiếp)
i
Mã lệnh
(c) Địa chỉ gián tiếp (VD: ADD A, @R0)
Mã lệnh Dữ liệu tức thời(d) Tức thời (VD: ADD AQ, #55H)
Mã lệnh Địa chỉ tương đối(e) Địa chỉ tương đối (VD: SJMP <đích đến>
Địa chỉ đích(h) Địa chỉ chỉ số (VD: MOVC A, @A + PC)
Trang 36sẽ được chọn Tất cả các cổng I/O, thanh ghi đặc biệt, thanh ghi điều khiểnhoặc thanh ghi trạng thái có địa chỉ từ 128 đến 255 (80H FFH) Do đó, khi bít
7 trong byte địa chỉ bằng 1 thì thanh ghi đặc biệt tương ứng sẽ được chọn.VD: port 0 và port 1 có địa chỉ trực tiếp là 80H và 90H Thực ra
40
cũng không cần thiết phải nhớ các địa chỉ này vì hợp ngữ 8051 cho phép dùng
ký hiệu P0 để chỉ port 0, TMOD để chỉ thanh ghi chọn chế độ của timer VDlệnh sau:
MOV P1, A
Sẽ chuyển nội dung của bộ tích lũy vào port 1, đị a chỉ trực tiếp của port
1 sẽ được phần mềm hợp ngữ tự động điền vào byte thứ hai trong mã lệnh
1.3.Định địa chỉ gián tiếp.
Làm thế nào để xác định một ơ nhớ khi mà địa chỉ của nó là kết quả củamột phép tính, hoặc địa chỉ này bị thay đổi khi đang chạy chương trình, điềunày thường xảy ra khi cần thâm nhập bảng chữ số hoặc bảng ký tự có địa chỉliên tiếp nhau Yêu cầu này được giải quyết bằng cách dùng hai thanh ghi R0
và R1 làm con tr ỏ, nộI dung của chúng chính là địa chỉ của dữ liệu, hai thanhghi này được xác định bởi bít thấp nhất trong mã lệnh (hình 3.1c)
Cú pháp hợp ngữ 8051 dùng ký hiệu @ đặt trước ký hiệu thanh ghi R0hoặc R1 trong cách định địa chỉ gián tiếp VD: Nếu nội dung thanh ghi R1 là40H và nội dung của ô nhớ trong tại địa chỉ 40H là 55H thì lênh sau
MOV A, @ R1
Sẽ chuyển giá trị 55H vào bộ tích lũy
Cách định địa chỉ gián tiếp rất tiện lợi khi tác động lên vùng nhớ có địachỉ liên tiếp VD các lệnh sai đây sẽ xóa một vùng RAM trong có địa chỉ từ60H đến 7FH
MOV R0, # 60HLoop: MOV @ R0, # 0
INC R0CJNE R0, # 80H, Loop
Trang 37Lệnh đầu tiên đặt địa chỉ đầu tiên của vùng nhớ vào R0, lệnh thứ hai áp
dụng cách định địa chỉ gián tiếp để chuyển giá trị 00H vào ơ nhớ được trỏ đến
bởi R0, lệnh thứ ba tăng con trỏ R0 đến địa chỉ tiếp theo và lệnh cuối cùng
kiểm tra xem R0 đã trỏ đến ơ nhớ cuối cùng chưa, ở đây địa chỉ so sánh là
80H thay vì 7FH để bảo đãm ơ nhớ 7FH bị xóa trước khi kết thúc chương
trình
1.4.Định địa chỉ tức thời.
Trong trường hợp tốn hạng nguồn là một hằng số thay vì là một biến thì
hằng số này có thể được ghép vào mã lệnh như là một byte dữ liệu “tức thời”,
byte thêm vào chính là giá trị của dữ liệu (hình 3.1d)
Trong hợp ngữ của 8051, byte dữ liệu tức thời được viết theo sau ký hiệu
# tốn hạng này có thể là một số, một biến ký hiệu hoặc một biểu thức số học,
ký hiệu và toán tử Phần mềm hợp ngữ sẽ tính ra giá trị và cho dữ liệu tức thời
này vào mã lệnh, VD:
MOV A, # 12Lệnh này nạp giá trị 12 (0CH) vào bộ tích lủy (hằng số 12 là số 12 nên
không có chữ H theo sau)
Tất cả các lệnh áp dụng cách định địa chỉ tức thời đều dùng dữ liệu tức
thời có độ dài là 8 bít ngoại trừ trường hợp khởi tạo con trỏ dữ liệu VD:
MOV DPTR, # 8000HLệnh này dài 3 byte và sẽ nạp hằng số 16 bít có giá trị 8000H vào con trỏ
dữ liệu
1.5.Định địa chỉ tương đối.
Phương pháp này chỉ dùng cho các lệnh nhảy xác định, địa chỉ tương đối
cịn gọi là địa chỉ offset là một giá trị 8 bít có dấu được cộng thêm vào bộ đếm
chương trình để tạo thành địa chỉ của lệnh sẽ được thực hiện tiếp theo, vì đị a
chỉ tương đối là 1 số 8 bít có dấu nên phạm vi nhảy chỉ trong giới hạn – 128
byte đến + 127 byte, địa chỉ tương đối là byte thêm vào trong mã lệnh (hình
3.1e)
Trước khi cộng, bộ đếm chương trình được tăng lên đến địa chỉ sau lệnh
nhảy, do đó địa chỉ đích có quan hệ tương đối với địa chỉ này chú không liên
hệ gì đến địa chỉ của lệnh nhảy (hình 3.2)
Thông thường chi tiết này không quan trọng đối với người lập trình bởi
vì địa chỉ đích thường được chỉ ra bởi một nhản và phần mềm hợp ngữ sẽ tự
xác định offset tương ứng VD: Nếu nhản THERE đặt tạI l ệnh co địa chỉ
1040H, và lệnh nhảy SJMP THERE đuọc đặt tại địa chỉ 1000H và 1001H,
hợp ngữ sẽ tính ra offset là 3EH ở byte thứ hai của mã lệnh (1002H + 3EH =
1040H)
Ưu điêm của cách định địa chỉ tương đối là cung cấp các mã lệnh
không phụ thuộc vị trí (do không dùng địa chỉ tuyệt đối) nhưng khuyết điểm
Trang 38-Bộ nhớ chương
trình Bộ nhớ chương trình(a) Bước nhảy
tiến
(b) Bước nhảy lùi
SJMP 2038H
Offset từ 2042H
là ``-10`` hoặc F6H
Hình 3.2 Cách tính địachỉ offset
1.6.Định địa chỉ tuyệt đối.
Cách định đị a chỉ này chỉ áp dụng với lệnh ACALL và AJMP Đây làcác l ệnh 2 byte cho phép chương trình nhảy trong phạm vi một trang 2Ktrong bộ nhớ chương trình băng cách cung cấp 11 bít thấp của địa chỉ đíchtrong mã lệnh (A10-A8) và byte thứ 2 của mã lệnh (A7-A0) (hình 3.1f)
Năm bít cao của địa chỉ đích chính là 5 bít cao hiện đang chứa trong bộđếm chương trình, do đó lệnh theo sau lệnh nhảy và đích đến của lệnh nhảyphải có vị trí trong cùng một trang 2K, bởi vì A15-A11 không thay đổi (hình3.3) Ưu điểm c ủa phương pháp này là mã lệnh ngắn (2 byte) nhưng khuyếtđiểm là phạm vi nhảy có giới hạn và mã lệnh phụ thuộc vào vị trí
1.7.Định địa chỉ dài.
Cách định địa chỉ này chỉ dùng cho lệnh LCALL và LJMP, đây là cáclệnh 3 byte bao gồm địa chỉ đích đầy đủ 16 bít, đó là byte 2 và byte 3 trong
mã lệnh (hình 3.1g) Ưu điểm là có thể nhảy đến một vị trí bất kỳ trong phạm
vi 64 K bộ nhớ chương trình, khuyết điểm là lệnh dài (3 byte) và phụ thuộc vịtrí, điều này làm cho chương trình không thể được thực hiện tại địa chỉ khác.VD: Một chương trình có địa chỉ bắt đầu tại 2000H và trong chương trình cólệnh nhảy LJMP 2040H, thì chương trình không thể nào di chuyển đến 4000H
vì lênh nhảy này luơn nhảy đến 2040H, đây sẽ là Môt vị trí sai nếu di chuyểnchương trình đến 4000H
Trang 391.8.Định địa chỉ chỉ số.
Cách định địa chỉ này sủ dụng một thanh ghi cơ sở (có thể là bộ đếmchương trình hoặc con trỏ dữ liệu) và một offset (bộ tích lũy) để tạo thành mộtđịa chỉ cho lệnh JMP hoặc MOVC (hình 3.1h) Các bảng nhảy hoặc các bảngtìm kiếm được tạo ra một cách dể dàng nhờ vào cách định địa chỉ này thơngqua các lệnh MOVC A, @ A + <base-reg> và JMP @ A + DPTR
FFFF
2K khốI 31F800
1800
17FF
2K khốI 21000
0FFF
2K khốI 10800
07FF
2K khốI 0Hình 3.3 Tổ chức các khối 2K trong bộ nhớ chương trình 64K
hồ ngoại trừ các lệnh INC DPTR (2 chu kỳ) lệnh MUL AB và DIV AB (4 chukỳ) Nếu tần số xung đồng hồ là 12 MHz thì một chu kỳ là 1 μS
Trang 40Họ 8051 cung c ấp cách định địa chỉ rất mạnh để truy xuất bộ nhớ trong,nội dung của một ô nhớ bất kỳ có thể được tăng lên hoặc giảm xuống bằngcách định địa chỉ trực tiếp mà không cần đến trung gian là bộ tích lủy VD:Tại địa chỉ RAM trong là 7FH có nội dung là 40H, lệnh sau đây.
INC 7FH
Sẽ tăng nội dung ô nhớ này lên 41H Một trong các lệnh INC có khảnăng tác động lên con trỏ dữ liệu 16 bít, vì nội dung con trỏ là địa chỉ 16 bítcủa bộ nhớ ngoài nên lệnh này rất thường được sử dụng, nhưng 8051 lạIkhông có lệnh giảm con trỏ dữ liệu vì vậy để thực hiện yêu cầu này cần phảIkết hợp một số lệnh như sau:
DEC DPL MOV R7, DPLCJNE R7, #0FFH, SKIP DEC DPHSKIP: ………
………
45Phải giảm riêng byte cao và byte thấp của DPTR Tuy nhiê, chỉ giảmbyte cao khi khi byte thấp bị tràn từ 00H đến FFH
Lệnh MUL AB nhân nội dung của bộ tích lũy với dữ liệu chứa trongthanh ghi B và đưa kết quả vào cặp thanh ghi này: Byte cao của kết quả vào B
và byte thấp vào A Lệnh DIV AB lấy nội dung trong A chia cho dữ liệu trong
B, thương số được chứa trong A và số dư chứa trong B VD: Nội dung của A
là 25 (19H) và B là 6 (06H), lệnh
DIV AB
sẽ lấy 25 chia cho 6, kết quả là 4 chứa trong A và số dư 1 được chứatrong B (25 chia 6 bằng 4 dư 1)
Đối với các phép tính số BCD, sau l ệnh ADD và ADDC phải có lệnh
DA A (decimal adjust) để bảo đãm là kết quả nằm trong vùng cho phép của
số BCD, chú ý là lệnh này không biến đổi số nhị phân sang số BCD mà nó chỉtạo ra một kết quả có nghóa VD: Giả sử A chúa số BCD là 59 (59H)
ADD A, # 1
DA ALệnh thư nhất cộng A với số 1 và được kết quả là 5AH, kết quả này sẽđược sửa lại thành số BCD có giá trị là 60 (60H) vì 59 + 1 = 60
2.2.Nhóm lệnh logic.