You are on page 1of 28

Chương 3

KỸ THUẬT LẬP TRÌNH CÓ CẤU TRÚC

MỤC TIÊU:
- Giảm độ phức tạp và cải thiện tính rõ ràng của
chương trình.
- Dễ dàng gỡ rối, sửa chữa cũng như thay đổi.
- Thể hiện các cấu trúc tương tự như các phát biểu của
ngôn ngữ cấp cao trong lập trình hợp ngữ qua các
lưu đồ.

Bài giảng môn Vi xử lý


GV: Lê Thị Kim Anh
Chương 3
CÁC KÝ HIỆU THƯỜNG DÙNG LẬP LƯU ĐỒ

Khối quyết định (Decision block)

Mũi tên chỉ đường đi của chương trình (Program flow arrow)

Hộp xử lý (Process box)

Khối xuất nhập (Input/Output block)

Kết thúc chương trình (Program terminator)

Kết nối qua trang (Page off connector)

Chương trình con (Subroutine)

Bài giảng môn Vi xử lý


GV: Lê Thị Kim Anh
Chương 3
KỸ THUẬT LẬP TRÌNH THEO CẤU TRÚC
CẤU TRÚC CHƯƠNG TRÌNH
CÁC PHÁT BIỂU CÁC VÒNG LẶP SỰ LỰA CHỌN
(statement) (loop) (choice)

Gán trị cho 1 biến.


Gọi một chương trình con.
Một nhóm các phát biểu.

Bài giảng môn Vi xử lý


GV: Lê Thị Kim Anh
Chương 3
KỸ THUẬT LẬP TRÌNH CÓ CẤU TRÚC
CẤU TRÚC CHƯƠNG TRÌNH
CÁC PHÁT BIỂU CÁC VÒNG LẶP SỰ LỰA CHỌN
(statement) (loop) (choice)

WHILE…DO REPEAT…UNTIL / FOR

ENTER
ENTER

Statement
Condition N
true?
Condition N
Y
true?
Statement EXIT
Y
EXIT
Bài giảng môn Vi xử lý
GV: Lê Thị Kim Anh
Chương 3
KỸ THUẬT LẬP TRÌNH THEO CẤU TRÚC
CẤU TRÚC CHƯƠNG TRÌNH
CÁC PHÁT BIỂU CÁC VÒNG LẶP SỰ LỰA CHỌN
(statement) (loop) (choice)

IF... THEN…ELSE CASE

ENTER
ENTER

Y N N N
Condition Expression Expression
true? 1 2

Y Y
Statement1 Statement2 Statement1
Statement1

EXIT EXIT

Bài giảng môn Vi xử lý


GV: Lê Thị Kim Anh
Chương 3
Phát biểu IF … THEN …(data=bit)
Kiểm tra điều kiện bằng/ không bằng
SBRC/S, SBIC/S

SBRC Rr,b
N RJMP Continue
BIT(b) = 0?
Statement
Continue: ….
Y

Statement
SBIC P,b
RJMP Continue
Statement
Continue
Continue: ….

Bài giảng môn Vi xử lý


GV: Lê Thị Kim Anh
Chương 3
Phát biểu IF … THEN …(data=bit)
Kiểm tra điều kiện bằng/ không bằng
SBRC/S, SBIC/S

SBRS Rr,b
N RJMP Continue
BIT(b) = 1?
(Statement)
Continue: ….
Y

Statement
SBIS P,b
RJMP Continue
(Statement)
Continue Continue: ….

Bài giảng môn Vi xử lý


GV: Lê Thị Kim Anh
Chương 3
Phát biểu IF … THEN …(data=bit)
VD1: Đọc data từ PORTA. Kiểm tra dữ liệu nhận được nếu PA0=0 thì xuất dữ
liệu $55 ra PORTB. Giả sử chức năng của các port đã được thiết lập.

IN R1,PINA
N
PA0 = 0? SBRC R1,0
RJMP Continue
Y

55H  PORTB LDI R16,$55


OUT PORTB,R16
Continue: …..

Bài giảng môn Vi xử lý


