Tải bản đầy đủ (.docx) (103 trang)

Bài giảng real time 7 8

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.78 MB, 103 trang )

Vũ Thạch Dương - Bộ môn Robot và Điều khiển Tự động
Khoa CN Tự động hóa – ĐHCNTT&TT Thái Nguyên

BÀI GIẢNG MÔN HỌC : HỆ THỐNG
ĐIỀU KHIỂN THỜI GIAN THỰC

MỤC LỤC
Chương 1: HỌ VI ĐIỀU KHIỂN 8051.............................................................................7
1.1. Các vi điều khiển thuộc họ 8051.................................................................................7
1.2. Bộ vi điều khiển 8051.................................................................................................9
1.2.1. Sơ đồ cấu tạo........................................................................................................9
1.2.2. Tổ chức bộ nhớ...................................................................................................11
1.2.3. Các thanh ghi......................................................................................................11
1.2.4. Bộ định thời........................................................................................................12
1.2.4.1. Thanh ghi điều khiển Timer TCON.............................................................12
1.2.4.2. Thanh ghi mode timer (TMOD)..................................................................12
1.2.4.3. Các mode và cờ tràn....................................................................................13
1.2.5. Tổ chức ngắt.......................................................................................................14
1.2.5.1. Cho phép và không cho phép ngắt:..............................................................14
1.2.5.2. Ưu tiên ngắt.................................................................................................15
1.2.5.3. Xử lý ngắt....................................................................................................16
1.2.5.4. Các vector ngắt............................................................................................16
1.2.6. Truyền thông nối tiếp.........................................................................................17
1.2.6.1. Thanh ghi điều khiển truyền thông nối tiếp (SCON)...................................18
1.2.6.2. Hoạt động của UART..................................................................................19
1.2.6.3. Khởi động và truy xuất các thanh ghi..........................................................19
1.2.6.4. Tốc độ Baud................................................................................................20
1.3.1. Ngôn ngữ lập trình cho 8051..............................................................................20
1.3.2. Giới thiệu phần mềm lập trình Keil C và phần mềm mô phỏng Proteus............21
1



Vũ Thạch Dương - Bộ môn Robot và Điều khiển Tự động
Khoa CN Tự động hóa – ĐHCNTT&TT Thái Nguyên

BÀI GIẢNG MÔN HỌC : HỆ THỐNG
ĐIỀU KHIỂN THỜI GIAN THỰC

1.3.2.1. Giới thiệu phần mềm lập trình Keil C.........................................................21
1.3.2.2. Lập trình 8051 với Keil C............................................................................22
1.3.2.3. Phần mềm mô phỏng Proteus......................................................................24
1.3.3. Lệnh số học, lệnh logic và các cổng vào ra........................................................28
1.3.4. Bộ đếm, bộ định thời..........................................................................................30
1.3.4.1. Các bước lập trình ở chế độ 1 và chế độ 0...................................................30
1.3.4.2. Các bước lập trình cho chế độ 2..................................................................31
1.3.4.3. Một số điểm lưu ý........................................................................................31
1.3.5. Lập trình truyền thông nối tiếp...........................................................................33
1.3.5.1. Lập trình 8051 để truyền dữ liệu nối tiếp....................................................33
1.3.5.2. Để lập trình 8051 nhận các byte ký tự nối tiếp............................................34
1.3.6. Lập trình ngắt.....................................................................................................34
1.3.6.1. Khai báo ngắt trong chương trình Keil........................................................34
1.3.6.2. Lập trình ngắt bộ định thời..........................................................................34
1.3.6.3. Lập trình các ngắt phần cứng bên ngoài......................................................36
1.3.6.4. Lập trình ngắt truyền thông nối tiếp............................................................37
Chương 2: LÝ THUYẾT CƠ BẢN VỀ HỆ ĐIỀU KHIỂN THỜI GIAN THỰC.............39
2.1. Khái niệm hệ thống thời gian thực............................................................................39
2.2. Phân loại hệ thời gian thực........................................................................................39
2.3. Khái niệm về hệ điều khiển thời gian thực................................................................40
2.4. Cấu trúc của hệ đo lường, điều khiển........................................................................41
2.4.1. Định nghĩa hệ đo lường, điều khiển...................................................................41
2.4.2. Các nguyên tắc điều khiển..................................................................................42

Chương 3: LÝ THUYẾT CƠ BẢN VỀ HỆ ĐIỀU HÀNH THỜI GIAN THỰC..............44
2


Vũ Thạch Dương - Bộ môn Robot và Điều khiển Tự động
Khoa CN Tự động hóa – ĐHCNTT&TT Thái Nguyên

BÀI GIẢNG MÔN HỌC : HỆ THỐNG
ĐIỀU KHIỂN THỜI GIAN THỰC

3.1. Tổng quan hệ điều hành thời gian thực.....................................................................44
3.1.1. Khái niệm hệ điều hành......................................................................................44
3.1.2. Khái niệm hệ điều hành thời gian thực...............................................................44
3.1.3. Đặc điểm của hệ điều hành thời gian thực..........................................................44
3.1.4. Phân loại hệ điều hành thời gian thực.................................................................46
3.1.4.1. Hệ điều hành thời gian thực nhỏ với mục đích thương mại.........................46
3.1.4.2. Hệ điều hành thời gian thực mở rộng tới Unix và các hệ điều hành khác....46
3.1.4.3. Các nhân cho mục đích nghiên cứu.............................................................46
3.2. Tổ chức của hệ điều hành thời gian thực...................................................................47
3.2.1. Tiến trình............................................................................................................48
3.2.1.1. Khái niệm tiến trình.....................................................................................48
3.2.1.2. Phân loại tiến trình......................................................................................48
3.2.1.3. Các trạng thái của tiến trình.........................................................................49
3.2.2. Nhân...................................................................................................................53
3.2.2.1. Khái niệm về nhân (Kernel)........................................................................53
3.2.2.2. Kiến trúc hạt nhân.......................................................................................53
3.2.2.3. Các chức năng chính của nhân....................................................................54
3.2.2.4. Hạt nhân hệ điều hành thời gian thực..........................................................54
3.2.3. Tài nguyên găng – Miền găng............................................................................56
3.2.3.1. Tài nguyên găng (critical section)...............................................................56

3.2.3.2. Miền găng....................................................................................................57
3.2.4. Cấu trúc chia sẻ tài nguyên.................................................................................57
3.2.5. Biểu lịch.............................................................................................................59
3.2.5.1. Khái niệm xử lý đồng thời, xử lý đa nhiệm:................................................59
3


Vũ Thạch Dương - Bộ môn Robot và Điều khiển Tự động
Khoa CN Tự động hóa – ĐHCNTT&TT Thái Nguyên

BÀI GIẢNG MÔN HỌC : HỆ THỐNG
ĐIỀU KHIỂN THỜI GIAN THỰC

3.2.5.2. Khái niệm lập lịch.......................................................................................59
3.2.5.3. Các phương pháp lập lịch phổ biến.............................................................60
3.2.5.4. Đặc điểm bộ lập lịch trong RTOS................................................................61
3.2.6. Tác vụ ưu tiên, RPC (remote procedure calls)....................................................62
3.2.7. Các ngắt..............................................................................................................62
3.3. Hoạt động của hệ điều hành thời gian thực...............................................................63
3.3.1. Chuyển mạch tác vụ và chuyển mạch ngữ cảnh.................................................63
3.3.2. Truyền tin giữa các Tiến trình IPC (interprocess communication).....................65
Chương 4: HỆ ĐIỀU HÀNH THỜI GIAN THỰC CHO VI ĐIỀU KHIỂN 8051............69
4.1. Cấu trúc hệ điều hành thời gian thực RTX-Tiny cho vi điều khiển 8051...................69
4.1.1. Giới thiệu hệ điều hành RTX-Tiny.....................................................................69
4.1.2. Hoạt động của hệ điều hành RTX-Tiny..............................................................69
4.1.3. Một số khái niệm và điểm chú ý trong sử dụng hệ điều hành thời gian thực RTX
- Tiny............................................................................................................................ 70
4.2. Các hàm cơ bản của hệ điều hành thời gian thực điều hành RTX-Tiny.....................72
4.2.1. Hàm os_create_task............................................................................................72
4.2.2. Hàm Os_delete_task...........................................................................................73

