1. Trang chủ
  2. » Luận Văn - Báo Cáo

ĐỀ TÀI: ỨNG DỤNG VI ĐIỀU KHIỂN AT89C51 ĐO ĐỘ ẨM VÀ KHỐNG CHẾ ĐỘ ẨM TRONG PHÒNG KÍN

107 65 0

Đ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

Thông tin cơ bản

Định dạng
Số trang 107
Dung lượng 1,29 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Mục lục Chương I: GIỚI THIỆU …………………………………………..…trang 1 Chương II: GIỚI THIỆU CHUNG VỀ VI ĐIỀU KHIỂN AT89C51……….2 I. Giới thiệu. ………………………………………………… 2 II Lịch sử phát triển………………………………………...........2 III Khảo sát họ vi điều khiển 8051 và 8031: …………………….3 1. Cấu trúc bên trong của 80518031 ……………………...........3 2. Chức năng các chân của vi điều khiển ……………………….4 3. Tổ chức bộ nhớ ………………………………………………7 4. Các thanh ghi chức năng đặc biệt ……………………………10 5. Bộ nhớ ngoài………………………………………………….14 6. Lệnh Reset……………………………………………………18 7. Hoạt động của bộ định thời…………………………………..18 8. Hoạt động của port nối tiếp ………………………………….25 9. Hoạt động ngắt ……………………………………………….28 10. Tập lệnh của 8051 và 8031…………………………………..32 Chương III: KHẢO SÁT VI MẠCH GIAO TIẾP NGOẠI VI 8255A…….39 I. Cấu trúc phần cứng 8255 …………………………….……...39 II. Cấu trúc phần mềm của 8255 ………………………….…..41 III. Giao tiếp giữa vi xử lí với 8255A…………………………....42 1. Giao tiếp kiểu IO …………………………………………...42 2. Giao tiếp kiểu bộ nhớ ……………………………………….43 Chương IV: KHẢO SÁT BỘ NHỚ BÁN DẪN ………………………… ..44 I. Bộ nhớ chỉ đọc ROM ………………………………………....44 1. Cấu trúc bên trong của ROM ……………………………….. .44 2. Thời hằng truy xuất của bộ nhớ ROM……………………..…..46 3. Các loại bộ nhớ ROM……………………………………..…...46 4. Khảo sát bộ nhớ EPROM 2764…………………………..….....46 II. Bộ nhớ RAM…………………………………………….……..48 1. Cấu trúc của RAM ……………………………………………..48 2. Các loại RAM ………………………………………………….49 Chương V: CHUYỂN ĐỔI TƯƠNG TỰ SỐ ……………………………...50 I. Khái niệm chung ………………………………………………….50 II. Các phương pháp chuyển đổi tương tự số………………………..51 1. Phương pháp tích phân (Intergration methol)…….………………51 2. Phương ADC xấp xỉ liên tiếp ( SuccessiveApproximation ADC)..523. Phương pháp song song ( paralled methol)………………….53 Chương VI: ĐO NHIỆT ĐỘ ĐỘ ẨM ……………………………………55 I. Hệ thống đo lường……………………………………………55 1. Giới thiệu…………………………………………………….55 2. Hệ thống đo lường số ………………………………………..55 II. Đo Nhiệt Độ:…………………………………………………56 III. Đo Độ Ẩm : ……………………………………………….57 1. Không khí ẩm ………………………………………………..57 2. Các thông số đặc trưng của không khí ẩm …………………..58 3. Các thiết bị đo độ ẩm hiện có………………………………...60 Chương VII: THIẾT KẾ LẬP TRÌNH ……………………………….61 I. Nhiệm vụ thiết kế ……………………………………………61 II. Sơ đồ và chức năng từng khối ………………………………. 61 III. Thiết kế và phân tích chức năng từng khối …………………..62 1. Bộ cảm biến độ ẩm HTM2500………………………………..62 2. Thiết kế bộ cảm biến nhiệt độ………………………………...66 3. Thiết kế bộ chuyển đổi tương tự số ADC…………………….69 4. Mở rộng port nhậpxuất dùng PPI 8255A…………………….74 5. Thiết kế bộ nhớ ……………………………………………..75 6. Thiết kế giao tiếp bằng bàn phím……………………………..80 7. Thiết kế mạch hiển thị ………………………………………..80 8. Thiết kế mạch giao tiếp công xuất ……………………………85 IV. Sơ đồ mạch nguyên lí thuật giải chương trình:……………….87 1. Sơ đồ nguyên lí……………………………………………….88 2. Thuật toán và chương trình…………………………………...89 Chương Kết Luận ……………………………………………………..99 Tài liệu tham khảo ……………………………………………………..100

Trang 1

TRƯỜNG ĐẠI HỌC BÁCH KHOA

Trang 2

LỜI CẢM TẠ

Trong suốt khoá học (2002-2007) tại trường Đại Học Bách Khoa Đà Nẵng, được sự dạy dỗ tận tình của các thầy cô Khoa Điện đã cung cấp cho

em những kiến thức chuyên môn cần thiết để em

có thể thực hiện hoàn thành đề tài này.Em xin chân thành cảm tạ đến:

Bộ môn Tự Động –Đo Lường đã trang bị cho

em những kiến thức cần thiết để em có thể hoàn thành đề tài này và tạo điều kiện cho em hoàn tất khoá học

Đặc biệt TS Lâm Tăng Đức- giáo viên hướng dẫn đề tài đã có những lời khuyên quí báu giúp

em có những định hướng tốt trong khi thực hiện

đề tài này

Tất cả các bạn đã đóng gốp ý kiến trong lúc mình thực hiện đề tài

TP.Đà Nẵng- Tháng 5 Năm 2007 Sinh viên thực hiện

Võ Ngọc Tuyến

Trang 3

Chương I: GIỚI THIỆU ……… …trang 1

Chương II: GIỚI THIỆU CHUNG VỀ VI ĐIỀU KHIỂN AT89C51……….2

I./ Giới thiệu ……… 2

II/ Lịch sử phát triển……… 2

III/ Khảo sát họ vi điều khiển 8051 và 8031: ……….3

1./ Cấu trúc bên trong của 8051/8031 ……… 3

2./ Chức năng các chân của vi điều khiển ……….4

3./ Tổ chức bộ nhớ ………7

4./ Các thanh ghi chức năng đặc biệt ………10

5./ Bộ nhớ ngoài……….14

6./ Lệnh Reset………18

7./ Hoạt động của bộ định thời……… 18

8./ Hoạt động của port nối tiếp ……….25

9./ Hoạt động ngắt ……….28

10./ Tập lệnh của 8051 và 8031……… 32

Chương III: KHẢO SÁT VI MẠCH GIAO TIẾP NGOẠI VI 8255A…….39

I./ Cấu trúc phần cứng 8255 ……….…… 39

II./ Cấu trúc phần mềm của 8255 ……….… 41

III./ Giao tiếp giữa vi xử lí với 8255A……… 42

1./ Giao tiếp kiểu I/O ……… 42

2./ Giao tiếp kiểu bộ nhớ ……….43

Chương IV: KHẢO SÁT BỘ NHỚ BÁN DẪN ……… 44

I./ Bộ nhớ chỉ đọc ROM ……… 44

1./ Cấu trúc bên trong của ROM ……… .44

2./ Thời hằng truy xuất của bộ nhớ ROM……… … 46

3./ Các loại bộ nhớ ROM……… … 46

4./ Khảo sát bộ nhớ EPROM 2764……… … 46

II./ Bộ nhớ RAM……….…… 48

1./ Cấu trúc của RAM ……… 48

2./ Các loại RAM ……….49

Chương V: CHUYỂN ĐỔI TƯƠNG TỰ- SỐ ……… 50

I./ Khái niệm chung ……….50

II./ Các phương pháp chuyển đổi tương tự- số……… 51

1./ Phương pháp tích phân (Intergration methol)…….………51

2./ Phương ADC xấp xỉ liên tiếp ( Successive-Approximation ADC) 52

Trang 4

Chương VI: ĐO NHIỆT ĐỘ- ĐỘ ẨM ………55

I./ Hệ thống đo lường………55

1./ Giới thiệu……….55

2./ Hệ thống đo lường số ……… 55

II./ Đo Nhiệt Độ:………56

III./ Đo Độ Ẩm : ……….57

1./ Không khí ẩm ……… 57

2./ Các thông số đặc trưng của không khí ẩm ……… 58

3./ Các thiết bị đo độ ẩm hiện có……… 60

Chương VII: THIẾT KẾ - LẬP TRÌNH ……….61

I./ Nhiệm vụ thiết kế ………61

II./ Sơ đồ và chức năng từng khối ……… 61

III./ Thiết kế và phân tích chức năng từng khối ……… 62

1./ Bộ cảm biến độ ẩm HTM2500……… 62

2./ Thiết kế bộ cảm biến nhiệt độ……… 66

3./ Thiết kế bộ chuyển đổi tương tự số ADC……….69

4./ Mở rộng port nhập/xuất dùng PPI 8255A……….74

5./ Thiết kế bộ nhớ ……… 75

6./ Thiết kế giao tiếp bằng bàn phím……… 80

7./ Thiết kế mạch hiển thị ……… 80

8./ Thiết kế mạch giao tiếp công xuất ………85

IV./ Sơ đồ mạch nguyên lí thuật giải chương trình:……….87

1./ Sơ đồ nguyên lí……….88

2./ Thuật toán và chương trình……… 89

Chương Kết Luận ……… 99

Tài liệu tham khảo ……… 100

Trang 5

Sơ đồ khối tổng quát ………61

Bảng phạm vi làm việc của cảm biến ẩm……….62

Bảng đặc tính cảm biến ẩm……… 63

Bảng các mức ra tham chiếu của cảm biến ẩm ………64

Qui định cấu trúc cảm biến ẩm và hình vẽ………65

Sơ đồ mạch khuếch đại……….66

Sơ đồ kết nối ADC0809 ……… …73

Bảng qui định địa chỉ ……… ….77

Sơ đồ kết nối bộ nhớ ngoài với 8051……… 79

Sơ đồ giao tiếp bằng phím ……… 80

Sơ đồ mạch hiển thị nhiệt độ và độ ẩm ……….83

Sơ đồ mạch hiển thị hệ số trọng lượng M ……… 85

Sơ đồ mạch giao tiếp công xuất ……… 87

Sơ đồ nguyên lí toàn mạch ……… …89

Trang 6

Tóm tắt đồ án

Nội dung thuyết minh là sử dụng vi điều khiển AT89C51 để thiết kế hệ thống

đo và khống chế độ ẩm không khí trong phòng kín.Để đo được độ ẩm không khí em sử dụng bộ cảm biến ẩm HTM2500 và cảm biến nhiệt độ LM35.Tín hiệu tương tự thu được từ các bộ cảm biến được chọn và chuyển đổi thành tín hiệu số thông qua bộ ADC0809 Dữ liệu số ra khỏi ADC0809 ở dạng 8 bit được gởi đến Port 0 của vi điều khiển 8051 khi vi điều khiển có lệnh đọc dữ liệu Tương ứng với dữ liệu đọc được vi điều khiển sẽ cho xuất ra các bộ hiển thị giá trị độ ẩm tương đối , nhiệt độ t, và giá trị hệ số trọng lượng hơi nước

