You are on page 1of 180

TRƯỜNG ĐẠI HỌC QUY NHƠN

HỌC PHẦN: ĐIỀU KHIỂN LOGIC

TS. Đỗ Văn Cần :


ĐT 0935253630
Web: gpktqn.com
Khoa Kỹ thuật & Công nghệ
KỸ THUẬT VI ĐIỀU KHIỂN

Lớp Kỹ thuật điện


Số TC: 2 – 30 tiết lý thuyết
1. Tổng quan
2. Vi điều khiển họ 8051
3. Ngôn ngữ c/
4. Giao tiếp ngoại vi

2
Tiết 1,2
Chương 1. TỔNG QUAN

1.1. Lịch sử hình thành bộ vi xử lý


1.2. Cấu trúc vi xử lý – vi điều khiển
1.3. Phép toán số học

3
Tiết 1,2
Chương 1. TỔNG QUAN

1.1. Lịch sử hình thành bộ vi xử lý

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] Theo truyền thống, thuật ngữ
"CPU" chỉ một bộ xử lý, cụ thể là bộ phận xử lý và điều
khiển (Control Unit) của nó, phân biệt với những yếu tố
cốt lõi khác của một máy tính nằm bên ngoài như
bộ nhớ và mạch điều khiển xuất/nhập dữ liệu.[2]
4
Tiết 1,2
Chương 1. TỔNG QUAN

1.1. Lịch sử hình thành bộ vi xử lý


Intel Core i9 : Cung cấp tới 10 lõi đã unlock cho video 4K Ultra HD
CPU Intel Xeon với 3 dòng Xeon E3, Xeon E5 và Xeon E7

xuất hiện Intel 80586 còn gọi là


Pentium 64 bit chứa 4 triệu
tranzito

Intel đưa ra bộ vi xử lý 80286 dùng


trong các máy vi tính họ AT

Intel 8086 là loại bộ xi xử lý 16 bit với


29.000 tranzito

vi xử lí 8-bit đầu tiên với tên Intel-


8008
5
Tiết 1,2
Chương 1. TỔNG QUAN

1.2. Cấu trúc vi xử lý – vi điều khiển

6
Tiết 1,2
Chương 1. TỔNG QUAN

1.2. Cấu trúc vi xử lý – vi điều khiển

7
Tiết 1,2
Chương 1. TỔNG QUAN

1.2. Cấu trúc vi xử lý – vi điều khiển

8
Tiết 1,2
Chương 1. TỔNG QUAN

1.2. Cấu trúc vi xử lý – vi điều khiển

9
Tiết 1,2
Chương 1. TỔNG QUAN

1.3. Phép toán số học

10
Tiết 3,4
Chương 1. TỔNG QUAN

1.3. Phép toán số học

11
Tiết 3,4
Chương 1. TỔNG QUAN

1.3. Phép toán số học

Bài tập: 123410 = ???2

12
Tiết 3,4
Chương 1. TỔNG QUAN

1.3. Phép toán số học


Bài tập: 101012 = ???10

13
Tiết 3,4
Chương 1. TỔNG QUAN

1.3. Phép toán số học

14
Tiết 3,4
Chương 1. TỔNG QUAN

1.3. Phép toán số học

Quy tắc:
0+0=0
0+1=1+0=1
1+1=10

15
Tiết 3,4
Chương 1. TỔNG QUAN

1.3. Phép toán số họ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

16
Tiết 3,4
Chương 1. TỔNG QUAN

1.3. Phép toán số học


Bài tập: 1011x1010

17
Tiết 3,4
Chương 1. TỔNG QUAN

1.3. Phép toán số học


Bài tập: 10011111:1100

18
Chương 2
VI ĐIỀU KHIỂN HỌ 8051
3.1. Cấu trúc vi điều khiển
3.2. Tổ chức bộ nhớ
3.3. Chức năng mở rộng

19
Chương 2
VI ĐIỀU KHIỂN HỌ 8051
3.1. Cấu trúc vi điều khiển

Cấu trúc họ vi điều khiển 8051

20
Tiết 13,14
Chương 3. Vi điều khiển họ 8051

3.1. Cấu trúc vi điều khiển

21
Tiết 13,14
Chương 3. Vi điều khiển họ 8051

3.1. Cấu trúc vi điều khiển


Các IC của họ MCS-51™ có các đặc trưng chung như sau:
• 4 port I/O x 8 bit
• 1 giao tiếp nối tiếp
• 4k không gian bộ nhớ chương trình mở rộng
• 128byte không gian bộ nhớ dữ liệu mở rộng
• Một bộ xử lý luận lý (thao tác trên các bit đơn)
• 210 bit được địa chỉ hóa
• Bộ nhân/chia 4 μs.

22
Tiết 13,14
Chương 3. Vi điều khiển họ 8051

3.1. Cấu trúc vi điều khiển


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 4K ROM 128 byte 2
8751 4K EPROM 128 byte 2
8951 4K FLASH 128 byte 2

8032 0K 256 byte 3


8052 8K ROM 256 byte 3
8752 8K EPROM 256 byte 3
8952 8K FLASH 256 byte 3

