You are on page 1of 179

Chương III:

Hệ vi điều khiển onchip


MCS 8051
Chương III: Hệ vi điều khiển 8051
3.1. Giới thiệu chung
 Vi điều khiển = bộ nhớ + mạch giao
tiếp ngoại vi + VXL
 Ưu điểm:
• Cấu trúc phần cứng, kết cấu mạch điện
đơn giản
• Có khả năng giao tiếp trực tiếp với thiết
bị bên ngoài
 Dành cho ứng dụng đơn giản.
 Nhược điểm: Khả năng xử lý bị giới hạn
 Ứng dụng: các hệ thống điều khiển công
nghiệp, các dây truyền sx, bộ điều khiển lập
trình, máy giặt, máy điều hòa, …

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 2
Chương III: Hệ vi điều khiển MCS 8051

3.1.2 Cấu trúc chung của VĐK

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 3
Chương III: Hệ vi điều khiển 8051
 Rom:
 Dùng để lưu chương trình do người viết
ctrình viết ra
 Cho phép nạp/xoá bằng mạch chuyên
dụng
 RAM:
 Lưu trữ dữ liệu tạm thời và kết quả trung
gian được tạo ra và được sử dụng trong
quá trình hoạt động của bộ vi điều khiển.
 Nội dung bị xóa một khi nguồn cung cấp
bị tắt.

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 4
Chương III: Hệ vi điều khiển 8051
 Electrically Erasable
Programmable ROM (EEPROM):
 Nội dung có thể được thay đổi trong quá
trình thực hiện chương trình (tương tự
như RAM), nhưng vẫn còn lưu giữ vĩnh
viễn, ngay cả sau khi mất điện (tương tự
như ROM).
 Nhược điểm: quá trình ghi vào tương đối
chậm.

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 5
Chương III: Hệ vi điều khiển 8051
 Các thanh ghi chức năng đặc biệt (SFR)
(Special Function Registers)
 Là một phần của bộ nhớ RAM.
 Mục đích của chúng được định trước bởi nhà sản
xuất và không thể thay đổi được.
 Các bit của chúng được liên kết vật lý tới các
mạch trong vi điều khiển như bộ chuyển đổi
A/D, modul truyền thông nối tiếp,…
 Bộ đếm chương trình (Program
Counter):
 Chứa địa chỉ chỉ đến ô nhớ chứa câu lệnh tiếp
theo sẽ được kích hoạt.
01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 6
Chương III: Hệ vi điều khiển 8051
 Central Processor Unit (CPU): điều
khiển và giám sát tất cả các hoạt động bên
trong vi điều khiển.
 Bộ giải mã lệnh: nhận dạng câu lệnh và điều
khiển các mạch khác theo lệnh đã giải mã. Mỗi
họ vi điều khiển thường có các tập lệnh khác
nhau.
 Arithmetical Logical Unit (ALU): Tính toán số
học và logic.
 Thanh ghi tích lũy (Accumulator): Lưu trữ
tất cả các dữ liệu cho quá trình tính toán và lưu
giá trị kết quả để chuẩn bị cho các tính toán tiếp
theo.

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 7
Chương III: Hệ vi điều khiển 8051
 Các cổng vào/ra (I/O Ports)
 Mỗi VĐK có một số thanh ghi kết nối với chân VĐK được
gọi là cổng vào/ra

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 8
Chương III: Hệ vi điều khiển 8051
Bộ dao động (Oscillator): đồng bộ
hóa hoạt động của tất cả các mạch
bên trong vi điều khiển

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 9
Chương III: Hệ vi điều khiển 8051
 Bộ định thời/đếm (Timers/Counters): thường là
các thanh ghi SFR 8/16 bit, sau mỗi xung dao
động clock, giá trị của chúng được tăng lên.

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 10
Chương III: Hệ vi điều khiển 8051
Truyền thông nối tiếp: truyền thông
giữa các thiết bị ở khoảng cách xa

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 11
Chương III: Hệ vi điều khiển 8051
3.2. Kiến trúc vi điều khiển 8051
 4Kbytes EEPROM.
 128 bytes RAM.
 4 Port I/O (Input/Output).
 2 bộ định thời Timer 16 bits.
 Giao tiếp nối tiếp.
 64Kbytes không gian bộ nhớ chương trình mở
rộng: DK bằng PSEN
 64Kbytes không gian bộ nhớ dữ liệu mở rộng: đk
bằng RD, WR
 Một bộ xử lý luận lí (thao tác trên các bits đơn).
 210 bits được địa chỉ hóa.
 Bộ nhân chia 4µs.

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 12
Chương III: Hệ vi điều khiển 8051
3.2. Kiến trúc vi điều khiển 8051
 Chân vi điều khiển 8051

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 13
Chương III: Hệ vi điều khiển 8051
3.2. Kiến trúc vi điều khiển 8051

 Mô tả chức năng các


chân
 Chân VCC: Cấp điện
áp nguồn cho Vi điều
khiển: +5V±0.5.
 Chân GND: Nối GND
(nối Mass).

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 14
Chương III: Hệ vi điều khiển 8051
3.2. Kiến trúc vi điều khiển 8051

 32 chân (P0,P1,P2,P3): cổng ra, giá trị 1


 Port 0 (P0)(chân 32-39) chức năng:
 Xuất/nhập
 Là bus dữ liệu & bus địa chỉ (AD0-AD7)
 Định địa chỉ của bộ nhớ ngoài.
 Port 1 (P1) (chân 1 - 8) chức năng:
 Xuất/nhập.
 Port 2 (P2) (C.21 - 28) chức năng:
 Xuất/nhập
 Là bus địa chỉ cao (A8-A15): khi kết nối
với bộ nhớ ngoài có dung lượng lớn,cần
2 byte để định địa chỉ của bộ nhớ, byte
thấp do P0 đảm nhận, byte cao do P2
đảm nhận.
 Port 3 (P3)(C.10-17):
 Chức năng xuất/nhập
 Chức năng mỗi chân:
01/13/24 15
Chương III: Hệ vi điều khiển 8051
3.2. Kiến trúc vi điều khiển 8051

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 16
Chương III: Hệ vi điều khiển 8051
3.2. Kiến trúc vi điều khiển 8051

 Chân RESET (RST): thiết lập


trạng thái ban đầu cho vi điều
khiển.
 Chân XTAL1 và XTAL2:
nhận nguồn xung clock từ
bên ngoài để hoạt động,
thường được ghép nối với
thạch anh và các tụ để tạo
nguồn xung clock ổn định.
 Chân cho phép bộ nhớ
chương trình PSEN:
(program store enable) truy
xuất bộ nhớ chương trình bên
ngoài (thường nối đến OE của
EPROM)
01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 17
Chương III: Hệ vi điều khiển 8051
3.2. Kiến trúc vi điều khiển 8051

 Chân ALE (chốt địa chỉ)


 P0 (bus địa chỉ/bus dữ liệu)
 cần tách các đường dữ liệu
và địa chỉ.
 ALE: tín hiệu điều khiển để
giải đa hợp các đường địa chỉ
và các đường dữ liệu khi kết
nối chúng với IC chốt.
 Chân EA: xác định chương
trình thực hiện được lấy từ ROM
nội hay ROM ngoại.
 EA nối với logic 1(+5V): thực
hiện chương trình lấy từ bộ
nhớ nội
 EA nối với logic 0 (0V): thực
hiện chương trình lấy từ bộ
nhớ ngoại
01/13/24 18
Chương III: Hệ vi điều khiển 8051
 Tổ chức bộ nhớ 8051

Bộ nhớ trong Bộ nhớ ngoài

ROM 4KB
0000h – 0FFFh Bộ nhớ chương trình 64 KB
0000h – FFFFh
Điều khiển bằng PSEN

RAM 128 byte


00h – 7Fh
Bộ nhớ dữ liệu 64 KB
0000h – FFFFh
SFR Điều khiển bằng RD và WR
8hh – 0FFh

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử
19
Chương III: Hệ vi điều khiển 8051
Tổ chức bộ nhớ trong
 RAM:
 Bank thanh ghi
 Ram có thể định địa chỉ bit
 Ram đa dụng
 Rom
 SFR: Special function register (thanh
ghi chức năng đặc biệt)

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 20
Chương III: Hệ vi điều khiển 8051
 ROM:
 Được đánh địa chỉ từ 0-0ffffh, bao gồm 64Kb.
 Không phân biệt bộ nhớ trong và nhớ ngoài.
 8051 được tổ hợp sẵn một lượng Rom trong vi
điều khiển gọi là Rom on-chip. Lượng Rom này
chiếm vùng địa chỉ thấp của 8051, tức là từ địa
chỉ từ 0 trở đi. Có thể dùng lượng Rom này để
lưu chương trình hoặc hoàn toàn dùng ROM
ngoài hoặc sử dụng phần thấp là ROM trong,
phần địa chỉ cao là ROM ngoài.

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 21
Chương III: Hệ vi điều khiển 8051
Ram
đa
dụng

Vùng
định
địa
chỉ
bit

Bank
thanh
ghi

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 22
Chương III: Hệ vi điều khiển 8051
RAM
 Các bank thanh ghi
 Có 8 thanh ghi trong mỗi bank, từ R0-R7
 Có 4 bank thanh ghi, tại mỗi thời điểm chỉ có
một bank thanh ghi được truy xuất với các thanh
ghi từ R0 đến R7
 Các lệnh dùng các thanh ghi từ R0 đến R7:
• Không gian lưu trữ ít
• Thời gian thực hiện nhanh
 Có thể truy xuất thanh ghi trên các bank thanh
ghi như với các ô nhớ bình thường khác.
 Ví dụ: có thể truy xuất đến thanh ghi R7 bằng ô
nhớ 07H.

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 23
Chương III: Hệ vi điều khiển 8051
 Vùng RAM truy xuất từng bit
 Có 210 ô nhớ bit được định địa chỉ và có thể truy xuất đến
từng bit.
• 128 bit nằm trong các ô nhớ có địa chỉ byte từ 20H đến
2FH
• Các bit nhớ còn lại chứa trong nhóm thanh ghi có chức
năng đặc biệt.
 Ví dụ:
mov 05H,#10111111B ; gán giá trị cho ô nhớ

 Vùng RAM đa dụng


 Dùng để lưu trữ dữ liệu
 Truy xuất theo từng byte.

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 24
Chương III: Hệ vi điều khiển 8051
 Các thanh ghi có chức năng đặc biệt
Địa Có thể Không định địa chỉ bit
chỉ định địa
byte chỉ bit
F8h
F0h B
E8h
E0h A
D8h
D0h PSW
C8h (T2CON) (RCAP2L) (RCAP2H) (TL2) (TH2)
C0h
B8h IP SADEN
B0h P3
A8h IE SADDR
A0h P2
98h SCON SBUF BRL BDRCON
90h P1
88h TCON TMOD TL0 TH0 TL1 TH1 AUXR CKCON
01/13/24 80h P0 SP DPL DPH PCON 25
Chương III: Hệ vi điều khiển 8051
 Thanh ghi A (ACC: Thanh ghi tích luỹ)
 Dùng để lưu trữ các toán hạng và kết quả
của phép tính.
 Độ dài 8 bit
 Truy xuất:
• Trực tiếp qua E0H (byte)
• Hoặc thông qua địa chỉ bit từ E0h – E7h
 VD:
MOV A,#1 ; tương tự lệnh:
MOV 0E0h,#1
01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 26
Chương III: Hệ vi điều khiển 8051
 Thanh ghi B:
 Thực hiện các phép toán số học
 Khi thực hiện lệnh chia với thanh ghi A,
số dư được lưu trữ ở thanh ghi B.
 Còn được dùng như một thanh ghi đệm
có nhiều chức năng.
 Địa chỉ byte: F0, địa chỉ bit: F0-F7h

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 27
Chương III: Hệ vi điều khiển 8051
 Con trỏ ngăn xếp SP:
 Giá trị được tăng,giảm tự động khi thực hiện các
lệnh PUSH, CALL,POP
 SP quản lí và xử lí các nhóm dữ liệu liên tục.
 Giá trị mặc định của SP là 07H.
 Con trỏ dữ liệu DPTR.
 Là thanh ghi 16 bit
 Gồm: DPL và DPH
 Thường được sử dụng khi truy xuất dữ liệu từ bộ
nhớ ROM hoặc bộ nhớ từ bên ngoài.
 Các thanh ghi Port:
 P0 (định địa chỉ bit: 80h-87h), P1(90h-97h),
P2(A0h-A7h), P3(B0h-B7h)
 Là các thanh ghi chốt cho 4 port xuất/nhập
