1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

Do goc trong anten dinh huong

81 191 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 81
Dung lượng 3,02 MB

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

Nội dung

Khi ấy việc điều khiển anten có thể trở nên đơn giản hơn là mua thiết bị phần cứng như của hãng YEASU chẳng hạn, một phần mềm đi kèm hoặc tải sẵn trên mạng cùng với một thiết bị định vị

Trang 1

ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ

Nguyễn Văn Đang

XÂY DỰNG BỘ ĐO ĐẠC XÁC ĐỊNH GÓC TÀ VÀ

GÓC PHƯƠNG VỊ TRONG HỆ THỐNG ANTEN

ĐỊNH HƯỚNG

KHÓA LUẬN TỐT NGHIỆP ĐẠI HỌC HỆ CHÍNH QUY

Nghành: Điện tử - Viễn thông

HÀ NỘI – 2005

Trang 2

ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ

Nguyễn Văn Đang

XÂY DỰNG BỘ ĐO ĐẠC XÁC ĐỊNH GÓC TÀ VÀ

GÓC PHƯƠNG VỊ TRONG HỆ THỐNG ANTEN

ĐỊNH HƯỚNG

KHÓA LUẬN TỐT NGHIỆP ĐẠI HỌC HỆ CHÍNH QUY

Nghành: Điện tử - Viễn thông

Cán bộ hướng dẫn: TS Ngô Diên Tập

HÀ NỘI – 2005

Trang 3

Sinh viên Nguyễn Văn Đang

Trang 4

một card giao tiếp sử dụng vi điều khiển AT89C51 nhằm xác định góc tà và góc

phương vị trong hệ thống anten định hướng Card được thiết kế với việc sử dụng

AT89C51 và ADC0809 trong việc thu tín hiệu từ hai ngõ vào tương tự phản hồi từ

anten Hai tín hiệu phản hồi từ anten là hai giá trị thế tương tự được dội lại từ hai biến

trở gắn với trục quay của hai motor xoay góc tà và góc phương vị Hai thế này có độ

lớn quan hệ chặt chẽ với giá trị góc tương ứng của anten

Mô hình card giao tiếp phải thiết kế trên cơ sở có thể mở rộng đề tài với việc điều khiển anten định hướng bám sát vệ tinh thu tín hiệu từ vệ tinh Tức là về mặt phần

cứng nó phải đảm bảo chức năng thu thập xử lý trung gian dữ liệu và xuất ra các tín

hiệu điều khiển anten quay bám sát vệ tinh

Trang 5

MỤC LỤC CHƯƠNG 1 GIỚI THIỆU KHÁI QUÁT VỀ CƠ CẤU ĐIỀU KHIỂN CỦA ANTEN

ĐỊNH HƯỚNG 10

CHƯƠNG 2 BỘ VI ĐIỀU KHIỂN HỌ MCS-51 VÀ VI ĐIỀU KHIỂN AT89C51 12

2.1 Giới thiệu chung .12

2.2 Khảo sát vi điều khiển AT89C51 (8051) .13

2.3 Cấu trúc khối bên trong của AT89C51 13

2.3.1 Port 0 .15

2.3.2 Port 1 .15

2.3.3 Port 2 .15

2.3.4 Port 3 .15

2.3.5 Chân cho phép bộ nhớ chương trình PSEN .16

2.3.6 Chân cho phép chốt địa chỉ ALE 16

2.3.7 Chân truy xuất ngoài EA 16

2.3.8 Chân RESET (RST) .17

2.3.9 Chân XTAL1 và XTAL2 17

2.3.10 Các chân nguồn .17

2.3.11 Cấu trúc của port xuất/nhập 17

2.3.12 Tổ chức bộ nhớ 18

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

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

2.3.15 Lệnh reset: 28

2.3.16 Hoặt động định thời (timer): 29

2.3.17 Nguồn tạo xung nhịp .32

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

2.3.19 Hoạt động ngắt .39

2.3.20 Các ngắt của AT89C51 .41

2.4 Tập lệnh của AT89C51 42

2.4.1 Các chế độ đánh địa chỉ: trong tập lệnh có 8 chế độ đánh địa chỉ: 42

2.4.2 Các nhóm lệnh của AT89C51: 45

CHƯƠNG 3 CHUYỂN ĐỔI TƯƠNG TỰ SỐ 48

3.1 Giới thiệu 48

3.2 Nguyên tắc chuyển đổi tương tự sang số 48

3.3 Các phương pháp biến đổi tương tự sang số .49

3.3.1 ADC kiểu tức thời (kiểu flash) .49

3.3.2 ADC kiểu bậc thang (kiểu servo) .50

3.3.3 ADC bám sát (tracking) 50

3.3.4 ADC hoạt động theo phương pháp tích phân .51

3.3.5 ADC xấp xỉ liên tiếp ( successive approximation ADC) 52

3.4 Các đặc trưng kỹ thuật của ADC 53

CHƯƠNG 4 HỆ THỐNG ĐO LƯỜNG 54

4.1 Hệ thống đo lường .54

4.2 Hệ thống đo lường số .54

4.2.1 Sơ đồ khối của hệ thống đo lường số 55

4.2.2 Nguyên lý hoặt động .55

Trang 6

CHƯƠNG 5 THIẾT KẾ MẠCH 56

5.1 Nhiệm vụ cần thiết kế 56

5.2 Sơ đồ tổng thể 56

5.3 Thiết kế bộ chuyển đổi ADC: 58

5.3.1 Giới thiệu ADC0809: 58

5.3.2 Mạch tạo xung dao động dùng các cổng NOT để tạo dao động cho ADC như sau: .61

5.4 Thiết kế mạch .63

5.4.1 Khối cấp nguồn 64

5.4.2 Khối tạo xung nhịp .64

5.4.3 Khối ghép nối với máy tính 66

5.4.4 Sử dụng các chân của ADC0809 66

5.4.5 Sử dụng các chân của vi điều khiển AT89C51 .68

5.5 Quá trình làm mạch – thi công .69

CHƯƠNG 6 VIẾT CHƯƠNG TRÌNH VÀ VẬN HÀNH 72

6.1 Giải thuật chương trình 72

6.1.1 Giới thiệu 72

6.1.2 Lưu đồ giải thuật cho chương trình .72

6.2 Chương trình chính 73

6.2.1 Chương trình chính viết cho AT89C51 .73

6.2.2 Giải thích chương trình 75

6.3 Chương trình viết để đọc dữ liệu trên máy tính Đọc từ cổng COM do vi điều khiển AT89C51 gửi đến .76

