giáo trình vi điều khiển nghề công nghệ kỹ thuật điện điện tử trung cấp

135 0 0
Tài liệu đã được kiểm tra trùng lặp
giáo trình vi điều khiển nghề công nghệ kỹ thuật điện điện tử trung cấp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

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ß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ào chiÃu dài cąa bá đÁm c

Trang 1

SỞ LAO ĐỘNG - THƯƠNG BINH VÀ XÃ HỘI HÀ NỘI

TRƯỜNG TRUNG CẤP CÔNG NGHỆ VÀ DU LỊCH HÀ NÞI

GIÁO TRÌNH

MÔN ĐUN: VI ĐIỀU KHIỂN

NGHỀ: CÔNG NGHỆ KỸ THUẬT ĐIỆN – ĐIỆN TỬ TRÌNH ĐÞ: TRUNG CẤP

(Ban hành kèm theo Quyết định số: 32/QĐ-CNDL ngày 28 tháng 02 năm 2023 của Hiệu trưởng Trường Trung cấp Công nghệ và Du lịch Hà Nội )

Hà Nßi, năm 2023

Trang 2

LàI NÓI ĐÀU

Cùng vãi các mô đun cąa ngành Công nghá kỹ thuÁt đián - đián tā, mô đun Vi điÃu khiÅn là mô đun kỹ thuÁt chuyên ngành quan trãng cąa ngành đián tā, hián nay mô đun đ°āc ćng dăng ráng rãi trong ngành kỹ thuÁt và các lĩnh vực điÃu khiÅn khác

Mô đun đ°āc ćng dăng cho tÃt cÁ hãc viên ngành Công nghá kỹ thuÁt đián - đián tā cąa tr°ång ta Bçi vÁy đÅ t¿o điÃu kián cho viác hãc tÁp và nghiên cću mô đun cąa hãc viên đ°āc thuÁn lāi trong quá trình hãc tÁp Bá môn Đián - đián tā thuác Khoa Kỹ thuÁ Đián – Công nghá tr°ång Trung cÃp Công nghá và Du lách

Hà Nái tá chćc biên so¿n tài liáu: < Vi điều khiển = làm bài giÁng l°u hành hái

Trong quá trình biên so¿n chÃc chÃn s¿ không tránh khßi nhăng thiÁu sót, bçi vÁy tôi mong nhÁn đ°āc sự thông cÁm và góp ý chân thành cąa các b¿n đßng nghiáp đÅ cho giáo trình ngày càng hoàn thián h¢n

Xin chân thành cảm ơn!

Trang 3

MĀC LĀC

6.4 Các không gian nhã ch°¢ng trình và dă liáu gái nhau 22

Trang 5

3.1 Thanh ghi dách 8 bit 76 3.2 ChÁ đá UART 8 bit có tác đá baud thay đái 78

4 Khçi t¿o và truy suÃt thanh ghi PORT nái tiÁp 81

Trang 6

Vì mát sá nh°āc điÅm trên nên các nhà chÁ t¿o tích hāp mát ít bá nhã và mát sá m¿ch giao tiÁp ngo¿i vi cùng vãi vi xā lý vào mát IC duy nhÃt đ°āc gãi là Microcontroller-Vi điÃu khiÅn Vi điÃu khiÅn có khÁ năng t°¢ng tự nh° khÁ năng cąa vi xā lý, nh°ng cÃu trúc phÅn cćng dành cho ng°åi dùng đ¢n giÁn h¢n nhiÃu Vi điÃu khiÅn ra đåi mang l¿i sự tián lāi đái vãi ng°åi dùng, hã không cÅn nÃm văng mát khái l°āng kiÁn thćc quá lãn nh° ng°åi dùng vi xā lý, kÁt cÃu m¿ch đián dành cho ng°åi dùng cũng trç nên đ¢n giÁn h¢n nhiÃu và có khÁ năng giao tiÁp trực tiÁp vãi các thiÁt bá bên ngoài Vi điÃu khiÅn tuy đ°āc xây dựng vãi phÅn cćng dành cho ng°åi sā dăng đ¢n giÁn h¢n, nh°ng thay vào lāi điÅm này là khÁ năng xā lý bá giãi h¿n (tác đá xā lý chÁm h¢n và khÁ năng tính toán ít h¢n, dung l°āng ch°¢ng trình bá giãi h¿n) Thay vào đó, Vi điÃu khiÅn có giá thành rẻ h¢n nhiÃu so vãi vi xā lý, viác sā dăng đ¢n giÁn, do đó nó đ°āc ćng dăng ráng rãi vào nhiÃu ćng dăng có chćc năng đ¢n giÁn, không đòi hßi tính toán phćc t¿p

Vi điÃu khiÅn đ°āc ćng dăng trong các dây chuyÃn tự đáng lo¿i nhß, các robot có chćc năng đ¢n giÁn, trong máy giặt, ôtô v.v

Năm 1976 Intel giãi thiáu bá vi điÃu khiÅn (microcontroller) 8748, mát chip t°¢ng tự nh° các bá vi xā lý và là chip đÅu tiên trong hã MCS-48 Đá phćc t¿p, kích th°ãc và khÁ năng cąa Vi điÃu khiÅn tăng thêm mát bÁc quan trãng vào năm 1980 khi intel tung ra chip 8051, bá Vi điÃu khiÅn đÅu tiên cąa hã MCS-51 và là chuẩn công nghá cho nhiÃu hã Vi điÃu khiÅn đ°āc sÁn xuÃt sau này Sau đó rÃt nhiÃu hã Vi điÃu khiÅn cąa nhiÃu nhà chÁ t¿o khác nhau lÅn l°āt đ°āc đ°a ra thá tr°ång vãi tính năng đ°āc cÁi tiÁn ngày càng m¿nh

Trang 7

2 Vi điÃu khiÅn

Đ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¿o mát hã microcontroller chą yÁu dựa trên mát kiÅu tiêu chuẩn bao gßm các tí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 ćng dă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ê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 ćng dăng

2.2 Các kiÅu cÃu trúc bá nhã

Các bá vi xā lý và vi điÃu khiÅn hián nay chą yÁu đ°āc chÁ t¿o theo 2 kiÅu cÃu trúc khác nhau: CÃu trúc Von Neumann và Harvard

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ß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ào chiÃ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ãi nhau 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ăng thực hián song song (truy xuÃt đßng thåi bá nhã dă liáu và bá nhã ch°¢ng trình)

2.1 Nguyên lý cÃu t¿o

Trang 8

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°¢ng trì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ông qua 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°¢ng trình thì cÃu trúc này còn cho phép tăng tính an toàn cąa ch°¢ng trình

