KỸ THUẬT VI ĐIỀU KHIỂN
Giảng viên: TS. Đỗ Văn Cần
Web: noibunphodien.com
ĐT: 0935263630
1
2
NỘI DUNG HỌC PHẦN
Định nghĩa
3
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
4
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
5
KỸ THUẬT VI ĐIỀU KHIỂN
Định nghĩa
Lịch sử sơ lượt
6
KỸ THUẬT VI ĐIỀU KHIỂN
Cấu trúc vi xử lý
7
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.
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ý
8
KỸ THUẬT VI ĐIỀU KHIỂN
1. Đơn vị số học và logic (ALU - Arithmetic Logic Unit)
2. Đơn vị điều khiển (CU - Control Unit)
9
KỸ THUẬT VI ĐIỀU KHIỂN
3. Thanh ghi (Registers)
4. Bộ nhớ Cache
10
KỸ THUẬT VI ĐIỀU KHIỂN
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).
11
KỸ THUẬT VI ĐIỀU KHIỂN
Thanh ghi
12
KỸ THUẬT VI ĐIỀU KHIỂN
Cơ số
13
KỸ THUẬT VI ĐIỀU KHIỂN
Cơ số
Ghi nhớ
14
KỸ THUẬT VI ĐIỀU KHIỂN
Cơ số
15
KỸ THUẬT VI ĐIỀU KHIỂN
Bài tập: 123410 = ???2
Cơ số
11000 (2) = ? (10) = ? (16)
A7D (16) = ? (10) = ? (2)
987 (10) = ? (2) = ? (16)
16
KỸ THUẬT VI ĐIỀU KHIỂN
Phép toán số học
17
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 = ?
Phép toán số học
18
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 - 1010010 = ?
Phép toán số học
19
KỸ THUẬT VI ĐIỀU KHIỂN
Bài tập:
1011 x 1010 =
Phép toán số học
20
KỸ THUẬT VI ĐIỀU KHIỂN
Bài tập:
10011011:1101=
21
KỸ THUẬT VI ĐIỀU KHIỂN
22
NỘI DUNG HỌC PHẦN
2. Cấu trúc họ 8051 (2 tiết)
23
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
2. Cấu trúc họ 8051 (2 tiết)
24
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:
2. Cấu trúc họ 8051 (2 tiết)
25
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 |
2. Cấu trúc họ 8051 (2 tiết)
26
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
2. Cấu trúc họ 8051 (2 tiết)
27
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ụ
2. Cấu trúc họ 8051 (2 tiết)
28
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:
2. Cấu trúc họ 8051 (2 tiết)
29
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
2. Cấu trúc họ 8051 (2 tiết)
30
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
31
NỘI DUNG HỌC PHẦN
3. Tổ chức bộ nhớ họ 8051 (2 tiết)
32
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. Tổ chức bộ nhớ họ 8051 (2 tiết)
33
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
RAM 128b: Từ 00H - xxH
3. Tổ chức bộ nhớ họ 8051 (2 tiết)
34
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
RAM 128b: Từ 00H - xxH
3. Tổ chức bộ nhớ họ 8051 (2 tiết)
35
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
RAM 128b: Từ 00H - xxH
3. Tổ chức bộ nhớ họ 8051 (2 tiết)
36
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
RAM 128b: Từ 00H - xxH
3. Tổ chức bộ nhớ họ 8051 (2 tiết)
37
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
PSW địa chỉ D0
Thanh ghi PSW
3. Tổ chức bộ nhớ họ 8051 (2 tiết)
38
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
39
NỘI DUNG HỌC PHẦN
4. Chức năng timer counter (2 tiết)
40
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.
41
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ế độ chế độ 1 (16 bit đếm)
M1=1:
M0=0 :
Chế độ chế độ 2 (8 bit đếm)
42
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)
43
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
…
44
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)
45
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
Chức năng Counter
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.
46
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)
47
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
48
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)
Ví dụ:
49
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)
50
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
51
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)
52
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)
53
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)
54
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
55
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.
56
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
57
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)
58
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)
59
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ị 40H/? UART 8/9 thay đổi.
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.
60
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)
61
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
Chức năng truyền thông nối tiếp - NHẬN
5. Chức năng truyền thông (2 tiết)
62
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
Chức năng truyền thông nối tiếp - TRUYỀN
5. Chức năng truyền thông (2 tiết)
63
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
64
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ế độ 1
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
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
67
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
68
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)
69
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)
70
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)
71
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
72
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
73
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
74
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
75
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)
76
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)
77
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
78
NỘI DUNG HỌC PHẦN
7. Tập lệnh họ 8051 (2 tiết)
79
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
80
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)
81
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)
82
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
83
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
84
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ố)
85
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ớ)
86
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ớ)
87
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)
88
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)
89
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)
90
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)
91
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)
92
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)
93
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ờ)
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 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
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 Logic
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 Logic
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 Logic
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 Logic
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 Logic
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 Logic
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 Logic
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 Logic
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 Logic
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 Logic
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 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.
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 rẽ nhánh
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 rẽ nhánh
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 rẽ nhánh
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 rẽ nhánh Lệnh LJMP (Nhảy xa)
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 rẽ nhánh Lệnh JZ (Nhảy nếu A = 0)
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 rẽ nhánh Lệnh JNZ (Nhảy nếu A ≠ 0)
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 rẽ nhánh Lệnh JC (Nhảy nếu C = 1)
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 rẽ nhánh Lệnh JNC (Nhảy nếu C = 0)
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 rẽ nhánh Lệnh JB (Nhảy nếu bit = 1)
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 rẽ nhánh Lệnh JNB (Nhảy nếu bit = 0)
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 rẽ nhánh Lệnh DJNZ (Giảm và nhảy nếu ≠ 0)
117
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
7. Tập lệnh họ 8051 (2 tiết)
118
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
119
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
120
NỘI DUNG HỌC PHẦN
9. Cấu trúc chương trình C (2 tiết)
121
Chương 3: NGÔN NGỮ LẬP TRÌNH
9. Cấu trúc chương trình C (2 tiết)
122
Chương 3: NGÔN NGỮ LẬP TRÌNH
9. Cấu trúc chương trình C (2 tiết)
123
Chương 3: NGÔN NGỮ LẬP TRÌNH
9. Cấu trúc chương trình C (2 tiết)
124
Chương 3: NGÔN NGỮ LẬP TRÌNH
9. Cấu trúc chương trình C (2 tiết)
125
Chương 3: NGÔN NGỮ LẬP TRÌNH
9. Cấu trúc chương trình C (2 tiết)
126
Chương 3: NGÔN NGỮ LẬP TRÌNH
9. Cấu trúc chương trình C (2 tiết)
127
Chương 3: NGÔN NGỮ LẬP TRÌNH
9. Cấu trúc chương trình C (2 tiết)
128
Chương 3: NGÔN NGỮ LẬP TRÌNH
9. Cấu trúc chương trình C (2 tiết)
129
Chương 3: NGÔN NGỮ LẬP TRÌNH
9. Cấu trúc chương trình C (2 tiết)
130
Chương 3: NGÔN NGỮ LẬP TRÌNH
9. Cấu trúc chương trình C (2 tiết)
131
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)
132
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)
133
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)
134
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)
135
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)
136
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)
137
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)
138
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)
139
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)
140
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)
141
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)
142
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)
143
Chương 3: NGÔN NGỮ LẬP TRÌNH
9. Cấu trúc chương trình C (2 tiết)
144
Chương 3: NGÔN NGỮ LẬP TRÌNH
9. Cấu trúc chương trình C (2 tiết)
145
Chương 3: NGÔN NGỮ LẬP TRÌNH
146
NỘI DUNG HỌC PHẦN
9. Cấu trúc chương trình C (2 tiết)
Chương trình timer
147
Chương 3: NGÔN NGỮ LẬP TRÌNH
Chương trình con
void delay()
{
TMOD = 0x01; Timer0, 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
Bài tập 1: Chương trình con
Sử dụng timer 1 chế độ 8 bit
Bài tập 2: Chương trình con
Sử dụng timer 1 chế độ 16 bit, có thời gian 50ms
9. Cấu trúc chương trình C (2 tiết)
Chương trình truyền thông
148
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=0x40; //0100 0000: Chọn chế độ 1,
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ự D
send('K'); //Gọi hàm gửi 1 ký tự K
send('T'); //Gọi hàm gửi 1 ký tự 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 truyền thông
149
Chương 3: NGÔN NGỮ LẬP TRÌNH
Viết chương trình nhận:
9. Cấu trúc chương trình C (2 tiết)
Chương trình ngắt
150
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 0-5)
{
// 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
151
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
152
Chương 3: NGÔN NGỮ LẬP TRÌNH
void ctngattimer0(void) interrupt 1
{
}
void ctngatngoai1(void) interrupt 2
{ // chuong trình ngat
}
void ctngattruyenthongnoitiep(void) interrupt 4
{ // chuong trình ngat
}
9. Cấu trúc chương trình C (2 tiết)
Ví dụ:
153
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
154
Chương 3: NGÔN NGỮ LẬP TRÌNH
9. Cấu trúc chương trình C (2 tiết)
155
Chương 2: VI ĐIỀU KHIỂN HỌ 8051
156
NỘI DUNG HỌC PHẦN
4.1 Giao tiếp vào ra đơn bít (2 tiết)
157
Chương 4: GIAO TIẾP NGOẠI VI
10. Giao tiếp vào ra đơn bít (2 tiết)
158
Chương 4: GIAO TIẾP NGOẠI VI
10. Giao tiếp vào ra đơn bít (2 tiết)
159
Chương 4: GIAO TIẾP NGOẠI VI
#include <REGX52.H>
#define bat 1 // Dinh nghia gia tri bat den Led
#define tat 0 // Dinh nghia gia tri tat den Led
sbit Led = P1^0; // Khai bao bien Led kieu bit chan P1.0
void delay(long time)
{
while(time--);
}
void main(void)
{
while(1)
{
led = bat; // bat Led
delay(25000); // tre 1s
Led = tat; // tat Led
delay(25000); //tre 1s
}
}
10. Giao tiếp vào ra đơn bít (2 tiết)
160
Chương 4: GIAO TIẾP NGOẠI VI
10. Giao tiếp vào ra đơn bít (2 tiết)
//Bài 1: Bat tat LED tao tan so chan P2.0
#include <REGX51.H>
sbit LED = P2^0 ;
void delay()
{
TMOD = 0x01;
TH0=0xC350;
TL0=0xC350;
TR0=1;
while (!TF0);
TF0=0;
TR0=0;}
161
Chương 4: GIAO TIẾP NGOẠI VI
main()
{
while(1)
{
LED=1;
delay();
LED=0;
delay();
}
}
10. Giao tiếp vào ra đơn bít (2 tiết)
Bài Tập:
162
Chương 4: GIAO TIẾP NGOẠI VI
10. Giao tiếp vào ra đơn bít (2 tiết)
163
Chương 4: GIAO TIẾP NGOẠI VI
10. Giao tiếp vào ra đơn bít (2 tiết)
//Bài 1: 8 LED chay port P2
#include <REGX51.H>
sbit LED = P2^0 ;
void delay_1(s) {
unsigned int f, t;
for(f=0; f<s; f++)
for(t=0;t<20;t++)
{ TMOD = 0x01;
TH0=0xC350;
TL0=0xC350;
TR0=1;
while (!TF0);
TF0=0;
164
Chương 4: GIAO TIẾP NGOẠI VI
TR0=0; } }
main()
{
while(1)
{
unsigned int y;
P2=0x01;
delay_1(1);
for(y=0;y<8;y++)
{
P2=P2<<1;
delay_1(1);
} } }
4.1 Giao tiếp vào ra đơn bít (2 tiết)
165
Chương 4: GIAO TIẾP NGOẠI VI
4.1 Giao tiếp vào ra đơn bít (2 tiết)
//Bài 1: 8 LED chay port P2
#include <REGX51.H>
sbit START = P1^0 ;
sbit STOP = P1^1 ;
sbit DC = P2^0 ;
void delay_1(s)
{
unsigned int f, t;
for(f=0; f<s; f++)
for(t=0;t<30;t++)
{
TMOD = 0x01;
TH0=0xC350;
166
Chương 4: GIAO TIẾP NGOẠI VI
TL0=0xC350;
TR0=1;
while (!TF0);
TF0=0;
TR0=0;
}
}
main()
{
DC=0;
while (!START)
{
while (1)
{
DC=1;
delay_1(1);
while (!STOP)
{DC=0;
delay_1(1);
while (START)
{}
}
}
}
}
4.1 Giao tiếp vào ra đơn bít (2 tiết)
// Sử dụng Ngắt trong giao tiếp
#include <REGX51.H>
sbit xung = P2^0;
void timer0_int(void) interrupt 1
{ TF0=0; xung = !xung; TH0 = 0xfe;
TL0 = 0x0c;
}
void main(void)
167
Chương 4: GIAO TIẾP NGOẠI VI
{
EA = 1;
ET0 = 1;
TMOD = 0x01;
xung = 0;
TH0 = 0xfe;
TL0 = 0x0c;
TR0 = 1;
while(1) PCON|=1;
}
Bài số 2: Lập trình 1 LED đơn sáng tắt chân P2.0
168
THỰC HÀNH VI ĐIỀU KHIỂN - LẬP TRÌNH
Bài tập về nhà: Bấm một nút chạy 1 hiệu ứng khác nhau
169
NỘI DUNG HỌC PHẦN
11. Giao tiếp mã quét (2 tiết)
170
Chương 4: GIAO TIẾP NGOẠI VI
11. Giao tiếp mã quét (2 tiết)
171
Chương 4: GIAO TIẾP NGOẠI VI
// Hien thi 2 so 7 doan
#include <AT89x51.h>
sbit LED1 = P3^0;
sbit LED2 = P3^1;
void delay()
{
int t;
for(t=0;t<2;t++)
{
TMOD = 0x01;
TH0=0x3C;
TL0=0xB0;
TR0=1;
while (!TF0);
TF0=0;
TR0=0;
}
}
void main ( void )
{
while (1)
{
P2 = 0xF9; // dua so 9 ra duong du lieu
LED1 = 0; // bat
LED2 = 1; // tat
delay();
P2 = 0xA4; // dua so 9 ra duong du lieu
LED1 = 1; // bat
LED2 = 0; // tat
delay();
}
}
11. Giao tiếp mã quét (2 tiết)
172
Chương 4: GIAO TIẾP NGOẠI VI
Dem so tu 0-9
#include <AT89x51.h>
sbit LED1 = P3^0;
sbit LED2 = P3^1;
void delay()
{
int t;
for(t=0;t<10;t++)
{
TMOD = 0x01;
TH0=0x3C;
TL0=0xB0;
TR0=1;
while (!TF0);
TF0=0;
TR0=0;
}
}
void main ( void )
{
P2 = 0xC0; // dua so 0 ra duong du lieu
LED1 = 0; // bat
LED2 = 1; // tat
delay();
P2 = 0xF9; // dua so 1 ra duong du lieu
LED1 = 0; // bat
LED2 = 1; // tat
delay();
P2 = 0xA4; // dua so 2 ra duong du lieu
LED1 = 0; // bat
LED2 = 1; // tat
delay();
…………
}
11. Giao tiếp mãquét (2 tiết)
173
Chương 4: GIAO TIẾP NGOẠI VI
Bài tập về nhà:
Đếm số từ 00-99
lặp lại
11. Giao tiếp mã quét (2 tiết)
174
Chương 4: GIAO TIẾP NGOẠI VI
11. Giao tiếp mã quét (2 tiết)
175
Chương 4: GIAO TIẾP NGOẠI VI
11. Giao tiếp mã quét (2 tiết)
176
Chương 4: GIAO TIẾP NGOẠI VI
#include <REGX51.H>
sbit LED1 =P3^0;
sbit H1 =P1^0;
sbit H2 =P1^1;
sbit H3 =P1^2;
sbit H4 =P1^3;
sbit C1 =P1^4;
sbit C2 =P1^5;
sbit C3 =P1^6;
sbit C4 =P1^7;
//unsigned char chuso[10]= {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
// Hàm chính main
void main(void)
{
while(1)
{
P1=0xff;
H1=0;
if (C1==0)
P2=0xC0;
LED1=0;
if (C2==0)
P2=0xF9;
LED1=0;
//……………
}
}
11. Giao tiếp mã quét (2 tiết)
177
Chương 4: GIAO TIẾP NGOẠI VI
11. Giao tiếp mã quét (2 tiết)
178
Chương 4: GIAO TIẾP NGOẠI VI
11. Giao tiếp mã quét (2 tiết)
179
Chương 4: GIAO TIẾP NGOẠI VI
11. Giao tiếp mã quét (2 tiết)
180
Chương 4: GIAO TIẾP NGOẠI VI
11. Giao tiếp mãquét (2 tiết)
181
Chương 4: GIAO TIẾP NGOẠI VI
Bài tập về nhà:
Bấm phím Matrix nào hiện số đó trên LED matrix
182
NỘI DUNG HỌC PHẦN
12. Giao tiếp vào ra dữ liệu (2 tiết)
183
Chương 4: GIAO TIẾP NGOẠI VI
LCD
12. Giao tiếp vào ra dữ liệu (2 tiết)
184
Chương 4: GIAO TIẾP NGOẠI VI
LCD
12. Giao tiếp vào ra dữ liệu (2 tiết)
185
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
12. Giao tiếp vào ra dữ liệu (2 tiết)
186
Chương 4: GIAO TIẾP NGOẠI VI
LCD
12. Giao tiếp vào ra dữ liệu (2 tiết)
187
Chương 4: GIAO TIẾP NGOẠI VI
LCD
12. Giao tiếp vào ra dữ liệu (2 tiết)
188
Chương 4: GIAO TIẾP NGOẠI VI
void LCDinit(void)
{
LCDcontrol(0x38);//2 dong va ma tran 5x7
LCDcontrol(0x0e);//bat man hinh, bat con tro
LCDcontrol(0x01);//xoa man hinh
}
LCDwrite(‘A’);
void LCDcontrol(unsigned char x)
{
RS=0;//chon thanh ghi lenh
RW=0;//ghi len LCD.
LCDdata=x ;// gia tri x
EN=1;//cho phep muc cao
EN=0;//xung cao xuong thap
wait();//?oi LCD san sang.
}
void LCDwrite(unsigned char c)
{
RS=1;//ghi du lieu
RW=0;//ghi du lieu len LCD
LCDdata=c;//gia tri C
EN=1;//cho phep muc cao
EN=0;//xung cao xuong thap
wait();//cho
}
LCD
12. Giao tiếp vào ra dữ liệu (2 tiết)
189
Chương 4: GIAO TIẾP NGOẠI VI
LCD
12. Giao tiếp vào ra dữ liệu (2 tiết)
190
Chương 4: GIAO TIẾP NGOẠI VI
LCD
Viết vòng lặp for cho chạy chữ LCD từ phải sang trái
12. Giao tiếp vào ra dữ liệu (2 tiết)
191
Chương 4: GIAO TIẾP NGOẠI VI
void LCDwrites(unsigned char *s)
{
unsigned char data lens,count;
lens=strlen(s);
for(count=0;count<lens;count++)
{
LCDwrite(*(s+count));
}
}
void delay(long time)
{
while(time--);
}
void main(void)
{
LCDinit(); // khoi tao LCD
LCDcontrol(0x82);// dua con tro den vi tri thu 4 dong 1
LCDwrite('V');
LCDwrite('I');
LCDwrite('E');
LCDwrite('T');
LCDwrite(' ');
LCDwrite('N');
LCDwrite('A');
LCDwrite('M');
LCDcontrol(0xC0);
LCDwrites("VI DIEU KHIEN");
while(1); //vong lap vo han
}
LCD
12. Giao tiếp vào ra dữ liệu (2 tiết)
192
Chương 4: GIAO TIẾP NGOẠI VI
LCD
12. Giao tiếp vào ra dữ liệu (2 tiết)
193
Chương 4: GIAO TIẾP NGOẠI VI
LCD
12. Giao tiếp vào ra dữ liệu (2 tiết)
194
Chương 4: GIAO TIẾP NGOẠI VI
ADC
12. Giao tiếp vào ra dữ liệu (2 tiết)
195
Chương 4: GIAO TIẾP NGOẠI VI
ADC
12. Giao tiếp vào ra dữ liệu (2 tiết)
196
Chương 4: GIAO TIẾP NGOẠI VI
ADC
12. Giao tiếp vào ra dữ liệu (2 tiết)
197
Chương 4: GIAO TIẾP NGOẠI VI
ADC
12. Giao tiếp vào ra dữ liệu (2 tiết)
198
Chương 4: GIAO TIẾP NGOẠI VI
ADC
12. Giao tiếp vào ra dữ liệu (2 tiết)
199
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
12. Giao tiếp vào ra dữ liệu (2 tiết)
200
Chương 4: GIAO TIẾP NGOẠI VI
ADC
12. Giao tiếp vào ra dữ liệu (2 tiết)
201
Chương 4: GIAO TIẾP NGOẠI VI
ADC
12. Giao tiếp vào ra dữ liệu (2 tiết)
202
Chương 4: GIAO TIẾP NGOẠI VI
ADC
12. Giao tiếp vào ra dữ liệu (2 tiết)
203
Chương 4: GIAO TIẾP NGOẠI VI
ADC
12. Giao tiếp vào ra dữ liệu (2 tiết)
204
Chương 4: GIAO TIẾP NGOẠI VI
ADC
12. Giao tiếp vào ra dữ liệu (2 tiết)
205
Chương 4: GIAO TIẾP NGOẠI VI
ADC
12. Giao tiếp vào ra dữ liệu (2 tiết)
206
Chương 4: GIAO TIẾP NGOẠI VI
ADC
12. Giao tiếp vào ra dữ liệu (2 tiết)
207
Chương 4: GIAO TIẾP NGOẠI VI
ADC
12. Giao tiếp vào ra dữ liệu (2 tiết)
208
Chương 4: GIAO TIẾP NGOẠI VI
ADC
12. Giao tiếp vào ra dữ liệu (2 tiết)
209
Chương 4: GIAO TIẾP NGOẠI VI
ADC
12. Giao tiếp vào ra dữ liệu (2 tiết)
210
Chương 4: GIAO TIẾP NGOẠI VI
ADC
12. Giao tiếp vào ra dữ liệu (2 tiết)
211
Chương 4: GIAO TIẾP NGOẠI VI
ADC
212
NỘI DUNG HỌC PHẦN
13. Giao tiếp động cơ
213
Chương 4: GIAO TIẾP NGOẠI VI
13. Giao tiếp động cơ
214
Chương 4: GIAO TIẾP NGOẠI VI
13. Giao tiếp động cơ
215
Chương 4: GIAO TIẾP NGOẠI VI
Viết chương trình điều khiển động cơ một chiều
Và CT đảo chiều động cơ
#include <REGX51.H>
sbit START1 = P1^0 ;
sbit STOP = P1^1 ;
sbit START2 = P1^2 ;
sbit DC = P3^7 ;
sbit PWM1 = P0^0 ;
sbit PWM2 = P0^1 ;
main()
{
PWM1=0;
PWM2=0;
DC=0;
while (START1)
{}
DC = 1;
while (STOP)
{}
DC=0;
}
13. Giao tiếp động cơ
216
Chương 4: GIAO TIẾP NGOẠI VI
Viết chương trình điều khiển động cơ bước
main()
{
ABCD=0xFE;
delay_1(1);
ABCD=0xFD;
delay_1(1) ;
ABCD=0xFB;
delay_1(1) ;
ABCD=0xF7;
delay_1(1);
}
sfr ABCD = 0x90;
void delay_1(s)
{
unsigned int f, t;
for(f=0; f<s; f++)
for(t=0;t<30;t++)
{
TMOD = 0x01;
TH0=0x0C3;
TL0=0x50;
TR0=1;
while (!TF0);
TF0=0;
TR0=0;
}
}
13. Giao tiếp động cơ
217
Chương 4: GIAO TIẾP NGOẠI VI
PWM
13. Giao tiếp động cơ
218
Chương 4: GIAO TIẾP NGOẠI VI
PWM
13. Giao tiếp động cơ
219
Chương 4: GIAO TIẾP NGOẠI VI
Viết chương trình điều khiển PWM đủ 1 chu kỳ Sin
Tần số băm 1kHz, Tần số SIN 50Hz
220
NỘI DUNG HỌC PHẦN
14. Giao tiếp truyền thông
221
Chương 4: GIAO TIẾP NGOẠI VI
SPI, I2C, RS232, RS 485…
14. Giao tiếp truyền thông
222
Chương 4: GIAO TIẾP NGOẠI VI
SPI: SPI (Serial Peripheral Interface) là một chuẩn giao tiếp nối tiếp đồng bộ tốc độ cao giữa vi điều khiển (MCU) và các thiết bị ngoại vi.
✅ Đồng bộ: có tín hiệu xung Clock.� ✅ Nối tiếp: truyền từng bit theo thời gian.� ✅ Phổ biến trong: đọc/ghi Flash, LCD, ADC, RTC, Cảm biến tốc độ cao,...
14. Giao tiếp truyền thông
223
Chương 4: GIAO TIẾP NGOẠI VI
SPI:
14. Giao tiếp truyền thông
224
Chương 4: GIAO TIẾP NGOẠI VI
SPI:
14. Giao tiếp truyền thông
225
Chương 4: GIAO TIẾP NGOẠI VI
SPI: Quy tắc hoạt động SPI
14. Giao tiếp truyền thông
226
Chương 4: GIAO TIẾP NGOẠI VI
SPI:
14. Giao tiếp truyền thông
227
Chương 4: GIAO TIẾP NGOẠI VI
SPI:
Master Slave
------ ------
SCLK ---------> SCLK
MOSI ---------> MOSI
MISO <--------- MISO
SS ---------> SS
14. Giao tiếp truyền thông
228
Chương 4: GIAO TIẾP NGOẠI VI
I2C
14. Giao tiếp truyền thông
229
Chương 4: GIAO TIẾP NGOẠI VI
ADC
DS18B20: giao tiếp bus Comunicates hơn 1 dây nhiệt độ phạm vi hoạt động: -55ºC đến 125ºC Độ chính xác +/- 0,5 ºC (giữa -10ºC phạm vi đến 85ºC)
14. Giao tiếp truyền thông
230
Chương 4: GIAO TIẾP NGOẠI VI
14. Giao tiếp truyền thông
231
Chương 4: GIAO TIẾP NGOẠI VI
3. Lập trình giao tiếp
14. Giao tiếp truyền thông
232
Chương 4: GIAO TIẾP NGOẠI VI
3. Lập trình giao tiếp:
void delay_18B20(unsigned int ti){� while(ti--);�}�void Init_18B20(void){ //Khởi tạo cảm biến� DQ = 1;� delay_18B20(8);� DQ = 0;� delay_18B20(65);� DQ = 1;
delay_18B20(8);� DQ = 0;� delay_18B20(65);� DQ = 1;� delay_18B20(20);�}�unsigned char ReadOneChar(void){� unsigned char i=0;� unsigned char dat = 0;� for (i=8;i>0;i--){� DQ = 0;
14. Giao tiếp truyền thông
233
Chương 4: GIAO TIẾP NGOẠI VI
unsigned char i=0;� for (i=8; i>0; i--){� DQ = 0;� DQ = dat&0x01;� delay_18B20(5);� DQ = 1;� dat>>=1;� }�}�void ReadTemperature(void){
DQ = 0;� dat>>=1;� DQ = 1;� if(DQ)� dat |= 0x80;� delay_18B20(4);� }� return(dat);�}�void WriteOneChar(unsigned char dat){
14. Giao tiếp truyền thông
234
Chương 4: GIAO TIẾP NGOẠI VI
Init_18B20();
WriteOneChar(0xCC); // WriteOneChar(0x44);� delay_18B20(10);� Init_18B20();� WriteOneChar(0xCC);� WriteOneChar(0xBE); � delay_18B20(10);� a=ReadOneChar();� b=ReadOneChar();
void ReadTemperature(void){ //Hàm đọc nhiệt độ lưu vào biến temp� unsigned char a=0;� unsigned char b=0;� //EA=0; //Nếu có ngắt thì cấm ngắt để tránh ảnh hưởng quá trình giao tiếp� Init_18B20();� WriteOneChar(0xCC); // Bỏ qua ROM� WriteOneChar(0x44);� delay_18B20(10)
14. Giao tiếp truyền thông
235
Chương 4: GIAO TIẾP NGOẠI VI
temp=((b*256+a)>>4); //Giá trị nhiệt độ lưu vào biến temp� //EA=1; //Đọc xong thì cho phép ngắt�}//End code DS18B20
14. Giao tiếp truyền thông
236
Chương 4: GIAO TIẾP NGOẠI VI
RS232
14. Giao tiếp truyền thông
237
Chương 4: GIAO TIẾP NGOẠI VI
RS232
14. Giao tiếp truyền thông
238
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
14. Giao tiếp truyền thông
239
Chương 4: GIAO TIẾP NGOẠI VI
Đề số 2: Giao tiếp RS485
14. Giao tiếp truyền thông
240
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
14. Giao tiếp truyền thông
241
Chương 4: GIAO TIẾP NGOẠI VI
Bài tập: Tìm hiểu về SPI, I2C, RS232:
15. Ôn tập
242
Chương 4: GIAO TIẾP NGOẠI VI
Thank you
For your attention
243