Tải bản đầy đủ (.pdf) (135 trang)

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

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.73 MB, 135 trang )

<span class="text_page_counter">Trang 1</span><div class="page_container" data-page="1">

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

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

<b>GIÁO TRÌNH</b>

<b>MƠN ĐUN: VI ĐIỀU KHIỂN </b>

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

<i>(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 ) </i>

<b>Hà Nßi, năm 2023 </b>

</div><span class="text_page_counter">Trang 2</span><div class="page_container" data-page="2">

<i><b>LàI NĨI ĐÀU </b></i>

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ā ca trồng ta. Bỗi vy to iu 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

<i><b>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 </b></i>

bá.

Trong quá trình biên so¿n chÃc chÃn s¿ khụng trỏnh khòi nhng thiu sút, bỗi vy 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 hồn thián h¢n.

<i>Xin chân thành cảm ơn! </i>

<i> </i> <b> </b>

<b> </b>

<i> </i>

</div><span class="text_page_counter">Trang 3</span><div class="page_container" data-page="3">

<b> MĀC LĀC </b>

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

</div><span class="text_page_counter">Trang 5</span><div class="page_container" data-page="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 to v truy sut thanh ghi PORT nái tiÁp 81

<b> </b>

</div><span class="text_page_counter">Trang 6</span><div class="page_container" data-page="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 mch iỏn dnh cho ngồi dựng cng 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 tố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 tố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ú chc nng Ân gin, 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.

</div><span class="text_page_counter">Trang 7</span><div class="page_container" data-page="7">

<b>2. Vi điÃu khiÅn </b>

ĐiÅm cÅn lu ý v vi iu khin 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

<b>2.2. Các kiÅu cÃu trúc bá nhã </b>

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.

<b>2.2.1. CÃu trúc Von Neumann </b>

Trong cÃu trúc Von Neumann chß có mát vùng đáa chß tun 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)

<b>2.1 . Ngun lý cÃu t¿o </b>

<b> </b>

</div><span class="text_page_counter">Trang 8</span><div class="page_container" data-page="8">

<b>2.2.2. CÃu trúc Harvard </b>

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 xt 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 thy ỗ vi điÃu khiÅn 8 bít thì viác truy xt 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ó 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 tồn cąa ch°¢ng trình

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

<b>4. H°ãng phát triÅn </b>

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 st 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.

</div><span class="text_page_counter">Trang 9</span><div class="page_container" data-page="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 tốn bằng cỏch mỗ rỏng hỏ thỏng bus. ỏi vói vi iu 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à hồn tồn q d° thÿa, trong tr°ång hāp cÅn giÁm giá thành, kích th°ãc và cơng st 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 gin l tng tn 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 cng phi cú kh nng lm viỏc ỗ tn 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

</div><span class="text_page_counter">Trang 10</span><div class="page_container" data-page="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 ngoi 64KByte (bá nhã

<i>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 </i>

<i>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 ngồ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 </i>

+ Cú th mỗ rỏng khụng gian nhó d liỏu ngoi 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

</div><span class="text_page_counter">Trang 11</span><div class="page_container" data-page="11">

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

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

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

<i>(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ớ ngồi), đồng thời Port 0 cịn được dùng để định địa chỉ của bộ nhớ ngoài. </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 <sub> Ngõ vào nhÁn dă liáu nái tiÁp </sub>P3.1 TxD <sub> Ngõ xuÃt dă liáu nái tiÁp </sub>P3.2 INT0 <sub> Ngõ vào ngÃt cćng thć 0 </sub>P3.3 INT1 <sub> Ngõ vào ngÃt cćng thć 1 </sub>

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

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

</div><span class="text_page_counter">Trang 12</span><div class="page_container" data-page="12">

P1.1 T2X <sub> Ngõ N¿p l¿i/thu nhÁn cąa Timer/Counter thć 2 </sub>* 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 xut bỏ nhó ch°¢ng trình ngồ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 ngoi, chõn ny phỏt ra tớn hiỏu kớch hot ỗ 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 ny 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 ngồ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 lm 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 lm 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ừ vo 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

</div><span class="text_page_counter">Trang 13</span><div class="page_container" data-page="13">

- Hai chân này có vá trí chân là 18 và 19 đ°āc sā dăng đÅ nhÁn ngn xung clock tÿ bên ngồ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)

<b>3. CÃu trúc Port I/O </b>

- 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

<b>4. Tá chąc bá nhã </b>

<b>4.1. Bá nhã ch°¢ng trình (ROM) </b>

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

</div><span class="text_page_counter">Trang 14</span><div class="page_container" data-page="14">