+ Các há tháng bÁo vá, báo cháy& + Các máy in

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ặc trong t°¢ng lai phÁi thay bằng các vi điÃu khiÅn 16/32 bít

Trang 9

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ăng tính toán bằng cách mç ráng há tháng bus Đái vãi vi điÃu khiÅn không nhÃt thiÁt phÁi nh° thÁ, mát vi điÃu khiÅn 8 bít cũng đą cho rÃt nhiÃu ćng dăng và vi điÃu khiÅn 16 bít là hoàn toà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ăng l¿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ąa CPU 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 gian thự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¿n cąa timer Tuy nhiên các linh kián bên ngoài cũng phÁi có khÁ năng làm viác ç tÅn sá cao, khi tăng tÅn sá đßng 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âng cao 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

Trang 10

+ 128 Byte RAM nái + 4 Port xuÃt/nhÁp 8 bit

+ Tÿ 2 đÁn 3 bá đánh thåi 16-bit

+ Có khÁ năng giao tiÁp truyÃn dă liáu nái tiÁp

+ Có thÅ mç ráng không gian nhã ch°¢ng trình ngoài 64KByte (bá nhã

ROM ngo¿i): khi chương trình do người lập trình viết ra có dung lượng lớn hơn

dung lượng bộ nhớ ROM nội, để lưu được chương trình này cần bộ nhớ ROM lớn hơn, cách giải quyết là kết nối Vi điều khiển với bộ nhớ ROM từ bên ngoài (hay còn gọi là ROM ngoại) Dung lượng bộ nhớ ROM ngoại lớn nhất mà Vi điều khiển có thể kết nối là 64Kbyte

+ Có thÅ mç ráng không gian nhã dă liáu ngoài 64KByte (bá nhã RAM ngo¿i)

+ Bá xā lí bit (thao tác trên các bit riêng r¿) 210 bit có thÅ truy xuÃt đÁn tÿng bit

Trang 11

- Chćc năng xuÃt/nhÁp :các chân này được dùng để nhận tín hiệu từ

bên ngoài vào để xử lí, hoặc dùng để xuất tín hiệu ra bên ngoài, chẳng hạn xuất tín hiệu để điều khiển led đơn sáng tắt

- Chćc năng là bus dă liáu và bus đáa chß (AD7-AD0) : 8 chân này

(hoặc Port 0) còn làm nhiệm vụ lấy dữ liệu từ ROM hoặc RAM ngoại (nếu có kết nối với bộ nhớ ngoài), đồng thời Port 0 còn được dùng để định địa chỉ của bộ nhớ ngoài

Port 3 gßm 8 chân (tÿ chân 10 đÁn 17): - Chćc năng xuÃt/nhÁp

- Vãi mßi chân có mát chćc năng riêng thć hai nh° trong bÁng sau

P3.0 RxD Ngõ vào nhÁn dă liáu nái tiÁp P3.1 TxD Ngõ xuÃt dă liáu nái tiÁp P3.2 INT0 Ngõ vào ngÃt cćng thć 0 P3.3 INT1 Ngõ vào ngÃt cćng thć 1

P3.4 T0 Ngõ vào cąa Timer/Counter thć 0 P3.5 T1 Ngõ vào cąa Timer/Counter thć 1

P3.6 WR Ngõ điÃu khiÅn ghi dă liáu lên bá nhã ngoài P3.7 RD Ngõ điÃu khiÅn đãc dă liáu tÿ bá nhã bên ngoài P1.0 T2 Ngõ vào cąa Timer/Counter thć 2

Trang 12

P1.1 T2X Ngõ N¿p l¿i/thu nhÁn cąa Timer/Counter thć 2 * Chân cho phép bá nhã ch°¢ng trình

- PSEN ( program store enable) tín hiáu đ°āc xuÃt ra ç chân 29 dùng đÅ truy xuÃt bá nhã ch°¢ng trình ngoài Chân này th°ång đ°āc nái vãi chân OE (output enable) cąa ROM ngoài

- Khi vi điÃu khiÅn làm viác vãi bá nhã ch°¢ng trình ngoài, chân này phát ra tín hiáu kích ho¿t ç mćc thÃp và đ°āc kích ho¿t 2 lÅn trong mát chu kì máy

- Khi thực thi mát ch°¢ng trình ç ROM nái, chân này đ°āc duy trì ç mćc logic không tích cực (logic 1)

(Không cÅn kÁt nái chân này khi không sā dăng đÁn) * Chân cho phép chát đáa chß ALE

- Khi Vi điÃu khiÅn truy xuÃt bá nhã tÿ bên ngoài, port 0 vÿa có chćc năng là bus đáa chß, vÿa có chćc năng là bus dă liáu do đó phÁi tách các đ°ång dă liáu và đáa chß Tín hiáu ç chân ALE dùng làm tín hiáu điÃu khiÅn đÅ giÁi đa hāp các đ°ång đáa chß và các đ°ång dă liáu khi kÁt nái chúng vãi IC chát

- Các xung tín hiáu ALE có tác đá bằng 1/6 lÅn tÅn sá dao đáng đ°a vào Vi điÃu khiÅn, nh° vÁy có thÅ dùng tín hiáu ç ngõ ra ALE làm xung clock cung cÃp cho các phÅn khác cąa há tháng

- Ghi chú: khi không sā dăng có thÅ bß tráng chân này * Chân truy suÃt ROM ngoài (EA)

- Chân EA dùng đÅ xác đánh ch°¢ng trình thực hián đ°āc lÃy tÿ ROM nái hay ROM ngo¿i

- Khi EA nái vãi logic 1(+5V) thì Vi điÃu khiÅn thực hián ch°¢ng trình lÃy tÿ bá nhã nái

- Khi EA nái vãi logic 0(0V) thì Vi điÃu khiÅn thực hián ch°¢ng trình lÃy tÿ bá nhã ngo¿i

* Chân Reset

- Ngõ vào RST ç chân 9 là ngõ vào Reset dùng đÅ thiÁt lÁp tr¿ng thái ban đÅu cho vi điÃu khiÅn Há tháng s¿ đ°āc thiÁt lÁp l¿i các giá trá ban đÅu nÁu ngõ này ç mćc 1 tái thiÅu 2 chu kì máy

* Các chân Xtal 1 và Xtal 2

Trang 13

- Hai chân này có vá trí chân là 18 và 19 đ°āc sā dăng đÅ nhÁn ngußn xung clock tÿ bên ngoài đÅ ho¿t đáng, th°ång đ°āc ghép nái vãi th¿ch anh và các tă đÅ t¿o ngußn xung clock án đánh

* Chân cÃp ngußn

