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

sổ tay điện tử

105 348 0
Tài liệu được quét OCR, nội dung có thể không chính xác
Tài liệu đã được kiểm tra trùng lặp

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

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

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Sổ tay điện tử
Trường học Học Viện Công Nghệ Bưu Chính Viễn Thông
Thể loại Sổ tay hướng dẫn
Năm xuất bản 2023
Thành phố Hồ Chí Minh
Định dạng
Số trang 105
Dung lượng 4,38 MB

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

Nội dung

Ở 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.. Port 2: Port 2 là một po

Trang 1

BỘ GIÁO DỤC & ĐÀO TẠO TRƯỜNG ĐẠI HỌC DL KỸ THUẬT CÔNG NGHỆ TP.HCM

KHOA ĐIỆN - ĐIỆN TỬ NGÀNH ĐIỆN TỬ VIỄN THÔNG

Trang 2

LỜI NÓI ĐẦU

Trong giai đoạn hiện nay với sự phát triển của công nghệ điện tử, có nhiều loại

vi xử lý, vi điều khiển của nhiều hãng khác nhau ra đời và được ứng dụng trong thiết kế hệ thống

Đối với sinh viên ngành điện tử của chúng em, Vi Điều Khiển đã trở nên khá

gần gũi vì đã có học trong môn Vi Xử Lý Điều này có thể thấy được qua số lượng

lớn các để tài luận án từ trước đến nay đều liên quan ít nhiều đến Vi Điều Khiển

và Vi Xử Lý Trong thực tế ở nước ta hiện nay, việc ứng dụng họ vi điều khiển

AT89C51 của hãng ATMEL là rất phổ biến

Thời gian là một trong những thứ quí giá của con người Để sử dụng thời gian

hợp lý để đạt được tất cả những gì mình muốn trong công việc cũng như gia đình

Từ đó thôi thúc em chọn để tài “Sổ Tay Điện Tử” để làm luận án tốt nghiệp, làm

ra một thiết bị nhắc nhở công việc và giúp quản lý thời gian tốt hơn Trong quá

trình thực hiện để tài, em đã gặp không ít những vấn để trong thiết kế, thi công

mạch nhưng nhờ sự hướng dẫn nhiệt tình của giáo viên hướng dẫn - thạc sĩ Trần

Viết Thắng, đã giúp em hoàn thành tốt luận án tốt nghiệp này

Do trình độ còn hạn chế, kiến thức còn chưa thật vững vàng, cho nên trong quá trình thực hiện để tài em không tránh khỏi được thiếu sót và sai lầm Rất mong

nhận được sự nhận xét đánh giá, góp ý của thầy cô và các bạn Em xin chân thành cảm ơn

Trường Đại Học Dân Lập Kỹ Thuật Công Nghệ

Sinh viên thực hiện luận văn

Nguyễn Quốc Toàn

Trang 3

HI ˆ PHƯƠNG ÁN THỰC HIỆN ĐỀ TÀI

PHANB: KIẾN THỨC CƠ SỞ

Chương I: GIỚI THIỆU VI ĐIỀU KHIỂN AT89C51

I Đặc điểm vi điều khiển 89C51 - Ă Ăcseseererreerree 9

Il So dé va chức năng từng chân của 89C51 - 5< <<<2 10

II Tổ chức bộ nhớ 5- << <sErexerkerEE41802114 01.4 1aArrre 13

IV Các thanh ghi chức năng đặc biệt se 17

MWT 5 21

VI Hoạt động của bộ định thời - - Q- À Ă Ăn n4 me, 23

M' G11 ) 29

VHI Hoạt động của port nối tiếp Á Ăn neeeerere 35

Chương II: GIỚI THIỆU MODULE LCD

I Cấu trúc phần cứng của module LCD «5s <<<2 41

TI Mã lệnh điều khiển của LCD - - 55 << ss se <sssssgszseexe 44

Chương III: GIGI THIEU DS1307

T, GiGi thi@u c cc cccccessscecccesessnececcessscsceeeessnecessssccersssseseusaaseees 50

HI Hoạt động của DS1307 G0 ng gge 52

Chương IV: GIỚI THIỆU ADC0804

In 59

IN t1) 7104.155 59

Trang 4

PHẲNC: THIẾT KẾ VÀ THI CONG

Chương I: THIẾT KẾ PHẦN CỨNG

I Sơ đổ khối hệ thống + ttttEEEEEEEEEEEEEEEEAEAE.eveeerrrrrrrr 60

H Nguyên lý hoạt động của hệ thống -scceeeeee 61

HI Khối xử lý trung tâm - - 5< Ăn He eeeerren 62

IV Khối giao tiếp máy tính - Ăn rceg 64

VI Khối cảm biến và chuyển đổi ADC -.- c<c<esesee 65

VH Khối thời gian thực - - 5< SH ng rnsrke 67

VI Khối lưu trữ đữ liệu .- ĂSSĂĂSsSeeeeesee 68

* Các nút nhấn - Ă G5 «SH ng ng 07 70

Sodd ) nguyên lý mạch hoàn chỉnh re 71

Chương m THIẾT KẾ PHẦN MEM

I Lưu đồ thuật giải của chương trình chính <2 72

H Lưu đồ thuật giải của chương trình phục vụ ngắt cổng nối tiếp 73

HI Lưu đồ thuật giải của chương trình con kiểm tra giờ hẹn 75

IV Lưu đồ giải thuật ghi dữ liệu vào DS137 - 76

V Lưu đô giải thuật đọc dữ liệu từ DS1307 <- 77

VI Lưu đô giải thuật ghi dữ liệu vào 24C64 - 78

VH.' Lưu đồ giải thuật đọc đữ liệu vào 24C64 - ©-<<- 79

VIII Luu dé gidi thuật đo nhiệt độ và hiển thị lên LCD 80

IX Lưu đồ chương trình con thiết lập trạng thái ban đầu cho LCD 81

X Lưu đỗ giải thuật xử lý các phím nhấn hiệu chỉnh thời gian 82

XI Lưu đồ chương trình cập nhật giờ cài đặt - 83

XII Các chương trình con - HH HH1 18835n 894 84

Trang 5

Phần A: Giới thiệu đề tài

PHẦN A: GIỚI THIỆU ĐỀ TÀI

I DAT VAN DE:

Đất nước ta đang không ngừng đổi mới từng ngày, từ một nước nông nghiệp

chuyển sang phát triển theo hướng công nghiệp hóa, hiện đại hóa nhằm theo kịp

và hòa nhịp với xu hướng phát triển của thế giới Sự phát triển kinh tế kéo theo sự

phát triển mọi mặt của xã hội, đời sống vật chất và tinh thần của nhân dân được

nâng lên một mức đáng kể Nhưng cũng đòi hỏi mọi người phải làm việc nhiễu và

nhiều việc hơn và do đó việc quản lý thời gian là cần thiết hơn bao giờ hết

“Sổ tay điện tử” được thiết kế để thay thế con người quản lý thực hiện báo giờ nhắc việc tự động khi đến thời điểm hẹn trước Ngoài ra hệ thống này cũng có

thể ứng dụng ở nhiều nơi khác như công sở, trường học, hồ bơi,

II MỤC ĐÍCH CỦA ĐỀ TÀI:

Đề tài có nhiệm vụ thiết kế và thi công mạch “Sổ tay điện tử” gồm 2 phần:

phần mạch điện tử với màn hình hiển thị LCD và chương trình giao diện người sử dụng trên máy tính

Mạch điện tử với màn hình hiển thị LCD: bao gồm các chức năng sau

- _ Hiển thị thời gian: giờ, phút, giây, ngày, tháng, năm

- _ Hiển thị nhiệt độ môi trường

- _ Có khả năng giao tiếp với máy tính để nhận đữ liệu

- _ Có khả năng lưu trữ những thong tin cài đặt trước đó kể cả khi mất nguồn

- _ Thời gian vẫn chạy đúng khi được cấp nguồn lại sau khi mất nguồn

Chương trình giao diện người sử dụng: được viết bằng ngôn ngữ lập trình Visual

Basic, chương trình cho phép người sử dụng cài đặt các thời điểm xuất hiện các

thông báo nhắc nhở công việc trong tương lai

II PHƯƠNG ÁN THỰC HIỆN ĐỀ TÀI:

Để làm khối đông hồ đếm thời gian có hai phương án:

Phương án 1:

Dùng chính bộ dao động vi điểu khiển tạo xung đếm thời gian Các thông số cài đặt cho đồng hồ như giờ, phút, giây, giờ báo thực hiện thông qua phím nhấn và được lưu trữ trực tiếp trên RAM của vi điêu khiển 89C51

Ưu điểm của hệ thống này là đơn giản, ít tốn kém, nên giá thành thấp Nhược điểm của hệ thống là nếu mất nguồn thì phải cài đặt lại từ đầu các thông số, không