23
Tiết 13,14
Chương 3. Vi điều khiển họ 8051

3.1. Cấu trúc vi điều khiển


Nguồn cấp

24
Tiết 13,14
Chương 3. Vi điều khiển họ 8051

3.1. Cấu trúc vi điều khiển


Reset, Thạch anh, điều khiển bộ nhớ

25
Tiết 13,14
Chương 3. Vi điều khiển họ 8051

3.1. Cấu trúc vi điều khiển


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

26
Tiết 13,14
Chương 3. Vi điều khiển họ 8051

3.1. Cấu trúc vi điều khiển


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ụ

27
Tiết 13,14
Chương 3. Vi điều khiển họ 8051

3.1. Cấu trúc vi điều khiển


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.

28
Tiết 13,14
Chương 3. Vi điều khiển họ 8051

3.1. Cấu trúc vi điều khiển


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:

29
Tiết 13,14
Chương 3. Vi điều khiển họ 8051

3.1. Cấu trúc vi điều khiển


Port 3:

30
Tiết 15,16
Chương 3. Vi điều khiển họ 8051

3.2. Tổ chức bộ nhớ


Bộ nhớ ngoài

31
Tiết 15,16
Chương 3. Vi điều khiển họ 8051

3.2. Tổ chức bộ nhớ


128byte
00H-FFH

32
Tiết 15,16
Chương 3. Vi điều khiển họ 8051

3.2. Tổ chức bộ nhớ

Ram Thanh ghi


00H-1FH

33
Tiết 15,16
Chương 3. Vi điều khiển họ 8051

3.2. Tổ chức bộ nhớ


Ram địa chỉ hoá bit
20H-2FH
Ram đa dụng
30H-7FH

34
Tiết 15,16
Chương 3. Vi điều khiển họ 8051

3.2. Tổ chức bộ nhớ


Thanh ghi
đặc biệt
80H - FFH

35
Tiết 15,16
Chương 3. Vi điều khiển họ 8051

3.2. Tổ chức bộ nhớ


Thanh ghi
PSW

36
Chương 2
CẤU TRÚC HỌ 8051
3.3. Chức năng mở rộng
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.
GATE C/T M1 M0 GATE C/T M1 M0
1 0
M1 M0 Modul 1Chế độ hoạt động
Timer/Counter Timer/Counter 0
0 0 0 Bộ định thời 13 bit (8 bitC/T và 5 bit đặt trước)
0 1 1 Bộ dịnh thời 16 bit không đặt trước không tự
nạp lại
1 0 2 Bộ định thời 8 bit tự nạp lại
1 1 3 Chế độ định thời chia tách
37
Chương 2
CẤU TRÚC HỌ 8051
3.3. Chức năng mở rộng

GATE C/T M1 M0 GATE C/T M1 M0


1 0
Timer/Counter 1 Timer/Counter 0
GATE = 0: Chế độ Timer/Counter; GATE = 1: Chế độ Ngắt;
C/T = 0: Lựa chọn Timer; GATE = 1: Chế độ NgắC/T = 0: Lựa chọn
Counter;
M1=0: M1=1:
M0=1 : M0=0 :
Chế độ chế độ 1 (16 bit đếm) Chế độ chế độ 2 (8 bit đếm)

38
Chương 2
CẤU TRÚC HỌ 8051
3.3. Chức năng mở rộng

GATE C/T M1 M0 GATE C/T M1 M0


1 0
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
Timer/Counter 1 Timer/Counter 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

1 1 1 1 1 1 1 1

x x x x x x x x x x x x x x x x
39
Chương 2
CẤU TRÚC HỌ 8051
3.3. Chức năng mở rộng
1. Hoạt động Timer 0, chế độ 1 (16 bit) → TMOD=01H
2. Hoạt động Counter 0, chế độ 1 (16 bit) → TMOD=05H
3. Hoạt động Counter 1, chế độ 1 (16 bit) → TMOD=xxH
4. Hoạt động Counter 1, chế độ 2 (8 bit) → TMOD=xxH
5. Hoạt động Counter 0, chế độ 2 (8 bit) → TMOD=xxH
6. Hoạt động Timer 0, chế độ 2 (8 bit) → TMOD=xxH
7. Hoạt động Timer 1, chế độ 2 (8 bit) → TMOD=xxH
8. Hoạt động Timer 1, chế độ 1 (16 bit) → TMOD=xxH
9. Hoạt động Timer 1, chế độ 1 (16 bit);Timer 0, chế độ 1 (16 bit); →
TMOD=xxH
10.….
11.…
Nộp qua Email: thietbiquynhon@gmail.com

40
Chương 2
CẤU TRÚC HỌ 8051
3.3. Chức năng mở rộng
thanh ghi TCON ở địa chỉ byte 88H quyết định chế độ
Timer/counter.

TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0


Counter1/Timer1 Counter0/Timer0

TMOD = 0x01;
TH0=0xC350; while (!TF0);
TL0=0xC350; TF0=0;
TR0=1; TR0=0;

