Tải bản đầy đủ (.pdf) (26 trang)

vi xử lý hệ thống điều khiển adc

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (703.31 KB, 26 trang )


KHOA CÔNG NGHỆ ĐIỆN TỬ
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP




T
T
À
À
I
I


L
L
I
I


U
U


H
H
Ư
Ư



N
N
G
G


D
D


N
N


T
T
H
H
Í
Í


N
N
G
G
H
H
I
I



M
M


-
-


T
T
H
H


C
C


H
H
À
À
N
N
H
H




















N. HỆ THỐNG ĐIỀU KHIỂN ADC.
Giáo trình thực hành vi xử lý. 2 Biên soạn: Phạm Quang Trí

A. MỤC ĐÍCH:

• Thực hành lập trình ứng dụng trên máy tính, biên dịch chương trình, nạp vào vi điều khiển và sử dụng mô
hình thí nghiệm để kiểm chứng.
• Điều khiển thiết bị ngoại vi bằng các port của vi điều khiển.
• Khảo sát nguyên lý hoạt động của vi mạch ADC 0809.
• Thực hiện việc biến đổi từ tín hiệu tương tự (Analog) sang tín hiệu số (Digital).

B. YÊU CẦU:


• Nắm vững tập lệnh của vi điều khiển MCS-51.
• Tham khảo trước và nắm được hoạt động của vi mạch ADC 0809.



N. H THNG IU KHIN ADC.
Bi 1: Chng trỡnh iu khin bin i A/D thụng qua ADC0809 v hin th giỏ tr ca kờnh ngừ vo (kờnh
IN0) lờn hai LED 7 on (LED1 v LED0; di dng s HEX t 00H -> FFH).
Giỏo trỡnh thc hnh vi x lý. 3 Biờn son: Phm Quang Trớ
1 Trỡnh t tin hnh thớ nghim:
1.1 Kt ni thit b thớ nghim.
Tt ngun cp cho mụ hỡnh thớ nghim.
Dựng dõy bus 8 ni J64 (PORT1) khi vi iu khin vi J2 (SEL LED IN) khi LED 7 on.
Dựng bn dõy bus 8 ni J5 (7SEG7 IN), J6 (7SEG6 IN), J7 (7SEG5 IN) v J8 (7SEG4 IN) khi LED 7
on vi J4 (7SEG IN MUL) khi LED 7 on (ta ni chung cỏc bus ny li vi nhau thụng qua khi
m rng).
Dựng dõy bus 8 ni J63 (PORT0 / DATA) khi vi iu khin vi J4 (7SEG IN MUL) khi LED 7
on.
Dựng dõy bus 8 ni J49 (DIGITAL OUT) khi ADC vi J66 (PORT3/FUNCTION) khi vi iu
khin.
Dựng dõy bus 4 ni J152 (CONTROL ADC) khi ADC vi J65 (PORT2/A8 A15) khi vi iu khin
(chỳ ý l ta ch ni 4 bit thp ca J65 v J152 li vi nhau).
Dựng dõy bus 3 ni D36 (ADDRESS) khi ADC vi J65 (PORT2/A8 A15) khi vi iu khin (chỳ ý
l ta ch ni 3 bit cao k tip ca J65 v D36 li vi nhau).
Dựng dõy bus 1 ni J77 (V1) khi to ỏp vi J48 (ANALOG IN) khi ADC (chỳ ý l ta ch ni bit 0
(IN0) ca J48 v J77 li vi nhau).
Dựng ba dõy bus 3 ni D35 (POWER) khi to ỏp, D34 (POWER) khi ADC v J110 (POWER)
khi LED 7 on vi ngun +5V khi ngun.
ADC
ANALOG

IN
CONTROL
ADC
DIGITAL
OUT
POWER ADDRESS
LED 7 ẹOAẽN
7SEG7 IN
SEL IN2POWER SEL IN1
7SEG6 IN 7SEG5 IN 7SEG4 IN
7SEG7 IN
MUL
SEL LED IN
8 8 8 8
VI ẹIEU KHIEN
PORT 0
A0 A7
PORT 1PORT 3PORT 2
SELECT
CHIP
CLOCK
OUT
PORT 1PORT 3
40 PINS
20 PINS
POWER
SW
NGUON
+5V
3

8
8
TAẽO AP
V1 POWERV2V3V4
1
1
8
3
3
8
3
4

1.2 S nguyờn lý ca h thng:
N. HỆ THỐNG ĐIỀU KHIỂN ADC.
Bài 1: Chương trình điều khiển biến đổi A/D thông qua ADC0809 và hiển thị giá trị của kênh ngõ vào (kênh
IN0) lên hai LED 7 đoạn (LED1 và LED0; dưới dạng số HEX từ 00H -> FFH).
Giáo trình thực hành vi xử lý. 4 Biên soạn: Phạm Quang Trí
AD7
AD0
AD0
AD1
AD2
AD3
AD4
AD5
AD6
AD7
AD6
AD5

AD4
AD3
AD2
AD1
A
B
C
D
E
F
G
A
B
C
D
E
F
G
A
B
C
D
E
F
G
A
B
C
D
E

F
G
A
B
C
D
E
F
G
A
B
C
D
E
F
G
A
B
C
D
E
F
G
A
B
C
D
E
F
G

A
B
C
D
E
F
G
P1.0
P1.6
P1.5
P1.4
P1.3
P1.2
P1.1
P1.0
P1.7
P1.6
P1.5
P1.4
P1.3
P1.2
P1.1
D7
D0
D1
D2
D3
D4
D5
D6

A0
A1
A2
ALE
OE
EOC
ST
AD6
AD0
AD1
AD2
AD3
AD4
AD5
D7
ST
D3
EOC
OE
D6
D2
D4
D5
A0
D0
D1
A1
A2
ALE
P1.7

XTAL2
18
XTAL1
19
ALE
30
EA
31
PSEN
29
RST
9
P0.0/AD0
39
P0.1/AD1
38
P0.2/AD2
37
P0.3/AD3
36
P0.4/AD4
35
P0.5/AD5
34
P0.6/AD6
33
P0.7/AD7
32
P1.0
1

P1.1
2
P1.2
3
P1.3
4
P1.4
5
P1.5
6
P1.6
7
P1.7
8
P3.0/RXD
10
P3.1/TXD
11
P3.2/INT0
12
P3.3/INT1
13
P3.4/T0
14
P3.7/RD
17
P3.6/WR
16
P3.5/T1
15

P2.7/A15
28
P2.0/A8
21
P2.1/A9
22
P2.2/A10
23
P2.3/A11
24
P2.4/A12
25
P2.5/A13
26
P2.6/A14
27
U1
AT89C51
C1
33p
C2
33p
X1
12MHz
2
3
4
5
6
7

8
9
1
RP1
10K
+5V
MAÏCH ÑIEÀU KHIEÅN ADC (ANALOG TO DIGITAL CONVERTER)
MAÏCH ÑIEÀU KHIEÅN ADC (ANALOG TO DIGITAL CONVERTER)MAÏCH ÑIEÀU KHIEÅN ADC (ANALOG TO DIGITAL CONVERTER)
MAÏCH ÑIEÀU KHIEÅN ADC (ANALOG TO DIGITAL CONVERTER)
LED7
Q1
A1015
+5V
LED6
Q2
A1015
+5V
R2
1K
R3
1K
R4
56
R5
56
R6
56
R7
56
R8

56
R9
56
R10
56
LED5
Q3
A1015
+5V
LED4
Q4
A1015
+5V
R11
1K
R12
1K
LED3
Q5
A1015
+5V
LED2
Q6
A1015
+5V
R13
1K
R14
1K
LED1

Q7
A1015
+5V
LED0
Q8
A1015
+5V
R15
1K
R16
1K
C3
10uF
R1
10k
+5V
+5V
RV1
100K
+5V
U3(CLOCK)
OUT1
21
ADD B
24
ADD A
25
ADD C
23
VREF(+)

12
VREF(-)
16
IN3
1
IN4
2
IN5
3
IN6
4
IN7
5
START
6
OUT5
8
EOC
7
OE
9
CLOCK
10
OUT2
20
OUT7
14
OUT6
15
OUT8

17
OUT4
18
OUT3
19
IN2
28
IN1
27
IN0
26
ALE
22
U3
ADC0808
+88.8
Volts

1.3 Vẽ lưu đồ giải thuật và viết chương trình điều khiển.

N. HỆ THỐNG ĐIỀU KHIỂN ADC.
Bài 1: Chương trình điều khiển biến đổi A/D thông qua ADC0809 và hiển thị giá trị của kênh ngõ vào (kênh
IN0) lên hai LED 7 đoạn (LED1 và LED0; dưới dạng số HEX từ 00H -> FFH).
Giáo trình thực hành vi xử lý. 5 Biên soạn: Phạm Quang Trí
;***************************************************
;CHUONG TRINH DIEU KHIEN BIEN DOI A/D THONG QUA ADC0809 VA
;HIEN THI GIA TRI SO (DANG SO HEX) CUA KENH 0 LEN HAI LED 7 DOAN
;***************************************************
;KET NOI: 8 LED -> PORT1
; SEL LED -> PORT0

; MULTI, 7SEG IN (DP -> A), MULTI INT, CA, ACTIVE = 0
; ANALOG IN -> IN0 ADC0809
; DIGITAL OUT -> PORT3
; START -> P2.0 EOC -> P2.1
; OE -> P2.2 ALE -> P2.3
; A0 -> P2.4 A1 -> P2.5 A2 -> P2.6
; CLOCK -> 500KHz
;***************************************************
;DINH NGHIA CAC THONG SO
;***************************************************
START BIT P2.0 ;BIT KHOI DONG ADC
EOC BIT P2.1 ;BIT BAO KET THUC QUA TRINH CHUYEN DOI A/D
OE BIT P2.2 ;BIT CHO PHEP XUAT GIA TRI ADC
ALE BIT P2.3 ;BIT CHO PHEP CHOT DIA CHI
A0 BIT P2.4 ;BIT CHON NGO VAO ANALOG CAN BIEN DOI
A1 BIT P2.5
A2 BIT P2.6
DIG_OUT EQU P3 ;PORT DOC GIA TRI TU ADC XUAT RA
;***************************************************
ORG 00H
MAIN:
MOV P2,#02H ;CAU HINH CAC CHAN DIEU KHIEN BAN DAU CHO ADC
MOV DIG_OUT,#0FFH ;CAU HINH PORT 3 LA PORT NHAP GIA TRI
MP1:
CLR A0 ;CHON TIN HIEU ANALOG TAI KENH 0 (IN0)
CLR A1
CLR A2
SETB ALE ;TAO XUNG ALE (ALE = 1)
NOP
NOP

SETB START ;TAO XUNG START (START = 1)
NOP
NOP
CLR ALE ;KET THUC XUNG ALE (ALE = 0)
CLR START ;KET THUC XUNG START (START = 0)
ACALL DELAY_ADC ;TAO THOI GIAN TRE CHO VIEC CHUYEN DOI A/D CUA ADC0809
SETB OE ;TAO XUNG OE (OE = 1)
NOP
NOP
NOP
NOP
MOV A,DIG_OUT ;DOC GIA TRI TU ADC0809
CLR OE ;KET THUC XUNG OE (OE = 0)
MOV R4,A ;LAY GIA TRI ADC DE GIAI MA VA HIEN THI
ACALL HEX2ADCTO7SEG ;GIAI MA GIA TRI ADC
ACALL DISP7SEGMUL8 ;HIEN THI GIA TRI LEN LED 7 DOAN
SJMP MP1
;****************************************************
DELAY_ADC: ;CHUONG TRINH CON TAO THOI GIAN TRE 120US DE THUC HIEN CHUYEN DOI A/D
PUSH 00H
MOV R0,#60
DJNZ R0,$
POP 00H
RET
;***************************************************
;CTC QUET HIEN THI LED 7 DOAN (8 LED 7 DOAN).
;***************************************************
;LED: ANODE CHUNG, KICH HOAT MUC 0, 7 DOAN: DP (MSB) -> A (LSB)
;DU LIEU HIEN THI CHUA TRONG O NHO CUA RAM.
;***************************************************