hiển thị ngày, tháng Mặc dù có thể cải tiến bằng cách dùng nguồn pin dự phòng cho vi điều khiển nhưng độ ổn định của hệ thống không cao và kém linh hoạt Và

mức độ chính xác của thời gian là thấp, phụ thuộc nhiều vào khả năng lập trình của người thiết kế

Trang 6

Phần A: Giới thiệu đề tài

Phương án 2:

Dùng IC thời gian chuyên dụng để đếm thời gian Hệ thống có thể hiển thị giờ,

phút, giây, thứ, ngày, tháng, năm Nhiệm vụ của vi điểu khiển là lấy dữ liệu thời

gian để hiển thị ra bên ngoài, so sánh thời gian hiện tại và thời gian cần nhắc việc, giao tiếp với máy tính để nhận dữ liệu

Nhược điểm của hệ thống này là phức tạp hơn phương án 1 vì phải dùng thêm

IC thời gian chuyên dụng Giá thành của sản phẩm sẽ tăng Tuy nhiên với IC thời

gian này, ta có thể khắc phục được những nhược điểm của hệ thống trước Vì sử

dụng IC thời gian chuyên dụng nên mức độ sai số của thời gian là thấp do đã được nhà sản xuất nghiên cứu và khắc phục Ngoài ra sau khi bị mất nguồn, hệ thống

vẫn hoạt động trở lại bình thường khi có điện vì IC thời gian vẫn hoạt động nhờ vào nguồn pin 3V khi nguồn bên ngoài bị tắt

Từ những nhận định trên, em đã quyết định chọn phương án 2 để thực hiện

để tài luận án tốt nghiệp của em

Trang 7

Phần B: Kiến thức cơ sở Chương I: Giới thiệu vi điều khiển AT89C51

a

PHAN B: KIEN THUC CO SO

CHUONG I: GIGI THIEU TOM TAT VI DIEU KHIEN AT89C51

I ĐẶC ĐIỂM VI DIEU KHIEN 89C51:

89C51 1a mét IC vi diéu khién (Microcontroller) do hang Intel san xudt N6 cé

các đặc điểm sau:

ROM nội: 4K EEPROM

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

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

210 bit được địa chỉ hóa (nằm trong vùng RAM nội)

Bộ nhân/chia 4 ps

INTI INTOV’

PORT nối tiếp

TIMER

YVVVYÝ Rom i T,* 1

Diéu Các thanh 128 byte 4K-8051 Timer! Th*

Trang 8

Phần B: Kiến thức cơ sở Chương I: Giới thiệu vi điều khiển A T89C51

—————————>—>—>—>>>>mmmmm>maasnaaaaaanannnnsansnenenaeaearmn

Phần chính của vi điều khiển 89C51 là bộ xử lí trung tâm (CPU: Central Processing Unit) bao gồm:

e Thanh ghi tích lãy A

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

e Don vi logic hoc (ALU: Arithmetic Logical Unit)

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

e Bốn băng thanh ghi

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 (port 0, port 1, port 2, port 3) 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 ấn định bằng một bộ định thời

Trong vi điều khiển 89C51 có hai thành phần quan trọng khác đó là bộ nhớ và

các thanh ghi, trong đó:

e Bộ nhớ gồm có bộ nhớ RAM va ROM ding để lưu trữ dữ liệu và mã lệnh

e_ 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

II SƠ ĐỒ VÀ CHỨC NĂNG TỪNG CHÂN CỦA 89C51:

89C51 là 1 vi mạch có 40 chân mỗi chân có 1 chức năng đặc biệt khác nhau

Trong đó có 24 chân có công dụng kép, mỗi đường có thể hoạt động như đường

xuất nhập hoặc như đường điều khiển hoặc là thành phần của bus dữ liệu và bus

địa chỉ

Trang 9

Phần B: Kiến thức cơ sở Chương I: Giới thiệu vi điều khiển A T89C51

VCC U2 S iø-| P37/BD 9 P20/A8 +55 Te] P3.6/WR > P2.1/A9 [55

1 |P3.5T1 ~~ P2.2/A10 |-55 13-| P3.4/T0 _ P2.3/A11 [Øg 75] P3.3/INTL P2.4/A12 [38 777] P3.2/INTO P2.5/A13 [57

10 |P3.1TXD P2.6/A14 Fấg P3.0/RXD P2.7/A15

1 Port 0: Port 0 là một port hai chức năng trên các chân 32 — 39(P0.7, P0.6, )

Trong các thiết kế cỡ nhỏ (không dùng bộ nhớ mở rộng) nó có chức năng như các đường LO Đối với các thiết kế lớn với bộ nhớ mở rộng, nó vừa là byte thấp bus

địa chỉ và là bus dữ liệu 8 bit

2 Port 1: Port 1 là một port V/O trén chin 1 — 8 Cac chân được ký hiệu PI.0,

P1.1 c6 thé dùng cho giao tiếp với các thết bị ngoài nếu cần Port 1 không có chức năng khác, và vậy chúng chỉ dùng cho giao tiếp với các thiết bị ngoài hoặc

trao đổi dữ liệu với các hệ thống khác

3 Port 2: Port 2 là một port công dụng kép trên các chân 21- 28 được dùng như

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

mở rộng

4 Port 3: Port 3 là một port công dụng kép trên các chân 10 -17 Mỗi chân của port này vừa có chức năng trao đổi dữ liệu vừa có các chức năng đặc biệt như ở bảng sau:

Trang 11

Trang 10

Phần B: Kiến thức cơ sở Chương I: Giới thiệu vỉ điều khiển AT§9C51

P3.0 RXD Dữ liệu nhận cho port nối tiếp

P3.1 TXD Dữ liệu phát cho port nối tiếp

P3.4 T0 Ngõ vào của timer/couter 0

P3.5 Tl Ngõ vao cua timer/couter 1

P3.7 RD Xung đọc bộ nhớ dữ liệu ngoài

5 PSEN (Program Store Enabie): 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 byte mã lệnh

PSEN sẽ ở mức thấp trong thời gian lấy lệnh Các mã nhị phân của chương

trình được đọc từ EPROM qua bus dữ liệu và được chốt vào thành ghi lệnh của

89C51 để giải mã lệnh Khi thi hành chương trình trong ROM nội PSEN sẽ ở mức

thụ động (mức cao)

6 ALE (Address Latch Enable): Tin hiéu ra ALE trên chân 30 tương hợp với các thiết bị làm việc với vi xử lý 8080, 8085, 8088, 8086 89C51 dùng ALE một cách tương tự cho việc giải kênh các bus địa chỉ và dữ liệu, khi port 0 được dùng

trong chế độ chuyển đổi của nó: vừa là bus dữ liệu vừa là byte thấp của bus địa

chỉ, ALE là tín hiệu để chốt địa chỉ vào một thanh ghi bên ngoài trong nửa đầu của

chu kỳ bộ nhớ Sau đó, các đường port 0 dùng để xuất nhập đữ liệu trong nữa sau của chu kỳ 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àm nguồn xung nhịp cho các phần khác của hệ thống Chỉ ngoại trừ

khi thi hành lệnh MOVX, một xung ALE sẽ bị mất Chân này cũng được làm ngõ vào cho xung lập trình cho EPROM trong các loại có ROM nội

T EA (Externai Access):Tín hiệu vào EA trên chân 31 thường được mắc lên

mức cao (+5V) hoặc mức thấp (GND) Nếu ở mức cao, 89C51 thi hành chương trình từ ROM nội trong khoảng địa chỉ thấp (4K) Nếu ở mức thấp, chương trình chỉ được thi hành từ bộ nhớ mở rộng Nếu EA được nối mức thấp bộ nhớ bên trong

chương trình 89C51 sẽ bị cấm và chương trình thi hành từ EEPROM mở rộng

Người ta còn dùng EA làm chân cấp điện áp Vp khi lập trình cho ROM trong

8 RST (Rese£):Ngõ vào RST trên chân 9 là ngõ reset của 89C51 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 bên trong

89C51 được tải những giá trị thích hợp để khởi động hệ thống

9 Các ngõ vào bộ dao động trên chip: 89C51 có một bộ dao động trên chip

Nó thường được nối với một thạch anh giữa hai chân 18 và 19 Các tụ giữ cũng cần

thiết như đã vẽ Tần số thạch anh thông thường là 12Mhz

Trang 12

Trang 11

Phần B: Kiến thức cơ sở Chương I: Giới thiệu vi điều khiển AT89C51

rr

10 Các chân nguồn: 89C51 sử dụng nguồn đơn +5V Vcc được nói vào chân

40 và Vss (GND) được nối vào chân 20

II TỔ CHỨC BỘ NHỚ

89C51 có bộ nhớ theo cấu trúc Harvart: có những vùng bộ nhớ riêng biệt cho

chương trình và dữ liệu Như đã nói ở trên, cả chương trình và dữ liệu có thể ở bên

trong: dù vậy chúng có thể được mở rộng bằng các thành phân ngoài lên đến tối đa

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

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

gồm nhiều phần: phần lưu trữ đa dụng, phần lưu trữ địa chỉ hóa từng bit, các bank

thanh ghi và các thanh ghi chức năng đặc biệt

e Các thanh ghi và các phort xuất nhập đã được xếp trong bộ nhớ và có thể

được truy xuất trực tiếp giống như các địa chỉ bộ nhớ khác

e Ngăn xếp bên trong RAM nội nhỏ hơn so với RAM ngoài như trong các

bộ vi xử lý khác

RAM bên trong MCS51 được phân chia giữa các bank thanh ghi (00H - IFH),

RAM địa chỉ hóa từng bit (20H — 2FH), RAM da dụng (30H — 7FH) và các thanh

ghi chức năng đặc biệt (80H — FFH)

Trang 12

Địa chỉ byte Địa chi bit

7

RAM DA DUNG

30 2F\ 7F | 7E | 7D | 7c | 7B | 7A | 79 | 78 2E| 77 | 76 | 75 |74 | 73 | 72 | 71 | 70 2D/ 6F | 6E | 6D | 6c | 6B | 6A | 69 | 68 2C| 67 | 66 | 65 | 64 | 63 | 62 | 61 | 60 2B

5F |5E |ãD | 5c | 5B | SA | 59 | 58 2Al 57 |56 |55 |54 |53 {52 | 51 | 50 29| 4F |4D |4E 4B | 4A | 49 | 48 28] 47 | 46 | 45 | 44 | 43 | 42 | 41 | 40 27| 3F +| 3E | 3D )3c | 3B | 3A | 39 | 38

Trang 13

Phần B: Kiến thức cơ sở Chương I: Giới thiệu vi điều khiển AT89C51

Địa chỉ byte Dia chi bit

FF FO| F7 | F6 | FS | F4 | F3 | F2 | Fl

EQ| E7 [E6 | E5 | E4 | E3 | E2 JE] JEO| ACC

D |D7} D6] D5} D4 }D3 | D2] _ |DO| PSW