4.2.3. Hàm Os_send_signal..........................................................................................73
4.2.4. Hàm Os_clear_signal.........................................................................................73
4.2.5. Hàm Os_running_taskid.....................................................................................73
4.2.6. Hàm Os_wait......................................................................................................73
4.2.7. Os_waitl.............................................................................................................73
4.2.8. Os_wait2............................................................................................................74
4.3. Xây dựng ứng dụng thời gian thực với 8051.............................................................74

4


Vũ Thạch Dương - Bộ môn Robot và Điều khiển Tự động
Khoa CN Tự động hóa – ĐHCNTT&TT Thái Nguyên

BÀI GIẢNG MÔN HỌC : HỆ THỐNG
ĐIỀU KHIỂN THỜI GIAN THỰC

4.3.1. Cấu trúc chương trình ứng dụng RTX51 Tiny....................................................74
4.3.2. Một số chú ý khi xây dựng chương trình ứng dụng RTX51 Tiny.......................75
4.3.3. Một số ví dụ chương trình ứng dụng RTX51 Tiny.............................................75
Chương 5: CÁC BỘ CHUYỂN ĐỔI TÍN HIỆU..............................................................78
5.1. Lý thuyết về lấy mẫu tín hiệu....................................................................................78
5.1.1 Định lý lấy mẫu...................................................................................................78
5.1.2. Lượng tử hóa và mã hóa.....................................................................................78
5.1.3. Mạch lấy mẫu và nhớ mẫu.................................................................................79
5.2. Bộ chuyển đổi DAC..................................................................................................80
5.2.1. Giới thiệu chung về bộ chuyển đổi DAC............................................................80
5.2.2. Các chỉ tiêu kỹ thuật chủ yếu của DAC..............................................................81
5.2.2.1. Độ phân giải................................................................................................81
5.2.2.2. Độ chính xác................................................................................................82

5.2.2.3. Sai số lệch...................................................................................................83
5.2.2.4. Thời gian ổn định........................................................................................83
5.2.2.5. Trạng thái đơn điệu......................................................................................83
5.2.3. Phân loại.............................................................................................................83
5.2.3.1. DAC dùng điện trở có trọng số nhị phân và bộ khuếch đại cộng.................83
5.2.3.2. DAC R/2R ladder........................................................................................85
5.2.3.3. DAC với đầu ra dòng...................................................................................87
5.2.3.4. DAC điện trở hình T....................................................................................88
5.3. Bộ chuyển đổi ADC..................................................................................................90
5.3.1. Giới thiệu chung bộ chuyển đổi ADC................................................................90
5.3.2. Các chỉ tiêu kỹ thuật chủ yếu của ADC..............................................................91
5


Vũ Thạch Dương - Bộ môn Robot và Điều khiển Tự động
Khoa CN Tự động hóa – ĐHCNTT&TT Thái Nguyên

BÀI GIẢNG MÔN HỌC : HỆ THỐNG
ĐIỀU KHIỂN THỜI GIAN THỰC

5.3.3. Phân loại.............................................................................................................91
5.3.3.1. ADC dạng sóng bậc thang...........................................................................91
5.3.3.2. ADC liên tiếp - xấp xỉ..................................................................................94
Chương 6: XÂY DỰNG HỆ XỬ LÝ THỜI GIAN THỰC..............................................97
CHO ĐO LƯỜNG, ĐIỀU KHIỂN...................................................................................97
6.1. Tổng quan về các bước xây dựng hệ xử lý thời gian thực.........................................97
6.2. Mô tả bài toán...........................................................................................................98
6.2.1. Lý thuyết thuật toán............................................................................................98
6.2.1.1. Khái niệm thuật toán...................................................................................98
6.2.1.2. Các đặc trưng của thuật toán.......................................................................99

6.2.1.3. Các phương pháp biểu diễn thuật toán.........................................................99
6.2.2. Giải thuật lập trình............................................................................................100
6.3. Thiết kế hệ thống xử lý............................................................................................101
6.4. Thiết kế mạch phần cứng........................................................................................102
6.5. Xây dựng và cài đặt phần mềm...............................................................................103

6


Vũ Thạch Dương - Bộ môn Robot và Điều khiển Tự động
Khoa CN Tự động hóa – ĐHCNTT&TT Thái Nguyên

BÀI GIẢNG MÔN HỌC : HỆ THỐNG
ĐIỀU KHIỂN THỜI GIAN THỰC

Chương 1: HỌ VI ĐIỀU KHIỂN 8051
1.1. Các vi điều khiển thuộc họ 8051
Vào năm 1981, hãng Intel giới thiệu một số bộ vi điều khiển được gọi là 8051. Bộ
vi điều khiển này có 128 byte RAM, 4K byte ROM trên chíp, hai bộ định thời, một cổng
nối tiếp và 4 cổng (đều rộng 8 bit) vào ra tất cả được đặt trên một chíp. 8051 là một bộ xử
lý 8 bit có nghĩa là CPU chỉ có thể làm việc với 8 bit dữ liệu tại một thời điểm. Dữ liệu
lớn hơn 8 bit được chia ra thành các dữ liệu 8 bit để cho xử lý. 8051 có tất cả 4 cổng vào
ra I/O mỗi cổng rộng 8 bit.

Hình 1.1 Một số bộ vi điều khiển họ 8051.
8051 đã trở nên phổ biến sau khi Intel cho phép các nhà sản xuất khác sản xuất và
bán bất kỳ dạng biến thế nào của 8051 mà họ thích với điều kiện họ phải để mã lại tương
thích với 8051. Điều này dẫn đến sự ra đời nhiều phiên bản của 8051 với các tốc độ khác
nhau và dung lượng ROM trên chíp khác nhau được bán bởi các nhà sản xuất. Điểm
quan trọng là mặc dù có nhiều biến thể khác nhau của 8051 về tốc độ và dung lượng nhớ

ROM trên chíp, nhưng tất cả các lệnh của chúng đều tương thích với 8051 ban đầu. Việc
này có nghĩa rất lớn vì khi ta viết chương trình của mình cho một phiên bản nào đó thì nó
cũng sẽ chạy với mọi phiên bản bất kỳ khác mà không phân biệt nó từ hãng sản xuất nào.
Đây chính là yếu tố quan trọng giúp cho 8051 phổ biến như ngày nay.
8051 được sản xuất dưới nhiều dạng kiểu bộ nhớ khác nhau như UV - PROM,
Flash và NV -RAM mà chúng đều có số đăng ký linh kiện khác nhau. Phiên bản UVPROM của 8051 là 8751. Chíp 8751 chỉ có 4K byte bộ nhớ UV-EPROM trên chíp. Để sử
dụng chíp này để phát triển yêu cầu truy cập đến một bộ đốt PROM cũng như bộ xoá UVEPROM để xoá nội dung của bộ nhớ UV-EPROM bên trong 8751 trước khi ta có thể lập
trình lại nó. Do một thực tế là ROM trên chíp đối với 8751 là UV-EPROM nên cần phải
mất 20 phút để xoá 8751 trước khi nó có thể được lập trình trở lại. Điều này đã dẫn đến
nhiều nhà sản xuất giới thiệu các phiên bản Flash Rom và NV-RAM của 8051. Ngoài ra
còn có nhiều phiên bản với các tốc độ khác nhau của 8751 từ nhiều hãng khác nhau.
Phiên bản Flash ROM được bán bởi nhiều hãng khác nhau chẳng hạn của Atmel
corp với tên gọi là AT89C51. Chíp 8051 phổ biến này có ROM trên chíp ở dạng bộ nhớ
7