;NAME: DISP7SEGMUL8.
;INPUT: 67H,66H = MA 7 DOAN (CH TRIEU - TRIEU).
; 65H,64H = MA 7 DOAN (TR NGAN - CH NGAN).
N. HỆ THỐNG ĐIỀU KHIỂN ADC.
Bài 1: Chương trình điều khiển biến đổi A/D thông qua ADC0809 và hiển thị giá trị của kênh ngõ vào (kênh
IN0) lên hai LED 7 đoạn (LED1 và LED0; dưới dạng số HEX từ 00H -> FFH).
Giáo trình thực hành vi xử lý. 6 Biên soạn: Phạm Quang Trí
; 63H,62H = MA 7 DOAN (NGAN - TRAM).
; 61H,60H = MA 7 DOAN (CHUC - DON VI).
;OUTPUT: P0 = 7 DOAN LED - DP (MSB) -> A (LSB).
; P1 = CHON LED - LEFT (MSD) -> RIGHT (LSD).
;***************************************************
DISP7SEGMUL8:
PUSH ACC ;CAT TAM THOI GIA TRI CAC THANH GHI
PUSH 00H
MOV A,#7FH ;MA QUET
MOV R0,#67H ;DIA CHI VUNG MA HIEN THI
DISP:
MOV P0,@R0 ;XUAT MA HIEN THI
MOV P1,A ;XUAT MA QUET
LCALL DELAYLED
MOV P1,#0FFH ;CHONG LEM
DEC R0 ;LAY MA HIEN THI KE TIEP
RR A ;CHUYEN SANG LED KE TIEP
CJNE R0,#5FH,DISP ;KIEM TRA DA QUET XONG CHUA
POP 00H ;PHUC HOI GIA TRI CHO CAC THANH GHI
POP ACC
RET
;****************************************************
DELAYLED: ;CHUONG TRINH CON TAO THOI GIAN TRE 2.5MS

PUSH 00H
PUSH 01H
MOV R1,#5
DEL:
MOV R0,#250
DJNZ R0,$
DJNZ R1,DEL
POP 01H
POP 00H
RET
;***************************************************
;CTC GIAI MA TU SO HEX SANG MA 7 DOAN (2 SO HEX) CO KEM CHUOI "ADC = ".
;***************************************************
;LED: ANODE CHUNG, 7 DOAN: DP (MSB) -> A (LSB)
;GIA TRI GIAI MA: 0 -> F
;***************************************************
;NAME: HEX2ADCTO7SEG.
;INPUT: R4 = CAP S0 HEX 1 (CHUC - DON VI).
;OUTPUT: 67H,66H = CHUOI KY TU "AD".
; 65H,64H = CHUOI KY TU "C ".
; 63H,62H = CHUOI KY TU "= ".
; 61H,60H = MA 7 DOAN (CHUC - DON VI).
;***************************************************
HEX2ADCTO7SEG:
PUSH DPH ;CAT TAM THOI GIA TRI CAC THANH GHI
PUSH DPL
PUSH ACC

MOV DPTR,#CODE7SEG ;DIA CHI VUNG MA 7 DOAN


MOV A,R4 ;LAY CAP SO HEX 1 CAN GIAI MA
ANL A,#0FH ;XOA 4 BIT CAO
MOVC A,@A+DPTR ;LAY MA 7 DOAN TUONG UNG
MOV 60H,A ;CAT HANG DON VI VAO O NHO

MOV A,R4 ;LAY CAP SO HEX 1 CAN GIAI MA
ANL A,#0F0H ;XOA 4 BIT THAP
SWAP A ;HOAN CHUYEN CAO - THAP
MOVC A,@A+DPTR ;LAY MA 7 DOAN TUONG UNG
MOV 61H,A ;CAT HANG CHUC VAO O NHO


MOV 62H,#0FFH ;CAT MA KY TU " "
MOV 63H,#0B7H ;CAT MA KY TU "="
MOV 64H,#0FFH ;CAT MA KY TU " "
MOV 65H,#0C6H ;CAT MA KY TU "C"
MOV 66H,#0A1H ;CAT MA KY TU "D"
N. HỆ THỐNG ĐIỀU KHIỂN ADC.
Bài 1: Chương trình điều khiển biến đổi A/D thông qua ADC0809 và hiển thị giá trị của kênh ngõ vào (kênh
IN0) lên hai LED 7 đoạn (LED1 và LED0; dưới dạng số HEX từ 00H -> FFH).
Giáo trình thực hành vi xử lý. 7 Biên soạn: Phạm Quang Trí
MOV 67H,#88H ;CAT MA KY TU "A"

POP ACC ;PHUC HOI GIA TRI CHO CAC THANH GHI
POP DPL
POP DPH
RET
;***************************************************
CODE7SEG: ;VUNG CHUA MA 7 DOAN (0 -> F)
DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH

END
1.4 Lưu chương trình và biên dịch chương trình.
1.5 Kiểm tra lỗi và hiệu chỉnh lỗi nếu có.
1.6 Gắn chip vi điều khiển thí nghiệm vào socket tương ứng trên khối nạp chip và bật nguồn cho khối nạp chip
hoạt động.
1.7 Nạp chương trình vào vi điều khiển.
1.8 Sử dụng vi điều khiển vừa nạp gắn vào socket tương ứng trên khối vi điều khiển.
1.9 Bật nguồn cho mô hình thí nghiệm. Quan sát kết quả hoạt động, nếu kết quả hoạt động không đúng yêu
cầu của đề bài thì phải quay lại kiểm tra việc kết nối mạch, hiệu chỉnh chương trình và làm lại các bước từ
bước 3 đến bước 9.
2 Bài tập:
(xem thêm trong phần hướng dẫn và phần bài tập của Bài 4)

N. HỆ THỐNG ĐIỀU KHIỂN ADC.
Bài 2: Chương trình điều khiển biến đổi A/D thông qua ADC0809 và hiển thị giá trị của kênh ngõ vào (kênh
IN0) lên ba LED 7 đoạn (LED2, LED1 và LED0; dưới dạng số DEC từ 0 -> 255).
Giáo trình thực hành vi xử lý. 8 Biên soạn: Phạm Quang Trí
1 Trình tự tiến hành thí nghiệm:
1.1 Kết nối thiết bị thí nghiệm.
• Quá trình kết nối thiết bị thí nghiệm tương tự như Bài 1.
1.2 Sơ đồ nguyên lý của hệ thống:
• Sơ đồ nguyên lý của hệ thống tương tự như Bài 1.
1.3 Vẽ lưu đồ giải thuật và viết chương trình điều khiển.
DELAYLED
(XEM CTC NÀY TẠI VÍ DỤ B3.1 MBI)
DISP7SEGMUL8
(XEM CTC NÀY TẠI VÍ DỤ B8 MBI)
BEGIN
MAIN:
N2

CẤU HÌNH CÁC CHÂN ĐIỀU KHIỂN BAN ĐẦU CHO ADC
(A2,A1,A0 = 000; ALE = 0; OE = 0; EOC = 1; START = 0 )
(P2) = 00000010B = 02H
CẤU HÌNH PORT 3 NHẬP DỮ LIỆU
(DIG_OUT) = FFH
MP1:
CHỌN TÍN HIỆU ANALOG TẠI KÊNH 0
(A2) = 0, (A1) = 0, (A0) = 0
TẠO XUNG CHỐT ĐỊA CHỈ KÊNH ADC
(ALE) = 0 1 / CHÂN ALE
NOP
NOP
TẠO XUNG CHUYỂN ĐỔI TƯƠNG TỰ - SỐ
(START) = 0 1 / CHÂN START
XUNG CHỐT ĐỊA CHỈ KÊNH ADC
(ALE) = 1 0 / CHÂN ALE
XUNG CHUYỂN ĐỔI TƯƠNG TỰ - SỐ
(START) = 1 0 / CHÂN START
GỌI CTC TẠO TRỄ ĐỂ THỰC HIỆN ADC
DELAY_ADC (120us)
TẠO XUNG XUẤT DỮ LIỆU DIGITAL TỪ ADC
(OE) = 0 1 / CHÂN OE
NOP
ĐỌC GIÁ TRỊ DIGITAL TỪ ADC
(A) = (DIG_OUT)
XUNG XUẤT DỮ LIỆU DIGITAL TỪ ADC
(OE) = 1 0 / CHÂN OE
LẤY GIÁ TRỊ DIGITAL ĐỂ GIẢI MÃ - HIỂN THỊ
(R7) = (A)
GỌI CTC GIẢI MÃ GIÁ TRỊ ADC SANG BCD

BIN8TOBCD
GỌI CTC GIẢI MÃ BCD SANG MÃ 7 ĐOẠN
BCD3ADCTO7SEG
GỌI CTC HIỂN THỊ
DISP7SEGMUL8
DELAY_ADC
(XEM CTC NÀY TẠI VÍ DỤ N1)
BIN8TOBCD
(XEM CTC NÀY TẠI PHẦN HƯỚNG
DẪN CỦA VÍ DỤ G)
XỬ LÝ ĐỂ LẤY GIÁ TRỊ THỨ NHẤT TRONG
SỐ BCD NÉN (4 BIT THẤP)
(A) =
XỬ LÝ ĐỂ LẤY GIÁ TRỊ THỨ HAI TRONG SỐ
BCD NÉN (4 BIT CAO)
(A) =
CẤT TẠM GIÁ TRỊ CỦA DPH,
DPL, ACC VÀO STACK
BCD3ADCTO7SEG
NAME: BCD3ADCTO7SEG - GIẢI MÃ SANG MÃ 7 ĐOẠN.
INPUT: R7,R6 = SỐ BCD (TRĂM/CHỤC/ĐƠN VỊ).
OUTPUT: 67H, 66H = CHUỖI KÝ TỰ “AD”.
65H, 64H = CHUỖI KÝ TỰ “C=“.
63H = CHUỖI KÝ TỰ “ “.
62H = MÃ 7 ĐOẠN (TRĂM).
61H, 60H = MÃ 7 ĐOẠN (CHỤC/ĐƠN VỊ).
BCD3ADCTO7SEG:
LẤY LẠI GIÁ TRỊ CHO DPH, DPL,
ACC TỪ STACK
NẠP ĐỊA CHỈ VÙNG MÃ

(DPTR) = CODE7SEG
RET
NẠP SỐ BCD NÉN CẦN GIẢI MÃ
(A) = (R6) =
X Y
0 Y
GIẢI MÃ DỮ LIỆU
(A) = (@A+DPTR)
CẤT MÃ 7 ĐOẠN CỦA BCD HÀNG ĐƠN VỊ
VÀO Ô NHỚ
(60H) = (A)
NẠP SỐ BCD NÉN CẦN GIẢI MÃ
(A) = (R6) = X Y
0 X
GIẢI MÃ DỮ LIỆU
(A) = (@A+DPTR)
CẤT MÃ 7 ĐOẠN CỦA BCD HÀNG CHỤC VÀO
Ô NHỚ
(61H) = (A)
CẤT MÃ 7 ĐOẠN CỦA KÝ TỰ “ “ VÀO Ô NHỚ
(63H) = FFH
CẤT MÃ 7 ĐOẠN CỦA KÝ TỰ “=“ VÀO Ô NHỚ
(64H) = FFH
CẤT MÃ 7 ĐOẠN CỦA KÝ TỰ “C“ VÀO Ô NHỚ
(65H) = C6H
CẤT MÃ 7 ĐOẠN CỦA KÝ TỰ “D“ VÀO Ô NHỚ
(66H) = A1H
CẤT MÃ 7 ĐOẠN CỦA KÝ TỰ “A“ VÀO Ô NHỚ
(67H) = 88H
XỬ LÝ ĐỂ LẤY GIÁ TRỊ THỨ NHẤT TRONG

