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

Thiết kế bục phát biểu tự động sử dụng AT89S52

77 722 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 77
Dung lượng 3,49 MB

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

Nội dung

Bộ nhớ dữ liệu Data Memory Vi điều khiển họ 8051 có không gian bộ nhớ dữ liệu là 64K địa chỉ, đócũng là dung lượng bộ nhớ dữ liệu lớn nhất mà mỗi chip thuộc họ này có thể cóđư

Trang 1

MỤC LỤC

PHỤ LỤC HÌNH 3

LỜI MỞ ĐẦU 6

CHƯƠNG 1: TÌM HIỂU VỀ VI ĐIỀU KHIỂN AT89 8

1.1 Sơ lược về vi điều khiển AT89 8

1.2 Cấu trúc của vi điều khiển AT89 8

1.2.1 Cấu trúc bus 9

1.2.2 CPU (Central Processing Unit) 10

1.2.3 Bộ nhớ chương trình (Program Memory) 10

1.2.4 Bộ nhớ dữ liệu (Data Memory) 11

1.2.5 Cổng vào ra song song (I/O Port) 15

1.2.6 Cổng vào ra nối tiếp (Serial Port) 18

1.2.7 Ngắt (Interrupt) 21

1.2.8 Bộ định thời/Bộ đếm (Timer/Counter) 25

1.3 Vi điều khiển AT89S52 29

1.3.1 Giới thiệu tổng quan về vi điều khiển AT89S52 29

1.3.2 Sơ đồ chân và chức năng của AT89S52 30

1.3.3 Tổ chức bộ nhớ bên trong AT89S52 33

CHƯƠNG 2: THIẾT KẾ HỆ THỐNG BỤC PHÁT BIỂU TỰ ĐỘNG 38

2.1 Ý tưởng thiết kế 38

2.2 Lựa chọn phương án thiết kế 39

2.3 Giới thiệu các linh kiện sử dụng trong mạch 41

2.3.1 Vi điều khiển AT89S52 41

2.3.3 Tụ gốm 33pF 43

2.3.8 Công tắc reset (button) 48

Trang 2

2.3.10 Công tắc hành trình 50

2.3.11 Laze 51

2.3.12 Motor 51

2.3.13 Rơ le DC 5V 53

2.3.14 Hệ thống bánh răng-thanh truyền thẳng 54

2.4 Ngôn ngữ lập trình C cho vi điều khiển 55

2.4.1 Cấu trúc cơ bản của một chương trình C 55

2.4.2 Các loại biến trong C 57

2.4.3 Hàm trong C 58

2.4.4 Các toán tử cơ bản 60

2.4.5 Các cấu trúc lệnh rẽ nhánh, kiểm tra thường dùng 61

2.4.6 Bộ tiền xử lý 62

CHƯƠNG 3: XÂY DỰNG HỆ THỐNG BỤC PHÁT BIỂU TỰ ĐỘNG 63

3.1 Lưu đồ thuật toán và giải thuật chương trình 63

63

3.2 Sơ đồ nguyên lý của mạch 64

3.3 Nguyên lý hoạt động của hệ thống 65

3.3.1 Nguyên lý hoạt động của từng khối trong hệ thống 65

3.3.2 Nguyên lý hoạt động chung của hệ thống 69

3.4 Chương trình phần mềm 70

3.5 Quá trình thực hiện và kết quả đạt được 72

3.6 Hướng phát triển của đề tài 74

KẾT LUẬN 75

Trang 3

PHỤ LỤC HÌNH

Hình 1.1: Cấu trúc của AT89 ở dạng sơ đồ khối tổng quát ……….11

Hình 1.2: Hình ảnh minh họa bộ nhớ chương trình ……… 13

Hình 1.3: Địa chỉ bộ nhớ chương trình ………15

Hình 1.4: Hình ảnh minh họa bộ nhớ dữ liệu ……… 16

Hình 1.5: Sơ đồ mạch của các cổng ……… 19

Hình 1.6: Thanh ghi SCON ……….21

Hình 1.7: Thanh ghi IP ………26

Hình 1.8: Thanh ghi ngắt ……….27

Hình 1.9: Thanh ghi TMOD ………28

Hình 1.10: Hình ảnh thực tế IC AT89S52 ……… 31

Hình 1.11: Sơ đồ khối của AT89S52 ……… 32

Hình 1.12: Sơ đồ chân AT89S52 ……….………33

Hình 2.1: Pic 16F877A ………41

Hình 2.2: Vi điều khiển họ 8051 ………41

Hình 2.3: Công tắc hành trình ………42

Hinh 2.4: Laze và quang trở ……… 42

Hình 2.5: Bộ truyền bánh răng - thanh thẳng và ròng rọc ……… 43

Hình 1.6: Hình ảnh thực tế IC AT89S52 ……… 43

Hình 2.7: Thạch anh ……… 44

Hình 2.8: Bộ dao động thạch anh của VĐK 8051 ………44

Hình 2.9: Tụ gốm ………45

Hình 2.10: Tụ hóa ……… 45

Hình 2.11: Điện trở ………46

Hình 2.12: Quang trở ……….46

Hình 2.13: Hiệu ứng quang điện ……….47

Hình 2.14: Đặc tuyến, hình dạng và ký hiệu của LDR ……… 49

Hình 2.15: Transistor TIP 41C ………49

Trang 4

Hình 2.17: Công tắc button ………50

Hình 2.18: IC LM324 ……… 51

Hình 2.19: Công tắc hành trình ………52

Hình 2.20: Laze ……… 53

Hình 2.21: Motor ……….54

Hình 2.22: Rơ le ……… 55

Hình 2.23: Cấu tạo của rơ le 55

Hình 2.24: Bánh răng-thanh truyền thẳng ……… 56

Hình 3.1: Lưu đồ thuật toán và giải thuật chương trình ………65

Hình 3.2: Sơ đồ nguyên lý của mạch ………66

Hình 3.3: Khối vi xử lý ……… 67

Hình 3.4: Khối tạo chuyển động cơ ……….68

Hình 3.5: Khối tạo ngắt ……… 69

Hình 3.6: Khối cảm biến quang ……… 70

Hình 3.7: Sơ đồ mạch in ………74

Hình 3.8: Hình ảnh mạch thu được ……… 74

Hình 3.9: Hình ảnh hệ thống sau khi hoàn thành ……….75

Trang 5

PHỤ LỤC BẢNG

Bảng 1.1: Các chip thuộc họ AT89 ……….13

Bảng 1.2: Bộ nhớ chương trình của một số chip ……….15

Bảng 1.3: Các thanh ghi chức năng đặc biệt SFR ……… 18

Bảng 1.4: Chức năng các cổng ………19

Bảng 1.5: Datasheet của AT89S5x ……… 21

Bảng 1.6: Chế độ hoạt động của hai bit SM0, SM1 ………22

Bảng 1.7: Các ngắt trong 8051 ………24

Bảng 1.8: Chức năng các bit trong thanh ghi IE ……….25

Bảng 1.9: Mức ưu tiên ngắt ……….26

Bảng 1.10: Thanh ghi trạng thái chương trình PSW ……… 38

Bảng 1.11: Trạng thái các bit chương trình ……….39

Bảng 2.1: Các loại biến trong C ……… 60

Bảng 2.2: Một số loại biến khác ……… 60

Bảng 2.3: Các ngắt của vi điều khiển 8051 ……….63

Trang 6

LỜI MỞ ĐẦU

Hiện nay, nước ta đang trong thời kì CNH, HĐH đất nước nền kinh tếphát triển nhanh và mạnh mẽ đặc biệt là các ngành công nghệ kỹ thuật cao tiêubiểu như công nghệ thông tin hay công nghệ điện tử …

Như chúng ta đã biết trên thế giới công nghệ điện tử là một lĩnh vực cómức độ phát triển nhanh với nhiều ứng dụng to lớn phục vụ cho quá trình pháttriển của mỗi quốc gia Đối với nước ta thì công nghệ điện tử có vai trò quantrọng trong công cuộc CNH, HĐH đất nước, cũng như trong cuộc sống thườngngày của chúng ta, nó làm tăng năng suất lao động cũng như chất lượng sảnphẩm, giảm lao động chân tay nhờ sử dụng các thiết bị, dây chuyền điện tử vàosản xuất qua đó tiết kiệm được lao động con người đem lại hiệu quả cao chocông việc thúc đẩy công nghiệp ngày càng phát triển