M ứng với giá trị t đọc được Người quan sát có thể tính được khối lượng hơi nước bằng biểu thức * M / 1000 [g/m³]

Để tạo được dung lượng ROM đủ lớn có khả năng nhập được số liệu cho bảng tra M (tính theo bảng nước và hơi nước bão hòa trong phạm vi nhiệt độ rộng),

em sử dụng EPROM 2764 EPROM 2764 có 8 bit địa chỉ thấp từ 8 bit của port

0 được chốt qua 74LS373, 5 bit địa chỉ cao nối với 5 bit thấp của port 2

Hai IC 8255A được sử dụng để mở rộng port dữ liệu cho 8051 bằng cách ghép

8 bit dữ liệu của nó với 8 bit port 0 của 8051

Để quản lí không gian địa chỉ chương trình, qua giá trị của 3 bit P2.7 P2.6 P2.5

IC giãi mã địa chỉ 74LS138 sẽ giúp chọn đúng IC có địa chỉ (đã được qui định trước) mà con trỏ chương trình nhảy đến

Các tải xoay chiều được điều khiển đóng cắt nguồn cấp bằng cách điều khiển đóng cắt cấp điện cho cuộn dây của Rơle

Như vậy, khi người quan sát chọn giá trị độ ẩm cần duy trì từ bàn phím thì dưới tác động của chương trình đã nạp trước, các tải xoay chiều sẽ được đóng cắt một cách thích hợp để duy trì độ ẩm không khí trong phòng theo đúng giá trị đã đặt

Trang 7

I Đặt vấn đề:

Ngày nay với sự phát triển của công nghiệp vi điện tử, kỹ thuật số các hệ

thống điều khiển dần dần được tự động hoá Với kỹ thuật tiên tiến vi xử lý, vi mạch

số….được ứng dụng vào lĩnh vực điều khiển tự động với chương trình thiết lập

trước thay thế cho các hệ thống điều khiển cơ khí thô sơ, tốc độ xử lý chậm, ít

chính xác

Hiện nay, hầu hết các quy trình sản xuất hàng tiêu dùng quá trình sấy đóng

vai trò quan trọng quyết định đến chất lượng sản phẩm Do đó, việc đo được nhiệt

độ, độ ẩm và khống chế các yếu tố này theo đúng yêu cầu mong muốn là điều hết

sức quan trọng và cần thiết

Để kiểm soát được nhiệt độ, độ ẩm trong buồng sấy, dùng vi điều khiển 8051

để tự động hoá quá trình là phương pháp tiện lợi, giá thành thích hợp cho những

ứng dụng rộng rãi Được sự đồng ý của Khoa Điện - Trường Đại học Bách khoa Đà

Nẵng, em tiến hành thực hiện đề tài “Dùng vi điều khiển để đo nhiệt độ, độ ẩm và

khống chế độ ẩm trong phòng kín”

II Giới hạn đề tài:

- Đo nhiệt độ và độ ẩm phòng kín, khống chế độ ẩm trong phòng theo một

giá trị đặt trước

- Tính toán hệ số khối lượng hơi nước trong không khí trong phạm vi hoạt

động của thiết bị đo theo tiêu chuẩn của hơi nước bão hoà theo nhiệt độ và hiển thị

thông số này khi giá trị độ ẩm được thiết lập

III Mục đích nghiên cứu:

Đề tài này nhằm các mục đích:

- Dùng kỹ thuật vi điều khiển để áp dụng vào các quy trình sản xuất sản

phẩm cần đến công đoạn đo nhiệt độ, độ ẩm

- Giúp người sử dụng có thể kiểm soát, điều khiển được độ ẩm của một

không gian kín thích hợp

- Hổ trợ người vận hành có thể tính được nhanh chóng khối lượng hơi nước

trong phạm vi thể tích không khí đang quang sát

Trang 8

Chương 2

GIớI THIệU CHUNG Về Bộ VI ĐIềU KHIểN

I.GIớI THIệU:

Bộ vi điều khiển viết tắt là Micro-controller, là mạch tích hợp trên một chip có

thể lập trình được, dùng để điều khiển hoạt động của một hệ thống Theo các tập

lệnh của người lập trình, bộ vi điều khiển tiến hành đọc, lưu trữ thông tin, xử lý

thông tin, đo thời gian và tiến hành đóng mở một cơ cấu nào đó

Trong các thiết bị điện và điện tử dân dụng, các bộ vi điều khiển, điều khiển

hoạt động của ti vi, máy giặt, đầu đọc laser, điện thọai, lò vi-ba… Trong hệ thống

sản xuất tự động, bộ vi điều khiển được sử dụng trong Robot, dây chuyền tự động

Các hệ thống càng “thông minh” thì vai trò của hệ vi điều khiển càng quan trọng

II.LịCH Sử PHáT TRIểN CủA CáC Bộ VI ĐIềU KHIểN:

Bộ vi điều khiển được phát triển từ bộ vi xử lí, từ những năm 70 của thế kỷ

XX, do sự phát triển và hoàn thiện về công nghệ vi điện tử dựa trên kỹ thuật MOS

(Metal-Oxide-Semiconductor), mức độ tích hợp của các linh kiện bán dẫn trong

một chip ngày càng cao

Năm 1971 xuất hiện bộ vi xử lí 4 bit loại TMS1000 do công ty texas

Instruments vừa là nơi phát minh vừa là nhà sản xuất Nhìn tổng thể thì bộ vi xử lí

chỉ có chứa trên một chip những chức năng cần thiết để xử lí chương trình theo một

trình tự, còn tất cả bộ phận phụ trợ khác cần thiết như: bộ nhớ dữ liệu, bộ nhớ

chương trình, bộ chuyển đổi AID, khối điều khiển, khối hiển thị, điều khiển máy in,

khối đồng hồ và lịch là những linh kiện nằm ở bên ngoài được nối vào bộ vi xử lí

Đến năm 1976 Công ty INTEL (Interlligen-Electronics) mới cho ra đời bộ vi

điều khiển đơn chip đầu tiên trên thế giới với tên gọi 8048, là chip đầu tiên của họ

vi điều khiển MCS 48 Bên cạnh bộ xử lí trung tâm 8048 còn chứa bộ nhớ dữ liệu,

bộ nhớ chương trình, bộ đếm và phát thời gian các cổng vào và ra Digital trên một

chip

Các công ty khác cũng lần lược cho ra đời các bộ vi điều khiển 8 bit tương tự

như 8048 và hình thành họ vi điều khiển MCS-48 (Microcontroller-sustem-48)

Đến năm 1980 Công ty INTEL cho ra đời thế hệ thứ hai của bộ vi điều khiển

đơn chip với tên gọi 8051

Bộ vi điều khiển đầu tiên của Tập đoàn SIEMENS cung cấp chip SAB 8051,

một cải tiến của 8051 có 6 Port xuất/nhập 8 bit, đặc biệt có một bộ biến đổi AD 8

bit với 8 kênh ngõ vào

Ngoài ra còn có các công ty khác cũng có những họ vi điều khiển riêng như:

Họ 68HCOS của công ty Motorola

Trang 9

III.KHảO SáT Bộ VI ĐIềU KHIểN 8051 Và 8031:

IC vi điều khiển 8051/8031 thuộc họ MCS51 có các đặt điểm sau :

- 4KB ROM (được lập trình bởi nhà sản xuất chỉ có ở 8051)

- 128 byte RAM

- 4port I/0 8 bit

- Hai bộ định thời 16 bit

- Mạch giao tiếp nối tiếp

- 64KB không gian bộ nhớ chương trình mở rộng

- 64 KB không gian bộ nhớ dữ liệu mở rộng

- Bộ xử lý Bit (thao tác trên các bit riêng lẻ)

- 210 bit được địa chỉ hóa

- Nhân/chia 4s,

1./ Cấu trỳc bờn trong của 8051 / 8031:

Hình 2.1 : Sơ Đồ Khối 8051 / 8031

OTHER REGISTER

128 byte RAM

128 byte RAM 8032\8052

ROM 0K:

8031\8032 4K:8951 8K:8052

Trang 10

Phần chính của vi điều khiển 8051 / 8031 là bộ xử lí trung tâm (CPU: central

processing unit ) bao gồm :

- Thanh ghi tích lũy A

- Thanh ghi tích lũy phụ B, dùng cho phép nhân và phép chia

- Đơn vị logic học (ALU : Arithmetic Logical Unit )

- Từ trạng thái chương trình (PSW : Prorgam Status Word)

- Bốn băng thanh ghi

- Con trỏ ngăn xếp

- Ngoài ra còn có bộ nhớ chương trình, bộ giải mã lệnh, bộ điều khiển thời

gian và logic

Đơn vị xử lí trung tâm nhận trực tiếp xung từ bộ giao động, ngoài ra còn có

khả năng đưa một tín hiệu giữ nhịp từ bên ngoài

Chương trình đang chạy có thể cho dừng lại nhờ một khối điều khiển ngắt ở

bên trong Các nguồn ngắt có thể là: các biến cố ở bên ngoài , sự tràn bộ đếm định

thời hoặc cũng có thể là giao diện nối tiếp

Hai bộ định thời 16 bit hoạt động như một bộ đếm

Các cổng (port0, port1, port2, port3 ) Sử dụng vào mục đích điều khiển

ở cổng 3 có thêm các đường dẫn điều khiển dùng để trao đổi với một bộ nhớ

bên ngoài, hoặc để đầu nối giao diện nối tiếp, cũng như các đường ngắt dẫn bên

ngoài

Giao diện nối tiếp có chứa một bộ truyền và một bộ nhận không đồng bộ, làm

việc độc lập với nhau Tốc độ truyền qua cổng nối tiếp có thể đặt trong vảy rộng và

Các thanh ghi sử dụng để lưu trữ thông tin trong quá trình xử lí Khi CPU làm

việc nó làm thay đổi nội dung của các thanh ghi

2./ Chức năng cỏc chõn vi điều khiển :

a.port0 : là port có 2 chức năng (các chân từ 32 đến 39) trên 8051 trong các

thiết kế cỡ nhỏ dùng làm điện tụ xuất/nhập Đối với các thiết kế cỡ lớn (với bộ nhớ

mở rộng) port0 trở thành bus địa chỉ và bus dữ liệu đa hợp

b.port1 : port1 là một port I/O (các chân 1 đến 8) trên 8051 Các chân được ký

hiệu P1.0, P1.1,…., P1.7 có thể dùng cho các thiết bị ngoài nếu cần Port1 không có

chức năng khác, vì vậy chúng ta chỉ được dùng trong giao tiếp với các thiết bị

ngoài

c.port2 : port2 là một port công dụng kép (các chân 21 đến 28) trên 8051 được

dùng như các đường xuất nhập hoặc là byte cao của bus địa chỉ đối với các thiết kế

dùng bộ nhớ mở rộng

Trang 11

d.Port3 : port3 là một port công dụng kép (các chân 10 đến 17) Các chân

