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

Bài giảng vi điều khiển

131 289 6

Đ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 131
Dung lượng 10,88 MB

Nội dung

Các khối này bao gồm bộ nhớ để chứa dữ liệu và chương trình thựchiện, các mạch điện giao tiếp ngoại vi để xuất nhập và điều khiển trở lại, các khối nàycùng liên kết với vi xử lý thì mới

Trang 1

Mục lục Nội dung

Mục lục 1

CHƯƠNG 1 HỌ VI ĐIỀU KHIỂN MCS-51 4

1.1 Tổng quan 4

1.2 Phân biệt vi xử lý và vi điều khiển 4

1.3 Họ vi điều khiển MCS-51 9

1.3.1 Lịch sử phát triển họ MCS-51 9

1.3.2 Khảo sát vi điều khiển 89S52 12

1.3.2.1 Tổng quát 12

1.3.2.2 Sơ đồ chân 14

1.3.2.3 Cấu trúc của port xuất nhập 19

1.3.2.4 Tổ chức bộ nhớ 19

1.3.2.5 Các thanh ghi có chức năng đặc biệt 23

1.3.2.6 Bộ nhớ ngoài 28

1.3.2.7 Hoạt động Reset 29

1.4 Hoạt động định thời 30

1.4.1 Tổng quát 30

1.4.2 Các thanh ghi điều khiển Timer 31

1.4.3 Các chế độ hoạt động 33

1.5 Hoạt động của port nối tiếp 37

1.5.1 Tổng quát 37

1.5.2 Thanh ghi điều khiển port nối tiếp - SCON 38

1.4.3 Các chế độ hoạt động 39

1.6 Hoạt động ngắt 46

1.6.1 Tổng quát 46

1.6.2 Các thanh ghi điều khiển ngắt 47

Trang 2

1.6.3 Các hoạt động ngắt 47

CHƯƠNG 2: PHẦN MỀM HỖ TRỢ CHO MÔ ĐUN 53

2.1 Phần mềm mô phỏng phần cứng: 53

2.1.1 Cài đặt: 53

2.1.2 Hướng dẫn sử dụng: 59

2.1.2.1 Hướng dẫn tạo dự án mới: 60

2.1.2.2 Hướng dẫn vẽ mạch nguyên lý và mô phỏng: 64

2.2 Phần mềm lập trình C cho họ MCS-51……… 79

2.2.1 Cài đặt phần mềm mikroC for 8051………79

2.2.2 Hướng dẫn sử dụng phần mềm mikroC for 8051……….……… 83

2.2.3 Tập lệnh C cho họ 8051……….…….……93

2.2.3.1 Định nghĩa ……….…….…… 93

2.2.3.2 Biểu diễn số học……….…….……… 93

2.2.3.3 Hàm trễ……….….…………93

2.2.3.4 Khai báo kiểu dữ liệu cho biến……….………93

2.2.3.5 Các phép toán……… ……… 94

2.2.3.6 Tập lệnh có cấu trúc……… ………95

2.3 Phần mềm nạp code cho họ 8051……… ……….97

2.3.1 Cài đặt……… ………97

2.3.2 Hướng dẫn sử dụng………100

CHƯƠNG 3: LẬP TRÌNH ỨNG DỤNG 99

3.1 Lập trình điều khiển led đơn 99

3.2 Lập trình điều khiển RELAY 102

3.3 Lập trình hiển thị LCD 105

3.4 Lập trình điều khiển led 7 đoạn 107

3.4.1 Giới thiệu về LED 7 đoạn 107

3.4.2 Mã LED: 107

3.4.3 Lập trình điều khiển 1 LED 7 đoạn: 108

3.4.4 Lập trình điều khiển LED 7 đoạn bằng phương pháp quét……….109

Trang 3

Bài giảng Vi điều khiển và Ứng dụng

3.5 Lập trình giao tiếp phím ấn 113

3.6 Lập trình điều khiển động cơ không đồng bộ 3 pha quay 2 chiều 115

3.7 Lập trình điều khiển đèn giao thông hiện số 118

3.8 Lập trình giao tiếp không dây qua Bluetooth 125

3.8.1 Mô hình giao tiếp 125

3.8.2 Giới thiệu Module HC05: 126

3.8.3 Giao tiếp HC-05 với vi điều khiển họ 8051: 126

3.8.4 Điều khiển thiết bị từ Windows: 129

3.8.4.1 Kết nối Module HC-05 với máy tính: 129

3.8.4.2 Tạo giao diện điều khiển……….131

Tài liệu tham khảo 135

Trang 4

CHƯƠNG 1 HỌ VI ĐIỀU KHIỂN MCS-51

1.1 Tổng quan

Trong những thập niên cuối thế kỷ XX, từ sự ra đời của công nghệ bán dẫn, kỹthuật điện tử đã có sự phát triển vượt bậc Các thiết bị điện tử sau đó đã được tích hợp vớimật độ cao và rất cao trong các diện tích nhỏ,nhờ vậy các thiết bị nhỏ hơn và nhiều chứcnăng hơn Các thiết bị điện tử ngày càng nhiều chức năng trong khi giá thành ngày càng

rẻ hơn, chính vì vậy điện tử có mặt khắp nơi Bước đột phát mới trong kỹ thuật điện tử làtạo ra một thiết bị điện tử mới là Vi điều khiển

Một bộ vi điều khiển (microcontroller) được xem như là “một máy tính trong mộtchip” – nó là một mạch điện tích hợp trên một chip, có thể lập trình được, dùng để điềukhiển hoạt động của một hệ thống

Vi điều khiển được ứng dụng rất rộng rãi hiện nay Đa số các lĩnh vực đều có thểứng dụng vi điều khiển Và đối với nền cơ khí tự động hoá bây giờ thì có lẽ nó đã gắnliền với vi xử lý Vi điều khiển là một câu trúc siêu nhỏ, gồm các linh kiện điện tử cókích thước micro hoặc nano kết hợp với nhau, và được nối với các thiết bị bên ngoài quacác chân vi điều khiển Vì vậy hiểu rõ cấu trúc của nó, ta sẽ hiểu được mình đang làmviệc với cái gì? Và nó hoạt động như thế nào?

1.2 Phân biệt vi xử lý và vi điều khiển

Về cơ bản hai khái niệm này không khác nhau nhiều, “vi xử lý” là thuật ngữ chungdùng để đề cập đến kỹ thuật ứng dụng các công nghệ vi điện tử, công nghệ tích hợp vàkhả năng xử lý theo chương trình vào các lĩnh vực khác nhau Vào những giai đoạn đầutrong quá trình phát triển của công nghệ vi xử lý, các chip (hay các vi xử lý) được chế tạochỉ tích hợp những phần cứng thiết yếu như CPU cùng các mạch giao tiếp giữa CPU vàcác phần cứng khác Trong giai đoạn này, các phần cứng khác (kể cả bộ nhớ) thườngkhông được tích hợp trên chip mà phải ghép nối thêm bên ngoài Các phần cứng nàyđược gọi là các ngoại vi (Peripherals) Về sau, nhờ sự phát triển vượt bậc của công nghệtích hợp, các ngoại vi cũng được tích hợp vào bên trong IC và người ta gọi các vi xử lý

đã được tích hợp thêm các ngoại vi là các “vi điều khiển”

Trang 5

Bài giảng Vi điều khiển và Ứng dụng

Vi xử lý có các khối chức năng cần thiết để lấy dữ liệu, xử lý dữ liệu và xuất dữliệu ra ngoài sau khi đã xử lý Và chức năng chính của Vi xử lý chính là xử lý dữ liệu,chẳng hạn như cộng, trừ, nhân, chia, so sánh.v.v Vi xử lý không có khả năng giao tiếptrực tiếp với các thiết bị ngoại vi, nó chỉ có khả năng nhận và xử lý dữ liệu mà thôi

Để vi xử lý hoạt động cần có chương trình kèm theo, các chương trình này điều khiển cácmạch logic và từ đó vi xử lý xử lý các dữ liệu cần thiết theo yêu cầu Chương trình là tậphợp các lệnh để xử lý dữ liệu thực hiện từng lệnh được lưu trữ trong bộ nhớ, công việcthực hành lệnh bao gồm: nhận lệnh từ bộ nhớ, giải mã lệnh và thực hiện lệnh sau khi đãgiải mã Để thực hiện các công việc với các thiết bị cuối cùng, chẳng hạn điều khiển động