01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 28
Chương III: Hệ vi điều khiển 8051
 Thanh ghi từ trạng thái chương trình (PSW -
Program Status Word)
 Địa chỉ D0h, có các địa chỉ bit từ D0h – D7h:

 CY (Carry): cờ nhớ, C = 1 khi có nhớ trong phép


cộng hay mượn trong phép trừ
 AC (Auxiliary Carry): cờ nhớ phụ (thường dùng
cho các phép toán BCD).
 F0 (Flag 0): được sử dụng tuỳ theo yêu cầu của
người sử dụng.

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 29
Chương III: Hệ vi điều khiển 8051
 RS1, RS0: dùng để chọn bank thanh ghi sử dụng. Khi reset
hệ thống, bank 0 sẽ được sử dụng.

 OV (Overflow): cờ tràn. Cờ OV = 1 khi có hiện tượng tràn số


học xảy ra (số nguyên có dấu).
 P (Parity): Cờ P = 1 khi tổng số bit 1 trong thanh ghi A là số
lẻ. Cờ P thường được dùng để kiểm tra lỗi truyền dữ liệu.

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 30
Chương III: Hệ vi điều khiển 8051
 Thanh ghi port nối tiếp: SBUF – Serial
Data Buffer
 Thanh ghi nhận: Dữ liệu đọc từ SBUF
 Thanh ghi truyền: Dữ liệu đưa tới SBUF
 Thanh ghi định thời: Timer Register – là
thanh ghi dùng cho bộ định thời 0 và 1
 TH0, TL0
 TH1, TL1

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 31
Chương III: Hệ vi điều khiển 8051
 Thanh ghi điều khiển
 IP: Interrupt Priority: cho phép chọn mức ưu tiên ngắt khi
đồng thời xảy ra 2 ngắt
 IE: Interrupt Enable: cho phép/cấm ngắt
 TMOD: Timer Mode: Chọn chế độ hoạt động cho Timer
 TCON: Timer control: Điều khiển hoạt động bộ định thời
và ngắt
 T2CON: Timer 2 Control: Điều khiển hoạt động bộ định
thời 2
 SCON: Serial port Control: Điều khiển hoạt động port nối
tiếp
 PCON: Power Control:

Bit 7 6 5 4 3 2 1 0
Chức năng SMOD1 SMOD0 - POF GF1 GF0 PD IDL

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 32
Chương III: Hệ vi điều khiển 8051
Tổ chức bộ nhớ ngoài

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 33
Chương III: Hệ vi điều khiển 8051
Tổ chức bộ nhớ ngoài
 Bộ nhớ chương trình được truy xuất thông qua chân PSEN
(sử dụng 16 bit)
 Bộ nhớ dữ liệu đươc truy xuất thông qua chân WR hay RD
(8/16 bit).
 Port 0 được dùng làm địa chỉ thấp/ dữ liệu đa hợp. Tín hiệu
ALE để tách byte địa chỉ và đưa vào bộ chốt ngoài.
 Trong chu kỳ ghi, byte dữ liệu sẽ tồn tại ở Port 0 vừa trước
khi /WR tích cực và được giữ cho đến khi /WR không tích
cực.Trong chu kỳ đọc, byte nhận được chấp nhận vừa trước
khi /RD không tích cực.
 Điều kiện xử lý:
 Tín hiệu /EA tích cực ( = 0).
 Giá trị của bộ đếm chương trình (PC – Program Counter) lớn hơn
kích thước bộ nhớ.

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 34
Chương III: Hệ vi điều khiển 8051
3.3. Tập lệnh 8051 và lập trình hợp
ngữ cho 8051
 Tập lệnh 8051
 Các thành phần ngôn ngữ assembly
 Quy trình xây dựng chương trình

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 35
Chương III: Hệ vi điều khiển 8051
3.3. Tập lệnh 8051 và lập trình hợp ngữ cho 8051
MOV A, #25H ;A ← #0x25 Nạp giá trị là hằng
MOV DPTR, #1FFFH số  thanh ghi/ô
Tức thì temp EQU 40
(Immediate) nhớ
MOV R1, #temp

Thanh
MOV A, R0 ;A ← contents (R0) Không sử dụng 2
ghi MOV R2, A ;R2 ← contents (A) thanh ghi R
(register)

MOV A, 40H ; A ← mem[40H] Truy xuất dữ liệu


Trực tiếp MOV A, 4H
(Direct)
của ô nhớ dữ liệu

Gián tiếp
MOV A, @R0 ;A  mem[R0] -Chỉ sử dụng
MOV @R1, A ;A internal_mem[R1] R0/R1
thanh ghi
MOVX A, @R0 ; A  Ex_mem[R0]
Register
MOVX A, @DPTR ;Aex_mem[DPTR]
- Cho biết địa chỉ
Indirect
ô nhớ trong RAM
MOVC A, @A+DPTR ;A Lấy dữ liệu trong Tạo ra một địa chỉ
[A+DPTR]
Chỉ số của ô nhớ cần truy
MOVC A, @A+PC ;A  ext_code_mem [A + PC]
(Indexed)
MOVX A, @A+DPTR ;Aex_mem[A+DPTR]
xuất hoặc địa chỉ
nơi nhảy đến
Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử
01/13/24 36
Chương III: Hệ vi điều khiển 8051
3.3. Tập lệnh 8051 và lập trình hợp ngữ cho 8051

3.3. Tập lệnh

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 37
Chương III: Hệ vi điều khiển 8051
3.3. Tập lệnh 8051 và lập trình hợp ngữ cho 8051

MỘT SỐ QUI ƯỚC KHI LẬP TRÌNH VỚI HỢP NGỮ ASSEMBLER

 Rn :
 Các thanh ghi ở các Bank thanh ghi
Khi sử dụng thay n bằng các số từ 0
đến 7: R0, R1, R2, R3, R4, R5, R6, R7

 VD: Mov A,R2

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 38
Chương III: Hệ vi điều khiển 8051
3.3. Tập lệnh 8051 và lập trình hợp ngữ cho 8051

MỘT SỐ QUI ƯỚC KHI LẬP TRÌNH VỚI HỢP NGỮ ASSEMBLER

 #data
 Dữ liệu 8 bit, khi sử dụng data có thể