Vũ Thạch Dương - Bộ môn Robot và Điều khiển Tự động
Khoa CN Tự động hóa – ĐHCNTT&TT Thái Nguyên

BÀI GIẢNG MÔN HỌC : HỆ THỐNG
ĐIỀU KHIỂN THỜI GIAN THỰC

Flash. Điều này là lý tưởng đối với những phát triển nhanh vì bộ nhớ Flash có thể được
xoá trong vài giây nhanh hơn nhiều so với 20 phút hoặc hơn giống như đối với 8751.
Còn phiên bản NV-RAM của 8051 do Dalas Semi Conductor cung cấp thì được
gọi là DS5000. Bộ nhớ ROM trên chíp của DS5000 ở dưới dạng NV-RAM. Khả năng
đọc/ghi của nó cho phép chương trình được nạp vào ROM trên chíp trong khi nó vẫn ở
trong hệ thống (không cần phải lấy ra). Điều này còn có thể được thực hiện thông qua
cổng nối tiếp của máy tính IBM PC. Việc nạp chương trình trong hệ thống (in-system)
của DS5000 thông qua cổng nối tiếp của PC làm cho nó trở thành một hệ thống phát triển

tại chỗ lý tưởng. Một điểm ưu việt của NV-RAM là khả năng thay đổi nội dung của ROM
theo từng byte tại một thời điểm. Điều này tương phản với bộ nhớ Flash và EPROM mà
bộ nhớ của chúng phải được xoá sạch trước khi lập trình lại cho chúng.
Ngoài ra còn có phiên bản OTP (khả trình một lần) của 8051 được sản xuất bởi rất
nhiều hãng. Các phiên bản Flash và NV-RAM thường được dùng để phát triển sản phẩm
mẫu. Khi một sản phẩm được thiết kế và được hoàn thiện tuyệt đối thì phiên bản OTP của
8051 được dùng để sản hàng loạt vì nó rẻ hơn rất nhiều theo giá thành một đơn vị sản
phẩm.
Một nhà sản xuất chính của họ 8051 khác nữa là Philips Corporation. Hãng này
có một dải lựa chọn rộng lớn cho các bộ vi điều khiển họ 8051. Nhiều sản phẩm của hãng
đã có kèm theo các đặc tính như các bộ chuyển đổi ADC, DAC, cổng I/0 mở rộng và cả
các phiên bản OTP và Flash.
Các bộ vi điều khiển thành viên khác của họ 8051 được thể hiện trong bảng sau.
Bộ nhớ chương trình trên chip

Bộ nhớ dữ liệu trên chip

Bộ định thời

8051

4K ROM

128 byte

2

8031

0K ROM


128 byte

2

8052

8K ROM

256 byte

3

8032

0K ROM

256 byte

3

8751

4K EPROM

128 byte

2

8752


8K EPROM

256 byte

3

Bộ vi điều khiển 8031 không có ROM nội nên khi sử dụng chíp này ta phải bổ
sung ROM ngoài cho nó. So với 8051 mà chương trình được chứa trong ROM trên chíp
bị giới hạn bởi 4K byte, còn ROM ngoài chứa chương trình được gắn vào 8031 thì có thể
lớn đến 64K byte. Khi bổ sung cổng, như vậy chỉ còn lại 2 cổng để thao tác. Để giải
quyết vấn đề này ta có thể bổ sung cổng vào - ra cho 8031 ví dụ phối phép 8031 với bộ
nhớ và cổng vào - ra chẳng hạn với chíp 8255. Ngoài ra còn có các phiên bản khác nhau
về tốc độ của 8031 từ các hãng sản xuất khác nhau.
8


Vũ Thạch Dương - Bộ môn Robot và Điều khiển Tự động
Khoa CN Tự động hóa – ĐHCNTT&TT Thái Nguyên

BÀI GIẢNG MÔN HỌC : HỆ THỐNG
ĐIỀU KHIỂN THỜI GIAN THỰC

Các bộ vi điều khiển 8xx2 cũng tương tự như 8xx1 nhưng có dung lượng bộ nhớ
gấp đôi so với 8xx1 mặt khác nó có thêm 1 bộ định thời nữa.
Ngày nay, các bộ vi điều khiển 8051 tiếp tục được phát triển và ứng dụng rộng rãi
với những phiên bản tiêu thụ ít điện năng và có ứng dụng được chuyên môn hóa.
1.2. Bộ vi điều khiển 8051
1.2.1. Sơ đồ cấu tạo


Hình 1.2 Cấu trúc vi điều khiển 8051
Như trong mục trước chúng ta đã có những cái nhìn tổng quát về các vi điều khiển
thuộc họ 8051. Trong phần này ta sẽ đi tìm hiểu chi tiết về 8051 nói chung, vi điều khiển
89C51 nói riêng, là vi điều khiển điển hình và phổ biến nhất của 8051.

9


Vũ Thạch Dương - Bộ môn Robot và Điều khiển Tự động
Khoa CN Tự động hóa – ĐHCNTT&TT Thái Nguyên

BÀI GIẢNG MÔN HỌC : HỆ THỐNG
ĐIỀU KHIỂN THỜI GIAN THỰC

Hình 1.3 Sơ đồ các chân của 8051
- P0.0 đến P0.7 là các chân của cổng 0.
- P1.0 đến P1.7 là các chân của cổng 1.
- P2.0 đến P2.7 là các chân của cổng 2.
- P3.0 đến P3.7 là các chân của cổng 3.
- RxD: Nhận tín hiệu kiểu nối tiếp.
- TxD: Truyền tín hiệu kiểu nối tiếp.
- : Ngắt ngoài 0.
- : Ngắt ngoài 1.
- T0: Chân vào 0 của bộ Timer/Counter 0.
- T1: Chân vào 1 của bộ Timer/Counter 1.
- : Ghi dữ liệu vào bộ nhớ ngoài.
- : Đọc dữ liệu từ bộ nhớ ngoài.
- RST: Chân vào Reset, tích cực ở mức logic cao trong khoảng 2 chu kỳ máy.
- XTAL1: Chân vào mạch khuyếch đaị dao động
- XTAL2: Chân ra từ mạch khuyếch đaị dao động.

- : Chân cho phép đọc bộ nhớ chương trình ngoài (ROM ngoài).
- ALE ((PROG)): Chân tín hiệu cho phép chốt địa chỉ để truy cập bộ nhớ ngoài, khi On-chip
xuất ra byte thấp của địa chỉ.Tín hiệu chốt được kích hoạt ở mức cao, tần số xung chốt = 1/6 tần số
dao động của bộ VĐK. Nó có thể được dùng cho các bộ Timer ngoài hoặc cho mục đích tạo xung
Clock.Đây cũng là chân nhận xung vào để nạp chương trình cho Flash (hoặc EEPROM) bên trong
10


Vũ Thạch Dương - Bộ môn Robot và Điều khiển Tự động
Khoa CN Tự động hóa – ĐHCNTT&TT Thái Nguyên

BÀI GIẢNG MÔN HỌC : HỆ THỐNG
ĐIỀU KHIỂN THỜI GIAN THỰC