CHƯƠNG 7 KẾT QUẢ THÍ NGHIỆM, ĐÁNH GIÁ KẾT QUẢ VÀ KẾT LUẬN 77

7.1 Kết quả thí nghiệm và đánh giá kết quả .77

7.1.1 Kết quả sự phụ thuộc của giá trị ADC vào góc phương vị 77

7.1.2 Kết quả sự phụ thuộc của giá trị thế tương tự phản hồi từ anten vào góc tà .78

7.1.3 Nhận xét kết quả 78

7.2 Kết luận .79

Trang 7

LỜI NÓI ĐẦU

Trong thời đại công nghiệp như hiện nay, các kỹ thuật điều khiển và hệ điều

khiển phát triển đến chóng mặt Việc ứng dụng các thành tựu khoa học công nghệ hiện

đại vào khắp các lĩnh vực xã hội đang được thực hiện trên những quy mô lớn chưa

từng thấy Các thiết bị mang tính chất “tự động” đang ngày càng phổ biến không chỉ

trong các dây truyền công nghiệp hiện đại mà còn xuất hiện rất phổ biến trong hầu hết

mọi lĩnh vực của đời sống xã hội Mà thường thì tiền đề của các phép điều khiển các

cơ cấu chấp hành là dựa trên những tín hiệu phản hồi từ cơ cấu chấp hành, tín hiệu này

được thu thập để từ đó xử lý dữ liệu và ra lệnh điều khiển cơ cấu chấp hành theo ý

muốn của ta Như vậy các kỹ thuật đo lường góp một vị trí trọng yếu trong các hệ

thống “tự động”

Trong các phép điều khiển các hệ thống từ đơn giản đến phức tạp đa số các kỹ

thuật đo lường đều có điểm chung nhất quán là chuyển đổi các đại lượng ít khi là điện

sang điện từ đó xử lý kết quả thu được và đưa ra các quyết định điều khiển phần tử

chấp hành trong các hệ thống điều khiển hoặc đơn giản hơn chỉ là hiển thị kết quả thu

được trong các hệ thống đo lường thuần túy

Trong các hệ thống Anten định hướng cũng vậy, các kỹ thuật điều khiển Anten

cũng rất phong phú Thuật toán nào cũng phải đủ hiệu quả thì mới có thể điều khiển

anten bám sát (tracking) vệ tinh (các vệ tinh trượt theo quỹ đạo) một cách chính xác,

đây là cơ sở để có được tín hiệu thu được rõ nét và tất nhiên dù là thuật toán điều khiển

thế nào đi nữa thì việc điều khiển chỉ có thể chính xác nếu như các giá trị phản hồi từ

anten (mang thông tin về hướng bám) phải thu đươc kịp thời và chính xác, các giá trị

đó là hai đại lượng góc tà (elevation) và góc phương vị (azimuth) Hai đại lượng góc

này được chuyển đổi thành tín hiệu điện tương ứng thông qua việc gắn với cơ cấu trục

quay của anten với một biến trở, khi anten quay thì biến trở quay và sẽ phản hồi về hệ

thống điều khiển một điện thế tương tự một chiều về bộ điều khiển Việc xác định hai

giá trị tương ứng mang thông tin về góc tà và góc phương vị này chính là nội dung của

đề tài

trước khá ổn định và các anten định hướng phải bám sát theo các quỹ đạo này để thu

tín hiệu phản hồi từ vệ tinh Các chương trình điều khiển anten thực tế đã được các nhà

Trang 8

sản xuất phần cứng hay các nhà cung cấp dịch vụ thu ảnh vệ tinh viết sẵn đem bán

hoặc đi kèm phần cứng hoặc thậm trí đưa miễn phí trên Internet Khi ấy việc điều

khiển anten có thể trở nên đơn giản hơn là mua thiết bị phần cứng (như của hãng

YEASU chẳng hạn), một phần mềm đi kèm hoặc tải sẵn trên mạng cùng với một thiết

bị định vị toàn cầu GPS cầm tay dùng để xác định vị trí anten trên trái đất làm dữ liệu

đầu vào cho phần mềm xác định quỹ đạo cần bám vệ tinh cho anten và quá trình điều

khiển sẽ diễn ra một cách tự động

Thực ra trong đề tài này em không có tham vọng lớn gì ngoài việc tìm hiểu bộ

giao diện GS232 trong hệ thống điều khiển anten định hướng trọn gói của hãng

YEASU Trên cơ sở những hiểu biết của mình về bộ điều khiển này, cùng những kiến

thức tích lũy được trong những năm học đại học cộng với sự hướng dẫn của thầy giáo,

em thiết kế một bộ giao diện có chức năng tương tự, với mụch đích là nghiên cứu, tiếp

cận công nghệ

Mặc dù em đã rất cố gắng nhưng do thời gian làm khóa luận rất hạn chế và trình

độ hiểu biết của em còn thấp nên việc thực hiện đề tài sẽ còn gặp nhiều điều chưa hợp

lý, có thể còn sai sót Vậy em mong quý thầy cô cùng bạn bè thông cảm và chỉ dẫn em

nhiều hơn Em xin chân thành lắng nghe những góp ý từ mọi phía Cuối cùng một lần

nữa em xin chân thành cảm ơn thầy cô cùng bạn bè sinh viên đã giúp đỡ em rất nhiều

trong thời gian làm khóa luận

Giới hạn của đề tài:

Tìm hiểu mạch chức năng của bộ giao diện đo lường góc tà và góc phương vị

GS232 của hãng YEASU

Từ đó xác định nhiệm vụ yêu cầu cần giải quyết là thiết kế một bộ giao diện xác

định góc tà và góc phương vị Module này còn có thể đưa ra những quyết định điều

khiển xoay anten theo hai góc để bám sát vệ tinh

Viết chương trình phần mềm vận hành bộ giao diện và phần mềm thu thập dữ liệu

trong máy tính

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

Là để nghiên cứu học tập, thực hành thiết kế chế tạo một bo mạch điện tử trong

đo lường và điều khiển dựa trên ứng dụng các vi điều khiển Cũng là cơ sở để kiểm

chứng những kiến thức học được trên học đường và còn là dịp để em có thể khẳng

định khả năng của mình đối với thực tế

Trang 9

Bản chất của đề tài là thực hiện việc tìm hiểu sử dụng vi điều khiển Để từ đó

ứng dụng thiết kế các hệ thống đo lường và điều khiển ở mức độ không thật sự phức