Do vậy, ứng dụng công nghệ điện tử vào sản xuất cũng như các lĩnh vựckhác đang là vấn đề được rất nhiều kỹ sư điện tử cũng như các doanh nghiệp đặcbiệt quan tâm để càng ngày càng tạo ra những sản phẩm điện tử có chất lượngcao ứng dụng rộng rãi trong sản xuất cũng như trong cuộc sống hằng ngày, gópphần làm cho công nghệ điện tử tiến gần hơn với cuộc sống con người và khôngcòn là lĩnh vực xa lạ với chúng ta

Thông qua đồ án tốt nghiệp này em xin giới thiệu đến mọi người một sảnphẩm ứng dụng nhỏ của công nghệ điện tử đó là “Hệ thống bục phát biểu tựđộng” với mục đích chính là ứng dụng công nghệ điện tử để thiết kế một hệthống bục phát biểu tự động ứng dụng vào thực tế giúp chúng ta thuận tiện hơntrong quá trình đứng phát biểu trên bục

Nội dung đồ án của em gồm 3 chương:

Chương 1: Tìm hiểu về vi điều khiển AT89

Chương 2: Thiết kế hệ thống bục phát biểu tự động

Chương 3: Xây dựng hệ thống bục phát biểu tự động

Trang 7

Mặc dù em đã nghiên cứu và chuẩn bị đồ án kỹ lưỡng nhưng cũng khôngthể tránh khỏi những sai sót trong quá trình thực hiện, vì vậy kính mong thầy côvà các bạn có thể góp ý để em hoàn thành tốt hơn đề tài nghiên cứu này

Em xin chân thành cảm ơn!

Trang 8

CHƯƠNG 1: TÌM HIỂU VỀ VI ĐIỀU KHIỂN AT89

1.1 Sơ lược về vi điều khiển AT89

Hiện nay có rất nhiều họ vi điều khiển trên thị trường với nhiều ứng dụngkhác nhau, trong đó họ vi điều khiển họ MCS-51 được sử dụng rất rộng rãi trênthế giới và ở Việt Nam

Vào năm 1980, Intel công bố chíp 8051 (80C51), bộ vi điều khiển đầu tiêncủa họ vi điều khiển MCS-51 Tiếp theo sau đó là sự ra đời của chip 8052, 8053,

8055 với nhiều tính năng được cải tiến

Hiện nay Intel không còn cung cấp các loại vi điều khiển họ MCS-51 nữa,thay vào đó các nhà sản xuất khác như Atmel, Philips/signetics, AMD, Siemens,Matra & Dallas, Semiconductors được cấp phép làm nhà cung cấp thứ hai chocác chip của họ MSC-51 Chip vi điều khiển được sử dụng rộng rãi trên thế giớicũng như ở Việt Nam hiện nay là vi điều khiển của hãng Atmel với nhiều chủngloại vi điều khiển khác nhau

Hãng Atmel có các chip vi điều khiển có tính năng tương tự như chip vi điềukhiển MCS-51 của Intel, các mã số chip được thay đổi chút ít khi được Atmelsản xuất Mã số 80 chuyển thành 89, chẳng hạn 80C52 của Intel khi sản xuất ởAtmel mã số thành 89C52 (Mã số đầy đủ: AT89C52) với tính năng chương trìnhtương tự như nhau Tương tự 8051, 8053, 8055 có mã số tương đương ở Atmel là89C51, 89C53, 89C55.Vi điều khiển Atmel sau này ngày càng được cải tiến vàđược bổ sung thêm nhiều chức năng tiện lợi hơn cho người dùng

1.2 Cấu trúc của vi điều khiển AT89

Vi điều khiển 8051 là một trong những vi điều khiển 8 bit thông dụng nhấthiện nay Bắt đầu xuất hiện vào năm 1980, trải qua gần 30 năm, hiện đã có tớihàng trăm biến thể (derrivatives) được sản xuất bởi hơn 20 hãng khác nhau, trong

đó phải kể đến các đại gia trong làng bán dẫn (Semiconductor) như ATMEL,

Trang 9

hãng ATMEL là AT89C51, AT89C52, AT89S51, AT89S52… đã có thời gianxuất hiện trên thị trường khá lâu và có thể nói là được sử dụng rộng rãi nhấttrong các loại vi điều khiển 8 bit Chương này sẽ tập trung mô tả tương đối chitiết cấu trúc bên trong của các biến thể nói trên (tạm gọi chung là AT89) củahãng ATMEL.

Hình 1.1: Cấu trúc của AT89 ở dạng sơ đồ khối tổng quát

1.2.1 Cấu trúc bus

Bus địa chỉ của họ vi điều khiển 8051 gồm 16 đường tín hiệu (thường gọilà bus địa chỉ 16 bit) Với số lượng bit địa chỉ như trên, không gian nhớ của chipđược mở rộng tối đa là 216= 65536 địa chỉ, tương đương 64K

Bus dữ liệu của họ vi điều khiển 8051 gồm 8 đường tín hiệu (thường gọilà bus dữ liệu 8 bit), đó là lý do tại sao nói 8051 là họ vi điều khiển 8 bit Với độrộng của bus dữ liệu như vậy, các chip họ 8051 có thể xử lý các toán hạng 8 bittrong một chu kỳ lệnh

Trang 10

1.2.2 CPU (Central Processing Unit)

CPU là đơn vị xử lý trung tâm, đó là bộ não của toàn bộ hệ thống vi điện

tử được tích hợp trên chip vi điều khiển CPU có cấu tạo chính gồm một đơn vị

xử lý số học và lôgic ALU (Arithmethic Logic Unit) - nơi thực hiện tất cả cácphép toán số học và phép lôgic cho quá trình xử lý

1.2.3 Bộ nhớ chương trình (Program Memory)

Không gian bộ nhớ chương trình của AT89 là 64K byte, tuy nhiên hầu hếtcác vi điều khiển AT89 trên thị trường chỉ tích hợp sẵn trên chip một lượng bộnhớ chương trình nhất định và chiếm dải địa chỉ từ 0000h trở đi trong không gian

bộ nhớ chương trình

AT89C51/AT89S51 có 4K byte bộ nhớ chương trình loại Flash tích hợpsẵn bên trong chip Đây là bộ nhớ cho phép ghi/xóa nhiều lần bằng điện, chính vìthế cho phép người sử dụng thay đổi chương trình nhiều lần Số lần ghi/xóa đượcthường lên tới hàng vạn lần

AT89C52/AT89S52 có 8K byte bộ nhớ chương trình cùng loại Bộ nhớchương trình của các chip họ 8051 có thể thuộc một trong các loại: ROM,EPROM, Flash, hoặc không có bộ nhớ chương trình bên trong chip Tên của từngchip thể hiện chính loại bộ nhớ chương trình mà nó mang bên trong, cụ thể là vài

ví dụ sau:

Bảng 1.1: Các chip thuộc họ AT89

Bộ nhớ chương trình dùng để chứa mã của chương trình nạp vào chip.Mỗi lệnh được mã hóa bởi 1 hay vài byte, dung lượng của bộ nhớ chương trình

Trang 11

phản ánh số lượng lệnh mà bộ nhớ có thể chứa được Địa chỉ đầu tiên của bộ nhớchương trình (0x0000) chính là chỉ reset của 8051 Ngay sau khi reset (do tắt bậtnguồn, do mức điện áp tại chân RESET bịkéo lên 5V ), CPU sẽ nhảy đến thựchiện lệnh đặt tại địa chỉ này trước tiên, luôn luôn là như vậy Phần còn trốngtrong không gian chương trình không dùng để làm gì cả Nếu muốn mở rộng bộnhớ chương trình, ta phải dùng bộ nhớ chương trình bên ngoài có dung lượngnhư ý muốn Tuy nhiên khi dùng bộ nhớ chương trình ngoài, bộ nhớ chươngtrình onchip không dùng được nữa, bộ nhớ chương trình ngoài sẽ chiếm dải địachỉ ngay từ địa chỉ 0x0000.

Hình 1.2: Hình ảnh minh họa bộ nhớ chương trình

1.2.4 Bộ nhớ dữ liệu (Data Memory)