cơ, hiển thị kí tự trên màn hình đòi hỏi phải kết hợp vi xử lý với các mạch điện giaotiếp với bên ngoài được gọi là các thiết bị I/O (nhập/xuất) hay còn gọi là các thiết bịngoại vi Bản thân các vi xử lý khi đứng một mình không có nhiều hiệu quả sử dụng,nhưng khi là một phần của một máy tính, thì hiệu quả ứng dụng của Vi xử lý là rất lớn

Vi xử lý kết hợp với các thiết bị khác được sử trong các hệ thống lớn, phức tạp đòi hỏiphải xử lý một lượng lớn các phép tính phức tạp, có tốc độ nhanh Chẳng hạn như các hệthống sản xuất tự động trong công nghiệp, các tổng đài điện thoại, hoặc ở các robot cókhả năng hoạt động phức tạp v.v

Bộ Vi xử lý có khả năng vượt bậc so với các hệ thống khác về khả năng tính toán,

xử lý, và thay đổi chương trình linh hoạt theo mục đích người dùng, đặc biệt hiệu quả đốivới các bài toán và hệ thống lớn Tuy nhiên đối với các ứng dụng nhỏ, tầm tính toánkhông đòi hỏi khả năng tính toán lớn thì việc ứng dụng vi xử lý cần cân nhắc Bởi vì hệthống dù lớn hay nhỏ, nếu dùng vi xử lý thì cũng đòi hỏi các khối mạch điện giao tiếpphức tạp như nhau Các khối này bao gồm bộ nhớ để chứa dữ liệu và chương trình thựchiện, các mạch điện giao tiếp ngoại vi để xuất nhập và điều khiển trở lại, các khối nàycùng liên kết với vi xử lý thì mới thực hiện được công việc Để kết nối các khối này đòihỏi người thiết kế phải hiểu biết tinh tường về các thành phần vi xử lý, bộ nhớ, các thiết

bị ngoại vi Hệ thống được tạo ra khá phức tạp, chiếm nhiều không gian, mạch in phứctạp và vấn đề chính là trình độ người thiết kế Kết quả là giá thành sản phẩm cuối cùng

Trang 6

các nhà chế tạo tích hợp một ít bộ nhớ và một số mạch giao tiếp ngoại vi cùng với vi xử

lý vào một IC duy nhất được gọi là Microcontroller-Vi điều khiển Vi điều khiển có khảnăng tương tự như khả năng của vi xử lý, nhưng cấu trúc phần cứng dành cho người dùngđơn giản hơn nhiều

Vi điều khiển ra đời mang lại sự tiện lợi đối với người dùng, họ không cần nắmvững một khối lượng kiến thức quá lớn như người dùng vi xử lý, kết cấu mạch điện dànhcho người dùng cũng trở nên đơn giản hơn nhiều và có khả năng giao tiếp trực tiếp vớicác thiết bị bên ngoài Vi điều khiển tuy được xây dựng với phần cứng dành cho người sửdụng đơn giản hơn, nhưng thay vào lợi điểm này là khả năng xử lý bị giới hạn (tốc độ xử

lý chậm hơn và khả năng tính toán ít hơn, dung lượng chương trình bị giới hạn) Thayvào đó, Vi điều khiển có giá thành rẻ hơn nhiều so với vi xử lý, việc sử dụng đơn giản, do

đó nó được ứng dụng rộng rãi vào nhiều ứng dụng có chức năng đơn giản, không đòi hỏitính toán phức tạp

Vi điều khiển được ứng dụng trong các dây chuyền tự động loại nhỏ, các robot cóchức năng đơn giản, trong máy giặt, ôtô v.v

Các dòng vi điều khiển thông dụng:

Họ vi điều khiển AMCC: (do tập đoàn "Applied Micro Circuits Corporation" sản

xuất) Từ tháng 5 năm 2004, họ vi điều khiển này được phát triển và tung ra thị trườngbởi IBM

Trang 7

Bài giảng Vi điều khiển và Ứng dụng

• PPC 440EP/EPx/GRx

• PPC 440SP/SPe

Họ vi điều khiển Atmel:

• Dòng 8051 (8031, 8051, 8751, 8951, 8032, 8052, 8752, 8952)

• Dòng Atmel AT91 (Kiến trúc ARM THUMB)

• Dòng AT90, Tiny & Mega – AVR (Atmel Norway design)

• Dòng Atmel AT89 (Kiến trúc Intel 8051/MCS51)

• Dòng MARC4

Họ vi điều khiển Cypress MicroSystems

• CY8C2xxxx (PSoC)

Họ vi điều khiển Freescale Semiconductor Từ năm 2004, những vi điều khiển này

được phát triển và tung ra thị trường bởi Motorola

Trang 8

• FR-V Family (32 bit RISC)

Họ vi điều khiển Intel

Họ vi điều khiển Microchip

• PIC 8-bit (xử lý dữ liệu 8-bit, 8-bit data bus)

• Từ lệnh dài 12-bit (Base-line): PIC10F, PIC12F và một vài PIC16F

• Từ lệnh dài 14-bit (Mid-Range và Enhance Mid-Range): PIC16Fxxx,PIC16F1xxx

• Từ lệnh dài 16-bit (High Performance): PIC18F

• PIC 16-bit (xử lý dữ liệu 16-bit)

• PIC điều khiển động cơ: dsPIC30F

• PIC có DSC: dsPIC33F

• Phổ thông: PIC24F, PIC24E, PIC24H

• PIC 32-bit (xử lý dữ liệu 32-bit): PIC32MX

Họ vi điều khiển National Semiconductor

• COP8

• CR16

Trang 9

Bài giảng Vi điều khiển và Ứng dụng

Họ vi điều khiển STMicroelectronics

Năm 1976 Intel giới thiệu bộ vi điều khiển (microcontroller) 8748, một chip tương

tự như các bộ vi xử lý và là chip đầu tiên trong họ MCS-48 Độ phức tạp, kích thước vàkhả năng của Vi điều khiển tăng thêm một bậc quan trọng vào năm 1980 khi intel tung rachip 8051, bộ Vi điều khiển đầu tiên của họ MCS-51 và là chuẩn công nghệ cho nhiều họ

Vi điều khiển được sản xuất sau này Chip 8051 chứa trên 60000 transistor bao gồm 4Kbyte ROM, 128 byte RAM, 32 đường xuất nhập, 1 port nối tiếp và 2 bộ định thời 16 bit.Sau đó rất nhiều họ Vi điều khiển của nhiều nhà chế tạo khác nhau lần lượt được đưa rathị trường với tính năng được cải tiến ngày càng mạnh

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

Vào năm 1980 Intel công bố chíp 8051(80C51), bộ vi điều khiển đầu tiên của họ

vi điều khiển MCS-51 Nó bao gồm 4KB ROM, 128 byte RAM, 32 đường xuất nhập, 1port nối tiếp và 2 bộ định thời 16 bit Tiếp theo sau đó là sự ra đời của chip 8052, 8053,

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

Hiện nay Intel không còn cung cấp các loại Vi điều khiển họ MCS-51 nữa, thay

Trang 10

Matra&Dallas, Semiconductors được cấp phép làm nhà cung cấp thứ hai cho các chip của

họ MSC-51 Chip Vi điều khiển được sử dụng rộng rãi trên thế giới cũng như ở Việt Namhiện nay là Vi điều khiển của hãng Atmel với nhiều chủng loại vi điều khiển khác nhau

Hãng Atmel có các chip Vi điều khiển có tính năng tương tự như chip Vi điềukhiển MCS-51 của Intel, các mã số chip được thay đổi chút ít khi được Atmel sản xuất

Mã số 80 chuyển thành 89, chẳng hạn 80C52 của Intel khi sản xuất ở Atmel mã số thành89C52 (Mã số đầy đủ: AT89C52) với tính năng chương trình tương tự như nhau Tương

tự 8051,8053,8055 có mã số tương đương ở Atmel là 89S52,89C53,89C55 Vi điều khiểnAtmel sau này ngày càng được cải tiến và được bổ sung thêm nhiều chức năng tiện lợihơn cho người dùng

Sau khoảng thời gian cải tiến và phát triển, hãng Atmel tung ra thị trường dòng Viđiều khiển mang số hiệu 89Sxx với nhiều cải tiến và đặc biệt là có thêm khả năng nạpchương trình theo chế độ nối tiếp rất đơn giản và tiện lợi cho người sử dụng