41
Chương 2
CẤU TRÚC HỌ 8051
3.3. Chức năng mở rộng
Tạo sóng xung vuông 10kHz trên chân số 1
Chương trình chính
Chương trình con
P1.0 = 1;
TMOD = 0x01;
gọi CT con trễ 100us
TH0=0xFF;
P1.0 = 0;
TL0 =0x9C;
gọi CT con trễ 100us
TR0=1;
lặp lại chương trình
chính while (!TF0)
TR0=0; TF0=0
Kết thúc CT con

42
Chương 2
CẤU TRÚC HỌ 8051
Ví dụ tạo xung vuông trên chân P2.0
//Bài 1: Bat tat LED tao tan so chan P2.0 main()
#include <REGX51.H> {
sbit LED = P2^0 ; while(1)
void delay() {
{ LED=1;
TMOD = 0x01; delay();
TH0=0xC350; LED=0;
TL0=0xC350; delay();
TR0=1; }
while (!TF0); }
TF0=0;
TR0=0;
}
43
Chương 2
CẤU TRÚC HỌ 8051
3.3. Chức năng mở rộng
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)

44
Chương 2
CẤU TRÚC HỌ 8051
3.3. Chức năng mở rộng

45
Chương 2
CẤU TRÚC HỌ 8051
3.3. Chức năng mở rộng
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
Bit Ký hiệu
phải được khởiĐịa Mô tả chế độ yêu cầu
động đúng
chỉ
SCON. SM0 9FH Bit 0 chọn chế độ port nối tiếp
7
SCON. SM1 9EH Bit 1 chọn chế độ port nối tiếp
6
SCON. SM2 9DH Bit này cho phép truyền thông đa xử lý ở
5 chế độ 2 và 3, bit RI sẽ không được tích
cực nếu bit thứ 9 nhận được 0
SCON. REN 9CH Cho phép thu, phải được set để nhận ký tự
4
SCON. TB8 9BH Bit phát 8. bit thứ 9 dược phát ở chế độ 2
3 và 3, set và xóa bởi phần mềm
SCON. RB8 9AH Bit thu 8. bit thứ 9 nhận được
2 46
SCON. TI 99H Cờ ngắt phát, cờ này được set ngay khi kết
Chương 2
CẤU TRÚC HỌ 8051
3.3. Chức năng mở rộng
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.
SM0 SM Chế Mô tả Tốc độ baud
1 độ
0 0 0 Thanh ghi Cố định (tần số dao động/12)
dịch
0 1 1 UART 8 - bit Thay đổi (thiết lập bộ định thời)
1 0 2 UART 9 - bit Cố định (tần số dao động/12
hoặc/64)
1 1 3 UART 9 - bit Thay đổi bởi bộ định thời

47
Chương 2
CẤU TRÚC HỌ 8051
3.3. Chức năng mở rộng
Thiết lập truyền dữ liệu UART 8 bit (cố định)

SCON = 40H; //0100 0000