<i>Hình 2.2. Tổ chức bộ nhớ ROM của 8051 </i>

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 cn chỳ ý n ỏa chò lón nht 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ỏ mt.

- Ngoi ra Vi iu khin cũn cú kh nng mỗ rỏng bá nhã ROM vãi viác giao tiÁp vãi bá nhã ROM bên ngồi lên đÁn 64KByte(đáa chß tÿ 0000H đÁn FFFFH)

<b>4.2. Bá nhã dă lißu </b>

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 tố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.

<i>Hình 2.3. Giao tiếp bộ nhớ </i>

</div><span class="text_page_counter">Trang 15</span><div class="page_container" data-page="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í ngn (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 xt 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 tip di chuyn d liỏu trò bỗi R0 vo thanh ghi A

</div><span class="text_page_counter">Trang 16</span><div class="page_container" data-page="16">

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

* Vùng RAM đáa chß bit

<i>Hình 2.5. Vùng RAM định địa chỉ bit </i>

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.

<i>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. </i>

* 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.

<b>5. Các thanh ghi chąc nng đặc bißt </b>

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

</div><span class="text_page_counter">Trang 17</span><div class="page_container" data-page="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ẻ

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

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

+ 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 tốn cáng khơng tràn hoặc phép trÿ khơng có m°ān.

<i>Các bit chọn bank thanh ghi: </i>

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

<b>RS1 RS2 <sup>Bank thank ghi </sup><sub>đ°ÿc sā dāng </sub></b>

</div><span class="text_page_counter">Trang 18</span><div class="page_container" data-page="18">

+ Đ°āc sā dăng trong các phép tốn cáng có dÃu, vãi các phép tố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 Hoc phộp tr hai sỏ cú du nhò hÂn -127 thì OV=1 Các tr°ång hāp cịn l¿i OV=0

<i>- Cờ chẵn lẻ </i>

+ 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 lu tr ỗ thanh ghi B. Ngoi 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. Ngồ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ỏ cn thit.

Mc ỏ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 lp bỗi ngồi s dng. 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 tố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.

</div><span class="text_page_counter">Trang 19</span><div class="page_container" data-page="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 trun, 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

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

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

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

tÿ A8h – Afh.

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

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

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

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

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

<i>- Thanh ghi T2CON t¿i đáa chß C8h điÃu khiÅn ho¿t đáng cąa bá đánh thåi </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 xt trực tiÁp thơng qua đáa chß E0h (byte) hay truy xt 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

<b>6. Bá nhã ngồi </b>

Các bá vi điÃu khiÅn cÅn có kh nng mỗ rỏng cỏc ti nguyờn trờn chip (bỏ nhã, I/O...) đÅ tránh hián t°āng cá chai trong thiÁt k. Cu trỳc ca MCS-51 cho phộp kh nng mỗ ráng khơng gian bá nhã ch°¢ng trình đÁn 64K và không gian

</div><span class="text_page_counter">Trang 20</span><div class="page_container" data-page="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 vo mỗ rỏng kh nng xut/nhp. Chỳng trỗ thnh mỏt phn ca khụng gian bỏ nhó d liáu ngồ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 ca port xut/nhp, port ny 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 im bt u mỏt chu k bá nhã ngồ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ß

<b> </b>

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

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 cp 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.

<b>6.1 Truy xuÃt bá nhã ch°¢ng trình ngồi Bá nhã ch°¢ng trình ngồi là bỏ </b>

nhó chò óc, c cho phộp bỗi tớn hiỏu PSEN.

</div><span class="text_page_counter">Trang 21</span><div class="page_container" data-page="21">

<b> </b>

<i>Hình 2.7. Truy xuất ROM ngồi </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 xt/nhÁp. KÁt nái phÅn cćng vãi bá ngồ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 <i><small>s </small></i>. 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 by ỗ hỡnh 2.8

<i>Hình 2.8. Chu kỳ tìm nạp lệnh ROM ngồi </i>

<b>6.2 Truy xt bá nhã dă lißu ngồi </b>

Bá nhã dă liáu ngoài là bá nhã đãc-ghi đ°āc cho phộp bỗi cỏc tớn hiỏu <i><small>RD</small></i>

</div><span class="text_page_counter">Trang 22</span><div class="page_container" data-page="22">

v <i><small>WR</small></i> ỗ 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