tạp Chứ không phải là một cái gì đó đòi hỏi trình độ cao, liên qua các hệ thống anten

định hướng và vệ tinh nhân tạo

Trang 10

CHƯƠNG 1 GIỚI THIỆU KHÁI QUÁT VỀ CƠ CẤU ĐIỀU KHIỂN CỦA

ANTEN ĐỊNH HƯỚNG

Trong các hệ thống anten định hướng bám sát vệ tinh, cơ cấu điều khiển dựa trên việc đóng ngắt các rơle bằng các xung logic mức TTL làm đóng hoặc ngắt mạch

điện làm quay môtơ của bộ xoay góc tà hoặc bộ xoay góc phương vị theo chiều thuận

hoặc chiều nghịch Tổ hợp của hai vận tốc góc quay này tạo nên vận tốc và hướng bám

của anten đối với vệ tinh Khi môtơ quay thì đồng thời làm quay một biến trở và biến

trở dội lại một điện thế tương tự một chiều về bộ giao diện Giá trị điện thế tương tự

dội từ anten về bộ giao diện sẽ mang thông tin về góc

Hình vẽ sau mô tả phần nào cơ cấu của hệ thống anten định hướng và cơ cấu xác đinh góc và điều khiển nó:

Hình 1 Mô hình hệ điều khiển anten và anten thực tế Người ta thiết kế trên thực tế một cách hợp lý sao cho khi môtơ quay tương ứng làm anten quay quét toàn bộ dải góc (với góc tà có dải góc nằm trong khoảng 00 đến

1800, còn bộ quay góc phương vị thì có dải góc là từ 00 đến 3600), thì biến trở quay và

có điện thế dội lại tương ứng trong khoảng 0V đến 5V

Như vậy với bộ phận góc tà ta thấy: Khi anten quay từ 00 đến 1800 thì thế biến thiên trong khoảng 0V đến 5V Do đó nếu ta thu được thế tương tự có giá trị là U(v)

thì góc tà của anten khi ấy được xác định:

Trang 11

Góc tà = xU

5

Tương tự như vậy với bộ phận góc phương vị thì: Khi anten quay từ 00 đến 3600

thì thế cũng biến thiên trong khoảng 0V đến 5V, nếu như ta thu được thế tương tự có

giá trị là U(v) thì góc phương vị được xác định là:

5

360

(độ)

Nhiệm vụ của em ở đây là cần phải xác định được các góc này bằng một board

mạch phần cứng giao tiếp với máy tính để hiển thị kết qủa

Như vậy một board mạch sẽ cần có một bộ chuyển đổi đại lượng điện áp từ

tương tự sang số để có thể xử lý được, tức là một chíp ADC cần đến

Một chíp ADC cần đến để chuyển đổi tương tự - số cho hai lối vào tương tự, và

phải cần đến một chíp vi điều khiển với nhiệm vụ điều khiển chíp ADC, xử lý, tổ chức

dữ liệu số thu được thế nào đấy để truyền thông với máy tính có thể thực hiện được

Nhưng quan trọng hơn cả là đưa ra các tín hiệu điều khiển đóng ngắt mạch làm quay

motor xoay anten

Như vậy trong mạch giao diện quan trọng nhất sẽ là vi điều khiển và bộ chuyển

đổi tương tự số (chip ADC) ngoài ra còn một số linh kiện quan trọng khác nữa, ta sẽ

lần lượt xét đến từng linh kiện một trong các chương tiếp theo

Trang 12

CHƯƠNG 2 BỘ VI ĐIỀU KHIỂN HỌ MCS-51 VÀ VI ĐIỀU KHIỂN

AT89C51

Vi điều khiển là trái tim trung tâm của khối giao diện, vi điều khiển mà em sử

dụng trong khối giao diện là AT98C51 là một vi điều khiển thuộc họ MCS-51 của

Intel do hãng ATMEL sản xuất Sự lựa chọn vi điều khiển AT89C51 là vì trong mô

hình này một vi điều khiển thuộc họ 8051 là hợp lý, mặc dù đây không phải là một vi

điều khiển mạnh, nhưng nó rất phổ biến, đơn giản, giá thành hấp dẫn và quan trọng

hơn là nó hoàn toàn đủ khả năng thực hiện được mụch đích mà ta yêu cầu Có thể có

những vi điều khiển hợp lý hơn như PSOC, BASIC TEMP, AVR , nhưng có lẽ sẽ là

lãng phí không cần thiết

2.1 Giới thiệu chung

Vào năm 1971 tập đoàn Intel đã giới thiệu 8080, bộ vi xử lý thành công đầu

tiên Sau đó không lâu Motorola, Zilog và một số hãng khác cũng giới thiệu bộ vi xử

lý tương tự 6800, 1801, 6502 và Z80 Bản thân các vi mạch này tuy không có nhiều

tính hiệu quả sử dụng nhưng khi là một phần của một máy tính đơn board thì chúng trở

thành thành phần trung tâm trong các sản phẩm có ích dùng để nghiên cứu và thiết kế

Năm 1976 Intel giới thiệu bộ vi điều khiển đầu tiên 8748, vi mạch 8748 chứa

17000 transitor bao gồm một CPU, 1Kbyte ROM, 64 byte RAM, 27 chân xuất nhập và

một bộ định thời 8 bit, IC này và các tiếp theo của MCS-48 nhanh chóng trở thành

chuẩn công nghiệp trong các ứng dụng hướng điều khiển Đến năm 1980 Intel tăng

thêm một bước ngoặt nữa khi công bố chip 8051 bộ vi điều khiển đầu tiên của họ

MCS-51 với 4K byte ROM, 128 byte RAM, 32 đường xuất nhập, 1 port nối tiếp và 2

bộ định thời 16 bit

Ta có thể khái niệm vi điều khiển là mạch tích hợp trên một chip có thể lập

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

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

thời gian và tiến hành đóng mở một cơ cấu nào đó Các vi điều khiển ngày càng được

sử dụng rộng rãi, nó có trong các thiết bị điện, điện tử dân dụng, các bộ vi điều khiển

điều khiển hoặt động của TV, Tủ lạnh, lò vi sóng, điều khiển từ xa Trong các hệ

thống tự động hóa trong các nhà máy xí nghiệp, công ty sản xuất công nghiệp Trong

các hệ thống thông minh mang tính chất tự động thì vai trò của vi điều khiển càng

quan trọng

Trang 13

2.2 Khảo sát vi điều khiển AT89C51 (8051)

