Đặc tính Có những đặc điểm chung của họ vi điều khiển MCS – 51: • 4kByte bộ nhớ FLASH ROM bên trong dùng để lưu chương trình điều khiển... Chức năng các chân khác của vi điều khiển • C
Trang 1VI XỬ LÝ TRONG ĐIỀU
KHIỂN
Trang 2PHẦN I:
• Chương I: Tổng quan
• Chương II: Vi điều khiển AT89C51
• Chương III:Ngôn ngữ lập trình
• Chương IV: PORT xuất nhập
• Chương V:TIMER – COUNTER
• Chương VI: Hàm Ngắt
PHẦN II:
Chuyên đề 1: Vi điều khiển AT89C51 và các thiết bị hiển thị
(LED 7 đoạn, LED ma trận, LCD)
Chuyên đề 2: Giao tiếp VĐK AT89C51 với nút nhấn, bàn phím Chuyên đề 3: Giao tiếp ADC, DC - VĐK
Chuyên đề 4: Giao tiếp VĐK – VĐK, VĐK – PC
Trang 31 Tống Văn On, Hoàng Đức Hải – Họ vi điều
khiển 8051, NXB Lao Động – Xã Hội 2001
2 Nguyễn Tăng Cường, Lập trình cho họ vi điều
khiển 8051, NXB Khoa học kỹ thuật
3 Đỗ Xuân Tiến, “Kỹ thuật VXL & lập trình
ASSEMBLY cho hệ VXL”, NXB
KH&KT-2001
Trang 4NHỮNG KHÁI NIỆM CƠ BẢN
Trang 5NỘI DUNG CHƯƠNG I
1.1 Các hệ thống số cơ bản
1.2.Nhắc lại một số kiến thức cơ bản về kỹ thuật số 1.3 Vi xử lý và Vi điều khiển
Trang 7b Chuyển đổi giữa các hệ thống số:
- Từ thập phân sang nhị phân:
Phương pháp : Thực hiện phép chia số thập phân
cho 2
Trang 8b Chuyển đổi giữa các hệ thống số:
- Từ thập phân sang nhị phân:
Trọng số của bit:
Vị trí bit: 7 6 5 4 3 2 1 0
Trang 9b Chuyển đổi giữa các hệ thống số:
- Từ nhị phân sang thập phân:
Phương pháp :
Trang 10b Chuyển đổi giữa các hệ thống số:
- Từ thập lục phân sang nhị phân:
Phương pháp :
Một số thập lục phân là một số gồm 4 bit
Trang 11b Chuyển đổi giữa các hệ thống số:
- Từ thập lục phân sang nhị phân:
Ví dụ: A5h 1010 0101
FA ???
53B ???
Trang 12- Từ nhị phân sang thập lục phân:
Ví dụ:
Trang 13• Chuyển đổi giữa thập phân và thập lục phân:
Trang 15d Một số phép toán cơ bản
• Cộng nhị phân
Ví dụ
Trang 16d Một số phép toán cơ bản
• Trừ nhị phân:
Máy tính không thực hiện được trực tiếp phép trừ Để
thực hiện phép trừ, máy tính thực hiện phép cộng
giữa số bị trừ với số bù 2 của số trừ
Trang 17Ví dụ 1:Tìm số bù 2 của số 10011101
Ví dụ 2: Thực hiện phép trừ 100 – 25 = ???
Trang 18
Ví dụ 2: Thực hiện phép trừ 100 – 25 = ???
Trang 20
Nếu 1byte biểu diễn một số không dấu thì giá trị của
nó thay đổi từ 0 255
Nếu 1 byte biểu diễn một số có dấu thì giá trị của nó thay đổi từ -128 +127
Trang 21
1.2 Nhắc lại một số kiến thức kỹ thuật số cơ bản:
a Mức logic:
Trang 221.2 Nhắc lại một số kiến thức kỹ thuật số cơ bản:
b Các cổng logic cơ bản và bảng chân lý
Trang 231.2 Nhắc lại một số kiến thức kỹ thuật số cơ bản:
b Các cổng logic cơ bản và bảng chân lý
Trang 241.2 Nhắc lại một số kiến thức kỹ thuật số cơ bản:
b Các cổng logic cơ bản và bảng chân lý
Trang 251.2 Nhắc lại một số kiến thức kỹ thuật số cơ bản:
c Bộ cộng nửa – Bộ cộng đủ
• Bộ cộng nửa
Trang 26• Bộ cộng đủ
Trang 271.3 Vi xử lý và vi điều khiển
1.3.1 Một số nét khái quát về vi xử lý
a Khái niệm
• Vi xử lý là một IC số chuyên về xử lý dữ liệu, tính toán
dữ liệu và điều khiển theo chương trình Bản thân vi xử lý không có bộ nhớ ROM,RAM
• Hệ thống vi xử lý gồm có vi xử lý, bộ nhớ và các thiết bị
ngoại vi xuất nhập
Trang 28
b Cấu trúc của một hệ vi xử lý:
Trang 31
• ROM:
- Bộ nhớ chỉ đọc được mà không thay đổi được
- Không bị mất khi mất điện
- Chương trình được nạp bởi nhà sản xuất
Trang 32
• BUS dữ liệu
• BUS Địa chỉ
Trang 33
• BUS điều khiển
Trang 34
• CPU:
Trang 36
c Tập lệnh của vi xử lý:
• Lệnh của vi xử lý là một số nhị phân, khi vi xử lý đọc một lệnh thì từ dữ liệu của vi xử lý sẽ yêu cầu vi xử lý thực hiện một công việc đơn giản nào đó hầu hết là
chuyển dữ liệu và xử lý dữ liệu
• Độ dài của một lệnh phụ thuộc độ dài của từ dữ liệu
Vi xử lý 8 bit độ dài lệnh là 8bit,…
Trang 37c Tập lệnh của vi xử lý:
Một số mã lệnh của 8051:
1110 0101 direct address: chuyển dữ liệu từ ô nhớ của
bộ nhớ trong vào thanh chứa
1111 0101 direct address: chuyển dữ liệu từ thanh
chứa vào ô nhớ của bộ nhớ bên trong
0011 0101 direct address: cộng có nhớ nội dung thanh
chứa với nội dung ô nhớ
Trang 38c Tập lệnh của vi xử lý:
Một số mã lệnh của 8051:
Trang 391.3.2 Vi điều khiển:
Vi điều khiển có chứa ROM,RAM bên trong nó Ngoài ra còn có thể tích hợp thêm một số khối chức năng như Timer – Counter, ADC, UART, … giúp cho vi điều
khiển có thể ứng dụng cho những hệ thống nhỏ
Một số họ vi điều khiển:
Trang 401.3.2 Vi điều khiển:
Trang 41HẾT CHƯƠNG I
Trang 42VI ĐIỀU KHIỂN AT89C51
Trang 432.1 Đặc tính – Cấu trúc – Chức năng các PORT
2.1.1 Đặc tính
Có những đặc điểm chung của họ vi điều khiển MCS – 51:
• 4kByte bộ nhớ FLASH ROM bên trong dùng để lưu chương trình điều khiển Độ bền: 1000 chu kỳ viết/ xóa
• 128 bytes RAM nội
• Có 32 đường xuất nhập 8 bit
• Có 2 Timer/Counter 16 bit
• Có 6 nguồn ngắt
Trang 442.1.3 Sơ đồ cấu trúc của vi điều khiển AT89C51
Trang 452.1.3 Các chân của vi điều khiển
Trang 46a Các PORT của vi điều khiển
Sơ đồ chân của AT89C51
Port 2
Có 2 chức năng:
-Khi chỉ dùng bộ nhớ bên trong: P2 làm đường xuất nhập -Khi dùng bộ nhớ bên ngoài: P2 làm bus địa chỉ và dữ liệu cao (AD15 – AD8)
Port 3
Có nhiều chức
năng
(Xem bảng 2.1)
Trang 47Chức năng các chân của PORT 3:
• PORT 3 có thể giữ vai trò Port xuất nhập thông thường
• Các chức năng khác:
Bảng 2.1 Chức năng các chân của PORT 3
Trang 48b Chức năng các chân khác của vi điều khiển
• Chân RST(Chân 9):
- Reset vi điều khiển khi điện áp ở mức cao
- Quá trình Reset chỉ thực hiện được khi điện áp mức cao được duy trì trong hai chu kỳ máy
- Sơ đồ nối chân Reset:
Trang 49b Chức năng các chân khác của vi điều khiển
• Chân XTAL1 và XTAL2 : được dùng để tạo tần số làm
việc cho vi điều khiển
Có 2 phương pháp tạo tần số làm việc cho vi điều khiển:
Phương pháp 1: Dùng bộ tạo dao động tích hợp bên trong vi
điều khiển Cần nối thêm dao động thạch anh hoặc bộ
Trang 50b Chức năng các chân khác của vi điều khiển
• Chân XTAL1 và XTAL2 : được dùng để tạo tần số làm
việc cho vi điều khiển
Có 2 phương pháp tạo tần số làm việc cho vi điều khiển:
Phương pháp 2: Dùng bộ tạo dao động bên ngoài
Tín hiệu dao động được
đưa vào chân XTAL1
Chân XTAL2 không sử
dụng
Trang 51b Chức năng các chân khác của vi điều khiển
• Chân Vcc (40) đƣợc nối lên nguồn 5V và chân GND (20)
nối mass
• Chân :
- Chức năng là tín hiệu ngõ ra cho phép đọc bộ nhớ chương
trình mở rộng thường nối với chân của bộ nhớ EPROM bên ngoài cho phép đọc mã lệnh
- Tích cực ở mức thấp
- Chỉ dùng khi có sử dụng thêm bộ nhớ bên ngoài, nếu không
có giao tiếp với bộ nhớ ngoài thì bỏ trống
PSEN
OE
Trang 52b Chức năng các chân khác của vi điều khiển
• Chân : Xác định chương trình được vi điều khiển thực
thi Cụ thể:
- Khi được nối với mức logic 1(+5V): vi điều khiển thực thi
chương trình trong bộ nhớ nội
- Khi được nối với mức logic 0 (0V) : Vi điều khiển thực thi chương trình trong bộ nhớ ngoại
• ALE/PROG (Address Latch Enable/Program):
- Chốt byte thấp của Bus địa chỉ khi thực hiện truy xuất vào
bộ nhớ ngoài
- Cấp xung clock cho các phần cứng khác của hệ thống( =1/6 xung của dao động thạch anh)
- Nhận xung từ bên ngoài trong chế độ lập trình song song
lưu vào bộ nhớ Flash ROM
EA
Trang 54Mỗi bộ nhớ giao tiếp với CPU qua một bus độc lập
- Ƣu điểm: Giao tiếp nhanh, có thể thay đổi số bit của từng bộ
nhớ mà không ảnh hưởng lẫn nhau
- Nhƣợc: Kiến trúc phức tạp
14-bit bus Program memory
Trang 552.2.1.2 Tổ chức bộ nhớ của AT89C51
a Tổ chức bộ nhớ
• AT89C51 có bộ nhớ nội bên trong (Internal memory) và
có thể 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 giữ chương trình
• Bộ nhớ nội của AT89C51có kiến trúc kiểu Harvard gồm:
- Một bộ nhớ chương trình (Flash Rom): có dung lượng
4Kbyte cho phép xóa và lập trình lại bằng xung điện
- Một bộ nhớ dữ liệu (RAM) có dung lượng 128 byte
Trang 562.2.1.2 Tổ chức bộ nhớ của AT89C51
b Bộ nhớ RAM nội
Gồm 128 byte được chia thành 3 vùng:
• 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
• RAM đa dụng từ 30H đến 7FH
Trang 57• Vùng nhớ các bank thanh ghi:
Có 32 byte có địa chỉ từ 00h đến 1Fh
- Được chia thành 4 bank:
Register bank 0 register Bank 3
- Mỗi bank thanh ghi gồm 8 thanh ghi:
Ký hiệu từ R0 R7
Câu hỏi:
1 Chức năng của vùng nhớ này là gì?
2 Truy xuất các thanh ghi nhƣ thế nào?
Trang 581 Chức năng của vùng nhớ này là gì?
Nếu trong hệ thống có nhiều chương trình
và mỗi chương trình phải sử dụng các thanh
ghi để xử lý dữ liệu thì mỗi một bank có thể
được sử dụng để lưu trữ dữ liệu của một
chương trình nào đó dữ liệu của chương
trình này không bị mất đi khi dữ liệu chương
trình khác đang được xử lý
Trang 592 Truy xuất đến các thanh ghi ở mỗi bank nhƣ thế nào?
- Cách 1: Truy xuất qua địa chỉ của mỗi thanh ghi
Truy xuất được ngay cả khi bank đã được chọn hoặc
Trang 60• Vùng nhớ đƣợc định địa chỉ từng bit
Gồm 16byte bộ nhớ tương ứng với 128 bit
- Các byte ô nhớ có địa chỉ từ 20H 2FH
- Các bit ô nhớ được định địa chỉ từ 0078
- Cho phép truy xuất từng bit và truy xuất
từng byte
Dùng lưu trữ những dữ liệu phải xử lý bit
Trang 61• Vùng nhớ đƣợc định địa chỉ từng bit
Gồm 16byte bộ nhớ tương ứng với 128 bit
- Các byte ô nhớ có địa chỉ từ 20H 2FH
- Các bit ô nhớ được định địa chỉ từ 0078
- Cho phép truy xuất từng bit và truy xuất
từng byte
Dùng lưu trữ những dữ liệu phải xử lý bit
Trang 62• Vùng RAM đa dụng cho phép truy xuất trực tiếp, gián
tiếp
- Gồm 80 byte có địa chỉ từ 30H đến 7FH
- Mọi địa chỉ trong vùng RAM đa dụng đều có thể truy xuất
tự do dùng kiểu định địa chỉ trực tiếp hoặc gián tiếp
Trang 63c Các thanh ghi có chức năng đặc biệt
(Special Function Registers - SFR)
Các thanh ghi chức năng đặc biệt được định địa chỉ từ 80h
đến FFh bao gồm:
Trang 64
c Các thanh ghi có chức năng đặc biệt
(Special Function Registers - SFR)
Các thanh ghi chức năng đặc biệt được định địa chỉ từ 80h
đến FFh bao gồm:
Trang 65
c Các thanh ghi có chức năng đặc biệt
Trang 66
c Các thanh ghi có chức năng đặc biệt
• Thanh ghi A(hay ACC): ở địa chỉ E0 cùng với ALU
thực hiện tất cả các lệnh số học và logic chỉ có hiệu lực đối với thanh ghi A
• Thanh ghi B: ở địa chỉ F0h cùng với thanh ghi A thực
hiện các phép toán nhân/chia
MUL AB: nhân 2 số 8 bit không dấu được lưu trong hai
thanh ghi A, B và trả về kết quả 16bit trong đó 8bit byte cao được lưu trong A và 8 bit byte thấp được lưu trong B DIV AB: lấy giá trị trong A chia cho giá trị lưu trong B
kết quả: thương lưu trong A và số dư lưu trong B
Trang 67
c Các thanh ghi có chức năng đặc biệt
• Thanh ghi P0, P1, P2, P3: tương ứng là Port 0 ở địa chỉ
80h, Port1 ở địa chỉ 90h, Port 2 ở địa chỉ A0, Port3 ở địa chỉ B0
Các thanh ghi trên cho phép truy xuất từng bit
Không phải nhớ địa chỉ của từng bit
Truy xuất bằng tên đã được phần mềm qui định
Ví dụ P0.0
Trang 68
c Các thanh ghi có chức năng đặc biệt
• Thanh ghi trạng thái chương trình:
- C: cờ Carry được sử dụng cho các lệnh toán học
C = 1: nếu phép cộng có tràn hoặc phép trừ có mượn
C = 0: nếu phép cộng không tràn hoặc phép trừ không có
mượn
- AC (cờ Carry phụ ) được dùng khi cộng những giá trị
BCD: AC=1 nếu 4 bit thấp lớn hơn 09H, ngược lại AC
=0
- Cờ tràn OV: OV =1 khi phép cộng hoặc trừ cho kết quả
ngoài vùng giá trị cho phép
Trang 69c Các thanh ghi có chức năng đặc biệt
• Thanh ghi DPH (địa chỉ 83) và DPL (địa chỉ 82):
Hai thanh ghi này kết hợp lại tạo thành một thanh ghi 16 bit có
tên là DPTR (Data Pointer) – con trỏ dữ liệu
Chức năng: lưu giữ địa chỉ 16 bit khi truy xuất dữ liệu của bộ
nhớ bên ngoài
• Thanh ghi PCON (Power Control): Điều khiển công
suất khi vi điều khiển làm việc hay ở chế độ chờ
Trang 71NGÔN NGỮ LẬP TRÌNH
Trang 723.1 Giới thiệu
- Chương trình
Là một tập hợp các chỉ thị được sắp xếp theo một trật tự nhất định trước nhằm hướng dẫn máy tính thực hiện các thao tác, hành động cần thiết để đáp ứng một mục tiêu đã định trước của con người như truy xuất dữ liệu, tìm kiếm, giải bài toán,…
Trang 73• Ngôn ngữ máy (machine language)
• Hợp ngữ
• Ngôn ngữ cấp cao
Trang 74
Ngôn ngữ máy (machine language) hay mã máy là
một loại ngôn ngữ lập trình trong đó mọi chỉ thị
đều đƣợc biểu diễn bằng các con số nhị phân 0 và
Trang 75Ngôn ngữ máy (machine language) của AT89C51
là một tập các số nhị phân 8 bit gồm 256 byte từ
Trang 76Chu kỳ thực hiện lệnh của vi xử lý:
Trang 77KHÁI NIỆM
Hợp ngữ ( assemly language) là một ngôn ngữ lập
trình cấp thấp trong đó sử dụng các ký hiệu gợi nhớ để biểu diễn mã lệnh của máy thay cho mã
máy dạng số
Trang 78TRÌNH HỢP DỊCH
Một tiện ích dùng để dịch một chương trình viết bằng hợp ngữ sang ngôn ngữ máy được gọi là trình hợp
dịch
Trang 79KHÁI NIỆM
Ngôn ngữ cấp cao là một ngôn ngữ lập trình gần gũi với ngôn ngữ tự nhiên của con người bao gồm các danh từ, động từ, ký hiệu toán học và các thao tác lý luận Các yếu tố này có thể liên kết phối hợp tạo
thành hình thức câu Các câu này được gọi là mệnh
đề của chương trình
Trang 80TRÌNH BIÊN DỊCH VÀ THÔNG DỊCH
Nhiệm vụ:
Dịch một chương trình được viết bằng ngôn ngữ cấp cao sang ngôn ngữ máy trước khi chương trình được thi hành
Trang 81• CPU đòi hỏi một số chu kỳ xung đồng hồ nhất định để thực hiện xong một lệnh
• Bộ dao động xác định số chu kỳ xung đồng hồ trong mỗi giây
Ví dụ: tần số dao động 12MHz 12 triệu
xung đồng hồ trong một giây
Chu kỳ máy là số chu kỳ xung đồng hồ cần
thiết để thực hiện xong một chu kỳ lệnh
Trang 82• 8051 đòi hỏi 12 chu kỳ xung đồng hồ để thực hiện xong một chu kỳ lệnh
Tần số chu kỳ máy = tần số dao động/12
Thời gian thực hiện một chu kỳ lệnh của
8051:
1/Tần số chu kỳ máy = 12/ Tần số dao động
Trang 83Ví dụ
Tính chu kỳ máy và thời gian chu kỳ lệnh của
AT89C51 khi dao động:
a) 12Mhz
b) 11.0592MHz
c) 16Mhz
d) 20Mhz
Trang 84của vi điều khiển AT89C51
Trang 85OP CODE OP CODE OP CODE
ADDRESS
Thành phần 1
Thành phần 2
Cho biết công việc vi xử lý cần thực hiện
Cho biết thông tin địa chỉ hay vị trí các dữ liệu vi xử lý cần thực hiện
Lệnh 1 từ Địa chỉ ngầm định
Lệnh 2 từ Địa chỉ ngầm định
Lệnh 3 từ Địa chỉ ngầm định
Từ 1
Từ 2
Từ 2
Trang 86Các kiểu định địa chỉ cho phép định rõ nơi lấy
dữ liệu hoặc nơi nhận dữ liệu tùy thuộc vào
cách thức sử dụng của người lập trình
• Kiểu định địa chỉ dùng thanh ghi
Khi cần xử lý dữ liệu được lưu trong một
thanh ghi chỉ cần gọi tên thanh ghi đó trong câu lệnh Mã lệnh chỉ có 1byte
Ví dụ: Mov A, R1
Trang 87• Kiểu định địa chỉ trực tiếp:
Trong câu lệnh địa chỉ của ô nhớ có chứa dữ liệu
cần xử lý được chỉ rõ
Độ dài 2byte: 1byte mã lệnh, 1byte địa chỉ ô nhớ
Ví dụ: Mov A,05H
Trang 88• Kiểu định địa chỉ gián tiếp:
Địa chỉ của ô nhớ cần lấy dữ liệu được lưu trong
một ô nhớ trung gian:
- Địa chỉ các ô nhớ trong RAM nội được lưu
trong thanh ghi R0,R1
- Địa chỉ ô nhớ ngoài được lưu trong thanh ghi
DPTR
- Khi truy xuất dùng kí hiệu @ trước các ô nhớ
trung gian
Ví dụ: Mov A, @R1
Trang 89• Kiểu định địa chỉ tức thời:
Dùng để nạp giá trị cho một thanh ghi hay một ô
nhớ
Dùng kí hiệu # trước hằng số cần nạp
Ví dụ: Mov A,#30H
Trang 90• Kiểu định địa chỉ tương đối:
- Chỉ sử dụng cho các lệnh nhảy
- Nơi nhảy đến bằng địa chỉ lưu trong thanh
ghi PC + giá trị lệch tương đối
- Giá trị lệch tương đối có giá trị từ -128127
- Nơi nhảy đến được xác định bằng nhãn và
trình biên dịch tính toán giá trị lệch tương đối
Trang 93• Lệnh chuyển dữ liệu từ một thanh ghi vào
thanh ghi A:
- Cú pháp: MOV A,Rn
- Mã lệnh: 1110 1n2n1n0
- Thời gian thực hiện: 1 chu kỳ
- Chức năng: copy nội dung thanh ghi Rn vào
thanh ghi A
- Có 8 lệnh tương ứng với 8 thanh ghi R0R7
Ví dụ: Mov A,R0 ↔ 1110 1111