Tất cả các Vi điều khiển trên đều có đặc tính cơ bản giống nhau về phần mềm (cáctập lệnh lập trình như nhau), còn phần cứng được bổ sung với chip có mã số ở hai số cuốicao hơn, các Vi điều khiển sau này có nhiều tính năng vượt trội hơn Vi điều khiển thế hệtrước Các Vi điều khiển 89Cxx như trong bảng 1 có cấu tạo ROM và RAM như 98Sxxtrong bảng 2, tuy nhiên 98Sxx được bổ sung một số tính năng và có thêm chế độ nạp nốitiếp

8051 là bộ vi điều khiển 8 bit tức là CPU chỉ có thể làm việc với 8 bit

dữ liệu Dữ liệu lớn hơn 8 bit được chia thành các dữ liệu 8 bit để xử lý

8051 đã trở nên phổ biến sau khi Intel cho phép các nhà sản xuất khác (Siemens,Atmel, Philips, AMD, Matra, Dallas, Semiconductor …) sản xuất và bán bất kỳ dạngbiến thể nào của 8051 mà họ muốn với điều kiện họ phải để mã chương trình tương thíchvới 8051 Từ đó dẫn đến sự ra đời của nhiều phiên bản của 8051 với các tốc độ và dunglượng ROM trên chip khác nhau

Tuy nhiên, điều quan trọng là mặc dù có nhiều biến thể của 8051, cũng như khácnhau về tốc độ, dung lượng ROM nhưng tất cả các lệnh đều tương thích với 8051 ban

Trang 11

Bài giảng Vi điều khiển và Ứng dụng

đầu Điều này có nghĩa là nếu chương trình được viết cho một phiên bản 8051 nào đó thìcũng sẽ chạy được với mọi phiên bản khác không phụ thuộc vào hãng sản xuất

Các loại vi điều khiển khác: vi điều khiển AVR, vi điều khiển PIC, vi điều khiểnMCUs của Philips, Ngoài ra, các loại vi điều khiển chuyên dụng của các hãng sản xuấtkhác: các loại vi điều khiển này được sử dụng chuyên dụng theo chức năng cần điềukhiển

89S52

Bộ nhớ FLASHROM nạp xóa nhiềulần bằng xung điện

Trang 12

Tóm lại: Có 3 vùng để phân biệt (trừ 8031 và 8032 không có ROM nội):

- Thứ nhất là 2 số đầu tiên:

+ 80: ROM chỉ nạp duy nhất 1 lần

+ 87: ROM nạp xóa nhiều lần bằng tia cực tím

+ 89: ROM nạp xóa nhiều lần bằng xung điện (được ưa chuộng nhất)

Các phiên bản 8051 với tốc độ khác nhau của Atmel

Bảng 1.2 Vi điều khiển họ 8051 dòng thương mại

Bảng 1.3 Các phiên bản 8051 từ hãng Dallas Semiconductor

128128128128

32323232

2222

6666

5V5V5V5V

40404040Chữ “T” đứng sau 5000 là có đồng hồ thời gian thực

Lưu ý rằng đồng hồ thời gian thực RTC là khác với bộ định thời Timer RTC tạo và giữ thời gian l phút giờ, ngày, tháng - năm kể cả khi tắt nguồn

1.3.2 Khảo sát vi điều khiển 89S52

1.3.2.1 Tổng quát

Vi điều khiển 89S52 là vi điều khiển thuộc dòng 8051 có các đặc tính sau:

 Tương thích với tất cả các sản phẩm thuộc dòng 8051

 Có 8KB Flash ROM và có thể nạp/xóa 1000 lần

 Nguồn nuôi: 4.0V đến 5.0V

 Có 256x8 bit RAM nội

 Có 4 port xuất/nhập dữ liệu 8 bit

Trang 13

Bài giảng Vi điều khiển và Ứng dụng

 Có 3 bộ Timer/Counters 16 bit

 Có 8 nguồn ngắt

 Có khả năng giao tiếp truyền dữ liệu nối tiếp

 Có chế độ ngủ đông để tiết kiệm điện năng

 Có thể giao tiếp với 64 kbyte bộ nhớ bên ngoài để lưu chương trình điềukhiển hoặc lưu dữ liệu

 Có 210 bit ( có thể truy xuất từng bit theo các lệnh xử lý bit)

 Nạp code ở cả 2 chế độ song song và nối tiếp

- Sơ đồ cấu trúc bên trong của vi điều khiển 89S52

Hình 1 1 Sơ đồ cấu trúc bên trong

Trang 14

1.3.2.2 Sơ đồ chân

Hình 1.2 Sơ đồ chân 89S52.

Xét kiểu chân PDIP:

Port 0: có 2 chức năng với số thứ tự chân 32÷39.

+ Trong các hệ thống điều khiển đơn giản sử dụng bộ nhớ bên trong không dùng bộnhớ mở rộng bên ngoài thì port 0 được dùng làm các đường điều khiển IO (Input –Output)

Trang 15

Bài giảng Vi điều khiển và Ứng dụng

+ Trong các hệ thống điều khiển lớn sử dụng bộ nhớ mở rộng bên ngoài thì port 0 cóchức năng là bus địa chỉ và bus dữ liệu AD7 ÷ AD0 (Address: địa chỉ byte thấp A0 đếnA7, Data: dữ liệu 8 bit D0 đến D7)

Port 1: với số thứ tự chân 1÷ 8 Port1 có chức năng dùng làm các đường điều khiển

xuất nhập IO Ngoài ra, còn có chức năng:

Bảng 1.4 Chức năng thứ 2 của Port 1.

Port 2: Port 2 là port có 2 chức năng với số thứ tự chân 21÷ 28.

+ Trong các hệ thống điều khiển đơn giản sử dụng bộ nhớ bên trong không dùng bộnhớ mở rộng bên ngoài thì port 2 được dùng làm các đường điều khiển IO

+ Trong các hệ thống điều khiển lớn sử dụng bộ nhớ mở rộng bên ngoài thì port 2 cóchức năng là bus địa chỉ cao A8÷A15

Port 3: với số thứ tự chân 10÷17 có chức năng dùng làm các đường điều khiển xuất

nhập IO Ngoài ra, còn có chức năng:

Bảng 1.5 Chức năng thứ 2 của Port 3.

Trang 16

+ PSEN là tín hiệu ngõ ra có tác dụng cho phép bộ nhớ chương trình mở rộng thườngnối đến chân OE\ (Output enable hoặc RD\ ) của EPROM cho phép độc các byte mã lệnh.+ Khi có giao tiếp với bộ nhớ chương trình bên ngoài thì mới dùng đến PSEN\ , nếukhông có giao tiếp chân thì PSEN\ bỏ trống.

+ Khi PSEN\ ở mức thấp trong thời gian vi điều khiển lấy lệnh Các mã lệnh củachương trình từ EPROM qua bus dữ liệu được chốt vào thanh ghi lệnh bên trong VĐK đểgiải mã lệnh Khi VĐK thi hành chương trình trong EPROM nội thì PSEN´ ở mức logic 1

Tín hiệu điều khiển ALE (Address Latch Enable): chân 30

+ Khi VĐK truy suất bộ nhớ bên ngoài, port 0 có chức năng là bus địa chỉ và bus dữliệu [AD7÷AD0] do đó phải tách các đường địa chỉ và dữ liệu Tín hiệu ra ALE dùng làmtín hiệu điều khiển để giải hợp các đường địa chỉ và dữ liệu khi kết nối chúng với IC chốtnhư hình 1.3

Hình 1.3 Sơ đồ vi điều khiển truy suất bộ nhớ bên ngoài

+ Tín hiệu ra ở chân ALE là một xung trong khoảng thời gian port 0 đóng vai trò làđịa chỉ thấp nên việc chốt địa chỉ được thực hiện một cách hoàn toàn tự động

+ Các xung tín hiệu ALE có tầng số bằng 1/6 tầng số dao động thạch anh gắn vào viđiều khiển à có thể dùng tín hiệu xung ngõ ra ALE làm xung clock cung cấp cho cácphần tử của hệ

Trang 17

Bài giảng Vi điều khiển và Ứng dụng