- Chân sá 40 là VCC cÃp đián áp ngußn cho Vi điÃu khiÅn - Ngußn đián cÃp là +5V±0.5

- Chân sá 20 nái GND(hay nái Mass)

3 CÃu trúc Port I/O

- Port 0 (Chân 32 đÁn 39): P0 (P0.0 đÁn P0.7) - Port 1 (Chân 1 đÁn 8): P1 (P1.0 đÁn P1.7) - Port 2 (Chân 21 đÁn 28): P2 (P2.0 đÁn P2.7) - Port 3 (Chân 10 đÁn 17):

Mßi cáng có 8 chân

P3 (P3.0 đÁn P3.7) - Đánh tên tÿ P0.X (X = 0, 1 7), P1.X, P2.X, P3.X - Vãi P0.0 là bít 0 (LSB) cąa P0

P0.7 là bít 7 (MSB) cąa P0 - 8 bít này cÃu thành mát byte

- Mßi cáng có thÅ đ°āc dùng nh° input hay output

4 Tá chąc bá nhã

4.1 Bá nhã ch°¢ng trình (ROM)

Bá nhã ROM dùng đÅ l°u ch°¢ng trình do ng°åi viÁt ch°¢ng trình viÁt ra Ch°¢ng trình là tÁp hāp các câu lánh thÅ hián các thuÁt toán đÅ giÁi quyÁt các công viác că thÅ, ch°¢ng trình do ng°åi thiÁt kÁ viÁt trên máy vi tính, sau đó đ°āc đ°a vào l°u trong ROM cąa vi điÃu khiÅn, khi ho¿t đáng, vi điÃu khiÅn truy xuÃt tÿng câu lánh trong ROM đÅ thực hián ch°¢ng trình ROM còn dùng đÅ chća sá liáu các bÁng, các tham sá há tháng, các sá liáu cá đánh cąa há tháng Trong quá trình ho¿t đáng nái dung ROM là cá đánh, không thÅ thay đái, nái dung ROM chß thay đái khi ROM ç chÁ đá xóa hoặc n¿p ch°¢ng trình (do các m¿ch đián riêng biát thực hián)

- Bá nhã ROM đ°āc tích hāp trong chip Vi điÃu khiÅn vãi dung l°āng tùy vào chąng lo¿i cÅn dùng, chẳng h¿n đái vãi 89S52 là 8KByte, vãi 89S53 là 12KByte

- Bá nhã bên trong Vi điÃu khiÅn 89Sxx là bá nhã Flash ROM cho phép xóa bá nhã ROM bằng đián và n¿p vào ch°¢ng trình mãi cũng bằng đián và có thÅ n¿p xóa nhiÃu lÅn

Trang 14

Hình 2.2 Tổ chức bộ nhớ ROM của 8051

Bá nhã ROM đ°āc đánh đáa chß theo tÿng Byte, các byte đ°āc đánh đáa chß theo sá hex-sá thÁp lăc phân, bÃt đÅu tÿ đáa chß 0000H, khi viÁt ch°¢ng trình cÅn chú ý đÁn đáa chß lãn nhÃt trên ROM, ch°¢ng trình đ°āc l°u s¿ bá mÃt khi đáa chß l°u v°āt qua vùng này Ví dă: AT89S52 có 8KByte bá nhã ROM nái, đáa chß lãn nhÃt là 1FFFH, nÁu ch°¢ng trình viÁt ra có dung l°āng lãn h¢n 8KByte các byte trong các đáa chß lãn h¢n 1FFFH s¿ bá mÃt

- Ngoài ra Vi điÃu khiÅn còn có khÁ năng mç ráng bá nhã ROM vãi viác giao tiÁp vãi bá nhã ROM bên ngoài lên đÁn 64KByte(đáa chß tÿ 0000H đÁn FFFFH)

4.2 Bá nhã dă lißu

Bá nhã RAM dùng làm môi tr°ång xā lý thông tin, l°u tră các kÁt quÁ trung gian và kÁt quÁ cuái cùng cąa các phép toán, xā lí thông tin Nó cũng dùng đÅ tá chćc các vùng đám dă liáu, trong các thao tác thu phát, chuyÅn đái dă liáu

Hình 2.3 Giao tiếp bộ nhớ

Trang 15

* Vùng RAM đa năng

Mặc dù hình 2.4 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í nhã 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¿i 5FH 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ùng công viác nh° ç ví dă trên

MOV R0,#5FH MOV A,@R0

Lánh đÅu tiên sā dăng kiÅu đánh đáa chß tćc thåi di chuyÅn giá trá 5FH vào thanh ghi R0, lánh tiÁp theo sā dăng cách đánh đáa chß gián tiÁp di chuyÅn dă liáu trß bçi R0 vào thanh ghi A

Trang 16

Hình 2.4 Cấu trúc RAM nội của 8051

* Vùng RAM đáa chß bit

Hình 2.5 Vùng RAM định địa chỉ bit

Trên RAM nái có 210 ô nhã bit đ°āc đánh đáa chß và có thÅ truy xuÃt đÁn tÿng bit, các bit nhã này cũng đ°āc đánh đáa chß bằng các sá thÁp lăc phân- sá Hex Trong đó có 128 bit nằm trong các ô nhã có đáa chß byte tÿ 20H đÁn 2FH, các bit nhã còn l¿i chća trong nhóm thanh ghi có chćc năng đặc biát

Mặc dù các bit nhớ và ô nhớ (byte) cùng được định bằng số Hex, tuy nhiên chúng sẽ được nhận dạng là địa chỉ bit hay địa chỉ byte thông qua các câu lệnh tương ứng dành cho các bit nhớ hoặc các ô nhớ này

* Các dãy thanh ghi

Các thanh ghi này đ°āc đánh đáa chß byte, mát sá đ°āc đánh thêm đáa chß bit, có đáa chß cąa các thanh ghi này nằm trong khoÁng 80H đÁn FFH Các thanh ghi đặc biát này này đ°āc dùng đÅ xác lÁp tr¿ng thái ho¿t đáng cÅn thiÁt cho Vi điÃu khiÅn

5 Các thanh ghi chąc nng đặc bißt

* Tÿ tr¿ng thái ch°¢ng trình PSW

Trang 17

PSW.7 D7H C hoặc

Cy Cå nhã PSW.6 D6H AC Cå nhã phă PSW.5 D5H F0 Cå 0 hay cå Zero

PSW.4 D4H RS1 Bit lựa chãn dãy thanh ghi PSW.3 D3H RS0 Bit lựa chãn dãy thanh ghi