SỐ BCD NÉN (4 BIT THẤP)
(A) =
NẠP SỐ BCD NÉN CẦN GIẢI MÃ
(A) = (R7) = X Y
0 Y
GIẢI MÃ DỮ LIỆU
(A) = (@A+DPTR)
CẤT MÃ 7 ĐOẠN CỦA BCD HÀNG TRĂM VÀO
Ô NHỚ
(62H) = (A)
VÙNG DỮ LIỆU CODE7SEG
C0H,F9H,A4H,B0H,99H,92H,82H,F8H,80H,90H

;***************************************************
;CHUONG TRINH DIEU KHIEN BIEN DOI A/D THONG QUA ADC0809 VA
;HIEN THI GIA TRI SO (DANG SO DEC) CUA KENH 0 LEN BA LED 7 DOAN
;***************************************************
;KET NOI: 8 LED -> PORT1
; SEL LED -> PORT0
; MULTI, 7SEG IN (DP -> A), MULTI INT, CA, ACTIVE = 0
; ANALOG IN -> IN0 ADC0809
; DIGITAL OUT -> PORT3
; START -> P2.0 EOC -> P2.1
; OE -> P2.2 ALE -> P2.3
; A0 -> P2.4 A1 -> P2.5 A2 -> P2.6
; CLOCK -> 500KHz
;***************************************************
;DINH NGHIA CAC THONG SO
;***************************************************
N. HỆ THỐNG ĐIỀU KHIỂN ADC.

Bài 2: Chương trình điều khiển biến đổi A/D thông qua ADC0809 và hiển thị giá trị của kênh ngõ vào (kênh
IN0) lên ba LED 7 đoạn (LED2, LED1 và LED0; dưới dạng số DEC từ 0 -> 255).
Giáo trình thực hành vi xử lý. 9 Biên soạn: Phạm Quang Trí
START BIT P2.0 ;BIT KHOI DONG ADC
EOC BIT P2.1 ;BIT BAO KET THUC QUA TRINH CHUYEN DOI A/D
OE BIT P2.2 ;BIT CHO PHEP XUAT GIA TRI ADC
ALE BIT P2.3 ;BIT CHO PHEP CHOT DIA CHI
A0 BIT P2.4 ;BIT CHON NGO VAO ANALOG CAN BIEN DOI
A1 BIT P2.5
A2 BIT P2.6
DIG_OUT EQU P3 ;PORT DOC GIA TRI TU ADC XUAT RA
;***************************************************
ORG 00H
MAIN:
MOV P2,#02H ;CAU HINH CA CHAN DIEU KHIEN BAN DAU CHO ADC
MOV DIG_OUT,#0FFH ;CAU HINH PORT 3 LA PORT NHAP GIA TRI
MP1:
CLR A0 ;CHON TIN HIEU ANALOG TAI KENH 0 (IN0)
CLR A1
CLR A2
SETB ALE ;TAO XUNG ALE (ALE = 1)
NOP
NOP
SETB START ;TAO XUNG START (START = 1)
NOP
NOP
CLR ALE ;KET THUC XUNG ALE (ALE = 0)
CLR START ;KET THUC XUNG START (START = 0)
ACALL DELAY_ADC ;TAO THOI GIAN TRE CHO VIEC CHUYEN DOI A/D CUA ADC0809
SETB OE ;TAO XUNG OE (OE = 1)

NOP
NOP
NOP
NOP
MOV A,DIG_OUT ;DOC GIA TRI TU ADC0809
CLR OE ;KET THUC XUNG OE (OE = 0)
MOV R7,A ;LAY GIA TRI ADC DE GIAI MA VA HIEN THI
ACALL BIN8TOBCD ;GIAI MA GIA TRI ADC (DANG BIN) SANG BCD
ACALL BCD3ADCTO7SEG ;GIAI MA GIA TRI ADC (DANG BCD) SANG MA 7 DOAN
ACALL DISP7SEGMUL8 ;HIEN THI GIA TRI LEN LED 7 DOAN
SJMP MP1
;****************************************************
DELAY_ADC: ;CHUONG TRINH CON TAO THOI GIAN TRE 120US DE THUC HIEN CHUYEN DOI A/D
PUSH 00H
MOV R0,#60
DJNZ R0,$
POP 00H
RET
;***************************************************
;CTC CHUYEN DOI SO BINARY 8 BIT (<= 255) SANG SO BCD.
;***************************************************
;NAME: BIN8TOBCD.
;INPUT: R7 = SO BIN 8 BIT (<= 255).
;OUTPUT: R7,R6 = SO BCD (TRAM - CHUC - DON VI).
;***************************************************
BIN8TOBCD:
PUSH ACC
PUSH B
MOV B,#10
MOV A,R7

DIV AB ;LAY R7 CHIA CHO 10
PUSH B ;CAT SO HANG DON VI
MOV B,#10
DIV AB ;LAY KET QUA TREN CHIA TIEP CHO 10
MOV R7,A ;R7 = TRAM
MOV A,B ;LAY SO HANG CHUC
SWAP A ;DUA SO HANG CHUC LEN 4 BIT CAO
POP B ;LAY SO HANG DON VI TU STACK
ORL A,B ;KET HOP SO HANG CHUC VA SO HANG DON VI
MOV R6,A ;R6 = CHUC - DON VI
POP B
POP ACC
N. HỆ THỐNG ĐIỀU KHIỂN ADC.
Bài 2: Chương trình điều khiển biến đổi A/D thông qua ADC0809 và hiển thị giá trị của kênh ngõ vào (kênh
IN0) lên ba LED 7 đoạn (LED2, LED1 và LED0; dưới dạng số DEC từ 0 -> 255).
Giáo trình thực hành vi xử lý. 10 Biên soạn: Phạm Quang Trí
RET
;***************************************************
;CTC QUET HIEN THI LED 7 DOAN (8 LED 7 DOAN).
;***************************************************
;LED: ANODE CHUNG, KICH HOAT MUC 0, 7 DOAN: DP (MSB) -> A (LSB)
;DU LIEU HIEN THI CHUA TRONG O NHO CUA RAM.
;***************************************************
;NAME: DISP7SEGMUL8.
;INPUT: 67H,66H = MA 7 DOAN (CH TRIEU - TRIEU).
; 65H,64H = MA 7 DOAN (TR NGAN - CH NGAN).
; 63H,62H = MA 7 DOAN (NGAN - TRAM).
; 61H,60H = MA 7 DOAN (CHUC - DON VI).
;OUTPUT: P0 = 7 DOAN LED - DP (MSB) -> A (LSB).
; P1 = CHON LED - LEFT (MSD) -> RIGHT (LSD).

;***************************************************
DISP7SEGMUL8:
PUSH ACC ;CAT TAM THOI GIA TRI CAC THANH GHI
PUSH 00H
MOV A,#7FH ;MA QUET
MOV R0,#67H ;DIA CHI VUNG MA HIEN THI
DISP:
MOV P0,@R0 ;XUAT MA HIEN THI
MOV P1,A ;XUAT MA QUET
LCALL DELAYLED
MOV P1,#0FFH ;CHONG LEM
DEC R0 ;LAY MA HIEN THI KE TIEP
RR A ;CHUYEN SANG LED KE TIEP
CJNE R0,#5FH,DISP ;KIEM TRA DA QUET XONG CHUA
POP 00H ;PHUC HOI GIA TRI CHO CAC THANH GHI
POP ACC
RET
;****************************************************
DELAYLED: ;CHUONG TRINH CON TAO THOI GIAN TRE 2.5MS
PUSH 00H
PUSH 01H
MOV R1,#5
DEL:
MOV R0,#250
DJNZ R0,$
DJNZ R1,DEL
POP 01H
POP 00H
RET
;***************************************************

;CTC GIAI MA TU SO BCD NEN SANG MA 7 DOAN (3 SO BCD) CO KEM CHUOI "ADC= ".
;***************************************************
;LED: ANODE CHUNG, 7 DOAN: DP (MSB) -> A (LSB)
;GIA TRI GIAI MA: 0 -> 9
;***************************************************
;NAME: BCD3ADCTO7SEG.
;INPUT: R7,R6 = SO BCD (TRAM - CHUC - DON VI).
;OUTPUT: 67H,66H = CHUOI KY TU "AD".
; 65H,64H = CHUOI KY TU "C=".
; 63H = CHUOI KY TU " ".
; 62H = MA 7 DOAN (TRAM)
; 61H,60H = MA 7 DOAN (CHUC - DON VI).
;***************************************************
BCD3ADCTO7SEG:
PUSH DPH ;CAT TAM THOI GIA TRI CAC THANH GHI
PUSH DPL
PUSH ACC

MOV DPTR,#CODE7SEG ;DIA CHI VUNG MA 7 DOAN


MOV A,R6 ;LAY SO BCD NEN 1 (CHUC - DON VI) CAN GIAI MA
ANL A,#0FH ;XOA 4 BIT CAO
MOVC A,@A+DPTR ;LAY MA 7 DOAN TUONG UNG
MOV 60H,A ;CAT HANG DON VI VAO O NHO

N. HỆ THỐNG ĐIỀU KHIỂN ADC.
Bài 2: Chương trình điều khiển biến đổi A/D thông qua ADC0809 và hiển thị giá trị của kênh ngõ vào (kênh
IN0) lên ba LED 7 đoạn (LED2, LED1 và LED0; dưới dạng số DEC từ 0 -> 255).
Giáo trình thực hành vi xử lý. 11 Biên soạn: Phạm Quang Trí

MOV A,R6 ;LAY SO BCD NEN 1 (CHUC - DON VI) CAN GIAI MA
ANL A,#0F0H ;XOA 4 BIT THAP
SWAP A ;HOAN CHUYEN CAO - THAP
MOVC A,@A+DPTR ;LAY MA 7 DOAN TUONG UNG
MOV 61H,A ;CAT HANG CHUC VAO O NHO

MOV A,R7 ;LAY SO BCD NEN 2 (TRAM) CAN GIAI MA
ANL A,#0FH ;XOA 4 BIT CAO
MOVC A,@A+DPTR ;LAY MA 7 DOAN TUONG UNG
MOV 62H,A ;CAT HANG TRAM VAO O NHO

MOV 63H,#0FFH ;CAT MA KY TU " "
MOV 64H,#0B7H ;CAT MA KY TU "="
MOV 65H,#0C6H ;CAT MA KY TU "C"
MOV 66H,#0A1H ;CAT MA KY TU "D"
MOV 67H,#88H ;CAT MA KY TU "A"

POP ACC ;PHUC HOI GIA TRI CHO CAC THANH GHI
POP DPL
POP DPH
RET
;***************************************************
CODE7SEG: ;VUNG CHUA MA 7 DOAN (0 -> 9)
DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
END
1.4 Thực hiện lần lượt các bước từ 1.3 đến 1.8 tương tự như bài trên.
2 Bài tập:
(xem thêm trong phần hướng dẫn và phần bài tập của Bài 4)