On-chip khi nó ở mức thấp.
- /EA/Vpp: Cho phép On-chip truy cập bộ nhớ chương trình ngoài khi /EA=0,
nếu/EA=1 thì On-chip sẽ làm việc với bộ nhớ chương trình nội trú (trường hợp cần truy
cập vùng nhớ lớn hơn dung lượng bộ nhớ chương trình nội trú, thì bộ nhớ chương trình
ngoài cũng được sử dụng). Khi chân này được cấp nguồn điện áp 12V (Vpp) thì On-chip
đảm nhận chức năng nạp chương trình cho Flash bên trong nó.
- Vcc: Cung cấp dương nguồn cho On-chip (+5V).
- GND: Nối đất
1.2.2. Tổ chức bộ nhớ
Bộ nhớ trong AT89C51 bao gồm ROM và RAM. RAM trong AT89C51 bao gồm
nhiều thành phần: phần lưu trữ đa dụng, phần lưu trữ địa chỉ hóa từng bit, các bank thanh
ghi và các thanh ghi chức năng đặc biệt.
AT89C51 có bộ nhớ theo cấu trúc Harvard: Có những vùng bộ nhớ riêng biệt cho
chương trình và dữ liệu. Các đặc tính cần chú ý là:
Các thanh ghi và các port xuất nhập đã được định vị (xác định) trong bộ nhớ và có
thể truy xuất trực tiếp giống như các cơ sở địa chỉ bộ nhớ khác.

Ngăn xếp bên trong Ram nội nhỏ hơn so với Ram ngoại.
RAM bên trong AT89C51 được phân chia như sau:
-

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

-

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

-

RAM đa dụng từ 30H đến 7FH.

-

Các thanh ghi chức năng đặc biệt từ 80H đến FFH.

AT89C51 có khả năng mở rộng bộ nhớ lên đến 64K byte bộ nhớ chương trình và
64K byte bộ nhớ dữ liệu ngoài. Do đó có thể dùng thêm RAM và ROM nếu cần. Bộ nhớ
dữ liệu ngoài là một bộ nhớ RAM được đọc hoặc ghi khi được cho phép của tín hiệu RD
và WR . Hai tín hiệu này nằm ở chân P3.7 (RD) và P3.6 (WR).
1.2.3. Các thanh ghi
Các thanh ghi nội của AT89C51 được truy xuất ngầm định bởi bộ 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 bộ đếm chương trình và thanh ghi lệnh vì các
thanh ghi này hiếm khi bị tác động trực tiếp). Cũng như R0 đến R7, AT89C51 có 21
thanh ghi có chức năng đặc biệt (SFR: Special Function Register) ở vùng trên của RAM
nội từ địa chỉ 80H đến FFH.
Tất cả 128 địa chỉ từ 80H đến FFH không được định nghĩa, chỉ có 21 thanh ghi có

chức năng đặc biệt được định nghĩa sẵn các địa chỉ.

11


Vũ Thạch Dương - Bộ môn Robot và Điều khiển Tự động
Khoa CN Tự động hóa – ĐHCNTT&TT Thái Nguyên

BÀI GIẢNG MÔN HỌC : HỆ THỐNG
ĐIỀU KHIỂN THỜI GIAN THỰC

Ngoại trừ thanh ghi A đa số các thanh ghi có chức năng đặc biệt SFR có thể địa chỉ
hóa từng bit hoặc byte.
+ Thanh ghi trạng thái chương trình (PSW: Prorgam Status Word).
+ Thanh ghi B.
+ Con trỏ Ngăn xếp SP (Stack Pointer):
+ Con trỏ dữ liệu DPTR (Data Pointer).
+ Các thanh ghi0 Port (Port Register).
+ Các thanh ghi Timer (Timer Register).
+ Các thanh ghi Port nối tiếp (Serial Port Register).
+ Các thanh ghi ngắt (Interrupt Register).
+ Thanh ghi điều khiển nguồn PCON (Power Control Register).
1.2.4. Bộ định thời
1.2.4.1. Thanh ghi điều khiển Timer TCON
Thanh ghi điều khiển bao gồm các bit trạng thái và các bit điều khiển bởi Timer 0
và Timer 1. Thanh ghi TCON có bit định vị. Hoạt động của từng bit được tóm tắt như
sau:

Hình 1.3: Thanh ghi TCON
1.2.4.2. Thanh ghi mode timer (TMOD)


12


Vũ Thạch Dương - Bộ môn Robot và Điều khiển Tự động
Khoa CN Tự động hóa – ĐHCNTT&TT Thái Nguyên

BÀI GIẢNG MÔN HỌC : HỆ THỐNG
ĐIỀU KHIỂN THỜI GIAN THỰC

Thanh ghi TMOD gồm hai nhóm 4 bit là: 4 bit thấp đặt mode hoạt động cho Timer
0 và 4 bit cao đặt mode hoạt động cho Timer 1. 8 bit của thanh ghi TMOD được tóm tắt
như sau:

Hình 1.4: Thanh ghi TMOD
Với 2 bit M0 và M1 của TMOD để chọn mode cho Timer 0 hoặc Timer1.

TMOD không có bit định vị, nó thường được LOAD một lần bởi phần mềm ở đầu
chương trình để khởi động mode Timer. Sau đó sự định giờ có thể dừng lại và được khởi
động lại như thế bởi sự truy xuất các thanh ghi chức năng đặc biệt của Timer.
1.2.4.3. Các mode và cờ tràn
AT89C51 có hai Timer là Timer 0 và Timer 1. Ta dùng ký hiệu TLx và THx để chỉ
2 thanh ghi byte thấp và byte cao của Timer 0 hoặc Timer 1.
+ Mode Timer 13 bit (MODE 0):

Hình 1.5: Sơ đồ mode 0 của Timer

13



Vũ Thạch Dương - Bộ môn Robot và Điều khiển Tự động
Khoa CN Tự động hóa – ĐHCNTT&TT Thái Nguyên

BÀI GIẢNG MÔN HỌC : HỆ THỐNG
ĐIỀU KHIỂN THỜI GIAN THỰC

Mode 0 là mode Timer 13 bit, trong đó byte cao của Timer (THx) được đặt thấp và
5 bit trọng số thấp nhất của byte thấp Timer (TLx) đặt cao để hợp thành Timer 13 bit. 3
bit cao của TLx không dùng.
+ Mode Timer 16 bit (MODE 1):

Hình 1.6: Sơ đồ mode 1 của Timer
Mode 1 là mode Timer 16 bit, tương tự như mode 0 ngoại trừ Timer này hoạt
động như một Timer đầy đủ 16 bit, xung clock được dùng với sự kết hợp các thanh ghi
cao và thấp (TLx, THx). Khi xung clock được nhận vào, bộ đếm Timer tăng lên 0000H,
0001H, 0002H.... Và tràn sẽ xuất hiện khi có sự chuyển trên bộ đếm Timer từ FFFH sang
0000H và sẽ set cờ tràn Timer, sau đó Timer đếm tiếp. Cờ tràn là bit TFx trong thanh ghi
TCON mà nó sẽ được đọc hoặc ghi bởi phần mềm. Bit có trọng số lớn nhất (MSB) của
giá trị trong thanh ghi Timer là bit 7 của THx và bit có trọng số thấp nhất (LSB) là bit 0
của TLx. Nhược điểm là cờ tràn TF1 của Timer 1 không bị ảnh hưởng bởi các sự tràn của
Timer 1 bởi vì TF1 được nối với TH0. Khi timer 0 ở chế độ 3, timer 1 vẫn có thể sử dụng
bởi port nối tiếp như tạo tốc độ baud (vì nó không còn được nối với TF1).
+ Mode tự động nạp 8 bit (MODE 2):
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 trong khi byte cao THx của Timer giữ giá trị Reload. Khi bộ đếm tràn từ FFH
sang 00H, không chỉ cờ tràn được set mà giá trị trong THx cũng được nạp vào TLx: Bộ
đếm được tiếp tục từ giá trị này lên đến sự chuyển trạng thái từ FFH sang 00H kế tiếp và
cứ thế tiếp tục.Mode này thì phù hợp bởi vì các sự tràn xuất hiện cụ thể mà mỗi lúc nghỉ
thanh ghi TMOD và THx được khởi động.
+ Mode tách timer (MODE 3) :