PSW.2 D2H 0V Cå tràn vãi phép tính liên quan đÁn sá nhá phân có dÃu PSW.1 D1H - Ch°a đ°āc thiÁt kÁ đÅ sā dăng

PSW.0 D0H P Cå chẵn lẻ

Chức năng từng bit trong thanh trạng thái PSW - Cờ

nhớ C: Cå đ°āc sā dăng trong các lánh toán hãc:

+ C=1 nÁu phép toán cáng xÁy ra tràn hoặc phép trÿ có m°ān + C=0 nÁu phép toán cáng không tràn hoặc phép trÿ không có m°ān

Các bit chọn bank thanh ghi:

Hai bit RS1 và RS2 dùng đÅ xác lÁp bank thanh ghi đ°āc sā dăng, mặc đánh RS1=0 và RS2=0

RS1 RS2 Bank thank ghi đ°ÿc sā dāng

Trang 18

+ Đ°āc sā dăng trong các phép toán cáng có dÃu, vãi các phép toán cáng không dÃu cå tràn OV đ°āc bß qua, không cÅn quan tâm đÁn OV NÁu:

Phép cáng hai sá có dÃu lãn h¢n +127 thì OV=1 Hoặc phép trÿ hai sá có dÃu nhß h¢n -127 thì OV=1 Các tr°ång hāp còn l¿i OV=0

- Cờ chẵn lẻ

+ Cå chẵn lẻ P tự đáng đ°āc đặt bằng 1 hoặc 0 sao cho táng sá bit mang giá trá 1 trên thanh ghi A vãi cå P luôn là mát sá chẵn Cå chẵn lẻ đ°āc dùng đÅ xā lí dă liáu tr°ãc khi truyÃn đi theo kiÅu nái tiÁp hoặc xā lí dă liáu tr°ãc khi nhÁn vào theo kiÅu nái tiÁp (h¿n chÁ lßi phát sinh trong quá trình truyÃn)

* Thanh ghi B

Thanh ghi B ç đáa chß F0H, đ°āc dùng vãi thanh ghi A đÅ thực hián các phép toán sá hãc Khi thực hián lánh chia vãi thanh ghi A, sá d° đ°āc l°u tră ç thanh ghi B Ngoài ra thanh ghi B còn đ°āc dùng nh° mát thanh ghi đám có nhiÃu chćc năng * Con trß Stack

Con trß stack SP nằm t¿i đáa chß 81h và không cho phép đánh đáa chß bit SP dùng đÅ chß đÁn đßnh cąa stack Stack là mát d¿ng bá nhã l°u tră d¿ng Lipo (Last in first out) th°ång dùng l°u tră đáa chß trÁ và khi gãi mát ch°¢ng trình con Ngoài ra, stack còn dùng nh° bá nhã t¿m đÅ l°u l¿i và khôi phăc các giá trá cÅn thiÁt

Mặc đánh khi khçi đáng, giá trá cąa SP là 07h * Con trß dă liáu DPTR

Con trß dă liáu DPTR là thanh ghi 16 bit duy nhÃt cąa Vi điÃu khiÅn đ°āc t¿o thành tÿ hai thanh ghi DPL (byte thÃp-đáa chß byte 82H) và DPH (byte caođáa chß byte 83H) Hai thanh ghi DPL và DPH có thÅ truy xuÃt đác lÁp bçi ng°åi sā dăng Con trß dă liáu DPTR th°ång đ°āc sā dăng khi truy xuÃt dă liáu tÿ bá nhã ROM hoặc bá nhã tÿ bên ngoài

* Các thanh ghi Port

Các thanh ghi P0 t¿i đáa chß 80h, P1 t¿i đáa chß 90h, P2 t¿i đáa chß A0h, P3 t¿i đáa chß B0h là các thanh ghi chát cho 4 port xuÃt/nhÁp ( Port 0, 1, 2, 3) TÃt cÁ các thanh ghi này đÃu cho phép đánh đáa chß bit trong đó đáa chß bit cąa P0 tÿ

80h – 87h, P1 tÿ 90h – 97h, P2 tÿ A0h – A7h và P3 tÿ B0h – B7h Các đáa chß bit này có thÅ thay thÁ bằng toán tā đáa chß

* Các thanh ghi đánh thåi

Các cặp thanh ghi (TH0, TL0), (TH1, TL1) và (TH2, TL2) là các thanh ghi cho các bá đánh thåi 0, 1 và 2 trong đó bá đánh thåi 2 chß có trong 8032/8052

Trang 19

* Các thanh ghi cąa Port nái tiÁp

Thanh ghi port nái tiÁp t¿i đáa chß 99h thực chÃt bao gßm 2 thanh ghi: thanh ghi nhÁn và thanh ghi truyÃn NÁu dă liáu đ°a tãi SBUF thì đó là thanh ghi truyÃn, nÁu dă liáu đ°āc đãc tÿ SBUF thì đó là thanh ghi nhÁn Các thanh ghi này không cho phép đánh đáa chß bit

* Các thanh ghi ngÃt

- Thanh ghi IP t¿i đáa chß B8h cho phép chãn mćc °u tiên ngÃt khi có 2

ngÃt xÁy ra đßng thåi IP cho phép đánh đáa chß bit tÿ B8h – BFh

- Thanh ghi IE t¿i đáa chß A8h cho phép hay cÃm các ngÃt IE có đáa chß bit

tÿ A8h – Afh

* Thanh ghi điÃu khiÅn ngußn

- Thanh ghi TMOD t¿i đáa chß 89h dùng đÅ chãn chÁ đá ho¿t đáng cho các

bá đánh thåi (0, 1) và không cho phép đánh đáa chß bit

- Thanh ghi TCON t¿i đáa chß 88h điÃu khiÅn ho¿t đáng cąa bá đánh thåi và

ngÃt TCON có đáa chß bit tÿ 88h – 8Fh

- Thanh ghi T2CON t¿i đáa chß C8h điÃu khiÅn ho¿t đáng cąa bá đánh thåi

2 T2CON có đáa chß bit tÿ C8h – CFh

- Thanh ghi SCON t¿i đáa chß 98h điÃu khiÅn ho¿t đáng cąa port nái tiÁp SCON có đáa chß bit tÿ 98h – 9Fh

* Thanh ghi tích lũy (A hay Acc)

- Thanh ghi tích lũy là thanh ghi sā dăng nhiÃu nhÃt trong AT89C51, đ°āc ký hiáu trong câu lánh là A Ngoài ra, trong các lánh xā lý bit, thanh ghi tích lũy đ°āc ký hiáu là Acc

- Thanh ghi tích lũy có thÅ truy xuÃt trực tiÁp thông qua đáa chß E0h (byte) hay truy xuÃt tÿng bit thông qua đáa chß bit tÿ E0h đÁn E7h