Các thông số chính như sau:

4K byte EPROM có thể lập trình được, chịu được 1000 lần ghi/xóa

128 byte RAM

4 cổng vào ra 8 bit

Hai bộ định thời 16 bit

Một cổng giao tiếp nối tiếp

Có thể quản lý 64Kbyte không gian bộ nhớ mở rộng chương trình

Có thể quản lý 64Kbyte không gian bộ nhớ mở rộng dữ liệu

Một bộ xử lý logic (thao tác mức bit đơn)

210 bít được địa chỉ hóa

6 nguồn tạo ngắt

Có chế độ hoặt động tiết kiệm năng lượng

2.3 Cấu trúc khối bên trong của AT89C51

Thành phần chính của vi điều khiển AT89C51 là bộ xử lý trung tâm (CPU) bao

gồm:

Thanh ghi tích lũy ACC

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

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

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

Bốn băng thanh ghi

Con trỏ ngăn xếp

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

có khả năng đưa một tín hiệu giữ nhịp từ bên ngoài Chương trình đang chạy có thể

cho dừng lại nhờ một khối điều khiển ngắt ở bên trong Các nguồn ngắt có thể là: các

biến cố ở bên ngoài, sự tràn bộ đếm định thời hoặc cũng có thể là giao diện nối tiếp

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

Hình trang bên nói lên sơ đồ khối của vi điều khiển AT89C51

Trang 14

Hình 2 Sơ đồ khối của AT89C51

Các chân (trong kiểu đóng gói DIP – dual inline package chẳng hạn)

Hình 3 Các chân của AT89C51 trong kiểu đóng gói DIP

Ta thấy 32/40 chân của AT89C51 có công dụng xuất nhập, và 24/32 chân này kiêm 2 mụch đích (công dụng) Mỗi đường có thể hoặt động xuất nhập hoặc hoặt động

như các đường điều khiển hoặc đường địa/chỉ dữ liệu trong chế độ đa hợp

Trang 15

32 chân nêu trên hình thành 4 port 8-bit Với các thiết kế yêu cầu một mức tối thiểu bộ nhớ ngoài hoặc các thành phần bên ngoài khác, ta có thể sử dụng các port này

làm nhiệm vụ xuất/nhập 8 đường cho mỗi port có thể được xử lý như một đơn vị giao

tiếp với các thiết bị song song như máy in, bộ biến đổi ADC hoặc hoặt động ở chế độ

đơn bít như chuyển mạch, LED, FET, động cơ, loa, v.v

Bảng 1 Các chân của port 3

Với port 1 có hai chân có chức năng riêng là:

P1.1 T2EX Nạp lại/ thu nhận của bộ định thời 2

Trang 16

2.3.5 Chân cho phép bộ nhớ chương trình PSEN

AT89C51 cung cấp cho ta 4 tín hiệu điều khiển bus Tín hiệu cho phép bộ nhớ

chương trình PSEN (program store enable) là tín hiệu xuất trên chân 29 Đây là tín

hiệu điều khiển cho phép ta truy xuất bộ nhớ chương trình ngoài Chân này thường nối

với chân cho phép OE (output enable) của EPROM (hoặc ROM) để cho phép đọc các

byte lệnh

Tín hiệu PSENở logic 0 trong suốt thời gian tìm nạp lệnh Các mã nhị phân của

chương trình hay opcode (mã thao tác) được đọc từ EPROM, qua bus dữ liệu và được

chốt vào thanh ghi lệnh IR để được giải mã

tích cực (logic 1)

2.3.6 Chân cho phép chốt địa chỉ ALE

AT89C51 dùng chân 30, chân xuất tín hiệu cho phép chốt địa chỉ ALE (address

latch enable) để giải đa hợp (demultiplexing) bus dữ liệu và bus địa chỉ Khi port 0

được sử dụng làm bus địa chỉ/dữ liệu đa hợp, chân ALE xuất tín hiệu để chốt địa chỉ

(byte thấp của địa chỉ 16-bit) vào 1 thanh ghi ngoài trong suốt ½ đầu chu kỳ của bộ

nhớ Khi điều này đã được thực hiện, các chân của port 0 sẽ xuất/nhập dữ liệu hợp lệ

trong suốt ½ còn lại của chu kỳ bộ nhớ

điều khiển và có thể được dùng làm xung clock cho phần còn lại của hệ thống Nếu

mạch dao động có tần số 12 MHz, tín hiệu ALE có tần số 2 MHz Ngoại lệ duy nhất là

trong thời gian thực thi lệnh MOVX, một xung ALE sẽ bị bỏ qua Chân ALE còn được

dùng để nhận xung ngõ vào lập trình cho EPROM trên chip đối với các phiên bản của

8051 có EPROM này

2.3.7 Chân truy xuất ngoài EA

Ngõ vào này (chân 31) có thể được nối với 5V (logic 1) hoặc với GND (logic

0) Nếu chân này nối lên 5V, AT89C51 thực thi chương trình trong ROM nội, còn nếu

được nối GND thì (và chân PSENcũng ở logic 0), chương trình cần thực thi chứa

trong bộ nhớ ngoài

Trang 17

2.3.8 Chân RESET (RST)

Ngõ vào này (chân 9) là ngõ vào xóa chính (master reset) của AT89C51 dùng

để thiết lập lại trạng thái ban đầu cho hệ thống hay gọi tắt là reset hệ thống Khi lối

vào này được treo ở logic 1 tối thiểu hai chu kỳ máy, các thanh ghi bên trong của

AT89C51 được nạp các giá trị thích hợp cho việc khởi động lại hệ thống

2.3.9 Chân XTAL1 và XTAL2

Mạch dao động bên trong AT89C51 được ghép với thạch anh bên ngoài ở hai chân XTAL1 và XTAL2 (chân 18 và chân 19) Các tụ ổn định cũng được yêu cầu như

trên hình này Tần số danh định của thạch anh là 12MHz cho hầu hết các chip họ

MCS-51

2.3.10 Các chân nguồn

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

2.3.11 Cấu trúc của port xuất/nhập

Sơ đồ mạch bên trong cho các chân của port xuất/nhập được vẽ đơn giản như sơ

đồ sau:

Hình 4 Cấu trúc của port xuất nhập

Việc ghi đến một chân của port sẽ nạp lại dữ liệu vào bộ chốt của port, ngõ ra Q của bộ chốt điều khiển một transistor trường và transistor này nối với chân của port

Khả năng fanout của các port 1, 2 và 3 là 4 tải vi mạch TTL loại Shottky công suất