Mode 3 là mode Timer tách ra và là sự khác biệt cho mỗi Timer. Timer 0 ở mode 3
được chia làm 2 timer 8 bit. TL0 và TH0 hoạt động như những Timer riêng lẻ với sự tràn
sẽ set các bit TL0 và TF1 tương ứng. Timer 1 bị dừng lại ở mode 3, nhưng có thể được
khởi động bởi việc ngắt nó vào một trong các mode).
1.2.5. Tổ chức ngắt
Có 5 nguyên nhân tạo ra ngắt đối với 8051: hai ngắt do bên ngoài, hai ngắt do bộ
định thời và một ngắt do port nối tiếp. Khi ta thiết lập trạng thái ban đầu cho hệ thống, tất
cả các ngắt điều bị vô hiệu hóa và sau đó chúng được cho phép riêng lẻ bằng phần mềm.
Khi xảy ra hai hay nhiều ngắt đồng thời hoặc xảy ra một ngắt trong khi một ngắt
đang phục vụ, ta có hai sơ đồ xử lý ngắt: sơ đồ chuỗi vòng và sơ đồ hai mức ưu tiên.
1.2.5.1. Cho phép và không cho phép ngắt:

14


Vũ Thạch Dương - Bộ môn Robot và Điều khiển Tự động
Khoa CN Tự động hóa – ĐHCNTT&TT Thái Nguyên

BÀI GIẢNG MÔN HỌC : HỆ THỐNG
ĐIỀU KHIỂN THỜI GIAN THỰC

Mỗi một nguyên nhân ngắt được cho phép hoặc không cho phép riêng rẽ thông
qua thanh ghi chức năng đặc biệt định địa chỉ bit, thanh ghi cho phép ngắt IE (interrupt
enable) có địa chỉ byte là 0A8H. Mỗi một bit của thanh ghi này cho phép hoặc không cho
phép từng nguyên nhân ngắt riêng lẻ, thanh ghi IE đồng thời có một bit toàn cục (global)
cho phép hoặc không cho phép tất cả các ngắt.
Bảng 1.1 Thanh ghi cho phép ngắt IE
Bit

Ký hiệu


Địa chỉ bit

Mô tả ( 0: không cho phép, 1: cho phép )

IE.7

EA

AFH

Cho phép/không cho phép ngắt toàn cục

IE.6

-

AEH

Không sử dụng

IE.5

ET2

ADH

Cho phép ngắt do bộ định thời 2

IE.4


ES

ACH

Cho phép ngắt do port nối tiếp

IE.3

ET1

ABH

Cho phép ngắt do bộ định thời 1

IE.2

EX1

AAH

Cho phép ngắt từ bên ngoài ( ngắt ngoài 1 )

IE.1

ET0

A9H

Cho phép ngắt do bộ định thời 0


IE.0

EX0

A8H

Cho phép ngắt từ bên ngoài ( ngắt ngoài 0 )

1.2.5.2. Ưu tiên ngắt
Mỗi một nguyên nhân ngắt được lập trình riêng rẽ để có một trong hai mức ưu
tiên thông qua chức năng thanh ghi đặc biệt được định địa chỉ bit, thanh ghi ưu tiên ngắt
IP (interrupt priority), thanh ghi này có địa chỉ byte là 0B8H.
Bảng 1.2 Thanh ghi ưu tiên ngắt IP
Khi

Bit

Ký hiệu

Địa chỉ bit

Mô tả (1: mức cao, 0: mức thấp)

IP.7

-

-


Không sử dụng

IP.6

-

-

Không sử dụng

IP.5

PT2

0BDH

Ưu tiên ngắt do bộ định thời 2

IP.4

PS

0BCH

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

IP.3

PT1


0BBH

Ưu tiên ngắt do bộ định thời 1

IP.2

PX1

0BAH

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

IP.1

PT0

0B9H

Ưu tiên ngắt do bộ định thời 0

IP.0

PX0

0B8H

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

15


hệ


Vũ Thạch Dương - Bộ môn Robot và Điều khiển Tự động
Khoa CN Tự động hóa – ĐHCNTT&TT Thái Nguyên

BÀI GIẢNG MÔN HỌC : HỆ THỐNG
ĐIỀU KHIỂN THỜI GIAN THỰC

thống được thiết lập lại trạng thái ban đầu, thanh ghi IP sẽ mặc định tất cả các ngắt ở
mức ưu tiên thấp.
Chương trình chính do được thực thi ơ mức nền và không được kết hợp với một
ngắt nào nên luôn luôn bị tạm dừng bởi các ngắt. Nếu có hai ngắt xảy ra đồng thời thì
ngắt nào có mức ưu tiên cao hơn sẽ được phục vụ trước.
Nếu có hai ngắt có cùng mức ưu tiên xuất hiện đồng thời, chuỗi vòng cố định sẽ
xác định ngắt nào được phục vụ trước. Chuỗi vòng này sẽ là: ngắt ngoài 0, ngắt do bộ
định thời 0, ngắt ngoài 1, ngắt do bộ định thời 1, ngắt do port nối tiếp, ngắt do bộ định
thời 2.
1.2.5.3. Xử lý ngắt
Khi có một ngắt xuất hiện và được CPU chấp nhận, chương trình chính bị ngắt.
Các thao tác sau đây xảy ra:
-

Hoàn tất việc thực thi lệnh hiện hành

-

Bộ đếm chương trình PC được cất vào stack

-


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

-

Các ngắt được chặn lại ở mức 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. Việc thực thi ISR kết thúc khi
gặp lệnh RETI. Lệnh này lấy lại giá trị cũ của bộ đếm chương trình PC từ stack và
phục hồi trạng thái của ngắt cũ.
1.2.5.4. Các vector ngắt
Khi một ngắt được chấp nhận, giá trị được nạp cho bộ đếm chương trình PC
được gọi là vector ngắt. Vector ngắt là địa chỉ bắt đầu của trình phục vụ ngắt của
nguyên nhân ngắt tương ứng.
Bảng 1.3 Bảng véctor ngắt
Ngắt

Địa chỉ vector

Số thứ tự ngắt

Reset hệ thống


0000H

-

Ngắt ngoài 0

0003H

0

Ngắt do bộ định thời 0

000BH

1

Ngắt ngoài 1

0013H

2

Ngắt do bộ định thời 1

001BH

3

Ngắt do port nối tiếp


0023H

4

Ngắt do bộ định thời 2

002BH

5

16


Vũ Thạch Dương - Bộ môn Robot và Điều khiển Tự động
Khoa CN Tự động hóa – ĐHCNTT&TT Thái Nguyên

BÀI GIẢNG MÔN HỌC : HỆ THỐNG
ĐIỀU KHIỂN THỜI GIAN THỰC

1.2.6. Truyền thông nối tiếp
Các máy tính truyền dữ liệu theo hai cách: Song song và nối tiếp. Trong truyền dữ
liệu song song thường cần rất nhiều đường dây dẫn chỉ để truyền dữ liệu đến một thiết bị
chỉ cách xa vài bước. Mặc dù trong các trường hợp như vậy thì nhiều dữ liệu được truyền
đi trong một khoảng thời gian ngắn bằng cách dùng nhiều dây dẫn song song, nhưng
khoảng cách thì không thể lớn được. Vì các đường cáp dài làm suy giảm thậm chí làm
méo tín hiệu. Ngoài ra, các đường cáp dài có giá thành cao. Vì những lý do này, để truyền
dữ liệu đi xa thì phải sử dụng phương pháp truyền nối tiếp.
Chức năng cơ bản của port nối tiếp là thực hiện việc chuyển đổi dữ liệu song song
thành nối tiếp khi phát và chuyển đổi dữ liệu nối tiếp thành song song khi thu.