Bg} — | — | — | BC] BB|BA|B9 | B8 | yp

BO| B7 | B6 | BS | B4 | B3 | B2 | Bl | BO} p3

A8|AF] _ | — [AC]ABJAAJA9TA8] TR

AO} A7 } A6] AS | A4 | A3 | A2 | AL] A0} po

99 không được địa chỉ hóa bịt SBUF

98] OF | 9E | 9D] 9C | 9B] 9A | 99 | 98 | SCON

90} 97 | 96 | 95 | 94 193 | 92 191) 90] py

8D không được địa chỉ hóa bit THI

§C không được địa chỉ hóa bit TH0 8B không được địa chỉ hóa bit TL1 8A không được địa chỉ hóa bít TLO

89 khéng duge dja chi héa bit TMOD

88 | 8F | 8E | 8D] 8C | 8B] 8A | 89 | 88 | TCON

87 không được địa chỉ hóa bit PCON

83 không được địa chỉ hóa bịt DPH

82 không được địa chỉ hóa bit DPL

81 không được địa chỉ hóa bit SP

Mặc dù trên hình cho thấy 80 byte RAM đa dụng chiếm các địa chỉ từ 30H-

7FH, 32 byte đưới cùng từ 00H đến 1FH cũng có thể được dùng với mục đích tương

tự (mặc dù các địa chỉ này đã có mục đích khác)

Trang 15

Trang 14

Phần B: Kiến thức cơ sở Chương I: Giới thiệu vi điều khiển AT89C51

Mọi địa chỉ trong vùng RAM đa dụng đều có thể được truy xuất tự do dùng

cách đánh địa chỉ trực tiếp hay gián tiếp Ví dụ, để đọc nội dung ở địa chỉ 5FH của

RAM nội vào thanh ghi tích lũy lệnh sau sẽ được dùng:

MOV A, 5FH

Lệnh này đi chuyển một bit dữ liệu dù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 xác định trong mã lệnh

là thanh ghi tích lũy A

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

qua R0 hay R1 Ví dụ, sau khi thi hành cùng nhiệm vụ như lệnh đơn ở trên:

MOV RO, #5FH MOV A, @RO 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 lũy

2 RAM địa chỉ hóa từng bit:

89C51 chứa 210 bit được địa chỉ hóa, trong đó 128 bit là ở các địa chỉ byte 20H

đến 2FH và phân còn lại là trong các thanh ghi chức năng đặc biệt

Ý tưởng truy xuất từng bit riêng rẽ bằng phần mềm là một đặc tính tiện lợi của

vi điều khiển nói chung Các bit có thể được đặt, xóa, AND, OR, với một lệnh

đơn Đa số các vi xử lý đòi hỏi một chuỗi lệnh đọc — sửa — ghi để đạt được hiệu

ủatương tự Hơn nữa, các port LO cũng được địa chỉ hóa từng bit làm đơn giản

phần mềm xuất nhập từng bit

Có 128 bit được địa chỉ hóa đa dụng ở các byte 20H đến 2FH Các địa chỉ này

được truy xuất như các byte hoặc như các bit phụ thuộc vào lệnh được dùng

3 Các bank thanh ghi:

32 byte thấp nhất của bộ nhớ nội là đành cho các bank thanh hi Bộ lệnh của

8051/8031 hỗ trợ 8 thanh ghi (R0 đến R7) và theo mặc định (sau khi Reset hệ

thống) các thanh ghi này ở các địa chỉ 00H-07H

Bank thanh ghi tích cực có thể chuyển đổi bằng cách thay đổi các bit chon bank

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

Ý tưởng dùng “các bank thanh ghi” cho phép “chuyể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 bộ thanh ghi riêng

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

Trang 16

Trang 15

Phần B: Kiến thức cơ sở Chương I: Giới thiệu vi điều khiển AT89C51

TỌỌTỌTTTỌ0000000n00nn00000nnnnợợggnnngnnnggaaợaợyợgợng name

IV CÁC THANH GHI CHỨC NĂNG ĐẶC BIÊT

Các thanh ghi trong MCS51 đượ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 địa chỉ (ngoại trừ thanh ghi đếm chương trình và thanh ghi lệnh và các thanh ghi bày hiếm khi bị tác động trực tiếp, nên không có

lợi khi đặc chúng trong RAM trên chip) Cũng như R0 đến R7 có 21 thanh ghi chức

năng đặc biệt (SFR: Special Function Register) ở vùng trên RAM nội, từ địa chỉ

80H đến FFH Chú ý rằng hầu hết 128 địa chỉ tử 80H đến FFH không được định nghĩa Chỉ có 21 địa chỉ SER là được định nghĩa

Ngoại trừ thanh ghi tích lũy (A) có thể được truy xuất ngầm như đã nói, đa số

các SER được truy xuất dùng địa chỉ trực tiếp Chú ý rằng một vài SFR có thể được địa chỉ hóa bit hoặc byte Người thiết kế phải thận trọng trong truy xuất bit và byte

Ví dụ lệnh sau:

SETB 0E0H

sẽ set bit 0 trong thanh ghi tích lũy, các bit khác không thay đổi Ta thấy rằng E0H

đồng thời là địa chỉ byte của thanh ghi tích lũy và là địa chỉ bit có trọng số nhỏ nhất trong thanh ghi tích lũy Vì lệnh SETB chỉ tác động trên bit, nên chỉ có địa chỉ

bit là có hiệu quả

1 Từ trang thái chương trình:

Từ trạng thái chương trình (PSW: Program Status Word) ở địa chi DOH chita

các bit trạng thái như bảng tóm tắt sau:

10 = bank 2: dia chi 10H —- 17H

11 = bank 3: dia chi 18H — 1FH

PSW.0 P D0H Co parity chin

Trang 16

Phần B: Kiến thức cơ sở Chương I: Giới thiệu vi điều khiển AT89C51

* Cờ nhớ:

Cờ nhớ (CY) có công dụng kép Thông thường nó được dùng cho các lệnh toán học: nó 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 bởi phép trừ Ví dụ, nếu thanh ghi tích lũy chứa FFH, thì lệnh sau:

ADD A, #1

sẽ tra vé thanh ghi tich lily két qua 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 luận lý thi hành

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

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

* Các bit chon bank thanh ghi:

Các bit chọn bank thanh ghi (RS0 và RSI1) xác định bank thanh ghi được tích

cực Chúng được xóa sau khi reset hệ thống và được thay đổi bằng phần mềm nếu

cần Ví dụ, ba lệnh sau cho phép bank thanh ghi 3 và di chuyển nội dung của thanh

ghi R7 (địa chỉ byte 1FH) đến thanh ghi tích lũy:

SETB RSI 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 RSI sẽ giống như lệnh SETB 0D4H

* Cờ tràn:

Cờ tràn (OV) được set sau một lệnh cộng hoặc trừ nếu có một phép toán bị

tràn Khi các số có dấu được cộng hoặc trừ với nhau, phần mềm có thể kiểm tra bit