thấp (low power – LS) còn của port 0 là 8 tải loại LS Lưu ý là điện trở kéo lên (pull

up) sẽ không có ở port 0 (trừ phi port này làm nhiệm vụ của bus địa chỉ/dữ liệu đa

hợp), do vậy một điện trở kéo lên bên ngoài phải được cần đến Giá trị điện trở này

phụ thuộc vào đặc tính ngõ vào của thành phần nối với chân của port

Trang 18

2.3.12 Tổ chức bộ nhớ

Hầu hết các vi xử lý (CPU) đều có không gian nhớ chung cho dữ liệu và

chương trình Điều này cũng hợp lý vì các chương trình thường được lưu trên đĩa và

được nạp vào RAM để thực thi, do đó cả dữ liệu và chương trình đều lưu trú trong

RAM

Các chíp vi điều khiển hiếm khi được sử dụng giống như các CPU trong các hệ

thống máy tính, thay vào đó chúng được dùng làm thành phần trung tâm trong các

thiết kế hướng điều khiển, trong đó bộ nhớ có dung lượng giới hạn, không có ổ đĩa và

hệ điều hành Chương trình điều khiển phải thường trú trong ROM Như vậy cả

chương trình và dữ liệu có thể được lưu trữ trong AT89C51, dù vậy chúng có thể được

mở rộng bằng các thành phần bên ngoài lên 64k bytes bộ nhớ chương trình và 64k

bytes bộ nhớ dữ liệu

Bộ nhớ bên trong bao gồm ROM và RAM trên chíp của AT89C51:

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

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

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

Trang 19

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

Chi tiết về bộ nhớ RAM on-chip:

giữa các bank thanh ghi (00H-1FH), RAM địa chỉ hóa từng bit (20H-2FH), RAM đa

dụng (30H-7FH) và các thanh ghi chức năng đặc biệt (80H-FFH)

RAM đa dụng: Dưới đây là bảng địa chỉ RAM trên chip:

Bảng 2 Địa chỉ RAM

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 5D 5C 5B 5A 59 58 2A 57 56 55 54 53 52 51 50

17

10

BANK 2 0F

07

Trang 20

Bảng 3 Địa chỉ RAM (tiếp)

Địa chỉ byte địa chỉ từng bit

FF F0 F7 F6 F5 F4 F3 F2 F1 F0 B

E0 E7 E6 E5 E4 E3 E2 E1 E0 ACC D0 D7 D6 D5 D4 D3 D2 D1 D0 PSW B8 - - - BC BB BA B9 B8 IP B0 B7 B6 B5 B4 B3 B2 B1 B0 P3 A8 AF - - AC AB AA A9 A8 IE A0 A7 A6 A5 A4 A3 A2 A1 A0 P2

99 Not bit addressable SBUF

98 9F 9E 9D 9C 9B 9A 99 98 SCON

90 97 96 95 94 93 92 91 90 P1 8D Not bit addressable TH1 8C Not bit addressable TH0 8B Not bit addressable TL1 8A Not bit addressable TL0

89 Not bit addressable TMOD

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

87 Not bit addressable PCON

83 Not bit addressable DPH

82 Not bit addressable DPL

81 Not bit addressable SP

80 87 86 85 84 83 82 81 80 PO Bảng tóm tắt bộ nhớ dữ liệu trên chip

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

dùng cách đánh địa chỉ trực tiếp hoặc 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:

Lệnh này di chuyển một byte 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 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:

Trang 21

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

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

AT89C51 chứa 210 bit được địa chỉ hóa, trong đó 128 bít là ở các địa chỉ byte

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

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 qủa

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

xuất nhập từng bit

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 các bit phụ thuộc vào lệnh được dùng Ví dụ, để đặt

bít 67H, ta dùng lệnh sau:

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

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

Các băng thanh ghi

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

AT89C51 hỗ trợ 8 thanh ghi (R0 đến R7) và theo mặc định (sau khi reset lại hệ thống)

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

vào thanh ghi tích lũy

Đây là lệnh một byte dùng địa chỉ thanh ghi Tất nhiên, thao tác tương tự có thể

được thi hành bằng lệnh 2 byte dùng địa chỉ trực tiếp nằm trong byte thứ hai:

Các lệnh dùng các thanh ghi R0 đến R7 thì sẽ ngắn hơn và nhanh hơn các lệnh

tương ứng nhưng dùng địa chỉ trực tiếp Các giá trị dữ liệu được dùng thường xuyên

nên dùng một trong các thanh ghi này

Trang 22

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

thanh ghi trong từ trạng thái chương trình (PSW) Giả sử rằng bank thanh ghi 3 được

tích cực, lệnh sau sẽ ghi nội dung của thanh ghi tích lũy vào địa chỉ 18H:

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

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

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

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

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

Các thanh ghi trong AT89C51 đượ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 trực tiếp, sẽ không có

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

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

register) ở vùng trên của RAM nội, từ địa chỉ 80H – 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ỉ SFR được truy xuất

dùng địa chỉ trực tiếp Chú ý rằng một vài SFR có thể địa chỉ hóa bit hoặc byte Người

thiết kế phải thận trọng khi truy xuất bit và byte Ví dụ lệnh sau:

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ả

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

Từ trạng thái chương trình (PSW – program status word ) ở địa chỉ 0DH chứa

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

Trang 23

Bảng 4 Từ trạng thái chương trình

PSW.7 PSW.6 PSW.5 PSW.4 PSW.3

PSW.2 PSW.1 PSW.0

CY

AC F0 RS1 RS0

OV

P

D7H D6H D5H D4H D3H

D2H D1H D0H

Cờ nhớ

Cờ nhớ phụ

Cờ 0 Bit chọn bank thanh ghi Bit chọn bank thanh ghi

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

Cờ tràn

Dự trữ

Cờ Parity

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

phép trừ Ví dụ, nếu thanh ghi tích lũy chứa FFH, thì lệnh sau:

ADD A, #1

Sẽ trả về thanh ghi tích lũy kết quả 00H và set cờ nhớ trong PSW Cờ nhớ cũng có thể

xem như một thanh ghi 1 bit cho các lệnh luận lý thi hành trên bit Ví dụ, lệnh sẽ AND

bit 25H với cờ nhớ và đặt kết quả trở vào cờ nhớ:

ANL C,25H

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

thấp trong khoảng 0AH đến 0FH Nếu các giá trị cộng được là số BCD, thì sau

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