GV: Lê Thị Kim Anh
Chương 3
Phát biểu IF … THEN …(data=bit)
VD2: Kiểm tra khi mức logic nhận được tại chân PA0=1 thì xuất dữ liệu $55 ra
PORTB. Giả sử chức năng của các port đã được thiết lập.

N
PA0 = 1? SBIS PINA,0
RJMP Continue
Y LDI R16,$55
55H  PORTB OUT PORTB,R16
Continue: …..

Bài giảng môn Vi xử lý


GV: Lê Thị Kim Anh
Chương 3
Phát biểu IF … THEN …(data=bit)
Kiểm tra điều kiện bằng/ không bằng
BRB_flag_C, BRB_flag_S

BRBC flag,Label
RJMP Continue
N
flag = 0? Label: (Statement)
Continue: ….
Y Ví dụ flag=Zero có thể sử dụng các lệnh
tương đương sau:
Label: Statement
BRBC 0,Label {BRNE Label}
RJMP Continue
Label: (Statement)
Continue: ….
Continue

Bài giảng môn Vi xử lý


GV: Lê Thị Kim Anh
Chương 3
Phát biểu IF … THEN …(data=byte)
Kiểm tra điều kiện bằng/ không bằng – CPSE

N
Rd=Rr? CPSE Rd,Rr

Y
RJMP Continue

Statement (Statement)
Continue: ….

Continue

Bài giảng môn Vi xử lý


GV: Lê Thị Kim Anh
Chương 3
Phát biểu IF … THEN …(data=byte)
Kiểm tra điều kiện bằng/ không bằng – CPSE
VD3: Kiểm tra nội dung của thanh ghi R16 với thanh ghi R18. Nếu bằng thì xuất
mã ASCII của chữ Y($59) ra PortB. Giả sử chức năng của các port đã được
thiết lập.

N
R16=R18? CPSE R16, R18
RJMP Continue

Y
LDI R20,’Y’
‘Y’= $59 PORTB
OUT PORTB, R20
Continue:
Continue
Bài giảng môn Vi xử lý
GV: Lê Thị Kim Anh
Chương 3
Phát biểu IF … THEN …ELSE
Kiểm tra điều kiện bằng/ không bằng
SBRC/S, SBIC/S
BRB_flag_C, BRB_flag_S

SBIC P, b
N
BIT = 0? RJMP FALSE(N)
TRUE(Y):
(Statement1)
Y
RJMP Continue
Statement2 Statement1 FALSE(N):
(Statement2)
Continue: …..

Bài giảng môn Vi xử lý


GV: Lê Thị Kim Anh
Chương 3
Phát biểu IF … THEN …ELSE
VD4: Kiểm tra mức logic trên chân PA0. Nếu là mức 1 thì xuất giá trị CCH ra
PORTB, ngược lại xuất 33H ra PORTC. Giả sử chức năng của các port đã được
thiết lập.

SBIS PINA, 0
RJMP FALSE(N)
N
PA0 = 1? TRUE(Y):
LDI R16,$CC
OUT PORTB,R16
Y
RJMP Continue
33H PORTC CCH PORTB FALSE(N):
LDI R16,$33
OUT PORTC,R16
Continue: …..

Bài giảng môn Vi xử lý


GV: Lê Thị Kim Anh
Chương 3
Phát biểu IF … THEN … ELSE
Kiểm tra điều kiện  – BRSH(unsigned)/BRGE(signed)

BRSH/BRGE TRUE(Y)
N Flag
C=0{S=0}? FALSE(N):
(Statement 2)
Y RJMP Continue
TRUE(Y):
Statement2 Statement1
(Statement 1)

Continue: ……..

Bài giảng môn Vi xử lý


GV: Lê Thị Kim Anh
Chương 3
Phát biểu IF … THEN … ELSE
Kiểm tra điều kiện < – BRLO(unsigned)/BRLT(signed)

BRLO/BRLT TRUE(Y)
N Flag
C=1{S=1}? FALSE(N):
(Statement 2)
Y RJMP Continue
TRUE(Y):
Statement2 Statement1
(Statement 1)