N. HỆ THỐNG ĐIỀU KHIỂN ADC.

Bài 3: Chương trình điều khiển biến đổi A/D thông qua ADC0809 và hiển thị giá trị điện áp của kênh ngõ vào
(kênh IN0) lên bốn LED 7 đoạn (LED3, LED2, LED1 và LED0: theo giá trị điện áp thực, đơn vị là mV).
Giáo trình thực hành vi xử lý. 12 Biên soạn: Phạm Quang Trí
1 Trình tự tiến hành thí nghiệm:
1.1 Kết nối thiết bị thí nghiệm.
• Quá trình kết nối thiết bị thí nghiệm tương tự như Bài 1.
1.2 Sơ đồ nguyên lý của hệ thống:
• Sơ đồ nguyên lý của hệ thống tương tự như Bài 1.
1.3 Vẽ lưu đồ giải thuật và viết chương trình điều khiển.

;***************************************************
;CHUONG TRINH DIEU KHIEN BIEN DOI A/D THONG QUA ADC0809 VA
;HIEN THI GIA TRI SO (DANG SO DEC) CUA KENH 0 LEN BON LED 7 DOAN
;THEO GIA TRI DIEN AP THUC (DON VI TINH LA mV)
;***************************************************
;KET NOI: 8 LED -> PORT1
; SEL LED -> PORT0
; MULTI, 7SEG IN (DP -> A), MULTI INT, CA, ACTIVE = 0
N. HỆ THỐNG ĐIỀU KHIỂN ADC.
Bài 3: Chương trình điều khiển biến đổi A/D thông qua ADC0809 và hiển thị giá trị điện áp của kênh ngõ vào
(kênh IN0) lên bốn LED 7 đoạn (LED3, LED2, LED1 và LED0: theo giá trị điện áp thực, đơn vị là mV).
Giáo trình thực hành vi xử lý. 13 Biên soạn: Phạm Quang Trí
; ANALOG IN -> IN0 ADC0809
; DIGITAL OUT -> PORT3
; START -> P2.0 EOC -> P2.1
; OE -> P2.2 ALE -> P2.3
; A0 -> P2.4 A1 -> P2.5 A2 -> P2.6
; CLOCK -> 500KHz
;***************************************************
;DINH NGHIA CAC THONG SO

;***************************************************
START BIT P2.0 ;BIT KHOI DONG ADC
EOC BIT P2.1 ;BIT BAO KET THUC QUA TRINH CHUYEN DOI A/D
OE BIT P2.2 ;BIT CHO PHEP XUAT GIA TRI ADC
ALE BIT P2.3 ;BIT CHO PHEP CHOT DIA CHI
A0 BIT P2.4 ;BIT CHON NGO VAO ANALOG CAN BIEN DOI
A1 BIT P2.5
A2 BIT P2.6
DIG_OUT EQU P3 ;PORT DOC GIA TRI TU ADC XUAT RA
;***************************************************
ORG 00H
MAIN:
MOV P2,#02H ;CAU HINH CA CHAN DIEU KHIEN BAN DAU CHO ADC
MOV DIG_OUT,#0FFH ;CAU HINH PORT 3 LA PORT NHAP GIA TRI
MP1:
;****************************************************
CLR A0 ;CHON TIN HIEU ANALOG TAI KENH 0 (IN0)
CLR A1
CLR A2
SETB ALE ;TAO XUNG ALE (ALE = 1)
NOP
NOP
SETB START ;TAO XUNG START (START = 1)
NOP
NOP
CLR ALE ;KET THUC XUNG ALE (ALE = 0)
CLR START ;KET THUC XUNG START (START = 0)
ACALL DELAY_ADC ;TAO THOI GIAN TRE CHO VIEC CHUYEN DOI A/D CUA ADC0809
SETB OE ;TAO XUNG OE (OE = 1)
NOP

NOP
NOP
NOP
MOV A,DIG_OUT ;DOC GIA TRI TU ADC0809 VAO VI DIEU KHIEN
CLR OE ;KET THUC XUNG OE (OE = 0)
;****************************************************
MOV B,#20 ;DO PHAN GIAI CUA ADC = VREF / 255 = 5V / 255 = 19.6mV -> 20mV
MUL AB ;DOI GIA TRI DIGITAL NHAN TU ADC SANG THANH GIA TRI DIEN AP (mV)
MOV R7,B ;LAY GIA TRI DIEN AP QUI DOI DE GIAI MA VA HIEN THI
MOV R6,A
ACALL BIN16TOBCD ;GIAI MA GIA TRI ADC (DANG BIN) SANG BCD
ACALL BCD3ADCTO7SEG ;GIAI MA GIA TRI ADC (DANG BCD) SANG MA 7 DOAN
ACALL DISP7SEGMUL8 ;HIEN THI GIA TRI LEN LED 7 DOAN
SJMP MP1
;****************************************************
DELAY_ADC: ;CHUONG TRINH CON TAO THOI GIAN TRE 120US DE THUC HIEN CHUYEN DOI A/D
PUSH 00H
MOV R0,#60
DJNZ R0,$
POP 00H
RET
;***************************************************
;CTC CHUYEN DOI SO BINARY 16 BIT (<= 9999) SANG SO BCD.
;***************************************************
;NAME: BIN16TOBCD.
;INPUT: R7,R6 = SO BCD 16 BIT (<= 9999).
;OUTPUT: R7,R6 = SO BCD (NGAN - TRAM - CHUC - DON VI).
;***************************************************
BIN16TOBCD:
PUSH ACC

PUSH B
N. HỆ THỐNG ĐIỀU KHIỂN ADC.
Bài 3: Chương trình điều khiển biến đổi A/D thông qua ADC0809 và hiển thị giá trị điện áp của kênh ngõ vào
(kênh IN0) lên bốn LED 7 đoạn (LED3, LED2, LED1 và LED0: theo giá trị điện áp thực, đơn vị là mV).
Giáo trình thực hành vi xử lý. 14 Biên soạn: Phạm Quang Trí
MOV B,#10
ACALL DIV16TO8 ;LAY R7,R6 CHIA CHO 10
PUSH B ;CAT SO HANG DON VI
MOV B,#10
ACALL DIV16TO8 ;TIEP TUC CHIA CHO 10
PUSH B ;CAT SO HANG CHUC
MOV B,#10
MOV A,R6
DIV AB ;TIEP TUC CHIA CHO 10
PUSH B ;CAT SO HANG TRAM, ACC CHUA SO HANG NGAN
SWAP A ;DUA SO HANG NGAN LEN 4 BIT CAO
POP B ;LAY SO HANG TRAM TU STACK
ORL A,B ;KET HOP SO HANG NGAN VA SO HANG TRAM
MOV R7,A ;R7 = NGAN - TRAM
POP ACC ;LAY SO HANG CHUC TU STACK
SWAP A ;DUA SO HANG CHUC LEN 4 BIT CAO
POP B ;LAY SO HANG DON VI TU STACK
ORL A,B ;KET HOP SO HANG CHUC VA SO HANG DON VI
MOV R6,A ;R6 = CHUC - DON VI
POP B
POP ACC
RET
;***************************************************
;CTC CHIA SO BINARY 16 BIT CHO SO BINARY 8 BIT.
;***************************************************

;NAME: DIV16TO8.
;INPUT: R7,R6: SO BINARY 16 BIT
; B: SO BINARY 8 BIT
;OUTPUT: R7,R6: KET QUA CUA PHEP CHIA
; B: SO DU CUA PHEP CHIA
;***************************************************
DIV16TO8:
PUSH 02H ;CAT THANH GHI R2
PUSH ACC ;CAT THANH GHI A
MOV R2,#16 ;CHO PHEP DICH 16 LAN
CLR A
DIVIDE:
XCH A,R6
CLR C ;DICH BIT 7 CU R6 VAO
RLC A ;CARRY, BIT 0 CUA R6
XCH A,R6 ;BANG 0.
XCH A,R7 ;DICH BIT CARRY VAO
RLC A ;BIT 0 CUA R7
XCH A,R7
RLC A ;DICH BIT 7 CUA R7 VAO A.
CJNE A,B,NOT_EQUAL ;XEM SO BIT DA DICH >=
SJMP A_GREATER_EQ_B ;SO CHIA CHUA ?
NOT_EQUAL:
JC BELOW ;N: THUONG SO = 0 TRONG R6.
A_GREATER_EQ_B:
SUBB A,B ;Y: SO DU CAT TRONG A.
XCH A,R6
ORL A,#1 ;THUONG SO = 1
XCH A,R6 ;CAT TRONG R6
BELOW:

DJNZ R2,DIVIDE ;DICH TIEP DEN 16 LAN.
XCH A,B ;SAU 16 LAN DICH TA DUOC B = SO DU.
POP ACC
POP 02H
RET
;***************************************************
;CTC QUET HIEN THI LED 7 DOAN (8 LED 7 DOAN).
;***************************************************
;LED: ANODE CHUNG, KICH HOAT MUC 0, 7 DOAN: DP (MSB) -> A (LSB)
;DU LIEU HIEN THI CHUA TRONG O NHO CUA RAM.
;***************************************************
;NAME: DISP7SEGMUL8.
;INPUT: 67H,66H = MA 7 DOAN (CH TRIEU - TRIEU).
; 65H,64H = MA 7 DOAN (TR NGAN - CH NGAN).
N. HỆ THỐNG ĐIỀU KHIỂN ADC.
Bài 3: Chương trình điều khiển biến đổi A/D thông qua ADC0809 và hiển thị giá trị điện áp của kênh ngõ vào
(kênh IN0) lên bốn LED 7 đoạn (LED3, LED2, LED1 và LED0: theo giá trị điện áp thực, đơn vị là mV).
Giáo trình thực hành vi xử lý. 15 Biên soạn: Phạm Quang Trí
; 63H,62H = MA 7 DOAN (NGAN - TRAM).
; 61H,60H = MA 7 DOAN (CHUC - DON VI).
;OUTPUT: P0 = 7 DOAN LED - DP (MSB) -> A (LSB).
; P1 = CHON LED - LEFT (MSD) -> RIGHT (LSD).
;***************************************************
DISP7SEGMUL8:
PUSH ACC ;CAT TAM THOI GIA TRI CAC THANH GHI
PUSH 00H
MOV A,#7FH ;MA QUET
MOV R0,#67H ;DIA CHI VUNG MA HIEN THI
DISP:
MOV P0,@R0 ;XUAT MA HIEN THI

MOV P1,A ;XUAT MA QUET
LCALL DELAYLED
MOV P1,#0FFH ;CHONG LEM
DEC R0 ;LAY MA HIEN THI KE TIEP
RR A ;CHUYEN SANG LED KE TIEP
CJNE R0,#5FH,DISP ;KIEM TRA DA QUET XONG CHUA
POP 00H ;PHUC HOI GIA TRI CHO CAC THANH GHI
POP ACC
RET
;****************************************************
DELAYLED: ;CHUONG TRINH CON TAO THOI GIAN TRE 2.5MS
PUSH 00H
PUSH 01H
MOV R1,#5
DEL:
MOV R0,#250
DJNZ R0,$
DJNZ R1,DEL
POP 01H
POP 00H
RET
;***************************************************
;CTC GIAI MA TU SO BCD NEN SANG MA 7 DOAN (3 SO BCD) CO KEM CHUOI "ADC= ".
;***************************************************
;LED: ANODE CHUNG, 7 DOAN: DP (MSB) -> A (LSB)
;GIA TRI GIAI MA: 0 -> 9
;***************************************************
;NAME: BCD3ADCTO7SEG.
;INPUT: R7,R6 = SO BCD (NGAN - TRAM - CHUC - DON VI).
;OUTPUT: 67H,66H = CHUOI KY TU "AD".