+ Trong chế độ lập trình cho bộ nhớ trong của vi điều khiển hì chân ALE được dùnglàm ngõ vào nhận xung lập trình từ bên ngoài để lập trình cho bộ nhớ Flash ROM trongVĐK

Tín hiệu EA\ (External Access): chân 31 có 2 cách kết nối:

+ Nếu nối EA\ lên mức logic 1 (+5V) thì vi điều khiển sẽ thi hành chương trình từ bộnhớ nội

+ Nếu nối EA\ với mức logic 0 (0V) thì vi điều khiển sẽ thi hành chương trình từ bộnhớ ngoài

Tín hiệu RST ( Reset): chân 9

+ Ngõ vào chân RST là ngõ vào Reset của VĐK

Hình 1.4 Mạch reset của VĐK

 Các ngõ vào bộ dao động Xtal1, Xtal2: chân 18 và chân 19

Bộ dao động được tích hợp bên trong VĐK, khi sử dụng 89S52 người thiết kế chỉcần kết nối thạch anh và tụ điện

Thạch anh: từ 0-33MHz

Tụ điện: 30pF ± 10pF

Trang 18

Hình 1.5 Mạch dao động của 8051

Chân 40 (Vcc) được nối lên nguồn 5V, chân 20 GND nối mass

Hình 1.6 Mạch cơ bản cho vi điều khiển họ MCS-51.

Lưu ý: khi thiết kế phần cứng sử dụng vi điều khiển họ MCS-51

- Kiểm tra nguồn: chân 40 (+5V) và chân 20 (GND: 0V).

- Kiểm tra mạch reset: chân 9 (khi bị reset: +5V, khi ổn định 0V).

- Kiểm tra mạch sử dụng code nội hay code ngoại: chân 31 (+5v nếu nạp code ROM nội, 0V nếu nạp code ROM ngoại).

- Kiểm tra mạch dao động.

Trang 19

Bài giảng Vi điều khiển và Ứng dụng

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

Việc ghi dữ liệu đến các chân của port này sẽ được nạp qua bộ chốt dữ liệu(Latch) và ngõ ra Q của bộ chốt sẽ điều khiển transistor trường và transitor này nối vớichân của port Trong đó, các port 1, 2 và 3 có khả năng điều khiển tải ( fanout) khi cấutrúc bên trong có điện trở kéo lên ( pull-up resistor) Bên cạnh đó, port 0 dùng điều khiểntải khi đó port 0 phải có điện trở kéo lên bên ngoài bởi vì port này dùng để truyền dữ liệuhay định địa chỉ nên cấu trúc bên trong không có điện trở kéo lên

a) Cấu trúc port 0 b) Cấu trúc port 1,2 và 3Hình 1 2 Mạch bên trong các port xuất/ nhập của IC 89S52

1.3.2.4 Tổ chức bộ nhớ

- Vi điều khiển 89S52 có bộ nhớ nội bên trong và có thêm khả năng giao tiếp với

bộ nhớ bên ngoài nếu bộ nhớ bên trong không đủ khả năng lưu trữ chương trình.

 Bộ nhớ nội bên trong gồm có 2 loại bộ nhớ: bộ nhớ dữ liệu và bộ nhớ chươngtrình Bộ nhớ dữ liệu có 256 byte, bộ nhớ chương trình có dung lượng 8kbyte

 Bộ nhớ mở rộng bên ngoài cũng được chia ra làm 2 bộ nhớ: bộ nhớ dữ liệu và

bộ nhớ chương trình Khả năng giao tiếp là 64 kbyte cho mỗi loại

- Bộ nhớ mở rộng bên ngoài và bộ nhớ chương trình bên trong không có gì đặc biệt –chỉ có chức năng lưu trữ dữ liệu và mã chương trình nên không cần phải khảo sát

- Bộ nhớ chương trình bên trong của vi điều khiển huộc loại bộ nhớ Flash ROM chophép xóa bằng xung điện và lập trình lại

Trang 20

- Bộ nhớ RAM nội bên trong là bộ nhớ đặc biệt người sử dụng vi điều khiển ần phảinắm rõ các tổ chức và chức năng đặc biệt của bộ nhớ này.

- Cấu trúc RAM bên trong 89S52 được phân chia như sau:

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

 RAM truy xuất từng bit có địa chỉ từ 20H đến 2FH

+ Do có 4 bank thanh ghi nên tại một thời điểm chỉ có một bank thanh ghi được truyxuất bởi các thanh ghi R0 đến R7, để chuyển đổi việc truy xuất các bank thanh ghi ta phảithay đổi các bit chọn bank trong thanh ghi trạng thái

momery

DATA momery

Enable Via

RD &WRCODE

momery

CODE momery

EnableViaPSENFF

00

Trang 21

Bài giảng Vi điều khiển và Ứng dụng

Bảng 1 1 Bảng địa chỉ RAM nội của 89S52

Địa chỉ byte Địa chỉ bit

2E 77 76 75 74 73 72 71 70

2D 6F 6E 6D 6

C 6B 6A 69 68

2C 67 66 65 64 63 62 61 60

2B 5F 5E 5D 5

C 5B 5A 59 58

2A 57 56 55 54 53 52 51 50

29 4F 4E 4D 4

C 4B 4A 49 48

28 47 46 45 44 43 42 41 40

27 3F 3E 3D 3

C 3B 3A 39 38

26 37 36 35 34 33 32 31 30

25 2F 2E 2D 2

C 2B 2A 29 28

24 27 26 25 24 23 22 21 20

23 1F 1E 1D 1

C 1B 1A 19 18

22 17 16 15 14 13 12 11 10

21 0F 0E 0D 0

C 0B 0A 09 08

Trang 22

+ Chức năng chính của 4 bank thanh ghi này là nếu trong hệ thống có sử dụng nhiềuchương trình thì chương trình thứ nhất bạn có thể sử dụng hết các thanh ghi R0 đến R7của bank0, khi chuyển sang chương trình thứ 2 để quản lý một công việc gì đó và vẫn sửdụng các thanh ghi R0 đến R7 để lưu trữ cho việc xử lý dữ liệu mà không làm ảnh hưởngđến các dữ liệu R0 đến R7 trước đây và không cần phải thực hiện công việc cất dữ liệuthì cách nhanh nhất là gán cho nhóm thanh ghi R0 đến R7 cho bank 1 là xong Tương tự

có thể mở thêm hai chương trình nữa và gán cho các bank 3 và 4

Bảng 1 2 Các địa chỉ thanh ghi tại các bank thanh ghi

RAM có thể truy xuất từng bit:

+ Vi điều khiển 89S52 có 210 ô nhớ bit có thể truy xuất từng bit, trong đó có 128 bitnằm ở các ô nhớ byte có địa chỉ từ 20H đến 2FH và các bit còn lại chứa trong nhómthanh ghi có chức năng đặc biệt

Trang 23

Bài giảng Vi điều khiển và Ứng dụng

+ Các ô nhớ cho phép truy xuất từng bit và các lệnh xử lý bit là 1 thế mạnh của viđiều khiển Các bit có thể đặt, xóa, AND, OR bằng 1 lệnh duy nhất, trong khi đó để xử lýcác bit thì vi xử lý vẫn có thể xử lý được nhưng phải tốn rất nhiều lệnh để đạt được cùngmột kết quả vì vi xử lý thường xử lý byte

+ Các port cũng có thể truy xuất được từng bit

+ Có 128 ô nhớ bit cho phép truy xuất từng bit và cũng có thể truy xuất byte phụthuộc vào lệnh được dùng là lệnh xử lý bit hay xử lý byte Chú ý địa chỉ của ô nhớ byte

và bit trùng nhau

Chú ý: các ô nhớ nào mà chia ra làm 8 và có các con số bên trong là các ô nhớ vừa

cho truy xuất byte và cả truy xuất bit Những ô nhớ còn lại thì không thể truy xuấtbit Các số nằm bên trong từng ô bit là địa chỉ của từng bit

RAM da dụng :

+ Vùng nhớ ram da dụng gồm có 80 byte có địa chỉ từ 30H đến 7FH – vùng nhớ nàykhông có gì đặc biệt so với 2 vùng nhớ trên Vùng nhớ bank thanh ghi 32byte từ 00H đến1FH cũng có thể làm vùng nhớ ram da dụng mặc dù các ô nhớ này có chức năng như đãtrình bày

