HỌC PHẦN: VI XỬ LÝ - VI ĐIỀU KHIỂN
TS. Đỗ Văn Cần :
ĐT 0935253630
Web: noibunphodien.com
Khoa Kỹ thuật & Công nghệ
TRƯỜNG ĐẠI HỌC QUY NHƠN
Số TC: 3 – 30 LT + 30 TH
Chương 1: Tổng quan về vi xử lý (4 tiết)
Chương 2: Vi điều khiển họ 8051 (10 tiết)
Chương 3: Ngôn ngữ lập trình (6 tiết)
Chương 4: Thiết kế giao tiếp ngoại vi (10 tiết)
2
NỘI DUNG HỌC PHẦN
3
NỘI DUNG HỌC PHẦN
1. Lịch sử phát triển và cấu trúc bộ vi xử lý (2 tiết)
Định nghĩa
4
KỸ THUẬT VI ĐIỀU KHIỂN
Bộ vi xử lý (microprocessor)
Bộ vi xử lý (microprocessor) là một máy tính nhỏ hoặc CPU (đơn vị xử lý trung tâm) được sử dụng để tính toán, thực hiện phép toán logic, kiểm soát hệ thống và lưu trữ dữ liệu vv. Vi xử lý sẽ xử lý các dữ liệu đầu vào / đầu ra (input/output) thiết bị ngoại vi và đưa ra kết quả trở lại để chúng hoạt động. Dòng vi xử lý 4 bit đầu tiên được Intel sản xuất vào tháng 11/1971 với tên gọi là 4004
1. Lịch sử phát triển và cấu trúc bộ vi xử lý (2 tiết)
5
KỸ THUẬT VI ĐIỀU KHIỂN
Vi điều khiển (microcontroller)
Nó cũng là một máy tính nhỏ, trong đó CPU, bộ nhớ (RAM, ROM), I / O thiết bị ngoại vi, timers, counters, được nhúng vào trong một mạch tích hợp (IC) nơi mà các bộ vi xử lý và tất cả các khối này được kết hợp vào trong một board thông qua hệ thống bus. Vi điều khiển có thể dễ dàng giao tiếp với thiết bị ngoại vi bên ngoài như cổng nối tiếp, ADC, DAC, Bluetooth, Wi-Fi, …vv quá trình giao tiếp nhanh hơn khi so sánh với các bộ vi xử lý. Hầu hết các vi điều khiển sử dụng cấu trúc RISC. Ngoài ra còn có một số vi điều khiển sử dụng cấu trúc CISC như 8051, Motorolla, vv
Phân biệt Vi xử lý (Microprocessor -mP)
và Vi điều khiển (Microcontroller-mC)?
Định nghĩa
1. Lịch sử phát triển và cấu trúc bộ vi xử lý (2 tiết)
6
KỸ THUẬT VI ĐIỀU KHIỂN
Định nghĩa
1. Lịch sử phát triển và cấu trúc bộ vi xử lý (2 tiết)
Lịch sử sơ lượt
7
KỸ THUẬT VI ĐIỀU KHIỂN
CPU viết tắt của chữ Central Processing Unit (tiếng Anh), tạm dịch là Bộ xử lý trung tâm, là mạch điện tử, là mạch điện tử thực hiện các câu lệnh, là mạch điện tử thực hiện các câu lệnh của chương trình máy tính, là mạch điện tử thực hiện các câu lệnh của chương trình máy tính bằng cách thực hiện các phép tính số học, logic, so sánh và các hoạt động nhập/xuất dữ liệu (Input/Output) cơ bản từ mã lệnh được định sẵn trong một máy tính. Thuật ngữ này đã được sử dụng trong ngành công nghiệp máy tính kể từ đầu những năm 1960.[1]
1. Lịch sử phát triển và cấu trúc bộ vi xử lý (2 tiết)
Lịch sử sơ lượt
8
KỸ THUẬT VI ĐIỀU KHIỂN
1. Lịch sử phát triển và cấu trúc bộ vi xử lý (2 tiết)
Cấu trúc vi xử lý
9
KỸ THUẬT VI ĐIỀU KHIỂN
Mô tả chức năng các chân của vi xử lý 8086
1. Lịch sử phát triển và cấu trúc bộ vi xử lý (2 tiết)
Cấu trúc vi xử lý
10
KỸ THUẬT VI ĐIỀU KHIỂN
Mô tả chức năng các chân của vi xử lý 8086
- AD0 ÷ AD15 [I, O]: Các chân dồn kênh cho các tín hiệu của bus dữ liệu và bus địa chỉ. Xung ALE sẽ báo cho mạch ngoài biết khi nào trên các đường đó có tín hiệu dữ liệu (ALE=0) hoặc địa chỉ (ALE=1). Tín hiệu này chuyển sang trạng thái trở kháng cao khi Bus nội bộ ghi nhận tín hiệu treo.
- A16/S3, A17/S4, A18/S5, A19/S6 [O]: Địa chỉ/trạng thái. Địa chỉ A16 – A19 sẽ có mặt tại các chân đó khi ALE=1 còn khi ALE=0 thì trên các chân đó có tín hiệu trạng thái S3 – S6. Bit S6=0 liên tục, bit S5 phản ánh giá trị bit IF của thanh ghi cờ, hai bit S3, S4 phối hợp với nhau để chỉ ra việc truy nhập các thanh ghi đoạn. Tín hiệu này chuyển sang trạng thái trở kháng cao khi Bus nội bộ ghi nhận tín hiệu treo.
1. Lịch sử phát triển và cấu trúc bộ vi xử lý (2 tiết)
EU: Execution Unit, khối thực hiện lệnh.
BIU: Bus Interface Unit, khối phối ghép bus.
ALU: Arithmetic and Logic Unit, khối số học và logic.
Cấu trúc vi xử lý
11
KỸ THUẬT VI ĐIỀU KHIỂN
1. Lịch sử phát triển và cấu trúc bộ vi xử lý (2 tiết)
CPU = ALU + CU + Registers + Cache + Bus + MMU + Clock
Cấu trúc vi xử lý
12
KỸ THUẬT VI ĐIỀU KHIỂN
1. Lịch sử phát triển và cấu trúc bộ vi xử lý (2 tiết)
1. Đơn vị số học và logic (ALU - Arithmetic Logic Unit)
2. Đơn vị điều khiển (CU - Control Unit)
13
KỸ THUẬT VI ĐIỀU KHIỂN
1. Lịch sử phát triển và cấu trúc bộ vi xử lý (2 tiết)
3. Thanh ghi (Registers)
4. Bộ nhớ Cache
14
KỸ THUẬT VI ĐIỀU KHIỂN
1. Lịch sử phát triển và cấu trúc bộ vi xử lý (2 tiết)
5. Bus hệ thống
Là tập hợp các đường truyền dữ liệu giữa CPU và các thành phần khác.
Bus địa chỉ (Address Bus): Xác định vị trí của dữ liệu trong bộ nhớ.
Bus dữ liệu (Data Bus): Truyền dữ liệu giữa CPU và các thiết bị khác.
Bus điều khiển (Control Bus): Gửi tín hiệu điều khiển đến các thiết bị ngoại vi.
6. Đơn vị quản lý bộ nhớ (MMU - Memory Management Unit)
Quản lý không gian địa chỉ bộ nhớ.
Dịch địa chỉ ảo thành địa chỉ vật lý trong hệ thống bộ nhớ.
7. Bộ tạo xung nhịp (Clock Generator)
Cung cấp tín hiệu xung nhịp để đồng bộ hóa hoạt động của CPU.
Tốc độ được đo bằng MHz hoặc GHz (ví dụ: 3.2 GHz).
15
KỸ THUẬT VI ĐIỀU KHIỂN
1. Lịch sử phát triển và cấu trúc bộ vi xử lý (2 tiết)
Các thanh ghi có thể được chia làm 4 nhóm lần lượt có tên là:
-Các thanh ghi đoạn: CS, DS, SS, ES.
-Các thanh ghi đa năng: AX, BX, CX, DX.
-Các thanh ghi con trỏ và chỉ số: IP, BP, SP, SI, DI.
-Thanh ghi cờ. FR (Flag).
Thanh ghi
16
KỸ THUẬT VI ĐIỀU KHIỂN
1. Lịch sử phát triển và cấu trúc bộ vi xử lý (2 tiết)
Thanh ghi đoạn
Mọi sự trao đổi thông tin trong hệ thống vi xử lý đều dùng địa chỉ vật lý, còn địa chỉ được tạo bởi thanh ghi đoạn và thanh ghi lệch như trên được gọi là địa chỉ logic và được ký hiệu như sau:
Địa chỉ logic = Thanh ghi đoạn: Thanh ghi lệch
Địa chỉ logic tồn tại dưới dạng giá trị các thanh ghi cụ thể bên trong CPU và khi cần thiết truy nhập ô nhớ nào đó thì nó phải được đổi ra địa chỉ vật lý để rồi đưa lên bus địa chỉ . Việc chuyển đổi này do một bộ tạo địa chỉ thực hiện. Địa chỉ vật lý của ô nhớ được tính theo công thức sau:
20 bit địa chỉ vật lý = Thanh ghi đoạn x 16 + Thanh ghi lệch
Thanh ghi
17
KỸ THUẬT VI ĐIỀU KHIỂN
1. Lịch sử phát triển và cấu trúc bộ vi xử lý (2 tiết)
Thanh ghi
18
KỸ THUẬT VI ĐIỀU KHIỂN
1. Lịch sử phát triển và cấu trúc bộ vi xử lý (2 tiết)
Thanh ghi cờ FR (Flag Register)
Đây là thanh ghi khá đặc biệt trong CPU mỗi bit của nó để phản ánh một trạng thái nhất định của kết qủa phép toán do ALU thực hiện hoặc một hoạt động của EU. Dựa vào các cờ này mà người lập trình có thể đưa ra các lệnh thích hợp tiếp theo cho vi xử lý (các lệnh nhảy có điều kiện). Thanh ghi cờ có 16 bit nhưng chỉ sử dụng 9 bit làm bit cờ
Thanh ghi
19
KỸ THUẬT VI ĐIỀU KHIỂN
1. Lịch sử phát triển và cấu trúc bộ vi xử lý (2 tiết)
Thanh ghi cờ FR (Flag Register)
Các cờ trạng thái
-C hoặc CF (Carry Flag): Cờ nhớ CF = 1 khi có nhớ hoặc mượn từ MSB.
-F hoặc P (Parity Flag): Cờ chẵn lẻ, phản ánh tính chẵn lẻ của tổng số bit 1 có trong kết quả. CF = 1 khi tổng số bit 1 trong kết quả là chẵn.
-A hoặc AF (Auxiliary carry Flag): cờ nhớ phụ, rất có ý nghĩa khi ta làm việc với các số BCD, AF = 1 khi có nhớ hoặc mượn từ một số BCD thấp (4 bit thấp) sang một số BCD cao (4bit cao).
-Z hoặc ZF (Zero Flag): Cờ rỗng, ZF = 1 khi kết qủa bằng 0.
-S hoặc SF (Sign Flag): Cờ dấu, SF = 1 khi kết quả âm.
-O hoặc OF (Overflow Flag): Cờ tràn, OF = 1 khi kết quả là số bù hai vượt ra ngoài giá trị biểu diễn của nó.
20
KỸ THUẬT VI ĐIỀU KHIỂN
1. Lịch sử phát triển và cấu trúc bộ vi xử lý (2 tiết)
Thanh ghi cờ FR (Flag Register)
Các cờ điều khiển (có thể lập hoặc xoá bằng các lệnh riêng)
-T hoặc TF (Trap Flag): Cờ bẫy, TF = 1 thì CPU làm việc ở chế độ chạy từng lệnh (chế độ này dùng khi cần tìm lỗi chương trình)
-I hoặc IF (Interrupt enable Flag): Cờ cho phép ngắt, IF = 1 thì CPU cho phép các yêu cầu ngắt được tác động.
-D hoặc DF (Direction Flag): Cờ hướng, DF = 1 khi CPU làm việc với chuỗi ký tự theo ký tự từ phải sang trái (vì vậy D chính là cờ lùi).
21
KỸ THUẬT VI ĐIỀU KHIỂN
1. Lịch sử phát triển và cấu trúc bộ vi xử lý (2 tiết)
Thanh ghi trong vi điều khiển
22
KỸ THUẬT VI ĐIỀU KHIỂN
1. Lịch sử phát triển và cấu trúc bộ vi xử lý (2 tiết)
23
KỸ THUẬT VI ĐIỀU KHIỂN
24
NỘI DUNG HỌC PHẦN
2. Các cơ số và phép toán nhị phân (2 tiết)
Cơ số
25
KỸ THUẬT VI ĐIỀU KHIỂN
2. Các cơ số và phép toán nhị phân (2 tiết)
Cơ số
26
KỸ THUẬT VI ĐIỀU KHIỂN
2. Các cơ số và phép toán nhị phân (2 tiết)
Cơ số
27
KỸ THUẬT VI ĐIỀU KHIỂN
Bài tập: 123410 = ???2
2. Các cơ số và phép toán nhị phân (2 tiết)
Cơ số
28
KỸ THUẬT VI ĐIỀU KHIỂN
2. Các cơ số và phép toán nhị phân (2 tiết)
Phép toán số học
29
KỸ THUẬT VI ĐIỀU KHIỂN
Quy tắc:
0+0=0�0+1=1+0=1�1+1=10
Bài tập:
101101 + 111011 = ?
2. Các cơ số và phép toán nhị phân (2 tiết)
Phép toán số học
30
KỸ THUẬT VI ĐIỀU KHIỂN
Quy tắc:
0-0=0�0-1=-1(“mượn”, vì trong phép tính số nhị phân không được số âm )�1-0=1�1-1=0�-1-1=-10
Bài tập:
1101101 - 111001 = ?
2. Các cơ số và phép toán nhị phân (2 tiết)
Phép toán số học
31
KỸ THUẬT VI ĐIỀU KHIỂN
Bài tập:
1011 x 1010 =
2. Các cơ số và phép toán nhị phân (2 tiết)
Phép toán số học
32
KỸ THUẬT VI ĐIỀU KHIỂN
Bài tập:
10011111:1101=
2. Các cơ số và phép toán nhị phân (2 tiết)
33
KỸ THUẬT VI ĐIỀU KHIỂN
34
NỘI DUNG HỌC PHẦN
3. Cấu trúc và bộ nhớ họ 8051 (2 tiết)
35
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
3. Cấu trúc và bộ nhớ họ 8051 (2 tiết)
36
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
Các IC của họ MCS-51™ có các đặc trưng chung như sau:
3. Cấu trúc và bộ nhớ họ 8051 (2 tiết)
37
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
Các IC của họ MCS-51™ có các đặc trưng chung như sau:
Dòng SP | ROM | RAM | Số bộ định thời |
8051 8751 8951 | 4K ROM 4K EPROM 4K FLASH | 128 byte 128 byte 128 byte | 2 2 2 |
8032 8052 8752 8952 | 0K 8K ROM 8K EPROM 8K FLASH | 256 byte 256 byte 256 byte 256 byte | 3 3 3 3 |
3. Cấu trúc và bộ nhớ họ 8051 (2 tiết)
38
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
3. Cấu trúc và bộ nhớ họ 8051 (2 tiết)
39
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
Port 0:
Port 0 là một port xuất/nhập song hướng cực máng hở 8 bit. Nếu được sử dụng như là một ngõ xuất thì mỗi chân có thể kéo 8 ngõ vào TTL. Cần có các điện trở pullup (5k-10k) bên ngoài.
Ngoài ra còn có chức năng AD0- AD7
Port 1:
Port 1 là một port xuất/nhập song hướng 8 bit có các điện trở pullup bên trong.
Ngoài ra với họ 89x52 có thể các chức năng phụ
3. Cấu trúc và bộ nhớ họ 8051 (2 tiết)
40
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
Port 2:
Port 2 là một port xuất/nhập song hướng 8 bit có các điện trở pullup bên trong.
Ngoài ra còn là A8-A15 trong lệnh MOVX @DPTR.
Port 3:
Port 3 là một port xuất - nhập song hướng 8 bit có điện trở pullup nội bên trong.
Ngoài ra Port 3 cũng cung cấp các chức năng của các đặc trưng đặc biệt như được liệt kê dưới đây:
3. Cấu trúc và bộ nhớ họ 8051 (2 tiết)
41
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
3. Cấu trúc và bộ nhớ họ 8051 (2 tiết)
42
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
ROM 4kb: Từ 0000H-xxxxH: Lưu trữ chương trình
RAM 128b: Từ 00H - xxH: Thực thi chương trình
3. Cấu trúc và bộ nhớ họ 8051 (2 tiết)
43
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
RAM 128b: Từ 00H - xxH
3. Cấu trúc và bộ nhớ họ 8051 (2 tiết)
44
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
RAM 128b: Từ 00H - xxH
3. Cấu trúc và bộ nhớ họ 8051 (2 tiết)
45
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
RAM 128b: Từ 00H - xxH
3. Cấu trúc và bộ nhớ họ 8051 (2 tiết)
46
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
RAM 128b: Từ 00H - xxH
3. Cấu trúc và bộ nhớ họ 8051 (2 tiết)
47
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
PSW địa chỉ D0
Thanh ghi PSW
3. Cấu trúc và bộ nhớ họ 8051 (2 tiết)
48
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
49
NỘI DUNG HỌC PHẦN
4. Chức năng timer counter (2 tiết)
50
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
Chức năng timer
Vị trí Timer trong bộ nhớ RAM
4. Chức năng timer counter (2 tiết)
Trong 8051 có 4 chế độ Timer/counter có 2 bít C/T thanh ghi TMOD ở địa chỉ byte 89H quyết định chế độ Timer/counter.
51
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
Chức năng timer
4. Chức năng timer counter (2 tiết)
GATE = 0: Chế độ Timer/Counter;
GATE = 1: Chế độ Ngắt;
C/T = 0: Lựa chọn Timer;
C/T = 1: Lựa chọn Counter;
M1=0 M0=1
Chế độ 1 (16 bit đếm)
M1=1 M0=0
Chế độ 2 (8 bit đếm)
52
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
Chức năng timer
4. Chức năng timer counter (2 tiết)
Chế độ chế độ 1 (16 bit đếm)
Chế độ chế độ 2 (8 bit đếm)
53
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
x | x | x | x | x | x | x | x |
x | x | x | x | x | x | x | x |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
Chức năng timer
4. Chức năng timer counter (2 tiết)
Hoạt động Timer 0, chế độ 1 (16 bit) → TMOD=01H
Hoạt động Counter 1, chế độ 2 (8 bit) → TMOD=xxH
Hoạt động Timer 1, chế độ 1 (16 bit);Timer 0, chế độ 1 (16 bit); → TMOD=xxH
Bài tập xác định tất cả các trường hợp còn lại
…
54
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
Chức năng timer
4. Chức năng timer counter (2 tiết)
55
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
Chức năng timer
4. Chức năng timer counter (2 tiết)
56
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
Chức năng timer
4. Chức năng timer counter (2 tiết)
Thanh ghi TCON ở địa chỉ byte 88H quyết định hoạt động Timer/counter.
57
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
TMOD = 01H;
TH0= C3H;
TL0= 50H;
TR0=1;
Chức năng timer
MOV TMOD, #01H; chọn Timer0, chế độ 1
MOV TH0, #0C3H; nạp giá trị C3 vào nữa cao timer
MOV TL0,#050H; nạp giá trị 50 vào nữa thấp timer
SETB TR0; kích hoạt timer bắt đầu đếm
LL: JNB TF0, LL ; chờ timer đầy tràn
4. Chức năng timer counter (2 tiết)
Thanh ghi TCON ở địa chỉ byte 88H quyết định hoạt động Timer/counter.
TF1 (Timer 1 Overflow Flag): Được set (TF1 = 1) khi Timer 1 tràn. Cần xóa bằng phần mềm (TF1 = 0).
TR1 (Timer 1 Run Control Bit): Đặt TR1 = 1 để khởi động Timer 1, đặt TR1 = 0 để dừng.
TF0 (Timer 0 Overflow Flag): Được set (TF0 = 1) khi Timer 0 tràn. Cần xóa bằng phần mềm (TF0 = 0).
TR0 (Timer 0 Run Control Bit): Đặt TR0 = 1 để khởi động Timer 0, đặt TR0 = 0 để dừng.
58
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
Chức năng timer
4. Chức năng timer counter (2 tiết)
Các bước thiết lập Timer để tạo trễ
59
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
Chức năng timer
4. Chức năng timer counter (2 tiết)
Vi dụ:
60
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
Chức năng timer
4. Chức năng timer counter (2 tiết)
Tạo thời gian 1s timer 0 chế độ 1.
1s=1000.000us = 50 lần x 20.000 xung; 20.000 (10) → 4E20 (16) - 1 = 4E1F(16)
Cấu trúc:
TMOD = 01H
TH0 = 4E
TL0 =1F
TR0=1
lập lại 50 lần
61
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
Chức năng timer
Bài tập: Xây dựng cấu trúc tạo Timer 1 chế độ 2, thời gian 500ms
4. Chức năng timer counter (2 tiết)
Bài tập: Hãy viết thời trễ 1s, sử dụng chế độ 8 bít
Giải: 1s = 1.000.000us = 250 xung x 200 lần lặp 1 x 20 lần lặp 2. Tức 1 lần lặp 2 chạy 200 lần lặp1.
TMOD = 02H ; Time 0 chế độ 8 bít
TH0 = 06H; nạp giá trị ban đầu để có đếm 250 xung thì tràn (thạch anh 12Mhz)
TR=1; cho Timer chạy
Đợi đến tràn, Chờ TF0=1,
Lặp lại 200 lần vòng 1
Lặp 20 lần Vòng 2
Chú ý: vòng 1 nằm trong vòng 2. chạy 1 lần vòng 2, thì lặp 200 lần vòng 1
62
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
Chức năng timer
4. Chức năng timer counter (2 tiết)
63
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
64
NỘI DUNG HỌC PHẦN
5. Chức năng truyền thông (2 tiết)
Chức năng 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. Các mạch phần cứng bên ngoài truy xuất thông qua chân TxD (P3.1 phát dữ liệu) và RxD (P3.0 thu dữ liệu)
65
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
Chức năng truyền thông nối tiếp
5. Chức năng truyền thông (2 tiết)
66
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
Chức năng truyền thông nối tiếp
5. Chức năng truyền thông (2 tiết)
67
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
Chức năng truyền thông nối tiếp
5. Chức năng truyền thông (2 tiết)
Thanh ghi chọn chế độ SCON của port nối tiếp ở địa chỉ 98H, trước khi sử dụng port nối tiếp, thanh ghi SCON phải được khởi động đúng chế độ yêu cầu
68
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
Chức năng truyền thông nối tiếp
5. Chức năng truyền thông (2 tiết)
Bằng cách ghi giá trị 0 vào SM0, SM1. Dữ liệu nối tiếp được thu và phát thông qua chân RxD, TxD xuất xung clock dịch bit.
69
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
Chức năng truyền thông nối tiếp
5. Chức năng truyền thông (2 tiết)
Thiết lập truyền dữ liệu UART 8 bit (thay đổi)
SCON = 40H; //0100 0000
Bài tập áp dụng tất cả các trường hợp còn lại
Tương tự thiết lập Nhận UART 9 bít (thay đổi) SCON=??H
Tương tự thiết lập Nhận UART 9 bít (Cố định) SCON=??H
Tương tự thiết lập TRUYỀN UART 9 bít (thay đổi) SCON=??H
Tương tự thiết lập TRUYỀN UART 9 bít (Cố định) SCON=??H
70
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
Chức năng truyền thông nối tiếp
5. Chức năng truyền thông (2 tiết)
71
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
Chức năng truyền thông nối tiếp
5. Chức năng truyền thông (2 tiết)
72
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
Chức năng truyền thông nối tiếp
5. Chức năng truyền thông (2 tiết)
73
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
Chức năng truyền thông nối tiếp
5. Chức năng truyền thông (2 tiết)
1. Nạp thanh ghi TMOD giá trị 20H: báo rằng sử dụng Timer1 ở chế độ 2 để thiết lập chế độ baud.
2. Nạp thanh ghi TH1 các giá trị phù hợp để thiết lập chế độ baud truyền dữ liệu nối tiếp.
3. Nạp thanh ghi SCON giá trị 50H báo chế độ nối tiếp 1 để đóng khung 8 bit dữ liệu, 1 bit Start và 1 bit Stop.
4. Bật TR1=1 để khởi động Timer1.
5. Xoá bit cờ truyền dữ liệu: TI=0.
6. Byte ký tự cần phải truyền được ghi vào SBUF.
7. Bit cờ truyền TI được kiểm tra bằng một vòng lặp để đợi đến lúc dữ liệu được truyền xong (cờ TI=1).
8. Để truyền ký tự tiếp theo quay trở về bước 5.
74
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
Chức năng truyền thông nối tiếp
5. Chức năng truyền thông (2 tiết)
75
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
5. Chức năng truyền thông (2 tiết)
76
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
5. Chức năng truyền thông (2 tiết)
77
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
5. Chức năng truyền thông (2 tiết)
78
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
5. Chức năng truyền thông (2 tiết)
Ví dụ: Truyền ký tự “B” ra ngoài ở chế độ UART 9- cố định
ký tự “B” có mã 42H = 01000010 → P (chẵn) = 0
Cấu trúc:
SCON = 80h; UART 9- cố định
SBUF = “B” ; đưa mã SCII vào SBUF
Chờ TI =1 ; Chờ truyền xong
Xoá TI=0 ; Xoá chuẩn bị lần sau
79
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
Chức năng truyền thông nối tiếp
5. Chức năng truyền thông (2 tiết)
Ví dụ: Nhận chuỗi ký tự “ không biết trước” cất vào vùng RAM tại thanh ghi A, ở chế độ UART 8 thay đổi (9600)
REN =1
Cấu trúc:
TMOD = 20H; timer1, chế độ 0
TH1 = 0FDH
SCON = 50H; UART 8 thay đổi
TR1 = 1
Chờ RI =1 ; Chờ nhận xong
E0H = SBUF ; lấy dữ liệu nhận được ở SBUF cất vào thanh ghi A
Xoá RI=0 ; Xoá chuẩn bị lần sau
80
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
Chức năng truyền thông nối tiếp
5. Chức năng truyền thông (2 tiết)
81
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
82
NỘI DUNG HỌC PHẦN
6. Chức năng ngắt (2 tiết)
8051 có 5 nguyên nhân ngắt:
2 do bên ngoài,
2 ngắt do bộ định thời
1 ngắt do port nối tiếp.
8052 có thêm 1 ngắt do bộ định thời thứ 3.
Khi thiết lập trạng thái ban đầu cho hệ thống (cấp nguồn, Reset) tất cả các ngắt đều bị vô hiệu hóa và sau đó chúng cho phép riêng rẽ theo chương trình
83
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
Chức năng ngắt
6. Chức năng ngắt (2 tiết)
84
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
Chức năng ngắt
6. Chức năng ngắt (2 tiết)
85
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
Chức năng ngắt
6. Chức năng ngắt (2 tiết)
86
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
Chức năng ngắt
6. Chức năng ngắt (2 tiết)
Ví dụ Kích hoạt ngắt ngoài 1 thì
EA=1
EX1=1
hoặc
IE.7=1
IE.2=1
Tương tự thiết lập các ngắt sau
87
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
Chức năng ngắt
6. Chức năng ngắt (2 tiết)
Mỗi 1 nguyên nhân ngắt được lập trình riêng để có 1 trong 2 mức ưu tiên thông qua thanh ghi ưu tiên ngắt IP (interrup priority) có địa chỉ byte 0B8H
88
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
Chức năng ngắt
6. Chức năng ngắt (2 tiết)
Vecto reset hệ thống (RST ở địa chỉ 0000H) được chứa trong bảng này vì vậy cũng được xem như 1 ngắt: chương trình chính bị ngắt và PC được nạp giá trị mới
89
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
Chức năng ngắt
6. Chức năng ngắt (2 tiết)
Vecto reset hệ thống (RST ở địa chỉ 0000H) được chứa trong bảng này vì vậy cũng được xem như 1 ngắt: chương trình chính bị ngắt và PC được nạp giá trị mới
90
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
Chức năng ngắt
6. Chức năng ngắt (2 tiết)
91
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
Chức năng ngắt
6. Chức năng ngắt (2 tiết)
92
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
93
NỘI DUNG HỌC PHẦN
7. Tập lệnh họ 8051 (2 tiết)
94
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
7. Tập lệnh họ 8051 (2 tiết)
Nhóm lệnh di chuyển dữ liệu
MOV đích ; nguồn
MOV A, # 15 ; Thập phân
MOV A , #1111B ; Nhị phân
MOV A , #30H ; Hex
MOV A , #315D ; Thập phân
95
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
7. Tập lệnh họ 8051 (2 tiết)
Nhóm lệnh di chuyển dữ liệu
96
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
7. Tập lệnh họ 8051 (2 tiết)
Nhóm lệnh di chuyển dữ liệu
97
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
7. Tập lệnh họ 8051 (2 tiết)
Nhóm lệnh di chuyển dữ liệu
98
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
7. Tập lệnh họ 8051 (2 tiết)
Nhóm lệnh di chuyển dữ liệu
99
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
7. Tập lệnh họ 8051 (2 tiết)
Nhóm lệnh di chuyển dữ liệu
100
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
7. Tập lệnh họ 8051 (2 tiết)
Nhóm lệnh di chuyển dữ liệu Lệnh MOV (Di chuyển dữ liệu)
101
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
7. Tập lệnh họ 8051 (2 tiết)
Nhóm lệnh di chuyển dữ liệu MOVX (Di chuyển dữ liệu với bộ nhớ ngoài)
102
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
7. Tập lệnh họ 8051 (2 tiết)
Nhóm lệnh di chuyển dữ liệu (Di chuyển dữ liệu từ bộ nhớ chương trình)
103
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
7. Tập lệnh họ 8051 (2 tiết)
Nhóm lệnh di chuyển dữ liệu (Trao đổi dữ liệu)
104
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
7. Tập lệnh họ 8051 (2 tiết)
Nhóm lệnh di chuyển dữ liệu Lệnh PUSH và POP (Đẩy vào và lấy ra từ Stack)
105
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
7. Tập lệnh họ 8051 (2 tiết)
Nhóm lệnh toán học
106
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
7. Tập lệnh họ 8051 (2 tiết)
Nhóm lệnh toán học
107
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
7. Tập lệnh họ 8051 (2 tiết)
Nhóm lệnh toán học
108
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
7. Tập lệnh họ 8051 (2 tiết)
Nhóm lệnh toán học
109
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
7. Tập lệnh họ 8051 (2 tiết)
Nhóm lệnh toán học
110
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
7. Tập lệnh họ 8051 (2 tiết)
Nhóm lệnh toán học
111
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
7. Tập lệnh họ 8051 (2 tiết)
Nhóm lệnh toán học
112
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
7. Tập lệnh họ 8051 (2 tiết)
Nhóm lệnh toán học Lệnh ADD (Cộng hai số)
113
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
7. Tập lệnh họ 8051 (2 tiết)
Nhóm lệnh toán học Lệnh ADDC (Cộng có nhớ)
114
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
7. Tập lệnh họ 8051 (2 tiết)
Nhóm lệnh toán học Lệnh SUBB (Trừ có nhớ)
115
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
7. Tập lệnh họ 8051 (2 tiết)
Nhóm lệnh toán học Lệnh INC (Tăng giá trị lên 1)
116
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
7. Tập lệnh họ 8051 (2 tiết)
Nhóm lệnh toán học Lệnh DEC (Giảm giá trị đi 1)
117
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
7. Tập lệnh họ 8051 (2 tiết)
Nhóm lệnh toán học Lệnh MUL (Nhân hai số 8-bit)
118
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
7. Tập lệnh họ 8051 (2 tiết)
Nhóm lệnh toán học Lệnh DIV (Chia hai số 8-bit)
119
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
7. Tập lệnh họ 8051 (2 tiết)
Nhóm lệnh toán học Lệnh DA (Điều chỉnh A sau phép cộng nhị phân thập phân)
120
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
7. Tập lệnh họ 8051 (2 tiết)
Nhóm lệnh toán học Lệnh CPL (Đảo bit)
121
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
7. Tập lệnh họ 8051 (2 tiết)
Nhóm lệnh toán học Lệnh CLR (Xóa thanh ghi hoặc cờ)
122
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
7. Tập lệnh họ 8051 (2 tiết)
Nhóm lệnh Logic
ANL <dest> <src>
ORL <dest> <src>
XRL <dest> <src>
CLR A
CLR C
RL A ;Quay vòng thanh ghi A qua trái 1 bit
RLC A ; Quay vòng thanh ghi A qua trái 1 bit có cờ Carry
RR A ; Quay vòng thanh ghi A qua phải 1 bit
RRC A ; Quay vòng thanh ghi A qua phải 1 bit có cờ Carry
CPL Đảo bit
123
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
7. Tập lệnh họ 8051 (2 tiết)
Nhóm lệnh Logic
124
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
7. Tập lệnh họ 8051 (2 tiết)
Nhóm lệnh Logic
125
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
7. Tập lệnh họ 8051 (2 tiết)
Nhóm lệnh Logic
126
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
7. Tập lệnh họ 8051 (2 tiết)
Nhóm lệnh Logic
127
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
7. Tập lệnh họ 8051 (2 tiết)
Nhóm lệnh Logic
128
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
7. Tập lệnh họ 8051 (2 tiết)
Nhóm lệnh Logic
129
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
7. Tập lệnh họ 8051 (2 tiết)
Nhóm lệnh Logic
130
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
7. Tập lệnh họ 8051 (2 tiết)
Nhóm lệnh Logic
131
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
7. Tập lệnh họ 8051 (2 tiết)
Nhóm lệnh Logic
132
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
7. Tập lệnh họ 8051 (2 tiết)
Nhóm lệnh Logic
133
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
7. Tập lệnh họ 8051 (2 tiết)
Nhóm lệnh Logic
134
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
7. Tập lệnh họ 8051 (2 tiết)
Nhóm lệnh Logic
135
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
7. Tập lệnh họ 8051 (2 tiết)
Nhóm lệnh Logic
136
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
7. Tập lệnh họ 8051 (2 tiết)
Nhóm lệnh Logic
137
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
7. Tập lệnh họ 8051 (2 tiết)
Nhóm lệnh rẽ nhánh
JC rel ; Nhảy đến “rel” nếu cờ Carry C = 1.
JNC rel ; Nhảy đến “rel” nếu cờ Carry C = 0.
JB bit, rel ; Nhảy đến “rel” nếu (bit) = 1.
JNB bit, rel ; Nhảy đến “rel” nếu (bit) = 0.
JBC bit, rel ; Nhảy đến “rel” nếu bit = 1 và xóa bit.
AJMP Addr11 ; Nhảy tuyệt đối không điều kiện trong 2K.
LJMP Addr16 ; Nhảy dài không điều kiện trong 64K
SJMP rel ;Nhảy ngắn không điều kiện
JZ rel ; Nhảy đến A = 0. Thực hành lệnh kế nếu A 0.
JNZ rel ; Nhảy đến A 0. Thực hành lệnh kế nếu A = 0.
CJNE A, direct, rel ; So sánh và nhảy đến A direct
DJNE Rn, rel ; Giảm Rn và nhảy nếu Rn 0.
DJNZ direct, rel ; Tương tự lệnh DJNZ Rn, rel.
CALL
ACALL
RET
RETI
138
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
7. Tập lệnh họ 8051 (2 tiết)
Nhóm lệnh rẽ nhánh
139
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
7. Tập lệnh họ 8051 (2 tiết)
Nhóm lệnh rẽ nhánh
140
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
7. Tập lệnh họ 8051 (2 tiết)
Nhóm lệnh rẽ nhánh
141
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
7. Tập lệnh họ 8051 (2 tiết)
Nhóm lệnh rẽ nhánh
142
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
7. Tập lệnh họ 8051 (2 tiết)
Nhóm lệnh rẽ nhánh
143
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
7. Tập lệnh họ 8051 (2 tiết)
Nhóm lệnh rẽ nhánh
144
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
7. Tập lệnh họ 8051 (2 tiết)
Nhóm lệnh rẽ nhánh
145
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
7. Tập lệnh họ 8051 (2 tiết)
Nhóm lệnh rẽ nhánh
146
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
7. Tập lệnh họ 8051 (2 tiết)
Nhóm lệnh rẽ nhánh
147
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
7. Tập lệnh họ 8051 (2 tiết)
Nhóm lệnh rẽ nhánh
148
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
7. Tập lệnh họ 8051 (2 tiết)
Nhóm lệnh rẽ nhánh Lệnh LJMP (Nhảy xa)
149
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
7. Tập lệnh họ 8051 (2 tiết)
Nhóm lệnh rẽ nhánh Lệnh JZ (Nhảy nếu A = 0)
150
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
7. Tập lệnh họ 8051 (2 tiết)
Nhóm lệnh rẽ nhánh Lệnh JNZ (Nhảy nếu A ≠ 0)
151
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
7. Tập lệnh họ 8051 (2 tiết)
Nhóm lệnh rẽ nhánh Lệnh JC (Nhảy nếu C = 1)
152
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
7. Tập lệnh họ 8051 (2 tiết)
Nhóm lệnh rẽ nhánh Lệnh JNC (Nhảy nếu C = 0)
153
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
7. Tập lệnh họ 8051 (2 tiết)
Nhóm lệnh rẽ nhánh Lệnh JB (Nhảy nếu bit = 1)
154
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
7. Tập lệnh họ 8051 (2 tiết)
Nhóm lệnh rẽ nhánh Lệnh JNB (Nhảy nếu bit = 0)
155
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
7. Tập lệnh họ 8051 (2 tiết)
Nhóm lệnh rẽ nhánh Lệnh DJNZ (Giảm và nhảy nếu ≠ 0)
156
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
7. Tập lệnh họ 8051 (2 tiết)
157
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
158
NỘI DUNG HỌC PHẦN
8. Cấu trúc chương trình hợp ngữ (2 tiết)
159
Chương 3: NGÔN NGỮ LẬP TRÌNH
8. Cấu trúc chương trình hợp ngữ (2 tiết)
160
Chương 3: NGÔN NGỮ LẬP TRÌNH
8. Cấu trúc chương trình hợp ngữ (2 tiết)
161
Chương 3: NGÔN NGỮ LẬP TRÌNH
8. Cấu trúc chương trình hợp ngữ (2 tiết)
162
Chương 3: NGÔN NGỮ LẬP TRÌNH
8. Cấu trúc chương trình hợp ngữ (2 tiết)
163
Chương 3: NGÔN NGỮ LẬP TRÌNH
Cấu trúc tổng quát
ORG 0000H ; Đặt địa chỉ bắt đầu của chương trình
; Khai báo các hằng số hoặc vùng nhớ (nếu cần)
MAIN: ; Nhãn chính của chương trình
; Khởi tạo thanh ghi, bộ nhớ, ngắt (nếu cần)
; Thân chương trình - các lệnh thực thi chính
SJMP MAIN ; Vòng lặp vô hạn để giữ chương trình chạy
END ; Kết thúc chương trình
8. Cấu trúc chương trình hợp ngữ (2 tiết)
164
Chương 3: NGÔN NGỮ LẬP TRÌNH
ORG địa chi bắt đầu lưu chương trình
Nhảy tới vùng CT chính có ngắt
Địa chỉ vécto ngắt
Chương trình ngắt
RETI kết thúc chương trình ngắt
Chương trình CONx:
RET kết thúc chương trình CONx
END
8. Cấu trúc chương trình hợp ngữ (2 tiết)
165
Chương 3: NGÔN NGỮ LẬP TRÌNH
ORG 0000H ; Địa chỉ bắt đầu chương trình
MAIN:
SETB P1.0 ; Bật LED (P1.0 = 1)
CALL DELAY ; Gọi hàm trễ
CLR P1.0 ; Tắt LED (P1.0 = 0)
CALL DELAY ; Gọi hàm trễ
SJMP MAIN ; Lặp lại mãi mãi
; Hàm trễ đơn giản
DELAY:
MOV R7, #255 ; Lặp 255 lần
D1: MOV R6, #255 ; Lặp 255 lần
D2: DJNZ R6, D2 ; Giảm R6 đến 0
DJNZ R7, D1 ; Giảm R7 đến 0
RET ; Trở về chương trình chính
END ; Kết thúc chương trình
Giải thích các phần chính
8. Cấu trúc chương trình hợp ngữ (2 tiết)
166
Chương 3: NGÔN NGỮ LẬP TRÌNH
Câu lệnh WHILE (điều kiện) { ... } có thể được triển khai như sau:
WHILE_LOOP:
; Kiểm tra điều kiện
; Nếu điều kiện sai -> Thoát vòng lặp
; Thực hiện nội dung vòng lặp
SJMP WHILE_LOOP ; Lặp lại
8. Cấu trúc chương trình hợp ngữ (2 tiết)
167
Chương 3: NGÔN NGỮ LẬP TRÌNH
Ví dụ: Vòng lặp WHILE đếm từ 10 về 0
ORG 0000H
MOV R0, #10 ; Gán R0 = 10
WHILE_LOOP:
CJNE R0, #0, CONTINUE ; Nếu R0 ≠ 0, tiếp tục
SJMP EXIT ; Nếu R0 = 0, thoát vòng lặp
CONTINUE:
DEC R0 ; Giảm R0
SJMP WHILE_LOOP ; Quay lại đầu vòng lặp
EXIT:
NOP ; Kết thúc vòng lặp
END
8. Cấu trúc chương trình hợp ngữ (2 tiết)
168
Chương 3: NGÔN NGỮ LẬP TRÌNH
Cấu trúc DO-WHILE trong Assembly 8051
Câu lệnh DO { ... } WHILE (điều kiện); có thể được triển khai như sau:
DO_LOOP:
; Thực hiện nội dung vòng lặp
; Kiểm tra điều kiện
; Nếu điều kiện đúng -> tiếp tục lặp lại
8. Cấu trúc chương trình hợp ngữ (2 tiết)
169
Chương 3: NGÔN NGỮ LẬP TRÌNH
Cấu trúc DO-WHILE trong Assembly 8051
Ví dụ: Vòng lặp DO-WHILE đếm từ 5 về 0
assembly
CopyEdit
ORG 0000H
MOV R1, #5 ; Gán R1 = 5
DO_LOOP:
DEC R1 ; Giảm R1 mỗi lần lặp
JNZ DO_LOOP ; Nếu R1 ≠ 0, quay lại DO_LOOP
END
8. Cấu trúc chương trình hợp ngữ (2 tiết)
170
Chương 3: NGÔN NGỮ LẬP TRÌNH
REPEAT_LOOP:
; Thực hiện nội dung vòng lặp
; Kiểm tra điều kiện
; Nếu thỏa mãn -> Thoát vòng lặp
; Nếu không -> Quay lại REPEAT_LOOP
8. Cấu trúc chương trình hợp ngữ (2 tiết)
171
Chương 3: NGÔN NGỮ LẬP TRÌNH
Ví dụ: Lặp lại giảm giá trị R2 từ 10 về 0 và dừng khi R2 = 0
ORG 0000H
MOV R2, #10 ; Gán R2 = 10
REPEAT_LOOP:
DEC R2 ; Giảm giá trị R2
JZ EXIT ; Nếu R2 = 0, thoát vòng lặp
SJMP REPEAT_LOOP ; Nếu chưa, tiếp tục lặp lại
EXIT:
NOP ; Kết thúc chương trình
END
8. Cấu trúc chương trình hợp ngữ (2 tiết)
172
Chương 3: NGÔN NGỮ LẬP TRÌNH
Cấu trúc IF trong Assembly 8051
Câu lệnh IF (điều kiện) { ... } có thể được mô phỏng như sau:
; Kiểm tra điều kiện
JZ SKIP ; Nếu điều kiện không đúng, nhảy qua phần xử lý
; Phần lệnh trong IF
SKIP:
8. Cấu trúc chương trình hợp ngữ (2 tiết)
173
Chương 3: NGÔN NGỮ LẬP TRÌNH
Ví dụ: Nếu giá trị R0 = 5, thì bật đèn LED tại P1.0
ORG 0000H
MOV R0, #5 ; Giả sử R0 chứa giá trị 5
MOV A, R0
CJNE A, #5, SKIP ; Nếu A ≠ 5, bỏ qua bật LED
SETB P1.0 ; Bật LED tại P1.0
SKIP:
NOP
END
8. Cấu trúc chương trình hợp ngữ (2 tiết)
174
Chương 3: NGÔN NGỮ LẬP TRÌNH
Cấu trúc IF...ELSE trong Assembly 8051
Câu lệnh IF (điều kiện) { ... } ELSE { ... } có thể được mô phỏng như sau:
; Kiểm tra điều kiện
JZ ELSE_PART ; Nếu điều kiện không đúng, nhảy đến ELSE
; Phần lệnh trong IF
SJMP END_IF ; Nhảy qua phần ELSE
ELSE_PART:
; Phần lệnh trong ELSE
END_IF:
8. Cấu trúc chương trình hợp ngữ (2 tiết)
175
Chương 3: NGÔN NGỮ LẬP TRÌNH
Ví dụ: Nếu R0 = 5, bật LED tại P1.0, ngược lại tắt LED
ORG 0000H
MOV R0, #5 ; Giả sử R0 chứa giá trị 5
MOV A, R0
CJNE A, #5, ELSE_PART ; Nếu A ≠ 5, nhảy đến ELSE
SETB P1.0 ; Bật LED tại P1.0
SJMP END_IF ; Nhảy qua ELSE
ELSE_PART:
CLR P1.0 ; Tắt LED nếu A ≠ 5
END_IF:
NOP
END
8. Cấu trúc chương trình hợp ngữ (2 tiết)
176
Chương 3: NGÔN NGỮ LẬP TRÌNH
Chương trình này bật/tắt LED tại chân P1.0 với độ trễ.
ORG 0000H
MAIN:
SETB P1.0 ; Bật LED (P1.0 = 1)
CALL DELAY ; Gọi hàm trễ
CLR P1.0 ; Tắt LED (P1.0 = 0)
CALL DELAY ; Gọi hàm trễ
SJMP MAIN ; Lặp vô hạn
DELAY: ; Hàm tạo trễ
MOV R7, #255
D1: MOV R6, #255
D2: DJNZ R6, D2
DJNZ R7, D1
RET ; Trả về chương trình chính
END
8. Cấu trúc chương trình hợp ngữ (2 tiết)
177
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
178
NỘI DUNG HỌC PHẦN
9. Cấu trúc chương trình C (2 tiết)
179
Chương 3: NGÔN NGỮ LẬP TRÌNH
9. Cấu trúc chương trình C (2 tiết)
180
Chương 3: NGÔN NGỮ LẬP TRÌNH
9. Cấu trúc chương trình C (2 tiết)
181
Chương 3: NGÔN NGỮ LẬP TRÌNH
9. Cấu trúc chương trình C (2 tiết)
182
Chương 3: NGÔN NGỮ LẬP TRÌNH
9. Cấu trúc chương trình C (2 tiết)
183
Chương 3: NGÔN NGỮ LẬP TRÌNH
9. Cấu trúc chương trình C (2 tiết)
184
Chương 3: NGÔN NGỮ LẬP TRÌNH
9. Cấu trúc chương trình C (2 tiết)
185
Chương 3: NGÔN NGỮ LẬP TRÌNH
9. Cấu trúc chương trình C (2 tiết)
186
Chương 3: NGÔN NGỮ LẬP TRÌNH
9. Cấu trúc chương trình C (2 tiết)
187
Chương 3: NGÔN NGỮ LẬP TRÌNH
9. Cấu trúc chương trình C (2 tiết)
188
Chương 3: NGÔN NGỮ LẬP TRÌNH
9. Cấu trúc chương trình C (2 tiết)
189
Chương 3: NGÔN NGỮ LẬP TRÌNH
Cấu trúc WHILE trong C
Cấu trúc WHILE (điều kiện) { ... } trong C có dạng:
while (condition) {
// Nội dung vòng lặp
}
9. Cấu trúc chương trình C (2 tiết)
190
Chương 3: NGÔN NGỮ LẬP TRÌNH
Ví dụ: Vòng lặp WHILE đếm từ 10 về 0
#include <stdio.h>
int main() {
int R0 = 10; // Gán R0 = 10
while (R0 != 0) { // Nếu R0 ≠ 0, tiếp tục lặp
printf("Giá trị R0: %d\n", R0);
R0--; // Giảm R0
}
return 0;
}
9. Cấu trúc chương trình C (2 tiết)
191
Chương 3: NGÔN NGỮ LẬP TRÌNH
Cấu trúc DO-WHILE trong C
Cấu trúc DO { ... } WHILE (điều kiện); trong C có dạng:
do {
// Nội dung vòng lặp
} while (condition);
9. Cấu trúc chương trình C (2 tiết)
192
Chương 3: NGÔN NGỮ LẬP TRÌNH
Ví dụ: Vòng lặp DO-WHILE đếm từ 5 về 0
#include <stdio.h>
int main() {
int R1 = 5; // Gán R1 = 5
do {
printf("Giá trị R1: %d\n", R1);
R1--; // Giảm R1
} while (R1 != 0); // Nếu R1 ≠ 0, tiếp tục lặp
return 0;
}
9. Cấu trúc chương trình C (2 tiết)
193
Chương 3: NGÔN NGỮ LẬP TRÌNH
Cấu trúc REPEAT-UNTIL trong C
Trong C không có REPEAT ... UNTIL trực tiếp như Pascal, nhưng có thể thay thế bằng DO-WHILE với điều kiện phủ định.
do {
// Nội dung vòng lặp
} while (!condition);
9. Cấu trúc chương trình C (2 tiết)
194
Chương 3: NGÔN NGỮ LẬP TRÌNH
Ví dụ: Lặp lại giảm giá trị R2 từ 10 về 0 và dừng khi R2 = 0
#include <stdio.h>
int main() {
int R2 = 10; // Gán R2 = 10
do {
printf("Giá trị R2: %d\n", R2);
R2--; // Giảm R2
} while (R2 != 0); // Nếu R2 ≠ 0, tiếp tục lặp
return 0;
}
9. Cấu trúc chương trình C (2 tiết)
195
Chương 3: NGÔN NGỮ LẬP TRÌNH
Cấu trúc IF trong C
Cấu trúc IF (điều kiện) { ... } trong C có dạng:
if (condition) {
// Lệnh thực hiện nếu điều kiện đúng
}
9. Cấu trúc chương trình C (2 tiết)
196
Chương 3: NGÔN NGỮ LẬP TRÌNH
Ví dụ: Nếu giá trị R0 = 5, thì bật LED tại P1.0
#include <reg51.h>
void main() {
unsigned char R0 = 5;
if (R0 == 5) {
P1_0 = 1; // Bật LED tại P1.0
}
while (1); // Vòng lặp vô hạn
}
9. Cấu trúc chương trình C (2 tiết)
197
Chương 3: NGÔN NGỮ LẬP TRÌNH
Cấu trúc IF-ELSE trong C
Cấu trúc IF ... ELSE trong C có dạng:
if (condition) {
// Lệnh thực hiện nếu điều kiện đúng
} else {
// Lệnh thực hiện nếu điều kiện sai
}
9. Cấu trúc chương trình C (2 tiết)
198
Chương 3: NGÔN NGỮ LẬP TRÌNH
Ví dụ: Nếu R0 = 5, bật LED tại P1.0, ngược lại tắt LED
#include <reg51.h>
void main() {
unsigned char R0 = 5;
if (R0 == 5) {
P1_0 = 1; // Bật LED
} else {
P1_0 = 0; // Tắt LED
}
while (1);
}
9. Cấu trúc chương trình C (2 tiết)
199
Chương 3: NGÔN NGỮ LẬP TRÌNH
Cấu trúc IF-ELSE IF-ELSE trong C
Cấu trúc IF ... ELSE IF ... ELSE trong C có dạng:
if (condition1) {
// Xử lý khi condition1 đúng
} else if (condition2) {
// Xử lý khi condition2 đúng
} else {
// Xử lý nếu không điều kiện nào đúng
}
9. Cấu trúc chương trình C (2 tiết)
200
Chương 3: NGÔN NGỮ LẬP TRÌNH
Ví dụ: Nếu R0 = 1 bật LED, nếu R0 = 2 tắt LED, nếu khác thì nhấp nháy LED
#include <reg51.h>
void delay() {
int i;
for (i = 0; i < 30000; i++); // Tạo trễ
}
void main() {
unsigned char R0 = 2;
if (R0 == 1) {
P1_0 = 1; // Bật LED
} else if (R0 == 2) {
P1_0 = 0; // Tắt LED
} else {
while (1) {
P1_0 = !P1_0; // Nhấp nháy LED
delay();
}
}
while (1);
}
9. Cấu trúc chương trình C (2 tiết)
201
Chương 3: NGÔN NGỮ LẬP TRÌNH
9. Cấu trúc chương trình C (2 tiết)
202
Chương 3: NGÔN NGỮ LẬP TRÌNH
9. Cấu trúc chương trình C (2 tiết)
203
Chương 3: NGÔN NGỮ LẬP TRÌNH
9. Cấu trúc chương trình C (2 tiết)
Chương trình timer
204
Chương 3: NGÔN NGỮ LẬP TRÌNH
Chương trình con
TMOD = 0x01; Tomer0, chế độ 1 (16 bit)
TH0=0xFF; // Đếm bao xung???
TL0 =0x9C;
TR0=1; ‘’ kích hoạt timer
while (!TF0) đợi timer tràng
TR0=0; TF0=0 ; // xoá
Kết thúc CT con
9. Cấu trúc chương trình C (2 tiết)
Chương trình truyền thông
205
Chương 3: NGÔN NGỮ LẬP TRÌNH
#include<at89x51.h> //khai báo thư viện cho 89c51
void send(unsigned char a); //khai báo nguyên mẫu hàm
main() //Chương trình chính
{
TMOD=0x20; //Chọn Timer1, chế độ 2
TH1=0xFA; //Cài đặt tốc độ 4800 baud
SCON=0x50; //0101 0000: Chọn chế độ 1, Cho phép nhận
TR1=1; //Khởi động Timer1
while(1) //Vòng lặp vô hạn
{ send('D'); //Gọi hàm gửi 1 ký tự
……………………..
}
}
void send(unsigned char a) //Định nghĩa hàm gửi 1 ký tự
{
SBUF=a; //Ghi 1 byte dữ liệu vào thanh ghi SBUF
while(TI==0){} //vòng lặp để đợi cờ truyền TI lên 1
TI=0; //Xóa cờ truyền TI sau khi truyền xong
}
9. Cấu trúc chương trình C (2 tiết)
Chương trình ngắt
206
Chương 3: NGÔN NGỮ LẬP TRÌNH
Trong lập trình C trên Keil c cho 8051, chúng ta khai báo trình phục vụ ngắt theo cấu trúc sau:
Void Name (void) interrupt X //( X: là số thứ tự của ngắt )
{
// chương trình phục vụ ngắt
}Khi đó địa chỉ ngắt sẽ được tự động tính bằng
Interrupt Address = (X * 8) + 3
9. Cấu trúc chương trình C (2 tiết)
Chương trình ngắt
207
Chương 3: NGÔN NGỮ LẬP TRÌNH
#include<at89x51.h>
main()
{
//a)
IE=0x96; //1001 0110: lệnh này tương đương với 4 lệnh phía dưới
EA=1; //Cho phép sử dụng ngắt
ES=1; //Cho phép ngắt cổng nối tiếp
ET0=1; //Cho phép ngắt timer0
EX1=1; //Cho phép ngắt ngoài 1
while(1)
{
//Chương trình chính
//…
}
}
9. Cấu trúc chương trình C (2 tiết)
Chương trình ngắt
208
Chương 3: NGÔN NGỮ LẬP TRÌNH
void ctngattimer0(void) interrupt 1
{
}
void ctngatngoai1(void) interrupt 2
{ // chuong trình ph?c v? ng?t
}
void ctngattruyenthongnoitiep(void) interrupt 4
{ // chuong trình ph?c v? ng?t
}
9. Cấu trúc chương trình C (2 tiết)
Cấu trúc CT chính
209
Chương 3: NGÔN NGỮ LẬP TRÌNH
9. Cấu trúc chương trình C (2 tiết)
Ví dụ chương trình
210
Chương 3: NGÔN NGỮ LẬP TRÌNH
9. Cấu trúc chương trình C (2 tiết)
211
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
212
NỘI DUNG HỌC PHẦN
10. Bài tập ứng dụng và kiểm tra (2 tiết)
213
Chương 3: NGÔN NGỮ LẬP TRÌNH
Phần mềm MIDE
Có rất nhiều phần mềm cài đặt và dịch hợp có thể chuyển file C, ASM... thành file *.hex. Ở đây ta giới thiệu 1 phiên bản MIDE-51 dùng soạn thảo và hợp dịch sang file hex đồng thời có thể xem simulation trong bộ nhớ nội. Để cài đặt cần máy tính chạy trên nền Windown, nhắp đúp vào biểu tượng MIDE-51.exe
10. Bài tập ứng dụng và kiểm tra (2 tiết)
214
Chương 3: NGÔN NGỮ LẬP TRÌNH
Giao diện
215
NỘI DUNG HỌC PHẦN
11. Giao tiếp vào ra đơn bít (2 tiết)
Đèn LED
216
Chương 4: GIAO TIẾP NGOẠI VI
11. Giao tiếp vào ra đơn bít (2 tiết)
Nút bấm
217
Chương 4: GIAO TIẾP NGOẠI VI
11. Giao tiếp vào ra đơn bít (2 tiết)
Hiệu ứng 8 LED đơn khi sử dụng nút bấm
218
Chương 4: GIAO TIẾP NGOẠI VI
219
NỘI DUNG HỌC PHẦN
12. Giao tiếp ma quét (2 tiết)
LED 7 đoạn
P0=11111001 = F9H
220
Chương 4: GIAO TIẾP NGOẠI VI
12. Giao tiếp ma quét (2 tiết)
LED 7 đoạn
221
Chương 4: GIAO TIẾP NGOẠI VI
12. Giao tiếp ma quét (2 tiết)
LED 7 đoạn
Thực hiện lập trình đếm 1 số, 2 số
222
Chương 4: GIAO TIẾP NGOẠI VI
12. Giao tiếp ma quét (2 tiết)
Dưới đây là chương trình hợp ngữ 8051 để điều khiển 4 LED 7 đoạn theo phương pháp quét LED.
✅ Cách hoạt động:
223
Chương 4: GIAO TIẾP NGOẠI VI
12. Giao tiếp ma quét (2 tiết)
Phím matrix
224
Chương 4: GIAO TIẾP NGOẠI VI
12. Giao tiếp ma quét (2 tiết)
LED ma trix
225
Chương 4: GIAO TIẾP NGOẠI VI
12. Giao tiếp ma quét (2 tiết)
LED ma trix
226
Chương 4: GIAO TIẾP NGOẠI VI
227
NỘI DUNG HỌC PHẦN
12. Giao tiếp ma quét (2 tiết)
Phím matrix
228
Chương 4: GIAO TIẾP NGOẠI VI
12. Giao tiếp ma quét (2 tiết)
Phím matrix
229
Chương 4: GIAO TIẾP NGOẠI VI
230
NỘI DUNG HỌC PHẦN
13. Giao tiếp vào ra dữ liệu (2 tiết)
Màn hình LCD
231
Chương 4: GIAO TIẾP NGOẠI VI
13. Giao tiếp vào ra dữ liệu (2 tiết)
232
Chương 4: GIAO TIẾP NGOẠI VI
LCD
13. Giao tiếp vào ra dữ liệu (2 tiết)
233
Chương 4: GIAO TIẾP NGOẠI VI
LCD
13. Giao tiếp vào ra dữ liệu (2 tiết)
234
Chương 4: GIAO TIẾP NGOẠI VI
Màn tinh thể lỏng LCD
Màn hình tinh thể lỏng LCD 02_16
Chân RS: “Register Select” =1/0 🡪 hiển thị dữ liệu/tín hiệu đk
Chân R/W: “Read/Write” =1/0 🡪 đọc/ghi lên LCD
Chân E: “Enable” =1/0 🡪 cho phép/chốt dữ liệu lên LCD
Màn hình tinh thể lỏng LCD 08_24
Tương tự như LCD 04_16 có 2 chân E1, E2 dùng nửa trên và nửa dưới của màn hình.
LCD
13. Giao tiếp vào ra dữ liệu (2 tiết)
235
Chương 4: GIAO TIẾP NGOẠI VI
LCD
13. Giao tiếp vào ra dữ liệu (2 tiết)
236
Chương 4: GIAO TIẾP NGOẠI VI
LCD
13. Giao tiếp vào ra dữ liệu (2 tiết)
237
Chương 4: GIAO TIẾP NGOẠI VI
LCD
13. Giao tiếp vào ra dữ liệu (2 tiết)
238
Chương 4: GIAO TIẾP NGOẠI VI
LCD
13. Giao tiếp vào ra dữ liệu (2 tiết)
239
Chương 4: GIAO TIẾP NGOẠI VI
LCD
Chuỗi ký tự
13. Giao tiếp vào ra dữ liệu (2 tiết)
240
Chương 4: GIAO TIẾP NGOẠI VI
ADC
13. Giao tiếp vào ra dữ liệu (2 tiết)
241
Chương 4: GIAO TIẾP NGOẠI VI
ADC
13. Giao tiếp vào ra dữ liệu (2 tiết)
242
Chương 4: GIAO TIẾP NGOẠI VI
ADC
13. Giao tiếp vào ra dữ liệu (2 tiết)
243
Chương 4: GIAO TIẾP NGOẠI VI
ADC
13. Giao tiếp vào ra dữ liệu (2 tiết)
244
Chương 4: GIAO TIẾP NGOẠI VI
ADC
RD=“0” đọc data
CS= “0” chọn chip
CS= “1” dừng chip
WR=“0” cho chuyển đổi
WR=“1->0” bắt đầu chuyển đổi
INTR =“0” đã chuyển xong
Vref/2: điện áp tham chiếu
CLK IN và CLK R: dao động R = 10k và C= 150pF
fout = 606kHz
13. Giao tiếp vào ra dữ liệu (2 tiết)
245
Chương 4: GIAO TIẾP NGOẠI VI
Doc_ADC:
;KHOI TAO BAN DAU
SETB P3.6; WR=1
SETB P3.7; INTR =1
SETB P3.5; RD =1
CLR P3.6;
JB P3.7,$ ;
CLR P3.5;
MOV A,P1 ;
ret
13. Giao tiếp vào ra dữ liệu (2 tiết)
246
Chương 4: GIAO TIẾP NGOẠI VI
Hien_thi:
MOV A,#38H;
CALL DIEUKHIEN
CALL DELAY
MOV A,#01H
CALL DIEUKHIEN
CALL DELAY
MOV A,#0EH
CALL DIEUKHIEN
CALL DELAY
MOV A,#P1
CALL HIENTHI
CALL DELAY
RET
247
NỘI DUNG HỌC PHẦN
14. Giao tiếp động cơ (2 tiết)
248
Chương 4: GIAO TIẾP NGOẠI VI
org 00
LL:
Mov P1, #00000001b
Call delay
Mov P1, #00000010b
Call delay
Mov P1, #00000100b
Call delay
Mov P1, #00001000b
Call delay
JMP LL
14. Giao tiếp động cơ (2 tiết)
249
Chương 4: GIAO TIẾP NGOẠI VI
PWM
14. Giao tiếp động cơ (2 tiết)
250
Chương 4: GIAO TIẾP NGOẠI VI
PWM
14. Giao tiếp động cơ (2 tiết)
251
Chương 4: GIAO TIẾP NGOẠI VI
Viết timer 10us
Viết timer (10x)us
Viết chương trình điều khiển PWM đủ 1 chu kỳ Sin (Tần số băm 1kHz, chu kỳ băm 100 xung)
252
NỘI DUNG HỌC PHẦN
15. Giao tiếp truyền thông (2 tiết)
253
Chương 4: GIAO TIẾP NGOẠI VI
RS232
15. Giao tiếp truyền thông (2 tiết)
254
Chương 4: GIAO TIẾP NGOẠI VI
RS232
15. Giao tiếp truyền thông (2 tiết)
255
Chương 4: GIAO TIẾP NGOẠI VI
Đề số 1: Giao tiếp RS232
Thực hiện theo https://www.youtube.com/watch?v=MscslGSbFBQ
15. Giao tiếp truyền thông (2 tiết)
256
Chương 4: GIAO TIẾP NGOẠI VI
Đề số 2: Giao tiếp RS485
15. Giao tiếp truyền thông (2 tiết)
257
Chương 4: GIAO TIẾP NGOẠI VI
Đề số 3: Giao tiếp không dây hồng ngoại IR
Giao tiếp hồng ngoại https://drive.google.com/file/d/1pP2jo6reqWvtkggdb5bfE7mppxLS1OFU/view?usp=sharing
Thank you
For your attention
258