Ví dă Mov A,#1 Mov 0E0h,#1 Hay

Setb Acc.4 Setb 0E4h

6 Bá nhã ngoài

Các bá vi điÃu khiÅn cÅn có khÁ năng mç ráng các tài nguyên trên chip (bá nhã, I/O ) đÅ tránh hián t°āng cá chai trong thiÁt kÁ CÃu trúc cąa MCS-51 cho phép khÁ năng mç ráng không gian bá nhã ch°¢ng trình đÁn 64K và không gian

Trang 20

bá nhã dă liáu đÁn 64K ROM và RAM ngoài đ°āc thêm vào khi cÅn Các IC giao tiÁp ngo¿i vi cũng có thÅ đ°āc thêm vào đÅ mç ráng khÁ năng xuÃt/nhÁp Chúng trç thành mát phÅn cąa không gian bá nhã dă liáu ngoài bằng cách sā dăng cách đánh đáa chß kiÅu I/O ánh x¿ bá nhã

Khi bá nhã ngoài đ°āc sā dăng, port 0 không làm nhiám vă cąa port xuÃt/nhÁp, port này trç thành bus đáa chß (A0 A7) và bus dă liáu (D0 D7) đa hāp Ngõ ra ALE chát mát byte thÃp cąa đáa chß ç thåi điÅm bÃt đÅu mát chu kỳ bá nhã ngoài Port 2 th°ång (nh°ng không phÁi luôn luôn) đ°āc dùng làm byte cao cąa bus đáa chß

Hình 2.6 Bus đa hợp địa chỉ/ dữ liệu

SÃp xÁp không đa hāp sā dăng 16 đ°ång đáa chß và 8 đ°ång dă liáu táng cáng 24 đ°ång SÃp xÁp đa hāp kÁt hāp 8 đ°ång cąa bus dũ liáu và byte thÃp cąa bus đáa chß thì chß cÅn 16 đ°ång Viác tiÁt kiám các chân cho phép đóng gói hã MCS-51 trong mát vß 40 chân SÃp xÁp đa hāp ho¿t đáng nh° sau: Trong ½ chu kỳ đÅu cąa chu kỳ bá nhã, byte thÃp cąa đáa chß đ°āc cung cÃp bçi port 0 và đ°āc chát nhå tín hiáu ALE M¿ch chát 74373 giă cho byte thÃp cąa đáa chß án đánh trong cÁ chu kỳ bá nhã Trong ½ sau cąa chu kỳ bá nhã, port 0 đ°āc sā dăng làm bus dă liáu và dă liáu s¿ đ°āc đãc hay ghi

6.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áu PSEN

Trang 21

Hình 2.7 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ông còn là các port xuÃt/nhÁp KÁt nái phÅn cćng vãi bá ngoài đ°āc trình bày ç hình 2.7

Mát chu kỳ máy cąa 8051 có 12 chu kỳ dao đáng NÁu bá dao đáng trên chí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Ån hì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.8

Hình 2.8 Chu kỳ tìm nạp lệnh ROM ngoài

6.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 RD

Trang 22

WR ç các chân P3.7 và P3.6 Lánh dùng đÅ truy xuÃt bá nhã dă liáu ngoài là MOVX, sā dăng hoặc con trß dă liáu 16 bít DPTR hoặc R0, R1 làm thanh ghi chć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ąa RAM 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 64K GiÁn đß thåi gian cąa thao tác đãc dă liáu ç bá nhã dă liáu ngoài đ°āc trình bà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 ngoài không bao 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ÿ các xung WR ç mćc thÃp và dă liáu đ°āc xuÃt ra ç port 0 (RD v¿n ç mćc cao)

Hình 2.9 Giản đồ thời gian lệnh MOVX

Trang 23

Hình 2.10 Giao tiếp với 1K RAM

Port 2 giÁm bãt đ°āc chćc năng làm nhiám vă cung cÃp byte cao cąa đáa chß trong các há tháng tái thiÅu hóa thành phÅn, há tháng không dùng bá nhã ch°¢ng trình ngoài và chß có mát dung l°āng nhß bá nhã dă liáu ngoài Các đáa chß 8 bít có thÅ truy xuÃt bá nhã dă liáu ngoài vãi cÃu hình bá nhã nhß h°ãng trang NÁu có nhiÃu h¢n mát trang 256 byte RAM, mát vài bít tÿ port 2 hoặc mát port khác có thÅ chãn mát trang VD: Vãi mát RAM 1KB ( 4 trang 256) có thÅ đ°āc kÁt nái vãi 8051 nh° ç hình 2.10

Các bít 0 và 1 cąa port 2 phÁi đ°āc khçi đáng đÅ chãn mát trang, sau đó dùng lánh MOVX đÅ đãc hoặc ghi trên trang này GiÁ sā P2.0 = P2.1 = 0, các lánh sau có thÅ dùng đÅ đãc nái dung cąa RAM ngoài t¿i đáa chß 0050H vào thanh ghi A

MOV R0,#50H MOVX A, @R0

ĐÅ đãc ç đáa chß cuái cùng cąa RAM là 03FFH thì phÁi chãn trang 3, nghĩa là phÁi set các bít P2.0 và P2.1 bằng 1 nh° chußi lánh sau

SETB P2.0 SETB P2.1 MOV R0,#0FFH MOVX A, @R0

Mát đặc tr°ng cąa thiÁt kÁ này là các bít tÿ 2 đÁn 7 cąa port 2 không còn cÅn làm bít đáa chß năa, các bít còn l¿i này có thÅ sā dăng cho măc đích xuÃt/nhÁp 6.3 GiÁi mã đãa chá

Trang 24

Hình 2.11 Giải mã địa chỉ

NÁu có nhiÃu ROM hoặc RAM giao tiÁp vãi 8051 thì cÅn phÁi giÁi mã đáa chß Viác giÁi mã này cũng cÅn cho hÅu hÁt các bá vi xā lý Ví dă nÁu các ROM và RAM 8KB đ°āc sā dăng, đáa chß phÁi đ°āc giÁi mã đÅ chãn các IC nhã này trên các giãi h¿n 8K (0000H 1FFFH, 2000H 3FFFH ) Mát IC giÁi mã điÅn hình là 74138 đ°āc dùng vãi các ngõ ra đ°āc nái vãi các ngõ vào chãn chíp CS cąa các IC nhã nh° mô tÁ ç hình 2.11 cho mát bá nhã có nhiÃu EPROM 2764 và RAM 6264 CÅn l°u ý là do các đ°ång cho phép riêng r¿ ( PSEN cho bá nhã ch°¢ng trình, RDWR cho bá nhã dă liáu) 8051 có thÅ quÁn lý không gian nhã 64K cho bá nhã ROM và 64K cho bá nhã RAM