lớn hơn 9 trở về tâm từ 0 đến 9

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

Các bít chọn bank thanh ghi: Các bit chọn băng thanh ghi (RS0 và RS1) xác định

bank thanh ghi được tích cực Chúng được xóa sau khi reset lại hệ thống và được

thay đổi bằng phần mềm nếu cần Ví dụ, ba lệnh sau đây cho phép bank thanh ghi 3

và di chuyển nội dung của thanh ghi R7 (địa chỉ là 1FH) đến thanh ghi tích lũy:

Cờ tràn: (OV) được set 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ủa nó có nằm trong tầm xác định không Khi các số không

Trang 24

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

Thanh ghi B:

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ả kết quả 16 bit trong A (byte thấp) và B (byte cao) Lệnh DIV AB sẽ chia A

cho B rồi trả về kết quả nguyên trong A và phần dư 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 từ F0H đến F7H

Con trỏ ngăn xếp:

Con trỏ ngăn xếp (SP – stack pointer) là một thanh ghi 8 bit ở địa 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 dữ 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 tăng SP trước khi ghi dữ liệu, và lệnh lấy dữ liệu ra khỏi ngăn

xếp sẽ đọc dữ liệu và giảm SP Ngăn xếp của AT89C51 đượ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 AT89C51

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

Vùng stack được giới hạn là 32 bytes vì địa chỉ cao nhất của RAM trên chip là

7EH Giá trị 5FH được dùng ở đây vì SP tăng lên 60H trước khi thao tác cất vào stack

đầu tiên được thực thi

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 gia trị 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ỉ 08H Nếu phần mềm ứng dụng không khởi động

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

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

thời và lấy lại dữ 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, RETI) để cất và lấy lại bộ đếm chương

trình

Con trỏ dữ liệu:

Trang 25

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:

MOVX @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 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)

Các thanh ghi port xuất nhập: Các thanh ghi port của AT89C51 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 này cung cấp một khả năng giao tiếp

thuận lợi

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

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

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

1 ở địa chỉ 8BH (TL1: byte thấp) và 8DH (TH1: byte cao) Việc vận hành timer được

set bởi thanh ghi timer mode (TMOD) ở địa chỉ 89H và thanh ghi điều khiển timer

(TCON) ở địa chỉ 88H Chỉ có TCON được địa chỉ hóa từng bit

Các thanh ghi điều khiển cổng nối tiếp: AT89C51 chứa một port nối tiếp trên chip

dành cho việc trao đổi thông tin với 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ó 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 dữ liệu truyền và nhận Khi truyền dữ 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 và ở địa chỉ byte là 98H

Các thanh ghi ngắt: AT89C51 có cấu trúc ngắt 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 thanh ghi cho phép

ngắt(IE) ở địa chỉ 8AH Cả hai thanh ghi được địa chỉ hóa từng bit

Các 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:

Trang 26

Bảng 5 Thanh ghi điều khiển công suất

PD IDL

-Bít tăng gấp đôi tốc độ baud, bit này khi set làm cho tốc độ baud tăng 2 ở chế độ 1, 2 và 3 của port nối tiếp

-Không định nghĩa -Không định nghĩa -Không định nghĩa -Bit cờ đa mụch đích 1 -Bit cờ đa mụch đích 2 -Nguồn giảm; thiết lập để tích cực chế độ nguồn giảm, chỉ ra khỏi chế độ bằng cách reset

-Chế độ nghỉ; thiết lập để tích cực chế độ nghỉ

Chỉ ra khỏi chế độ bằng cách reset hệ thống

Bộ nhớ ngoài:

AT89C51 có khả năng mở rộng bộ nhớ đến 64K bộ nhớ chương trình và 64K

bộ nhớ dữ liệu bên ngoài Do đó có thể dùng thêm ROM và RAM nếu cần

Khi dùng bộ nhớ ngoài, port 0 không còn là một port I/O thuần túy nữa Nó

được đa hợp kênh giữa bus địa chỉ ( A0-A7 ) và bus dữ liệu ( D0-D7 ) với tín hiệu

ALE để chốt byte thấp của địa chỉ khi bắt đầu mỗi chu kỳ bộ nhớ Port 2 thông thường

được dùng cho byte cao của địa chỉ

Trong nửa đầu của mỗi chu kỳ bộ nhớ, byte thấp của địa chỉ được cấp trong

port 0 và được chốt bằng xung ALE Một IC chốt 74HC373 ( hoặc tương đương ) sẽ

giữ byte địa chỉ thấp trong phần còn lại của chu kỳ bộ nhớ Trong nửa sau của chu kỳ

bộ nhớ port 0 được dùng như bus dữ liệu và được đọc hoặc ghi tùy theo lệnh

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

Bộ nhớ chương trình ngoài là một IC ROM được phép bởi tín hiệu PSEN Hình

sau mô tả một cách nối một EPROM vào AT89C51:

D0-D7 EPROM A0-A7 A8-A15

OE

D 74HC373 Q

Trang 27

Hình 6 Giao tiếp giữa AT89C51 và EPROM

Một chu kỳ đọc máy AT89C51 có 12 chu kỳ xung nhịp Nếu bộ dao động trên

chip được lái bởi một thạch anh 12 MHz thì chu kỳ máy kéo dài 1µs Trong một chu

kỳ máy sẽ có 2 xung ALE và 2 byte được đọc từ bộ nhớ chương trình (nếu lệnh hiện

hành là một byte thì byte thứ hai sẽ được loại bỏ)

Giản đồ thời gian của một chu kỳ lấy lệnh được cho bởi hình sau:

Hình 7 Giản đồ thời gian đọc bộ nhớ chương trình ngoài

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

Hình 8 Giao tiếp giữa AT89C51 và RAM

Bộ nhớ dữ liệu ngoài là một bộ nhớ RAM được cho phép ghi/đọc bằng các tín

hiệu WR và RD (các chân P3.6 và P3.7 thay đổi chức năng) Chỉ có một cách truy xuất

D 74HC373 Q

G

D0-D7 EPROM A0-A7

A8-A15

OE WE

Trang 28

bộ nhớ dữ liệu ngoài là với lệnh MOVX dùng con trỏ dữ liệu (DPTR) 16 bit hoặc R0

và R1 xem như thanh ghi địa chỉ

Kết nối bus địa chỉ và bus dữ liệu giữa RAM và AT89C51 cũng giống EPROM

và do đó cũng có thể lên đến 64 byte bộ nhớ RAM Ngoài ra, chân RD của AT89C51