Tương tự thiết lập Nhận UART 9 bít (thay đổi


Tương tự thiết lập Nhận UART 9 bít (Cố định)
Tương tự thiết lập TRUYỀN UART 9 bít (thay đổi
Tương tự thiết lập TRUYỀN UART 9 bít (Cố định)

48
Chương 2
CẤU TRÚC HỌ 8051
3.3. Chức năng mở rộng

Để lập trình 8051 truyền các byte ký tự nối tiếp thì cần phải thực
hiện các bước sau đây:
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.
49
Chương 2
CẤU TRÚC HỌ 8051
#include<at89x51.h> //khai báo { send('D'); //Gọi hàm gửi 1 ký tự
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
void send(unsigned char a) //Định
{
nghĩa hàm gửi 1 ký tự
TMOD=0x20; //Chọn Timer1, chế
{
độ 2
SBUF=a;
TH1=0xFA; //Cài đặt tốc độ 4800
//Ghi 1 byte dữ liệu vào thanh ghi
baud
SBUF
SCON=0x50; //0101 0000: Chọn
while(TI==0)
chế độ 1, Cho phép nhận
{} //vòng lặp để đợi cờ
TR1=1; //Khởi động Timer1 truyền TI lên 1
while(1) //Vòng lặp vô TI=0;
hạn //Xóa cờ truyền TI sau khi truyền
xong 50
Chương 2
CẤU TRÚC HỌ 8051
3.3. Chức năng mở rộng
8051 có 5 nguyên nhân ngắt: 2 do bên ngoài, 2 ngắt do
bộ định thời và 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

51
Chương 2
CẤU TRÚC HỌ 8051
3.3. Chức năng mở rộng
8051 có 5 nguyên nhân ngắt: 2 do bên ngoài, 2 ngắt do
bộ định thời và 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
Bit cho
đầu Ký hệ
hiệuthống
Địa(cấp
chỉ nguồn,
Mô tả Reset)
IE.7 EA AFH Cho phép 1/ không cho phép 0 toàn cục
IE.6 - AEH None
IE.5 ET2 ADH Cho phép ngắt do bộ định thời 2
IE.4 ES ACH Cho phép ngắt do port nối tiếp
IE.3 ET1 ABH Cho phép ngắt do bộ định thời 1
IE.2 EX1 AAH Ngắt ngoài 1 (P3.3)
IE.1 ET0 A9H Cho phép ngắt do bộ định thời 0
IE.0 EX0 A8H Ngắt ngoài 0 (P3.2)
52
Chương 2
CẤU TRÚC HỌ 8051
3.3. Chức năng mở rộng
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

- Kích hoạt 2 ngắt là timer 0 và truyền thông nối tiếp


- Kích hoạt 3 ngắt là Ngoài 0, timer 0 và truyền thông
nối tiếp
53
Chương 2
CẤU TRÚC HỌ 8051
3.3. Chức năng mở rộng
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
Bit Ký hiệu Địa chỉ bit Mô tả (1 mức cao, 0 thấp)
IP.7 - - Không sử dụng
IP.6 - - Không sử dụng
IP.5 PT2 0BDH Ưu tiên cho ngắt do bộ định thời 2
IP.4 PS 0BCH Ưu tiên cho ngắt do port nối tiếp
IP.3 PT1 0BBH Ưu tiên cho ngắt do bộ định thời 1
IP.2 PX1 0BAH Ngắt ngoài 1
IP.1 PT0 0B9H Ưu tiên cho ngắt do bộ định thời 0
IP.0 PX0 0B8H Ngắt ngoài 0

54
Chương 2
CẤU TRÚC HỌ 8051
3.3. Chức năng mở rộng
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óCờ
Ngắt địa chỉ byte 0B8H Thanh ghi SFR và vị trí
bit
Ngắt ngoài 0 IE0 TCON.1
Ngắt ngoài 1 IE1 TCON.3
Ngắt do bộ định thời 1 TF1 TCON.7
Ngắt do bộ định thời 0 TF0 TCON.5
Ngắt do port nối tiếp TI SCON.1
Ngắt do port nối tiếp RI SCON.0
Ngắt do bộ định thời 2 TF2 T2CON.7 (8052)
Ngắt do bộ định thời 2 EXF2 T2CON.6 (8052) 55
Chương 2
CẤU TRÚC HỌ 8051
3.3. Chức năng mở rộng
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
Ngắt do Cờ Địa chỉ vecto
Reset hệ thống RST 0000H
Ngắt ngoài 0 IE0 0003H
Bộ định thời 0 TF0 000BH
Ngắt ngoài 1 IE1 0013H
Bộ định thời 1 TF1 001BH
Port nối tiếp RI hoặc TI 0023H
Bộ định thời 2 TF2 hoặc EXF2 002BH

56
Chương 2
CẤU TRÚC HỌ 8051
3.3. Chức năng mở rộng
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

57
Chương 2
CẤU TRÚC HỌ 8051
Bài tập
- Thiết lập các ngắt và ưu tiên theo thứ tự: Truyền thông, Timer 0,
Ngoài 1

58
Chương 2
CẤU TRÚC HỌ 8051
#include<at89x51.h>
Trong lập trình C trên Keil c cho 8051, chúng main()
ta khai báo trình phục vụ ngắt theo cấu trúc {
//a)
sau: IE=0x96; //1001 0110: lệnh này
tương đương với 4 lệnh phía dưới

Void Name (void) interrupt X EA=1; //Cho phép sử dụng


ngắt
//( X: là số thứ tự của ngắt )
ES=1; //Cho phép ngắt
{ cổng nối tiếp
ET0=1; //Cho phép ngắt
// chương trình phục vụ ngắt timer0
EX1=1; //Cho phép ngắt
}
ngoài 1

Khi đó địa chỉ ngắt sẽ được tự động tính while(1)


{
bằng: //Chương trình chính
//…
}
Interrupt Address = (X * 8) + 3 }

59
Chương 3
NGÔN NGỮ LẬP TRÌNH
3.1. Cấu trúc chương trình
3.2. Kiểu dữ liệu
3.1. Xây dựng chương trình

60
Chương 3
NGÔN NGỮ LẬP TRÌNH
3.1. Cấu trúc chương trình C
Cấu trúc

61
Chương 3
NGÔN NGỮ LẬP TRÌNH
3.1. Cấu trúc chương trình C
Cấu trúc

62
Chương 3
NGÔN NGỮ LẬP TRÌNH
3.1. Cấu trúc chương trình C
Cấu trúc

63
Chương 3
NGÔN NGỮ LẬP TRÌNH
3.2. Kiểu dữ liệu trong C
Tóm tắt các kiểu dữ liệu

64
Chương 3
NGÔN NGỮ LẬP TRÌNH
3.2. Kiểu dữ liệu trong C
Kiểu dữ liệu Bit

65
Chương 3
NGÔN NGỮ LẬP TRÌNH
3.2. Kiểu dữ liệu trong C
Kiểu dữ liệu Char

66
Chương 3
NGÔN NGỮ LẬP TRÌNH
3.2. Kiểu dữ liệu trong C
Kiểu dữ liệu Short

67
Chương 3
NGÔN NGỮ LẬP TRÌNH
3.2. Kiểu dữ liệu trong C
Kiểu dữ liệu int

68
Chương 3
NGÔN NGỮ LẬP TRÌNH
3.2. Kiểu dữ liệu trong C
Kiểu dữ liệu long

69
Chương 3
NGÔN NGỮ LẬP TRÌNH
3.2. Kiểu dữ liệu trong C
Kiểu dữ liệu float

70
Chương 3
NGÔN NGỮ LẬP TRÌNH
3.2. Kiểu dữ liệu trong C
Kiểu dữ liệu Sbit

71
Chương 3
NGÔN NGỮ LẬP TRÌNH
3.2. Kiểu dữ liệu trong C
Kiểu dữ liệu sfr

72
Chương 3
NGÔN NGỮ LẬP TRÌNH
3.2. Kiểu dữ liệu trong C
Kiểu dữ liệu sfr16

73
Chương 3
NGÔN NGỮ LẬP TRÌNH
3.3. Xây dựng chương trình
Chương trình ngắt

74
Chương 3
NGÔN NGỮ LẬP TRÌNH
3.3. Xây dựng chương trình
Chương trình chính

75
Chương 3
NGÔN NGỮ LẬP TRÌNH
3.3. Xây dựng chương trình
Cấu trúc START - END

76
Chương 3
NGÔN NGỮ LẬP TRÌNH
3.3. Xây dựng chương trình
Bật tắt LED

77
Chương 3
NGÔN NGỮ LẬP TRÌNH
3.3. Xây dựng chương trình
Cấu trúc IF- ELSE

78
Chương 3
NGÔN NGỮ LẬP TRÌNH
3.3. Xây dựng chương trình
Cấu trúc DO- ENDDO

79
Chương 4
GIAO TIẾP VỚI NGOẠI VI
4.1. Giao tiếp vào ra đơn bít
4.2. Giao tiếp mã quét
4.3. Giao tiếp dữ liệu
4.4. Giao tiếp mở rộng

80
Chương 4
GIAO TIẾP VỚI NGOẠI VI
4.1. Giao tiếp vào ra đơn bít

81
Chương 4
GIAO TIẾP VỚI NGOẠI VI
4.1. Giao tiếp vào ra đơn bít

82
Chương 4
GIAO TIẾP VỚI NGOẠI VI
4.1. Giao tiếp vào ra đơn bít

83
Chương 4
GIAO TIẾP VỚI NGOẠI VI
4.1. Giao tiếp vào ra đơn bít
//Bài 1: Bat tat LED, tao tan so chan P2.0
#include <REGX51.H>
#define tat 1;
#define bat 0;
sbit LED = P1^0; void main()
{
void delay() LED = tat;
{ delay();
unsigned char i; LED = bat;
for (i=0;i<20;i++) delay();
{ }
TMOD = 0x01; // timer 0, che do 1 (16 bit)
TH0=0x3C; //tao ra thoi 50ms => 3CB0
TL0=0xB0;
TR0=1; // cho timer chay
while (!TF0); Bài Tập : tương tự viết Timer 1, chế
{ độ 8 bít trễ 1s. Gửi qua Email:
} Thietbiquynhon@gmail.com
TF0=0;
TR0=0;
}
}
84
Chương 4
GIAO TIẾP VỚI NGOẠI VI
4.1. Giao tiếp vào ra đơn bít

85
Chương 4
GIAO TIẾP VỚI NGOẠI VI
4.1. Giao tiếp vào ra đơn bít
//Bài 1: 8 LED chay port P2 TR0=0; } }
#include <REGX51.H> main()
sbit LED = P2^0 ; {
void delay_1(s) { while(1)
unsigned int f, t; {
for(f=0; f<s; f++) unsigned int y;
for(t=0;t<20;t++) P2=0x01;
{ TMOD = 0x01; delay_1(1);
TH0=0xC350; for(y=0;y<8;y++)
TL0=0xC350; {
TR0=1; P2=P2<<1;
while (!TF0); delay_1(1);
TF0=0; }}}
86
Chương 4
GIAO TIẾP VỚI NGOẠI VI
4.1. Giao tiếp vào ra đơn bít

87
Chương 4
GIAO TIẾP VỚI NGOẠI VI
4.1. Giao tiếp vào ra đơn bít
//Bài 1: 8 LED chay port TL0=0xC350; while (1)
P2 TR0=1; {
#include <REGX51.H> while (!TF0); DC=1;
sbit START = P1^0 ; TF0=0; delay_1(1);
sbit STOP = P1^1 ; TR0=0; while (!STOP)
sbit DC = P2^0 ; } {DC=0;
void delay_1(s) } delay_1(1);
{ main() while (START)
unsigned int f, t; { {}
for(f=0; f<s; f++) DC=0; }
for(t=0;t<30;t++) while (!START) }
{ { }
TMOD = 0x01; }
88
TH0=0xC350;
Chương 4
GIAO TIẾP VỚI NGOẠI VI
4.1. Giao tiếp vào ra đơn bít
//Ngắt {
#include <REGX51.H> EA = 1;
sbit xung = P2^0; ET0 = 1;
void timer0_int(void) interrupt 1 TMOD = 0x01;
{ TF0=0; xung = ! xung = 0;
xung; TH0 = 0xfe;
TH0 = 0xfe;
TL0 = 0x0c;
TL0 = 0x0c;
}
TR0 = 1;
void main(void)
while(1) PCON|=1;
}

89
Chương 4
GIAO TIẾP VỚI NGOẠI VI
4.1. Giao tiếp vào ra đơn bít
#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
}
} 90
Chương 4
GIAO TIẾP VỚI NGOẠI VI
Bài tập về nhà vào/ra cơ bản
Viết chương trình dạng C tạo sóng xung vuông có tần số ???Hz
trên chân P3.0, có sử dụng ngắt timer x
Trong đó: ??? là 3 chữ số cuối của mã sinh viên
x là 0 nếu số cuối mã SV chẵn và 1 nếu
lẻ
Hạn nộp 13/11 Qua Nhóm Zalo của môn học.

91
Chương 4
GIAO TIẾP VỚI NGOẠI VI
4.2. Giao tiếp mã quét

92
Chương 4
GIAO TIẾP VỚI NGOẠI VI
4.2. Giao tiếp mã quét
// Hien thi 2 so 7 doan
while (!TF0);
#include <AT89x51.h>
TF0=0; delay();
sbit LED1 = P3^0;
TR0=0; P2 = 0xA4; // dua so 9 ra
sbit LED2 = P3^1;
duong du lieu
}
LED1 = 1; // bat
}
void delay()
LED2 = 0; // tat
void main ( void )
{
delay();
{
int t;
}
while (1)
for(t=0;t<2;t++)
}
{
{
P2 = 0xF9; // dua so 9 ra duong
TMOD = 0x01;
du lieu
TH0=0x3C;
LED1 = 0; // bat
TL0=0xB0;
LED2 = 1; // tat
TR0=1;
93
Chương 4
GIAO TIẾP VỚI NGOẠI VI
4.2. Giao tiếp mã quét
Dem so tu 0-9
while (!TF0); P2 = 0xF9; // dua so 1 ra duong
#include <AT89x51.h>
TF0=0; du lieu
sbit LED1 = P3^0;
TR0=0; LED1 = 0; // bat
sbit LED2 = P3^1;
LED2 = 1; // tat
}
delay();
}
void delay()
P2 = 0xA4; // dua so 2 ra
{ duong du lieu
void main ( void )
int t; LED1 = 0; // bat
{
for(t=0;t<10;t++) LED2 = 1; // tat
P2 = 0xC0; // dua so 0 ra
{ delay();
duong du lieu
TMOD = 0x01; …………
LED1 = 0; // bat
TH0=0x3C; }
LED2 = 1; // tat
TL0=0xB0;
delay();
TR0=1;
94
Chương 4
GIAO TIẾP VỚI NGOẠI VI
4.2. Giao tiếp mã quét
Bài tập: Viết đếm số 0 -9 sử dụng vòng FOR

95
Chương 4
GIAO TIẾP VỚI NGOẠI VI
4.2. Giao tiếp mã quét

96
Chương 4
GIAO TIẾP VỚI NGOẠI VI
4.2. Giao tiếp mã quét

97
Chương 4
GIAO TIẾP VỚI NGOẠI VI
4.2. Giao tiếp mã quét

98
Chương 4
GIAO TIẾP VỚI NGOẠI VI
4.2. Giao tiếp mã quét

99
Chương 4
GIAO TIẾP VỚI NGOẠI VI
4.2. Giao tiếp mã quét
#include <REGX51.H> // Hàm chính main
sbit LED1 =P3^0; void main(void)
sbit H1 =P1^0; {
sbit H2 =P1^1; while(1)
sbit H3 =P1^2; {
sbit H4 =P1^3; P1=0xff;
sbit C1 =P1^4; H1=0;
sbit C2 =P1^5; if (C1==0)
sbit C3 =P1^6;
sbit C4 =P1^7; P2=0xC0;
LED1=0;
//unsigned char chuso[10]= if (C2==0)
{0xC0,0xF9,0xA4,0xB0,0x9 P2=0xF9;
9,0x92,0x82,0xF8,0x80,0x9 LED1=0;
0}; //……………
}
}
100
Chương 4
GIAO TIẾP VỚI NGOẠI VI
4.2. Giao tiếp mã quét

101
Chương 4
GIAO TIẾP VỚI NGOẠI VI
4.2. Giao tiếp mã quét

102
Chương 4
GIAO TIẾP VỚI NGOẠI VI
4.2. Giao tiếp mã quét

103
Chương 4
GIAO TIẾP VỚI NGOẠI VI
4.2. Giao tiếp mã quét

104
Chương 4
GIAO TIẾP VỚI NGOẠI VI
4.2. Giao tiếp mã quét

105
Chương 4
GIAO TIẾP VỚI NGOẠI VI
4.2. Giao tiếp mã quét

106
Chương 4
GIAO TIẾP VỚI NGOẠI VI
4.2. Giao tiếp mã quét

107
Chương 4
GIAO TIẾP VỚI NGOẠI VI
4.2. Giao tiếp mã quét

108
Chương 4
GIAO TIẾP VỚI NGOẠI VI
4.3. Giao tiếp dữ liệu

109
Chương 4
GIAO TIẾP VỚI NGOẠI VI
4.3. Giao tiếp dữ liệu

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.

110
Chương 4
GIAO TIẾP VỚI NGOẠI VI
4.3. Giao tiếp dữ liệu

111
Chương 4
GIAO TIẾP VỚI NGOẠI VI
4.3. Giao tiếp dữ liệu

112
Chương 4
GIAO TIẾP VỚI NGOẠI VI
4.3. Giao tiếp dữ liệu

113
Chương 4
GIAO TIẾP VỚI NGOẠI VI
4.3. Giao tiếp dữ liệu

114
Chương 4
GIAO TIẾP VỚI NGOẠI VI
4.3. Giao tiếp dữ liệu

115
Chương 4
GIAO TIẾP VỚI NGOẠI VI
4.3. Giao tiếp dữ liệu

116
Chương 4
GIAO TIẾP VỚI NGOẠI VI
void LCDcontrol(unsigned char x)
4.3. Giao tiếp dữ liệu {
RS=0;//chon thanh ghi lenh
RW=0;//ghi len LCD.
void LCDinit(void) LCDdata=x ;// gia tri x
EN=1;//cho phep muc cao
{ EN=0;//xung cao xuong thap
LCDcontrol(0x38);//2 wait();//?oi LCD san sang.
}
dong va ma tran 5x7
LCDcontrol(0x0e);//bat void LCDwrite(unsigned char c)
man hinh, bat con tro {
RS=1;//ghi du lieu
LCDcontrol(0x01);// RW=0;//ghi du lieu len LCD
xoa man hinh LCDdata=c;//gia tri C
EN=1;//cho phep muc cao
} EN=0;//xung cao xuong thap
wait();//cho
}
117
Chương 4
GIAO TIẾP VỚI NGOẠI VI
4.3. Giao tiếp dữ liệu

118
Chương 4
GIAO TIẾP VỚI NGOẠI VI
4.3. Giao tiếp dữ liệu

119
Chương 4
GIAO TIẾP VỚI NGOẠI VI
4.3. Giao tiếp dữ liệu

120
Chương 4
GIAO TIẾP VỚI NGOẠI VI
4.3. Giao tiếp dữ liệu

121
Chương 4
GIAO TIẾP VỚI NGOẠI VI
4.3. Giao tiếp dữ liệu

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--);
}

122
Chương 4
GIAO TIẾP VỚI NGOẠI VI
4.3. Giao tiếp dữ liệu

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
}
123
Chương 4
GIAO TIẾP VỚI NGOẠI VI
4.3. Giao tiếp dữ liệu