Vi điều khiển họ 8051 có không gian bộ nhớ dữ liệu là 64K địa chỉ, đócũng là dung lượng bộ nhớ dữ liệu lớn nhất mà mỗi chip thuộc họ này có thể cóđược (nếu phối ghép một cách chính tắc, sử dụng các đường tín hiệu của bus địachỉ và dữ liệu) Bộ nhớ dữ liệu của các chip họ 8051 có thể thuộc một hay hailoại: SRAM hoặc EEPROM Bộ nhớ dữ liệu SRAM được tích hợp bên trong mọichip thuộc họ vi điều khiển này, có dung lượng khác nhau tùy loại chip, nhưng

Trang 12

quá trình hoạt động của chip Khi mất điện, do bản chất của SRAM mà giá trị củacác biến này cũng bị mất theo Khi có điện trả lại, nội dung của các ô nhớ chứacác biến này cũng là bất kỳ, không thể xác định trước Bên cạnh bộ nhớ loạiSRAM, một số chip thuộc họ 8051 còn có thêm bộ nhớ dữ liệu loại EEPROMvới dung lượng tối đa vài Kbyte, tùy từng loại chip cụ thể Dưới đây là một vài ví

dụ về bộ nhớ chương trình của một số loại chip thông dụng thuộc họ 8051

Bảng 1.2: Bộ nhớ chương trình của một số chip

Tổng quát về bộ nhớ của 8051, ta có thể thấy mỗi chip 8051 gồm cónhững bộ nhớ sau:

Đối với các chip có bộ nhớ SRAM 128 byte thì địa chỉ của các byteSRAM này được đánh số từ 00h đến 7Fh Đối với các chip có bộ nhớ SRAM 256byte thì địa chỉ của các byte SRAM được đánh số từ 00h đến FFh Ở cả hai loại

Trang 13

chip, SRAM có địa chỉ từ 00h đến 7Fh được gọi là vùng RAM thấp, phần có địachỉ từ 80h đến FFh (nếu có) được gọi là vùng RAM cao Bên cạnh các bộ nhớ,bên trong mỗi chip 8051 còn có một tập hợp các thanh ghi chức năng đặc biệt(SFR – Special Function Register) Các thanh ghi này liên quan đến hoạt độngcủa các ngoại vi onchip (các cổng vào ra, timer, ngắt ) Địa chỉ của chúng trùngvới dải địa chỉ của vùng SRAM cao, tức là cũng có địa chỉ từ 80h đến FFh.

Hình 1.3: Địa chỉ bộ nhớ chương trình

Vậy khi truy cập vào một địa chỉ thuộc dải từ 00h đến 7Fh thì sẽ truy cậpđến ô nhớ thuộc vùng RAM thấp Tuy nhiên khi truy cập đến một địa chỉ thuộcdải từ 80h đến FFh thì xảy ra vấn đề cần giải quyết: sẽ truy cập đến thanh ghiSFR ở địa chỉ hay truy cập đến ô nhớ ở địa chỉ của vùng RAM cao Nhà sản xuấtquy định rằng, trong trường hợp này, nếu kiểu truy cập sử dụng chế độ địa chỉtrực tiếp thì sẽ truy cập vào vùng SFR, ngược lại nếu kiểu truy cập sử dụng chế

độ địa chỉ gián tiếp thì sẽ truy cập vào vùng RAM cao

Bộ nhớ dữ liệu RAM onchip thường dùng để chứa các biến tạm thời trongquá trình vi điều khiển hoạt động, đó cũng là nơi dành cho ngăn xếp hoạt động.Không gian dữ liệu 64 Kbyte được để trống hoàn toàn và chỉ dùng được khi ghépnối với bộ nhớ dữ liệu bên ngoài Khi ghép nối thêm bộ nhớ dữ liệu bên ngoài,dung lượng của các bộ nhớ này sẽ chiếm dần các vị trí trong không gian, tuynhiên không hề ảnh hưởng đến 128 byte RAM onchip

Trang 14

Ngăn xếp trong 8051 liên quan đến một thanh ghi tên là con trỏ ngăn xếp

SP (Stack Pointer) Thanh ghi này luôn trỏ vào đỉnh của ngăn xếp, tức là nó chứađịa chỉ của vị trí ngay sát vị trí có thể lưu địa chỉ/dữ liệu tiếp theo vào Khi cất 1byte địa chỉ/dữ liệu vào ngăn xếp, SP tự động tăng lên 1 đơn vị sau đó mới cấtđịa chỉ/dữ liệu vào ô nhớ có địa chỉ bằng với giá trị của SP sau khi đã tăng Khilấy 1 byte địa chỉ/dữ liệu ra khỏi ngăn xếp, giá trị sẽ được lấy ra sau đó SP mới

tự động trừ đi 1 đơn vị Giá trị sau khi reset của SP là 0x07, do đó quy định ngănxếp sẽ cất dữ liệu từ địa chỉ 0x08 trở đi Tuy nhiên do đặc tính hoạt động bànhtrướng theo chiều tăng địa chỉ mà ngăn xếp thường được bố trí lên vùng trêncùng của bộ nhớ RAM onchip để tránh tranh chấp với các biến lưu trong RAM

Hình 1.4: Hình ảnh minh họa bộ nhớ dữ liệu

Trang 15

Bảng 1.3: Các thanh ghi chức năng đặc biệt SFR

1.2.5 Cổng vào ra song song (I/O Port)

8051 có 4 cổng vào ra song song, có tên lần lượt là P0, P1, P2 và P3 Tất

cả các cổng này đều là cổng vào ra hai chiều 8 bit Các bit của mỗi cổng là mộtchân trên chip, như vậy mỗi cổng sẽ có 8 chân trên chip Hướng dữ liệu (dùngcổng đó làm cổng ra hay cổng vào) là độc lập giữa các cổng và giữa các chân(các bit) trong cùng một cổng Ví dụ, ta có thể định nghĩa cổng P0 là cổng ra, P1là cổng vào hoặc ngược lại một cách tùy ý, với cả 2 cổng P2 và P3 còn lại cũngvậy Trong cùng một cổng P0, ta cũng có thể định nghĩa chân P0.0 là cổng vào,P0.1 lại là cổng ra tùy ý

Liên quan đến mỗi cổng vào/ra song song của 8051 chỉ có một thanh ghiSFR (thanh ghi chức năng đặc biệt) có tên trùng với tên của cổng Ta có các

Trang 16

lệnh tác động bit đối với các bit của các thanh ghi này Mỗi thanh ghi này gồm 8bit tương ứng với các chân (bit) của cổng đó Khi một chân (bit) cổng nào đóđược dùng làm cổng vào thì trước đó bit tương ứng trong thanh ghi SFR phảiđược đặt ở mức 1 Nếu một chân (bit) cổng nào đó được dùng làm cổng ra thìgiá trịcủa bit tương ứng trong thanh ghi SFR sẽ là giá trị lôgic muốn đưa ra châncổng đó Nếu muốn đưa ra mức lôgic cao (điện áp gần 5V), bit tương ứng trongthanh ghi phải được đặt bằng 1, hiển nhiên nếu muốn đưa ra mức lôgic thấp (điện

áp gần 0V) thì bit tương ứng trong thanh ghi phải được đặt bằng 0 Như đã nói ởtrên, các bit trong thanh ghi cổng có thể được đặt bằng 1/0 mà không làm ảnhhưởng đến các bit còn lại trong cổng đó bằng cách dùng các lệnh setb (đặt lên1) hay clr (đặt về 0) Sau khi đặt một chân cổng làm cổng vào, ta có thể dùng cáclệnh kiểm tra bit để đọc vào và kiểm tra các mức lôgic của mạch ngoài đang ápvào là mức 0 hay mức 1 Các lệnh này là jb (nhảy nếu bit bằng 1), jnb (nhảy nếubit bằng 0) Mỗi cổng có cấu trúc gồm một latch (chính là các bit của thanh ghicổng), mạch lái đầu ra (output driver) và mạch đệm đầu vào (input buffer) Ngoàichức năng vào/ra thông thường, một số cổng còn được tích hợp thêm chức năngcủa một số ngoại vi khác Xem bảng liệt kê sau:

Bảng 1.4: Chức năng các cổng

Các chân cổng P1.0 và P1.1 được tích hợp với các tín hiệu của timer 2trong trường hợp chip là 8052 Khi dùng với các chức năng của các ngoại vi,chân cổng tương ứng phải được đặt lên 1 Nếu không các tín hiệu sẽ luôn bị ghim

ở mức 0

Trang 17

Hình 1.5: Sơ đồ mạch của các cổng