port3 có nhiều chức năng riêng (mỗi chân có chức năng riêng liên quan đến các đặc

trưng cụ thể của 8051)

Bảng 2.1 : Chức năng của các chân trên port3

e PSEN (Program Store Enable ): 8051/8031 có 4 tín hiệu điều khiển bus

PSEN là tín hiệu ra trên chân 29 Nó là tín hiệu điều khiển để cho phép bộ nhớ

chương trình mở rộng và thường được nối đến chân OE (Output Enable) của một

EPROM để cho phép đọc các bytes mã lệnh

PSEN sẽ ở trong thời gian tìm - nạp lệnh Các mã nhị phân của chương trình

được đọc từ EPROM qua bus và được chốt vào thanh ghi lệnh của 8051 để giải mã

lệnh Khi thi hành chương trình trong ROM nội (8051) PSEN sẽ ở mức thụ động

(logic1)

f ALE (Address Latch Enable ) :

8051 sử dụng chân 30, chân xuất tín hiệu cho phép chốt địa chỉ ALE để giải đa

hợp (Demultiplexing) bú dữ liệu và bus địa chỉ Khi Port0 sử dụng đa hợp phân

ALE xuất đến hiện chốt địa chỉ vào 1 thanh ghi ngoài hay nửa đầu chu kỳ bộ nhớ

(Memory cycle) sau đó các thanh ghi bên ngoài trong nửa đầu của chu kỳ bộ nhớ

Sau đó, các chân port 0 dùng để xuất/nhập dữ liệu trong nửa sau chu kỳ của bộ nhớ

Các xung tín hiệu ALE có tốc độ bằng 1/6 lần tần số dao động trên chip và có

thể được dùng là nguồn xung nhịp cho các hệ thống Nếu xung trên 8051 là 12MHz

thì ALE có tần số 2MHz Chỉ ngoại trừ khi thi hành lệnh MOVX, một xung ALE sẽ

bị mất Chân ALE cũng được làm ngõ vào cho xung lập trình cho EPROM trong

8051

g EA (External Access) :

Trang 12

Tín hiệu vào EA(chân 31) có thể thường được nối với 5V (logic 1) hoặc với

GND (logic 0) Nếu ở logic 1, 8051 thi hành chương trình từ ROM nội trong

khoảng địa chỉ thấp (4K) Nếu ở logic 0, bộ nhớ bên trong chương trình 8051 sẽ bị

cấm và chương trình thi hành từ EPROM mở rộng Người ta còn dùng chân EA

làm chân cấp điện áp 21V khi lập trình cho EPROM trong 8051

h RST (Reset) :

Ngõ vào RST (chân 9) là ngõ reset của 8051 Khi tín hiệu này được đưa lên

mức cao (trong ít nhất 2 chu kỳ máy), các thanh ghi trong 8051 được tải những giá

trị thích hợp để khởi động hệ thống

i Các chân XTAL1 và XTA2 :

Như trong hình vẽ, 8051 có một bộ dao động trên chip Nó thường được nối

với thạch anh giữa hai chân 18 và 19 Các tụ ổn định cũng cần thiết như đã vẽ Tần

P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0

P2.7 P2.6 P2.5 P2.4 P2.3 P2.2 P2.1 P2.0

18

19

12 MHz

P3.7 P3.6 P3.5 P3.4 P3.3 P3.2 P3.1 P3.0

Trang 13

3 Tổ chức bộ nhớ :

8051 / 8031 có cấu trúc theo bộ nhớ harvard :có những vùng cho bộ nhớ riêng

biệt cho chương trình dữ liệu.Cả chương trình và dữ liệu có thể ở bên trong 8051,dù

vậy chúng có thể được mở rộng bằng các thành phần ngoài lên đến 64Kbyte bộ nhớ

chương trình và 64 Kbyte bộ nhớ dữ liệu

Bộ nhớ bên trong bao ROM(8051) và RAM trên chip,RAM trên chip bao gồm

nhiều phần:các dãy thanh ghi(00H-1FH),phần lưu trữ địa chỉ hoá từng

bit(20H-2FH),phần lưu trữ đa dụng(30H-7FH) và các thanh ghi chức năng đặt

a RAM đa dụng:

Moùi ủũa chổ trong vuứng RAM ủa duùng ủeàu coự theồ ủửụùc truy xuaỏt tửù do

duứng caựch ủaựnh ủũa chổ trửùc tieỏp hoaởc giaựn tieỏp Vớ duù, ủeồ ủoùc noọi dung ụỷ ủũa chổ

5FH cuỷa RAM noọi vaứo thanh ghi tớch luừy leọnh sau seừ ủửụùc duứng :

MOV A, 5FH

Lệnh này di chuyển một byte dữ liệu bằng cách đánh địa chỉ trực tiếp để xác

định “địa chỉ nguồn”(5FH) Đích nhận dữ liệu được ngầm định trông mã lệnh là

thanh ghi tích luỹ A

RAM bên trong cũng có thể được truy xuất bằng cách đánh địa chỉ gián tiếp

qua RO hay R1 Ví dụ,hai lệnh sau thi hành cùng nhiệm vụ như lệnh trên :

MOV R0, #5FH

MOV A, @R0

Lệnh đầu dùng địa chỉ tức thời để di chuyển giá trị 5FH vào thanh ghi R0 và

lệnh thứ hai dùng địa chỉ trực tiếp để di chuyển dữ liệu “được trỏ bởi R0” vào thanh

ghi tích luỹ

Trang 14

địa chỉ byte địa chỉ bit

7F

30 2F 2E 2D 2C 2B 2A

18

17

10 0F

67 66 65 64 63 62 61 60 5F 5E 5D 5C 5B 5A 59 58

57 56 55 54 53 52 51 50 4F 4E 4D 4C 4B 4A 49 48

47 46 45 44 43 42 41 40 3F 3E 3D 3C 3B 3A 39 38

37 36 35 34 33 32 31 30 2F 2E 2D 2C 2B 2A 29 28

27 26 25 24 23 22 21 20 1F 1E 1D 1C 1B 1A 19 18

17 16 15 14 13 12 11 10 0F 0E 0D 0C 0B 0A 09 08

07 06 05 04 03 02 01 00

BANK 3 BANK 2 BANK 1 Dãy thanh ghi mặc định

R0-R7

Bảng tóm tắt bản đồ vùng nhớ trên chip data 8051

Trang 15

địa chỉ byte địa chỉ bit

FF F0 E0 D0 B8 B0 A8 A0

99

98

90

8D 8C 8B 8A

TL1 TL0 TMOD

Không định địa chỉ bit Không định địa chỉ bitKhông định địa chỉ bitKhông định địa chỉ bitKhông định địa chỉ bit

SP

Không định địa chỉ bitKhông định địa chỉ bitKhông định địa chỉ bit

Tóm tắc bộ nhớ dữ liệu trên chip

b.RAM địa chỉ hoá từng bit:

8051 / 8031 chứa 210 vị trí bit được địa chỉ hoá,trong đó 128 bit là ở các byte

20H đến 2FH,và phần còn lại trong các thanh ghi chức năng đặc biệt.ý tưởng truy

xuất từng bit từng bit riêng rẽ bằng phần mềm là một đặt tính của vi điều khiển nói

Trang 16

chung Các bit có thể được đặt, xoá, AND, OR bằng một lệnh đơn.Đa số các bộ vi

xử lí đòi hỏi một chuổi lệnh đọc sửa ghi để nhận được cùng kết quả

Hơn nữa,các port I/O cũng được địa chỉ từng bit làm đơn giản phần mềm xuất nhập

từng bit

128 bit ở các byte 20H đến 2FH có thể được truy xuất như các byte hay các bit phụ

thuộc vào lệnh được dùng, ví dụ để đặt bit 67H, ta dùng lệnh sau:

SETB 67H

Chú ý rằng “địa chỉ bit 67H” là bit có trọng số lớn nhất (MSB) ở “địa chỉ byte

2CH” lệnh trên sẽ không tác động đến các bit khác của địa chỉ này

c.Các dãy thanh ghi:

32 byte thấp của bộ nhớ nội là các dãy thah ghi Bộ nhớ lệnh của

8051/8031hổ trợ 8 thanh ghi (R0 đến R7) và theo mặc định(sau khi reset hệ thống)

và các thanh ghi này ở các địa chỉ 00H-07H Lệnh sau đây sẽ đọc nội dung ở đia chỉ

05H vào thanh ghi tích luỹ

MOV A,R5

ẹaõy laứ leọnh moọt byte duứng ủũa chổ thanh ghi Taỏt nhieõn, thao taực tửụng tửù

coự theồ ủửụùc thi haứnh baống leọnh 2 byte duứng ủũa chổ trửùc tieỏp naốm trong byte thửự

hai:

MOV A,05H

Caực leọnh duứng caực thanh ghi R0 ủeỏn R7 thỡ seừ ngaộn vaứ nhanh hụn caực leọnh

duứng ủũa chổ trửùc tieỏp Caực giaự trũ dửừ lieọu ủửụùc duứng thửụứng xuyeõn neõn duứng moọt

trong caực thanh ghi naứy

Bank thanh ghi tớch cửùc coự theồ chuyeồn ủoồi baống caựch thay ủoồi caực bit choùn

bank thanh ghi trong tửứ traùng thaựi chửụng trỡnh (PSW) Giaỷ sửỷ raống bank thanh

ghi 3 ủửụùc tớch cửùc, leọnh sau seừ ghi noọi dung cuỷa thanh ghi tớch luừy vaứo ủũa chổ

18H:

MOV R0,A

Y tưởng dùng các dãy thanh ghi cho phép “chuỷên hướng” chương trình