124
Chương 4
GIAO TIẾP VỚI NGOẠI VI
4.3. Giao tiếp dữ liệu

125
Chương 4
GIAO TIẾP VỚI NGOẠI VI
4.3. Giao tiếp dữ liệu

1- Tạo chuỗi hiển thị LCD, chạy


2- Lập trình máy tính + - * / trên LDC

126
Chương 4
GIAO TIẾP VỚI NGOẠI VI
4.3. Giao tiếp dữ liệu

127
Chương 4
GIAO TIẾP VỚI NGOẠI VI
4.3. Giao tiếp dữ liệu

128
129
GIAO TIẾP ADC

130
GIAO TIẾP ADC

131
GIAO TIẾP ADC

132
GIAO TIẾP ADC

133
GIAO TIẾP ADC

134
GIAO TIẾP ADC

135
GIAO TIẾP ADC

136
GIAO TIẾP ADC

137
GIAO TIẾP ADC

138
GIAO TIẾP ADC

139
GIAO TIẾP ADC

140
GIAO TIẾP ADC

141
GIAO TIẾP ADC

142
GIAO TIẾP ADC

143
GIAO TIẾP ADC

144
GIAO TIẾP ADC

145
GIAO TIẾP ADC

146
GIAO TIẾP ADC

147
GIAO TIẾP ADC