viết dưới dạng :
• số nhị phân (Vd: #00110011b)
• số thập lục phân (Vd: #0A6H)
• số thập phân (Vd: #21)
 VD: Mov A,#20H

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 39
Chương III: Hệ vi điều khiển 8051
3.3. Tập lệnh 8051 và lập trình hợp ngữ cho 8051

MỘT SỐ QUI ƯỚC KHI LẬP TRÌNH VỚI HỢP NGỮ ASSEMBLER

 direct
 Ô nhớ có địa chỉ là direct, direct
được thay bằng địa chỉ từ 00H đến FFH
khi viết chương trình.
 VD: Mov A,30H

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 40
Chương III: Hệ vi điều khiển 8051
3.3. Tập lệnh 8051 và lập trình hợp ngữ cho 8051

MỘT SỐ QUI ƯỚC KHI LẬP TRÌNH VỚI HỢP NGỮ ASSEMBLER

 @Ri
 Ô nhớ có địa chỉ gián tiếp, đây là địa
chỉ của một ô nhớ, địa chỉ này được
xác định gián tiếp bằng giá trị của
thanh ghi R0 hoặc R1
 VD: Mov A,@R1

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 41
Chương III: Hệ vi điều khiển 8051
3.3. Tập lệnh 8051 và lập trình hợp ngữ cho 8051

MỘT SỐ QUI ƯỚC KHI LẬP TRÌNH VỚI HỢP NGỮ ASSEMBLER

 rel: địa chỉ bất kỳ nằm trong đoạn [PC-


128  PC+127]
 Addr11: Địa chỉ bất kỳ nằm trong khoảng
0 – 2KB tính từ địa chỉ lệnh tiếp theo
 Addr16: Địa chỉ bất kỳ nằm trong khoảng
0 – 64KB tính từ địa chỉ lệnh tiếp theo
 Dptr: Thanh ghi con trỏ dữ liệu 16 bit
 Data: dữ liệu 8 bit
 Data16: dữ liệu 16 bit

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 42
Chương III: Hệ vi điều khiển 8051
3.3. Tập lệnh 8051 và lập trình hợp ngữ cho 8051

Tập lệnh Vi điều khiển


 Nhóm lệnh di chuyển dữ liệu
 Nhóm lệnh số học
 Nhóm lệnh logic
 Nhóm lệnh rẽ nhánh
 Nhóm lệnh xử lí bit

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 43
Chương III: Hệ vi điều khiển 8051
3.3. Tập lệnh 8051 và lập trình hợp ngữ cho 8051
I. Nhóm lệnh vận chuyển dữ liệu
1. Lệnh MOV
Cú pháp lệnh Ý nghĩa lệnh Ví dụ
Mov A,Rn Chuyển dữ liệu từ Rn  Mov R5, #0A5H
thanh ghi A Mov A,R5 ; A = 0A5H
Mov A,direct Chuyển dữ liệu từ ô nhớ ; mem[33H] = 09H
có đ.chỉ direct  A Mov A,33H ; A = 09H
Mov A,@Ri Chuyển d.liệu từ ô nhớ có ;mem[33H]=09H,R1=33H
đ.chỉ gián tiếp  A Mov A,@R1 ; A=09H
Mov A,#data Thiết lập d.liệu cho t.ghi Mov A,#56H; A = 56H
A
Mov Rn,A Chuyển dữ liệu từ A vào Mov A,#56H
thanh ghi Rn (n=07) Mov R1,A ; R1=56H
Mov Rn,direct Chuyển d.liệu của ô nhớ ; mem[55H] = A3H
có đ.chỉ direct vào t.ghi Mov R4,55H ; R4 =
Rn (n=0-7) A3H
Mov Rn,#data T.lập
Phùng d.liệu
Thị Thu Hiền, cho t.ghi
BM Tin Rn nghiệp,
học Công Mov R2,#37H
Khoa Điện tử ; R2=37H44
01/13/24
Chương III: Hệ vi điều khiển 8051
3.3. Tập lệnh 8051 và lập trình hợp ngữ cho 8051

Cú pháp lệnh Ý nghĩa lệnh Ví dụ


Mov direct,A Chuyển dữ liệu từ t.ghi A Mov A,#77H
 ô nhớ có đ.chỉ direct Mov 69H,A
Mov direct,Rn Chuyển dữ liệu từ t.ghi Rn Mov R1,#78H
một ô nhớ có đ.chỉ direct Mov 7AH,R1
Mov direct,direct Chuyển d.liệu từ ô nhớ có Mov 22H,20H
đ.chỉ direct này vào ô nhớ
có đ.chỉ direct khác
Mov direct,#data Thiết lập dữ liệu cho ô nhớ Mov 52H,#43H
có địa chỉ direct ; mem[52H]=43H
Mov direct,@Ri Chuyển d.liệu của ô nhớ có Mov 30H,#46H Mov
đ.chỉ bằng giá trị của t.ghi R0,#30H
Ri ô nhớ có đ.chỉ direct Mov 23H, @R0
Mov @Ri,A Chuyển d.liệu của t.ghi A Mov A,#33H Mov
vào ô nhớ có đ.chỉ bằng R1,#22H
giá trị của t.ghi Ri Mov @R1,A

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 45
Chương III: Hệ vi điều khiển 8051
3.3. Tập lệnh 8051 và lập trình hợp ngữ cho 8051

Cú pháp lệnh Ý nghĩa lệnh Ví dụ


Mov @Ri,direct Chuyển d.liệu của ô nhớ có đ.chỉ Mov 4BH,#2AH
direct  ô nhớ có đ.chỉ = g.trị Mov R0,#3BH
của t.ghi Ri Mov @R0,4BH
Mov @Ri,#data Đưa dữ liệu vào ô nhớ có địa chỉ Mov R0,#3BH
gián tiếp: Thiết đặt dữ liệu cho ô Mov @R0,#27H
nhớ có đ.chỉ = giá trị của t.ghi Ri
Lệnh đưa dữ liệu vào con trỏ dữ MovDPTR,#3A5FH
Mov DPTR,#data16 liệu DPTR: dữ liệu được lưu ở hai ;DPL = 5FH,
thanh ghi DPL và DPH ;DPH = 3AH

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 46
Chương III: Hệ vi điều khiển 8051
3.3. Tập lệnh 8051 và lập trình hợp ngữ cho 8051

Lệnh Movc A, @A+dptr/PC


 Chức năng: Di chuyển byte mã hoặc byte hằng
số.
 Mô tả:
 MOVC nạp cho thanh ghi A byte mã hoặc byte hằng số từ
bộ nhớ chương trình.
 Địa chỉ của byte được tìm nạp là tổng của giá trị chứa
trong thanh ghi A với nội dung của thanh ghi nền 16 bit
 Thanh ghi nền có thể là con trỏ dữ liệu DPTR hoặc PC.
Thanh ghi PC được tăng để chỉ đến địa chỉ của lệnh tiếp
theo trước khi được cộng với nội dung của thanh ghi A,
các thanh ghi nền không bị thay đổi.

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 47
Chương III: Hệ vi điều khiển 8051
3.3. Tập lệnh 8051 và lập trình hợp ngữ cho 8051

2.Lệnh XCH

Cú pháp lệnh Ý nghĩa lệnh Ví dụ


XCH A,direct Trao đổi dữ liệu giữa ô nhớ có Mov A,#0FAH
địa chỉ direct với thanh ghi A Mov 50H,#60H
XCH A,50H ; A  60H
;50H  0FAH
XCH A,Rn Trao đổi dữ liệu giữa thanh XCH A, R1
ghi Rn và thanh ghi A
XCH A,@Ri Trao đổi dữ liệu giữa thanh Mov 50H,#0FAH
ghi có địa chỉ gián tiếp và Mov R1,#50H
Mov A,#60H
thanh ghi A XCH A,@R1

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 48
Chương III: Hệ vi điều khiển 8051
3.3. Tập lệnh 8051 và lập trình hợp ngữ cho 8051

II. Nhóm lệnh số học


1. Lệnh Add: Cộng không nhớ
Cú pháp Ý nghĩa lệnh Ví dụ Kết quả
lệnh
Add A,Rn Cộng dữ liệu trên Mov A,#20H A = 28H
thanh ghi A với dữ Mov R1,#08H R1=08H
liệu trên t.ghi Rn Add A,R1 Cờ C=0
Add A,direct Cộng dữ liệu trên Mov 50h,#20H A = #08H
t.ghi A với dữ liệu ở ô Mov A,#0E8H 50H = #20H
nhớ có địa chỉ direct Add A,50H Cờ C = 1
Add A,@Ri Cộng dữ liệu trên Mov 50H,#60H A = #61H,
thanh ghi A với dữ Mov R2,#50H R2 = #50H,
liệu của ô nhớ có địa Mov A,#01H cờ C = 0
chỉ gián tiếp Add A,@R2
Add A,#data Cộng d.liệu trên t.ghi Mov A,#05h A = #0Bh
A với dữ liệu xác định Add A,#06h C=0
01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 49
Chương III: Hệ vi điều khiển 8051
3.3. Tập lệnh 8051 và lập trình hợp ngữ cho 8051
2. Lệnh AddC: Cộng có nhớ
Cú pháp Ý nghĩa lệnh Ví dụ Kết quả
AddC A,Rn Cộng dữ liệu trên C=1 A= #19h
thanh ghi A với dữ Mov A,#08h R1 = #10h
liệu trên thanh ghi Rn Mov R1,#10h C =0
có số nhớ ở cờ C Addc A,R1
AddC A,direct Cộng dữ liệu trên C=0 A = #3Bh
t.ghi A với d.liệu ở ô Mov A,#0A5h 10h = #96h
nhớ có đ.chỉ direct và Mov 10h,#96h C =1
giá trị số nhớ ở cờ C Addc A,10h
AddC A,@Ri Cộng d.liệu trên t.ghi C=1 A = #16h
A với dữ liệu của ô Mov A,#05h C=0
nhớ có địa chỉ gián Mov 50h,#10h
tiếp và số nhớ ở cờ C
Mov R1,#50h
Addc a,@R1
AddC A,#data Cộng dữ liệu trên C=1 A = 1Ch
01/13/24
t.ghiThị
Phùng A Thu
với Hiền,
dữ liệu xác
BM Tin Mov
học Công A,#05h
nghiệp, C=0
Khoa Điện tử 50
Chương III: Hệ vi điều khiển 8051
3.3. Tập lệnh 8051 và lập trình hợp ngữ cho 8051

3. Lệnh SubB: Trừ có mượn


Cú pháp Ý nghĩa lệnh Ví dụ Kết quả
SubB A,Rn Trừ dữ liệu trên thanh C= 1 A = 45h
ghi A với dữ liệu trên Mov A,#0E5h C=0
thanh ghi Rn và số nhớ Mov R3,#9Fh
ở cờ C Subb A,R3
SubB A,@Ri Trừ dữ liệu trên thanh C= 1 A = 94h
ghi A với dữ liệu của ô Mov A,#0E5h C=0
nhớ có địa chỉ gián tiếp Mov 4Fh,#50h
và số nhớ ở cờ C
Mov R3,#4Fh
Subb A,@R3
SubB A,#data Trừ dữ liệu trên thanh C= 0 A = 0B6h
ghi A với dữ liệu xác Mov C=1
định và số nhớ ở cờ C A,#05h Subb
A,#4Fh
SubB A, direct Trừ d.liệu trên t.ghi A C= 0 A = 0B6h
Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 51
01/13/24 với n.dung của ô nhớ có Mov C=1
Chương III: Hệ vi điều khiển 8051
3.3. Tập lệnh 8051 và lập trình hợp ngữ cho 8051

4. Lệnh Inc: Tăng lên 1 đơn vị (ko ảnh hưởng tới cờ nhớ)
Cú pháp Ý nghĩa lệnh Ví dụ Kết quả
Inc A Tăng giá trị dữ liệu trên Mov A,#05h A =#06h
thanh ghi A lên 1 đơn vị Inc A
Inc Rn Tăng giá trị dữ liệu trên Mov R7,#0Fh R7=#10h
t.ghi Rn lên 1 đơn vị Inc R7
Inc direct Tăng g.trị dữ liệu ở ô Mov 50h,#0FFh 50h= #00
nhớ có đ.chỉ direct lên
1 đơn vị Inc 50h
Inc @Ri Tăng giá trị dữ liệu ở ô Mov 0Fh,#05h R0 =#0Fh
nhớ có địa chỉ gián tiếp Mov R0,#0Fh 0Fh=#06h
lên 1 đơn vị Inc @R0
Inc DPTR Tăng giá trị của con trỏ Mov DPTR,#5Fh DPTR=#060h
d.liệu DPTR lên 1 đơn vị
Inc DPTR

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 52
Chương III: Hệ vi điều khiển 8051
3.3. Tập lệnh 8051 và lập trình hợp ngữ cho 8051

5. Lệnh Dec: Giảm xuống 1 đơn vị (ko ảnh hưởng tới cờ nhớ)

Cú pháp Ý nghĩa lệnh Ví dụ Kết quả

Dec A Giảm giá trị dữ liệu trên Mov A,#05h A =#04h


t.ghi A xuống 1 đơn vị Dec A
Dec Rn Giảm giá trị dữ liệu trên Mov R7,#0Fh R7=#0Eh
t.ghi Rn xuống 1 đơn vị Dec R7
Dec direct Giảm g.trị dữ liệu ở ô Mov 7Fh,#0 7Fh = #0FFh
nhớ có đ.chỉ direct Dec 7Fh
xuống 1 đơn vị
Dec @Ri Giảm giá trị dữ liệu ở ô Mov 0Fh,#05h R0 =#0Fh
nhớ có địa chỉ gián tiếp Mov R0,#0Fh 0Fh=#04h
xuống 1 đơn vị Dec @R0

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 53
Chương III: Hệ vi điều khiển 8051
3.3. Tập lệnh 8051 và lập trình hợp ngữ cho 8051

6. Lệnh nhân/chia
Cú pháp Ý nghĩa lệnh Ví dụ Kết quả

Mul AB Nhân t.ghi A với thanh ghi B Mov A,#0B9h A = #7Fh


-Dữ liệu là số nguyên không dấu B = #0B2h
- Kết quả là dữ liệu 16 bit. Mov B,#0F7h C = 0
+ Byte thấp lưu ở A OV = 1
+ Byte cao lưu ở B. Mul AB
+ Tích >255(0FFH):cờ tràn OV=1
+ Tích < 255): OV = 0.
+ Cờ nhớ C = 0
Div AB Chia thanh ghi A với thanh ghi B: Mov A,#50h A = #5h
+ Kết quả:8 bit lưu ở A. Mov B,#10h B = #0h
+ Số dư:lưu ở B DIV AB
+ Cờ nhớ C = 0.
+ Cờ tràn OV = 1 khi B = 00H-
phép chia không thể thực hiện

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 54
Chương III: Hệ vi điều khiển 8051
3.3. Tập lệnh 8051 và lập trình hợp ngữ cho 8051

III. NHÓM LỆNH LOGIC


1. Lệnh ANL: And logic
Cú pháp Ý nghĩa lệnh Ví dụ Kết quả
ANL A,Rn And dữ liệu ở thanh mov A,#0Fh A = #0H
ghi A với dữ liệu ở mov R1,#0F0h
thanh ghi Rn ANL A,R1
ANL A,direct And d.liệu trên t.ghi mov A,#0FFh A = #010h
A với d.liệu của ô mov 10h,#010h
nhớ có đ.chỉ direct
ANL A,10h
ANL A,@Ri And dữ liệu trên mov A,#0Fh A = #01h
t.ghi A với dữ liệu mov 70h,#0E1h
của ô nhớ gián tiếp
mov R1,#070h
ANL A,@R1
ANL A,#data And d.liệu trên t.ghi mov A = #00
A với
Phùng Thịd.liệu xác
Thu Hiền, BMđịnh
Tin họcA,#0Eh ANL
Công nghiệp, Khoa Điện tử 55
01/13/24
Chương III: Hệ vi điều khiển 8051
3.3. Tập lệnh 8051 và lập trình hợp ngữ cho 8051

III. NHÓM LỆNH LOGIC


1. Lệnh ANL: And logic

Cú pháp Ý nghĩa lệnh Ví dụ Kết quả

ANL direct,A And d.liệu của ô nhớ mov A,#08h


có đ.chỉ direct với ANL 0F7h,A
d.liệu trên t.ghi A
ANL direct,#data And dữ liệu trên ô ANL 0F7h,#1Fh
nhớ có địa chỉ direct
với dữ liệu xác định

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 56
Chương III: Hệ vi điều khiển 8051
3.3. Tập lệnh 8051 và lập trình hợp ngữ cho 8051

III. NHÓM LỆNH LOGIC


2. Lệnh ORL: OR logic
Cú pháp Ý nghĩa lệnh Ví dụ Kết quả
ORL A,Rn OR dữ liệu ở thanh mov A,#0Fh A = #0FFh
ghi A với dữ liệu ở mov R1,#0F0h
thanh ghi Rn ORL A,R1
ORL A,direct OR dữ liệu trên thanh Mov A,#0Eh A = #0FEh
ghi A với dữ liệu của mov 50h,#0F0h
ô nhớ có địa chỉ direct
ORL A,50h
ORL A,@Ri OR dữ liệu trên thanh mov A,#18h A = #0F8h
ghi A với dữ liệu của mov 30h,#0F0h
ô nhớ gián tiếp
mov R1,#30h
ORL A,@R1
ORL A,#data OR dữ liệu trên t.ghi mov A = #010h
A với
Phùng Thịdữ
Thuliệu
Hiền,xác định
BM Tin A,#00h
học Công nghiệp,ORL
Khoa Điện tử 57
01/13/24
Chương III: Hệ vi điều khiển 8051
3.3. Tập lệnh 8051 và lập trình hợp ngữ cho 8051

III. NHÓM LỆNH LOGIC


2. Lệnh ORL: OR logic

Cú pháp Ý nghĩa lệnh Ví dụ Kết quả


ORL direct,A OR dữ liệu của ô nhớ mov A,#0Fh 5Fh = #0FFh
có địa chỉ direct với mov 5Fh,#0F0h
dữ liệu trên t.ghi A
ORL 5Fh,A
ORL direct,#dat OR dữ liệu trên ô nhớ Mov 60h,#0F0h 60h = #0FFh
a
có địa chỉ direct với
dữ liệu xác định ORL 60h,#1Fh

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 58
Chương III: Hệ vi điều khiển 8051
3.3. Tập lệnh 8051 và lập trình hợp ngữ cho 8051

III. NHÓM LỆNH LOGIC


3. Lệnh XRL: XOR logic
Cú pháp Ý nghĩa lệnh Ví dụ Kết quả
XRL A,Rn XOR dữ liệu ở thanh Mov A,#0F2h A = #12h
ghi A với dữ liệu ở mov R3,#0E0h
thanh ghi Rn XRL A,R3
XRL A,direct XOR dữ liệu trên t.ghi mov A,#012h A = #0F2h
A với d.liệu của ô nhớ mov 10h,#0E0h
có đ.chỉ direct
XRL A,10h
XRL A,@Ri XOR dữ liệu trên mov A,#08h A = #0E1h
thanh ghi A với dữ liệu mov 10h,#0E9h
của ô nhớ gián tiếp
mov R0,#10h
XRL A,@R0
XRL A,#data XOR dữ liệu trên t.ghi mov A,#12h A = #0
A với
Phùng Thịdữ
Thuliệu
Hiền,xác định
BM Tin XRL
học Công A,#12h
nghiệp, Khoa Điện tử 59
01/13/24
Chương III: Hệ vi điều khiển 8051
3.3. Tập lệnh 8051 và lập trình hợp ngữ cho 8051

III. NHÓM LỆNH LOGIC


3. Lệnh XRL: XOR logic

Cú pháp Ý nghĩa lệnh Ví dụ Kết quả

XRL direct,A XOR dữ liệu của ô mov A,#0F2h 50h = #12h


nhớ có địa chỉ direct mov 50h,#0E0h
với dữ liệu trên
thanh ghi A XRL 50h,A
XRL direct,#data XOR dữ liệu trên ô Mov 50h,#0E0h 50h=#0E1h
nhớ có địa chỉ direct
với dữ liệu xác định XRL 50h,#01h

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 60
Chương III: Hệ vi điều khiển 8051
3.3. Tập lệnh 8051 và lập trình hợp ngữ cho 8051

4. Lệnh xoay dữ liệu trên thanh ghi A:


Cú Ý nghĩa lệnh Ví dụ Kết quả
pháp
RL A Xoay trái dữ liệu trên Mov A,#01001001b 10010010b
thanh ghi A RL A

RLC A Xoay trái dữ liệu trên C= 1 A=10010011b


t.ghi A cùng với cờ C Mov A,#11001001b C=1
RLC A

01/13/24 61
Chương III: Hệ vi điều khiển 8051
3.3. Tập lệnh 8051 và lập trình hợp ngữ cho 8051

4. Lệnh xoay dữ liệu trên thanh ghi A:


Cú Ý nghĩa lệnh Ví dụ Kết quả
pháp
RR A Xoay phải dữ liệu trên Mov A,#01001001b A=10100100b
thanh ghi A
RR A

RRC A Xoay phải dữ liệu trên C=1 A=11100100b


thanh ghi A cùng với Mov A,#11001001b C=1
cờ nhớ C RLC A

01/13/24 62
Chương III: Hệ vi điều khiển 8051
3.3. Tập lệnh 8051 và lập trình hợp ngữ cho 8051

4. Lệnh xoay dữ liệu trên thanh ghi A:


Cú Ý nghĩa lệnh Ví dụ Kết quả
pháp
SWAP A Xoay 4 bit trên mov A,#0E7h A = # 7Eh
thanh ghi A: hoán SWAP A
chuyển 4 bit cao
và 4 bit thấp

CLR A Xóa dữ liệu trên mov A,#01100111b A = #0


thanh ghi A CLR A
CPL A Bù giá trị dữ liệu mov A,#01100111b A=#10011000b
trên thanh ghi A CPL A
(chuyển bit 0  1,
10)
01/13/24 63
Chương III: Hệ vi điều khiển 8051
3.3. Tập lệnh 8051 và lập trình hợp ngữ cho 8051

IV. NHÓM LỆNH RẼ NHÁNH


1. Lệnh xử lý chương trình con
Cú pháp Ý nghĩa lệnh
Acall addr11 Gọi c.trình con, địa chỉ addr11 cách lệnh gọi
không quá 2 KByte
ACall addr16 Gọi c.trình con, địa chỉ addr16 cách lệnh gọi
không quá 64 KByte.
Ret Kết thúc chương trình con
Reti Kết thúc chương trình con phục vụ ngắt

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 64
Chương III: Hệ vi điều khiển 8051
3.3. Tập lệnh 8051 và lập trình hợp ngữ cho 8051

2. Lệnh nhảy
Cú pháp Ý nghĩa lệnh
AJMP addr11 Nhảy đến nhãn, địa chỉ nhãn cách lệnh gọi không
quá 2 KByte
LJMP addr16 Nhảy đến nhãn, địa chỉ nhãn cách lệnh gọi không
quá 64 KByte
SJMP rel Nhảy tương đối đến nhãn, địa chỉ của nhãn cách
lệnh gọi không quá 128 Byte
JMP @A+DPTR Nhảy gián tiếp: nhảy đến địa chỉ A+DPTR
CJNE A,direct,rel Nếu giá trị A ≠ direct  nhảy tới nhãn rel
CJNE A,#data,rel Nếu giá trị A ≠ data nhảy tới nhãn rel
CJNE Rn,#data,rel Nếu giá trị Rn ≠ data nhảy tới nhãn rel
CJNE @Ri,#data,rel Nếu giá trị gián tiếp tại Ri≠data nhảy tới nhãn rel
DJNZ Rn, rel Giảm Rn đi 1, nhảy tới nhãn cho tới khi Rn  0
DJNZ direct, rel Giảm direct đi1, nhảy tới nhãn cho tới khi direct 065
01/13/24
Chương III: Hệ vi điều khiển 8051
3.3. Tập lệnh 8051 và lập trình hợp ngữ cho 8051

2. Lệnh nhảy
Cú pháp Ý nghĩa lệnh

JZ rel Nhảy đến nhãn rel nếu Z=1


JNZ rel Nhảy đến nhãn rel nếu z =0
JC rel Nhảy đến nhãn rel nếu C=1
JNC rel Nhảy đến nhãn rel nếu C = 0

JB rel Nhảy đến nhãn rel nếu bit=1

JNB rel Nhảy đến nhãn rel nếu bit = 0

JBC bit,rel Nhảy đến nhãn rel nếu bit = 1, rồi xóa bit về 0

NOP Delay 1 chu kỳ máy

01/13/24 66
Chương III: Hệ vi điều khiển 8051
3.3. Tập lệnh 8051 và lập trình hợp ngữ cho 8051

V. Nhóm lệnh xử lý bit


Cú pháp Ý nghĩa Cú pháp Ý nghĩa lệnh Cú pháp Ý nghĩa
lệnh lệnh

CLR C C=0 SetB C C=1 CPL C C: 0


1 /
10
CLR bit Bit =0 Set bit Bit = 1 CPL bit Bit:0 1
/ 10
ANL C,bit And cờ nhớ ANL C,/bit And cờ nhớ
C với bit C với bù bit
ORL C,bit OR cờ nhớ ORL C,/bit OR cờ nhớ C
C với bit với bù bit
Mov C,bit C=bit Mov bit,C Bit = C

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 67
Chương III: Hệ vi điều khiển 8051
3.3. Tập lệnh 8051 và lập trình hợp ngữ cho 8051

Chỉ dẫn
- DB: Định nghĩa kiểu dữ liệu 8bit
- ORG: Báo địa chỉ bắt đầu chương trình
- EQU: Định nghĩa một hằng số
- END: Kết thúc chương trình
- CODE: Đánh dấu vùng mã lệnh
- DATA: Đánh dấu vùng dữ liệu
- USING: Chỉ ra bank thanh ghi nào sẽ dùng

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 68
Hướng dẫn sử dụng phần mềm

Phần mềm Keil uVision4: code


Phần mềm Proteus: vẽ mạch

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 69
1. Lập trình với Led đơn và nút bấm

Bài toán 1: Lập trình sử dụng nút


bấm điều khiển 3 đèn led đơn theo
yêu cầu sau
 Nút bấm 1: bật/tắt đèn 1
 Nút bấm 2 bật/tắt đèn 2
 Nút 3 bật cả 3 đèn 1,2,3
 Nút 4 tắt cả 3 đèn 1,2,3
 Nút 5: bật đèn 3, tắt 2 đèn 1,2

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 70
1. Lập trình với Led đơn và nút
bấm
Sơ đồ mạch
- AT89C51
- Button

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 71
1. Lập trình với Led đơn và nút bấm

Code: 4 bước
 Bước 1:
• Định nghĩa chân, port sử dụng trên mạch
• Định nghĩa các hằng, biến sử dụng trong
chương trình
 Bước 2: Viết mẫu chương trình: 4 dòng
code cơ bản
 Bước 3: Khởi tạo các giá trị ban đầu, đặt
trên vòng lặp vô hạn
 Bước 4: Code quá trình điều khiển nằm
trong vòng lặp vô hạn
01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 72
1. Lập trình với Led đơn và nút bấm

 Bài tập: Dựa trên bài tập led đơn


làm trên lớp, tự xây dựng phương án
thiết kế đèn cổng cho hợp lý và lập
trình mô phỏng.

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 73
2. Lập trình với Led 7 đoạn

Bài toán 2: Lập trình điều khiển 1


led 7 đoạn hiển thị các giá trị từ 0-9
Linh kien:
 AT89C51
 7seg-com-cathode

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 74
2. Lập trình với Led 7 đoạn

Bài tập
1.Sửa bài trên cho giá trị hiển thị giảm
dần
2.Sử dụng cách mắc khác (không theo
thứ tự từ P2.0 - > P2.7) để nối với
led. Yêu cầu hiển thị các giá trị giống
bài mẫu.

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 75
2. Lập trình với Led 7 đoạn

Bài toán 3: Viết chương trình điều


khiển 2 led 7 đoạn

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 76
2. Lập trình với Led 7 đoạn

BT:
1.Sửa chương trình cho led chạy giảm
dần
2.Sửa chương trình cho led chạy nhẩy
2 giá trị. VD: 0, 2, 4,… hoặc 1, 3, 5,…

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 77
2. Lập trình với Led 7 đoạn

Bài toán 4: Viết chương trình điều


khiển 2 led 7 đoạn, có sử dụng ic chốt

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 78
2. Lập trình với Led 7 đoạn

Bài toán 4: Viết chương trình điều


khiển 2 led 7 đoạn, có sử dụng ic chốt
Linh kien:
-AT89C51
- 7seg-com-cathode
- 74LS374

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 79
2. Lập trình với Led 7 đoạn

Bài tập: Viết chương trình điều khiển 2 led 7 đoạn hai
loại khác nhau (1 cathode,1 anode), có sd ic chốt.
Gợi ý: Sử dụng lệnh cpl để đảo giá trị thanh ghi A
trước khi đưa vào led mới

mov A,B ; lay so donvi (1 chu so tu 0..9)
movC A,@A+DPTR
CPL A
mov led_chung, A
setb dk_dv
clr dk_dv

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 80
2. Lập trình với Led 7 đoạn

Bài toán 5: Viết chương trình hiển thị


đồng hồ: Giờ - phút - giây

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 81
2. Lập trình với Led 7 đoạn

Bài toán 6: Quét led

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 82
3. Lập trình điều khiển động cơ

Bài toán 7: Viết chương trình điều khiển động cơ,


sử dụng 3 nút bấm điều khiển 3 trạng thái: Dừng,
quay thuận, quay ngược.
Linh kien
-AT89C51
-Motor
-BC557
-BC547
-Button

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 83
3. Lập trình điều khiển động cơ

Bài toán 8: Viết chương trình điều khiển động cơ


sử dụng 3 nút bấm điều khiển 3 trạng thái: Dừng
(0), quay thuận (1), quay ngược (2). Tình trạng nút
bấm 0/1/2 được hiển thị trên led 7 đoạn
Linh kien
-AT89C51
-Motor
-BC557
-BC547
-Button
- Respack-7

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 84
Chương III: Hệ vi điều khiển 8051
Lập trình cho Bộ đếm/định thời

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 85
Chương III: Hệ vi điều khiển 8051
Lập trình cho Bộ đếm/định thời
 Bộ đếm/định thời: Thanh ghi TMOD

M1 M0 Chế độ Chế độ hoạt động


 M0, M1: chế độ định thời
0 0 0 Timer 13 bit
 C/T: 0 1 1 Timer 16 bit
 C/T = 1: counter 1 0 2 Timer 8 bit tự nạp lại
 C/T = 0: Timer 1 1 3 Timer chia tách
 Nguồn đồng hồ: Tần số thạch anh (XTAL = 11,0592MHz)
 Gate: Khởi động hoặc dừng Timer

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 86
Chương III: Hệ vi điều khiển 8051
3.2. Kiến trúc vi điều khiển 8051

 Bộ đếm/định thời: Timer 0

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 87
Chương III: Hệ vi điều khiển 8051
3.2. Kiến trúc vi điều khiển 8051

 Bộ đếm/định thời: Timer 0

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 88
Chương III: Hệ vi điều khiển 8051
3.2. Kiến trúc vi điều khiển 8051

 Bộ đếm/định thời: Timer 0

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 89
Chương III: Hệ vi điều khiển 8051
3.2. Kiến trúc vi điều khiển 8051

 Bộ đếm/định thời và lập trình: Timer 0

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 90
Chương III: Hệ vi điều khiển 8051
 Bộ đếm/định thời

 Gate: Khởi động hoặc dừng


 Gate = 0: Khởi động mềm
 SETB TR0 (Timer 0)/ SETB TR1 (Timer 1): Khởi động
Timer
 CLR TR0/ CLR TR1 (Dừng Timer)
 Gate = 1: Khởi động cứng

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 91
Chương III: Hệ vi điều khiển 8051
 Ví dụ1: Xác định chế độ và bộ định thời
cho lệnh sau: MOV TMOD, #02H

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 92
Chương III: Hệ vi điều khiển 8051
 Ví dụ1: Xác định chế độ và bộ định thời
cho lệnh sau: MOV TMOD, #02H

Giải:
 TMOD = 0000 0010
 Chế độ 2 (8 bit): M1 = 1, M0 = 0
 Bộ định thời: Timer0

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 93
Chương III: Hệ vi điều khiển 8051
 Ví dụ2: Xác định giá trị của TMOD nếu muốn sử
dụng Timer 1 ở chế độ 1, sử dụng thạch anh
XTAL 8051 làm nguồn đồng hồ, khởi động mềm
để xây dựng bộ định thời tạo độ trễ thời gian

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 94
Chương III: Hệ vi điều khiển 8051
 Ví dụ2: Xác định giá trị của TMOD nếu muốn sử
dụng Timer 1 ở chế độ 1, sử dụng thạch anh
XTAL 8051 làm nguồn đồng hồ, khởi động mềm
để xây dựng bộ định thời tạo độ trễ thời gian

Giải:
• T1M1 = 0, T1M0=1
• Gate1 = 0
• C/T1 = 0
• TMOD = 00010000
01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 95
Chương III: Hệ vi điều khiển 8051
3.2. Kiến trúc vi điều khiển 8051

 Bộ đếm/định thời: Thanh ghi TCON

•TF (Timer overflow – cờ tràn) TF =1 khi Timer tràn


•TR (Timer Run): Cho chạy timer
•TR= 1 - Timer chạy
•TR = 0 - Timer dừng
• IE, IT: Dành cho ngắt

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 96
Chương III: Hệ vi điều khiển 8051
3.2. Kiến trúc vi điều khiển 8051

Timer/Counter

01/13/24 97
Chương III: Hệ vi điều khiển 8051
3.2. Kiến trúc vi điều khiển 8051

Lập trình cho Timer


Đặc trưng của chế độ 1 Đặc trưng của chế độ 2
-Bộ định thời 16 bit: 0000 – -Bộ định thời 8 bit: 00 – FFh
FFFFh - Nạp vào thanh ghi TH
- Nạp vào thanh ghi TH, TL - Sao nội dung trong TH vào
- Khởi động: SETB TR0/TR1 TL
- Giá trị tăng tới FFFFh thì - Khởi động: SETB TR0/ TR1
quay về 0, cờ TF = 1 - Giá trị trong TL tăng tời FF,
- Nạp lại TH, TL để lặp lại quá quay về 0, TF =1
trình đếm - TL tự động được nạp lại giá
trị ban đầu được đặt tại TH,
xóa cờ TF

01/13/24 98
Chương III: Hệ vi điều khiển 8051
3.2. Kiến trúc vi điều khiển 8051

Lập trình cho Timer


Lập trình chế độ 1 Lập trình chế độ 2
- B1: Nạp giá trị cho thanh ghi - B1: Nạp giá trị cho thanh ghi
TMOD (Xác định Timer và chế TMOD
độ) -B2: Nạp giá trị đếm ban đầu
-B2: Nạp giá trị đếm ban đầu cho TH
cho TL và TH - B3: Khởi động bộ định thời
- B3: Khởi động bộ định thời - B4: Kiểm tra trạng thái bật
- B4: Kiểm tra trạng thái bật của cờ bộ định thời. Thoát khỏi
của cờ bộ định thời. Thoát khỏi vòng lặp khi TF được bật
vòng lặp khi TF được bật - B5: Xóa cờ TF
- B5: Dừng bộ định thời - B6: Quay trở lại b4 vì chế độ
- B6: Xóa cờ TF cho vòng kế 2 là chế độ tự nạp lại
tiếp
- B7: Quay trở lại b2 để nạp lại
giá trị cho TL và TH
01/13/24 99
Chương III: Hệ vi điều khiển 8051
3.2. Kiến trúc vi điều khiển 8051

LẬP TRÌNH TIMER


 Chu kỳ máy:
 Là đơn vị đo thời gian thực thi các lệnh
 Tần số dao động của thạch anh cho 8051 thường
11.0592 MHz.
 Trong 8051 một chu kỳ máy kéo dài 12 chu kỳ dao động
của thạch anh
 Tần số dao động f: Tần số của VĐK luôn bằng 1/12 tần
số của thạch anh)
 f xtal (T. anh: 11.0592/12= 0,9216 )
f mc 
12
 Chu kỳ máy T: Thời gian làm việc của 1 giao động máy
1
 T (T.anh: 1/0,9216 = 1,085069)
f mc
01/13/24 100
Chương III: Hệ vi điều khiển 8051
3.2. Kiến trúc vi điều khiển 8051

Ví dụ: Viết chương con delay 100  s biết thạch anh


là 12 MHz
B1: Tần số Timer: Fmc = Fxtal/12 = 12/12 = 1 MHz
B2: Số xung cần đếm: t/Fmc = 100/1 = 100 nhịp
B3: Giá trị nạp vào TH là: 65536-100 = 65436 D = FF9C H (TH0 =
FF, TL0=9C)
 Lập trình

01/13/24 101
Chương III: Hệ vi điều khiển 8051
3.2. Kiến trúc vi điều khiển 8051

Delay_100ms:
CLR TF0
mov tmod, #01h
mov TL0, #09Ch
mov TH0, #0FFh
setb TR0
here: jnb TF0,here
clr TR0
clr TF0
ret

01/13/24 102
Chương III: Hệ vi điều khiển 8051
3.2. Kiến trúc vi điều khiển 8051

Ví dụ: viết chương trình delay 1s – MODE 1 (16 bit)

 Tần số thạch anh: f= 12MHz = 12x106 Hz


 Chu kỳ thạch anh: T = 1/f = 1/12 x 10-6 s
 Chu kỳ timer = 12 lần chu kỳ thạch anh
Ttimer = 12xT = 10-6 s
 Timer 0: Thời gian để delay 1 s: 106x10-6=1s
Vậy timer 0 cần thực hiện 106 lần chu kỳ Ttimer
 Giá trị nạp vào TF0 và TL0: (Thực hiện 20 lần x
50000 = 106 )
 -50000: 3CB0 H
 TH0 = #high(-50000) ; hay 3CH
 TL0 = #low(-50000) ; hay B0H
01/13/24 103
2. Lập trình với Led 7 đoạn

Làm lại bài toán 3: Viết chương trình điều


khiển 2 led 7 đoạn (SD timer 0, mode1)

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 104
2. Lập trình với Led 7 đoạn
Làm lại bài toán 3: Hàm delay
delay:
clr TF0
mov Tmod, #01h ; su dung timer 0, mode 1 (16 bit de tao tre)
mov r7, #20 ; lap 20 x 50000 lan tao ra 1 s
lap:
mov TH0, #high(-50000); 3CH
mov TL0, #low(-50000) ; B0H
setb TR0
here: jnb TF0, here ; kiem tra co bat co TF0, co the sd: jnb TF0, $
clr TR0 ; Dừng timer
clr TF0 ; Xoa co tran
djnz r7, lap
ret
01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 105
Chương III: Hệ vi điều khiển 8051
3.2. Kiến trúc vi điều khiển 8051

LẬP TRÌNH TIMER – Bộ định thời – MODE1


 Bài toán 9: Viết chương trình tạo xung vuông có
tần số 2 KHz trên chân P2.7. Biết tần số thạch
anh là 12 MHz
 B1: Tần số Timer: Fmc = Fxtal/12 = 12/12 = 1 MHz
 B2: Chu kỳ Timer: T=1/Fmc = 1/1 = 1 s
 B3: Tính Chu kỳ sóng vuông:
T=1/Fv=1/2KHz=0.5ms=500 s >256  dùng mode 1 (16 bit)
TMOD = 0000 0001 B (timer 0, mode 1, định thời)
 B4: Nửa chu kỳ: 0.5*T = 0.5*500 = 250  s
 B5:Số nhịp cần đếm trong khoảng thời gian đó là:250/1=250 nhịp
 B6: Giá trị nạp vào TH, TL là: 65536-250 = 65286 D = FF06 H
(TH0 = FF, TL0 = 06)
 Lập trình
01/13/24 106
Chương III: Hệ vi điều khiển 8051
3.2. Kiến trúc vi điều khiển 8051

Sơ đồ mạch

01/13/24 107
3. Lập trình điều khiển động cơ

Bài tập: Viết chương trình điều khiển động cơ sử


dụng 1 nút bấm điều khiển 3 trạng thái: nếu giữ
nút bấm <1s thì quay trái, nằm trong khoảng 1 – 2
s thì quay phải, >2s thì dừng
Linh kien
-AT89C51
-Motor
-BC557
-BC547
-Button

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 108
3. Lập trình điều khiển động cơ

Bài tập: Viết chương trình điều khiển động cơ sử


dụng 1 nút bấm điều khiển 3 trạng thái: nếu giữ
nút bấm <1s thì quay trái, nằm trong khoảng 1 – 2
s thì quay phải, >2s thì dừng, kết quả hiển thị led7
Linh kien
-AT89C51
-Motor
-BC557
-BC547
-Button
-Respack-7

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 109
Chương III: Hệ vi điều khiển 8051
3.2. Kiến trúc vi điều khiển 8051

LẬP TRÌNH TIMER – Bộ định thời – MODE2


 Bài toán 10: Viết chương trình tạo xung vuông
có tần số 10 KHz trên chân P1.0. Biết tần số
thạch anh là 12 MHz
 B1: Tần số Timer: Fmc = Fxtal/12 = 12/12 = 1 MHz
 B2: Chu kỳ Timer: T=1/Fmc = 1/1 = 1 s
 B3: Tính Chu kỳ sóng vuông:
T=1/Fv=1/10KHz=0.1ms=100 s <256  dùng mode 2 (8 bit)
TMOD = 0000 0010 B (timer 0, mode 2, định thời)
 B4: Nửa chu kỳ: 0.5*T = 0.5*100 = 50  s
 B5:Số nhịp cần đếm trong khoảng thời gian đó là:50/1=50 nhịp
 B6: Giá trị nạp vào TH là: 256-50 = 206 D =CE H (TH0 = CE)
Mạch: tương tự bài 9

01/13/24 110
Chương III: Hệ vi điều khiển 8051
3.2. Kiến trúc vi điều khiển 8051

org 0 Lập trình chế độ 2


mov tmod, #02H - B1: Nạp giá trị cho thanh ghi TMOD
mov TH0, #0CEH - B2: Nạp giá trị đếm ban đầu cho TH
setb tr0 - B3: Khởi động bộ định thời
- B4: Kiểm tra trạng thái bật của cờ
lap: jnb tf0, lap bộ định thời. Thoát khỏi vòng lặp khi
cpl p1.0 TF được bật
- B5: Xóa cờ TF
clr tf0 - B6: Quay trở lại b4 vì chế độ 2 là
sjmp lap chế độ tự nạp lại
end

01/13/24 111
Chương III: Hệ vi điều khiển 8051
3.2. Kiến trúc vi điều khiển 8051

LẬP TRÌNH BỘ ĐẾM:


COUNTER
 Giống Timer: TMOD, TH,
TL giống như với timer.
 Khác Timer: Thay vì dùng
tần số thạch anh, counter
đếm xung từ bên ngoài
đưa vào 8051 thông qua
P3.4, P3.5
 C/T = 1, counter đếm lên
khi có xung đưa vào các
chân T1 và T0 (ở P3)

01/13/24 112
Chương III: Hệ vi điều khiển 8051
3.2. Kiến trúc vi điều khiển 8051

LẬP TRÌNH COUNTER – chế độ 1

 Bit:
 16 bit counter (TH0, TL0)
 TH0, TL0 tăng lên 1 khi TR0=1 và có 1 xung xuất
hiện trên T0

01/13/24 113
Chương III: Hệ vi điều khiển 8051
3.2. Kiến trúc vi điều khiển 8051

Bài toán 11: COUNTER BARLED


 Một nút nhấn được kết nối vào chân P3.4 (T0). Bỏ qua hiện
tượng rung khi ấn nút nhấn, viết chương trình đếm số lần
nhấn nút nhấn và hiển thị kết quả lên bar led kết nối vào
port 1
 Mạch:
- Led thanh: LED-BARGRAPH-RED
- AT89C51
- Trở: Resistor
- Nút bấm: Button
- Trở thanh: Respack-8

01/13/24 114
Chương III: Hệ vi điều khiển 8051
3.2. Kiến trúc vi điều khiển 8051

Bài toán 11: COUNTER BARLED


 Một nút nhấn được kết nối vào chân P3.4 (T0). Bỏ qua hiện
tượng rung khi ấn nút nhấn, viết chương trình đếm số lần
nhấn nút nhấn và hiển thị kết quả lên barled kết nối vào
port 1
 Phân tích bài toán:
 TMOD: Timer 0, Gate=0, C/T = 1 (counter), Mode 1
 TMOD = 0000 0101B
 Counter, mode1 16bit: Khởi động TH0 = 0, TL0=0
 Khởi động timer: Setb TR0
 Lặp:
• TL0 tăng lên 1 khi TR0=1 và có 1 xung xuất hiện trên
T0 (bấm nút)  chuyển giá trị TL0  thanh ghi A
• Đưa giá trị A ra Port1  gửi tới Barled
01/13/24 115
Chương III: Hệ vi điều khiển 8051
3.2. Kiến trúc vi điều khiển 8051

Bài tập: Chương trình trong bài toán 11 nếu sử dụng


mode 2 có được không? Giải thích

01/13/24 116
Chương III: Hệ vi điều khiển 8051
3.2. Kiến trúc vi điều khiển 8051

Bài toán 12: Counter_7_segled


Một nút bấm được kết nối vào chân P3.4 (T0). Bỏ
qua hiện tượng rung nút bấm, viết chương trình
đếm số lần bấm nút và hiển thị kết quả lên led 7
đoạn anode chung kết nối vào port 1

01/13/24 117
Lập trình cho Led ma trận (Matrix-8x8-red)

01/13/24 118
Lập trình cho Led ma trận

Bài toán 13: Viết chương trình điều khiển led


trái tim (Matrix-8x8-red)

01/13/24 119
Lập trình cho Led ma trận

Bài toán 14: Viết chương trình điều khiển led


ma trận hiển thị dữ liệu trên nhiều cột

01/13/24 120
Lập trình cho Led ma trận

Bài tập: Viết chương trình hiển thị dữ liệu trên


led ma trận. Có sử dụng 1 nút bấm. Mặc định
hiển thị dữ liệu là MSSV, bấm nút bấm 1 lần
sẽ hiển thị ra họ tên sv, bấm lần tiếp theo sẽ
hiển thị lại MSSV

01/13/24 121
Chương III: Hệ vi điều khiển 8051
3.3. Tập lệnh 8051 và lập trình hợp ngữ cho 8051

Lập trình với LCD:


 Nhóm 1: 3 chân: VDD: 5V,
VSS: 0V, VEE: Thay đổi độ
tương phản
 Nhóm 2: 8 chân dữ liệu:
D0 – D7
 Nhóm 3:
• E: Enable: chốt dữ liệu
trên LCD
• RS: RS = 0: chọn thanh
ghi mã lệnh (xóa/ đưa con
trỏ về đầu dòng, …);
RS=1: chọn thanh ghi dữ
liệu, cho phép gửi dl lên
LCD
• R/W: R/W = 1: đọc,
R/W=0: ghi dữ liệu

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 122
Chương III: Hệ vi điều khiển 8051
3.3. Tập lệnh 8051 và lập trình hợp ngữ cho 8051

 Bảng mã lệnh LCD


Mã Lệnh LCD Mã Lệnh LCD
hex hex
1 Xóa màn hình hiển thị E Bật hiển thị, nhấp nháy con trỏ
2 Trở về đầu dòng F Tắt hiển thị, nhấp nháy con trỏ
4 Dịch con trỏ sang trái 10 Dịch vị trí con trỏ sang trái
6 Dịch con trỏ sang phải 14 Dịch vị trí con trỏ sang phải
5 Dịch hiển thị sang phải 18 Dịch toàn bộ hiển thị sang trái
7 Dịch hiển thị sang trái 1C Dịch toàn bộ hiển thị sang phải
8 Tắt con trỏ, tắt hiển thị 80 Đưa con trỏ về đầu dòng thứ 1
A Tắt hiển thị, bật con trỏ C0 Đưa con trỏ về đầu dòng thứ 2
C Bật hiển thị, tắt con trỏ 38 Hai dòng ma trận 5x7

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 123
Chương III: Hệ vi điều khiển 8051
3.3. Tập lệnh 8051 và lập trình hợp ngữ cho 8051

 Bài toán 15: Ghép nối 8051 với LCD như hình
sau. Yêu cầu:
 Ghi lệnh chọn LCD 2 dòng ma trận 5x7
 Hiển thị màn hình và con trỏ
 Xóa LCD
 Dịch con trỏ sang phải
 Hiển thị liên tục dòng chữ : VIET NAM VO DICH

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 124
LẬP TRÌNH TRUYỀN THÔNG NỐI TiẾP 8051

 Mục đích: Truyền thông tin giữa các thiết bị ở xa


 Thực hiện:
 Đầu phát:
 Tín hiệu song song  nối tiếp
 Truyền tín hiệu nối tiếp liên tiếp
 Đầu thu:
 Biến đổi tín hiệu nối tiếp  song song
 Phân loại:
 Truyền đồng bộ:
 Truyền từng mảng với tốc độ xác định
 Gắn thêm ký tự đồng bộ SYNC để tái tạo thông tin chuỗi truyền
 Truyền không đồng bộ
 Truyền từng ký tự, bắt đầu bằng start (0), kết thúc bằng stop (1),
P: bit kiểm tra chẵn lẻ

01/13/24 125
Chương III: Hệ vi điều khiển 8051
3.2. Kiến trúc vi điều khiển 8051

LẬP TRÌNH TRUYỀN THÔNG


NỐI TIẾP 8051
 8051: Bộ UART truyền thông nối
tiếp
 Chân RxD (P3.0)
 Chân TxD (P3.1)

01/13/24 126
Chương III: Hệ vi điều khiển 8051
3.2. Kiến trúc vi điều khiển 8051

Truyền thông không đồng bộ UART


 Thanh ghi SBUF: Serial Data Buffer
– Dữ liệu được lưu tạm vào SBUF

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 127
Chương III: Hệ vi điều khiển 8051
3.2. Kiến trúc vi điều khiển 8051
Thanh ghi SCON - Serial port Control: Điều khiển hoạt động cổng nối tiếp

•SM0 – SM2: Lựa chọn mode làm việc


•REN: 1 – Thu hoặc phát/ 0 – Chỉ phát dữ liệu
•TB8: (1) Bit truyền thông thứ 8 (chế độ 9bit). Ở chế độ 1: TB8 = 0
•RB8: (1) Bit truyền thông thứ 8. Ở chế độ 1: RB8=0
•TI: Cờ ngắt truyền. Khi truyền thành công TI=1. Trước khi truyền byte khác cần xóa bit này
•RI: Cờ ngắt nhận. Khi nhận thành công RI =1. Sau khi đọc SBUF, RI được xóa bằng phần mềm

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 128
Chương III: Hệ vi điều khiển 8051
3.2. Kiến trúc vi điều khiển 8051
Truyền thông không đồng bộ UART

-Mode 1: 10 bit (1 start, 8 dữ liệu, 1 stop)


-SM2: Truyền thông đa xử lý

SM0 SM1 Mode Ý nghĩa Tốc độ Baud

0 0 0 Thanh ghi dịch 8-bit 1/12 Fxtal

0 1 1 8-bit UART Có thể thay đổi (Timer 1)

1 0 2 9-bit UART Fxtal /32 hoặc /64

1 1 3 9-bit UART Có thể thay đổi (Timer 1)

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 129
Chương III: Hệ vi điều khiển 8051
3.2. Kiến trúc vi điều khiển 8051
Truyền thông nối tiếp vạn năng: UART
 Thanh ghi PCON
SMOD - - - GF0 GF0 PD IDL

 SMOD = 0: 8051 chia 1/12 tần số thạch anh cho 32 và


sử dụng nó cho bộ Timer1 để thiết lập tốc độ baud (giá
trị mặc định).
 Khi SMOD = 1 thì 8051 chia 1/12 tần số thạch anh
cho 16 và đây là tần số được Timer1 dùng để thiết lập tốc
độ baud.

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 130
Chương III: Hệ vi điều khiển 8051
3.2. Kiến trúc vi điều khiển 8051
Truyền thông nối tiếp vạn năng: UART
 Đơn vị đo tốc độ truyền:
 Tốc độ bit: số bit/giây
 Tốc độ baud: Số đơn vị tín hiệu/giây
 Cách tính giá trị nạp vào TH1
Fxtal: Tần số thạch anh (MHz)
Tần số máy: F m= Fxtal/12
Tần số cấp tới bộ định thời: F uart = Fm/32 (SMOD0)
hoặc Fuart = Fm/16 (SMOD1)
Giá trị nạp vào TH1: -(F uart/baud)

Ví dụ: với Fxtal = 11059,2KHz; baud = 9600 Hz


Fm = 11059,2/12 = 921,6 KHz
Fuart = Fm/32 = 921,6/32 = 28,8 KHz = 28800 Hz
Giá trị nạp vào TH1 = -(28800/9600) = -3

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 131
Chương III: Hệ vi điều khiển 8051
3.2. Kiến trúc vi điều khiển 8051
Truyền thông nối tiếp vạn năng: UART
 Lập trình truyền dữ liệu nối tiếp:
1. Nạp thanh ghi TMOD: Timer1 mode 2 (TMOD =
20H)
2. Nạp thanh ghi TH1 (dựa vào tần số baud)
3. Nạp thanh ghi SCON: chế độ nối tiếp 1 (8 bit dữ
liệu, 1 bit Start và 1 bit Stop (SCON = 40H)
4. Bật TR1 = 1 (khởi động Timer1)
5. Xoá bít TI bằng lệnh “CLR TI”
6. Ghi byte ký tự cần truyền vào SBUF
7. Kiểm tra cờ TI bằng lệnh “JNB TI, $ ”: báo hoàn
tất truyền ký tự
8. Để truyền ký tự tiếp theo quay trở về bước 5.
01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 132
Chương III: Hệ vi điều khiển 8051
3.2. Kiến trúc vi điều khiển 8051
Truyền thông nối tiếp vạn năng: UART
Bài toán 16: Hãy viết chương trình cho 8051
để truyền nối tiếp một ký tự “A” với tốc độ
4800 baud liên tục, Fxtal=12MHz.

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 133
Chương III: Hệ vi điều khiển 8051
3.2. Kiến trúc vi điều khiển 8051
Truyền thông nối tiếp vạn năng: UART
Bài toán 17: Hãy viết chương trình cho 8051 để
truyền nối tiếp một xâu ký tự “COVID19” tốc độ
4800 baud liên tục, Fxtal=12MHz.

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 134
Chương III: Hệ vi điều khiển 8051
3.3. Tập lệnh 8051 và lập trình hợp ngữ cho 8051

Bài tập: Viết chương trình cho sơ đồ mạch sau. Ấn start


hiển thị s, ấn up hiển thị u, ấn down hiển thị d, stop-p

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 135
Chương III: Hệ vi điều khiển 8051
3.2. Kiến trúc vi điều khiển 8051
Truyền thông nối tiếp vạn năng: UART
 Lập trình nhận dữ liệu nối tiếp
1. Nạp thanh ghi TMOD: Timer1 mode 2 (TMOD = 20H)
2. Nạp thanh ghi TH1 (dựa vào tần số baud)
3. Nạp thanh ghi SCON (50H):Chế độ nối tiếp 1 (8 bit dữ
liệu, 1 bit Start và 1 bit Stop)
4. Bật TR1 = 1 (khởi động Timer1)
5. Xoá cờ ngắt RI (CLR RI)
6. Kiểm tra cờ RI bằng lệnh “JNB RI, xx” để xem toàn bộ
ký tự đã được nhận chưa.
7. Khi RI được thiết lập thì trong SBUF đã có 1 byte. Các
nội dung của nó được cất lưu vào một nơi an toàn.
8. Để nhận một ký tự tiếp theo quay trở về bước 5.

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 136
Chương III: Hệ vi điều khiển 8051
3.2. Kiến trúc vi điều khiển 8051
Truyền thông nối tiếp vạn năng: UART
Bài toán 18: Hãy viết chương trình cho 8051 để truyền xâu
hướng dẫn, nhận ký tự để điều khiền bật tắt đèn: A – bật 2
đèn, Z – tắt 2 đèn, B: bật/tắt đèn bếp, C– bật/tắt đèn
cổng. Biết: tốc độ 4800 baud liên tục, Fxtal =12MHz.

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 137
Chương III: Hệ vi điều khiển 8051
3.2. Kiến trúc vi điều khiển 8051

3. Lập trình ngắt

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 138
Chương III: Hệ vi điều khiển 8051
3.2. Kiến trúc vi điều khiển 8051

 Thanh ghi IE

EA -- -- ES ET1 EX1 ET0 EX0

Nếu lập bít =1 thì cho phép ngắt, đặt bằng 0 thì cấm ngắt
EA: Enable All : cho phép ngắt tất cả, phải đặt bít này bằng
1, thì mọi ngắt khác mới được phép hoạt động. Muốn ngắt
nào hoạt động thì cho phép ngắt đó theo các bit dưới đây:
ES: Enable Serial: Cho phép ngắt truyền thông nối tiếp.
ET1: Enable Timer 1: cho phép Timer 1 hoạt động
EX1: Enable eXternal: cho phép ngắt ngoài 1
ET0: Enable Timer 0: cho phép Timer 0 hoạt động
EX0: Enable eXternal: cho phép ngắt ngoài 0

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 139
Chương III: Hệ vi điều khiển 8051
3.2. Kiến trúc vi điều khiển 8051

 Thanh ghi TCON

 Lập trình ngắt

•PS: UART
•PT1: Timer 1
•PX1: INTR 1
•PT0: Timer 0
•PX0: INTR 0
01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 140
Chương III: Hệ vi điều khiển 8051
3.2. Kiến trúc vi điều khiển 8051

 Bảng vector ngắt


ROM
Interrupt Description
Location
Reset Reset 0000H
INT0 EXTERNAL INT 0 0003h
TF0 TIMER/COUNTER 0 000Bh
INT1 EXTERNAL INT 1 0013h
TF1 TIMER/COUNTER 1 001Bh
S0 SERIAL PORT 0023h

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 141
Chương III: Hệ vi điều khiển 8051
3.2. Kiến trúc vi điều khiển 8051

 Ngắt ngoài: P3.2/P3.3 xảy ra khi chân này


=0
 Ngắt timer: Khi timer tràn mà cấu hình
cho phép ngắt thời gian thì xảy ra ngắt
 Khi 1 ngắt xảy ra:
 PC lập tức trở về địa chỉ trong bảng
vector ngắt
 Lệnh đang thực hiện được lưu vào
stack. Khi ngắt thực hiện xong, gặp
lệnh RETI thì quay về địa chỉ trong
stack
 Không có lời gọi giống lời gọi hàm mà
khi điều kiện ngắt thỏa mãn thì xảy ra
ngắt. Tức là đặt việc X sau ORG ROM
Location tương ứng

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 142
Chương III: Hệ vi điều khiển 8051
3.2. Kiến trúc vi điều khiển 8051

 Khi muốn ngắt xảy ra để thực hiện việc X thì đặt


X sau ORG ROM_LOCATION tương ứng. Dạng:
Org 0h
Ljmp main

Org 0Bh
Ljmp X1

Org 1Bh
Ljmp X2
01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 143
Chương III: Hệ vi điều khiển 8051
3.2. Kiến trúc vi điều khiển 8051

1. Lập trình ngắt cho Timer


Bài toán 19: Viết chương trình nhận liên tục 8 bit
ở cổng P0, gửi đến cổng P1. Trong thời gian này
cần tạo trên chân P2.1 một sóng vuông tần số
50Hz. Sử dụng bộ Timer 0 để tạo sóng vuông,
tần số thạch anh 11.0592MHz
 Phân tích:
 Giả sử sử dụng Timer 0, mode 1
 Chu kỳ sóng vuông: T = 1/f = 1/50 = 0.02s = 20ms
 Thời gian nửa chu kỳ phần cao: 0.5*T = 0.5*20 =
10ms = 10000us
 Số nhịp đồng hồ: n = 10000/1.085 = 9216
 Giá trị nạp: 65536 – 9216 = 56320 = DC00H

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 144
Chương III: Hệ vi điều khiển 8051
3.2. Kiến trúc vi điều khiển 8051

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 145
Chương III: Hệ vi điều khiển 8051
3.2. Kiến trúc vi điều khiển 8051

2. Lập trình ngắt ngoài:


- Chân P3.2 (INT0), P3.3 (INT1)
2.1 Ngắt kích phát mức
Bài toán 20. Giả sử INT1 được nối với một công tắc, bình
thường ở mức cao. Mỗi khi chân này xuống mức thấp thì
bật LED. Đèn LED được nối với chân P1.2, ban đầu ở chế
độ tắt. Nếu LED được bật sáng thì phải sáng trong vài
giây. Sau khi công tắc được chuyển về mức cao, đèn LED
phải sáng liên tục
Phân tích:
- Địa chỉ ISR (Interrupt Service Routinei–trình phục vụ
ngắt):0013H
- Chân nối led: P1.2
- IE: 1000 0100 B: cho phép ngắt ngoài INT1

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 146
Chương III: Hệ vi điều khiển 8051
3.2. Kiến trúc vi điều khiển 8051

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 147
Chương III: Hệ vi điều khiển 8051
3.2. Kiến trúc vi điều khiển 8051

org 0 ; Dia chi bat dau khi khoi dong


ljmp main; bo qua bang vector ngat
org 0013h ; dia chi ISR cho ngat INT1
ljmp ngat

org 30h ; dia chi main


main: mov IE, #84h ; ngat ngoai INT1
here: sjmp here ; doi cho den khi duoc ngat
ngat:
setb p1.2 ; bat led
mov R3, #0FFh ; thoi gian den sang
back: DJNZ R3, back; giu den sang 1 luc
clr p1.2 ; tat led
reti ; ve main
end

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 148
Chương III: Hệ vi điều khiển 8051
3.2. Kiến trúc vi điều khiển 8051
2.2 Kích phát sườn
Bài toán 21: Giả sử chân P3.3 (INT1) được nối với một máy tạo xung.
Hãy viết chương trình trong đó sườn xuống của xung sẽ chuyển
chân P1.3 lên cao, chân này được nối tới Led báo
org 0h
ljmp main
org 0013h ; INT1
setb p1.3
mov R3, #0FFh
back: djnz r3, back; giu den sang 1 luc
clr p1.3
reti

org 30h
main: setb tcon.2 ; ngat kich phat suon; IT1=1
mov IE, #84h
here: sjmp here
end
01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 149
Chương III: Hệ vi điều khiển 8051
3.2. Kiến trúc vi điều khiển 8051
2.3. Ngắt cho truyền thông nối tiếp
Bài toán 22. Hãy viết chương trình sử dụng các ngắt thực hiện các
công việc sau:
- Đọc dữ liệu từ cổng P1, truyền nối tiếp với tốc độ baud 4800 và
sao dữ liệu cổng P1 vào cổng P2
- Thu dữ liệu nối tiếp và gửi đến cổng P0
- Sử dụng Timer 0 tạo sóng vuông tần số 50KHz trên P3.1
Cách làm: Xem code đã lưu (ngat_truyenthongnoitiep)

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 150
Chương III: Hệ vi điều khiển 8051
3.3. Tập lệnh 8051 và lập trình hợp ngữ cho 8051

Một số ví dụ tham khảo


Thực hành với LED đơn
Bài 1: Viết chương trình xuất tín hiệu ở Port 0 và
Port 2 để 8 đèn led sáng với các led được kết nối với
Port 0 và Port 2 như sơ đồ dưới

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 151
Chương III: Hệ vi điều khiển 8051
3.3. Tập lệnh 8051 và lập trình hợp ngữ cho 8051

 Phân tích:
 Đèn led sáng khi tín hiệu xuất ra ở mức
1(+5V).
 Xuất mức logic 1 ra Port 0 và Port 2.

ORG 000H; khai bao dia chi de bat dau


chuong trinh tren Rom
Mov P0,#0FFH ; cac chan Port 0 xuat ra
muc 1
Mov P2,#11111111B; cac chan Port 2 xuat
ra muc 1
End

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 152
Chương III: Hệ vi điều khiển 8051
3.3. Tập lệnh 8051 và lập trình hợp ngữ cho 8051

Bài 2: Cho các dãy đèn led có kết nối như hình
sau, các dãy led này được kết nối với Port 1 và
Port 2. Viết chương trình để các led nối mỗi Port
sáng xen kẽ: led 1,3,5,7 sáng; led 2,4,6,8 tắt,
các led được đánh số như sau led 1 nối với Px.0,
led 2 nối với Px.1, lần lượt với các led khác.

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 153
Chương III: Hệ vi điều khiển 8051
3.3. Tập lệnh 8051 và lập trình hợp ngữ cho 8051

 Phân tích:
 Đèn led sáng khi tín hiệu ở ngõ ra ở mức
0(+0V).
 Các bit P1.0, P1.2, P1.4, P1.6 và P2.0, P2.2,
P2.4, P2.6 xuất tín hiệu ở mức 0
 Các bit còn lại xuất ra mức 1.

ORG 000H ; khai bao dia chi de bat dau chuong


trinh tren Rom
Mov P1,#55H; tin hieu xuat xen ke tren P1
Mov P2,#01010101B; tin hieu xuat xen ke tren
P2
End
01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 154
Chương III: Hệ vi điều khiển 8051
3.3. Tập lệnh 8051 và lập trình hợp ngữ cho 8051

Bài 3: Viết chương trình để các led nối


với Port 1 sáng rồi tắt led. Biết led
sáng khi tín hiệu xuất ra ở mức 1.

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 155
Chương III: Hệ vi điều khiển 8051
3.3. Tập lệnh 8051 và lập trình hợp ngữ cho 8051

Phân tích:
 Tín hiệu xuất ra mức 1 một khoảng
thời gian để mắt có thể nhận biết
được
 Sau đó làm tín hiệu xuất ra ở mức 0
một khoảng thời gian như trên.
 Lặp đi lặp lại đoạn trên sẽ thấy dãy
đèn sáng rồi tắt.

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 156
Chương III: Hệ vi điều khiển 8051
3.3. Tập lệnh 8051 và lập trình hợp ngữ cho 8051

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 157
Chương III: Hệ vi điều khiển 8051
3.3. Tập lệnh 8051 và lập trình hợp ngữ cho 8051

ORG 000H ;khai bao dia chi de bat dau c.trinh tren Rom
Tudau:
Mov P1,#11111111B ; lam 8 led noi P1 sang
LCall Delay ; goi chuong trinh con Delay
Mov P1,#00 ; lam 8 led noi P1 tat
LCall Delay
Sjmp Tudau ; nhay ve thuc hien tu dau
Delay:
Mov R7,#0FFH ; gan R7=#0FFH, 1 chu ki may
Kt2: Mov R6,#0FFH ; gan R6=#0FFH, 1 chu ki may
Kt1: Djnz R6,Kt1;giam R6 xuong 1, R6 khac 0->giam
tiep,2 chu kỳ máy
Djnz R7,Kt2 ; giam R7 xuong 1, R6 khac 0-> ve
Kt2,2chu kỳ máy
Ret ; ket thuc chuong trinh con Delay
End ; ket thuc chuong trinh

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 158
Chương III: Hệ vi điều khiển 8051
3.3. Tập lệnh 8051 và lập trình hợp ngữ cho 8051

Bài 4: "sáng lần lượt"


 Phần cứng: 8 led nối với Port 1, được định vị
trí như sau: led 1 nối với P1.0, lần lượt cho
đến led 8 (nối với P1.7). Biết led sáng khi tín
hiệu xuất ở các chân Port 1 ở giá trị 1.
 Viết chương trình để các led nối với Port 1
sáng lần lượt từng led từ led 1 đến led 8. Các
quá trình trên được lặp lại không ngừng.

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 159
Chương III: Hệ vi điều khiển 8051
3.3. Tập lệnh 8051 và lập trình hợp ngữ cho 8051

Cách 1:
 Làm cho các led sáng bằng cách
thiết đặt các giá trị thích hợp cho
các bit của Port để làm led sáng
theo từng trạng thái
 Ưu điểm: Đơn giản
 Nhược điểm:
 Dài
 Tốn dung lượng bộ nhớ Rom.
01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 160
Chương III: Hệ vi điều khiển 8051
3.3. Tập lệnh 8051 và lập trình hợp ngữ cho 8051

ORG 000H ; khai bao dia chi de bat dau chuong trinh tren Rom
Mov P1,#00000000B ; lam 8 led noi P1 tat
LCall Delay ; goi chuong trinh con Delay
Xuat: Mov P1,#00000001B ; lam led 1 sang
LCall Delay
Mov P1,#00000010B ; lam led 2 sang
LCall Delay
Mov P1,#00000100B ; lam led 3 sang
LCall Delay
Mov P1,#00001000B ; lam led 4 sang
LCall Delay
Mov P1,#00010000B ; lam led 5 sang
LCall Delay
Mov P1,#00100000B ; lam led 6 sang
LCall Delay
Mov P1,#01000000B ; lam led 7 sang
LCall Delay
Mov P1,#10000000B ; lam led 8 sang
LCall Delay
Sjmp Xuat ; nhay ve thuc hien tu dau
Delay:
Mov R7,#0FFH ; gan R7=#0FFH, 1 chu ki may
Kt2: Mov R6,#0FFH ; gan R6=#0FFH, 1 chu ki may
Kt1: Djnz R6,Kt1 ; giam R6 xuong 1, R6 khac 0-> giam
tiep
Djnz R7,Kt2 ; giam R7 xuong 1, R6 khac 0-> ve Kt2
Ret ; ket thuc chuong trinh con
End ; ket thuc chuong trinh
01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 161
Chương III: Hệ vi điều khiển 8051
3.3. Tập lệnh 8051 và lập trình hợp ngữ cho 8051

Cách2:
 Để led sáng lần lượt, cần làm cho tín hiệu
xuất ra giá trị 1 một khoảng thời gian để
có thể nhận biết được.
 Đầu tiên cho P1 tắt, sau đó làm cho bit
A.0 lên 1, sử dụng lệnh xoay trái dữ liệu
trên thanh Ram A, mỗi lần xoay giá trị 1
sẽ chuyển lần lượt qua A.1 - A.2 - A.3 -
A.4 - A.5 -A.6 - A.7 - A.0, mỗi lần xoay
xuất tín hiệu ra P1 sẽ thấy led sáng lần
lượt từ led 1 đến led 8.
01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 162
Chương III: Hệ vi điều khiển 8051
3.3. Tập lệnh 8051 và lập trình hợp ngữ cho 8051

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 163
Chương III: Hệ vi điều khiển 8051
3.3. Tập lệnh 8051 và lập trình hợp ngữ cho 8051

ORG 000H ; khai bao dia chi de bat dau chuong trinh tren Rom
Mov P1,#0 ;===>>>> lam 8 led noi P1 tat
LCall Delay ;===>>>>goi chuong trinh con Delay
Mov A,#00000001B ;===>>>> A co gia tri 00000001B
Xuat:
Mov P1,A ; xuat du lieu A ra P1 dieu khien led
LCall Delay ;===>>>>goi chuong trinh con Delay
RL A
Sjmp Xuat ;===>>>> nhay ve thuc hien tu dau

Delay:
Mov R7,#0FFH
Kt2: Mov R6,#0FFH
Kt1: Djnz R6,Kt1
Djnz R7,Kt2
Ret
End

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 164
Chương III: Hệ vi điều khiển 8051
3.3. Tập lệnh 8051 và lập trình hợp ngữ cho 8051

Bài 5: " Sáng dần 8 led"


 Phần cứng: 8 led nối với Port 0 được định vị
trí như sau: led 1 nối với P0.0, lần lượt cho
đến led 8 (nối với P0.7).
 Biết led sáng khi tín hiệu xuất ở mức 1.
 Viết chương trình để các led nối với Port 0
sáng dần từ led 1 đến led 8 sau đó tắt hết led
và lặp lại.
 Các quá trình được lặp lại không giới hạn.

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 165
Chương III: Hệ vi điều khiển 8051
3.3. Tập lệnh 8051 và lập trình hợp ngữ cho 8051

Cách 1:
 Làm cho các led sáng bằng cách
thiết đặt các giá trị thích hợp cho
các Port để làm led sáng theo từng
trạng thái
 Ưu điểm: đơn giản
 Nhược điểm: viết dài và tốn dung
lượng bộ nhớ Rom.
 Giải: giống cách 1 bài 4
01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 166
Chương III: Hệ vi điều khiển 8051
3.3. Tập lệnh 8051 và lập trình hợp ngữ cho 8051

Cách 2:
 Dùng lệnh xoay A với cờ C
 Mỗi lần xoay đều SetB C (C=1)
 Sau mỗi lần xoay xuất kết quả ra P0 .
 Đặt giá trị ban đầu cho A là #00000000B, vì C luôn
được set lên 1 nên sau lần xoay đầu tiên thanh ghi A
có giá trị là: #00000001B, lần 2: #00000011B, lần3:
#00000111B ....
 Khi thanh ghi A đầy: #11111111B chương trình
phải được khởi động lại với giá trị ban đầu của A
là #00000000B.
 Để nhận biết được khi nào thanh ghi A đầy để
khởi động lại các thông số, sau mỗi lần xoay
kiểm tra cờ nhớ C. Vì sau mỗi lần xoay giá trị
của cờ nhớ C do bit A.7 chuyển sang.

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 167
Chương III: Hệ vi điều khiển 8051
3.3. Tập lệnh 8051 và lập trình hợp ngữ cho 8051

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 168
Chương III: Hệ vi điều khiển 8051
3.3. Tập lệnh 8051 và lập trình hợp ngữ cho 8051

ORG 000H ;khai bao dia chi de bat dau chuong trinh tren Rom
Tudau:
Mov P0,#0 ;lam 8 led noi P0 tat
X1: LCall Delay ; goi chuong trinh con Delay
SetB C ;lam cờ C len 1
Mov A,P0
RLC A ; xoay thanh ghi A
Mov P0,A ; xuat ra led
JNC X1 ; nhay ve nhan "X1" neu C=0
Sjmp Tudau ; nhay ve thuc hien tu dau

Delay:
Mov R7,#0FFH
Kt2: Mov R6,#0FFH
Kt1: Djnz R6,Kt1
Djnz R7,Kt2
Ret
End ; ket thuc chuong trinh

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 169
Chương III: Hệ vi điều khiển 8051
3.3. Tập lệnh 8051 và lập trình hợp ngữ cho 8051
Ví dụ
Chương trình đọc vào 1 giá trị x từ P1 và đưa ra x2 ở P2
ORG 0 ; assembler directive
MOV DPTR, #LUT ; 300H is the LUT address
MOV A, #0FFH
MOV P1, A ; program the port P1 to input data
Again:
MOV A, P1 ; read x
CPL A
MOVC A, @A+DPTR ; get x^2 from LUT
MOV P2, A ; output x^2 to P2
SJMP again ; for (1) loop
ORG 300H ;Look-up Table starts at 0x0300
LUT: DB 0, 1, 4, 9, 16, 25, 36, 49, 64, 81
01/13/24 END Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 170
Chương III: Hệ vi điều khiển 8051
3.2. Kiến trúc vi điều khiển 8051

Dùng ngắt ngoài Gate = 1 (chế độ 1)


- Gate = 1: điều khiển timer bằng /INTx
- Hữu ích để đo độ rộng xung

01/13/24 171
Chương III: Hệ vi điều khiển 8051
3.2. Kiến trúc vi điều khiển 8051

Dùng ngắt ngoài Gate = 1 (chế độ 1)


- Gate = 0:
- Internal control
- Khởi động và dừng timer bằng phần mềm
- Gate =1:
- External control
- Gate=1, TRx=1 timer hoạt động khi /INTx = 1

01/13/24 172
Chương III: Hệ vi điều khiển 8051
3.2. Kiến trúc vi điều khiển 8051

Ví dụ 3: Một nguồn xung được kết nối vào chân


P3.2 (/INT0). Viết chương trình hiển thị độ
rộng xung theo đơn vị us trên led 7 đoạn anote
chung được kết nối vào port 1

01/13/24 173
Chương III: Hệ vi điều khiển 8051
3.2. Kiến trúc vi điều khiển 8051

org 0
mov tmod, #00001001B
mov TH0,#0
mov TL0,#0
SetB TR0
lap:
mov A, TH0
CJNE A, TH0, lap
mov B,#4
div AB; A = do rong xung us: 256/4
Acall hienthi
sjmp lap

01/13/24 174
Chương III: Hệ vi điều khiển 8051
3.2. Kiến trúc vi điều khiển 8051

hienthi:
acall bcdto7seg
mov p1,a
ret
bcdto7seg:
mov dptr, #dulieu
movc A, @A+dptr
ret
dulieu: DB 40h, 79h, 24h, 30h, 19h
DB 12h, 02h, 78h, 00h, 10h
Done: nop
end
01/13/24 175
Chương III: Hệ vi điều khiển 8051
3.2. Kiến trúc vi điều khiển 8051
Truyền thông nối tiếp vạn năng: UART
Truyền thông nối tiếp
Ví dụ:
Giả sử cổng nối tiếp của 8051 được nối vào cổng COM của máy
tính IBM PC và mà đang sử chương trình Terminer.exe để gửi và
nhận dữ liệu nối tiếp. Cổng P1 và P2 của 8051 được nối tới LED
và các công tắc chuyển mạch tương ứng. Hãy viết một chương
trình cho 8051.
a) Gửi thông báo “We Are Ready” tới máy tính PC.
b) Nhận dữ liệu từ PC gửi đến và chuyển đến các đèn
LED đang nối đến các chân của cổng P1.
c) Nhận dữ liệu trên các nút bấm được nối tới P2 và gửi
nó tới máy tính.