<i><small>RD</small></i> nái vãi đ°ång cho phép xuÃt <i><small>OE</small></i> cąa RAM và đ°ång <i><small>WR</small></i> nái vãi đ°ång <i><small>W </small></i>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 ỗ phn trờn dung lng ca RAM lờn đÁn 64K GiÁn đß thåi gian cąa thao tỏc óc d liỏu ỗ bỏ nhó d liỏu ngoi c trỡnh by ỗ 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 <i><small>RD</small></i> cho phép đãc RAM, nÁu lánh MOVX và RAM ngồi khơng bao giå đ°āc dùng, các xung ALE ln 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 <i><small>WR</small></i> ỗ mc thp v d liỏu c xut ra ỗ port 0 (<i><small>RD</small></i> vn ỗ mc cao)

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

</div><span class="text_page_counter">Trang 23</span><div class="page_container" data-page="23">

<i>Hình 2.10. Giao tiếp với 1K RAM </i>

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 ngồi và chß có mát dung l°āng nhß bá nhã dă liáu ngồi. Các đáa chß 8 bít có thÅ truy xt bá nhã dă liáu ngồi vãi cÃu hình bá nhó nhò hóng trang. Nu cú nhiu 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 kt 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 ca 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° chi 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 <b>6.3. GiÁi mã đãa chá </b>

</div><span class="text_page_counter">Trang 24</span><div class="page_container" data-page="24">

<i>Hình 2.11. Giải mã địa chỉ </i>

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 <i><small>CS</small></i> 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, <i><small>RD</small></i> và <i><small>WR</small></i> 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

<b>6.4 Cỏc khụng gian nhó chÂng trỡnh v d liòu gỏi nhau </b>

Vì bá nhã ch°¢ng trình là bá nhã chß đãc, mát tình hng 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 qt là cho các khơng gian bá nhã ch°¢ng trình và dă liáu ngồi gái lên nhau. Vì <i><small>PSEN</small></i> đ°āc

dùng đÅ đãc bá nhã ch°¢ng trình và <i><small>RD</small></i> đ°ā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à <i><small>PSEN</small></i> và <i><small>RD</small></i>.

</div><span class="text_page_counter">Trang 25</span><div class="page_container" data-page="25">

Mch trỡnh by ỗ 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 xt nh° là bá đÁm ch°¢ng trình

<i>Hình 2.12. Gối khơng gian nhớ ROM và RAM </i>

<b>7. Các cÁi tiÁn căa 8032/8052 </b>

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 chi 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á chc bỏ nhó nỏi ca 8032/8052 c trỡnh by ỗ hình 2.13

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

</div><span class="text_page_counter">Trang 26</span><div class="page_container" data-page="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

<b>8. Ho¿t đáng Reset </b>

8051 đ°āc reset bằng cỏch gi chõn RST ỗ mc cao tỏi thiu 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 by ỗ hỡnh 2.14. Trng thỏi cąa tÃt cÁ các thanh ghi sau khi reset há thỏng c túm tt ỗ bng 2.6

<i>Hình 2.14. Sơ đồ mạch RESET </i> <sup> </sup>

</div><span class="text_page_counter">Trang 27</span><div class="page_container" data-page="27">

<b> </b>

<b>BÀI 3: T¾P LÞNH 8051 1. Mở đÅu </b>

- 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 qut các 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 ci tin sau ny thồng ớt thay ỏi hoc 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 q dài và khó nhã, h¢n năa viác g lòi khi chÂng trỡnh phỏt sinh lòi rt phc 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 hồ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, mn thực hián phÁi có các ch°¢ng trình mụ phòng dnh 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 st 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.

</div><span class="text_page_counter">Trang 28</span><div class="page_container" data-page="28">

<b>2. Các cách đãnh đãa chá </b>

<b>2.1. Đãnh đãa chá bằng thanh ghi </b>

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

<b>2.3. Đãnh đãa chá gián tiÁp </b>

Đặc điÅm nhÁn ra chÁ đá này là ln có ký tự @ đćng tr°ãc tố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

<b>2.4. Đãnh đãa chá tąc thåi </b>

- Trong chÁ đá đánh đáa chß này tốn h¿ng ngn 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

<b>2.5. Đãnh óa chỏ tÂng ỏi </b>

- Kiu ỏnh ỏa chò tÂng ỏi chò c s dng cho cỏc lỏnh nhy. 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

</div><span class="text_page_counter">Trang 29</span><div class="page_container" data-page="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

<i>Hình 3.1. Tính offset cho kiểu định địa chỉ tương đối </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 nhy thồng c xỏc ỏnh bng 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:

<b>2.6. Đãnh đãa chá tuyßt đái </b>

- 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).

</div><span class="text_page_counter">Trang 30</span><div class="page_container" data-page="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í