+ Mọi địa chỉ trong vùng RAM đa dụng đều có thể truy xuất tự do dùng kiểu định địachỉ trực tiếp hay gián tiếp

+ Bộ nhớ ngăn xếp của vi điều khiểndùng RAM nội nên dung lượng bộ nhớ ngăn xếpnhỏ, trong khi đó các vi xử lý dùng bộ nhớ bên ngoài làm bộ nhớ ngăn xếp nên dunglượng tùy ý mở rộng

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

- Các thanh ghi nội của 89S52 được truy xuất ngầm định bởi bộ lệnh

- Các thanh ghi trong 89S52 được định dạng như một phần của RAM trên chip vì vậymỗi thanh ghi sẽ có một địa chỉ (ngoại trừ thanh ghi bộ đếm chương trình và thanh ghilưu trữ mã lệnh vì các thanh ghi này đã có chức năng cố định) Cũng như các thanh ghi từR0 đến R7, vi điều khiển 89S52 có 21 thanh ghi chức năng đặc biệt nằm ở vùng trên củaRAM nội có địa chỉ từ 80H đến FFH

Trang 24

+ Là các Port của 89S52 bao gồm Port0 có địa chỉ 80H, Port1 có địa chỉ 90H, Port2

có địa chỉ A0H và Port có địa chỉ B0H Tất cả các Port này đều có thể truy xuất trên từngbit nên rất thuận tiện trong điều khiển Địa chỉ của các bit được đặt tên với ô bắt đầuchính là địa chỉ của Port tương ứng ví dụ như bit đầu tiên của Port là 80H cũng chính làđịa chỉ bắt đầu của Port0 Người lập trình không cần nhớ địa chỉ các bit trong các port vìphần mềm lập trình cho phép truy xuất bằng tên từng bit dễ nhớ như sau: P0.0 chính là bit80H của Port 0

+ Ngoại trừ thanh ghi A có thể truy xuất ngầm, đa số các thanh ghi có chức năng đặcbiệt SFR có thể địa chỉ hóa từng bit hoặc byte

 Ô nhớ có địa chỉ 81H:

+ Là thanh ghi con trỏ ngăn xếp SP (Stack Pointer) – có chức năng quản lý địa chỉcủa bộ nhớ ngăn xếp Bộ nhớ ngăn xếp dùng để lưu trữ tạm thời các dữ liệu trong quátrình thực hiện chương trình của vi điều khiển

+ Các lệnh liên quan đến ngăn xếp bao gồm các lệnh cất dữ liệu vào ngăn xếp (lệnhPush) và lấy dữ liệu ra khỏi ngăn xếp (lệnh Pop)

+ 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ào

+ Sau lệnh lấy dữ liệu ra khỏi ngăn xếp sẽ làm giảm SP

+ Bộ nhớ ngăn xếp của 89S52 nằm trong RAM nội và bị giới hạn về cách truy xuấtđịa chỉ - chỉ cho phép truy xuất địa chỉ gián tiếp Dung lượng bộ nhớ ngăn xếp lớn nhất là128byte RAM nội của 89S52

+ Khi reset 89S52 thì thanh ghi SP sẽ mang giá trị mặc định là 07H và dữ liệu đầutiên sẽ được cất vào ô nhớ ngăn xếp có địa chỉ 08H

+ Nếu phần mềm ứng dụng không khởi tạo SP một giá trị mới thì bank 1 và có thể cảbank 2, bank 3 sẽ không dùng được vì vùng nhớ này đã được dùng làm ngăn xếp

+ Ngăn xuất đượ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 dữ liệu, hoặc truy xuất ngầm bằng lệnh gọi chương trình con (ACALL,LCALL) và các lệnh trở về (RET, RETI) để lưu trữ địa chỉ của bộ đếm chương trình khibắt đầu thực hiện chương trình con và lấy lại địa chỉ khi kết thúc chương trình con

 Ô nhớ có địa chỉ 82H và 83H:

Trang 25

Bài giảng Vi điều khiển và Ứng dụng

Là thanh ghi DPL (byte thấp) có địa chỉ là 82H và DPH (byte cao) có địa chỉ 83H.Hai thanh ghi này có thể sử dụng độc lập để lưu trữ dữ liệu và có thể kết hợp lại tạo thànhmột thanh ghi 16 bit có tên là DPTR và gọi là con trỏ dữ liệu – được dùng để lưu địa chỉkhi truy xuất dữ liệu của bộ nhớ dữ liệu bên ngoài Các vi điều khiển sau này có thêmthanh ghi DPTR1

 Ô nhớ có địa chỉ 87H:

Là thanh ghi PCON (power control) có chức năng điều khiển công suất khi vi điềukhiểnlàm việc hay ở chế độ chờ Khi vi điều khiển không còn xử lý gì nữa thì người lậptrình có thể lập trình cho vi điều khiển huyển sang chế độ chờ để giảm bớt công suất tiêuthụ nhất là khi nguồn cung cấp cho vi điều khiểnlà pin

 Các ô nhớ có địa chỉ từ 88H đến 8DH:

+ Là các thanh ghi phục vụ cho 2 timer/counter T1, T0

+ Thanh ghi TCON (timer control): thanh ghi điều khiển timer/counter

+ Thanh ghi TMOD (timer mode): thanh ghi lựa chọn mode hoạt động chotimer/counter

+ Thanh ghi TH0 và TL0 kết hợp lại tạo thành thanh ghi 16 bit có chức năng lưu trữxung đếm cho timer/counter T0 Tương tự cho 2 thanh ghi TH1 và TL1 kết hợp lại để lưutrữ xung đếm cho timer/counter T1 Khả năng lưu trữ số lượng xung đếm được là 65536xung

 Các ô nhớ địa chỉ 98H và 99H:

Là 2 thanh ghi SCON và SBUF.SCON (serial control): thanh ghi điều khiển truyền

dữ liệu nối tiếp SBUF (serial buffer): thanh ghi đệm dữ liệu truyền nối tiếp Dữ liệumuốn truyền đi phải lưu vào thanh ghi SBUF và dữ liệu nhận về nối tiếp cũng lưu ởthanh ghi này Khi có sử dụng truyền dữ liệu thì phải sử dụng 2 thanh ghi này

 Các ô nhớ A8H và B8H:

Là 2 thanh ghi IE và IP Thanh ghi IE (Interrupt Enable): thanh ghi điều khiển chophép / không cho phép ngắt Thanh ghi IP (Interrupt Priority): thanh điều khiển ưu tiênngắt Khi có sử dụng đến ngắt thì phải dùng đến 2 thanh ghi này Mặc nhiên các thanh ghi

Trang 26

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

+ Thanh ghi trạng thái chương trình ở địa chỉ D0H được tóm tắt như bảng 1.5

+ Chức năng từng bit trạng thái:

 Cờ Carry C (Carry Flag):

Cờ nhớ có tác dụng kép Cờ C được sử dụng cho các lệnh toán học:

C = 1 nếu phép toán cộng có tràn hoặc phép trừ có mượn

C = 0 nếu phép toán cộng không tràn và phép trừ không có mượn

Bảng 1 3 Bảng trạng thái của thanh ghi PSW

PSW.5 F0 D5H Flag 0 còn gọi là cờ Zero kí hiệu là Z

PSW.4 RS1 D4H Register bank Select 1: bit lựa chọn bank thanh

ghi

PSW.3 RS0 D3H Register bank Select 0: bit lựa chọn bank thanh

ghi

00 = Bank 0; ô nhớ có address 00H/07H gán cho R0-R7

01 = Bank 1; ô nhớ có address 08H/0FH gán cho R0-R7

10 = Bank 2; ô nhớ có address 10H/17H gán cho R0-R7

11 = Bank 3; ô nhớ có address 18H/1FH gán cho R0-R7

PSW.2 0V D2H Over Flag: cờ tràn số nhị phân có dấu

PSW.1 - D1H Reserved: chưa thiết kế nên chưa sử dụng được.PSW.0 P D0H Even Parity Flag: cờ chẵn lẻ

 Cờ Carry phụ AC (Auxiliary Carry Flag):

Khi cộng những giá trị BCD (Binary Code Decimal), cờ nhớ phụ AC được set[ AC=1] nếu kết quả 4 bit lớn hơn 09H, ngược lại AC=0 Cờ AC được dùng đểchỉnh số BCD khi thực hiện lệnh cộng 2 số BCD

 Cờ 0 (Flag 0):