Trong 8051 có một bộ truyền dữ liệu không đồng bộ (UART - Universal Asynchronous
serial Reveiver and Transmitter). Trước tiên chúng ta sẽ tìm hiểu các khái niệm quan
trọng trong phương pháp truyền thông nối tiếp không đồng bộ (chỉ cần một đường truyền
cho một quá trình, khung dữ liệu đã được chuẩn hóa bởi các thiết bị nên không cần
đường xung nhịp báo trước dữ liệu).
Các mạch phần cứng bên ngoài truy xuất port nối tiếp thông qua các chân TxD
(phát dữ liệu) và RxD (thu dữ liệu), các chân này đa hợp với hai chân của port 3: P3.1
(TxD) và P3.0 (RxD).
Đặc trưng của port nối tiếp là hoạt động song công (full duplex), nghĩa là có khả
năng thu và phát đồng thời. Ngoài ra port nối tiếp còn có một đặc trưng khác, việc đệm
dữ liệu khi thu của port này cho phép một ký tự được nhận và lưu trữ trong bộ đệm thu
trong khi ký tự tiếp theo được nhận vào. Nếu CPU đọc ký tự thứ nhất trước khi ký tự thứ
hai được nhận đầy đủ, dữ liệu sẽ không bị mất.
Phần mềm sử dụng hai thanh ghi chức năng đặc biệt SBUF và SCON để truy xuất
port nối tiếp. Bộ đệm của port nối tiếp SBUF có địa chỉ byte là 99H, trên thực tế bao gồm
hai bộ đệm. Việc ghi lên SBUF sẽ nạp dữ liệu để phát và việc đọc SBUF sẽ truy xuất dữ
liệu đã nhận được. Điều này có nghĩa là ta có hai thanh ghi riêng rẽ và phân biệt: thanh
ghi phát (chỉ ghi) thanh ghi thu (chỉ đọc) hay bộ đệm thu.
Thanh ghi điều khiển port nối tiếp SCON có địa chỉ byte là 98H là thanh ghi được
định địa chỉ từng bit, thanh ghi này có các bit trạng thái và các bit điều khiển. Các bit
điều khiển sẽ thiết lập chế độ hoạt động cho port nối tiếp còn các bit trạng thái chỉ ra sự
kết thúc việc thu hoặc phát một ký tự. Các bit trạng thái được kiểm tra bởi phần mềm
hoặc được lập trình để tạo ra ngắt.
Tần số hoạt động của port nối tiếp hay còn gọi là tốc độ baud (baud rate) có thể cố
định hoặc thay đổi. Khi tốc độ baud thay đổi được sử dụng, bộ định thời 1 được sử dụng
để cung cấp xung clock tốc độ baud. Trên chip 8052 bộ định thời 2 cũng có thể được lập
trình để cung cấp xung clock tốc độ baud.

17



Vũ Thạch Dương - Bộ môn Robot và Điều khiển Tự động
Khoa CN Tự động hóa – ĐHCNTT&TT Thái Nguyên

BÀI GIẢNG MÔN HỌC : HỆ THỐNG
ĐIỀU KHIỂN THỜI GIAN THỰC

1.2.6.1. Thanh ghi điều khiển truyền thông nối tiếp (SCON)
Chế độ hoạt động của port nối tiếp được thiết lập bằng cách tác động lên thanh
ghi chế độ SCON của port nối tiếp ở địa chỉ byte 99H.
Bảng 1.3 Thanh ghi điều khiển port nối tiếp SCON
Bit
SCON.7

Ký hiệu
SM0

Địa chỉ
Mô tả
9FH Bit 0 chọn chế độ của port nối tiếp.

SCON.6

SM1

9EH

SCON.5

SM2


9DH

SCON.4

REN

9CH

Cho phép thu, bit này phải được set để nhận
ký tự.

SCON.3

TB8

9BH

Bit phát 8, bit thứ 9 được phát ở chế độ 2 và 3,
được set và xoá bởi phần mềm.

SCON.2

RB8

9AH

Bit thu 8, bit thứ 9 nhận được

SCON.1


TI

99H

Cờ ngắt phát, cờ này được set ngay khi kết
thúc việc phát một ký tự, xoá bởi phần mềm.

SCON.0

RI

98H

Cờ ngắt thu, cờ này được set ngay khi kết thúc
việc thu một ký tự, xoá bởi phần mềm.

Bit 1 chọn chế độ của port nối tiếp.
Bit 2 chọn chế độ của port nối tiếp.
Bit này cho phép truyền thông đa xử lý.

Port nối tiếp của 8051 có 4 chế độ hoạt động, các chế độ được chọn bằng cách tác
động lên các bit SM0, SM1 trong thanh ghi SCON. Ba trong số các chế độ hoạt động
cho phép truyền không đồng bộ (asynchronous) trong đó mỗi ký tự được thu hoặc phát
sẽ cùng với một bit start và một bit stop tạo thành một khung (frame).
Bảng 4 Các chế độ hoạt động của port nối tiếp
SM0
0

SM1

0

Chế độ
0

Mô tả
Thanh ghi dịch

Tốc độ baud
Cố định (tần số dao động/12)

0

1

1

UART 8 bit

Thay đổi (thiết lập bởi bộ định thời)

1

0

2

UART 9 bit

Cố định (tần số dao động /12, /64)


1

1

3

UART 9 bit

Thay đổi (thiết lập bởi bộ định thời)

18


Vũ Thạch Dương - Bộ môn Robot và Điều khiển Tự động
Khoa CN Tự động hóa – ĐHCNTT&TT Thái Nguyên

BÀI GIẢNG MÔN HỌC : HỆ THỐNG
ĐIỀU KHIỂN THỜI GIAN THỰC

1.2.6.2. Hoạt động của UART
Ta thường dùng UART ở chế độ 1(có tốc độ baud thay đổi). Trong chế độ 1 port
nối tiếp hoạt động như một bộ thu phát không đồng bộ (universal asynchronous receiver
transmitter) có tốc độ baud thay đổi. UART là một bộ thu và phát dữ liệu nối tiếp với
mỗi một ký tự dữ liệu được đứng trước bởi một bit start (logic 0) và đứng sau bởi một bit
stop (logic 1). Thỉnh thoảng một bit chẵn lẻ được chèn vào giữa bit dữ liệu sau cùng và
bit stop.
Hoạt động chủ yếu của một UART là biến đổi dữ liệu phát từ song song thành nối
tiếp và biến đổi dữ liệu thu từ nối tiếp thành song song. Ở chế độ 1 ta có 10 bit được thu
trên chân RxD và 10 bit dược phát trên chân TxD cho mỗi ký tự dữ liệu, bao gồm 1 bit