Continue: ……..

Bài giảng môn Vi xử lý


GV: Lê Thị Kim Anh
Chương 3
Phát biểu IF … THEN …ELSE
VD5:: Viết chương trình kiểm tra nội dung của ô nhớ trong SRAM tại địa chỉ
$100. Nếu ($100) 10 thì xuất giá trị này ra PortB; ngược lại xuất ra PortC. Giả
sử chức năng của các port đã được thiết lập.

START: LDS R20,$100


N CPI R20,10
($100) 10?
BRSH GT_EQ
LT: OUT PORTC,R20
Y
RJMP START
PORTC($100) PORTB($100) GT_EQ: OUT PORTB,R20
RJMP START

Bài giảng môn Vi xử lý


GV: Lê Thị Kim Anh
Chương 3
Phát biểu IF … THEN …ELSE
VD6:: Viết chương trình kiểm tra nội dung của ô nhớ trong SRAM tại địa chỉ
$100. Nếu 5 ≤ ($100) ≤ 10 thì xuất giá trị này ra PortB; ngược lại xuất ra PortC.
Giả sử chức năng của các port đã được thiết lập.

Y START: LDS R20,$100


($100)< 5? CPI R20,5
BRLO ACT
N
CPI R20,11
Y
PORTC($100) ($100)  11? BRSH ACT
OUT PORTB,R20
N
RJMP START
PORTB($100) ACT: OUT PORTC,R20
RJMP START

Bài giảng môn Vi xử lý


GV: Lê Thị Kim Anh
Chương 3
Phát biểu REPEAT … UNTIL
VD7: Giả sử có một chuỗi mã ASCII được chứa ở RAM nội bắt đầu từ địa chỉ
$100. Chuỗi này sẽ kết thúc bởi mã $0D. Viết đoạn chương trình thực hiện gửi
chuỗi này ra Port B (kể cả mã $0D).

START: LDI ZL,$00


Z = $100
LDI ZH,$01
LOOP: LD R20,Z+
PORTB(Z)
OUT PORTB,R20
CPI R20,$0D
Y
Z = $0D? BRNE LOOP
RJMP START
N
Z = Z+1 Câu hỏi: Nếu không xuất mã kết
thúc chuỗi, sử dụng phát biểu gì?

Bài giảng môn Vi xử lý


GV: Lê Thị Kim Anh
Chương 3
Phát biểu WHILE … DO
VD8: Làm lại VD7 nhưng không xuất mã $0D.

Z = $100 START: LDI ZL,$00


LDI ZH,$01
Y LOOP: LD R20,Z+
(Z) = $0D?
CPI R20,$0D
N BREQ START
PORTB(Z) OUT PORTB,R20
RJMP LOOP
Z = Z+1

Bài giảng môn Vi xử lý


GV: Lê Thị Kim Anh
Chương 3
Phát biểu FOR – Áp dụng trong tính Delay

DELAY:
LDI R16, 0xFF ;1MC (m)
AGAIN:
NOP ;1MC Điều kiện đúng:
NOP ;1MC (1+1+1+2)*254 {MC}
DEC R16 ;1MC Điều kiện không thỏa:
(1+1+1+1) {MC}
BRNE AGAIN ;(2/1)MC
RET ;4MC

DELAY= 1 + (1+1+1+2)*254 + (1+1+1+1) +4 = 1279 MC

Bài giảng môn Vi xử lý


GV: Lê Thị Kim Anh
Chương 3
Phát biểu CASE

Ri=A

CASE0 CASE1 CASE2 …

….
CASE0: CPI Ri,0
BRNE CASE1
(Statement 0)
CASE1: CPI Ri,1
BRNE CASE2
(Statement 1)
CASE2: CPI Ri,2
BRNE CASE3
(Statement 2)
….
Bài giảng môn
môn Vi
Vi xử lý

Thị Kim Anh
GV: Lê Thị
Chương 3
Phát biểu CASE

VD9: Viết chương trình đọc trạng thái mức logic tín hiệu trên 2 chân PA0 và PA1
và thực hiện các tác vụ theo bảng bên dưới. Giả sử chức năng của các port đã
được thiết lập.