được nối tới chân cho phép xuất (OE) của RAM và chân WR được nối tới chân ghi

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

máy và nó trả về mức thấp RST có thể được kích khi cấp điện dùng một mạch RC

Hình 10 Mạch reset hệ thống

Trang 29

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

tóm tắt trong bảng sau:

Bảng 6 Trạng thái các thanh ghi sau khi reset

Đếm chương trình Tích lũy

B PSW

SP DPTR Port 0-3

IP

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

SBUF PCON(HMOS) PCON(CMOS)

0000H 00H 00H 00H 07H 0000H FFH XXX00000B 0XX00000B 00H 00H 00H 0XXXXXXB 0XXX0000B

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

đặt lạ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ớ trong 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

2.3.16 Hoặt động định thời (timer):

Giới thiệu

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

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

làm nguồn xung nhịp cho flip-flop báo tràn của timer (flip-flop cờ) Giá trị nhị phân

trong các flip-flop của các 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 bộ timer 16 bit, mỗi bộ có bốn cách làm việc Người ta sử

dụng các timer để: a) định khoảng thời gian giữa hai sự kiện b) đếm sự kiện hoặc c)

tạo tốc độ baud cho port nối tiếp trong AT89C51

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

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

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

kiện ra các ngõ ra Các ứng dụng khác có thể sử dụng việc tạo xung nhịp đều đặn của

timer 1 để đo thời gian trôi qua giữa hai sự kiện (ví dụ: đo độ rộng xung)

Trang 30

Đế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 nào ngoài có thể cung cấp một chuyển trạng thái trên một chân của

AT89C51 Các timer cũng có thể cung cấp xung nhịp tốc độ baud cho port nối tiếp

trong AT89C51

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

bảng sau:

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

TCON TMOD TL0 TL1 TH0 TH1

Điều khiển timer Chế độ timer Byte thấp của timer 0 Byte thấp của timer 1 Byte cao của timer 0 Byte cao của timer 1

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

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

Thanh ghi chế độ timer (TMOD):

cho timer 0 và timer 1

Bảng 8 Tóm tắt thanh ghi TMOD

M1 M0

GATE C/T M1 M0

0=bộ định khoảng thời gian Bit 1 chọn chế độ (mode) Bit 0 chọn chế độ 00: chế độ 0: timer 13 bit 01: chế độ 1: timer 16 bit 10: chế độ 2: tự động nạp lại 8255A bit 11: chế độ 3: tách timer

Bit (mở) cổng Bit chọn counter/timer Bit 1 cuả chế độ Bit 0 cuả chế độ

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

bit điều khiển cho timer 0 và timer 1

Bảng 9 Tóm tắt thanh ghi TCON

TCON.7

TCON.6

TF1 TR1

8FH 8EH

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

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

Trang 31

IE0 IT0

8DH 8CH 8BH 8AH

B9H 88H

Cờ ngắt bên ngoài 0 (kích khởi cạnh)

Cờ ngắt bên ngoài 0 (kích khởi cạnh hoặc mức)

Các chế độ timer:

a) chế độ 0, chế độ timer 13 bit

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

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

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à LBS là bit 0 của TLx Các thanh

ghi timer (TLx/THx) có thể được đọc hoặc ghi bất cứ lúc nào bằng phần mềm

Xung nhịp

TLx THx (5 bit) (8 bit)

TFx

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àylên đến FFH xuống

00H và nạp lại , chế độ này rất thông dụng vf 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

Trang 32

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

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

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

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

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

độ 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 TF1)

2.3.17 Nguồn tạo xung nhịp

(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

Trang 33

Crytal

Timer Clock T0 or T1

0=Up (Internal Timing)

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

Nếu C/T = 0 hoạt động timer liên tục được chọn và timer được dùng cho việc định khoảng thời gian Lúc đó, timer lấy xung nhịp từ bộ dao động trên chip Bộ

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

ứng dụng Như vậy thạch anh 12 MHz sẽ cho tốc độ xung nhịp timer 1 MHz 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 đượ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 nayg tăng thêm 1 cho mỗi sự kiện

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

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

dùng các bit điều khiển chạy: TRx trong TCON, TRx bị xóa sau khi reset lại 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

Trang 34

Cho chạy và dừng timer

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

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

bằng lệnh CLR TR0

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

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

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

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

dừng, các bit cờ được kiểm tra và xóa, các thanh ghi timer được đọc và cập nhật theo

đòi hỏi của các ứng dụng

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

các lệnh sau khi khởi động timer 1 như timer 16bit (chế độ 1) có xung nhịp từ bộ dao

động trên chip cho việc định khoảng thời gian

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

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

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

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

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

FFFFH sang 0000H

Đọc timer dang chạy

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

phải đọc 2 thanh ghi timer “sai pha” có thẻ xảy ra nếu byte thấp tràn vào byte cao giữa

hai lần đọc Giá trị có thể đọc được không đúng Giải pháp là đọc byte cao trước, byte

Trang 35

sau, rồi lại byte cao một lần nữa Nếu byte cao đã thay đổi thì lập lại các hoạt động

đọc

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

sát với AT89C51 hoạt động với tần số 12 MHz Như vậy xung nhịp của các timer có

tần số là 1 MHz

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

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

lệnh Lệnh ngắn nhất của AT89C51 là một chu kỳ máy hay 1 µs Sau đây là bảng tóm

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

xung nhịp cho AT89C51 có tần số 12MHz)

Bảng 10 Kỹ thuật lập trình khoảng thời gian

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

≈ 10

256

65535 Không giới hạn

bằng phần mềm timer 8 bit với tự động nạp lại timer 16 bit

timer 16 bit cộng với các vòng lặp phần mềm

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

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

Giới thiệu

AT89C51 có một port nối tiếp trong chip có thể hoạt động ở nhiều hcế độ khác

trên một dãy tần số rộng Chức năng chủ yếu của một port nối tiếp là thực hiện chuyển

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

dữ liệu nhập

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

chân 10 (RxD)

Port nối tiếp cho hoạt động song công (full duplex: tức là 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

the đầ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) ở tại địa chỉ 99H thật sự là hai

bộ đếm có thể hoạt động độc lập Viết vào SBUF để truy xuất dữ liệu thu được Đây là

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

Trang 36

SUBF (chỉ ghi) Thanh ghi dịch

SBUF (chỉ đọc)

BUS nội AT89C51 Hình 12 Sơ đồ port nối tiếp Thanh ghi điều khiển port nối tiếp ( SCON) ở địa chỉ 98H là thanh ghi có địa

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

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