148
GIAO TIẾP ADC

149
GIAO TIẾP ADC

150
GIAO TIẾP ADC

151
GIAO TIẾP ADC

152
GIAO TIẾP ADC

153
GIAO TIẾP ADC

KIỂM TRA GIỮA KỲ


1. Thiết kế đầy đủ giao tiếp họ 8051 với các ngoại
vi 04 LED đơn, 02 LED 7 đoạn, 01 LCD, 02 Phím
đơn, 01 ADC.
2. Viết chương trình giao tiếp 1 trong số các ngoại
vi trên

154
4.6 Thiết bị ngoại vi -ADC 15
5

ADC
155
Thiết kế card giao tiếp ADC 156
(ADC0804)

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
Thiết kế card giao tiếp ADC 157
(ADC0804)

RD=“0” cho phép đọ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
158
THIẾT KẾ GHÉP NỐI – ADC
159
THIẾT KẾ GHÉP NỐI – ADC
LED EQU P0
DATA_ADC EQU P1
;CAC BIT GIAO TIEP ADC
INTR BIT P3.7
WR_ADC BIT P3.5
RD_ADC BIT P3.6
;VUNG NHO NHIET DO
DONVI EQU 40H
CHUC EQU 41H
TRAM EQU 42H
;CAC BIT QUET LED
L1 BIT P2.4
L2 BIT P2.3
L3 BIT P2.2
L4 BIT P2.1
L5 BIT P2.0
ORG 0000H
MOV DATA_ADC,#0FFH ;P1 DAU VAO DU LIEU
160
THIẾT KẾ GHÉP NỐI – ADC
DISPLAY:
MOV R3, #5
LL:
MOV LED,#0C6H ;'C' RA
SETB L5 ;CHO LED
CALL DELAY ;TRE
CLR L5 ;TAT LED 5