Trang 27

Bài giảng Vi điều khiển và Ứng dụng

Cờ 0 (F0) còn được gọi là cờ Z, cờ Z = 1 khi kết quả xử lý bằng 0 và cờ Z = 0 khikết quả khác 0

 Các bit chọn bank thanh ghi truy xuất:

+ Hai bit RS1 và RS0 dùng để thay đổi cách gán 8 thanh ghi R7-R0 cho 1 trong 4bank thanh ghi Hai bit này sẽ bị xoá sau khi reset vi điều khiển à được thay đổibởi chương trình của người lập trình

+ Bảng 1.6 trình bày về chế độ hoạt động của bank thanh ghi

Bảng 1 4 Bảng chọn chế độ hoạt động của bank thanh ghi

RS1 RS0 Bank thanh ghi được lựa chọn

 Bit Parity (P):

+ Bit P tự động được Set hay Clear ở mỗi chu kỳ máy để lập Parity chẵn với thanhghi A Đếm các bit 1 trong thanh ghi A cộng với bit parity luôn là số chẵn Ví dụthanh ghi A chứa nhị phân 10101101B thì bit P set lên một để cho biết tổng các bit

1 trong thanh ghi A và cả bit P tạo thành số chẵn

+ Bit Parity thường được dùng kết hợp với những thủ tục truyền dữ liệu nối tiếp đểtạo ra bit Parity cho dữ liệu trước khi truyền đi hoặc kiểm tra bit Parity sau khinhận dữ liệu

Trang 28

+ Thanh ghi B ở địa chỉ F0H được dùng cùng với thanh ghi A để thực hiện các phéptoán nhân chia Lệnh MUL AB: sẽ nhân những giá trị không dấu 8 bit với 8 bit trong haithanh ghi A và B, rồi trả về kết quả 16 bit trong A (byte cao) và B (byte thấp) Lệnh DIVAB: lấy giá trị trong thanh ghi A chia cho giá trị trong thanh ghi B, kết quả nguyên lưutrong A, số dư lưu trong B.

+ Thanh ghi B có thể được dùng như một thanh ghi đệm trung gian nhiều chức năng

1.3.2.6 Bộ nhớ ngoài

- Cấu trúc của MCS-51 cho ta khả năng mở rộng không gian bộ nhớ chương trình đến64kB và không gian bộ nhớ dữ liệu đến 64kb Các IC giao tiếp ngoại vi cũng có thể đượcthêm vào để mở rộng khả năng xuất/ nhập Các IC này trở thành một phần của khônggian bộ nhớ dữ liệu ngoài bằng cách sử dụng các định địa chỉ vào/ ra ánh xạ bộ nhớ.Trong việc truy xuất/ nhập dữ liệu ngoài, port 0 dùng làm bus dữ liệu hoặc bus định địachỉ byte thấp và port 2 dùng định địa chỉ byte cao Các bus địa chỉ và dữ liệu đa hợp đượctrình bày như hình 1.7 có sử dụng ngõ ra ALE chốt byte thấp của địa chỉ ở thời điểm bắtđầu mỗi chu kỳ bộ nhớ ngoài

Hình 1.4 Đa hợp bus địa chỉ ( byte thấp) và bus dữ liệu dạng đa hợp ( 16 chân)

Trang 29

Bài giảng Vi điều khiển và Ứng dụng

- Khi cấp điện cho hệ thống hoặc nhấn nút Reset thì mạch sẽ reset vi điều khiển Khi resetthì tín hiệu reset phải ở mức cao ít nhất là hai chu kì máy, khi đó các thanh ghi bên trongđược nạp những giá trị thích hợp để khởi động hệ thống

+ Trạng thái của các thanh ghi sau khi reset hệ thống được tóm tắt như bảng 1.6.+ Thanh ghi quan trọng nhất là thanh ghi bộ đếm chương trình PC = 0000H Sau khireset vi điều khiển luôn bắt đầu thực hiện chương trình tại địa chỉ 0000H của bộ nhớchương trình nên các chương trình viết cho vi điều khiểnluôn bắt đầu viết tại địa chỉ0000H

+ Nội dung của RAM trong vi điều khiển không bị thay đổi bởi tác động của ngỏ vàoreset nghĩa là vi điều khiển đang sử dụng các thanh ghi để lưu trữ dữ liệu nhưng nếu viđiều khiểnreset thì dữ liệu trong các thanh ghi vẫn không thay đổi

Bảng 1 5 Các thanh ghi điều khiển khi Reset hệ thống

Bộ đếm chương trình PCThanh ghi tích lũy AThanh ghi B

0000H00H00H

Trang 30

Thanh ghi con trỏ SPDPTR

Port 0 đến port 3IP

IECác thanh ghi định thờiSCON

SBUFPCON (HMOS)PCON (CMOS)

07H0000HFFH (1111 1111)XXX0 0000 B0XX0 0000B00H

00H00H0XXX XXXXB0XXX 0000 B

- Ngoài ra, chế độ counter thường thì đếm xung nhận từ bên ngoài đưa đến ngõvào T0 đối với timer/counter thứ 0 và ngõ vào T1 đối với timer/counter thứ 1 Đếm xung

từ bên ngoài còn gọi là đếm sự kiện Một ứng dụng cho chế độ counter là có thể sử dụng

vi điều khiểnlàm các mạch đếm sản phẩm

- Đến đây ta có thể xem timer hay counter là 1 và chú ý rằng tại mỗi một thời điểm

ta chỉ sử dụng một trong 2 hoặc là timer hoặc là counter

- Các timer/counter của vi điều khiểnlà timer/counter 16 bit và số lượng xung màtimer/counter có thể được tính bắt đầu từ 0000 0000 0000 00002 đến 1111 1111 111111112( hay viết theo số thập lục phân thì bắt đầu từ 0000H đến FFFFH và nếu tính theogiá trị thập phân thì bắt đầu từ số 0 đến 65535)

- Khi đạt đé giá trị cực đại và có thêm một xung nữa thì bộ đếm sẽ bị tràn, khi bịtràn thì giá trị đếm sẽ tự động về 0 và cờ tràn của timer/counter lên 1 để báo hiệutimer/counter đã bị tràn ( trước khi đếm phải xóa cờ tràn)

Trang 31

Bài giảng Vi điều khiển và Ứng dụng

- Người lập trình sử dụng trạng thái cờ tràn lên 1 để rẻ nhánh hoạt chấm dứt thờigian cần thiết đã dịch để chuyển sang làm một công việc khác, khi cờ tràn lên 1 sẽ tạo rangắt cũng để rẻ nhánh chương trình để thực hiện một chương trình khác

- Các giá trị đếm ngược của timer/counter T0 thì lưu trong 2 thanh ghi TH0 vàTL0 – mỗi thanh ghi 8 bit kết hợp lại thành 16 bit

- Tương tự, các giá trị của timer/counter T1 thì lưu trong 2 thanh ghi TH1 và TL1– mỗi thanh ghi 8 bit kết hợp lại thành 16 bit

Bảng 1.6 Tên, chức năng, địa chỉ của các thanh ghi liên quan đến các timer/counter

1.4.2 Các thanh ghi điều khiển Timer

 THANH GHI CHỌN KIỂU LÀM VIỆC CHO TIMER-MODE REGISTER:

- Thanh ghi TMOD gồm 2 nhóm 4 bit: 4 bit thấp dùng để thiết lập chế độ hoạt động choT0 và 4 bit cao thiết lập các chế độ hoạt động cho T1

Bảng 1 7 Bảng các bit trong thanh ghi TMOD của 89S52

0 0 0 Mode Timer 13 bit (mode 8048)

0 1 1 Mode Timer 16 bit

Trang 32

1 0 2 Mode tự động nạp 8 bit

1 1 3 Mode tách Timer ra:

Timer0 : được tách ra làm 2 timer 8 bit gồm có:

Timer 8 bit TL0 được điều khiển bởi các bit của T0

Timer 8 bit TL0 được điều khiển bởi các bit của T1

Timer1: không được hoạt động ở mode 3

 THANH GHI ĐIỀU KHIỂN TIMER – CONTROL REGISTER:

- Thanh ghi điều khiển TCON chứa các bit trạng thái và các bit điều khiển cho T0 và T1như bảng 1.11