này để xác định xem kết quả có nằm trong tâm xác định không Khi các số không

dấu đượ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 bit OV

Trang 18

Trang 17

Phần B: Kiến thức cơ sở Chương I: Giới thiệu vi điều khiển AT89C51

rra-r-Ỷ- rzrs.-y-.ờơờơờơợơợơnnsnnïỶẳĩẳaa-ơsơẳ‹ơnănaazaasasasaranaanaananananaanaananaannnensennanoeem

2 Thanh ghi B:

Thanh ghi B 6 địa chỉ F0h được dùng cùng với thanh ghi tích lũy A cho các

phép toán nhân và chia Lệnh MUL AB sẽ nhân các giá trị không dấu 8 bit trong A

và B rồi trả về kết quả nguyên trong A va phan du trong B Thanh ghi B cũng có

thể được xem như thanh ghi đệm đa dụng Nó được địa chỉ hóa từng bit bằng các

địa chỉ bit F0H đến F7H

3 Con trồ ngăn xếp:

Con trỏ ngăn xếp (SP) là một thanh ghi 8 bit ở địa chỉ 81h Nó chứa địa chỉ của

byte dữ liệu hiện hành trên đỉnh của ngăn xếp Các lệnh trên ngăn xếp bao gồm

các thao tác cất đữ liệu vào ngăn xếp và lấy dữ liệu ra khỏi ngăn xếp Lệnh cất dữ

liệu vào ngăn xếp sẽ làm tang SP trước khi ghi đữ liệu, và lệnh lấy đữ liệu ra khỏi

ngăn xếp sẽ đọc dữ liệu và giảm SP Ngăn xếp của 8051/8031 được giữ trong

RAM nội và được giới hạn các địa chỉ có thể truy xuất bằng địa chỉ gián tiếp Chúng là 128 byte đầu của 89C51

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

MOV SP,#5FH

Trén 89C51 ngăn xếp bị giới hạn 32 byte vì địa chỉ cao nhất cla RAM trên

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

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

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

là ngăn xếp đầu tiên để cất dữ liệu có địa chỉ là 08H Nếu phần mềm ứng dụng

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

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

Ngăn xếp được truy xuất trực tiếp bằng các lệnh PUSH và POP để lưu trữ tạm

thời và lấy lại đữ liệu, hoặc được truy xuất ngầm bằng các lệnh gọi chương trình

con (ACALL, LCALL) và các lệnh trở về (RET, RETD để cất và lấy lại bộ đếm

chương trình

4 Con trỏ dữ liệu:

Con trỏ dữ liệu (DPTR) được dùng để truy xuất bộ nhớ ngoài là một thanh ghi

16 bit ở địa chỉ 82H (DPL: byte thấp) và 83H (DPH: byte cao) Ba lệnh sau sẽ ghi 55H vào RAM ngoài ở địa chỉ 1000H:

MOV A, #55H MOV DPTR, #1000H MOV @DPTR, A

Lệnh đầu tiên dùng địa chỉ tức thời để tải dữ liệu 55H vào thanh ghi tích lũy

Lệnh thứ hai cũng dùng địa chỉ tức thời, lần này để tải dữ liệu 16 bit 1000H vào

Trang 19

Trang 18

Phần B: Kiến thức cơ sở Chương I: Giới thiệu vỉ điều khiển AT89C51

a

con trỏ dữ liệu Lệnh thứ ba dùng địa chỉ gián tiếp để di chuyển dữ liệu trong A (55H) đến RAM ngoài ở địa chỉ được chứa trong DPTR (1000H)

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

Các port của 89C51 bao gồm Port 0 ở địa chỉ 80H, Port 1 ở địa chỉ 90H, Port 2 ở địa chỉ A0H và Port 3 ở địa chỉ B0H Tất cả các port đều được địa chỉ hóa từng bit

Điều đó cung cấp một khả năng giao tiếp thuận lợi Ví dụ nếu một motor được nối

qua một cuộn dây có transistor lái đến bit 7 của Port 1, nó có thể được bật và tắt

bằng một lệnh đơn:

SETB PI.7 ; bật motor

CLR PI.7 ; tắtmotor

Các lệnh trên dùng dấu chấm để xác định một bit trong một byte Trình hợp

dịch sẽ thi hành sự chuyển đổi cần thiết, vì vậy hai lệnh sau đây là như nhau:

CLR PI.7 CLR 97H Trong một ví dụ khác, xem xét giao tiếp đến một thiết bị với một bit trạng thái

gọi là BUSY, được set khi thiết bị đang bận và được xóa khi thiết bi sấn sàng Nếu BUSY được nối tới P1.5, vòng lặp sau sẽ được dùng để chờ thiết bị trở lai sin

sàng:

WAIT: JB P1.5, WAIT Lệnh này có nghĩa là “ nếu bit P1.5 được set thì nhảy tới nhan WAIT ” Nói

cách khác “nhảy trở lại và kiểm tra lần nữa”

6 Cac thanh ghi timer:

89C51 chứa hai bộ định thời / đếm 16 bit được dùng cho việc định thời hoặc

đếm sự kiện Timer 0 ở địa chỉ 8AH (TL0: byte thấp) và 8CH (THO: byte cao)

Timer 1 ở địa chỉ 8BH (TLI: byte thấp) và 8DH (THI: byte cao) Viéc van hành hanh timer được set bởi thanh ghi Timer Mode (TMOD) 6 dia chi 89H va thanh ghi diéu khién timer (TCON) 6 dia chi 88H Chi có TCON được địa chỉ hóa từng bit

7 Các thanh phi port nối tiếp:

MCS5I1 chứa một port nối tiếp trên chip dành cho việc trao đổi thông tin với

các thiết bị nối tiếp như máy tính, modem hoặc cho việc giao tiếp với các IC khác

có giao tiếp nối tiếp (các bộ chuyển đổi A/D, các thanh ghi dịch ) Một thanh ghi gọi là bộ đệm dự liệu nối tiếp (SBUF) ở địa chỉ 99H sẽ giữ cả hai di liệu truyền

và nhận Khi truyén đữ liệu thì ghi lên SBUF, khi nhận dữ liệu thì đọc SBUF Các

mode vận hành khác nhau được lập trình qua thanh ghi điểu khiển port nối tiếp

(SCON) (được địa chỉ hóa từng bit) ở địa chỉ 98H

Trang 19

Phần B: Kiến thức cơ sở Chương I: Giới thiệu vi điều khiển A T89C51

FEE

8 Các thanh ghi điều khiển ngắt:

89C51 có cấu trúc 5 nguồn ngắt, 2 mức ưu tiên Các ngắt bị cấm sau khi reset

hệ thống và sẽ được cho phép bằng việc ghi thành ghi cho phép ngắt (IE) ở địa chỉ

A8H Ca hai thanh ghi được địa chỉ hóa từng bịt

9, Thanh ghi điều khiển công suất:

Thanh ghi điều khiển công suất (PCON) ở địa chỉ 87H chứa nhiều bit điều

khiển Chúng được tóm tắt trong bảng sau:

Bit Ky hiéu Ý nghĩa

7 SMOD_ | Bit gấp đôi tốc độ baud, nếu được

set thì tốc độ baud sẽ tăng gấp đôi

trong các mode 1, 2 và 3 của port

1 PD Giảm công suất, được set để kích

hoạt mode giảm công suất, chỉ

thoát khi reset

0 IDL Mode chờ, set để kích hoạt mode

chờ, chỉ thoát khi có ngắt hoặc reset hệ thống

V LENH RESET

89C51 được reset bằng cách giữ chân RST ở mức cao ít nhất trong 2 chu kỳ

máy và trả nó về mức thấp RST có thể được kích bằng tay dùng một nút bấm

hoặc có thể được kích khi cdp dién dang mach RC{TRUGNS HHDL-KTCN

THU VIEN

Is0_201007914- _}

Trang 21

Trang 20

Mach reset hé thong

Trạng thái của tất cả các thanh ghi của 89C51 sau khi reset hệ thống được tóm

tắt trong bảng sau:

Thanh shi Nội dung

Quan trọng nhất trong các thanh ghi trên là thanh ghi đếm chương trình nó được

được đặt tại 0000H Khi RST trở lại mức thấp, việc thi hành chương trình luôn bắt

đầu ở địa chỉ đầu tiên trong bộ nhớ chương trình: địa chỉ 0000h Nội dung của

RAM trên chip không bị thay đổi bởi lệnh reset

Trang 21

Phần B: Kiến thức cơ sở Chương I: Giới thiệu vi điều khiển AT89C51

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

AT89C51 có hai timer 16 bit, mỗi bít 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 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ộ hoá 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 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 89C51 Các timer cũng có thể cung cấp xung nhịp tốc độ baud cho port nối tiếp

Truy xuất các timer của 89C51 ding sáu thanh ghi chức năng đặc biệt cho trong bảng sau:

SFR Mục đích Địa chỉ | Địa chỉ hoá

TMOD | Chế độ timer 89H Không

TLO | Byte thấp của Timer0 | 8AH Không TUI | Byte thấp của Timerl | 8BH Không

THO | Byte cao cia Timer 0 8C H Không THỊ | Byte cao của Timer 1 8D H

Trang 22

Phần B: Kiến thức cơ sở Chương I: Giới thiệu vi điều khiển AT89C51

ei

2 Thanh ghi ché d6 timer (TMOD):

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

Timer 1

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

mức cao

6 C/T 1 Bit chọn chế độ counter/timer

1 = bộ đếm sự kiện

0 = bộ định khoảng thời gian

5 MI 1 Bit 1 của chế độ (mode)

4 M0 1 Bit 0 của chế độ:

00: chế độ 0: timer 13 bit 01: chế độ 1: timer 16 bit

Tóm tắt thanh ghi TMOD

| 3 Thanh ghi diéu khién timer (TCON):

| Thanh ghi TCON chứa các bit trạng thái và các bit diéu khién Timer 0 va Timer 1

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

TCON.7 TF1 8FH | Cờ báo tran timer 1 Đặt bởi phần cứng khi

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

TCON6| TRI 8EH | Bit điểu khiển timer 1 chạy Đặt/xóa bằng phần

mềm để cho timer chay/ngung

TCON.5 TFO 8DH_ | Cờ báo tràn Timer 0

TCON.4 TRO §CH_ | Bit điều khiển Timer 0 chạy

TCON3| IEI 8BH | Cờ cạnh ngắt 1 bên ngoài Đặt bở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 bằng phần cứng khi CPU

chỉ đến chương trình phục vụ ngắt

TCON.2| TTI 8AH | Cờ kiểu ngắt 1 bên ngoài Đặ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

TCON.1 E0 89H | Cờ cạnh ngắt 0 bên ngoài

TCON.0| TT0 88H | Cờ kiểu ngắt 0 bên ngoài

Tóm tắt thanh ghi TCON

Trang 23

Phần B: Kiến thức cơ sở Chương I: Giới thiệu vi điều khiển AT89C51

b.Chế đô 1 - chế đô timer ]6 bịt:

- 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ần mềm

- MSB của giá trị trong các thanh ghi timer là bit 7 của THx và LSB 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

c Chế đô 2 - 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 v.v 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

d_Chế đô 3 - chế đô tách timer:

- Timer 0 tách thành hai timer 8 bit (TLO và TH0), TL0 có cờ báo tran 14 TFO va

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 sanh

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

timerl 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

Trang 25

Trang 24

Phần B: Kiến thức cơ sở Chương I: Giới thiệu vi điều khiển A T89C51

—>>5zsäẵỲỶ-naynänỶïnnnnnnợtnnnasasananaannnanaanana ẳnneneem

độ baud 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 TFI)

Xung nhịp

5 Nguồn tao 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 bít 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

Nguồn tạo xung nhịp

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

Nếu C/T =0, hoạt động timer liên tục được chọn va 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 nhip timer 1 MHz Báo 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 Số 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 cho

mỗi sự kiện

Trang 26

Trang 25

Phần B: Kiến thức cơ sở Chương I: Giới thiệu vi điều khiển AT89C51

EEE

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 ngoài cho timer 0 và được gọi là

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

Trong các ứng dụng bộ đếm, các thanh ghi timer được tăng thêm 1 tương ứng

với chuyển từ 1 xuống 0 ở ngõ vào bên ngoài: Tx Ngõ vào bên ngoài được lấy

mẫu trong S5P2 của mọi chu kỳ máy Như vậy, khi ngõ vào cao trong một chu kỳ

và thấp trong một chu kỳ kế thì số đếm được tăng thêm 1 giá trị mới xuất hiện

trong các thanh ghi S3P1 của chu kỳ theo sau chu kỳ trong đó phát hiện sự chuyển

tiếp Do đó, mất 2 chu kỳ máy (2 micro giây) để ghi nhận một sự chuyển 1 sang 0,

tần số ngoài tối đa là 500 KHz (giả sử hoạt động ở 12 MHz)

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

Phương pháp đơn giản nhất để bắt đầu ( cho chạy) và đừ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 nhp NN _———>y Các thanh ghi timer

| 0 = lên: timer dừng TRx 1 = xuống: timer chav

Cho chạy và dừng các 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ệng:

SETB TRO

và dừng bằng lệnh:

SETB TRO

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

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

Một phương pháp khác để điểu khiển các timer là dùng bit GATE trong TMOD

và ngõ vào bên ngoài INTx Đặt GATE = 1 cho phép timer sẽ được điều khiển

bằng INTx Việc này hữu dụng cho việc đo độ rộng xung như sau: giả sử INT0 ở

mức thấp nhưng các xung ở mức cao trong khoảng thời gian đo Khởi động timer ở

chế độ 2 (chế độ timer 16 bit), với TL0/TH0 = 0000H, GATE = 1 va TRO = 1 Khi

Trang 26

tạ

Phần B: Kiến thức cơ sở Chương I: Giới thiệu vi điều khiển AT89C51

a

7 Khởi đông và truy xuất các thanh ghi timer:

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 đú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ậo

nhật,v.v 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 khởi động timer 1 nhv timer

16 bit ( chế độ 1) có xung nhịp từ bộ đao động trên chip cho việc định khoảng thời:

MOV TMOD, #00010000B Lệnh này sẽ đặt M1 = 0 và M0 = 1 cho chế đố 1, C/T = 0 va 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/THI 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 Một khoảng 100 micro giây có thể được định thời bằng cách

khởi động trị cho TL1/THI là FF9CH:

MOV TLI1, #9CH MOV TH1, #0FFH

Rồi timer được cho chạy bằng cách đặt bit điểu khiển chạy như sau:

SETB TR1

Cờ báo tràn được tự động đặt lên 1 sau 100 micro giây

Phần mềm có thể đợi trong 100 micro giây bằng cách dùng lệnh rẽ nhánh có

điều kiện nhảy đến chính nó trong khi cờ báo tràn chưa được đặt lén 1:

Trong một số ứng dụng cần đọc giá trị trong các thanh ghi timer đapg.chạy Vì

phải đọc hai 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 Các lệnh dưới đây đọc nội dung của các

thanh ghi timer TL1/THI vào các thanh ghi R6/R7:

Trang 28

v b L& + i

Trang 27

Phần B: Kiến thức cơ sở Chương I: Giới thiệu vi điều khiển AT89C51

——nr-sry- iẳsz-.-.zrzsrsnsasasasaaamammaxsaaraanansasnnnneeaeen

AGAIN: MOV A, THỊ MOV Ró6, TLI1

CJNZ A, TH1, AGAIN

MOV R7,A

8 Các khoảng ngắn va các khoảng dài:

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 khoảng thời gian thực

hiện một lệnh, lệnh ngắn nhất của 89C51 là 1 chu kỳ máy hay l micro giây 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 89C51 có tần số 12MHz):

Một ngắt là sự xảy ra một điều kiện- một sự kiện- mà nó gây ra treo tạm thời

chương trình trong khi điều kiện đó được phục vụ bởi một chương trình khác

Các ngắt đóng một vai trò quan trọng trong thiết kế và cài đặt trong các ứng

dụng 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

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

Dĩ nhiên CPU mỗi lần không thể thực thi hơn một lệnh Nhưng nó có thể tạm treo

việc thực thi một chương trình để thực thi chương trình khác, rồi quay về chương

trìnn thứ nhất Theo cách này, nó giống như một chương trình con, nhưng có sự

khác biệt trong hệ thống được điều khiển bằng ngắt là sự ngắt quãng không xảy ra

như kết quả của một lệnh (lệnh CALL subroutine), mà là đáp ứng với một “ sự

kiện” xảy ra bất đồng bộ với chương trình chính Người ta không biết khi nào và ở

đâu chương trình chính sẽ bị ngắt quãng

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 Service Routine) hoặc bộ xử lý ngắt ISR thực thi khi đáp ứng ngắt

và thông thường thực hiện tác vụ mhập hay xuất với một thiết bị Khi ngắt xảy ra,

chương trình chính tạm thời bị treo và rẻ nhánh đến ISR: ISR thực thi và kết thúc

bằng lệnh trở về từ ngặt, chương trình chính tiếp tục thực thi ở chỗ mà nó tạm

dừng Thường người ta xẻm chương trình chính như thực thi ở mức nền (cơ sở)

(base-level) và các ISR thực thi ở mức ngắt (interrupt-level) Người ta cũng dùng

các thuật ngữ foreground chỉ mức nền và background chỉ mức ngắt Hình ảnh khái

quát của các ngắt được mô tả trong hình sau:

Trang 29

Trang 28

Phần B: Kiến thức cơ sở Chương I: Giới thiệu vi điều khiển A T89C51

a.Thực thi chương trình không có ngắt