6.4 Các không gian nhã ch°¢ng trình và dă lißu gái nhau

Vì bá nhã ch°¢ng trình là bá nhã chß đãc, mát tình huáng khó xā đ°āc phát sinh trong quá t爃Ānh phát triÅn phÅn mÃm cho 8051 Làm thÁ nào phÅn mÃm đ°āc viÁt cho mát há tháng đích dÅ gÿ rái nÁu phÅn mÃm chß có thÅ đ°āc thực hián tÿ không gian bá nhã ch°¢ng trình chß đãc GiÁi pháp táng quát là cho các không gian bá nhã ch°¢ng trình và dă liáu ngoài gái lên nhau Vì PSEN đ°āc

dùng đÅ đãc bá nhã ch°¢ng trình và RD đ°āc dùng đÅ đãc bá nhã dă liáu, mát RAM có thÅ chiÁm không gian nhã ch°¢ng trình và dă liáu bằng cách nái chân OE tãi ngõ ra cáng AND có các ngõ vào là PSENRD

Trang 25

M¿ch trình bày ç hình 2.12 cho phép IC RAM đ°āc ghi nh° là bá nhã dă liáu và đ°āc đãc nh° là bá nhã ch°¢ng trình hoặc dă liáu VÁy thì mát ch°¢ng trình có thÅ đ°āc n¿p vào RAM bằng cách ghi vào RAM nh° là bá nhã dă liáu và đ°āc thực hián bằng cách truy xuÃt nh° là bá đÁm ch°¢ng trình

Hình 2.12 Gối không gian nhớ ROM và RAM

7 Các cÁi tiÁn căa 8032/8052

Các vi m¿ch 8032/8052 và các phiên bÁn CMOS có hai cÁi tiÁn so vãi 8031/8051 Mát là có thêm 128 byte RAM trên chip tÿ đáa chß 80H đÁn FFH, điÃu này không xung đát vãi các thanh ghi chćc năng đặc biát vì 128 byte RAM thêm vào chß có thÅ truy xuÃt bằng cách dùng kiÅu đánh đáa chß gián tiÁp, xem lánh sau

MOV A, 0F0H

S¿ di chuyÅn nái dung cąa thanh ghi B vào thanh ghi A đái vãi hã MCS-51 còn chußi lánh sau

MOV R0,#0F0H MOV A, @R0

Ghi vào thanh ghi A nái dung t¿i đáa chß 0F0H đái vãi 8032/8052, tá chćc bá nhã nái cąa 8032/8052 đ°āc trình bày ç hình 2.13

Hình 2.13 RAM nội trong 8032/8052

Trang 26

CÁi tiÁn thć hai là có thêm bá đánh thåi 16 bít, bá timer 2 này đ°āc lÁp trình nhå vào 5 thanh ghi chćc năng đặc biát trong bÁng 2.5

8 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.14 Tr¿ng thái cąa tÃt cÁ các thanh ghi sau khi reset há tháng đ°āc tóm tÃt ç bÁng 2.6

Hình 2.14 Sơ đồ mạch RESET

Trang 27

BÀI 3: T¾P LÞNH 8051 1 Mở đÅu

- Vi điÃu khiÅn là mát IC lÁp trình, vì vÁy Vi điÃu khiÅn cÅn đ°āc lÁp trình tr°ãc khi sā dăng Mßi phÅn cćng nhÃt đánh phÁi có ch°¢ng trình phù hāp kèm theo, do đó tr°ãc khi viÁt ch°¢ng trình đòi hßi ng°åi viÁt phÁi nÃm bÃt đ°āc cÃu t¿o phÅn cćng và các yêu cÅu mà m¿ch đián cÅn thực hián

- Ch°¢ng trình là tÁp hāp các lánh đ°āc tá chćc theo mát trình tự hāp lí đÅ giÁi quyÁt các yêu cÅu cąa ng°åi lÁp trình.TÁp hāp tÃt cÁ các lánh gãi là tÁp lánh Hã Vi điÃu khiÅn MSC-51 đÃu có chung mát tÁp lánh, các Vi điÃu khiÅn đ°āc cÁi tiÁn sau này th°ång ít thay đái hoặc mç ráng tÁp lánh mà chú trãng phát triÅn phÅn cćng

- Lánh cąa Vi điÃu khiÅn là các sá nhá phân 8 bit hay còn gãi là mã máy Các lánh mang mã 00000000b đÁn 11111111b Các mã lánh này đ°āc đ°a vào l°u tră trong ROM, khi thực hián ch°¢ng trình Vi điÃu khiÅn đãc các mã lánh này, giÁi mã, và thực hián lánh

- Vì các lánh cąa Vi điÃu khiÅn có d¿ng sá nhá phân quá dài và khó nhã, h¢n năa viác gÿ lßi khi ch°¢ng trình phát sinh lßi rÃt phćc t¿p và khó khăn Khó khăn này đ°āc giÁi quyÁt vãi sự hß trā cąa máy vi tính, ng°åi viÁt ch°¢ng trình có thÅ viÁt ch°¢ng trình cho vi điÃu khiÅn bằng các ngôn ngă lÁp trình cÃp cao, sau khi viác viÁt ch°¢ng trình đ°āc hoàn tÃt, các trình biên dách s¿ chuyÅn các câu lánh cÃp cao thành mã máy mát cách tự đáng Các mã máy này sau đó đ°āc đ°a (n¿p) vào bá nhã ROM cąa Vi điÃu khiÅn, Vi điÃu khiÅn s¿ tìm đÁn đãc các lánh tÿ ROM đÅ thực hián ch°¢ng trình BÁn thân máy tính không thÅ thực hián các mã máy này vì chúng không phù hāp vãi phÅn cćng máy tính, muán thực hián phÁi có các ch°¢ng trình mô phßng dành riêng

- Ch°¢ng trình cho Vi điÃu khiÅn có thÅ viÁt bằng C++,C,Visual Basic, hoặc băng các ngôn ngă cÃp cao khác Tuy nhiên hāp ngă Assembler đ°āc đa sá ng°åi dùng Vi điÃu khiÅn sā dăng đÅ lÁp trình, vì lí do này chúng tôi chãn Assembly đÅ h°ãng d¿n viÁt ch°¢ng trình cho Vi điÃu khiÅn Assembly là mát ngôn ngă cÃp thÃp, trong đó mßi câu lánh ch°¢ng trình t°¢ng ćng vãi mát chß lánh mà bá xā lý có thÅ thực hián đ°āc ¯u điÅm cąa hāp ngă Assembly là: mã gãn,ít chiÁm dung l°āng bá nhã, ho¿t đáng vãi tác đá nhanh, và nó có hiáu suÃt tát h¢n so vãi các ch°¢ng trình viÁt bằng ngôn ngă bÁc cao khác