; 65H,64H = CHUOI KY TU "C=".
; 63H,62H = MA 7 DOAN (NGAN - TRAM)
; 61H,60H = MA 7 DOAN (CHUC - DON VI).
;***************************************************
BCD3ADCTO7SEG:
PUSH DPH ;CAT TAM THOI GIA TRI CAC THANH GHI
PUSH DPL
PUSH ACC

MOV DPTR,#CODE7SEG ;DIA CHI VUNG MA 7 DOAN

MOV A,R6 ;LAY SO BCD NEN 1 (CHUC - DON VI) CAN GIAI MA
ANL A,#0FH ;XOA 4 BIT CAO
MOVC A,@A+DPTR ;LAY MA 7 DOAN TUONG UNG
MOV 60H,A ;CAT HANG DON VI VAO O NHO

MOV A,R6 ;LAY SO BCD NEN 1 (CHUC - DON VI) CAN GIAI MA
ANL A,#0F0H ;XOA 4 BIT THAP
SWAP A ;HOAN CHUYEN CAO - THAP
MOVC A,@A+DPTR ;LAY MA 7 DOAN TUONG UNG
MOV 61H,A ;CAT HANG CHUC VAO O NHO


MOV A,R7 ;LAY SO BCD NEN 2 (NGAN - TRAM) CAN GIAI MA
ANL A,#0FH ;XOA 4 BIT CAO
MOVC A,@A+DPTR ;LAY MA 7 DOAN TUONG UNG
MOV 62H,A ;CAT HANG TRAM VAO O NHO

N. HỆ THỐNG ĐIỀU KHIỂN ADC.
Bài 3: Chương trình điều khiển biến đổi A/D thông qua ADC0809 và hiển thị giá trị điện áp của kênh ngõ vào

(kênh IN0) lên bốn LED 7 đoạn (LED3, LED2, LED1 và LED0: theo giá trị điện áp thực, đơn vị là mV).
Giáo trình thực hành vi xử lý. 16 Biên soạn: Phạm Quang Trí
MOV A,R7 ;LAY SO BCD NEN 2 (NGAN - TRAM) CAN GIAI MA
ANL A,#0F0H ;XOA 4 BIT THAP
SWAP A ;HOAN CHUYEN CAO - THAP
MOVC A,@A+DPTR ;LAY MA 7 DOAN TUONG UNG
MOV 63H,A ;CAT HANG NGAN VAO O NHO

MOV 64H,#0B7H ;CAT MA KY TU "="
MOV 65H,#0C6H ;CAT MA KY TU "C"
MOV 66H,#0A1H ;CAT MA KY TU "D"
MOV 67H,#88H ;CAT MA KY TU "A"

POP ACC ;PHUC HOI GIA TRI CHO CAC THANH GHI
POP DPL
POP DPH
RET
;***************************************************
CODE7SEG: ;VUNG CHUA MA 7 DOAN (0 -> 9)
DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
END
1.4 Thực hiện lần lượt các bước từ 1.3 đến 1.8 tương tự như bài trên.
2 Bài tập:
(xem thêm trong phần hướng dẫn và phần bài tập của Bài 4)


N. H THNG IU KHIN ADC.
Bi 4: Chng trỡnh iu khin bin i A/D thụng qua ADC0809 v hin th giỏ tr ca bn kờnh ngừ vo
(kờnh IN0, IN1, IN2 v IN3) lờn bn LED 7 on (LED3, LED2, LED1 v LED0: theo giỏ tr in ỏp
thc, n v l mV), LED7 hin th kờnh ngừ vo. Vic chuyn i kờnh bin i v hin th c thc

hin mt cỏch ln lt, mi ln cỏch nhau 5s.
Giỏo trỡnh thc hnh vi x lý. 17 Biờn son: Phm Quang Trớ
1 Trỡnh t tin hnh thớ nghim:
1.1 Kt ni thit b thớ nghim.
Tt ngun cp cho mụ hỡnh thớ nghim.
Dựng dõy bus 8 ni J64 (PORT1) khi vi iu khin vi J2 (SEL LED IN) khi LED 7 on.
Dựng bn dõy bus 8 ni J5 (7SEG7 IN), J6 (7SEG6 IN), J7 (7SEG5 IN) v J8 (7SEG4 IN) khi LED 7
on vi J4 (7SEG IN MUL) khi LED 7 on (ta ni chung cỏc bus ny li vi nhau thụng qua khi
m rng).
Dựng dõy bus 8 ni J63 (PORT0 / DATA) khi vi iu khin vi J4 (7SEG IN MUL) khi LED 7
on.
Dựng dõy bus 8 ni J49 (DIGITAL OUT) khi ADC vi J66 (PORT3/FUNCTION) khi vi iu
khin.
Dựng dõy bus 4 ni J152 (CONTROL ADC) khi ADC vi J65 (PORT2/A8 A15) khi vi iu khin
(chỳ ý l ta ch ni 4 bit thp ca J65 v J152 li vi nhau).
Dựng dõy bus 3 ni D36 (ADDRESS) khi ADC vi J65 (PORT2/A8 A15) khi vi iu khin (chỳ ý
l ta ch ni 3 bit cao k tip ca J65 v D36 li vi nhau).
Dựng dõy bus 1 ni J77 (V1) khi to ỏp vi J48 (ANALOG IN) khi ADC (chỳ ý l ta ch ni bit 3
(IN3) ca J48 v J77 li vi nhau).
Dựng dõy bus 1 ni J78 (V1) khi to ỏp vi J48 (ANALOG IN) khi ADC (chỳ ý l ta ch ni bit 2
(IN2) ca J48 v J77 li vi nhau).
Dựng dõy bus 1 ni J81 (V1) khi to ỏp vi J48 (ANALOG IN) khi ADC (chỳ ý l ta ch ni bit 1
(IN1) ca J48 v J77 li vi nhau).
Dựng dõy bus 1 ni J82 (V1) khi to ỏp vi J48 (ANALOG IN) khi ADC (chỳ ý l ta ch ni bit 0
(IN0) ca J48 v J77 li vi nhau).
Dựng ba dõy bus 3 ni D35 (POWER) khi to ỏp, D34 (POWER) khi ADC v J110 (POWER)
khi LED 7 on vi ngun +5V khi ngun.
ADC
ANALOG
IN

CONTROL
ADC
DIGITAL
OUT
POWER ADDRESS
LED 7 ẹOAẽN
7SEG7 IN
SEL IN2POWER SEL IN1
7SEG6 IN 7SEG5 IN 7SEG4 IN
7SEG7 IN
MUL
SEL LED IN
8 8 8 8
VI ẹIEU KHIEN
PORT 0
A0 A7
PORT 1PORT 3PORT 2
SELECT
CHIP
CLOCK
OUT
PORT 1PORT 3
40 PINS
20 PINS
POWER
SW
NGUON
+5V
3
8

TAẽO AP
V1 POWERV2V3V4
1
3
3
8
3
4
1
1
1
8
8

N. HỆ THỐNG ĐIỀU KHIỂN ADC.
Bài 4: Chương trình điều khiển biến đổi A/D thông qua ADC0809 và hiển thị giá trị của bốn kênh ngõ vào
(kênh IN0, IN1, IN2 và IN3) lên bốn LED 7 đoạn (LED3, LED2, LED1 và LED0: theo giá trị điện áp
thực, đơn vị là mV), LED7 hiển thị kênh ngõ vào. Việc chuyển đổi kênh biến đổi và hiển thị được thực
hiện một cách lần lượt, mỗi lần cách nhau 5s.
Giáo trình thực hành vi xử lý. 18 Biên soạn: Phạm Quang Trí
1.2 Sơ đồ nguyên lý của hệ thống:
AD7
AD0
AD0
AD1
AD2
AD3
AD4
AD5
AD6

AD7
AD6
AD5
AD4
AD3
AD2
AD1
A
B
C
D
E
F
G
A
B
C
D
E
F
G
A
B
C
D
E
F
G
A
B

C
D
E
F
G
A
B
C
D
E
F
G
A
B
C
D
E
F
G
A
B
C
D
E
F
G
A
B
C
D

E
F
G
A
B
C
D
E
F
G
P1.0
P1.6
P1.5
P1.4
P1.3
P1.2
P1.1
P1.0
P1.7
P1.6
P1.5
P1.4
P1.3
P1.2
P1.1
D7
D0
D1
D2
D3

D4
D5
D6
A0
A1
A2
ALE
OE
EOC
ST
AD6
AD0
AD1
AD2
AD3
AD4
AD5
D7
ST
D3
EOC
OE
D6
D2
D4
D5
A0
D0
D1
A1

A2
ALE
P1.7
XTAL2
18
XTAL1
19
ALE
30
EA
31
PSEN
29
RST
9
P0.0/AD0
39
P0.1/AD1
38
P0.2/AD2
37
P0.3/AD3
36
P0.4/AD4
35
P0.5/AD5
34
P0.6/AD6
33
P0.7/AD7

32
P1.0
1
P1.1
2
P1.2
3
P1.3
4
P1.4
5
P1.5
6
P1.6
7
P1.7
8
P3.0/RXD
10
P3.1/TXD
11
P3.2/INT0
12
P3.3/INT1
13
P3.4/T0
14
P3.7/RD
17
P3.6/WR

16
P3.5/T1
15
P2.7/A15
28
P2.0/A8
21
P2.1/A9
22
P2.2/A10
23
P2.3/A11
24
P2.4/A12
25
P2.5/A13
26
P2.6/A14
27
U1
AT89C51
C1
33p
C2
33p
X1
12MHz
2
3
4

5
6
7
8
9
1
RP1
10K
+5V
MAÏCH ÑIEÀU KHIEÅN ADC (ANALOG TO DIGITAL CONVERTER)
MAÏCH ÑIEÀU KHIEÅN ADC (ANALOG TO DIGITAL CONVERTER)MAÏCH ÑIEÀU KHIEÅN ADC (ANALOG TO DIGITAL CONVERTER)
MAÏCH ÑIEÀU KHIEÅN ADC (ANALOG TO DIGITAL CONVERTER)
LED7
Q1
A1015
+5V
LED6
Q2
A1015
+5V
R2
1K
R3
1K
R4
56
R5
56
R6
56

R7
56
R8
56
R9
56
R10
56
LED5
Q3
A1015
+5V
LED4
Q4
A1015
+5V
R11
1K
R12
1K
LED3
Q5
A1015
+5V
LED2
Q6
A1015
+5V
R13
1K

R14
1K
LED1
Q7
A1015
+5V
LED0
Q8
A1015
+5V
R15
1K
R16
1K
C3
10uF
R1
10k
+5V
+5V
RV4
100K
+5V
U3(CLOCK)
OUT1
21
ADD B
24
ADD A
25

ADD C
23
VREF(+)
12
VREF(-)
16
IN3
1
IN4
2
IN5
3
IN6
4
IN7
5
START
6
OUT5
8
EOC
7
OE
9
CLOCK
10
OUT2
20
OUT7
14

OUT6
15
OUT8
17
OUT4
18
OUT3
19
IN2
28
IN1
27
IN0
26
ALE
22
U3
ADC0808
RV3
100K
RV2
100K
RV1
100K
+88.8
Volts
+88.8
Volts
+88.8
Volts

+88.8
Volts