Có 5 nguồn ngắt ở 89C51: 2 ngắt ngoài, 2 ngắt từ timer và 1 ngắt port nối tiếp

Tất cả các ngắt theo mặc nhiên đều bị cấm sau khi reset hệ thống và được cho

phép từng cái một bằng phần mềm

Khi có hai hoặc nhiều ngắt đông thời, hoặc một ngắt vẫy ra trong khi một ngắt

khác đang được phục vụ, có cả hai sự tuần tự hỏi vòng và sơ đồ ưu tiên hai mức

dùng để xác định việc thực biện các ngắt Việc hỏi vòng tuần tự thì cố định nhưng

ưu tiên ngắt thì có thể lập trình được

a Cho phép và cấm các ngắt:

Mỗi nguồn ngắt được cho phép hoặc cấm 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 riêng biệt cho mỗi nguồn ngắt, có một bit cho

phép/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 |Địachỉbit | Mô tả (1 = cho phép, 0 = cấm)

IE.7 |EA AFH Cho phép/cấm toàn bộ

IE.6 |- AEH Không được định nghĩa

IE.5 | ET2 ADH Cho phép ngắt từ timer 2

IE.4 |ES ACH Cho phép ngắt port nối tiếp

IE.3 |ETI ABH Cho phép ngắt từ timer 1

IE.2 |EXI | |AAH Cho phép ngắt ngoài

IE.1 |ET0 A9H Cho phép ngắt từ timer 0

IE.0 |EXO A8H Cho phép ngắt ngoài 0

Tóm tắt thanh ghi IE

TEP discgee 2

Trang 29

MG oo:

Phần B: Kiến thức cơ sở Chương I: Giới thiệu vi điều khiển AT89C51

aaaaaỶnszaaơợazaơơờơờợờợơợơggợgơơơgnnnaasanaannasanợnơgợgaơơơnơơơợớnnnnnnnaananananannnnnannmmm

Hai bit phải được đặt lên 1 dé cho phép bất kỳ ngắt nào: bit cho phép riêng và

bit cho phép toàn bộ Ví dụ, các ngắt từ timer 1 được cho phép như sau:

SETB ETI ; cho phép ngắt từ timer l

SETB EA ; dat bit cho phép toàn bộ

Cũng có thể sử dụng lệnh sau:

MOV IE, #10001000B Mặc dù hai cách này có cùng hiệu quả sau khi reset hệ thống, nhưng hiệu quả

sẽ khác nếu IE được ghi ở giữa chương trình Cách thứ nhất không ảnh hưởng đến

5 bit khác trong thanh ghi IE, trái lại cách thứ hai sẽ xóa các bit khác Nên khởi trị

IE theo cách thứ hai ở đầu chương trình (nghĩa là sau khi mở máy hoặc reset hệ

thống), nhưng cho phép và cấm các ngắt ngay trong chương trình nên dùng cách

thứ nhất để tránh ảnh hưởng đến các bit khác trong thanh ghi IE

b Ưu tiên ngắt:

Mỗi nguồn ngắt đượ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ỉ

Bit | Ky hiéu | Dia chi bit | Mô tả (1 = mức cao hơn, 0 = mức thấp hơn)

IP.7 |- - Không được định nghĩa IP.6 | - - Không được định nghĩa

IP.5 | PT2 BDH Ưu tiên cho ngắt từ timer 2

IP.4 | PS BCH Ưu tiên cho ngắt port nối tiếp

IP.3 | PT1 BBH Ưu tiên cho ngắt từ timer 1

IP.2 | PX1 BAH Ưu tiên cho ngắt ngoài

IP.1 | PTO B9H Ưu tiên cho ngắt từ timer 0

IP.0 |PXO BSH Ưu tiên cho ngắt ngoài 0

Tóm tắt thanh ghi IP

IP bị xóa sau khi reset hệ thống để (mặc nhiên) đặt tất cả các ngắt ở mức ưu

tiên thấp hơn Ý tưởng “ưu tiên” cho phép một ISR sẽ bị ngắt bởi một ngắt nếu

ngắt có độ ưu tiên cao hơn ngắt đang phục vụ Nếu một ISR có ưu tiên thấp đang

thực thi khi một ngắt có ưu tiên cao xây ra thì ISR bị ngắt ISR có ưu tiên cao

không thể bị ngắt

Chương trình chính thực thi ở mức nên và không liên hệ với bất cứ ngắt nào, có

thể luôn luôn bị ngắt quãng bất chấp ưu tiên củ ngắt Nếu hai ngắt có độ ưu tiên

khác nhau xảy ra đồng thời thì ngắt có độ ưu tiên cao hơn sẽ được phục vụ trước

c Hỏi vòng tuân tự:

Nếu hai ngắt cùng độ ưu tiên xảy ra đồng thời, sự hỏi vòng tuần tự sẽ xác định

cái nào được phục vụ trước tiên Hỏi vòng tuần tự là bwốn ngoài 0, timer 0, bên

ngoài 1, timer 1, port nối tiếp và timer 2

Hình sau minh họa 5 nguồn ngắt, cơ chế riêng biệt và toàn bộ, hỏi vòng tuần tự

và các mức ưu tiên Trạng thái của tất cả các nguồn ngắt khả dung qua các bit cờ

tương ứng trong các SFR Dĩ nhiên, nếu có bất kỳ ngắt nào bị cấm, ngắt không xảy

ra, nhưng phần mềm vẫn có thể kiểm tra cờ ngắt

Trang 31

AR A,

Trang 30

LOW PRIOAITY mat

Ngắt Cờ | Thanh ghi SFR và vị trí bit

Bên ngoài 0 | IE0 TCON.1

Bén ngoail | IE1 TCON.3 Timer 1 TFl TCON.7 Timer 0 TFO TCON.S

Port nối tiếp | TI SCON.1

Port nối tiếp | RI SCON.0

Các bit cờ ngắt

3 Xử lý ngắt:

Khi 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: ĐÓ so Lf tag sens mây ¬"

e - Lệnh hiện hành hoàn tất việc thực thi

e© Cất PC vào ngăn xếp

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

Trang 31

Phần B: Kiến thức cơ sở Chương I: Giới thiệu vi điều khiển AT89C51

m=rmaaaammmmmmmmmmmmmmaaaanarsaasaaanaaanaanaaanaaanananaaannnanammeemmann.m

Port néitiép | TI hodc RI 0023H

Các vector ngắt

Vector reset hệ thống (RST ở địa chỉ 0000H) được để trong bảng này vì theo

định nghĩa này, nó giống ngắt: nó ngắt chương trình chính và nạp cho PC 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 Các ngoại

lệ là RI và TI với các ngắt port 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 Thông thường

một rẽ nhánh xảy ra với một phản ứng thích hợp, phụ thuộc vào nguồn ngắt

Vì các vector ngắt ở phần đầu của bộ nhớ chương trình, lệnh thứ nhất của

chương trình chính thường là lệnh nhảy qua vùng nhớ này, ví dụ như LIMP 0030h

4 Thiết kế chương trình dùng các ngắt:

a Các chương trình phục vụ ngắt có kích thước nhỏ:

Các chương trình phục vụ ngắt phải bắt đầu ở gần phần đầu của bộ nhớ chương

trình ở các địa chỉ trong bảng Các vector ngắt Mặc dù chỉ có § byte ở giữa các

điểm vào ngắt, thường đủ bộ nhớ để thực hiện hoạt động mong muốn và quay về

ORG 000BH ; điểm vao timer 0

TOISR: ; ISR cho timer 0 bắt đầu

RETI ; quay về chương trình chính

MAIN: ; chương trình chính

Nếu'sử dụng nhiễu lngắt, phải cẩn thận, bảo đầm là chúng bắt đẫư &vi ti ding

và không chạy quá sang ISR kế Vì chỉ có một ngắt được sử dụng trong ví dụ trên,

chương trình chính có thể bắt đầu ngay sau lệnh RETI

Trang 33

Trang 32

Phần B: Kiến thức cơ sở Chương I: Giới thiệu vi điều khiển AT89C51

b Các chương trình phục vụ ngắt có kích thước lớn:

Néu ISR dai hon 8 byte, có thể cần chuyển nó tới nơi nào đó trong bộ nhớ

chương trình hoặc có thể để nó đi lố qua điểm vào của ngắt kế Tiêu biểu là ISR

bắt đầu với lệnh nhảy đến vùng nhớ khác ở đó có thể mở rộng chiều dài ISR Ví

dụ lúc này chỉ xét timer 0, có thể sử dụng khung sau:

ORG 0000H : điểm vào reset

LIMP MAIN ORG 000BH ; điểm vào timer 0 LJMP TOISR

ORG 0030H ; các vector ngắt tiếp theo

MAIN:

TOISR: : ; ISR cho timer 0

Để đơn giản, chương trình của chúng ta sẽ chỉ làm một việc lúc đầu Chương

trình khởi động tỉimer, port nối tiếp và các thanh ghi ngắt cho thích hợp và rồi