<b>2.7. Đãnh đãa chá dài </b>

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, khut đ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 ti ỏa chò khỏc. VD: Mỏt chÂng trỡnh cú ỏa chò bt u ti 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 chun đÁn 4000H vì lánh nhÁy này ln nhÁy đÁn 2040H, đây s¿ là mơt vá trí sai nÁu di chun ch°¢ng trình đÁn 4000H.

<b>2.8. Đãnh đãa chá theo chá sá </b>

- 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/ngồ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.

</div><span class="text_page_counter">Trang 31</span><div class="page_container" data-page="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 thc hiỏn lỏnh kt qu c lu ỗ thanh ghi A. Lỏnh ny cú nh hỗng n thanh thanh trng thái PSW

<i>Ví dă: </i>

<i>Mov A,#20H Mov R1,#08H Add A,R1 </i>

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

<i><b>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: </b></i>

<i><b>Cú pháp: Add A,@Ri </b></i>

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

</div><span class="text_page_counter">Trang 32</span><div class="page_container" data-page="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 kt qu c lu ỗ thanh ghi A. Lỏnh ny cú nh hỗng n thanh thanh trng 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ă:

<i>Mov A,#05h Add A,#06h </i>

<i>Ví dă: C = 1 </i>

<i> Mov A,#08h </i>

</div><span class="text_page_counter">Trang 33</span><div class="page_container" data-page="33">

<i> Mov R1,#10h Addc A,R1 </i>

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

Ví dă: C = 0

<i>Mov A,#0A5h Mov 10h,#96h Addc A,10h </i>

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

<i><b>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: </b></i>

Ví dă: C = 1

<i> Mov A,#05h </i>

<i> Mov 50h,#10h Mov R2,#50h </i>

</div><span class="text_page_counter">Trang 34</span><div class="page_container" data-page="34">

<i> Addc a,@R2 </i>

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

<i><b>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: </b></i>

Ví dă: C = 1

<i> Mov A,#05h Addc A,#16h </i>

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

<i><b>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: </b></i>

<i> Mov A,#0E5h Mov R3,#9Fh Subb A,R3 </i>

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

<i><b>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: </b></i>

<i><b>Cú pháp: SubB A,direct </b></i>

</div><span class="text_page_counter">Trang 35</span><div class="page_container" data-page="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 kt qu c lu ỗ thanh ghi A. Lỏnh ny cú nh hỗng n thanh thanh trng thỏi PSW

Ví dă:

C = 0

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

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

<i><b>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: </b></i>

Ví dă:

C = 1

<i> Mov A,#0E5h Mov 4Fh,#50h </i>

<i> Mov R3,#4Fh Subb A,@R3 </i>

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

<i><b>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: </b></i>

<i><b>Cú pháp: SubB A,#data </b></i>

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

</div><span class="text_page_counter">Trang 36</span><div class="page_container" data-page="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 lu ỗ thanh ghi A. Lỏnh ny cú nh hỗng n thanh thanh trng thỏi PSW

Ví dă: C = 0

<i> Mov A,#05h </i>

<i> Subb A,#4Fh </i>

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

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

<i><b>Cú pháp: Inc A </b></i>

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

<i>nh hỗng n cỏc cồ nhó trên PSW Ví dă: Mov A,#05h </i>

</div><span class="text_page_counter">Trang 37</span><div class="page_container" data-page="37">

<i> Mov 50h,#0FFh Inc 50h </i>

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

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

</div><span class="text_page_counter">Trang 38</span><div class="page_container" data-page="38">

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

</div><span class="text_page_counter">Trang 39</span><div class="page_container" data-page="39">

<i><b>3.1.22.Lệnh nhân thanh ghi A vßi thanh ghi B: </b></i>

<i>255(0FFH),cå tràn OV đ°āc thit lp v 0. Cồ nhó C luụn ỗ giỏ trá 0. Ví dă: </i>

<i>Mov A,#0B9h </i>

<i> Mov B,#F7h Mul AB </i>

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ă: <i> Mov A,#50h </i>

<i> Mov B,#10h DIV AB </i>

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

<i><b>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: </b></i>

<i><b>Cú pháp: DA A </b></i>

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

</div><span class="text_page_counter">Trang 40</span><div class="page_container" data-page="40">

Cơng dăng: hiáu chßnh dă liáu là giá trỏ lu 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 q 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ú hng Ân vỏ nm ỗ 4 bit thp trờn thanh ghi A, hng chc ỗ 4 bit cao ca 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

<i> ANL A,10h </i>

KÁt quÁ : A = #010h

<i><b>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: </b></i>

</div>

×