Các bit trạng thái cóthể được kiểm tra bằng phần mềm hoặc có thể được lập trình để

tạo ngắt

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 của 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

Thanh ghi 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ỉ 98 H Sau đây sác bảng tóm tắt thanh ghi SCON và

các chế độ của por nối tiếp:

Bảng 11 Tóm tắt thanh ghi điều khiển chế độ nối tiếp SCON

REN TB8 RB8

9FH 9EH 9DH

9CH 9BH 9AH

-Bit 0 của chế độ port nối tiếp -Bit 1 của chế độ port nối tiếp -Bit 1 của chế độ 2 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

-Cho phép bộ thư phải đặt lên 1 để thu ( nhận ) ký tự

-Bit 8 phát, bit thứ 9 được phát các chế độ 2

và 3; được đặt và xóa bằng phần mềm -Bit 8 thu, bit thứ 9 thu được

Trang 37

-Cờ ngắt phát Đặt lên 1 khi kết thúc thu ký tự; được xóa băng phần mềm

-Cờ ngắt thu Đặt lên 1 khi kết thúc thu ký tự; được xóa bằng phần mềm

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

Cố định (fosc/12) Thay đổi (đặt bằng timer)

Cố định(fosc/12 hoặc fosc/64) Thay đổi ( đặt bằng timer)

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 hai

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 dữ liệu thứ 9, phụ thuộc vào các đặc tính kỹ thuật của thiết bị nối tiếp sử

dụng bit dữ liệu thứ 9 cũng đóng vai trò quan trọng trong truuyền thông đa xử lý

Thêm 1 bit parity:

Trang 38

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

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

bởi chu ký máy để thiết lập kiểm tra chẵn với 8 bit trong thanh ghi tích lũy

Các cờ ngắt:

truyền thông nối tiếp dùng AT89C51 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

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

Như đã nói, 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ố dao động trên chip của AT89C51 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 danh định là 12 MHz, tìm tốc độ baud chế độ 0 là

Hình 13 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ố dao động chia

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

Trang 39

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

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

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

Vì PCON không được định địa chỉ theo bit, nên để đặt bit SMOD lên 1 cần phải thao theo các lệnh sau:

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

timer 1 Vì timer hoạt động ở tần số tương đối cao, tràn timer được chia thêm cho 32

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

2.3.19 Hoạt động ngắt

Ngắt là hoạt động ngừng tạm thời một chương trình này để thi hành một chương trình khác Các ngắt có một vai trò quan trọng trong thiết kế và khả năng thực

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

việc và giải quyết một công việc nào đó trong khi một chương trình khác đang thực

thi

Một hệ thống được điều khiển bằng ngắt cho ảo giác là làm nhiều việc đồng thời Dĩ nhiên CPU mỗi lần không thể thực thi một chương trình để thực thi một

chương trình khác, rồi quay trở lại chương trình khi công việc khác đó thực hiện xong

Khi có yêu cầu ngắt, chương trình giải quyết yêu cầu ngắt được gọi là chương trình

phục vụ ngắt (ISR: Interrupt Service Reutine)

Tổ chức ngắt

AT89C51 có 5 nguồn ngắt:

2 ngắt ngoài

2 ngắt từ timer

1 ngắt port nối tiếp

Mỗi nguồn ngắt được cho phép hoặc không cho phép từng ngắt một qua thanh fhi chức năng đặc biệt cố định địa chỉ bit IE (Interrupt Enable: cho phép ngắt) ở địa chỉ

A8H Cũng như các bit cho phép mỗi nguồn ngắt, có một bit cho phép hoặc cấm toàn

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

Bảng 13 Tóm tắt thanh ghi IE

Trang 40

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

IE.6 IE.5 IE.4 IE.3 IE.2 IE.1 IE.0

EA

EA ET5 E5 ET1 EX1 ET0 EX0

AFH AEH ADH ACH ABH AAH A9H A8H

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

PT2

PS PT1 PX1 PT0 PX0

BDH BCH BBH BAH B9H B8H

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

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

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

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

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

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

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

Xử lý ngắt:

Khi có một ngắt xảy ra và được CPU chấp nhận, chương trình chính bị ngắt quãng Những hoạt động sau xảy ra:

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

Cất bộ đếm chương trình (PC) vào ngăn xếp

Trạng thái ngắt hiện hành được lưu lại

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

Bộ đếm chương trình PC được nạp địa chỉ vector của trình phục vụ ngắt ISR

ISR được thực thi

ISR được thực thi để đáp ứng công việc của ngắt ISR hoàn tất bằng việc thực hiện lệnh RETI Điều này làm lấy lại giá trị cũ của PC từ ngăn xếp và lấy lại trạng thái

ngay trước khi ngắt của chương trinh mẹ chương trình mẹ lại tiếp tục được thi hành

tiếp tại vị trí mà nó dừng

Các vector ngắt:

Ngày đăng: 21/12/2017, 12:54

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
[4]. Phạm Minh Hà, Giáo trình Kỹ Thuật mạch điện tử – NXB Khoa học kỹ thuật Sách, tạp chí
Tiêu đề: Giáo trình Kỹ Thuật mạch điện tử
Tác giả: Phạm Minh Hà
Nhà XB: NXB Khoa học kỹ thuật
[5]. Tống Văn On, Họ vi điều khiển 8051– NXB lao động xã hội Sách, tạp chí
Tiêu đề: Họ vi điều khiển 8051
Tác giả: Tống Văn On
Nhà XB: NXB lao động xã hội
[1]. I.Scott Mackenzie, The 8051 microcontroller Khác
[2]. Nguyễn Tăng Cường, Phan Quốc Thắng, Cấu trúc và lập trình họ vi điều khiển 8051 – NXB Khoa học kỹ thuật Khác
[3]. Nguyễn Kim Giao, Giáo trình Kỹ Thuật Số– Tài liệu lưu hành nội bộ của trường ĐH Công Nghệ Khác
[6]. Ngô Diên Tập, Lập trình ghép nối máy tính trong Windows– NXB Khoa học kỹ thuật Khác
[7]. Đỗ Xuân Tiến, Kỹ thuật vi xử lý và lập trình Assembly cho hệ vi xử lý – NXB Khoa học kỹ thuật Khác
[8]. Trần Quang Vinh, Nguyên lý phần cứng và kỹ thuật ghép nối máy tính – NXB Giáo Dục Khác

TỪ KHÓA LIÊN QUAN

w