Bảng 1 9 Bảng các bit của thanh ghi TCONTF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0

- Hoạt đông của từng bit của thanh ghi tcon được tóm tắt như bảng 1.12 sau:

Bảng 1 10 Bảng các bit của thanh ghi TCONBi

Bit điều khiển Timer 1 đếm / ngừng đếm:

TR1 = 1 thì timer 1 được phép đếm xung

TR1 = 0 thì timer 1 không được phép đếm xung (ngừng)

5 TF0 8DH Cờ tràn Timer 0 (hoạt động tương tự TF1)

4 TR0 8CH Bit điều khiển Timer 0 (giống TR1)

Trang 33

Bài giảng Vi điều khiển và Ứng dụng

bằng cạnh

IT1 = 0 thì ngắt INT1 tác động bằng mức

IT1 = 1 thì ngắt INT! Tác động cạnh xuống

1 IE0 89H Giống như IE1 nhưng phục vụ cho ngắt INTO

0 IT0 88H Giống như IT1 nhưng phục vụ cho ngắt INTO

1.4.3 Các chế độ hoạt động

Ta dùng kí hiệu TLx và THx để chỉ 2 thanh ghi byte thấp và byte cao của T0 hoặc T1

MODE 0 (Mode Timer 13 bit):

Mode 0 là mode đếm 13 bit: trong đó 8 bit cao sử dụng của thanh ghi THx, 5 bit còn lạichỉ sử dụng 5 bit trọng số thấp của thanh ghi TLx không dùng như hình 1.13

Ở mode này giá trị đếm lớn nhất là 213 = 8192 tức đếm từ 000H đến 1FFH và nếu có thêmmột xung nữa thì bộ đếm sẽ tràn và làm cho cờ tràn lên 1.Nếu trong chương trình có chophép timer ngắt thì ngắt sẽ tác động

Hình 1.6 Chế độ hoạt động 13 bit của Timer 1

MODE 1 (Mode Timer 16 bit ):

Mode 1 là mode đếm 16 bit Ở mode này giá trị đếm là lớn nhất là 216 Timer hoạt động ởmode 1 giống như mode 0 chỉ khác là mode 1 đếm 16bit như hình 1.14

Ở mode này giá trị đếm lớn nhất là 216 = 65535 tức đếm từ 0000H đến 0FFFFH và nếu cóthêm một xung nữa thì bộ đếm sẽ tràn và làm cho cờ tràn lên 1

TL1

( 5 bit)T1 (p3.5)

C/T=0C/T=1

Trang 34

Hình 1 7 Chế độ hoạt động 16 bit của Timer 1

MODE 2 ( Mode Timer bị động nạp 8 bit ):

Mode 2 là mode tự động nạp 8 bit, byte thấp TLx của Timer hoạt động như một Timer 8

bit khi đó byte cao THx dùng để lưu trữ giá trị để nạp lại cho thanh ghi TLx

Khi bộ đếm TLx chuyển trạng thái từ FFH sang 00H: thì cờ tràn được set và giá trị lưu

trong Thx được nạp vào TLx Bộ đếm từ giá trị vừa nạp từ THx lên và cho đến khi có

chuyển trạng thái từ FFH sang 00H kế tiếp và cứ thế tiếp tục Sơ đồ minh họa cho timer

hoạt động ở mode 2 như hình 1.15

Hình 1 8 Chế độ hoạt động 8 bit tự động nạp lại của Timer 1

CT

TF0

FTF0

TGate

C/T=0C/T=1

TH1

( 8 bit)

TF1

TR1Gate

/INT1

control

( Interrupt)INT

( Interrupt)INT

TL1

( 8 bit)T1 (p3.5)

C/T=0C/T=1

TH1

( 8 bit)

TF1

TR1Gate

/INT1

control

CINT\

Trang 35

Bài giảng Vi điều khiển và Ứng dụng

Hình 1.9 Chế độ hoạt động ở mức 3 của Timer 0

Khi Timer 0 định cấu trúc mode 3 thì timer 0 được chia timer 8 bit TL0 và TH0 hoạt

động như những Timer riêng lẻ và sử dụng các bit TF0 và TF1 làm các bit cờ tràn tương

ứng như hình 1.16

Timer 1 không thể sử dụng ở mode 3, nhưng có thể được khởi động trong các mode khác

và không thể báo tràn vì cờ tràn vì cờ TF1 đã dùng để báo tràn cho timer TH0

Khi timer 0 hoạt động ở mode 3 sẽ cung cấp thêm 1 Timer 8 bit thứ ba Khi Timer 0 ở

mode 3 thì Timer 1 có thể hoạt động như là một bộ dao di động thiết lập tốc độ Baud

phục vụ cho Port nối tiếp để truyền và nhận dữ liệu, hoặc nó có thể dùng trong các ứng

dụng mà không sử dụng chế độ báo tràn và báo ngắt

Các nguồn xung đếm:

Timer/counter có thể đếm xung từ hai nguồn: nếu timer/counter sử dựng ở chế độ định

thời timer thì sẽ đếm xung bên trong đã biết tần số, nếu timer/counter sử dụng ở chế độ

counter thì sẽ đếm xung từ bên ngoài như hình 1.17 Bit C T/ trong TMOD cho phép

chọn chế độ timer hay counter khi khởi tạo ở thanh ghi tmod

Hình 1.10 Các nguồn xung đưa đến timer/counter.

Đếm thời gian:

acontrol

TGate( 8 bit)

T1/12fOSC.

TR1

1/12fOSC

1/12fOT0Chân

C/T=0C/TC/T=1C/

Trang 36

- Nếu bit C T / 0 thì Timer hoạt động đếm xung nội liên tục lấy từ dao động trênChip Tần số ngõ vào tụ thạch anh được đưa qua một mạch chia 12 để giảm tần số phùhợp với các ứng dụng Nếu dùng thạch anh 12MHz thì sau khi qua bộ chia 12, tần số đưađến bộ đếm timer là 1MHz.

- Timer sẽ sinh ra tràn khi nó đã đếm đủ số xung tương ứng thời gian quy định, phụthuộc vào giá trị khởi tạo được nạp vào các thanh ghi THx và TLx

Đếm các sự kiện bên ngoài (Event Counting):

- Nếu bit C T / 1 thì Timer hoạt động đếm xung đến từ bên ngoài và chu kỳ củamỗi xung do nguồn tạo tín hiệu bên ngoài quyết định Hoạt động này thường dùng đểđếm các sự kiện Số lượng các sự kiện được lưu trữ trong thanh ghi của các Timer

- Nguồn xung clock bên ngoài đưa vào chân P3.4 là ngõ nhập xung clock củaTimer0 (T0) và P3.5 là ngõ nhập xung clock của Timer1 (T1)

- Trong các ứng dụng đếm xung từ bên ngoài: các thanh ghi Timer sẽ tăng giá trịđếm khi xung ngõ vào Tx chuyển trạng thái từ 1 sang 0 (tác động xung clock cạnhxuống) Để nhận ra sự chuyển đổi từ 1 sang 0 phải mất 2 chu kỳ máy, nên tầng số xungbên ngoài lớn nhất là 500KHz nếu hệ thống vi điều khiển sử dụng dao động thạch anh12MHz

Điều khiển các Timer hoạt động:

- Bit TRx trong thanh ghi TCON được điều khiển bởi phần mềm để cho phép cácTimer bắt đầu quá trình đếm hoặc ngừng

- Để bắt đầu cho các Timer đếm thì phải cho TRx =1

- Để các Timer ngừng đếm thì TRx=0

- Bit TRx bị xóa khi reset hệ thống

- Chế độ mặc định khi bắt đầu hoạt động thì các Timer bị cấm

- Giả sử xung cần đo độ rộng đưa vào chân INTO , ta phải khởi tạo Timer 0 hoạtđộng ở mode1 là mode timer 16 bit với giá trị khởi tạo ban đầu là TL0/TH0=0000H , bitGATE=1, bit TR0=1 Khi xung đưa đến ngõ vào INT0=1 thì “ cổng được mở “ để choxung nội có tần số 1MHz vào timer 0 Quá trình Timer 0 đếm xung nội sẽ dừng lại cho

Trang 37

Bài giảng Vi điều khiển và Ứng dụng

đến khi xung đưa đến ngõ vào INT0 xuống mức 0 Thời gian đếm được của timer 0chính là độ rộng xung cần đo

 Khởi tạo và truy xuất các thanh ghi của Timer/Counter:

- Các Timer thường được khởi tạo 1 lần ở đầu chương trình để thiết lập mode hoạtđộng phục vụ cho các ứng dụng điều khiển liên quan đến định thời hay đếm xung ngoại

- Thanh ghi TMOD là thanh ghi đầu tiên cần phải khởi tạo để thiết lập mode hoạtđộng cho các timer

- Nếu không thiết lập các giá trị bắt đầu đếm cho các thanh ghi TLx/THx thì timer

sẽ bắt đầu từ 0000H lên và khi chuyển trạng thái từ FFFFH sang 0000H sẽ sinh ra trànlàm bit TFx = 1 rồi tiếp tục đếm từ 0000H lên tiếp

- Nếu ta thiết lập giá trị bắt đầu đếm cho TLX/THx khác 0000H, thì timer sẽ bắt đầuđếm từ giá trị thiết lập đó lên nhưng khi chuyển trạng thái tù FFFFh sang 0000H thì timerlại đếm từ 0000H lên

- Để timer luôn bắt đầu đếm từ giá trị ta gán thì ta có thể lập trình chờ sau mỗi lầntràn ta sẻ xóa cờ TFx và gán lại giá trị cho TLx/THx để timer luôn luôn bắt đầu đếm từgiá trị khởi gán lên

- Đặc biệt nếu bộ định thời hoạt động trong phạm vi nhỏ hơn 256µs thì ta nên dùngtimer ở mode 2 ( tự động nạp 8 bit ) Sau khi khởi tạo giá trị đầu cho thanh ghi THx, vàTLx, khi set bit TRx thì timer sẽ bắt đầu đếm từ giá trị đã gán trong TLX và khi tràn từFFH sang 00H trong TLx, thì cờ tràn TFx tự động được set, đồng thời giá trị trong Thx tựđộng nạp sang cho TLx và timer bắt đầu đếm từ giá trị khởi gán này lên Nói cách khác,sau mỗi lần tràn ta không cần khởi gán lại cho các thanh ghi timer mà chúng vẫn đếmđược lại từ giá trị đã gán

1.5 Hoạt động của port nối tiếp

1.5.1 Tổng quát

- Truyền dữ liệu nối tiếp của 89S52 có thể hoạt động ở nhiều kiểu riêng biệt trongphạm vi cho phép của tần số Chức năng của truyền dữ liệu nối tiếp là chuyển đổi dữ liệudạng song song thành nối tiếp để truyền đi và chuyển đổi dữ liệu nhận về dạng nối nối

Trang 38

tiếp thành song song Chân TxD (ở chân P3.1) là ngõ xuất dữ liệu và RxD (ở chân P3.0)

đồ khối của hệ thống truyền dữ liệu như hình 1.18

- Thanh ghi điều khiển truyền dữ liệu nối tiếp SCON nằm ở địa chỉ 98H là thanh ghicho phép truy suất bit bao gồm các bit trạng thái và các bit điều khiển Các bit điều khiểnthiết lập các kiểu hoạt động của truyền dữ liệu nối tiếp, còn các bit trạng thái cho biết thờiđiểm kết thúc khi truyền xong một kí tự hoặc nhận xong 1 kí tự Các bit trạng thái có thểkiểm tra trong chương trình hoặc có thể lập trình để sinh ra ngắt

Hình 1.11 Sơ đồ khối của truyền dữ liệu nối tiếp

- Tần số hoạt động của truyền dữ liệu nối tiếp còn gọi tốc độ BAUD (số lượng bit dữliệu được truyền đi trong một giây) có thể hoạt động cố định (sử dụng dao động trên Chip89S52) hoặc có thể thay đổi Khi cần tốc độ Baud thay đổi thì phải sử dụng Timer 1 đểcung cấp tốc độ baud

Trang 39

Bài giảng Vi điều khiển và Ứng dụng

1.5.2 Thanh ghi điều khiển port nối tiếp - SCON

Thanh ghi SCON dùng thiết lập các kiểu truyền dữ liệu khác nhau cho MCS-51 Cấutrúc thanh ghi SCON như bảng 1.114 và bảng 1.15

Bảng 1 12 Bảng thanh ghi điều khiển port nối tiếp SCON

Bảng 1 13 Bảng thanh ghi điều khiển port nối tiếp SCON

7 SM0 9FH Bit chọn kiểu truyền nối tiếp : bit thứ 0

6 SM1 9EH Bit chọn kiểu truyền nối tiếp : bit thứ 1

5 SM2 9DH Bit cho phép truyền kết nối nhiều vi xử lý ở mode 2 và 3;

RI sẽ không tích cực nếu bit thứ 9 đã thu vào là 0

4 REN 9CH Bit cho phép nhận kí tự REN = 1 sẽ cho phép nhận kí tự

3 TB8 9BH Dùng để lưu bit 9 để truyền đi khi hoạt động ở mode 2 và

3 TB8 bằng 0 hay bằng 1 là do người lập trình thiết lập

2 RB8 9AH Dùng để lưu bit 9 nhận về khi hoạt động ở mode 2 và 3

1 TI 99H Cờ báo hiệu này lên mức 1 khi truyền xong 1 kí tự và xóa

bởi người lập trình để sẵn sang truyền kí tự tiếp theo

0 RI 98H Cờ báo hiệu này lên mức 1 khi nhận xong 1 kí tự và xóa

bởi người lập trình để sẵn sang nhân kí tự dữ liệu tiếp theo

1.4.3 Các chế độ hoạt động

CÁC KIỂU TRUYỀN DỮ LIỆU NỐI TIẾP

- Trước khi truyền dữ liệu thì thanh ghi SCON phải được khởi tạo đúng kiểu

- Truyền dữ liệu nối tiếp của MCS51 có 4 kiểu hoạt động tùy thuộc theo 4 trạng tháicủa 2 bit SM0 SM1 được liệt kê ở bảng 1.6

Bảng 1 14 Bảng các kiểu truyền dữ liệu

1

Kiểu

Mô tả Tốc độ Baud

0 0 0 Thanh ghi dịch Cố định (Tần số dao động f/12)

0 1 1 UART 8 BIT Thay đổi ( được đặt bởi Timer )

Trang 40

1 1 3 UART 9 BIT Thay đổi ( được đặt bởi Timer ).

- Ba trong 4 kiểu cho phép truyền đồng bộ với mỗi kí tự thu hoặc phát sẽ được kếtnối với bit Start hoặc bit Stop

 Truyền dữ liệu kiểu 0 – kiểu thanh ghi dịch 8 bit:

- Để định cấu hình cho truyền dữ liệu nối tiếp ở kiểu 0 thì 2 bit SM1 SM0 = 00 Dữliệu nối tiếp nhận vào và dữ liệu truyền đi điều thông qua chân RxD, còn chân TxD thìdung để dịch chuyển xung clock 8 bit dữ liệu để truyền đi hoặc nhận về thì luôn bắt đầu

với bit có trọng số nhỏ nhất LSB Tốc độ Baud được thiết lập cố định ở tần số bằng ½ 121tần số dao động thạch anh trên Chip

- Khi thực hiện lệnh ghi dữ liệu lên thanh ghi SBUF thì quá trình truyền dữ liệu bắtđầu dữ liệu được dịch ra ngoài thông qua chân RxD cùng với các xung nhịp cũng đượcgởi ra ngoài thông qua chân TxD Mỗi bit truyền đi chỉ có xuất hiện trên chân RxD trongkhoản thời gian một chu kì máy như trong giản đồ thời gian hình 1.19

- Quá trình nhận được khởi động khi bit cho phép nhận REN = 1 và cờ nhận RI = 0.Nguyên tắc chung là khởi tạo bit REN = 1 ở đầu chương trình để khởi động truyền dữliệu, và xóa bit RI để sẵn sàng nhận dữ liệu vào Khi bit RI bị xóa, các xung clock sẽ xuất

ra bên ngoài thông qua chân TxD, bắt đầu chu kì máy kế tiếp thì dữ liệu từ bên ngoài sẽđược dịch vào bên trong thông qua chân RxD như trong giản đồ thời gian hình 1.19

Hình 1.12 Giản đồ thời gian

Ngày đăng: 09/12/2018, 22:32

TỪ KHÓA LIÊN QUAN

w