Cổng P0 không có điện trở treo cao (pullup resistor) bên trong, mạch láitạo mức cao chỉ có khi sử dụng cổng này với tính năng là bus dồn kênh địachỉ/dữ liệu Như vậy với chức năng ra thông thường, P0 là cổng ra open drain,với chức năng vào, P0 là cổng vào cao trở (high impedance) Nếu muốn sử dụngcổng P0 làm cổng vào/ra thông thường, ta phải thêm điện trở pullup bên ngoài.Giá trị điện trở pullup bên ngoài thường từ 4K7 đến 10K

Các cổng P1, P2 và P3 đều có điện trở pullup bên trong, do đó có thể dùngvới chức năng cổng vào/ra thông thường mà không cần có thêm điện trở pullupbên ngoài Thực chất,điện trở pullup bên trong là các FET, không phải điện trởtuyến tính thông thường, tuy vậy nhưng khả năng phun dòng ra của mạch lái khiđầu ra ở mức cao (hoặc khi là đầu vào) rất nhỏ, chỉ khoảng 100 micro Ampe.Trong datasheet của AT89S5x (một trong những biến thể của họ 8051 do Atmelsản xuất) có thống kê số liệu như sau:

Trang 18

Bảng 1.5: Datasheet của AT89S5x

Theo đó, nếu ta thiết kế để các cổng phải cung cấp cho tải ở đầu ra mứccao một lượng dòng điện IOH= 60 micro Ampe thì mức điện áp ở đầu ra VOH sẽbị kéo sụt xuống, chỉ có thể đảm bảo từ 2.4V trở lên bởi nhà sản xuất, không thểcao sát với 5V như lý thuyết Trong khi đó, khả năng nuốt dòng của mạch lái khiđầu ra ở mức thấp lại cao hơn rất nhiều, có thể đạt từ vài đến hàng chục miliAmpe

Như vậy, khi thiết kế với các phần tử bên ngoài, ta nên để ý đến đặc tínhvào/ra của các chân cổng Ví dụ khi dùng để ghép nối với LED đơn hoặc LED 7thanh, ta nên thiết kế chân cổng nuốt dòng từ LED để làm LED sáng (cổng nốivới Cathode của LED), không nên thiết kế chân cổng phun dòng cho LED đểlàm LED sáng (cổng nối với Anode của LED)

1.2.6 Cổng vào ra nối tiếp (Serial Port)

Cổng nối tiếp trong 8051 chủ yếu được dùng trong các ứng dụng có yêucầu truyền thông với máy tính, hoặc với một vi điều khiển khác Liên quan đếncổng nối tiếp chủ yếu có 2 thanh ghi: SCON và SBUF Ngoài ra, một thanh ghikhác là thanh ghi PCON (không đánh địa chỉ bit) có bit 7 tên là SMOD quy địnhtốc độ truyền của cổng nối tiếp có gấp đôi lên (SMOD = 1) hay không (SMOD =0) Dữ liệu được truyền nhận nối tiếp thông qua hai chân cổng P3.0 (RxD) vàP3.1 (TxD) Thanh ghi SBUF là thanh ghi 8 bit chứa dữ liệu truyền hoặc nhận.Về thực chất có hai thanh ghi dữ liệu khác nhau, một dành để chứa dữ liệu truyền