nhanh và hiệu quả( từng phần riêng rẽ của phần mềm sẽ có một hanh ghi riêng rẽ

không phụ thuộc vào các phần khác

4./ Các thanh ghi chức năng đặc biệt:

Các thanh ghi nội của 8051/8031 được truy xuất ngầm định bởi lệnh Ví dụ

lệnh “INC A” sẽ tăng nội dung của thanh ghi tích lũy A lên 1 Tác động này được

ngầm định trong mã lệnh

Các thanh ghi trong 8051/8031 được định dạng như một phần của RAM trên

chip Vì vậy một thanh ghi sẽ có một địa chỉ (ngoại trừ thanh ghi trực tiếp, sẽ không

có lợi khi đặt chúng vào trong RAM trên chip).Đó là lý do để 8051/8031 có nhiều

thanh ghi Cũng như R0 đến R7, có 21 thanh ghi chức năng đặc biệt (SFR: Special

Funtion Register) ở vùng trên của RAM nội, từ địa chỉ 80H đến FFH Chú ý rằng

Trang 17

hầu hết 128 địa chỉ từ 80H đến FFH không được định nghĩa Chỉ có 21 địa chỉ SFR

là được định nghĩa

Ngoaùi trửứ tớch luừy (A) coự theồ ủửụùc truy xuaỏt ngaàm nhử ủaừ noựi, ủa soỏ caực

SFR ủửụùc truy xuaỏt duứng ủũa chổ trửùc tieỏp chuự yự raống moọt vaứi SFR coự theồ ủửụùc

ủũa chổ hoựa bit hoaởc byte Ngửụứi thieỏt keỏ phaỷi thaọn troùng khi truy xuaỏt bit vaứ

byte Vớ duù leọnh sau:

SETB 0E0H

Seừ Set bit 0 trong thanh ghi tớch luừy, caực bit khaực khoõng thay ủoồi Ta thaỏy

raống E0H ủoàng thụứi laứ ủũa chổ byte cuỷa thanh ghi tớch luừy vaứ laứ ủũa chổ bit coự

troùng soỏ nhoỷ nhaỏt trong thanh ghi tớch luừy Vỡ leọnh SETB chổ taực ủoọng treõn bit,

neõn chổ coự ủũa chổ bit laứ coự hieọu quaỷ

a Từ trạng thái chương trình PSW (Program Status Word):

D2H D1H D0H

Cờ nhớ

Cờ nhớ phụ

Cờ 0 Chọn dãy thanh ghi (bit 1) Chọn dãy thanh ghi (bit 0)

00=bank 0;địa chỉ 00H-07H 01=bank 1:địa chỉ 08H-0FH 10=bank 2:địa chỉ 10H-17H 11=bank 3:địa chỉ 18H-1FH

Cờ tràn

Dự trữ

Cờ kiểm tra chẳn lẻ

Bảng 2.2: Thanh ghi PSW

 Cờ nhớ (CY) có công dụng kép Thông thường nó được dùng cho các lệnh số

học: có sẽ được set nếu có một số nhớ sinh ra bởi phép cộng hoặc có một số

mượn phép trừ Ví dụ, nếu thanh chứa A có nội dung là FFH, thì lệnh sau:

ADD A,#1

Sẽ trả về thanh ghi tích luỹ kết quả 00H và set cờ nhớ trong PSW

Cờ nhớ cũng có thể xem như một thanh ghi 1 bit cho các lệnh thao tác trên

bit Ví dụ, lệnh sẽ AND bit 25H với cờ nhớ CY và đặt kết quả trở vể cờ nhớ:

ANL C,25H

 Cờ nhớ phụ:

Khi cộng các số BCD, cờ nhớ phụ (AC) được set nếu kết quả của 4 bit thấp

trong khoảng 0AH đến 0FH Nừu các giá trj cộng được là số BCD, thì sau lệnh

cộng cần có DA A( hiệu chỉnh thập phân thanh ghi tích luỹ)để mang kết quả lớn

hơn 9 trở về tầm từ 09

Trang 18

 Cờ 0

Cờ 0 (F0)là một bit đa dụng dùng cho các ứng dụng của người dùng

 Các bit chọn dãy thanh ghi

(RSO v RS1) dùng xác định dãy thanh ghi tích cực Chúng được xoá sau khi

reset hệ thống và được thay đổi mức logic bằng phần meàm nếu caàn Ví dụ, ba lệnh

sau cho phép dãy thanh ghi 3 và di chuyển nội dung cuả thanh ghi R7 (địa chỉ byte

1FH) đến thanh ghi tích luỹ:

SETB RS1

SETB RSO

MOV A,R7

Khi chương trình được hợp dịch các địa chỉ bit đúng được thay thế cho các ký

hiệu “RS1” và “RS0” Vởy lệnh SETB RS1 sẽ giông như lệnh SETB 0D4H

 Cờ tràn

Cờ tràn (OV) được set sau phép toá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 trừ với nhau, phaàn meàm có thể kiểm tra

bit này để xác định xem kết quả của nó co nằm trong tầm xác định không Khi các

số không dấu không được cộng, bit OV có thể được bỏ qua Các kết quả lớn hơn

-127 hoặc nhỏ hơn +128 sẽ set cờ OV bằng 1

b Thanh ghi B:

Thanh ghi B ụỷ ủũa chổ F0H ủửụùc duứng chung vụựi thanh ghi A trong caực pheựp

toaựn nhaõn vaứ chia Leọnh MUL AB seừ nhaõn 2 giaự trũ khoõng daỏu 8 bit trong A vaứ B

roài traỷ veà keỏt quỷa 16 bit trong A (byte thaỏp) vaứ B (byte cao) Leọnh DIV AB seừ

chia A cho B roài traỷ veà keỏt quỷa nguyeõn trong A vaứ phaàn dử trong B Thanh ghi B

cuừng coự theồ ủửụùc xem nhử thanh ghi ủeọm ủa duùng Noự ủửụùc ủũa chổ hoựa tửứng bit

baống caực ủũa chổ bit FOH ủeỏn F7H

c Con trỏ ngăn xếp(stack):

Con troỷ ngaờn xeỏp (Stack Pointer) laứ moọt thanh ghi 8 bit ụỷ ủũa chổ 81H Noự

chửựa ủũa chổ cuỷa byte dửừ lieọu hieọn haứnh treõn ủổnh cuỷa ngaờn xeỏp Caực leọnh treõn

ngaờn xeỏp bao goàm caực thao taực caỏt dửừ lieọu vaứo ngaờn xeỏp vaứ laỏy dửừ lieọu ra khoỷi

ngaờn xeỏp Leọnh caỏt dửừ lieọu vaứo ngaờn xeỏp seừ laứm taờng SP trửụực khi ghi dửừ lieọu,

vaứ leọnh laỏy dửừ lieọu ra khoỷi ngaờn xeỏp seừ laứm giaỷm SP Ngaờn xeỏp cuỷa 8051/8031

ủửụùc giửừ trong RAM noọi vaứ ủửụùc giụựi haùn caực ủũa chổ coự theồ truy xuaỏt baống ủũa

chổ giaựn tieỏp chuựng laứ 128 byte ủaàu cuỷa 8051/8031

Để khởi động lại SP ngăn xếp bắt đầu tại 60H, các lệnh sau đây được dùng:

MOV SP,#5FH

Trên 8051/8031 ngăn xếp bị giới hạn 32 byte vì địa chỉ cao nhất của RAM

trên chip là 7FH Dùng giá trị 5FH vì SP sẽ tăng lên 60H trước khi cất byte dữ liệu

đầu tiên

Trang 19

Người thiết kế có thể chon không phảI khởi động lại con trỏ ngăn xếp mà để

nó lấy giá trị mặc định khi reset hệ thống Giá trj mặc định đó là 07H và kết quả là

ngăn đầu tiên để cất dữ liệu có địa chỉ 08H Nếu phần mềm ứng dụng không khởi

động lại SP , dãy thanh ghi 1 (có thể cả 2 và 3) sẽ không được dùng vì vùng RAM

này đã được dùng làm ngăn xếp

Ngaờn xeỏp ủửụùc truy xuaỏt trửùc tieỏp baống caực leọnh PUSH vaứ POP ủeồ lửu giửừ

taùm thụứi vaứ laỏy laùi dửừ lieọu hoaởc ủửụùc truy xuaỏt ngaàm baống caực leọnh goùi chửụng

trỡnh con (ACALL, LACALL) vaứ caực leọnh trụỷ veà (RET,RETI) ủeồ caỏt vaứ laỏy laùi

boọ ủeỏm chửụng trỡnh

d Con trỏ dữ liệu(DPTR):

DPTR ủửụùc duứng ủeồ truy xuaỏt boọ nhụự ngoaứi laứ moọt thanh ghi 16 bit ụỷ ủũa

chổ 82H(DPL: byte thaỏp) vaứ 83H (DPH:byte cao) Ba leọnh sau seừ ghi 55H vaứo

RAM ngoaứi ụỷ ủũa chổ 1000H:

MOV A,#55H

MOV DPTR,#1000H

MOVX @DPTR,A

Leọnh ủaàu tieõn duứng ủũa chổ tửực thụứi ủeồ taỷi dửừ lieọu 55H vaứo thanh ghi tớch

luừy, leọnh thửự hai cuừng duứng ủũa chổ tửực thụứi, laàn naứy ủeồ taỷi dửừ lieọu 16 bit 1000H

vaứo con troỷ dửừ lieọu Leọnh thửự ba duứng ủũa chổ giaựn tieỏp ủeồ di chuyeồn dửừ lieọu

trong A (55H) ủeỏn RAM ngoaứi ụỷ ủũa chổ ủửụùc chửựa trong DPTR (1000H)

e Các thanh ghi port xuất nhập:

Caực port cuỷa 8051/8031 bao goàm Port 0 ụỷ ủũa chổ 80H, Port 1 ụỷ ủũa chổ 90

H, Port 2 ụỷ ủũa chổ A0H vaứ Port 3 ụỷ ủũa chổ B0H Taỏt caỷ caực Port ủeàu ủửụùc ủũa

chổ hoựa tửứng bit ẹieàu ủoự cung caỏp moọt khaỷ naờng giao tieỏp thuaọn lụùi

f Các thanh ghi định thời(timer):

8051/8031 chửựa 2 boọ ủũnh thụứi/ủeỏm 16 bit ủửụùc duứng trong vieọc ủũnh thụứi

hoaởc ủeỏm sửù kieọn Timer 0 ụỷ ủũa chổ 8AH (TL0:byte thaỏp) vaứ 8CH (TH0:byte

cao).Timer 1 ụỷ ủũa chổ 8BH (TL1:byte thaỏp) vaứ 8DH (TH1: byte cao) Vieọc vaọn

haứnh timer ủửụùc set bụỷi thanh ghi Timer Mode (TMOD) ụỷ ủũa chổ 89H vaứ thanh

ghi ủieàu khieồn timer (TCON) ụỷ ủũa chổ 88H Chổ coự TCON ủửụùc ủũa chổ hoựa tửứng

bit

g Các thanh ghi port nối tiếp:

8051/8031 chửực moọt port noỏi tieỏp treõn chip daứnh cho vieọc trao ủoồi thoõng tin

vụựi caực thieỏt bũ noỏi tieỏp nhử maựy tớnh, modem hoaởc cho vieọc giao tieỏp vụựi caực IC

khaực coự giao tieỏp noỏi tieỏp (coự boọ chuyeồn ủoồi A/D, caực thanh ghi dũch ) Moọt

thanh ghi goùi laứ boọ ủeọm dửừ lieọu noỏi tieỏp (SBUF) ụỷ ủũa chổ 99H seừ giửừ caỷ hai giửừ

lieọu truyeàn vaứ nhaọn Khi truyeàn dửừ lieọu thỡ ghi leõn SBUf, khi nhaọn dửừ lieọu thỡ

Trang 20

ủoùc SBUF Caực mode vaọn haứnh khaực nhau ủửụùc laọp trỡnh qua thanh ghi ủieàu

khieồn port noỏi tieỏp (SCON) (ủửụùc ủũa chổ hoựa tửứng bit) ụỷ ủũa chổ 98H

h Các thanh ghi ngắt:

8051/8031 coự caỏu truực 5 nguoàn ngaột, 2 mửực ửu tieõn Caực ngaột bũ caỏm sau

khi reset heọ thoỏng vaứ seừ ủửụùc cho pheựp baống vieọc ghi thanh ghi cho pheựp ngaột

(IE) ụỷ ủũa chổ A8H mức ưu tiên ngắt được thiết lập qua thanh ghi ưu tiên ngắt IP có

địa chỉ B8H.Cả hai thanh ghi ủửụùc ủũa chổ hoựa tửứng bit

i Các thanh ghi điều khiển nguồn:

Thanh ghi ủieàu khieồn nguồn (PCON) ụỷ ủũa chổ 87H chửựa nhieàu bit ủieàu

khieồn Chuựng ủửụùc toựm taột trong baỷng sau:

PD IDL

Bit gaỏp ủoõi toỏc ủoọ baud, neỏu ủửụùc set thỡ toỏc ủoọ baud seừ taờng gaỏp ủoõi trong caực mode 1,2 vaứ 3 cuỷa port noỏi tieỏp

Khoõng ủũnh nghúa Khoõng ủũnh nghúa Khoõng ủũnh nghúa Bit cụứ ủa mục đích 1 Bit cụứ ủa mục đích 2 Nguồn giảm, được set để tích cực chế độ nguồn giảm,chỉ thoát khi reset hệ thống Mode nghĩ set ủeồ kớch hoaùt mode nghĩ chổ thoaựt khi coự ngaột hoaởc reset heọ thoỏng

Baỷng 2.3 :Thanh ghi ủieàu khieồn nguồn (PCON)

5/ Bộ nhớ ngoài:

8051/8031 coự khaỷ naờng mụỷ roọng boọ nhụự ủeỏn 64K boọ nhụự chửụng trỡnh vaứ

64K boọ nhụự dửừ lieọu beõn ngoaứi Do ủoự coự theồ duứng theõm ROM vaứ RAM neỏu caàn

Khi duứng boọ nhụự ngoaứi, port 0 khoõng coứn laứ moọt port I/O thuaàn tuựy nửừa

Noự ủửụùc hụùp keõnh giửừa bus ủũa chổ (A0-A7) vaứ bus dửừ lieọu (D0-D7) vụựi tớn hieọu

ALE ủeồ choỏt byte thaỏp cuỷa ủũa chổ khi baột ủaàu moói chu kyứ boọ nhụự Port 2 thoõng

thửụứng ủửụùc duứng cho byte cao cuỷa bus ủũa chổ

Trong nửỷa ủaàu cuỷa moói chu kyứ boọ nhụự, byte thaỏp cuỷa ủũa chổ ủửụùc caỏp

trong port 0 vaứ ủửụùc choỏt baống xung ALE Moọt IC choỏt 74HC373 (hoaởc tửụng

ủửụng) seừ giửừ byte ủũa chổ thaỏp trong phaàn coứn laùi cuỷa chu kyứ boọ nhụự Trong nửỷa

sau cuỷa chu kyứ boọ nhụự port 0 ủửụùc duứng nhử bus dửừ lieọu vaứ ủửụùc ủoùc hoaởc ghi

tuứy theo leọnh

Trang 21

a/ Truy xuất bộ nhớ chương trình ngoài :

Boọ nhụự chửụng trỡnh ngoaứi laứ một IC ROM ủửụùc pheựp bụỷi tớn hieọu PSEN

Moọt chu kyứ maựy cuỷa 8051/8031 coự 12 chu kyứ xung nhũp Neỏu boọ dao ủoọng

treõn chip ủửụùc laựi bụỷi moọt thaùch anh 12MHz thỡ chu kyứ maựy keựo daứi 1s Trong

moọt chu kyứ maựy seừ coự 2 xung ALE vaứ 2 byte ủửụùc ủoùc tửứ boọ nhụự chửụng trỡnh

(neỏu leọnh chỉ có 1 byte thỡ byte thửự 2ừ ủửụùc loaùi boỷ) Giaỷn ủoà thụứi gian cuỷa moọt

laàn laỏy leọnh ủửụùc veừ ụỷ hỡnh 2.5:

Hình 2.4:Giao tiếp giữa 8051 và EPROM

Port 2 PSEN

D0-D7 A0-A7 EPROM

A8-A15

OE

D Q 74HC373

Trang 22

b/ Truy xuất bộ nhớ dữ liệu ngoài :

Boọ nhụự dửừ lieọu ngoaứi laứ moọt boọ nhụự RAM ủửụùc cho pheựp ghi/ủoùc baống

caực tớn heọu WR vaứ RD (caực chaõn P3.6 vaứ P3.7).Chổ coự moọt caựch truy xuaỏt boọ

nhụự dửừ lieọu ngoaứi laứ vụựi leọnh MOVX duứng con troỷ dửừ lieọu (DPTR) 16 bit hoaởc

R0 vaứ R1 xem nhử thanh ghi ủũa chổ

Keỏt noỏi bus ủũa chổ vaứ bus dửừ lieọu giửừa RAM vaứ 8051/8031 cuừng gioỏng

EPROM vaứ do ủoự cuừng coự theồ leõn ủeỏn 64 byte boọ nhụự RAM Ngoaứi ra, chaõn RD

cuỷa 8051/8031 ủửụùc noỏi tụựi chaõn cho pheựp xuaỏt (OE) cuỷa RAM vaứ chaõn WR

ủửụùc noỏi tụựi chaõn ghi (WR) cuỷa RAM

Hình2.6: Giao tiếp giữa 8051/8031 và RAM

Gian đồ thời gian cho lệnh đọc bộ nhớ dữ liệu ngoài được vẽ trên hình sau

đối với lệnh MOVX A,@DPTR:

74HC373

O D

G

Trang 23

Hình 2.7:Giản đồ thời gian của lệnh MOVX

Giaỷn ủoà thụứi gian cho leọnh ghi (MOVX @DPTR, A) cuừng tửụng tửù chổ

khaực ủửụứng WR seừ thay vaứo ủửụứng RD vaứ dửừ lieọu ủửụùc xuaỏt ra treõn port 0 (RD

vaón giửừ mửực cao)

c/ Giải mã địa chỉ:

Nếu có nhiều EPROM hoặc có nhiều RAM hoặc cả hai giao tiếp với 8051 ta

cần giãi mã địa chỉ Thí dụ, nếu các RAM và ROM 8 bit được sử dụng, địa chỉ phải

được giãi mã để chọn 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à 74HC138 với các ngõ ra được nối với ngõ

vào chọn chip CS của IC nhớ (như hình) cho bộ nhớ có nhiều EPROM 2764(8K) và

RAM 6264 (8K) Do đường cho phép riêng rẽ (PSEN cho bộ nhớ chương trình, RD

và WR cho bộ nhớ dữ liệu), 8051 có thể quản lý bộ nhớ đến 64K với EPROM và 64

CS CS CS

CS CS CS

D0-D7 D0-D7

EPROM 8KBytes

Select another EPROM/RAM

Trang 24

6/ Lệnh reset:

8051/8031 ủửụùc reset baống caựch giửừ chaõn RST ụỷ mửực cao tối thiểu 2 chu

kyứ maựy vaứ traỷ noự veà mức thaỏp RST coự theồ ủửụùc kớch khi caỏp ủieọn duứng moọt

PSW

SP DPTR Port 0-3

IP

IE Các thanh ghi định thời

SCON SBUF PCON(HMOS) PCON(CMOS)

0000H 00H 00H 00H 07H 0000H FFH xxx00000B 0xx00000B 00H 00H 00H 0xxxxxxB 0xxx0000B

Bảng 2.3 trạng thái các thanh ghi sau khi reset

Quan troùng nhaỏt trong caực thanh ghi treõn laứ thanh ghi ủeỏm chửụng trỡnh,

noự ủửụùc ủaởt laùi 0000H Khi RST trụỷ laùi mửực thaỏp, vieọc thi haứnh chửụng trỡnh

luoõn baột ủaàu ụỷ ủũa chổ ủaàu tieõn trong boọ nhụự trong chửụng trỡnh: ủũa chổ 0000H

Noọi dung cuỷa RAM treõn chip khoõng bũ thay ủoồi bụỷi leọnh reset

7 Hoạt động của bộ định thời (timer)

Trang 25

Một định nghĩa đơn giản của timer là một chuỗi các flip-flop chia đôi tần

số nối tiếp với nhau, chúng nhận tín hiệu vào làm nguồn xung nhịp Ngõ ra của

tần số cuối làm nguồn xung nhịp cho flip-flop báo tràn của timer (flip-flop cờ)

Giá trị nhị phân trong các flip-flop của timer có thể xem như số đếm số xung

nhịp (hoặc các sự kiện) từ khi khởi động timer Ví dụ timer 16 bit sẽ đếm lên từ

0000H đến FFFFH Cờ báo tràn sẽ lên 1 khi số đếm tràn từ FFFFH đến 0000H

8051/8031 cĩ 2 timer 16 bit, mỗi timer cĩ bốn cách làm việc Người ta sử dụng các

timer để : a) định khoảng thời gian, b) đếm sự kiện c) tạo tốc độ baund cho port