start (luôn luôn là 0), 8 bit dữ liệu (bit LSB trước tiên) và 1 bit stop (luôn luôn là 1).
Khi hoạt động thu, bit stop được đưa đến bit RB8 của SCON. Với 8051 tốc độ
baud được thiết lập bởi tốc độ tràn (overflow rate) của bộ định thời 1 còn ở 8052 tốc độ
baud được thiết lập bởi tốc độ tràn của bộ định thời 1 hoặc 2 hoặc tổ hợp của cả hai (một
cho phát và một cho thu).
Việc phát được khởi động bằng cách ghi dữ liệu vào thanh ghi SBUF. Thời gian
phát của mỗi một bit là giá trị nghịch đảo của tốc độ baud (1/baud rate), cờ ngắt phát TI
được set bằng 1 ngay khi bit stop xuất hiện trên chân TxD.
Việc nhận được khởi động bởi một chuyển trạng thái từ 1 xuống 0 trên đường
RxD (bit start) và 8 bit dữ liệu thu được nạp vào thanh ghi SBUF.
1.2.6.3. Khởi động và truy xuất các thanh ghi
Cho phép thu:
Bit cho phép thu REN trong thanh ghi SCON phải được set bằng 1 bởi phần mềm
để cho phép nhận các ký tự.
Các cờ ngắt:
Các cờ ngắt thu RI và ngắt phát TI trong thanh ghi SCON đóng vai trò quan trọng
trong việc truyền dữ liệu nối tiếp của 8051. Cả hai bit đều được set bằng phần cứng
nhưng phải được xóa bằng phần mềm.
Cờ RI được set bằng 1 khi kết thúc việc nhận một ký tự và chỉ ra rằng bộ đệm thu
đầy. Nếu phần mềm muốn nhận một ký tự từ port nối tiếp, phần mềm phải chờ cho đến
khi RI được set bằng 1 kế đến phần mềm xóa RI và đọc ký tự từ SBUF.
Cờ TI được set bằng 1 khi kết thúc việc phát một ký tự và chỉ ra rằng bộ đệm phát
rỗng. Nếu phần mềm muốn phát một ký tự trước tiên phần mềm phải kiểm tra để biết
port nối tiếp đã sẵn sàng hay chưa.

19


Vũ Thạch Dương - Bộ môn Robot và Điều khiển Tự động
Khoa CN Tự động hóa – ĐHCNTT&TT Thái Nguyên


BÀI GIẢNG MÔN HỌC : HỆ THỐNG
ĐIỀU KHIỂN THỜI GIAN THỰC

1.2.6.4. Tốc độ Baud
Sử dụng bộ định thời 1 là xung clock tốc độ baud:
Kỹ thuật thường dùng để tạo xung clock tốc độ baud là thiết lập timer 1 hoạt động
ở chế độ 8 bit tự nạp lại (chế độ định thời 2) và đặt giá trị nạp thích hợp vào thanh ghi
TH1 để có tốc độ tràn đúng, từ đó tạo ra tốc độ baud.
Tốc độ baud = (Tốc độ tràn bộ định thời 1)/32
Ví dụ: Nếu tốc độ baud là 9600 thì tốc độ tràn của bộ định thời = 9600*32 =
307200 Hz. Và nếu mạch dao động là 11.059 MHz thì xung clock của bộ định thời =
11.059 M/12 = 921583 Hz và giá trị nạp cho TH1= 921583/307200 = 3
Bảng 5 Tốc độ baud của port nối tiếp
Tốc độ baud

Tần số thạch anh

Giá trị nạp cho TH1

9600

11.059 MHz

-3(FDH)

2400

11.059 MHz


-12(F4H)

1200

11.059 MHz

-24(E8H)

1.3. Lập trình cho vi điều khiển 8051
1.3.1. Ngôn ngữ lập trình cho 8051
Trong kỹ thuật vi xử lý nói chung, ngôn ngữ lập trình thường được chia làm 2 loại:
ngôn ngữ bậc thấp và ngôn ngữ bậc cao.
Ngôn ngữ bậc thấp là ngôn ngữ máy hoặc ngôn ngữ gần với máy. Ngôn ngữ máy
là ngôn ngữ ở bậc thấp nhất, chính là mã máy ở dạng nhị phân. Lập trình với ngôn ngữ
này đồng nghĩa với việc lập trình viên phải viết từng bit 0/1 cho từng mã lệnh cụ thể,
đương nhiên đó là việc rất vất vả và khó khăn. Kế đến là ngôn ngữ gần với máy, chính là
hợp ngữ (Assembly). Với ngôn ngữ này, lập trình viên có thể viết các lệnh cụ thể ở dạng
ký tự, tuân theo một tập hợp các ký tự nhất định gọi là tập lệnh. Nói cách khác, ở cấp độ
này, lập trình viên sẽ viết các lệnh ở dạng mã gợi nhớ (mnemonic) thay vì phải viết các
bit 0/1 cho các mã lệnh cụ thể. Trình hợp ngữ (Assembler) - một phần mềm trên máy tính
- sẽ đảm nhiệm việc dịch các lệnh do lập trình viên viết ở dạng mã gợi nhớ sang dạng mã
máy 0/1. Ngôn ngữ bậc cao là các ngôn ngữ gần với ngôn ngữ con người hơn, do đó việc
lập trình bằng các ngôn ngữ này trở nên dễ dàng và đơn giản hơn. Có thể kể đến một số
ngôn ngữ lập trình bậc cao như C, Basic, Pascal… trong đó C là ngôn ngữ thông dụng
hơn cả trong kỹ thuật vi xử lý. Về bản chất, sử dụng các ngôn ngữ này thay cho ngôn ngữ
bậc thấp là sự giảm tải cho lập trình viên trong việc nghiên cứu các tập lệnh và xây dựng
các cấu trúc giải thuật. Chương trình viết bằng ngôn ngữ bậc cao cũng sẽ được một phần
mềm trên máy tính gọi là trình biên dịch (Compiler) chuyển sang dạng hợp ngữ trước khi
chuyển sang mã máy. Mỗi loại ngôn ngữ có ưu và nhược điểm riêng.
20



Vũ Thạch Dương - Bộ môn Robot và Điều khiển Tự động
Khoa CN Tự động hóa – ĐHCNTT&TT Thái Nguyên

BÀI GIẢNG MÔN HỌC : HỆ THỐNG
ĐIỀU KHIỂN THỜI GIAN THỰC

Với hợp ngữ (đại diện cho ngôn ngữ bậc thấp):
- Ưu điểm: Mã máy sinh ra rất ngắn gọn, thời gian xửlý của CPU vì thế cũng được
giảm thiểu, trình hợp ngữ (Assembler) của các họ vi điều khiển đều miễn phí đối với
người sử dụng.
- Nhược điểm: Khó khăn trong việc tiếp cận với tập lệnh (tuy ở dạng mã gợi nhớ
nhưng vẫn chưa thực sự gần với ngôn ngữ con người), các cấu trúc giải thuật (if…else,
for…, switch…case…) hầu hết không có sẵn, vì vậy quá trình lập trình khó khăn, mất
nhiều thời gian và công sức, việc kế thừa và phát triển là gần như không thể.
Với ngôn ngữ C (đại diện cho ngôn ngữ bậc cao):
- Ưu điểm: Ngôn ngữ gần với ngôn ngữ con người, các cấu trúc giải thuật có sẵn,
do đó tạo sự thuận tiện, dễ dàng trong sự diễn đạt thuật toán, việc kế thừa và phát triển là
khả thi, tốn ít thời gian.
- Nhược điểm: Mã máy sinh ra thường dài hơn so với hợp ngữ (tất nhiên cũng còn
tùy vào năng lực của lập trình viên), thời gian xử lý của CPU vì thế cũng dài hơn, các
trình biên dịch (Compiler) tùy theo cấp độ tối ưu mà được thiết kế và bán với giá rất cao.
Trong thực tế hiện nay, các vi điều khiển có tài nguyên và bộ nhớ rất phong phú và
dồi dào. Mặt khác các trình biên dịch (Compiler) cũng được thiết kế ngày càng tối ưu, hỗ
trợ rất nhiều các thao tác xử lý giải thuật, cho phép trộn lệnh hợp ngữ vào những tình
huống yêu cầu khắt khe về mặt thời gian và lượng mã máy sinh ra. Chính vì thế yêu cầu
về tối giản mã máy khi lập trình không còn quá bức xúc như trước kia. Sử dụng ngôn ngữ
bậc cao giúp rút ngắn rất nhiều thời gian nghiên cứu, thiết kế sản phẩm nâng cao khả
năng kế thừa, phát triển, cải tiến các tính năng sản phẩm. Đó là lý do tại sao ngôn ngữ