Chương trình phải thực hiện một lần a), nhưng b) và c) chạy
liên tục với tốc độ 4800 baud.

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 176
Chương III: Hệ vi điều khiển 8051
3.2. Kiến trúc vi điều khiển 8051
Truyền thông nối tiếp vạn năng: UART
Xác định giá trị nạp cho các thanh ghi
 TMOD: Chọn Timer1, chế độ 2 (tự động nạp lại)TMOD = 20H
 TH1: Với Fxtal = 12MHz, Baud = 4800, giá trị nạp cho TH1= -6
 SCON: SCON = 50H

 Truyền dữ liệu từ 8051PC:truyền thông báo“We are ready”


- Nạp từng ký tự trong thông báo vào thanh ghi A
- Chuyển dữ liệu từ A vào SBUF

Nhận: Dữ liệu từ P2  SBUF


 Truyền: Dữ liệu từ SBUF  A

 Nhận dữ liệu trên các nút bấm nối tới P2 rồi truyền tới máy
tính
Nhận dữ liệu từ PC; truyền tới LED đang nối vào P1

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 177
Chương III: Hệ vi điều khiển 8051
3.2. Kiến trúc vi điều khiển 8051
Truyền thông nối tiếp vạn năng: UART
Giải:
ORG 0
MOV P2, #0FFH ; Lấy cổng P2 làm cổng vào
MOV TMOD, #20H ; Chọn bộ Timer1, chế độ 2 (tự động nạp lại)
MOV TH1, # 0FAH ; Chọn tốc độ 4800 baud (-6)
MOV SCON, #50H ; Tạo khung dữ liệu 8 bít, 1bít Stop cho phép REN.
SETB TR1 ; Khởi động bộ Timer1
MOV DPTR, #MYDATA ; Nạp con trỏ đến thông báo