nối tiếp trong 8051/8031

Trong các ứng dụng định khoảng thời gian, người ta lập trình timer ở một

khoảng đều đặn và đặt cờ tràn timer Cờ được dùng để đồng bộ hóa chương

trình để thực hiện một tác động như kiểm tra trạng thái của các cửa ngõ vào

hoặc gửi các sự kiện ra các ngõ ra Các ứng dụng khác có thể sử dụng việc tạo

xung nhịp đều đặn của timer để đo thời gian trôi qua giữa hai sự kiện (ví dụ : đo

độ rộng xung)

Đếm sự kiện dùng để xác định số lần xẩy ra của một sự kiện Một “sự

kiện” là bất cứ tác động ngoài nào có thể cung cấp một chuyển trạng thái trên

một chân của 8051/8031 Các timer cũng có thể cung cấp xung nhịp tốc độ baud

cho port nối tiếp trong 8051/8031

Truy xuất timer của 8051/8031 dùng 6 thanh ghi chức năng đặc biệt cho

trong bảng sau:

SFR MỤC ĐÍCH ĐỊA CHỈ Địa chỉ hóa từng bit

88H 89H 8AH 8BH 8CH 8DH

Có Không Không Không Không Không

Bảng 2.4: Thanh ghi chức năng đặc biệt dùng timer

7.2 Thanh ghi chế độ timer (TMOD)

Thanh ghi TMOD chứa hai nhóm 4 bit dùng để đặt chế độ làm việc cho timer 0

và timer 1

Bit Tên Timer Mô tả

7 GATE 1 Bit (Mở) cổng, khi lên 1 timer chỉ chạy khi INT1

ở mức cao.Bit

Trang 26

00:chế độ 0 : timer 13 bit 01: chế độ 1 :timer 16 bit 10: chế độ 2 :tự động nạp lại 8255A bit 11: chế độ 3 :tách timer

Bit mở cổng Bit chọn counter/timer Bit 1 của chế độ Bit 0 của chế độ

Bảng 2.5: Tĩm tắt thanh ghi TMOD

7.3 Thanh ghi điều khiển timer (TCON)

Thanh ghi TCON chứa các bit trạng thái và các bit điều khiển cho timer 0 và

89H 88H

Cờ báo tràn timer 1 Đặt bởi phần cứng khi tràn, được xóa bởi phần mềm hoặc phần cứng khi bộ xử lý chỉ đến chương trình phục vụ ngắt