bậc cao (điển hình là ngôn ngữ C) là sự lựa chọn của hầu hết những người tác nghiệp trên
lĩnh vực kỹ thuật vi xử lý.
1.3.2. Giới thiệu phần mềm lập trình Keil C và phần mềm mô phỏng Proteus
1.3.2.1. Giới thiệu phần mềm lập trình Keil C
Trong số các trình biên dịch C (C Compiler) cho họ vi điều khiển 8051, Keil C là
một trình biên dịch tối ưu, được sử dụng rộng rãi. Mục này chủ yếu hướng dẫn sử dụng
trình biên dịch này trong việc thiết kế phần mềm cho họ vi điều khiển 8051.
Tạo một Project mới
Tiếp đó gõ tên project vào hộp thoại. Chọn đường dẫn và bấm OK.
Chọn tiếp loại vi điều khiển sẽ sử dụng (trong trường hợp này là AT89C51).
Chọn câu trả lời “No” khi được hỏi “Copy Standart Startup Code to Project Folder
and Add File to Project?”

21


Vũ Thạch Dương - Bộ môn Robot và Điều khiển Tự động
Khoa CN Tự động hóa – ĐHCNTT&TT Thái Nguyên

BÀI GIẢNG MÔN HỌC : HỆ THỐNG
ĐIỀU KHIỂN THỜI GIAN THỰC

Tạo một file mới
Sau khi Keil tạo cho ta một file mặc định dạng Text, hãy Save File lại dưới dạng
mong muốn (*.c nếu là file mã nguồn, hoặc *.h nếu là file header). Một Project chủ yếu
sử dụng hai loại file nói trên. Tiếp đó thực hiện soạn thảo các file theo ý muốn.
Biên dịch Project
Để tạo ra file mã máy dạng *.hex nạp vào chip, click chuột phải như hình vẽ.
Trong hộp thoại hiện ra, hãy check vào Creat Hex File như chỉ dẫn.
Cuối cùng chọn theo Menu như hình ảnh, hoặc bấm phím F7. File mã máy *.hex

tạo ra sẽ nằm trong cùng một thư mục với các file khác của Project.
Khi đã có được file *.hex ta có thể dùng để nạp vào vi điều khiển bằng các mạch
nạp và phần mềm nạp tương ứng (phần mềm nạp thường đi kèm với từng mạch nạp
tương ứng). Ngoài ra file *.hex cũng có thể dùng để chạy mô phỏng bằng phần mềm mô
phỏng Protues, giúp ta kiểm soát lỗi trước khi tiến hành triển khai làm sản phẩm thực tế.
1.3.2.2. Lập trình 8051 với Keil C
a. Cấu trúc một chương trình
Gồm 4 phần chính (riêng lập trình theo hướng hệ điều hành sẽ trình bày ở phần
sau.)
1. Khai báo chỉ thị tiền xử lý
2. Khai báo các biến toàn cục
3. Khai báo nguyên mẫu các hàm
4. Xây dựng các hàm và chương trình chính
Ví dụ:
// Khai báo chỉ thị tiền xử lý:
#include<AT89x51.h>
#include<string.h>
#define Led1 P1_0
//*********************************
// Khai báo biến toàn cục:
Unsigned char data dem;
Unsigned int xdata X;
//*********************************
// Khai báo nguyên mẫu hàm
Void delay(unsigned int n);
22


Vũ Thạch Dương - Bộ môn Robot và Điều khiển Tự động
Khoa CN Tự động hóa – ĐHCNTT&TT Thái Nguyên


BÀI GIẢNG MÔN HỌC : HỆ THỐNG
ĐIỀU KHIỂN THỜI GIAN THỰC

bit tinh(unsigned int a);
//*********************************
// Xây dựng các hàm và chương trình chính:
void delay(unsigned int n)
{
Khai báo biến cục bộ;
Mã chương trình trễ;
}
Void main() // Chương trình chính
{
Khai báo biến cụ bộ;
Mã chương trình chính;
}
Bit tinh (unsigned int a)
{
Khai báo biến cục bô;
Mã chương trình tinh với tham số a;
}
b. Một số lưu ý khi lập trình với Keil C
1. Khi sử dụng loại vi điều khiển 8051 nào (đã lựa chọn trong khi tạo Project mới)
thì phải sử dụng file header của loại đó. Trong trường hợp này ta sử dụng file
“AT89X51.H” cho vi điều khiển AT89C51. Các file header được tìm trong thư mục …
C51\INC\ của Keil C đã cài ra.
2. Định nghĩa hằng số trong bộ nhớ chương trình
unsigned char code<tên biến>;
Ví dụ định nghĩa một mảng 3 hằng số:

unsigned char array[3] = {1,2,3};
3. Định nghĩa các chương trình con phục vụ ngắt
void<tên chương trình> (void) interrupt<tên Vector ngắt>
<tên chương trình> do lập trình viên tùy ý đặt.
<tên Vector ngắt> được tra ở phần cuối file header (AT89X52.H).

23


Vũ Thạch Dương - Bộ môn Robot và Điều khiển Tự động
Khoa CN Tự động hóa – ĐHCNTT&TT Thái Nguyên

BÀI GIẢNG MÔN HỌC : HỆ THỐNG
ĐIỀU KHIỂN THỜI GIAN THỰC

4. Không nên viết lệnh ở dạng biểu thức dài mà nên tách ra thành từng phép tính
nhỏ thực hiện lần lượt.
5. Nên dùng nhiều chú giải ở sau kí hiệu “ // ” hoặc ở giữa “ /* ” và “ */ ” sao cho
hợp lý để dễ theo dõi và sửa chữa khi viết code.
1.3.2.3. Phần mềm mô phỏng Proteus
Sau khi cài đặt Proteus trên máy, ta sử dụng phần mềm tiến hành mô phỏng kết
quả thu được của việc lập trình. Dưới đây là hướng dẫn một bài lập trình đơn giản sử
dụng vi điều khiển AT89C51 để điều khiển đèn LED.
Bước 1: Khởi động chương trình ISIS bằng cách chọn START -> All Program -> Proteus
7 Professional -> ISIS 7 Professional từ màn hình desktop của Window . Màn hình làm
việc của ISIS xuất hiện với đầy đủ các menu lệnh cũng như các thanh công cụ hỗ trợ cho
việc tạo và mô phỏng mạch điện.

Bước 2: Lấy linh kiện từ thanh công cụ nhấp chọn vào Component Mode chọn tiếp Pick
from Libraries cửa sổ Pick Devices hiện ra. Tại Key words gõ "AT89" để lấy IC

AT89C51. Chọn AT89C51và nhấp đúp để lấy linh kiện ra ngoài.

24


Vũ Thạch Dương - Bộ môn Robot và Điều khiển Tự động
Khoa CN Tự động hóa – ĐHCNTT&TT Thái Nguyên

BÀI GIẢNG MÔN HỌC : HỆ THỐNG
ĐIỀU KHIỂN THỜI GIAN THỰC

Tiếp theo lấy thạch anh làm tương tự, trong ô Keywords gõ "Crystal" chọn
Crystal, nhấp đúp để lấy linh kiện. Với LED trong Keywords gõ LED, kéo xuống dưới,
chọn LED tùy ý sao cho dễ quan sát, lấy trở, tụ cũng tương tự như vậy.
Sau khi hoàn tất lấy linh kiện các linh kiện đã được chọn sẽ nằm bên trái vùng làm
việc để đưa linh kiện ra ngoài vùng làm việc ta nhấp vào linh kiện đó rồi đưa chuột ra
vùng làm việc, nhấp trái chuột linh kiện đó sẽ xuất hiện, khi hoàn thành ta đc một vùng
làm việc với các linh kiện.

Tiếp theo tiến hành lấy nguồn, đất. Từ thanh công cụ, ta chọn Terminal Mode tại
cửa sổ nhỏ bên trái vùng làm việc ta chọn GROUND (GND) hoặc POWER (VCC).

25


Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×