MOV LED,#9CH ;DUA KY HIEU 'DO' RA LED7


SETB L4
CALL DELAY
CLR L4
MOV A,DONVI
161
THIẾT KẾ GHÉP NỐI – ADC
MOV A,CHUC ;
DELAY:
MOVC A,@A+DPTR ;
MOV R7,#150
MOV LED,A ;XUAT RA LED7
DJNZ R7,$
SETB L2 ;CHO LED 2 SANG
RET
CALL DELAY
CLR L2
MALED7:
DB
MOV A,TRAM ;
0C0H,0F9H,0A4H,0B0H,99H,92H,82H
MOVC A,@A+DPTR ;LAY MA LED7
,0F8H,80H,90H
TUONG UNG CUA HANG TRAM
; KY HIEU 'D0' KY HIEU 'C'
MOV LED,A ;XUAT RA LED7
;DB 9CH 0C6H
SETB L1 ;CHO LED 1 SANG
END
CALL DELAY
CLR L1
DJNZ R3, LL
RET
162
THIẾT KẾ GHÉP NỐI – ADC
4.5 Giao tiếp ADC/DAC 16
3
Viết chương trình điều khiển ADC 0809
Setbale cho ALE = 1
chuyển đổi tín hiệu 1 kênh tương tự ở
ngõ vào sang dữ liệu số Hex và hiển thị Nop
trên 2 LED 7 đoạn. Nop
ALE bit p3.3 Setbstart
Start bit p3.4 Nop
Org 0000h Nop
Mov dptr, #0500h Clr ale
Main: lcall ctcd Clr start
Lacll giaimahex
Ljmp main
analog sang số kết quả lưu trong A
Ctcd: mov p3, #00000000B
4.6 Giao tiếp Động cơ DC 16
4
4.6 Giao tiếp Động cơ DC 16
ORG00H QUA1 :
5
MOVP3,#00H JB P1.2, BD NGUOC:
MOVP2,#00H JNB P1.2, $ SETBP2.1
BD: JMPNGUOC CLRP2.0
JB P1.0, QUA0 JMPBD
JNB P1.0, $ THUAN:
JMPTHUAN SETBP2.0 END
QUA0 : CLRP2.1
JB P1.1, QUA1 JMPBD
JNB P1.1, $ STOP_:
JMPSTOP_ CLRP2.1
CLRP2.0
JMPBD
4.5 Giao tiếp Động cơ DC/Step 16
6
4.5 Thiết bị ngoại vi -STEP 16
7
4.5 Thiết bị ngoại vi -STEP 16
8