Bit điều khiển timer 1 chạy Đặt/xóa bằng phần mềm cho timer chạy/ngưng

Cờ báo tràn timer 0 Bit điều khiển timer 0 chạy Cờ cạnh ngắt 1 bên ngoài Cờ cạnh ngắt 1 bên ngoài, phần cứng khi phát hiện một cạnh xuống ở INT1, xóa bằng phần mềm hoặc phần cứng khi CPU chỉ đến chương trình phục vụ ngắt Đặt/xóa bằng phần mềm đề ngắt ngoài tích cực cạnh xuống/mức thấp

Cờ cạnh ngắt 0 bên ngoài

Cờ kiểu ngắt 0 bên ngoài

Bảng 2.6: Tóm tắt thanh ghi TCON

Trang 27

7 4 Các chế độ timer

a/ Chế độ 0, chế độ timer 13 bit

Để tương thích với 8048 (có trứớc 8051)

Ba bit cao của TLX (TL0 / TL1) không dùng

Xung nhịp

Timer Cờ báo tràn

b/ Chế độ 1- chế độ timer 16 bit :

Hoạt động như timer 16 bit đầy đủ

Cờ báo tràn là bit TFx trong TCON có thể đọc hoặc ghi bằng phầm mềm

MSB của giá trị trong các thanh ghi timer là bit 7 của THx và LBS là bit 0

của TLx Các thanh ghi timer (TLx/THx) có thể được đọc hoặc ghi bất cứ lúc

nào bằng phầm mềm

Xung nhịp

Timer Cờ báo tràn

c/ Chế độ 0- chế độ tự động nạp lại 8 bit

TLx hoạt động như một timer 8 bit, trong khi đó THx vẫn giữ nguyên giá

trị được nạp Khi số đếm tràn tứ FFH đến 00H, không những cờ timer được set

mà giá trị trong THx đồng thời được nạp vào TLx Việc đếm tiếp tục từ giá trị

này lên đến FFH xuống 00H và nạp lại chế độ này rất thông dụng vì sự tràn

timer xảy ra trong những khoảng thời gian nhất định và tuần hoàn một khi đã

khởi động TMOD và THx

TFx

THx (8 bit)

Trang 28

Timer 0 tách thành hai timer 8 bit (TL0 và TH0), TL0 có cờ báo tràn là

TF0 và TH0 có cờ báo tràn là TF1

Timer 1 ngưng ở chế độ3, nhưng có thể được khởi động bằng cách chuyển

sang chế độ khác Giới hạn duy nhất là cờ báo tràn TF1 không còn bị tác động

khi timer 1 bị tràn vì nó đã được nối tới TH0

Khi timer 0 ở chế độ 3, có thể cho timer 1 chạy và ngưng bằng cách chuyển nó

ra ngoài và vào chế độ 3 Nó vẫn có thể được sử dụng bởi port nối tiếp như bộ

tạo tốc độ baund hoặc nó có thể được sử dụng bằng bất cứ cách nào không cần

ngắt (vì nó không còn được nối với TF1)

Cờ báo tràn

7.5 Nguồn tạo xung nhịp

Có hai nguồn tạo xung nhịp có thể có,đượcï chọn bằng cách ghi vào bit

C/T (counter/timer) trong TMOD khi khởi động timer Một nguồn tạo xung nhịp

dùng cho định khoảng thời gian, cái khác cho đếm sự kiện

Crytal

Timer Clock

12

T

C /

Trang 29

- Định khoảng thời gian (interval timing)

Nếu C/T =0 hoạt động timer liên tục được chọn và timer được dùng cho việc

định khoảng thời gian Lúc đó, timer lấy xung nhịp từ bộ dao động trên chip Bộ

chia 12 được thêm vào để giảm tần số xung nhịp đến giá trị thích hợp cho phần

lớn các ứng dụng Như vậy thạch anh 12 MHz sẽ cho tốc độ xung nhịp timer 1

MHz.Bao tràn timer xảy ra sau một số (cố định) xung nhịp, phụ thuộc vào giá trị

ban đầu được nạp vào các thanh ghi timer TLx/THx

- Đếm sự kiện (Event counting)

- Nếu C/T=1, timer lấy xung nhịp từ nguồn bên ngoài Trong hầu hết các

ứng dụng nguồn bên ngoài này cung cấp cho timer một xung khi xảy ra một

“sự kiện “, timer dùng đếm sự kiện được xác định bằng phần mềm bằng cách

đọc các thanh ghi TLx/THx vì giá trị 16 bit trong các thanh ghi này tăng thêm

1 cho mỗi sự kiện

Nguồn xung nhịp ngoài có từ thay đổi chức năng của các chân port 3 Bit 4

của port 3 (P3.4) dùng làm ngõ vào tạo xung nhịp bên trong timer 0 và được gọi

là “T0” Và P3.5 hay “T1” là ngõ vào tạo xung nhịp cho timer 1

7.6 Bắt đầu dừng và điều khiển các timer

Phương pháp mới đơn giản nhất để bắt đầu (cho chạy) và dừng các timer là

dùng các bit điều khiển chạy :TRx trong TCON, TRx bị xóa sau khi reset hệ

thống Như vậy, các timer theo mặc nhiên là bị cấm (bị dừng) TRx được đặt lên

1 bằng phần mềm để cho các timer chạy

Xung nhịp

0=lên : timer dừng 1=xuống : timer chạy

Cho chạy và dừng timer

Vì TRx ở trong thanh ghi TCON có địa chỉ bit, nên dễ dàng cho việc điều khiển

các timer trong chương trình.Ví dụ: cho timer 0 chạy bằng lệnh : SETB TR0 và

dừng bằng lệnh SETB TR0

Trình biên dịch sẽ thực hiện việc chuyển đổi ký hiệu cần thiết từ “TR0” sang

địa chỉ bit đúng SETB TR0 chính xác giống như SETB 8CH

7.7 Khởi động và truy xuất các thanh ghi timer

TRx

Trang 30

Thông thường các thanh ghi được khởi động một lần ở đầu chương trình

để đặt chế độ làm việc cho đúng Sau đó trong thân chương trình các timer được

cho chạy, dừng, các bit cờ được kiểm tra và xóa, các thanh ghi timer được đọc

và cập nhật theo đòi hỏi của các ứng dụng

TMOD là thanh ghi thứ nhất được khởi động vì nó đặt chế độ hoạt động

Ví dụ các lệnh sau khi khởi động timer 1 như timer 16 bit (chế độ 1) có xung

nhịp từ bộ dao động trên chíp cho việc định khoảng thời gian

MOV TMOD,#00010000B

Lệnh này sẽ đặt M1=0 và M0=1 cho chế độ 1, C/T=0 và GATE=0 cho

xung nhịp nội và xóa các bit chế độ timer 0 Dĩ nhiên timer thật sự không bắt

đầu định thời cho đến khi bit điều khiển chạy TR1 được đặt lên 1

Nếu cần số đếm ban đầu, các thanh ghi timer TL1/TH1 cũng phải được khởi

động Nhớ lại là các timer đếm lên và đặt cờ báo tràn khi có sự chuyển tiếp

FFFFH sang 0000H

- Đọc timer đang chạy

Trong một số ứng dụng cần đọc giá trị trong các thanh ghi timer đang

chạy Vì phải đọc 2 thanh ghi timer “sai pha” có thể xẩy ra nếu byte thấp tràn

vào byte cao giữa hai lần đọc Giá trị có thể đọc được không đúng Giải pháp là

đọc byte cao trước, kế đó đọc byte thấp rồi đọc byte cao lại một lần nữa Nếu

byte cao đã thay đổi thì lập lại các hoạt động đọc

7.8 Các khoảng ngắn và các khoảng dài

Dãy các khoảng thời gian có thể định thời là bao nhiêu ? vấn đề này được

khảo sát với 8051/8031 hoạt động với tần số 12MHz.Như vậy xung nhịp của

các timer có tần số lá 1 MHz

Khoảng thời gian ngắn nhất có thể có bị giới hạn không chỉ bởi tần số xung nhịp

của timer mà còn bởi phần mềm Do ảnh hưởng của thời khoảng thực hiện một

lệnh Lệng ngắn nhất 8051/8031 là một chu kỳ máy hay 1s Sau đây là bảng

tóm tắt các kỹ thuật để tạo những khoảng thời gian có chiều dài khác nhau (với

giả sử xung nhịp cho 8051/8031 có tần số 12 MHz)

Khoảng thời gian tối đa Kỹ thuật

10

256

65535

Không giới hạn

- Bằng phần mềm

- Timer 8 bit với tự động nạp lại

- Timer 16 bit

- Timer 16 bit cộng với các vòng lập phần mềm

Trang 31

Các kỹ thuật để lập trình các khoảng thời gian (FOSC=12 MHz)

8 Hoạt động port nối tiếp

8.1 Giới thiệu

8051/8031 có một port nối tiếp trong chip có thể hoạt động ở nhiều chế

độ khác trên một dãy tần số rộng Chức năng chủ yếu của một port nối tiếp là

thực hiện chuyển đổi song song sang nối tiếp với dữ liệu xuất và chuyển đồi nối

tiếp sang song song với dữ liệu nhập

Truy xuất phần cứng đến port nối tiếp qua các chân TxD và RxD Các

chân này có các chức năng khác với hai bit của port 3 P3 ở chân 11 (TxD) và

P3.0 ở chân 10 (RxD)

Port nối tiếp cho hoạt động song công (full duplex : thu và phát đồng thời)

và đệm lúc thu (receiver buffering) cho phép một ký tự sẽ được thu và được giữ

trong khi ký tự thứ hai được nhận Nếu CPU đọc ký tự thứ nhất trước khi ký tự

thứ hai được thu đầy đủ thì dữ liệu sẽ không bị mất

Hai thanh ghi chức năng đặc biệt cho phép phần mềm truy xuất đến port

nối tiếp là : SBUF và SCON Bộ đếm port nối tiếp (SBUF) ở địa chỉ 99H thật sự

là hai bộ đếm.Viết vào SBUF để truy xuất dữ liệu thu được Đây là hai thanh

ghi riêng biệt thanh ghi chỉ ghi để phát và thanh ghi để thu

TxD (P3.1) RxD (P3.0)

CLK

Q D

CLK Xung nhịp tốc Độ baud (thu) Xung nhịp tốc

Độ baud (thu)

Hình 2.10: Sơ đồ port nối tiếp

Thanh ghi điều khiển port nối tiếp (SCON) ở địa chỉ 98H là thanh ghi có

địa chỉ bit chứa các bit trạng thái và các bit điều khiển Các bit điều khiển đặt

chế độ hoạt động cho port nối tiếp, và các bit trạng thái báo cáo kết thúc việc

phát hoặc thu ký tự Các bit trạng thái có thể được kiểm tra bằng phần mềm

hoặc có thể được lập trình để tạo ngắt

SUBF

SBUF (chỉ đọc)

BUS nội 8051/8031

SBUF (chỉ đọc)

Trang 32

Tần số làm việc của port nối tiếp còn gọi là tốc độ baund có thể cố định

(lấy từ bộ giao động của chip) Nếu sử dụng tốc độ baund thay đổi, timer 1 sẽ