PA1 PA0 TÁC VỤ


0 0 Xuất giá trị $0F ra PORTB
0 1 Xuất giá trị $F0 ra PORTB.
1 0 Xuất giá trị $55 ra PORTB
1 1 Xuất giá trị $AA ra PORTB

Bài giảng môn Vi xử lý


GV: Lê Thị Kim Anh
Chương 3
Phát biểu CASE
LDI R16,$0F
LDI R17,$F0
LDI R18,$55
LDI R19,$AA
START: IN R20,PINA
ANDI R20,3
CASE0: CPI R20,0 CASE2: CPI R20,2
BRNE CASE1 BRNE CASE3
OUT PORTB,R16 OUT PORTB,R18
RJMP START RJMP START
CASE1: CPI R20,1 CASE3: CPI R20,3
BRNE CASE2 BRNE START
OUT PORTB,R17 OUT PORTB,R19
RJMP START RJMP START
Bài giảng môn Vi xử lý
GV: Lê Thị Kim Anh
Chương 3
PHƯƠNG PHÁP TRA BẢNG
ÁP DỤNG: Thực hiện cho các giải thuật chuyển đổi mã hoặc tính
giá trị cho các biểu thức.
VD10: Giả sử 3 bit thấp của portA được kết nối đến 3 công tắc. Viết chương trình
thực hiện đổi các giá trị nhận được từ 3 công tắc này sang mã ASCII tương ứng
như bảng bên dưới, sau đó xuất ra PortD:

PA2-PA0 Mã ASCII
000 ‘0’ = $30
001 ‘1’ = $31
010 ‘2’ = $32
011 ‘3’ = $33
100 ‘4’ = $34
101 ‘5’ = $35
110 ‘6’ = $36
111 ‘7’ = $37

Bài giảng môn Vi xử lý


GV: Lê Thị Kim Anh
Chương 3
PHƯƠNG PHÁP TRA BẢNG
NGUYÊN TẮC THỰC HIỆN:
- Tạo bảng dữ liệu tương ứng với các giá trị cần chuyển đổi trong
vùng Flash.
- Xem các dữ liệu đầu vào cần chuyển đổi chính là các OFFSET.
- Địa chỉ của các dữ liệu cần lấy chính là địa chỉ đầu bảng cộng
với OFFSET.
Chương 3
PHƯƠNG PHÁP TRA BẢNG
. ORG $100
TABLE: .DB $30, $31, $32, $33, $34, $35, $36, $37

PA2-PA0 ASCII FLASH HIGH LOW ADDR  Z


000=‘0’ $30 $100 $31 $30 $200=(TABLE<<1)+0
000=‘1’ $31 $101 $33 $32 $201=(TABLE<<1)+1
000=‘2’ $32 $102 $35 $34 $202=(TABLE<<1)+2
000=‘3’ $32 $103 $37 $36 $203=(TABLE<<1)+3
000=‘4’ $34 $204=(TABLE<<1)+4
000=‘5’ $35 $205=(TABLE<<1)+5
000=‘6’ $36 $206=(TABLE<<1)+6
000=‘7’ $37 $207=(TABLE<<1)+7

Z=(TABLE<<1)+OFFSET
OFFSET Bài giảng môn Vi xử lý
GV: Lê Thị Kim Anh
Chương 3
PHƯƠNG PHÁP TRA BẢNG
LDI R16,0
OUT DDRA,R16
LDI R16,$FF
OUT PORTD,R16
OUT DDRD,R16
LOOP: IN R20,PINA
ANDI R20,$07
LDI ZL,LOW(ASCII<<1)
LDI ZH,HIGH(ASCII<<1)
ADD ZL,R20
BRCC FINAL
INC ZH
FINAL: LPM R1,Z
OUT PORTD,R1
RJMP LOOP
ASCII: .DB ‘0’,’1’,’2’,’3’,’4’,’5’,’6’,’7’
Bài giảng môn Vi xử lý
GV: Lê Thị Kim Anh

You might also like