Trang 28

2 Các cách đãnh đãa chá

2.1 Đãnh đãa chá bằng thanh ghi

ChÁ đá đánh đáa chß theo thanh ghi liên quan đÁn viác sā dăng các thanh ghi đÅ l°u dă liáu cÅn đ°āc thao tác và các toán h¿ng là mát trong các thanh ghi Ri cąa các bank đ°āc chãn

Mov A, 4 Mov A, R4

2.3 Đãnh đãa chá gián tiÁp

Đặc điÅm nhÁn ra chÁ đá này là luôn có ký tự @ đćng tr°ãc toán h¿ng Ví dă:

Mov A, @R0 ; chuyÅn nái dung cąa năng nhã Ram có đáa chß trong R0 vào A

2.4 Đãnh đãa chá tąc thåi

- Trong chÁ đá đánh đáa chß này toán h¿ng ngußn là mát hằng sá - L°u ý rằng tr°ãc dă liáu tćc thåi phÁi đ°āc đặt dÃu (#) chÁ đá đánh đáa chß này có thÅ đ°āc dùng đÅ n¿p thông tin vào bÃt kỳ thanh ghi nào kÅ cÁ thanh ghi con trç dă liáu DPTR Ví dă:

Mov A, #25h ; n¿p giá trá 25h vào thanh ghi A Mov R4, #62 ; n¿p giá trá 62 thÁp phân vào R4

Mov DPTR, #4251h ; n¿p 4521h vào con trß dă liáu DPTR

2.5 Đãnh đãa chá t°¢ng đái

- KiÅu đánh đáa chß t°¢ng đái chß đ°āc sā dăng cho các lánh nhÁy Mát đáa chß t°¢ng đái (hay còn gãi là Offset) là mát giá trá 8 bit có dÃu Giá trá này đ°āc cáng vãi bá đÁm ch°¢ng trình đÅ t¿o ra đáa chß cąa lánh tiÁp theo cÅn đ°āc thực thi Do ta sā dăng mát offset 8 bit có dÃu, tÅm nhÁy đ°āc giãi h¿n là -128 byte

Trang 29

đÁn 127 byte Byte đáa chß t°¢ng đái là byte thêm vào tiÁp theo byte opcode cąa lánh

Hình 3.1 Tính offset cho kiểu định địa chỉ tương đối

- Short jump ahead in memory: nhÁy tãi và ngÃn - Short jump back in memory: nhÁy lùi và ngÃn

- Relative offset from address 2042h is – 10(F6H): offset t°¢ng đái tÿ đáa chß 2042h là -10(F6H)

- Nhå vào phép cáng, bá đÁm ch°¢ng trình đ°āc tăng đÁn đáa chß theo sau lánh nhÁy; vÁy thì đáa chß mãi liên quan đÁn lánh kÁ tiÁp, không liên quan đÁn đáa chß cąa lánh nhÁy

- Thông th°ång chi tiÁt này không liên quan đÁn ng°åi lÁp trình do bçi các đích nhÁy th°ång đ°āc xác đánh bằng các nhãn và trình dách hāp ngă s¿ xác đánh offset t°¢ng đái t°¢ng ćng Ví dă nÁu nhãn THERE đặt tr°ãc lánh ç đáa chß 1040H, lánh:

2.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 2K trong bá nhã ch°¢ng trình bằng cách cung cÃp 11 bít thÃp cąa đáa chß đích trong mã lánh (A10-A8) và byte thć 2 cąa mã lánh (A7-A0)

Trang 30

- 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Áy phÁi có vá trí trong cùng mát trang 2K, bçi vì A15-A11 không thay đái

- ¯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í

2.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ác lánh 3 byte bao gßm đáa chß đích đÅy đą 16 bít, đó là byte 2 và byte 3 trong mã lánh ¯u điÅm là có thÅ nhÁy đÁn mát vá trí bÃt kỳ trong ph¿m vi 64K 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Ån ch°¢ng trình đÁn 4000H

2.8 Đãnh đãa chá theo chá sá

- ChÁ đá đánh đáa chß theo chß sá đ°āc sā dăng ráng rãi trong viác truy cÁp các phÅn tā dă liáu cąa bÁng trong không gia ROM/RAM ch°¢ng trình cąa 8051 trong dÁi 64Kb

MovC A, @A + DPTR MovX A, @A + DPTR

- Thanh ghi 16 bit DPTR là thanh ghi A đ°āc dùng đÅ t¿o ra đáa chß cąa phÅn tā dă liáu đ°āc l°u trong bá nhã (trong hoặc ngoài 8051)

- Thanh lánh Mov bằng MovC/MovX do các phÅn tā dă liáu đ°āc cÃt trong không gian mã (ch°¢ng trình) cąa Flash ROM trong/ngoài chip cąa 8051 Trong lánh này thì nái dung cąa A đ°āc bá xung vào thanh ghi 16 bit DPTR đÅ t¿o ra đáa chß 16 bit cąa dă liáu cÅn thiÁt

Trang 31

Công dăng: Cáng giá trá dă liáu trên thanh ghi A vãi giá trá dă liáu trên thanh ghi Rn, sau khi thực hián lánh kÁt quÁ đ°āc l°u ç thanh ghi A Lánh này có Ánh h°çng đÁn thanh thanh tr¿ng thái PSW

Ví dă:

Mov A,#20H Mov R1,#08H Add A,R1

KÁt quÁ : A = #08H 50H = #20H C = 1

3.1.3 Lệnh cộng dữ liệu trên thanh ghi A vßi dữ liệu của ô nhß có địa chỉ gián tiếp:

Cú pháp: Add A,@Ri

Lánh này chiÁm dung l°āng bá nhã ROM là 1 Byte

Trang 32

Thåi gian thực hián: 1 chu kì máy

Công dăng: Cáng giá trá dă liáu trên thanh ghi A vãi giá trá dă liáu cąa ô nhã có đáa chß bằng giá trá cąa thanh ghi Ri, sau khi thực hián lánh kÁt quÁ đ°āc l°u ç thanh ghi A Lánh này có Ánh h°çng đÁn thanh thanh tr¿ng thái PSW

Ví dă:

AC = 1 ;cå C đang mang giá trá 1 Mov 50H,#60H

Mov R2,#50H Mov A,#01H Add A,@R2 KÁt quÁ : A = #61H

Ví dă:

Mov A,#05h Add A,#06h

Ví dă: C = 1

Mov A,#08h

Trang 33

Mov R1,#10h Addc A,R1

KÁt quÁ : A = #19h ;cáng cÁ cå C R1 = #10h

Ví dă: C = 0

Mov A,#0A5h Mov 10h,#96h Addc A,10h

KÁt quÁ : A = #3Bh 10h = #96h C =1

3.1.7 Lệnh cộng dữ liệu trên thanh ghi A vßi dữ liệu của ô nhß có địa chỉ gián tiếp và số nhß ở cá C:

Ví dă: C = 1

Mov A,#05h

Mov 50h,#10h Mov R2,#50h

Trang 34

Addc a,@R2

KÁt quÁ : A = #16h C = 0

3.1.8 Lệnh cộng dữ liệu trên thanh ghi A vßi dữ liệu xác định và số nhß ở cá C:

Ví dă: C = 1

Mov A,#05h Addc A,#16h

KÁt quÁ : A = #1Ch C = 0

3.1.9 Lệnh trừ dữ liệu trên thanh ghi A vßi dữ liệu trên thanh ghi Rn và số nhß ở cá C:

Mov A,#0E5h Mov R3,#9Fh Subb A,R3

KÁt quÁ : A = 45h C = 0

3.1.10 Lệnh trừ dữ liệu trên thanh ghi A vßi dữ liệu ở ô nhß có địa chỉ direct và số nhß ở cá C:

Cú pháp: SubB A,direct

Trang 35

Lánh này chiÁm dung l°āng bá nhã ROM là 2 Byte Thåi gian thực hián: 1 chu kì máy

Công dăng: Trÿ giá trá dă liáu trên thanh ghi A vãi giá trá dă liáu cąa ô nhã có đáa chß direct và trÿ cho giá trá nhã trên cå C , sau khi thực hián lánh kÁt quÁ đ°āc l°u ç thanh ghi A Lánh này có Ánh h°çng đÁn thanh thanh tr¿ng thái PSW

Ví dă:

C = 0

Mov A,#0E5h Mov 05h,#9Fh Subb A,05h

KÁt quÁ : A = 46h C = 0

3.1.11 Lệnh trừ dữ liệu trên thanh ghi A vßi dữ liệu của ô nhß có địa chỉ gián tiếp và số nhß ở cá C:

Ví dă:

C = 1

Mov A,#0E5h Mov 4Fh,#50h

Mov R3,#4Fh Subb A,@R3

KÁt quÁ : A = 94h C = 0

3.1.12 Lệnh trừ dữ liệu trên thanh ghi A vßi dữ liệu xác định và số nhß ở cá C:

Cú pháp: SubB A,#data

Lánh này chiÁm dung l°āng bá nhã ROM là 2 Byte Thåi gian thực hián: 1 chu kì máy

Trang 36

Công dăng: Trÿ giá trá dă liáu trên thanh ghi A vãi giá trá xác đánh và trÿ thêm giá trá nhã trên cå C, sau khi thực hián lánh kÁt quÁ đ°āc l°u ç thanh ghi A Lánh này có Ánh h°çng đÁn thanh thanh tr¿ng thái PSW

Ví dă: C = 0

Mov A,#05h

Subb A,#4Fh

KÁt quÁ : A = 0B6h C = 1

3.1.13.Lệnh tăng giá trị dữ liệu trên thanh ghi A lên 1 đơn vị:

Cú pháp: Inc A

Lánh này chiÁm dung l°āng bá nhã ROM là 1 Byte Thåi gian thực hián: 1 chu kì máy

Công dăng: Tăng giá trá dă liáu l°u giă trên thanh ghi A lên 1 đ¢n vá, không

Ánh h°çng đÁn các cå nhã trên PSW Ví dă: Mov A,#05h

Trang 37

Mov 50h,#0FFh Inc 50h

KÁt quÁ : R0 = #06h 0Fh = #05h

3.1.17.Lệnh tăng giá trị của con trỏ dữ liệu DPTR lên 1 đơn vị:

Trang 38

KÁt quÁ : R1 = #04h 60h = #05h

Trang 39

3.1.22.Lệnh nhân thanh ghi A vßi thanh ghi B:

255(0FFH),cå tràn OV đ°āc thiÁt lÃp và 0 Cå nhã C luôn ç giá trá 0 Ví dă:

Mov A,#0B9h

Mov B,#F7h Mul AB

Cå tràn OV đ°āc thiÁt lÁp giá trá 1 khi thanh ghi B mang giá trá là 00Hphép chia không thÅ thực hián

Ví dă: Mov A,#50h

Mov B,#10h DIV AB

KÁt quÁ : A = #5h B = #0h

3.1.24.Lệnh hiệu chỉnh thập phân nội dung của thanh ghi A đối vßi phép cộng:

Cú pháp: DA A

Lánh này chiÁm dung l°āng bá nhã ROM là 1 Byte Thåi gian thực hián: 4 chu kì máy

Trang 40

Công dăng: hiáu chßnh dă liáu là giá trá l°u giă ç thanh ghi A tÿ sá Hex (sá nhá phân) thành sá BCD (sá thÁp phân viÁt d°ãi d¿ng nhá phân) Lí do có lánh hiáu chßnh này vì khi cáng hai giá trá là sá BCD bằng các lánh cáng, vi điÃu khiÅn chß hiÅu hai sá cáng là sá nhá phân bình th°ång, kÁt quÁ sau lánh cáng là mát sá nhá phân bình th°ång, không phÁi là mát sá BCD, vì vÁy kÁt quÁ cÅn đ°āc hiáu chßnh đÅ dă liáu cuái là mát sá BCD Khi thực hián lánh, cå nhã C đ°āc xác lÁp lên 1 nÁu phép cáng có kÁt quÁ v°āt qua 99(sá BCD) KÁt quÁ cuái cùng, sá BCD có hàng đ¢n vá nằm ç 4 bit thÃp trên thanh ghi A, hàng chăc ç 4 bit cao cąa thanh ghi A, hàng trăm là 1 nÁu cå C mang giá trá 1, là 0 nÁu cå C mang giá trá 0

Ví dă 1: Mov A,#10h KÁt quÁ : A = #10h

Ví dă 2: Mov A,#0Eh KÁt quÁ : A = #14h

ANL A,10h

KÁt quÁ : A = #010h

3.2.3 Lệnh And dữ liệu trên thanh ghi A vßi dữ liệu của ô nhß gián tiếp:

Ngày đăng: 02/06/2024, 18:46

Tài liệu cùng người dùng

Tài liệu liên quan