cung cấp xung nhịp tốc độ baund và phải được lập trình

8.2 Thanh ghi điều khiển port nối tiếp

Chế độ hoạt động của port nối tiếp được đặt bằng cách ghi vào thanh ghi

chế độ port nối tiếp (SCON) ở địa chỉ 98H Sau đây các bảng tóm tắt thanh ghi

SCON và các chế độ của port nối tiếp :

Bit Ký hiệu Địa chỉ Mô tả

SCON.7 SM0 9FH Bit 0 của chế độ port nối tiếp

SCON.6 SM1 9EH Bit 1 của chế độ port nối tiếp

SCON.5 SM2 9DH Bit 2 của chế độ 2 nối tiếp

cho phép truền thông đã xử lý

trong các chế độ 2 và 3 ;RI sẽ

SCON.4 REN 9CH Cho phép bộ thu phải đặt lên

SCON.3 TB8 9BH Bit 8 phát, bit thứ 9 được phát

SCON.2 RB8 9AH Bit 8 thu, bit thứ 9 thu được

SCON.1 TI 99H Cờ ngắt phát Đặt lên 1 khi

SCON.0 RI 98H Cờ ngắt thu Đặt lên 1 khi

Bảng 2.7:Tóm tắt thanh ghi chế độ port nối tiếp SCON

SM0 SM1 Chế độ Mô tả Tốc độ baud

0 0 0 Thanh ghi dịch Cố định (Fosc/12)

0 1 1 UART 8 bit Thay đổi (đặt bằng timer)

1 0 2 UART 9 bit Cố định (Fosc/12 hoặc Fosc/64)

1 1 3 UART 9 bit Thay đổi (đặt bằng timer)

Bảng 2.8: Các chế độ port nối tiếp

Trang 33

Trước khi sử dụng port nối tiếp, phải khởi động SCON cho đúng chế độ

Ví dụ, lệnh sau:

MOV SCON,#01010010B

Khởi động port nối tiếp cho chế độ 1 (SM0/SM1=0/1), cho phép bộ thu

(REN=1) và đặt cờ ngắt phát (TP=1) để chỉ bộ phát sẵn sàng hoạt động

8.3 Khởi động và truy xuất các thanh ghi cổng nối tiếp

a Cho phép thu:

Bit cho phép bộ thu (REN = Receiver Enable) trong SCON phải được đặt

lên 1 bằng phần mềm để cho phép thu các ký tự Thông thường thực hiện việc

này ở đầu chương trình khi khởi động cổng nối tiếp, timer Có thể thực hiện

việc này theo hai cách Lệnh :

SETB REN

Sẽ đặt REN lên 1, hoặc lệnh :

MOV SCON,#xxx1xxxxB

Sẽ đặt REN 1 và đặt hoặc xóa đi các bit khác trên SCON khi cần (các x

phải là 0 hoặc 1 để đặc chế độ làm việc)

b Bit dữ liệu thứ 9:

Bit dữ liệu thứ 9 cần phát trong các chế độ 2 và 3, phải được nạp vào

trong TB8 bằng phần mềm Bit dữ liệu thứ 9 thu được đặt ở RBS Phần mềm có

thể cần hoặc không cần bit dữ liệu thứ 9, phụ thuộc vào các đặc tính kỹ thuật

của thiết bị nối tiếp sử dụng (bit dữ liệu thứ 9 cũng đóng vai một trò quan trọng

trong truyền thông đa xử lý)

c Thêm 1 bit parity:

Thường sử dụng bit dữ liệu thứ 9 để thêm parity vào ký tự Như đã xét ở

các chương trước, bit P trong từ trạng thái chương trình (PSW) được đặt lên 1

hoặc bị xóa bởi chu kỳ máy để thiết lập kiểm tra chẵn với 8 bit trong thanh tích

lũy

d Các cờ ngắt:

Hai cờ ngắt thu và phát (RI và TI) trong SCON đóng một vai trò quan

trọng truyền thông nối tiếp dùng 8051/8031 Cả hai bit được đặt lên 1 bằng phần

cứng, nhưng phải được xóa bằng phần mềm

8.4 Tốc độ baud port nối tiếp

Như đã nói, tốc độ baund cố định ở các chế độ 0 và 2 Trong chế độ 0 nó

luôn luôn là tần số dao động trên chip được chia cho 12 Thông thường thạch

anh ấn định tần số dao động trên chip của 8051/8031 nhưng cũng có thể sử dụng

Trang 34

nguồn xung nhịp khác Giả sử với tần số dao động danh định là 12 MHz, tìm tốc

độ baud chế độ 0 là 1 MHz

Mặc nhiên, sau khi reset hệ thống, tốc độ baud chế độ là 2 tần số bộ dao động

chia cho 64 Tốc độ baud cũng ảnh hưởng bởi 1 bit trong thanh ghi điều khiển nguồn

cung cấp (PCON) Bit 7 của PCON là bit SMOD Đặt bit SMOD lên một làm gấp đôi

tốc độ baud trong chế độ 1,2 và 3 Trong chế độ 2, tốc độ baud có thể bị gấp đôi từ giá

trị mặc nhiên của 1/64 tần số dao động (SMOD=0) đến 1/32 tần số dao động

(SMOD=1).

a Chế độ 0

SMOD=0

SMOD=1

b Chế độ 2

SMOD=0

SMOD=1

c Chế độ 1 và 3

Hình 2.12 Các nguồn tạo xung nhịp cho port nối tiếp

Vì PCON không được định địa chỉ theo bit, nên để đặt bit SMOD lên 1

cần phải theo các lệnh sau:

MOV A,PCON lấy giá trị hiện thời của PCON

SETB ACC.7 đặt bit 7 (SMOD) lên 1

MOV PCON,A ghi giá trị ngược về PCON

Các tốc độ baud trong các chế độ 1 và 3 được xác định bằng tốc độ tràn

của timer 1 Vì timer hoạt động ở tần số tương đối cao, tràn timer được chia

thêm cho 32 (hay 16 nếu SMOD=1) trước khi cung cấp xung nhịp tốc độ baud

cho port nối tiếp

9 Hoạt động ngắt:

Trang 35

Ngắt là hoạt động ngừng tạm thời một chương trình này để thi hành một

chương trình khác Các ngắt có một vai trò quan trọng trong thiết kế và khả

năng thực thi của vi điều khiển Chúng cho phép hệ thống đáp ứng không cùng

lúc tới một công việc và giải quyết một công việc đó trong khi một chương trình

khác đang thực thi

Một hệ thống được điều khiển bằng ngắt cho ảo giác là làm nhiều việc

đồng thời Dĩ nhiên CPU mỗi lần không thể thực thi một chương trình để thực thi

một chương trình khác, rồi quay về chương trình đầu khi có yêu cầu ngắt

Chương trình giải quyết ngắt được gọi là chương trình phục vụ ngắt (ISR :

Interrupt Sevice Reutine)

9.1 Tổ chức ngắt

Ơû 8051 có 5 nguồn ngắt:

- 2 ngắt ngoài

- 2 ngắt từ timer

- 1 ngắt port nối tiếp

Tất cả các ngắt sẽ không được đặt sau khi reset hệ thống và cho phép

ngắt riêng rẽ bởi phần mềm

a Cho phép và không cho phép ngắt

Mỗi nguồn ngắt được cho phép hoặc không cho phép từng ngắt một qua

thanh ghi chức năng đặc biệt cố định địa chỉ bit IE (Interrupt Enable : cho phép

ngắt) ở địa chỉ A8H Cũng như các bit cho phép mỗi nguồn ngắt, có một bit cho

phép hoặc cấm toàn bộ được xóa để cấm tất cả các ngắt hoặc được đặt lên 1 để

cho phép tất cả các ngắt

Bit Ký hiệu Địa chỉ bit Mô tả (1=cho phép,0=cấm)

AFH AEH ADH ACH ABH AAH A9H

A8H

Cho phép hoặc cấm toàn bộ Không được định nghĩa Cho phép ngắt từ timer 2 (8052)

Cho phép ngắt Port nối tiếp Cho phép ngắt từ timer 1 Cho phép ngắt ngoài 1 Cho phép ngắt từ timer 0 Cho phép ngắt ngoài 0

Tóm tắt thanh ghi IE

Trang 36

b Ưu tiên ngắt:

Mỗi nguồn ngắt đuợc lập trình riêng vào một trong hai mức ưu tiên qua

thanh ghi chức năng đặc biệt được địa chỉ bit Ip (Interrupt priority : ưu tiên ngắt)

ở địa chỉ B8H

Bit Ký hiệu Địa chỉ bit Mô tả (1=mức cao hơn,0=mức

thấp) IP.7

BDH BCH BBH BAH B9H B8H

Không được định nghĩa Không được định nghĩa

Ưu tiên cho ngắt từ timer 2 (8052)

Ưu tiên cho ngắt Port nối tiếp

Ưu tiên cho ngắt từ timer 1

Ưu tiên cho ngắt ngoài

Ưu tiên cho ngắt từ timer 0

Ưu tiên cho ngắt ngoài 0 Tóm tắt thanh ghi IP

Các ngắt ưu tiên được xóa sau khi reset hệ thống để đặt tất cả các ngắt ở

mức ưu tiên thấp hơn

9.2 Xử lý ngắt

Khi có một ngắt xẩy ra và được CPU chấp nhận, chương trình chính bị

ngắt quãng Những hoạt động sau xẩy ra:

- Thi hành hoàn chỉnh lệnh đang hiện hành

- Cất DC vào ngắt xếp

- Trạng thái ngắt hiện hành được cất bên trong

- Các ngắt được chặn tại mức của ngắt

- Nap vàp DC địa chỉ Vector của ISR

- ISR thực thi

ISR thực thi và đáp ứng ngắt, ISR hoàn tất bằng lệnh RET1 Điều này làm

lấy lại giá trị cũ của PC từ ngăn xếp và lấy lại trạng thái ngắt cũ Chương trình

lại tiếp tục thi hành tại nơi mà nó dừng

 Các Vector ngắt

Khi chấp nhận ngắt, giá trị được nạp vào PC được gọi là Vector ngắt Nó

là địa chỉ bắt đầu của ISR cho nguồn tạo ngắt Các Vector ngắt được cho ở bảng

sau:

Trang 37

Ngắt Cờ Địa chỉ Vector Reset hệ

thống Bên ngoài 0 Timer 0 Bên ngoài 1 Timer 1 Port nối tiếp

RST IE0 TF0 IE1 TF1

TI hoặc RI

0000H 0003H 000BH 0013H 001BH

0023H

Các Vector ngắt

Vector reset hệ thống (RST ở địa chỉ 0000H) nó giống như một ngắt Nó

ngắt chương trình chính và tải vào PC một giá trị mới

Khi chỉ đến một ngắt cờ gây ngắt tự động bị xóa bởi phần cứng, trừ ra R1,

T1 cho các ngắt cổng nối tiếp Vì có hai nguồn có thể có cho ngắt này, không

thực tế để CPU xóa cờ ngắt này Các bit phải được kiểm tra trong ISR để xác