TBao: CLR A
MOVC A, @A + DPTR ; Lấy ký tự
JZ lientuc ; Nếu ký tự cuối cùng muốn gửi ra
ACALL SEND ; Nếu chưa thì gọi chương trình con SEND
INC DPTR ; Chạy tiếp
SJMP TBao ; Quay lại vòng lặp

Lientuc: MOV A, P2 ; Đọc dữ liệu trên cổng P2,


ACALL SEND ; Truyền nó nối tiếp
ACALL RECV ; Nhận dữ liệu nối tiếp,
MOV P1, A ; Hiển thị nó ra các đền LED
SJMP Lientuc ; Nhay toi nhan Lientuc
01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 178
Chương III: Hệ vi điều khiển 8051
3.2. Kiến trúc vi điều khiển 8051
Truyền thông nối tiếp vạn năng: UART
Giải: (tiếp)
;Truyền dữ liệu nối tiếp ACC có dữ liệu
SEND: MOV SBUF, A ; Nạp dữ liệu vào bộ đệm truyền
H_2: JNB TI, H_2 ; Chờ đến khi dữ liệu được truyền xong
CLR TI ; Xóa cờ truyền
RET
; Nhận dữ liệu vào thanh ghi A
RECV: JNB RI, RECV ; Chờ nhận dữ liệu
MOV A, SBUF ; ở lại đây cho đến khi gửi bít cuối cùng
CLR RI ; Sẵn sàng cho ký tự mới
RET ; Kết thúc chương trình con
; Ngăn xếp chứa thông báo
MYDATA: DB “We are ready”, 0
END

01/13/24 Phùng Thị Thu Hiền, BM Tin học Công nghiệp, Khoa Điện tử 179

You might also like