đi, một để chứa dữ liệu nhận được Cả hai thanh ghi này đều có chung một tên làSBUF, tuy nhiên CPU hoàn toàn phân biệt được một cách dễ dàng Khi ta muốntruyền dữ liệu đi, ta phải ghi vào thanh ghi SBUF (ví dụ viết lệnh mov SBUF,a),còn khi muốn đọc kiểm tra dữ liệu nhận về ta phải đọc thanh ghi SBUF (ví dụ

Trang 19

toán hạng đích (toán hạng bên trái) hay toán hạng nguồn (toán hạng bên phải) đểquyết định sẽ truy nhập (đọc/ghi) thanh ghi SBUF nào Người lập trình khôngcần phải quan tâm xử lý vấn đề này Thanh ghi quy định chế độ hoạt động vàđiều khiển cổng nối tiếp là thanh ghi SCON (đánh địa chỉ bit).

Hình 1.6: Thanh ghi SCON

Bit SM0, SM1, SM2 quy định chế độ hoạt động của cổng nối tiếp Thôngthường để truyền thông giữa 2 vi điều khiển hoặc giữa 1 vi điều khiển và 1 máytính, giá trị của bit SM2 được đặt bằng 0 Khi truyền thông theo kiểu mạng đa vi

xử lý (multiprocessor communication), SM2 được đặt bằng 1 Hai bit SM0 vàSM1 thực sự là các bit quy định chế độ hoạt động của cổng nối tiếp, chúng tạo ra

4 tổ hợp (00, 01, 10 và 11) ứng với 4 chế độ hoạt động mô tả trong bảng sau

Bảng 1.6: Chế độ hoạt động của hai bit SM0, SM1

Chế độ 0: là chế độ truyền đồng bộ duy nhất Chân RxD sẽ là tín hiệutruyền/nhận dữ liệu, chân TxD là tín hiệu xung nhịp Bit LSB (bit 0) của dữ liệuđược truyền đi trước tiên Tốc độ truyền cố định và bằng 1/12 giá trị thạch anh

Chế độ1: là chế độ truyền dị bộ 8 bit Dữ liệu 8 bit được đóng khung bởimột bit Start (= 0) ở đầu và một bit Stop (=1) ở cuối trước khi được truyền đi.Tốc độ truyền thay đổi được theo ý người lập trình

Chế độ 2: là chế độ truyền dị bộ 9 bit Dữ liệu 9 bit được ghép thành bởi 8bit trong thanh ghi SBUF và bit RB8 (trường hợp nhận về) hoặc TB8 (trườnghợp truyền đi) trong thanh ghi SCON Ngoài ra các bit Start và Stop vẫn đượcgắn bình ở đầu và cuối khung truyền Trong chế độ này, tốc độ truyền chỉ có thể

Trang 20

chọn được ở 1 trong 2 mức: 1/32 hoặc 1/64 giá trị của thạch anh (tùy thuộc vàogiá trị của bit SMOD trong thanh ghi PCON đã nói ở trên)

Chế độ 3: cũng là chế độ truyền dị bộ 9 bit, khác với chế độ 2 ở chỗ tốc độtruyền có thể thay đổi được theo ý người lập trình như trong chế độ 1 Bit RENtrong thanh ghi SCON là bit cho phép nhận dữ liệu Dữ liệu chỉ được nhận quacổng nối tiếp khi bit này = 1 Bit TB8 là bit dữ liệu thứ 9 trong trường hợp truyền

đi 9 bit (8 bit kia trong thanh ghi SBUF) Bit RB8 là bit dữ liệu thứ 9 trongtrường hợp nhận về 9 bit (8 bit kia trong thanh ghi SBUF)

• Bit TI là cờ ngắt truyền, báo hiệu việc truyền 1 khung dữ liệu đã hoàn tất

• Bit RI là cờ ngắt nhận, báo hiệu việc nhận 1 khung dữ liệu đã hoàn tất Để tạo ra tốc độ truyền (Baud rate) của cổng nối tiếp trong 8051, phảidùng đến timer 1 ở chế độ Auto Reload 8 bit Giá trị nạp lại chứa trong thanh ghiTH1 được tính toán theo công thức sau (phụ thuộc vào Baud rate mong muốn vàgiá trị của thạch anh) Tóm lại để sử dụng cổng nối tiếp của 8051, hãy thực hiệncác bước sau:

• Chọn chế độ cho cổng nối tiếp (đồng bộ/dị bộ, 8 bit/9 bit ), từ đó chọnđược giá trị cho các bit trong thanh ghi SCON Lưu ý xóa các bit TI và RI

• Chọn tốc độ truyền mong muốn, từ đó tính ra giá trị của thanh ghi TH1.Cho timer1 chạy ở chế độ Auto Reload 8 bit (không dùng ngắt tràn timer1)

• Đặt mức ưu tiên ngắt và cho phép ngắt cổng nối tiếp nếu muốn

• Bắt đầu quá trình truyền dữ liệu bằng một lệnh ghi dữ liệu muốn truyềnvào thanh ghi SBUF Quá trình truyền kết thúc thì cờ TI sẽ tự động đặt lên

1

• Khi một khung dữ liệu đã được nhận đầy đủ, cờ RI sẽ tự động đặt lên 1 vàngười lập trình lúc này có thể dùng lệnh đọc thanh ghi SBUF để lấy dữliệu nhận được ra xử lý

Trang 21

1.2.7 Ngắt (Interrupt)

8051 chỉ có một số lượng khá ít các nguồn ngắt (interrupt source) hoặc cóthể gọi là các nguyên nhân ngắt Mỗi ngắt có một vector ngắt riêng, đó là một địachỉ cố định nằm trong bộ nhớ chương trình, khi ngắt xảy ra, CPU sẽ tự độngnhảy đến thực hiện lệnh nằm tại địa chỉ này Bảng tóm tắt các ngắt trong 8051như sau:

Bảng 1.7: Các ngắt trong 8051

Với 8052, ngoài các ngắt trên còn có thêm ngắt của timer 2 (do vi điềukhiển này có thêm timer 2 trong số các ngoại vi onchip) Mỗi ngắt được dành chomột vector ngắt kéo dài 8 byte Về mặt lý thuyết, nếu chương trình đủ ngắn, mãtạo ra chứa đủ trong 8 byte, người lập trình hoàn toàn có thể đặt phần chươngtrình xử lý ngắt ngay tại vector ngắt Tuy nhiên trong hầu hết các trường hợp,chương trình xử lý ngắt có dung lượng mã tạo ra lớn hơn 8 byte nên tại vectorngắt, ta chỉ đặt lệnh nhảy tới chương trình xử lý ngắt nằm ở vùng nhớ khác Nếukhông làm vậy, mã chương trình xử lý ngắt này sẽ lấn sang, đè vào vector ngắt

Trang 22

kế cận Liên quan đến ngắt chủ yếu có hai thanh ghi là thanh ghi IE và thanh ghiIP.

Bảng 1.8: Chức năng các bit trong thanh ghi IE

Để cho phép một ngắt, bit tương ứng với ngắt đó và bit EA phải được đặtbằng 1 Thanh ghi IE là thanh ghi đánh địa chỉ bit, do đó có thể dùng các lệnh tácđộng bit để tác động riêng rẽ lên từng bit mà không làm ảnh hưởng đến giá trịcác bit khác Cờ ngắt hoạt động độc lập với việc cho phép ngắt, điều đó có nghĩalà cờ ngắt sẽ tự động đặt lên bằng 1 khi có sự kiện gây ngắt xảy ra, bất kể sự kiện

đó có được cho phép ngắt hay không Do vậy, trước khi cho phép một ngắt, tanên xóa cờ của ngắt đó để đảm bảo sau khi cho phép, các sự kiện gây ngắt trongquá khứ không thể gây ngắt nữa Ví dụ trước khi cho phép ngắt timer 0 mà timer

0 đã chạy và tràn (dù là tràn một hay nhiều lần) thì cờ TF0 sẽ bằng 1, nếu sau đó

ta cho phép ngắt timer 0 thì sẽ gây ra ngắt ngay do cờ tràn đang bằng 1 (sự kiệntràn gây ngắt trong trường hợp này là tràn trong quá khứ, không phải sự kiện taquan tâm đến) Vì vậy hãy xóa cờ TF0 trước khi cho phép ngắt tràn timer 0.Ngoại trừ cờ của của ngắt nối tiếp (và cờ của ngắt timer 2 trong 8052), các cờngắt khác đều tự động được xóa khi CPU thực hiện chương trình phục vụ ngắt

Lý do là ngắt cổng nối tiếp (và ngắt timer 2 trong 8052) được gây ra bởi 2nguyên nhân (có 2 cờ cho mỗi ngắt), khi xảy ra ngắt, người lập trình cần phải

Trang 23

kiểm tra xem cờ nào được đặt bằng 1 để phân biệt nguyên nhân gây ra ngắt đó lànguyên nhân nào để xử lý thích hợp Ví dụ ngắt cổng nối tiếp là ngắt được gây rabởi 1 trong 2 nguyên nhân: vi điều khiển nhận xong hoặc truyền xong một byte

dữ liệu qua cổng nối tiếp Xảy ra sự kiện nào thì cờ ngắt tương ứng sẽ tự độngđược đặt lên bằng 1, nếu nhận xong thì cờ RI bằng 1, nếu truyền xong thì cờ TIbằng 1 Trong chương trình xử lý ngắt, người lập trình phải kiểm tra cờ TI hay cờ

RI bằng 1 để quyết định xử lý ngắt truyền hay xử lý ngắt nhận Sau khi kiểm tra,người lập trình phải viết lệnh xóa cờ đó vì việc này không được CPU thực hiện

tự động như các cờ ngắt khác

Nói đến ngắt không thể không nói đến mức ưu tiên của ngắt Mức ưu tiêncủa ngắt ở đây có thể được hiểu là sự phân bậc, quyết định xử lý ngắt nào khi haihay nhiều ngắt xảy ra Có 2 cơ chế phân bậc ưu tiên Thứ nhất là cơ chế phân bậcdành cho các ngắt xảy ra đồng thời, hai ngắt A và B xảy ra cùng một thời điểmnhìn từ phía vi điều khiển Thứ hai là cơ chế phân bậc dành cho các ngắt xảy raxen kẽ nhau, trong khi đang xử lý ngắt A thì ngắt B xảy ra, vậy thì trong từngtrường hợp, CPU sẽ xử lý ra sao

Với trường hợp các ngắt xảy ra đồng thời, CPU sẽ xem xét mức ưu tiêncủa các ngắt đó, từ đó quyết định xử lý ngắt có mức ưu tiên cao hơn trước Mức

ưu tiên trong trường hợp này là mức ưu tiên cứng (được quy định bởi nhà sảnxuất, bởi cấu trúc sẵn có của 8051 và người lập trình không thể thay đổi được)

Bảng 1.9: Mức ưu tiên ngắt

Trang 24

Nhìn vào bảng trên ta thấy ngắt INT0 là ngắt có mức ưu tiên cao nhất vàngắt timer 2 là ngắt có mức ưu tiên thấp nhất trong số các ngắt Như vậy nếu ngắtngoài 1 và ngắt timer 0 cùng xảy ra một lúc, ngắt timer 0 sẽ được CPU xử lýtrước, sau đó mới xử lý ngắt ngoài 1 Với trường hợp xảy ra ngắt xen kẽ, khiCPU đang xử lý ngắt A mà ngắt B xảy ra, CPU sẽ giải quyết theo 2 hướng: tiếptục xử lý ngắt A nếu mức ưu tiên của ngắt B không cao hơn mức ưu tiên của ngắt

A, hoặc sẽ dừng việc xử lý ngắt A lại, chuyển sang xử lý ngắt B nếu mức ưu tiêncủa ngắt B cao hơn mức ưu tiên của ngắt A Mức ưu tiên cho các ngắt trongtrường hợp này không phải là mức ưu tiên cứng do nhà sản xuất quy định (tức làkhông căn cứ vào bảng trên) mà là do người lập trình đặt Lập trình viên có thểdùng thanh ghi IP để quy định mức ưu tiên cho các ngắt ở một trong hai mức:mức cao và mức thấp Để đặt mức ưu tiên của một ngắt (trong trường hợp xảy raxen kẽ) ở mức cao, ta đặt bit tương ứng với ngắt đó trong thanh ghi IP bằng 1,mức thấp ứng với giá trị bit = 0

Hình 1.7: Thanh ghi IP

Các bit trong thanh ghi IP tương ứng với các ngắt đúng như trong thanhghi IE (bit PX0 dành cho ngắt ngoài 0, bit PT0 dành cho ngắt timer 0…)

Một điều dễ nhận ra là nếu một ngắt được đặt mức ưu tiên cao (bit tươngứng trong thanh ghi IP bằng 1) thì sẽ chẳng có ngắt nào có thể xen vào quá trình

xử lý nó được nữa Nói về mức ưu tiên ngắt, có thể dùng một ví dụ tổng quát sau,giả sử hai ngắt timer 0 và ngắt cổng nối tiếp cùng được cho phép (các bit tươngứng và bit EA trong thanh ghi IE được đặt bằng 1), bit PT0 = 0, bit PS = 1 thì:

• Nếu hai ngắt cùng xảy ra, ngắt timer 0 sẽ thắng thế và được phục vụ trước

• Nếu ngắt cổng nối tiếp xảy ra trước và đang được xử lý thì ngắt timer 0nếu có xảy ra cũng không thể chen vào, làm dừng quá trình xử lý ngắtcổng nối tiếp được

Trang 25

• Nếu ngắt timer 0 xảy ra trước và đang được xử lý mà ngắt cổng nối tiếpxảy ra thì CPU sẽ phải dừng việc xử lý ngắt timer 0 lại, chuyển sang xử lýngắt cổng nối tiếp, xử lý xong mới quay lại xử lý tiếp ngắt timer 0

Như đã nói ở trên 8051 có 2 ngắt ngoài là INT0 và INT1 Ngắt ngoài đượchiểu là ngắt được gây ra bởi sự kiện mức lôgic 0 (mức điện áp thấp, gần 0V)hoặc sườn xuống (sự chuyển mức điện áp từ mức cao về mức thấp) xảy ra ở chânngắt tương ứng (P3.2 với ngắt ngoài 0 và P3.3 với ngắt ngoài 1) Việc lựa chọnkiểu ngắt được thực hiện bằng các bit IT (Interrupt Type) nằm trong thanh ghiTCON Đây là thanh ghi điều khiển timer nhưng 4 bit LSB (bit0…3) được dùngcho các ngắt ngoài

Hình 1.8: Thanh ghi ngắt

Khi bit ITx = 1 thì ngắt ngoài tương ứng được chọn kiểu là ngắt theo sườnxuống, ngược lại nếu bit ITx = 0 thì ngắt ngoài tương ứng được sẽ có kiểu ngắt làngắt theo mức thấp Các bit IE là các bit cờ ngắt ngoài, chỉ có tác dụng trongtrường hợp kiểu ngắt được chọn là ngắt theo sườn xuống Khi kiểu ngắt theosườn xuống được chọn thì ngắt sẽ xảy ra duy nhất một lần khi có sườn xuống củatín hiệu, sau đó khi tín hiệu ở mức thấp, hoặc có sườn lên, hoặc ở mức cao thìcũng không có ngắt xảy ra nữa cho đến khi có sườn xuống tiếp theo Cờ ngắt IE

sẽ dựng lên khi có sườn xuống và tự động bị xóa khi CPU bắt đầu xử lý ngắt Khikiểu ngắt theo mức thấp được chọn thì ngắt sẽ xảy ra bất cứ khi nào tín hiệu tạichân ngắt ở mức thấp Nếu sau khi xử lý xong ngắt mà tín hiệu vẫn ở mức thấpthì lại ngắt tiếp, cứ như vậy cho đến khi xử lý xong ngắt lần thứ n, tín hiệu đã lênmức cao rồi thì thôi không ngắt nữa Cờ ngắt IE trong trường hợp này không có ýnghĩa gì cả Thông thường kiểu ngắt hay được chọn là ngắt theo sườn xuống

1.2.8 Bộ định thời/Bộ đếm (Timer/Counter)

8051 có 2 timer tên là timer 0 và timer 1 Các timer này đều là timer 16

Trang 26

Hai timer có nguyên lý hoạt động hoàn toàn giống nhau và độc lập Saukhi cho phép chạy, mỗi khi có thêm một xung tại đầu vào đếm, giá trị của timer

sẽ tự động được tăng lên 1 đơn vị, cứ như vậy cho đến khi giá trị tăng lên vượtquá giá trị max mà thanh ghi đếm có thể biểu diễn thì giá trị đếm lại được đưa trởvề giá trị min (thông thường min = 0) Sự kiện này được hiểu là sự kiện tràntimer (overflow) và có thể gây ra ngắt nếu ngắt tràn timer được cho phép (bitETx trong thanh ghi IE = 1) Việc cho timer chạy/dừng được thực hiện bởi cácbit TR trong thanh ghi TCON (đánh địa chỉ đến từng bit)

Khi bit TRx = 1, timer x sẽ đếm, ngược lại khi TRx = 0, timer x sẽ khôngđếm mặc dù vẫn có xung đưa vào Khi dừng không đếm, giá trị của timer đượcgiữ nguyên Các bit TFx là các cờ báo tràn timer, khi sự kiện tràn timer xảy ra,

cờ sẽ được tự động đặt lên bằng 1 và nếu ngắt tràn timer được cho phép, ngắt sẽxảy ra Khi CPU xử lý ngắt tràn timer x, cờ ngắt TFx tương ứng sẽ tự động đượcxóa về 0

Giá trị đếm 16 bit của timer x được lưu trong hai thanh ghi THx (byte cao)và TLx (byte thấp) Hai thanh ghi này có thể ghi/đọc được bất kỳ lúc nào Tuynhiên nhà sản xuất khuyến cáo rằng nên dừng timer (cho bit TRx = 0) trước khighi/đọc các thanh ghi chứa giá trị đếm

Các timer có thể hoạt động theo nhiều chế độ, được quy định bởi các bittrong thanh ghi TMOD (không đánh địa chỉ đến từng bit)

Hình 1.9: Thanh ghi TMOD

Để xác định thời gian, người ta chọn nguồn xung nhịp (clock) đưa vàođếm trong timer là xung nhịp bên trong (dành cho CPU) Nguồn xung nhịp nàythường rất đều đặn (có tần số ổn định), do đó từ số đếm của timer người ta có thểnhân với chu kỳ xung nhịp để tính ra thời gian trôi qua Timer lúc này được gọichính xác với cái tên “timer”, tức bộ định thời

Trang 27

Để đếm các sự kiện bên ngoài, người ta chọn nguồn xung nhịp đưa vàođếm trong timer là tín hiệu từ bên ngoài (đã được chuẩn hóa về dạng xung vuông0V/5V) Các tín hiệu này sẽ được nối với các bit cổng có dồn kênh thêm các tínhnăng T0/T1/T2 Khi có sự kiện bên ngoài gây ra thay đổi mức xung ở đầu vàođếm, timer sẽ tự động tăng lên 1 đơn vị giống như trường hợp đếm xung nhịpbên trong Lúc này, timer được gọi chính xác với cái tên khác: “counter”, tức bộđếm (sự kiện)

Nhìn vào bảng mô tả thanh ghi TMOD bên trên, ta có thể nhận thấy có 2

bộ 4 bit giống nhau (gồm GATEx, C/Tx, Mx0 và Mx1) dành cho 2 timer 0 và 1

Ý nghĩa các bit là như nhau đối với mỗi timer

Bit GATEx quy định việc cho phép timer đếm (run timer) Nếu GATEx =

0, timer x sẽ đếm khi bit TRx bằng 1, dừng khi bit TRx bằng 0 Nếu GATEx = 1,timer x sẽ chỉ đếm khi bit TRx = 1 và tín hiệu tại chân INTx = 1, dừng khi mộttrong hai điều kiện trên không còn thỏa mãn Thông thường người ta dùng timervới GATE = 0, chỉ dùng timer với GATE = 1 trong trường hợp muốn đo độ rộngxung vì lúc đó timer sẽ chỉ đếm thời gian khi xung đưa vào chân INTx ở mứccao

Bit C/Tx quy định nguồn clock đưa vào đếm trong timer Nếu C/Tx = 0,timer sẽ được cấu hình là bộ định thời, nếu C/Tx = 1, timer sẽ được cấu hình là

bộ đếm sự kiện Hai bit còn lại (Mx0 và Mx1) tạo ra 4 tổ hợp các giá trị (00, 01,

10 và 11) ứng với 4 chế độ hoạt động khác nhau của timer x Trong 4 chế độ đóthường chỉ dùng chế độ timer/counter 16 bit (Mx1 = 0, Mx0 = 1) và chế độ AutoReload 8 bit timer/counter (Mx1 = 1, Mx0 = 0)

Trong chế độ timer/counter 16 bit, giá trị đếm (chứa trong hai thanh ghiTHx và TLx) tự động được tăng lên 1 đơn vị mỗi lần nhận được thêm một xungnhịp Khi giá trị đếm tăng vượt quá giá trịmax = 65535 thì sẽ tràn về 0, cờngắtTFx được tự động đặt = 1 Chế độ này được dùng trong các ứng dụng đếm thờigian và đếm sự kiện

Trang 28

Trong chế độ Auto Reload 8 bit, giá trị đếm sẽ chỉ được chứa trong thanhghi TLx, còn giá trị của thanh ghi THx bằng một số (từ 0 đến 255) do người lậptrình đưa vào Khi có thêm 1 xung nhịp, giá trị đếm trong TLx đương nhiên cũngtăng lên 1 đơn vị như bình thường Tuy nhiên trong trường hợp này, giá trị đếmlớn nhất là 255 chứ không phải 65535 như trường hợp trên vì timer/counter chỉcòn 8 bit Do vậy sự kiện tràn lúc này xảy ra nhanh hơn, chỉ cần vượt quá 255 làgiá trị đếm sẽ tràn Cờ ngắt TFx vẫn được tự động đặt = 1 như trong trường hợptràn 16 bit Điểm khác biệt là thay vì tràn về 0, giá trị THx sẽ được tự động nạplại (Auto Reload) vào thanh ghi TLx, do đó timer/counter sau khi tràn sẽcó giátrị bằng n (giá trị chứa trong THx) và sẽ đếm từ giá trị n trở đi Chế độ này đượcdùng trong việc tạo Baud rate cho truyền thông qua cổng nối tiếp.

Để sử dụng timer của 8051, hãy thực hiện các bước sau:

• Quy định chế độ hoạt động cho timer bằng cách tính toán và ghi giá trịcho các bit trong thanh ghi TMOD

• Ghi giá trị đếm khởi đầu mong muốn vào 2 thanh ghi đếm THx và TLx.Đôi khi ta không muốn timer/counter bắt đầu đếm từ 0 mà từ một giá trịnào đó để thời điểm tràn gần hơn, hoặc chẵn hơn trong tính toán sau này

Ví dụ nếu cho timer đếm từ 15535 thì sau 50000 xung nhịp (tức 50000micro giây với thạch anh 12MHz) timer sẽ tràn, và thời gian một giây cóthể dễ dàng tính ra khá chính xác = 20 lần tràn của timer (đương nhiênmỗi lần tràn lại phải nạp lại giá trị 15535)

• Đặt mức ưu tiên ngắt và cho phép ngắt tràn timer (nếu muốn)

• Dùng bit TRx trong thanh ghi TCON để cho timer chạy hay dừng theo ýmuốn

Trang 29

1.3 Vi điều khiển AT89S52

1.3.1 Giới thiệu tổng quan về vi điều khiển AT89S52

 Hình ảnh thực tế:

Hình 1.10: Hình ảnh thực tế IC AT89S52

AT89S52 là họ vi điều khiển do hãng Atmel sản xuất Các sảnphẩm AT89S52 thích hợp cho những ứng dụng điều khiển Việc xử lýtrên byte và các phép toán số học ở cấu trúc dữ liệu nhỏ được thực hiệnbằng nhiều chế độ truy xuất dữ liệu nhanh trên RAM nội Tập lệnhcung cấp một bảng tiện dụng những lệnh số học 8 bit gồm cả lệnh nhânvà lệnh chia Nó cung cấp những hỗ trợ mở rộng trên chip dùng chonhững biến một bit như là kiểu dữ liệu riêng biệt cho phép quản lý vàkiểm tra trực tiếp trong hệ thống điều khiển

AT89S52 cung cấp những đặc tính chuẩn như: 8Kbyte bộ nhớ chỉđọc có thể xóa và lập trình nhanh (EPROM), 128 Kbyte RAM, 32đường I/O, 3 TIMER/COUNTER 16 Bit, 5 vector ngắt có cấu trúc 2mức ngắt, 1 Port nối tiếp bán song công, 1 mạch dao động tạo xungClock và bộ dao động ON-CHIP

 Các đặc điểm của chip AT89S52 được tóm tắt như sau:

 8Kbyte bộ nhớ có thể lập trình nhanh, có khả năng tới 1000chu kỳ ghi/xóa

 Tần số hoạt động từ: 0Hz đến 33MHz

Trang 30

 3 bộ Timer/Counter 16 Bit.

 128 Byte RAM nội

 4 Port xuất/nhập I/O 8bit

 Giao tiếp nối tiếp

 64KB vùng nhớ mã ngoài

 64KB vùng nhớ dữ liệu ngoại

 4µs cho hoạt động nhân hoặc chia

 Sơ đồ khối vi điều khiển AT89S52:

Hình 1.11: Sơ đồ khối của AT89S52

1.3.2 Sơ đồ chân và chức năng của AT89S52

 Sơ đồ chân:

Trang 31

Hình 1.12: Sơ đồ chân AT89S52

Theo sơ đồ trên, AT89S52 có 40 chân, mỗi chân có chức năng như cácđường I/O (xuất nhập), trong đó 24 chân có công dụng kép, mỗi đường có thểhoạt động như một đường I/O hoặc như đường điều khiển hoặc như thành phầncủa bus điều khiển và bus dữ liệu

 Chức năng của các chân AT89S52:

 Port 0: từ chân 32 đến 39 ( P0.0 – P0.7) có hai chức năng:

Chức năng xuất/nhập: các chân này được dùng để nhận tín hiệu từ bênngoài vào để xử lí, hoặc dùng để xuất tín hiệu ra bên ngoài, chẳng hạn xuất tínhiệu để điều khiển led đơn sáng tắt

Chức năng là bus dữ liệu và bus địa chỉ (AD7-AD0): 8 chân này (hoặcPort 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ốivới bộ nhớ ngoài), đồng thời Port 0 còn được dùng để định địa chỉ của bộ nhớngoài

 Port 1 (P1.0 – P1.7): là port I/O dùng cho giao tiếp với thiết bị bên ngoài

nếu cần

 Port 2 (P2.0 - P2.7): Là một port có công dụng kép, là đường xuất nhập

Trang 32

 Port 3 (P3.0 – P3.7): Mỗi chân trên Port 3 ngoài chức năng xuất nhập còn

có chức năng riêng, cụ thể như sau :

P3.0 - RxD: Ngõ vào nhận dữ liệu nối tiếp

P3.1 - TxD: Ngõ xuất dữ liệu nối tiếp

P3.2 - INT0: Ngõ vào ngắt cứng thứ 0

P3.3 - INT1: Ngõ vào ngắt cứng thứ 1

P3.4 - T0: Ngõ vào của Timer/Counter thứ 0

P3.5 - T1: Ngõ vào của Timer/Counter thứ 1

P3.6 - WR: Tín hiệu ghi dữ liệu lên bộ nhớ ngoài

P3.7 - RD: Tín hiệu đọc dữ liệu từ bộ nhớ bên ngoài

 Chân PSEN ( Program store Enable):

PSEN là chân điều khiển đọc chương trình ở bộ nhớ ngoài, nó được nối vớichân OE để cho phép đọc các byte mã lệnh trên ROM ngoài PSEN sẽ ở mứcthấp trong thời gian đọc mã lệnh Mã lệnh được đọc từ bộ nhớ ngoài qua bus dữliệu (Port 0) thanh ghi lệnh để được giải mã Khi thực hiện chương trình trongROM nội thì PSEN ở mức cao

 Chân ALE (Address Latch Enable):

Khi Vi điều khiển truy xuất bộ nhớ từ bên ngoài, port 0 vừa có chức nănglà 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ệuvà địa chỉ Tín hiệu ở chân ALE dùng làm tín hiệu điều khiển để giải đa hợp cácđường địa chỉ và các đường dữ liệu khi kết nối chúng với IC chốt Các xung tínhiệu ALE có tốc độ bằng 1/6 lần tần số dao động đưa vào Vi điều khiển, như vậy

có thể dùng tín hiệu ở ngõ ra ALE làm xung clock cung cấp cho các phần kháccủa hệ thống

 Chân EA (External Access):

Tín hiệu EA cho phép chọn bộ nhớ chương trình là bộ nhớ trong hayngoài vi điều khiển Nếu EA ở mức cao (nối với vcc), thì vi điều khiển thi hànhchương trình trong ROM nội Nếu EA ở mức thấp (nối với GND), thì vi điềukhiển thi hành chương trình từ bộ nhớ ngoài

 RST (Reset):

Trang 33

Ngõ vào RST trên chân 9 là ngõ Reset của 89S52 Khi tín hiệu này đượcđưa lên mức cao, các thanh ghi trong bộ vi điều khiển được tải những giá trị thíchhợp để khởi động hệ thống.

 XTAL1, XTAL2:

AT89S52 có một bộ dao động trên chíp, nó thường được nối với với bộdao động bằng thạch anh có tần số lớn nhất là 33MHz, thông thường là 12MHz

1.3.3 Tổ chức bộ nhớ bên trong AT89S52

Bộ nhớ trong 89S52 bao gồm ROM và RAM RAM trong 89S52 bao gồmnhiều thành phần: phần lưu trữ đa dụng, phần lưu trữ địa chỉ hóa từng bit, cácbank thanh ghi và các thanh ghi chức năng đặc biệt

AT89S52 có bộ nhớ được tổ chức theo cấu trúc Harvard: có những vùng

bộ nhớ riêng biệt cho chương trình và dữ liệu Chương trình và dữ liệu có thểchứa bên trong 89S52 nhưng 89S52 vẫn có thể kết nối với 64Kbyte bộ nhớchương trình và 64Kbyte dũ liệu ngoài

RAM bên trong AT89S52 được phân chia như sau:

•Các bank thanh ghi có địa chỉ từ 00H đến 1FH

•RAM địa chỉ hóa từng bit có địa chỉ từ 20H đến 2FH

•RAM đa dụng từ 3FH đến 7FH

•Các thanh ghi chức năng đặc biệt từ 8FH đến FFH

RAM đa dụng: có địa chỉ từ 30H - 7FH có thể truy xuất mỗi lần 8bit

bằng cách dùng chế độ định địa chỉ trực tiếp hay gián tiếp Các vùng từ 00H –2FH cũng có thể sử dụng cho mục đích như trên, ngoài các chức năng đặc biệtđược đề cập ở phần sau

RAM có thể định địa chỉ: vùng địa chỉ từ 20H – 2FH gồm 16Byte có thể

thực hiện như vùng RAM đa dụng ( truy xuất mỗi lần 8 bit) hay thực hiện truyxuất mỗi lần 1 bit bằng các lệnh xử lý bit

Các bank thanh ghi: vùng địa chỉ 00H – 1FH được chia thành 4 bank

Trang 34

từ R0 – R7 Sau khi khởi động thì hệ thống bank 0 được chọn sử dụng Do có 4bank thanh ghi nên tại một thời điểm chỉ có 1 bank thanh ghi được truy xuất bởicác thanh ghi R0 – R7 Việc thay đổi bank thanh ghi được thực hiện thông quathanh ghi từ trạng thái chương trình ( PSW).

Các thanh ghi có chức năng đặc biệt: các thanh ghi trong 89S52 được

định dạng như một phần của RAM trên chip vì vậy mỗi thanh ghi sẽ có một địachỉ (ngoại trừ bộ đếm chương trình và thanh ghi lệnh vì các thanh ghi này hiếmkhi bị tác động trức tiếp) Cũng như R0 đến R7, 89S52 có 21 thanh ghi có chứcnăng đặc biệt (EFR: Special Function Register) ở vùng trên của RAM nội từ địachỉ 80H đến 0FFH

Sau đây là một vài thanh ghi chức năng đặc biệt thường được sử dụng:

- Thanh ghi từ trạng thái chương trình ( PSW: Program Status Word):

Trang 35

Bảng 1.10: Thanh ghi trạng thái chương trình PSW

Chức năng từng bit trạng thái chương trình:

- Cờ Carry CY (Carry Flag): Cờ nhớ thường nó được dùng cho các lệnh toánhọc: C-1 nếu phép toán cộng có sự tràn hoặc cho phép trừ có mượn và ngược lạiC=0 nếu cho phép toán cộng không tràn và phép trừ không có mượn

- Cờ Carry phụ AC (Auxiliary Carry Flag): Khi cộng những giá trị BCD, cờnhớ phụ AC được set nếu kết quả 4 bit thấp nằm trong phạm vi điều khiển 0AH-0FH Ngược lại AC=0

- Cờ 0 (Flag o): cò 0 là 1 bit đa dụng cho các ứng dụng của người dùng

- Những bit chọn bank thanh ghi truy xuất: RS1 và RS0 quyết định dãy thanhghi tích cực Chúng được xóa sau khi reset hệ thống và được thay đổi bởi phầnmềm khi cần thiết

- Tùy theo RS1, RS0 = 00, 01, 10, 11 sẽ được chọn Bank tích cực tương ứnglà Bank 0, Bank 1, Bank 2 và Bank 3

Trang 36

Bảng 1.11: Trạng thái các bit chương trình

- Thanh ghi TIMER:

Vi điều khiển 89S52 có 3 timer 16bit, mỗi timer có bốn cách làm việc.Người ta sử dụng các timer để: định khoảng thời gian, đếm sự kiện, tạo tốc độbaud cho port nối tiếp trong 89S52

Trong các ứng dụng định khoảng thời gian, người ta lập trình timer ở nhữngkhoả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 ngõ vào hoặc gửi sựkiện các ngõ ra Các ứng dụng khác có thể sử dụng việc tạo xung nhịp đều đặncủa timer để đo thời gian trôi qua giữa hai sự kiện (ví dụ đo độ rộng xung)

- Thanh ghi ngắt (interrupt):

Một ngắt xảy ra một điều kiện, một sự kiện mà nó gây ra treo tạm thờichương trình chính trong khi điều kiện đó được phục vụ bởi một chương trìnhkhác Các ngắt đóng một vai trò quan trọng trong thiết kế và cài đặt các ứng dụng

Trang 37

vi điều khiển Chúng cho phép hệ thống đáp ứng bất đồng bộ với một sự kiện vàgiải quyết sự kiện đó trong khi một chương trình khác đang thực thi.

Trang 38

CHƯƠNG 2: THIẾT KẾ HỆ THỐNG BỤC PHÁT BIỂU TỰ ĐỘNG

2.1 Ý tưởng thiết kế

Khi tham gia các hội nghị của trường hay theo dõi các buổi họp hội nghịtrên truyền hình em nhận thấy có một sự cố không mong muốn xảy ra ở cái bụcphát biểu dành cho các đại biểu lên đóng góp ý kiến Như chúng ta biết những cáibục phát biểu được tạo ra với một kích thước cố định đặt sẵn do vậy mà có một

sự cố xảy ra mà người phát biểu không mong muốn đó là chiều cao của bục phátbiểu so với chiều cao của người

Sở dĩ xảy ra điều này vì chiều cao của con người không giống nhau cóngười cao, người thấp do vậy mà với một cái bục phát biểu có chiều cao cố địnhthì với người vừa với chiều cao đó thì không có vấn đề nhưng với người cao hơnnhiều so với bục thì tạo ra một sự khó khăn cũng như mất đi sự trang trọng nhấtđịnh Đặc biệt là với người thấp hơn bục thì người đó còn có thể sẽ bị lọt thỏmtrong cái bục giảng thậm chí có thể không thể với lên được cái bục phát biểu.Như vậy vô tình sự cố nhỏ này sẽ mất đi sự trang trọng của buổi họp hay hộinghị đang diễn ra

Do vậy, bản thân em đã nghĩ ra một phương án để xử lý sự cố này, em có

ý tưởng thiết kế một bục phát biểu tự động phù hợp với tất cả mọi người, điềukhiển tự động hóa mà không cần sự điều khiển của con người

Cái bục phát biểu này sẽ tự động nâng hạ người phát biểu lên chiều caophù hợp với bục phát biểu mà không làm mất đi sự trang trọng của buổi hội nghị.Khi chúng ta bước lên bục thì tùy theo chiều cao của con người mà cái bục đứng

sẽ tự động nâng chúng ta đến chiều cao mong muốn rồi dừng lại và khi chúng taphát biểu xong bục đứng cũng sẽ tự động hạ để cho người phát biểu xuống Tất

cả các công việc này đều thực hiện một các tự động hóa nhờ một hệ thống cảmbiến đơn giản nhưng hiệu quả kết hợp với hệ thống cơ nâng Thành phần cụ thểcủa hệ thống em sẽ thể hiện trong các chương sau

Ngày đăng: 29/06/2016, 07:54

HÌNH ẢNH LIÊN QUAN

Hình 1.5: Sơ đồ mạch của các cổng - Thiết kế bục phát biểu tự động sử dụng AT89S52
i ̀nh 1.5: Sơ đồ mạch của các cổng (Trang 17)
Hình 1.11: Sơ đồ khối của AT89S52 - Thiết kế bục phát biểu tự động sử dụng AT89S52
i ̀nh 1.11: Sơ đồ khối của AT89S52 (Trang 30)
Hình 1.12: Sơ đồ chân AT89S52 - Thiết kế bục phát biểu tự động sử dụng AT89S52
i ̀nh 1.12: Sơ đồ chân AT89S52 (Trang 31)
3.2. Sơ đồ nguyên lý của mạch - Thiết kế bục phát biểu tự động sử dụng AT89S52
3.2. Sơ đồ nguyên lý của mạch (Trang 64)
Hình 3.7: Sơ đồ mạch in - Thiết kế bục phát biểu tự động sử dụng AT89S52
i ̀nh 3.7: Sơ đồ mạch in (Trang 72)

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w