1.3 Vẽ lưu đồ giải thuật và viết chương trình điều khiển.
N. HỆ THỐNG ĐIỀU KHIỂN ADC.
Bài 4: Chương trình điều khiển biến đổi A/D thông qua ADC0809 và hiển thị giá trị của bốn kênh ngõ vào
(kênh IN0, IN1, IN2 và IN3) lên bốn LED 7 đoạn (LED3, LED2, LED1 và LED0: theo giá trị điện áp
thực, đơn vị là mV), LED7 hiển thị kênh ngõ vào. Việc chuyển đổi kênh biến đổi và hiển thị được thực
hiện một cách lần lượt, mỗi lần cách nhau 5s.
Giáo trình thực hành vi xử lý. 19 Biên soạn: Phạm Quang Trí
DELAYLED
(XEM CTC NÀY TẠI VÍ DỤ B3.1 MBI)
DISP7SEGMUL8
(XEM CTC NÀY TẠI VÍ DỤ B8 MBI)
DELAY_ADC
(XEM CTC NÀY TẠI VÍ DỤ N1)
BIN16TOBCD
(XEM CTC NÀY TẠI PHẦN HƯỚNG
DẪN CỦA VÍ DỤ K3)
DIV16TO8
(XEM CTC NÀY TẠI PHẦN HƯỚNG
DẪN CỦA VÍ DỤ K3)
BEGIN
MAIN:
N4
CẤU HÌNH CÁC CHÂN ĐIỀU KHIỂN BAN ĐẦU CHO ADC
(A2,A1,A0 = 000; ALE = 0; OE = 0; EOC = 1; START = 0 )
(P2) = 00000010B = 02H
CẤU HÌNH PORT 3 NHẬP DỮ LIỆU
(DIG_OUT) = FFH

MP1:
ĐẶT GIÁ TRỊ KÊNH MẶC ĐỊNH (KÊNH 0)
(R5) = 0
GỌI CTC GIẢI MÃ GIÁ TRỊ SANG BCD
BIN16TOBCD
GỌI CTC GIẢI MÃ BCD SANG MÃ 7 ĐOẠN
BCD3ADCTO7SEG
GỌI CTC HIỂN THỊ
DELAY_SCAN
MP2:
GỌI CTC ĐIỀU KHIỂN CHUYỂN ĐỔI ADC
CONVERSATION
LẤY GIÁ TRỊ ĐIỆN ÁP ĐỂ GIẢI MÃ - HIỂN THỊ
(R6) = (A)
LẤY GIÁ TRỊ ĐIỆN ÁP ĐỂ GIẢI MÃ - HIỂN THỊ
(R7) = (B)
ĐỔI GIÁ TRỊ DIGITAL NHẬN TỪ ADC THÀNH
GIÁ TRỊ ĐIỆN ÁP (mV)
(ĐIỆN ÁP = GIÁ TRỊ x ĐỘ PHÂN GIẢI ADC)
(A) x (B)
ĐẶT GIÁ TRỊ ĐỘ PHÂN GIẢI ADC
(Vref/255 = 5/255 = 19.6 mV 20 mV)
(B) = 20
CHUYỂN SANG KÊNH KẾ TIẾP
(R5) = (R5) + 1
KIỂM TRA SỐ KÊNH
(CHƯA XONG)
Đ
S
TẠO XUNG CHỐT ĐỊA CHỈ KÊNH ADC

(ALE) = 0 1 / CHÂN ALE
NOP
NOP
TẠO XUNG CHUYỂN ĐỔI TƯƠNG TỰ - SỐ
(START) = 0 1 / CHÂN START
XUNG CHỐT ĐỊA CHỈ KÊNH ADC
(ALE) = 1 0 / CHÂN ALE
XUNG CHUYỂN ĐỔI TƯƠNG TỰ - SỐ
(START) = 1 0 / CHÂN START
GỌI CTC TẠO TRỄ ĐỂ THỰC HIỆN ADC
DELAY_ADC (120us)
TẠO XUNG XUẤT DỮ LIỆU DIGITAL TỪ ADC
(OE) = 0 1 / CHÂN OE
NOP
ĐỌC GIÁ TRỊ DIGITAL TỪ ADC
(A) = (DIG_OUT)
XUNG XUẤT DỮ LIỆU DIGITAL TỪ ADC
(OE) = 1 0 / CHÂN OE
CONVERSATION
CONVERSATION:
CHỌN TÍN HIỆU ANALOG TẠI KÊNH 0
(A2) = 0, (A1) = 0, (A0) = 0
THIẾT LẬP KÊNH CẦN CHUYỂN ĐỔI A/D
(P2) = (P2) (R5)
RET
DELAY_SCAN
(XEM CTC NÀY TẠI VÍ DỤ B6 MBO)
VÙNG DỮ LIỆU CODE7SEG
C0H,F9H,A4H,B0H,99H,92H,82H,F8H,80H,90H
XỬ LÝ ĐỂ LẤY GIÁ TRỊ THỨ NHẤT TRONG

SỐ BCD NÉN (4 BIT THẤP)
(A) =
XỬ LÝ ĐỂ LẤY GIÁ TRỊ THỨ HAI TRONG SỐ
BCD NÉN (4 BIT CAO)
(A) =
CẤT TẠM GIÁ TRỊ CỦA DPH,
DPL, ACC VÀO STACK
BCD3ADCTO7SEG
NAME: BCD3ADCTO7SEG - GIẢI MÃ SANG MÃ 7 ĐOẠN.
INPUT: R7,R6 = SỐ BCD (TRĂM/CHỤC/ĐƠN VỊ).
R5 = SỐ THỨ TỰ CÁC KÊNH.
OUTPUT: 67H, 66H = CHUỖI KÝ TỰ “CH”.
65H = SỐ THỨ TỰ KÊNH
64H = CHUỖI KÝ TỰ “=“.
63H, 62H = = MÃ 7 ĐOẠN (NGÀN/TRĂM).
61H, 60H = MÃ 7 ĐOẠN (CHỤC/ĐƠN VỊ).
BCD3ADCTO7SEG:
LẤY LẠI GIÁ TRỊ CHO DPH, DPL,
ACC TỪ STACK
NẠP ĐỊA CHỈ VÙNG MÃ
(DPTR) = CODE7SEG
RET
NẠP SỐ BCD NÉN CẦN GIẢI MÃ
(A) = (R6) =
X Y
0 Y
GIẢI MÃ DỮ LIỆU
(A) = (@A+DPTR)
CẤT MÃ 7 ĐOẠN CỦA BCD HÀNG ĐƠN VỊ
VÀO Ô NHỚ

(60H) = (A)
NẠP SỐ BCD NÉN CẦN GIẢI MÃ
(A) = (R6) =
X Y
0 X
GIẢI MÃ DỮ LIỆU
(A) = (@A+DPTR)
CẤT MÃ 7 ĐOẠN CỦA BCD HÀNG CHỤC VÀO
Ô NHỚ
(61H) = (A)
CẤT MÃ 7 ĐOẠN CỦA KÝ TỰ “=“ VÀO Ô NHỚ
(64H) = FFH
CẤT MÃ 7 ĐOẠN CỦA KÝ TỰ “H“ VÀO Ô NHỚ
(66H) = A1H
CẤT MÃ 7 ĐOẠN CỦA KÝ TỰ “C“ VÀO Ô NHỚ
(67H) = 88H
XỬ LÝ ĐỂ LẤY GIÁ TRỊ THỨ NHẤT TRONG
SỐ BCD NÉN (4 BIT THẤP)
(A) =
NẠP SỐ BCD NÉN CẦN GIẢI MÃ
(A) = (R7) =
X Y
0 Y
GIẢI MÃ DỮ LIỆU
(A) = (@A+DPTR)
CẤT MÃ 7 ĐOẠN CỦA BCD HÀNG TRĂM VÀO
Ô NHỚ
(62H) = (A)
XỬ LÝ ĐỂ LẤY GIÁ TRỊ THỨ HAI TRONG SỐ
BCD NÉN (4 BIT CAO)

(A) =
NẠP SỐ BCD NÉN CẦN GIẢI MÃ
(A) = (R7) =
X Y
0 X
GIẢI MÃ DỮ LIỆU
(A) = (@A+DPTR)
CẤT MÃ 7 ĐOẠN CỦA BCD HÀNG NGÀN VÀO
Ô NHỚ
(63H) = (A)
XỬ LÝ ĐỂ LẤY GIÁ TRỊ THỨ NHẤT TRONG
SỐ THỨ TỰ KÊNH (4 BIT THẤP)
(A) =
NẠP SỐ THỨ TỰ KÊNH CẦN GIẢI MÃ
(A) = (R5) = X Y
0 Y
GIẢI MÃ DỮ LIỆU
(A) = (@A+DPTR)
CẤT MÃ 7 ĐOẠN CỦA SỐ THỨ TỰ KÊNH
CẦN CHUYỂN ĐỔI A/D VÀO Ô NHỚ
(65H) = (A)

N. HỆ THỐNG ĐIỀU KHIỂN ADC.
Bài 4: Chương trình điều khiển biến đổi A/D thông qua ADC0809 và hiển thị giá trị của bốn kênh ngõ vào
(kênh IN0, IN1, IN2 và IN3) lên bốn LED 7 đoạn (LED3, LED2, LED1 và LED0: theo giá trị điện áp
thực, đơn vị là mV), LED7 hiển thị kênh ngõ vào. Việc chuyển đổi kênh biến đổi và hiển thị được thực
hiện một cách lần lượt, mỗi lần cách nhau 5s.
Giáo trình thực hành vi xử lý. 20 Biên soạn: Phạm Quang Trí
;***************************************************
;CHUONG TRINH DIEU KHIEN BIEN DOI A/D THONG QUA ADC0809 VA

;HIEN THI GIA TRI SO (DANG SO DEC) CUA 4 KENH 0,1,2,3 LEN BON LED 7 DOAN
;THEO GIA TRI DIEN AP THUC (DON VI TINH LA mV), CAC KENH DUOC HIEN THI LAN LUOT
;CACH NHAU MOT KHOANG THOI GIAN NGAN
;***************************************************
;KET NOI: 8 LED -> PORT1
; SEL LED -> PORT0
; MULTI, 7SEG IN (DP -> A), MULTI INT, CA, ACTIVE = 0
; ANALOG IN -> IN0 ADC0809
; DIGITAL OUT -> PORT3
; START -> P2.0 EOC -> P2.1
; OE -> P2.2 ALE -> P2.3
; A0 -> P2.4 A1 -> P2.5 A2 -> P2.6
; CLOCK -> 500KHz
;***************************************************
;DINH NGHIA CAC THONG SO
;***************************************************
START BIT P2.0 ;BIT KHOI DONG ADC
EOC BIT P2.1 ;BIT BAO KET THUC QUA TRINH CHUYEN DOI A/D
OE BIT P2.2 ;BIT CHO PHEP XUAT GIA TRI ADC
ALE BIT P2.3 ;BIT CHO PHEP CHOT DIA CHI
A0 BIT P2.4 ;BIT CHON NGO VAO ANALOG CAN BIEN DOI
A1 BIT P2.5
A2 BIT P2.6
DIG_OUT EQU P3 ;PORT DOC GIA TRI TU ADC XUAT RA
;***************************************************
ORG 00H
MAIN:
MOV P2,#02H ;CAU HINH CA CHAN DIEU KHIEN BAN DAU CHO ADC
MOV DIG_OUT,#0FFH ;CAU HINH PORT 3 LA PORT NHAP GIA TRI
MP1:

MOV R5,#00H ;KENH MAC DINH - KENH 0 (IN0)
MP2:
ACALL CONVERSATION ;THUC HIEN CHUYEN DOI ADC
;****************************************************
MOV B,#20 ;DO PHAN GIAI CUA ADC = VREF / 255 = 5V / 255 = 19.6mV -> 20mV
MUL AB ;DOI GIA TRI DIGITAL NHAN TU ADC SANG THANH GIA TRI DIEN AP (mV)
MOV R7,B ;LAY GIA TRI DIEN AP QUI DOI DE GIAI MA VA HIEN THI
MOV R6,A
ACALL BIN16TOBCD ;GIAI MA GIA TRI ADC (DANG BIN) SANG BCD
ACALL BCD3ADCTO7SEG ;GIAI MA GIA TRI ADC (DANG BCD) SANG MA 7 DOAN
ACALL DELAY_SCAN ;TAO THOI GIAN TRE GIUA CAC KENH CO GOI CTC QUET HIEN THI
INC R5 ;CHUYEN SANG KENH CHUYEN DOI KE TIEP
CJNE R5,#04H,MP2 ;KIEM TRA DA CHUYEN DOI XONG TAT CA CAC KENH QUI DINH
SJMP MP1
;****************************************************
;CTC DIEU KHIEN ADC THUC HIEN CHUYEN DOI A/D VA DOC GIA TRI ADC VE VI DIEU KHIEN
;****************************************************
;NAME: CONVERSATION.
;INPUT: R5 = SO THU TU KENH CAN CHUYEN DOI
; START BIT P2.0 ;BIT KHOI DONG ADC
; EOC BIT P2.1 ;BIT BAO KET THUC QUA TRINH CHUYEN DOI A/D
; OE BIT P2.2 ;BIT CHO PHEP XUAT GIA TRI ADC
; ALE BIT P2.3 ;BIT CHO PHEP CHOT DIA CHI
; A0 BIT P2.4 ;BIT CHON NGO VAO ANALOG CAN BIEN DOI
; A1 BIT P2.5
; A2 BIT P2.6
; DIG_OUT EQU P3 ;PORT DOC GIA TRI TU ADC XUAT RA .
;OUTPUT: ACC = GIA TRI DIGITAL SAU KHI CHUYEN DOI THU DUOC TU ADC0809.
;****************************************************
CONVERSATION:


CLR A0 ;DAT KENH CHUYEN DOI MAC DINH LA KENH 0 (IN0)
CLR A1
CLR A2
MOV A,P2 ;THIET LAP KENH CAN CHUYEN DOI CHO CTC
N. HỆ THỐNG ĐIỀU KHIỂN ADC.
Bài 4: Chương trình điều khiển biến đổi A/D thông qua ADC0809 và hiển thị giá trị của bốn kênh ngõ vào
(kênh IN0, IN1, IN2 và IN3) lên bốn LED 7 đoạn (LED3, LED2, LED1 và LED0: theo giá trị điện áp
thực, đơn vị là mV), LED7 hiển thị kênh ngõ vào. Việc chuyển đổi kênh biến đổi và hiển thị được thực
hiện một cách lần lượt, mỗi lần cách nhau 5s.
Giáo trình thực hành vi xử lý. 21 Biên soạn: Phạm Quang Trí
SWAP A ;PHAI SWAP VI BIT QUI DINH DIA CHI NAM O 4 BIT CAO
ORL A,R5
SWAP A
MOV P2,A
SETB ALE ;TAO XUNG ALE (ALE = 1)
NOP
NOP
SETB START ;TAO XUNG START (START = 1)
NOP
NOP
CLR ALE ;KET THUC XUNG ALE (ALE = 0)
CLR START ;KET THUC XUNG START (START = 0)
ACALL DELAY_ADC ;TAO THOI GIAN TRE CHO VIEC CHUYEN DOI A/D CUA ADC0809
SETB OE ;TAO XUNG OE (OE = 1)
NOP
NOP
NOP
NOP
MOV A,DIG_OUT ;DOC GIA TRI TU ADC0809 VAO VI DIEU KHIEN

CLR OE ;KET THUC XUNG OE (OE = 0)
RET
;****************************************************
DELAY_ADC: ;CHUONG TRINH CON TAO THOI GIAN TRE 120US DE THUC HIEN CHUYEN DOI A/D
PUSH 00H
MOV R0,#60
DJNZ R0,$
POP 00H
RET
;***************************************************
;CTC CHUYEN DOI SO BINARY 16 BIT (<= 9999) SANG SO BCD.
;***************************************************
;NAME: BIN16TOBCD.
;INPUT: R7,R6 = SO BCD 16 BIT (<= 9999).
;OUTPUT: R7,R6 = SO BCD (NGAN - TRAM - CHUC - DON VI).
;***************************************************
BIN16TOBCD:
PUSH ACC
PUSH B
MOV B,#10
ACALL DIV16TO8 ;LAY R7,R6 CHIA CHO 10
PUSH B ;CAT SO HANG DON VI
MOV B,#10
ACALL DIV16TO8 ;TIEP TUC CHIA CHO 10
PUSH B ;CAT SO HANG CHUC
MOV B,#10
MOV A,R6
DIV AB ;TIEP TUC CHIA CHO 10
PUSH B ;CAT SO HANG TRAM, ACC CHUA SO HANG NGAN
SWAP A ;DUA SO HANG NGAN LEN 4 BIT CAO

POP B ;LAY SO HANG TRAM TU STACK
ORL A,B ;KET HOP SO HANG NGAN VA SO HANG TRAM
MOV R7,A ;R7 = NGAN - TRAM
POP ACC ;LAY SO HANG CHUC TU STACK
SWAP A ;DUA SO HANG CHUC LEN 4 BIT CAO
POP B ;LAY SO HANG DON VI TU STACK
ORL A,B ;KET HOP SO HANG CHUC VA SO HANG DON VI
MOV R6,A ;R6 = CHUC - DON VI
POP B
POP ACC
RET
;***************************************************
;CTC CHIA SO BINARY 16 BIT CHO SO BINARY 8 BIT.
;***************************************************
;NAME: DIV16TO8.
;INPUT: R7,R6: SO BINARY 16 BIT
; B: SO BINARY 8 BIT
N. HỆ THỐNG ĐIỀU KHIỂN ADC.
Bài 4: Chương trình điều khiển biến đổi A/D thông qua ADC0809 và hiển thị giá trị của bốn kênh ngõ vào
(kênh IN0, IN1, IN2 và IN3) lên bốn LED 7 đoạn (LED3, LED2, LED1 và LED0: theo giá trị điện áp
thực, đơn vị là mV), LED7 hiển thị kênh ngõ vào. Việc chuyển đổi kênh biến đổi và hiển thị được thực
hiện một cách lần lượt, mỗi lần cách nhau 5s.
Giáo trình thực hành vi xử lý. 22 Biên soạn: Phạm Quang Trí
;OUTPUT: R7,R6: KET QUA CUA PHEP CHIA
; B: SO DU CUA PHEP CHIA
;***************************************************
DIV16TO8:
PUSH 02H ;CAT THANH GHI R2
PUSH ACC ;CAT THANH GHI A
MOV R2,#16 ;CHO PHEP DICH 16 LAN

CLR A
DIVIDE:
XCH A,R6
CLR C ;DICH BIT 7 CU R6 VAO
RLC A ;CARRY, BIT 0 CUA R6
XCH A,R6 ;BANG 0.
XCH A,R7 ;DICH BIT CARRY VAO
RLC A ;BIT 0 CUA R7
XCH A,R7
RLC A ;DICH BIT 7 CUA R7 VAO A.
CJNE A,B,NOT_EQUAL ;XEM SO BIT DA DICH >=
SJMP A_GREATER_EQ_B ;SO CHIA CHUA ?
NOT_EQUAL:
JC BELOW ;N: THUONG SO = 0 TRONG R6.
A_GREATER_EQ_B:
SUBB A,B ;Y: SO DU CAT TRONG A.
XCH A,R6
ORL A,#1 ;THUONG SO = 1
XCH A,R6 ;CAT TRONG R6
BELOW:
DJNZ R2,DIVIDE ;DICH TIEP DEN 16 LAN.
XCH A,B ;SAU 16 LAN DICH TA DUOC B = SO DU.
POP ACC
POP 02H
RET
;***************************************************
;CTC QUET HIEN THI LED 7 DOAN (8 LED 7 DOAN).
;***************************************************
;LED: ANODE CHUNG, KICH HOAT MUC 0, 7 DOAN: DP (MSB) -> A (LSB)
;DU LIEU HIEN THI CHUA TRONG O NHO CUA RAM.

;***************************************************
;NAME: DISP7SEGMUL8.
;INPUT: 67H,66H = MA 7 DOAN (CH TRIEU - TRIEU).
; 65H,64H = MA 7 DOAN (TR NGAN - CH NGAN).
; 63H,62H = MA 7 DOAN (NGAN - TRAM).
; 61H,60H = MA 7 DOAN (CHUC - DON VI).
;OUTPUT: P0 = 7 DOAN LED - DP (MSB) -> A (LSB).
; P1 = CHON LED - LEFT (MSD) -> RIGHT (LSD).
;***************************************************
DISP7SEGMUL8:
PUSH ACC ;CAT TAM THOI GIA TRI CAC THANH GHI
PUSH 00H
MOV A,#7FH ;MA QUET
MOV R0,#67H ;DIA CHI VUNG MA HIEN THI
DISP:
MOV P0,@R0 ;XUAT MA HIEN THI
MOV P1,A ;XUAT MA QUET
LCALL DELAYLED
MOV P1,#0FFH ;CHONG LEM
DEC R0 ;LAY MA HIEN THI KE TIEP
RR A ;CHUYEN SANG LED KE TIEP
CJNE R0,#5FH,DISP ;KIEM TRA DA QUET XONG CHUA
POP 00H ;PHUC HOI GIA TRI CHO CAC THANH GHI
POP ACC
RET
;****************************************************
DELAYLED: ;CHUONG TRINH CON TAO THOI GIAN TRE 2.5MS
PUSH 00H
PUSH 01H
N. HỆ THỐNG ĐIỀU KHIỂN ADC.

Bài 4: Chương trình điều khiển biến đổi A/D thông qua ADC0809 và hiển thị giá trị của bốn kênh ngõ vào
(kênh IN0, IN1, IN2 và IN3) lên bốn LED 7 đoạn (LED3, LED2, LED1 và LED0: theo giá trị điện áp
thực, đơn vị là mV), LED7 hiển thị kênh ngõ vào. Việc chuyển đổi kênh biến đổi và hiển thị được thực
hiện một cách lần lượt, mỗi lần cách nhau 5s.
Giáo trình thực hành vi xử lý. 23 Biên soạn: Phạm Quang Trí
MOV R1,#5
DEL:
MOV R0,#250
DJNZ R0,$
DJNZ R1,DEL
POP 01H
POP 00H
RET
;***************************************************
DELAY_SCAN: ;CHUONG TRINH CON TAO THOI GIAN TRE 2S CO GOI CTC GIAI MA VA QUET HIEN THI
PUSH 00H
MOV R0,#200
MOV TMOD,#01H
LOOP2:
MOV TH0,#HIGH(-10000)
MOV TL0,#LOW(-10000)
SETB TR0
SCAN: ;LIEN TUC GOI CTC QUET HIEN THI TRONG LUC TIMER DANG CHAY
ACALL DISP7SEGMUL8 ;HIEN THI GIA TRI LEN LED 7 DOAN
JNB TF0,SCAN
CLR TR0
CLR TF0
DJNZ R0,LOOP2
POP 00H
RET