không làm gì cả Công việc hoàn toàn được làm trong ISR Sau các lệnh khởi

động, chương trình chính chứa lệnh sau:

HERE: SJMP HERE hay dạng viết gọn như sau:

SJMP $ Khi ngắt xảy ra, chương trình chính bị ngắt quãng tạm thời trong khi ISR thực

thi Lệnh RETI ở cuối ISR trả điểu khiển về chương trình chính và nó tiếp tục

không làm gì cả Trong nhiều ứng dụng điều khiển, nhiều công việc thật ra được

thực hiện hoàn toàn trong ISR

Vì sử dụng ngắt, nên lệnh SIMP $(HERE: SIMP HERE) có thể được thay

thế bằng các lệnh thực hiện các công việc khác cần trong ứng dụng

5 Các ngắt của 89C51:

a Các ngắt timer:

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

Ngắt timer xây ra khi các thanh ghi timer (TLx/THx) tràn và set cờ báo tràn (TFx)

lên 1

Chú ý rằng 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 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ờ ngắt phát (TD hoặc cờ ngắt thu (RD được

đặt lên 1 Ngắt phát xảy ra khi truyễển một ký tự vừa được ghi vào SBUF.:Ngắtthat +y/-

xảy ra khi một ký tự đã được nhận xong và đang đợi trong SBUF để được đọc -

Ngắt cổng nối tiếp hơi khác với nhắ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 Nguyên đo là có hai nguồn ngắt

Trang 34

Trang 33

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 chin INTO

hoặc INT1 của 89C51 Đây là các chức năng chuyển đổi của các bit Port 3: P3.2

(chân 12) và P3.3 (chan 13)

Các cờ tạo các ngắt này là các bit IE0 và IE1 trong TCON Khi quyển điều

khiển đã chuyển đến ISR, cờ tạo ra ngắt chỉ được xóa nếu ngắt được tích cực bằng

cạnh xuống Nếu ngắt được tích cực theo mức, thì nguồn yêu cầu ngắt bên ngoài

sẽ điều khiển mức của cờ thay cho phần cứng

Sự lựa chọn ngắt tích cực mức thấp hay tích cực cạnh xuống được lập trình qua

cdc bit ITO va IT1 trong TCON Vi du, néu IT1 = 0, ngắt ngoài 1 được kích khởi

bằng mức thấp 6 chan INT1 Néu IT1 = I, ngắt ngoài 1 sẽ được kích khởi bằng

cạnh Trong chế độ này, nếu các mẫu liên tiếp của trên chân INTI chỉ mức cao

trong một chu kỳ và thấp trong chu kỳ kế, cờ yêu cầu ngắt IE1 trong TCON được

đặt lên 1 Rồi bit cờ IE1 yêu cầu ngắt

Vì các chân ngắt ngoài được lấy mẫu một lần ở mỗi chu kỳ máy, ngõ vào nên

được giữ trong tối thiểu 12 chu kỳ dao động để bảo đảm lấy mẫu đúng Nếu ngắt

ngoài được tác động theo cạnh xuống, nguồn bên ngoài phải giữ chân yêu cầu cao

tối thiểu một chu kỳ và giữ nó ở mức thấp thêm một chu kỳ nữa để bảo đảm phát

hiện được cạnh xuống IE0 và IE1 tự động được xóa khi CPU chuyển tới ngắt

Nếu ngắt ngoài được tác động theo mức, nguồn bên ngoài phải giữ yêu cầu tác

động cho đến khi ngắt được yêu cầu thật sự được tạo ra Rồi nó phải không tác

động yêu cầu trước khi ISR được hoàn tất, nếu không một ngắt khác sẽ được lặp

lại Thông thường khi vào ISR người ta làm nguồn yêu câu đưa tín hiệu tạo ngắt về

trạng thái không tác động

VIIIL HOẠT ĐÔNG PORT NỐI TIẾP:

1 Giới thiệu:

89C51 có một port nối tiếp trong chip có thể hoạt động ở nhiều chế độ trên một

dãi tân số rộng Chức năng chủ yếu của port nối tiếp là thực hiện chuyển đổi song

song sang nối tiếp đối với dữ liệu xuất, và chuyển đổi nối tiếp sang song song với -

đữ 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ó chức năng khác với hai bit của port 3: P3.1 ở 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 để nạp dữ liệu sẽ được phát, và đọc SBUF để truy xuất đữ

Trang 35

fas et i

Trang 34

Xung nhip Xung nhip J

tốc độ baud tốc độ baud SBUF

(phát) (thu) (chỉ đọc)

|

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

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

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

bộ dao động trên chip) Nếu sử dụng tốc độ baud thay đổi, timer 1 sẽ cung cấp xung nhịp tốc độ baud và phải được lập trình

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 là bảng tóm tắt thanh ghi SCON và các chế độ của port nối tiếp:

Bít Ký hiệu | Địa chỉ | Mô tả

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

SCON.6 |SMI 9EH Bit I của chế độ port nối tiếp

SCON.5 | SM2 9DH Bit 2 của chế độ port nối tiếp Cho phép truyền

thông đa xử lí trong các chế độ 2 và 3; RI sẽ không bị tác động nếu bit thứ 9 thu được là 0

SCON.4 | REN 9CH | Cho phép bộ thu phải được đặt lên 1 dé thu

Trang 35

Phần B: Kiến thức cơ SỞ Chương I: Giới thiệu \ vi ¡ điều khiển AT89CS1

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 kết thúc phát kí tự,

SMO |SMI |Chế độ | Mô tả Tốc độ baud

0 0 0 Thanh ghi dịch | C6 dinh (F,, /12)

0 1 1 UART 8 bit Thay d6i (dat bing timer)

1 0 2 UART 9 bit C6 dinh (F,,, chia cho 12 hodc 64)

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

Các chế độ port nối tiếp

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

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

_ 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 ở RB8 Phần mềm có thể cần hoặc

không cần bit đữ liệu thứ 9, phụ thuộc vào đặc tính kỹ thuật của thiết bị nối tiếp sử

dụng Bên cạnh đó, bit dữ liệu thứ 9 cũng đóng một vai trò quan trọng trong truyền

thông đa xử lí

c Thêm 1 parity:

Thường sử dụng bit đữ liệu thứ 9 để thêm parity vào kí tự Bit P trong từ trạng

thái chương trình (PSW) được đặt lên 1 hoặc bị xóa mỗi chu kì máy để thiết lập

kiểm tra chấn với 8 bit trong thanh ghi tích lũy Ví dụ, nếu truyền thông cần 8 bit

dữ liệu cộng thêm kiểm tra chấn, có thể sử dụng các lệnh sau để phát 8 bit trong

thanh ghi tích lũy với liểm tra chấn thêm vào bit thứ 9:

Trang 37

Trang 36

Phần B: Kiến thức cơ sở

MOV C,P ; Đặt bit parity chin vao TB8

MOV TB8, C ; Nó trở thành bit dữ liệu thứ 9 MOV SBUF, A; Chuyén 8 bit ty ACC vao SBUF

Nếu cần parity lẻ thì sửa các lệnh lại như sau:

MOV C, P ; Dat bit parity chin vao cd C

MOV TB8, C MOV SBUF, A

Dĩ nhiên, việc sử dụng parity khéng bị giới hạn ở các chế độ 2 và 3 Ở chế độ

1, 8 bit đữ liệu được truyền đi có thể bao gồm 7 bit dữ liệu cộng thêm bit parity

Để truyền mã ASCII 7 bit véi parity chấn ở bit 8, có thể sử dụng các lệnh sau:

CLR ACC.7 : bảo đảm MSB được xóa

MOV C, P ; parity chin ở trong P

MOV ACC.7, C; dat parity chin vio MSB

MOV SBUF, A ; gởi kí tự đi: 7 bit đữ liệu cộng parity chấn

d Các cờ ngắt:

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

trong truyền thông 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

Ví dụ, thường RI được đặt lên 1 khi kết thúc việc thu kí tự và báo “bộ đệm thu

tràn” Điều kiện này có thể được kiểm tra trong phần mềm hoặc có thể được lập

trình gây ra một ngắt Nếu phần mêm muốn nhập một kí tự từ thiết bị được nối vào cổng nối tiếp (có thể là thiết bị đầu cuối hiển thị video), nó phải đợi cho đến khi

RI được đặt lên 1, rồi xóa RI và đọc kí tự từ SBUF Chương trình như sau:

WAIT: JNB RI, WAIT ; kiểm tra RI cho đến khi nó = 1

CLR RI ; xóa RI

MOV A, SBUF ; doc ki ty

TI được đặt lên 1 ở cuối lúc phát kí tự và báo “bộ đệm phát trống” Nếu phần

mềm muốn gửi một kí tự đến một thiết bị được nối vào cổng nối tiếp, trước hết nó

phải kiểm tra xem cổng nối tiếp sẵn sàng chưa Nói cách khác, nếu kí tự trước đã

được gởi đi, đợi cho đến khi việc truyền đữ liệu hoàn tất trước khi gửi kí tự kế Các

lệnh sau sẽ truyền kí tự trong thanh ghi tích lũy:

WAIT: JNB TI WAIT ; kiểm tra TI cho đến khi nó = 1

CLR TI ; xóa TÍĨ MOV SBUF,A ; gởi kítự đi

Các đoạn chương trình trên là một phân của các hàm nhập và xuất kí tự chuẩn

e Tốc đô baud của port nối tiếp:

Tốc độ baud 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ố đao động trên chip của 89C51, nhưng cũng có thể sử dụng nguồn xung nhịp khác

Giả sử với tần số dao động là 12Mhz thì tốc độ baud chế độ 0 là 1 Mhz

Trang 38

Trang 37

Chế độ: trên chip „2 baud

"| +64 SMOD = Chế độ 2: Dao động Y"—_ „ungnhịp

—>

Cacché Dao động tT „ Xung nhịp

độ 1 và 3: trên chip SMOD = tốc đô

—p, +16

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

Mặc nhiên sau khi reset hệ thống, tốc độ baud chế độ 2 là tần số bộ dao động chia cho 64 Tốc độ baud cũng bị ảnh hưởng bởi một bit tring thanh ghi điều khiển

nguồn cung cấp (PCON) Bit 7 của PCON là bit SMOD Đặt bịt SMOD lên 1 làm

gấp đôi tốc độ bauc trong các 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

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 Vi timer hoat động ở tần số tương đối cao, tràn timer được chia thêm cho

32 (16 nếu SMOD = 1) trước khi cung cấp xung nhịp tốc độ baud cho port nối tiếp

*Sử dụng timer 1 làm xung nhịp tốc độ baud:

Xét 8051, cách thông dụng để tạo tốc độ baud là khởi động TMOD cho chế độ

§ bit tự động nạp lại (chế độ 2) và đặt giá trị nạp lại đúng vào TH để cho tốc độ tràn đúng với tốc độ baud TMOD được khởi động như sau:

MOV TMOD, #0010xxxxB

Các x là các bit 1 hoặc 0 cần cho timer

Cũng có thể đạt được các tốc độ baud thấp bằng cách sử dụng timer chế độ 1

với TMOD = 0001xxxxB Tuy nhiên, tốn thêm phần mềm vì các thanh ghi

THI1/TLI1 phải được khởi động lại sau mỗi lần tràn Việc này sẽ được thực hiện trong chương trình phục vụ ngắt Một chọn lựa khác là cấp xung nhịp cho timer l

Trang 39

Trang 38

từ ngoài dùng T1 (P3.5) Và luôn luôn tốc độ baud là tốc độ tràn của timer 1 được

chia cho 32 (hoặc cho 16, nếu SMOD = 1)

Công thức tổng quát để xác định tốc độ baud trong các chế độ 1 và 3 là:

Tốc độ baud = tốc d6 tran ctia timer Ichia cho 32

Vi du, muốn làm việc với tốc độ baud là 1200 baud, thì tốc độ tràn của timer 1

phải là: 1200 x 32 = 38.4KHz

Nếu dùng thạch anh 12MHz, timer 1 được cấp xung nhịp 1MHz hay 1000KHz

Vì tốc độ tràn của timer 1 là 38.4KHz vz2 timer được cấp xung nhịp 1000KHz, thì

cần tràn sau 26.04 xung nhịp (lấy 1000 chia cho 38.4 thì được 26.04 và làm tròn là 26) Vì timer đếm lên và tràn xảy ra khi có sự thay đổi từ FFH xuống 00H số đếm

Như vậy giá trị đúng cân nạp vào THỊ là (-26) Cách dễ nhất để đặt giá trị nạp lại

vào THỊ là:

MOV THI, #-26

Trình hợp dịch sẽ thực hiện chuyển đổi cần thiết Trong trường hợp này (-26)

được chuyển thành 0E6H Như vậy, lệnh trên hoàn toàn giống với lệnh:

MOV TH1, #0E6H

Do việc làm tròn nên có sai số nhỏ trong tốc độ baud Tổng quát thì cho phép

dung sai 5% trong truyền thông bất đồng bộ (start/stop) Có thể có được tốc độ

baud chính xác nếu dùng thạch anh 11.059MHz¿ Bảng sau đây tóm tắt các giá trị

nạp lại cho các tốc độ baud thông dụng nhất, dùng thạch anh 12MHz hoặc 11.059MHz:

Trang 39

Phần B: Kiến thức cơ sở Chương II: Giới thiệu module LCD

CHƯƠNG II: GIGI THIEU MODULE LCD

LCAU TRUC PHAN CUNG CUA MODULE LCD:

1 Giới thiệu:

LCD ngày nay đã trở nên rất phổ biến trên thế giới Tập đổ án này chỉ để

cập đến loại LCD 16*2 tức LCD có 16 ký tự và hai hàng LCD điển hình là loại

HD44780, tại thị trường Việt Nam, cụ thể ở chợ Nhật Tảo bán rất nhiều LCD của Trung Quốc TC1602A Việc điều khiển LCD thì có nhiều cách, ở đây em dùng vi

điều khiển 89C51 để điều khiển LCD

LCD là viết tắt của chữ: Liquid Crystal Display Có thể dịch là màn hình hiển

thị bằng tên thể lổng Ngày nay LCD thay thế dần các loại mặt chỉ thị LED,

Plasma hay huỳnh quang

Cơ chế hoạt động của LCD:

Tỉnh thể lỏng sử dụng trong các mặt chỉ thị LCD là những hợp chất hữu cơ

Những hợp chất này có đặc tính nematic Điều đó có nghĩa là trục dọc của các

phần tử tỉnh thể lồng nằm song song với nhau Những chất lỏng bình thường không

hể có cấu trúc như thế Những tỉnh thể lỏng được cấu tạo bởi nhiễu mặt phẳng, tất

cả các mặt phẳng đều có tính chất nematic và nằm lệch nhau sao cho ta có một chuỗi xoắn ốc, ta được một cấu trúc gọi là cấu trúc Cholestrinic (hay cấu trúc

nematic - Twised Nematic — tên khoa học gốc Hy Lạp: Nema — atos giống hình sợi chỉ) cấu trúc này được ứng dụng trong mặt chi thi tinh thé long điện trường

Tuỳ theo nhiệt độ mà tỉnh thể lỏng có những trạng thái khác nhau Ở nhiệt độ

thấp nó có trạng thái rắn Từ một nhiệt độ nóng chảy Tnc nó đổi sang trạng thái

lỏng không đẳng hướng (Mesophase) Trong pha này, nó không có tính chất hoàn

toàn theo không gian 3 chiều của tỉnh thể, mà cũng không có tính chất đẳng hướng

của chất lỏng Nếu ta tăng tiếp nhiệt độ đến một giá trị Ttr, gọi là nhiệt độ trong

suốt, tỉnh thể lỏng có trạng thái đẳng hướng Hiệu ứng quang học dùng cho cả mặt

chỉ thi chất lỏng chỉ được hạn chế trong của mặt chỉ thị tinh thể lỏng bị hạn chế và

được định bởi hai điểm nhiệt độ Tnc và Ttr (tên khoa học gốc Hy Lạp: Meso - ở

gián trên mặt ngoài hai tấm kiếng sao cho hình ảnh phản chiếu của mặt chỉ thị

được nhìn rõ từ một góc nhìn định hướng trước

Hướng nhìn của LCD có nhiều hướng hay góc nghiên định trước bởi nhà sản xuất

Trang 40

Chương II: Giới thiệu module LCD

Chức năng của LCD là điểu khiển ma trận điểm Hệ thống giao tiếp: LCD có

hai kiểu giao tiếp với MPU: 4 bit bus và 8 bit bus 4 bit bus và 8 bit bus thì được

chọn bởi bit DL trong cấu trúc thanh ghi

Trong cả quá trình đọc hoặc viết, 2 thanh ghi bên trong LCD được sử dụng Một

là thanh ghi dữ liệu (DR), thanh thứ hai là thanh ghi hướng dẫn (IR)

Thanh ghi dữ liệu (DR) được sử dụng như một kho dữ liệu tạm thời

Sơ đồ khối của LCD

2 Cấu trúc phần cứng của module LCD:

*Chân giao tiếp:

3 VEE Điện áp LCD Phân cực LCD

4 RS Chon thanh ghi | Thanh ghi chon tin hiéu ngõ vào

5 R/W Doc/ghi Chọn chức năng đọc hoặc ghi

6 E Enable R/W Tín hiệu cho phép đọc hoặc ghi đata

7 DBO Data bus 0 Tin hiệu từ DB0 — DB7 lam thanh dudng

8 DB1 Data bus 1 bus 8 bit, giao tiếp với MPU

Ngày đăng: 17/02/2014, 22:29

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w