định nguồn ngắt và cờ tạo ngắt sẽ được xóa bằng phần mềm

9.3 Các ngắt của 8051:

a Các ngắt timer:

Các ngắt timer có địa chỉ Vector ngắt là 000BH (timer 0) và 001BH (timer

1) Ngắt timer xẩy ra khi các thanh ghi timer (TLx ITHx) tràn và set cờ báo tràn

(TFx) lên 1 Các cờ timer (TFx) không bị xóa bằng phần mềm Khi cho phép

các ngắt, TFx tự động bị xóa bằng phần cứng khi CPU chuyển đến ngắt

b Các ngắt cổng nối tiếp:

Ngắt cổng nối tiếp xẩy ra khi hoặc cờ phát (TI) hoặc cờ ngắt thu (KI)

được đặt lên 1 Ngắt phát xẩy ra khi một ký tự đã được nhận xong và đang đợi

trong SBUP để được đọc

Các ngắt cổng nối tiếp khác với các ngắt timer Cờ gây ra ngắt cổng nối

tiếp không bị xóa bằng phần cứng khi CPU chuyển tới ngắt Do có hai nguồn

ngắt cổng nối tiếp Ti và RI Nguồn ngắt phải được xác định trong ISR và cờ tạo

ngắt sẽ được xóa bằng phần mềm Các ngắt timer cờ ngắt được xóa bằng phần

cứng khi CPU hướng tới ISR

c Các ngắt ngoài :

- Các ngắt ngoài xẩy ra khi có một mức thấp hoặc cạnh xuống trên chân INT0

hoặc INT1 của vi điều khiển Đây là chức năng chuyển đổi của các bit Port

3.(Port 3.2 và Port 3.3)

Trang 38

Caực cụứ taùo ngaột naứy laứ caực bit IE0 vaự IE1 trong TCON Khi quyeàn ủieàu khieồn ủaừ

chuyeồn ủeỏn ISR, cụứ taùo ra ngaột chổ ủửụùc xoựa neỏu ngaột ủửụùc tớch cửùc baống caùnh

xuoỏng Neỏu ngaột ủửụùc tớch cửùc theo mửực, thỡ nguoàn yeõu caàu ngaột beõn ngoaứi seừ

ủieàu khieồn mửực cuỷa cụứ thay cho phaàn cửựng

Sửù lửùa choùn ngaột tớch cửùc mửực thaỏp hay tớch cửùc caùnh xuoỏng ủửụùc laọp trỡnh

qua caực bit IT0 vaứ IT1 trong TCON Neỏu IT1 = 0, ngaột ngoaứi 1 ủửụùc taực ủoọng

baống mưực thaỏp ụỷ chaõn IT1 Neỏu IT1 = 1 ngaột ngoaứi 1 seừ ủửụùc taực ủoọng baống

caùnh xuoỏng Trong cheỏ ủoọ naứy, neỏu caực maóu lieõn tieỏp treõn chaõn INT1 chổ mửực

cao trong moọt chu kyứ vaứ chổ mửực thaỏp trong chu kyứ keỏ, cụứ yeõu caàu ngaột IE1

trong TCON ủửụùc ủaởt leõn 1, roài bit IE yeõu caàu ngaột

Neỏu ngaột ngoaứi ủửụùc taực ủoọng baống caùnh xuoỏng thỡ nguoàn beõn ngoaứi phaỷi

giửừ chaõn taực ủoọng ụỷ mửực cao toỏi thieồu moọt chu kyứ vaứ giửừ noự ụỷ mửực thaỏp theõm

moọt chu kyứ nửừa ủeồ ủaỷm baỷo phaựt hieọn ủửụùc caùnh xuoỏng Neỏu ngaột ngoaứi ủửụùc

taực ủoọng theo mửực thỡ nguoàn beõn ngoaứi phaỷi giửừ tớn hieọu yeõu caàu taực ủoọng cho

ủeỏn khi ngaột ủửụùc yeõu caàu ủửụùc thaọt sửù taùo ra vaứ khoõng taực ủoọng yeõu caàu ngaột

trửụực khi ISR ủửụùc hoaứn taỏt Neỏu khoõng moọt ngaột khaực seừ ủửụùc laởp laùi

a/ Định địa chỉ thanh ghi:

8051/8031 có 4 dãy thanh ghi mỗi dãy có 8 thanh ghi đánh số từ R0 đến R7

Tại mỗi thời đỉêm chỉ có một dãy thanh ghi được tích cực Muốn chọn dãy thanh

ghi nào ta chỉ cần gán bit nhị phân thích hợp vào RS1 (PSW.4) và RS0

(PSW.3)trong thanh ghi trạng thái chương trình (PSW)

Mã lệnh n n n

Địa thỉ thanh ghi

Ngoài ra một số thanh ghi đặc biệt như thanh ghi tích luỹ con trỏ giữ liệu…cũng

được xác định trong các lệnh nên không cần các bit địa chỉ Trong các lệnh này các

thanh ghi tích luỹ được xác định là A, con trỏ dữ liệu là DPTR, thanh ghi đếm

chương trình là PC, cờ nhớ là C , cặp thanh ghi tích luỹ B là AB

b/Địa chỉ trực tiếp:

Trong chế độ này,các thanh ghi bên trong 8051/8031 được đánh địa chỉ trực tiếp

bằng 8 bit địa chỉ nằm trong byte thứ hai của mã lệnh

Trang 39

Địa chỉ trực tiếp

Dù vậy trình dịch hợp ngữ cho phép gọi tên các thanh ghi chức năng đặc

biệt(có địa chỉ trực tiếp từ 80H đến FFH) ví dụ: P0 cho Port ,TMOD cho thanh ghi

chế độ Timer…

c/ Địa chỉ gián tiếp :

R0 và R1 được dùng để chứa địa chỉ ô nhớ mà lệnh tác động đến, người ta quy ước

dùng dấu @ trước R0 hoặc R1

Địa chỉ gián tiếp

d/ Địa chỉ tức thời:

Người ta dùng # trước các toán hạng tức thời Các toán hạng đó có thể là một hằng

số, một tham số hay biểu thức toán học Trường hợp dịch sẽ tự động tính toánvà

thay thế dữ liệu trực tiếp vao mã lệnh

Địa chỉ tức thời

e/ Địa chỉ tương đối :

Địa chỉ tương đối chỉ dùng trong các lệnh nhảy 8051/8031 dùng giá trị 8 bit có

dấu để cộng thêm vào thanh ghi đếm chương trình(PC).Tầm nhảy của lệnh này

trong khoảng từ -128 đến 127 ô nhớ Trước khi cộng, thanh ghi PC sẽ tăng đến địa

chỉ theo sau lệnh nhảy rồi tính toán địa chỉ offset cần thiết để nhảy đến địa chỉ yêu

cầu.Như vậy địa chỉ mới là địa chỉ tương đối so với lệnh kế tiếp chứ không phải là

bản thân lệnh nhảy Thường lệnh này có liên quan đến nhãn được định nghĩa trước

địa chỉ tương đối

f/ Địa chỉ tuyệt đối:

Địa chỉ tuyệt đối chỉ dùng trong các lệnh ACALL và AJMP Các lệnh 2 byte này

dùng để rẽ nhánh vào một trang 2 Kbyte cuả bộ nhớ chương trình bằng cách cấp 11

bit địa chỉ thấp (A0-A10) để xác định địa chỉ bit trong mã.Còn 5 bit cao của địa chỉ

đích(A11-A15) chính là 5 bit cao hiện hành trong thanh ghi đếm chương trình Vì

vậy địa chỉ của lệnh theo sau lệnh rẽ nhánh và địa chỉ của lệnh rẽ nhánh và địa chỉ

đích của lệnh rẽ nhánh phỉa cùng trang mã 2 Kbyte (có cùng 5 bit địa chỉ cao)

Trang 40

Xác định trang mã xác định điạ chỉ trong trang mã

địa chỉ tuyệt đối

g/ Địa chỉ dài:

Chỉ dung cho lệnh LCALL và LJMP Các lệnh này chiếm 3 byte và dùng 2 byte

sau (byte 2 và byte 3) để định địa chỉ của lệnh (16 bit).Ưu điểm của lệnh này là có

sử dụng trong toàn bộ vùng nhớ 64 Kbyte Tuy nhiên, lệnh này chiếm nhiều byte và

lệ thuộc vào vị trí vùng nhớ

Địa chỉ dài

h/ Địa chỉ tham chiếu :

Đia chỉ tham chiếu dùng một thanh ghi cơ bản (hoặc thanh ghi đếm chương trình

PC hoặc thanh ghi con trỏ dữ liệu DPTR) và địa chỉ offset (trong thanh ghi A) để

tạo địa chỉ được tác động cho các lệnh JMP hoặc MOVC Các bảng nhảy và bảng

tìm kiếm dễ dàng được tạo ra để sử dụng địa chỉ tham chiếu

Địa chỉ tham chiếu

Các chi tiết thiết lập lệnh:

Rn :Thanh ghi R0 đến R7 của dãy thanh ghi được chọn

Data : 8 bit địa chỉ vùng dữ liệu bên trong Nó có thể là vùng RAM dữ liệu

trong (0-127) hoặc các thanh ghi chức năng đặc biệt

@Ri : 8 bit vùng RAM dữ liệu trong (0-125) được đánh giá địa chỉ gián tiếp

qua thanh ghi R0 hoặc R1

#data : Hằng 8 bit chức trong câu lệnh

#data 16 : Hằng 16 bit chức trong câu lệnh

Addr16 : 16 bit địa chỉ được dùng trong LCALL và LJMP

Addr11 : 11 bit địa chỉ được dùng trong lệnh ACALL và AJMP

Ngày đăng: 20/08/2020, 16:04

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
1. Họ vi điều khiển 8051--Tống Văn On – Hoàng Đức Hải: Nhà xuất bản lao động xã hôi Sách, tạp chí
Tiêu đề: Họ vi điều khiển 8051
Tác giả: Tống Văn On, Hoàng Đức Hải
Nhà XB: Nhà xuất bản lao động xã hôi
4. Cơ sở Kỹ Thuật Nhiệt - Phạm Lê Dần, Đặng Quốc Phú; Nhà xuất bản giáo dục 1997 Sách, tạp chí
Tiêu đề: Cơ sở Kỹ Thuật Nhiệt
Tác giả: Phạm Lê Dần, Đặng Quốc Phú
Nhà XB: Nhà xuất bản giáo dục
Năm: 1997
5. Kỹ Thuật Sấy – Hoàng Văn Chước ; Nhà xuất bản khoa học kỹ thuật Sách, tạp chí
Tiêu đề: Kỹ Thuật Sấy
Tác giả: Hoàng Văn Chước
Nhà XB: Nhà xuất bản khoa học kỹ thuật
2. Thiết kế hệ thống với họ 8051 -- Tống Văn On (chủ biên), Hoàng Đức Hải: Nhà xuất bản Phương Đông Khác
3. Cấu trúc và lập trình họ vi điều khiển 8051.- Nguyễn Tăng Cường, Phạm Quốc Thắng: Nhà xuất bản khoa học và kỹ thuật Khác

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w