;***************************************************
;CTC GIAI MA TU SO BCD NEN SANG MA 7 DOAN (3 SO BCD) CO KEM CHUOI "CHx=".
;***************************************************
;LED: ANODE CHUNG, 7 DOAN: DP (MSB) -> A (LSB)
;GIA TRI GIAI MA: 0 -> 9
;***************************************************
;NAME: BCD3ADCTO7SEG.
;INPUT: R7,R6 = SO BCD (NGAN - TRAM - CHUC - DON VI).
; R5 = CHUA SO THU TU CUA KENH CHUYEN DOI
;OUTPUT: 67H,66H = CHUOI KY TU "CH".
; 65H = SO THU TU KENH.
; 64H = CHUOI KY TU "=".
; 63H,62H = MA 7 DOAN (NGAN - TRAM)
; 61H,60H = MA 7 DOAN (CHUC - DON VI).
;***************************************************
BCD3ADCTO7SEG:
PUSH DPH ;CAT TAM THOI GIA TRI CAC THANH GHI
PUSH DPL
PUSH ACC

MOV DPTR,#CODE7SEG ;DIA CHI VUNG MA 7 DOAN

MOV A,R6 ;LAY SO BCD NEN 1 (CHUC - DON VI) CAN GIAI MA
ANL A,#0FH ;XOA 4 BIT CAO
MOVC A,@A+DPTR ;LAY MA 7 DOAN TUONG UNG
MOV 60H,A ;CAT HANG DON VI VAO O NHO

MOV A,R6 ;LAY SO BCD NEN 1 (CHUC - DON VI) CAN GIAI MA
ANL A,#0F0H ;XOA 4 BIT THAP
SWAP A ;HOAN CHUYEN CAO - THAP

MOVC A,@A+DPTR ;LAY MA 7 DOAN TUONG UNG
MOV 61H,A ;CAT HANG CHUC VAO O NHO

MOV A,R7 ;LAY SO BCD NEN 2 (NGAN - TRAM) CAN GIAI MA
ANL A,#0FH ;XOA 4 BIT CAO
MOVC A,@A+DPTR ;LAY MA 7 DOAN TUONG UNG
MOV 62H,A ;CAT HANG TRAM VAO O NHO

MOV A,R7 ;LAY SO BCD NEN 2 (NGAN - TRAM) CAN GIAI MA
ANL A,#0F0H ;XOA 4 BIT THAP
SWAP A ;HOAN CHUYEN CAO - THAP
N. HỆ THỐNG ĐIỀU KHIỂN ADC.
Bài 4: Chương trình điều khiển biến đổi A/D thông qua ADC0809 và hiển thị giá trị của bốn kênh ngõ vào
(kênh IN0, IN1, IN2 và IN3) lên bốn LED 7 đoạn (LED3, LED2, LED1 và LED0: theo giá trị điện áp
thực, đơn vị là mV), LED7 hiển thị kênh ngõ vào. Việc chuyển đổi kênh biến đổi và hiển thị được thực
hiện một cách lần lượt, mỗi lần cách nhau 5s.
Giáo trình thực hành vi xử lý. 24 Biên soạn: Phạm Quang Trí
MOVC A,@A+DPTR ;LAY MA 7 DOAN TUONG UNG
MOV 63H,A ;CAT HANG NGAN VAO O NHO

MOV 64H,#0B7H ;CAT MA KY TU "="

MOV A,R5 ;LAY SO BCD CUA THU TU KENH CAN CHUYEN DOI
ANL A,#0FH ;XOA 4 BIT CAO
MOVC A,@A+DPTR ;LAY MA 7 DOAN TUONG UNG
MOV 65H,A ;CAT SO THU TU KENH VAO O NHO

MOV 66H,#89H ;CAT MA KY TU "H"
MOV 67H,#0C6H ;CAT MA KY TU "C"


POP ACC ;PHUC HOI GIA TRI CHO CAC THANH GHI
POP DPL
POP DPH
RET
;***************************************************
CODE7SEG: ;VUNG CHUA MA 7 DOAN (0 -> 9)
DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
END
1.4 Thực hiện lần lượt các bước từ 1.3 đến 1.8 tương tự như bài trên.
2 Bài tập:
• Bài 1: Hãy viết chương trình điều khiển biến đổi A/D thông qua ADC0809 và hiển thị giá trị của hai kênh
ngõ vào (IN0 và IN1) lên bốn LED 7 đoạn (LED1 và LED0: kênh IN0; LED4 và LED3: kênh IN1; dưới
dạng số HEX từ 00H -> FFH).
• Bài 2: Hãy viết chương trình điều khiển biến đổi A/D thông qua ADC0809 và hiển thị giá trị của ba kênh
ngõ vào (IN2, IN3 và IN4) lên sáu LED 7 đoạn (LED1 và LED0: kênh IN2; LED4 và LED3: kênh IN3;
LED7 và LED6: kênh IN4; dưới dạng số HEX từ 00H -> FFH).
• Bài 3: Hãy viết chương trình điều khiển biến đổi A/D thông qua ADC0809 và hiển thị giá trị của hai kênh
ngõ vào (kênh IN6, IN7) lên sáu LED 7 đoạn (LED2, LED1 và LED0: kênh IN6; LED7, LED6 và LED5:
kênh IN7; dưới dạng số DEC từ 0 -> 255).
• Bài 4: Hãy viết chương trình điều khiển biến đổi A/D thông qua ADC0809 và hiển thị giá trị của tám kênh
ngõ vào (kênh IN0 -> IN7) lên ba LED 7 đoạn (LED2, LED1 và LED0; dưới dạng số thập phân từ 0 ->
255), LED7 hiển thị kênh ngõ vào. Việc chuyển đổi kênh biến đổi được thực hiện bằng cách nhấn lần lượt
các nút nhấn KEY0 -> KEY7.
• Bài 5: Hãy viết chương trình điều khiển biến đổi A/D thông qua ADC0809 và hiển thị giá trị của tám kênh
ngõ vào (kênh IN0 -> IN7) lên ba LED 7 đoạn (LED2, LED1 và LED0; dưới dạng số thập phân từ 0 ->
255), LED7 hiển thị kênh ngõ vào. Việc chuyển đổi kênh biến đổi được thực hiện bằng cách nhấn nút
KEY0.
• Bài 6: Hãy viết chương trình điều khiển biến đổi A/D thông qua ADC0809 và hiển thị giá trị điện áp của
hai kênh ngõ vào (kênh IN0, IN1) lên bốn LED 7 đoạn (LED3: hàng đơn vị; LED2, LED1 và LED0: ba số
phần thập phân), LED7 hiển thị kênh ngõ vào. Việc chuyển đổi kênh biến đổi được thực hiện bằng cách

nhấn nút KEY0.
• Bài 7: Sinh viên tự mình suy nghĩ và phát triển thêm chương trình.
3 Hướng dẫn:
Quá trình biến đổi A/D được thực hiện qua các bước sau:
o Xác lập địa chỉ chọn kênh ngõ vào (A0, A1, A2).
o Tạo xung START/ALE bằng cách xuất một giá trị bất kỳ ra ngoại vi ADC0809 với địa chỉ ngoại vi
đã chọn (CS: Chip Select).
o Tạo thời gian delay 120
µ
s.
o Đọc giá trị từ ngoại vi ADC0809 với địa chỉ ngoại vi đã chọn (giá trị này có tầm từ 0 - 255 tùy
theo điện áp ngõ vào từ 0 - 5V

độ phân giải là 5V/255 = 19,6 mV).
o Đổi giá trị này thành điện áp (tính bằng mV) bằng cách nhân với 19,6

20.
o Đổi giá trị này ra mã BCD nén.
o Xuất ra LED 7 đoạn để hiển thị.
N. HỆ THỐNG ĐIỀU KHIỂN ADC.
Bài 4: Chương trình điều khiển biến đổi A/D thông qua ADC0809 và hiển thị giá trị của bốn kênh ngõ vào
(kênh IN0, IN1, IN2 và IN3) lên bốn LED 7 đoạn (LED3, LED2, LED1 và LED0: theo giá trị điện áp
thực, đơn vị là mV), LED7 hiển thị kênh ngõ vào. Việc chuyển đổi kênh biến đổi và hiển thị được thực
hiện một cách lần lượt, mỗi lần cách nhau 5s.
Giáo trình thực hành vi xử lý. 25 Biên soạn: Phạm Quang Trí
Đổi số nhị phân 8 bit thành mã BCD nén (packed BCD):
o Lấy giá trị cần chuyển đổi (0 – 255) chia cho 10

Số dư sẽ là mã BCD hàng đơn vị.
o Lấy kết quả (thương số) của phép chia trên chia tiếp cho 10


Số dư sẽ là mã BCD hàng chục.
o Kết quả (thương số) của phép chia trên

Mã BCD hàng trăm.
o Kết hợp mã BCD của hàng chục và hàng đơn vị lại thành mã BCD nén. Còn mã BCD của hàng
trăm thì giữ nguyên.
o Chương trình mẫu:
;***************************************************
;CTC CHUYEN DOI SO BINARY 8 BIT (<= 255) SANG SO BCD.
;NAME: BIN8TOBCD.
;INPUT: R7 = SO BCD 8 BIT (<= 255).
;OUTPUT: R7,R6 = SO BCD (TRAM - CHUC - DON VI).
;***************************************************
BIN8TOBCD:
PUSH ACC
PUSH B
MOV B,#10
MOV A,R7
DIV AB ;LAY R7 CHIA CHO 10
PUSH B ;CAT SO HANG DON VI
MOV B,#10
DIV AB ;LAY KET QUA TREN CHIA TIEP CHO 10
MOV R7,A ;R7 = TRAM
MOV A,B ;LAY SO HANG CHUC
SWAP A ;DUA SO HANG CHUC LEN 4 BIT CAO
POP B ;LAY SO HANG DON VI TU STACK
ORL A,B ;KET HOP SO HANG CHUC VA SO HANG DON VI
MOV R6,A ;R6 = CHUC - DON VI
POP B

POP ACC
RET
;***************************************************
Đổi số nhị phân 16 bit thành mã BCD nén:
o Công việc thực hiện tương tự như đối với số nhị phân 8 bit là lần lượt chia giá trị cần chuyển đổi
cho 10. Tuy nhiên, cần phải tạo ra một chương trình con thực hiện việc chia số 16 bit cho 10 (vì giá trị cần đổi
lúc này là số 16 bit).
o Chương trình mẫu:
;***************************************************
;CTC CHUYEN DOI SO BINARY 16 BIT (<= 9999) SANG SO BCD.
;NAME: BIN16TOBCD.
;INPUT: R7,R6 = SO BCD 16 BIT (<= 9999).
;OUTPUT: R7,R6 = SO BCD (NGAN - TRAM - CHUC - DON VI).
;***************************************************
BIN16TOBCD:
PUSH ACC
PUSH B
MOV B,#10
ACALL DIV16TO8 ;LAY R7,R6 CHIA CHO 10
PUSH B ;CAT SO HANG DON VI
MOV B,#10
ACALL DIV16TO8 ;TIEP TUC CHIA CHO 10
PUSH B ;CAT SO HANG CHUC
MOV B,#10
MOV A,R6
DIV AB ;TIEP TUC CHIA CHO 10
PUSH B ;CAT SO HANG TRAM, ACC CHUA SO HANG NGAN
SWAP A ;DUA SO HANG NGAN LEN 4 BIT CAO
POP B ;LAY SO HANG TRAM TU STACK
ORL A,B ;KET HOP SO HANG NGAN VA SO HANG TRAM

MOV R7,A ;R7 = NGAN - TRAM
POP ACC ;LAY SO HANG CHUC TU STACK
SWAP A ;DUA SO HANG CHUC LEN 4 BIT CAO
POP B ;LAY SO HANG DON VI TU STACK

×