168
4.5 Thiết bị ngoại vi -STEP 169
4.5 Thiết bị ngoại vi -STEP 17
0
;********************************
org 00h
DELAY_1S: MOV R0,#2
mov p2, #00h
L3: ACALL DELAY_500MS
Ll: setb p2.0
DJNZ R0,L3
call DELAY_5S
RET
sjmp LL
;********************************
delay: DELAY_2S: MOV R0,#4
DELAY_50MS:MOV TH0,#HIGH(-50000) L4: ACALL DELAY_500MS
DJNZ R0,L4
MOV TL0,#LOW(-50000) RET
SETB TR0 ;*******************************
DELAY_5S: MOV R0,#200
L1:JNB TF0,L1 L5: ACALL DELAY_1S
CLR TF0 DJNZ R0,L5
RET
RET
end
4.6 Thiết bị ngoại vi -PWM 17
1
4.6 Thiết bị ngoại vi -PWM 17
2

172
4.7 Thiết bị ngoại vi ROM/RAM 17
3
4.7 Thiết bị ngoại vi ROM/RAM 17
4
ORG 0 INC DPTR
BD: CJNE A,#10, LL2
MOV 30H,#01H JMP ll2
MOV TRE:
DPTR,#0001H
mov r5,#20
LL1: MOV A,30H
v2:
MOVX @DPTR,A
MOV R3,#20
INC 30H
v1:
INC DPTR
MOV R4,#255
CJNE A,#10, LL1
DJNZ R4,$
MOV DPTR,#0001H
DJNZ R3,v1
LL2: MOVX A,@DPTR
djnz r5, v2
MOV P1,A
RET
4.7 Thiết bị ngoại vi ROM/RAM 17
5
4.7 Thiết bị ngoại vi – RS232 17
6

176
4.7 Thiết bị ngoại vi – RS232 17
7
4.7 Thiết bị ngoại vi – RS232 17
8

178
4.8 Thiết bị ngoại vi – RS485 17
9

Giao tiếp VĐK, PC/RS485


Thank you
For your attention

180

You might also like