Upload
phungxuyen
View
243
Download
3
Embed Size (px)
Citation preview
BỘ GIÁO DỤC VÀ ĐÀO TẠO
THỰC HÀNH
VI ĐIỀU KHIỂN
Biên soạn: ThS. Trần Viết Thắng KS. Bùi Hữu Hiên
www.hutech.edu.vn Tài Liệu Lưu Hành Tại HUTECH
THỰC HÀNH VI ĐIỀU KHIỂN I
MỤC LỤC
MỤC LỤC ...................................................................................... I
TỔNG QUAN VỀ KIT THÍ NGIỆM VI ĐIỀU KHIỂN UP8951 ...................... II
BÀI 1: SỬ DỤNG TẬP LỆNH 8951 ................................................................................... 1
BÀI 2: LED 7 ĐOẠN VÀ BÀN PHÍM ................................................................................11
BÀI 3: TIMER 8951 & PPI8255A ...................................................................................21
BÀI 4: NGẮT (INTERRUPT) ..........................................................................................33
BÀI 5: ĐIỀU KHIỂN ĐỘNG CƠ BƯỚC ............................................................................41
BÀI 6: ĐIỀU KHIỂN MA TRẬN LED ................................................................................46
BÀI 7: LCD TC1602A ....................................................................................................51
BÀI 8: ADC – DAC ........................................................................................................58
TÀI LIỆU THAM KHẢO ....................................................................
II TỔNG QUAN VỀ KIT THÍ NGHIỆM VI ĐIỀU KHIỂN uP8951
TỔNG QUAN VỀ KIT THÍ NGHIỆM VI ĐIỀU KHIỂN uP8951
KIT thí nghiệm gồm 10 module bố trí như trên hình 1
1.1 MICROCONTROLLER WITH EXTERNAL RAM:
Là khối điều khiển trung tâm gồm một vi điều khiển AT89C51 có kết nối với RAM
ngoài và một vi điều khiển AT89C2051.
AT89C51 có thể chạy bằng bộ nhớ trong (internal memory dung lượng 4Kb) hoặc
chạy bằng bộ nhớ ngoài (external memory dung lượng 8Kb).
Các socket trên module này bao gồm:
TÊN CHỨC NĂNG
JP7: P1_CPU PORT 1, CPU 89C51
JP8: P3_CPU PORT 3, CPU 89C51
JP3: P2_ADDRESS PORT 2, CPU 89C51
JP1: DATA_CPU PORT 0, CPU 89C51
JP2: DECODE2_LCD PORT 0, CPU 89C51
JP4: DECODE1_8255 Tín hiệu giải mã cho PPI 8255A
JP3: P1_89C2051 PORT 1, CPU 89C2051
JP4: P3_89C2051 PORT 3, CPU 89C2051
THỰC HÀNH VI ĐIỀU KHIỂN III 1.2 PPI 8255A:
Module giao tiếp song song, gồm các socket sau:
TÊN CHỨC NĂNG
JP9: DATA_8255 DATA BUS, 8255A
JP10: CTRL_8255 Các tín hiệu điều khiển 8255A
JP11: PA_8255 PORT A, 8255A
JP12: PB_8255 PORT B, 8255A
JB13: PC1_8255 PORT C, 8255A
JB14: PC2_8255 PORT C, 8255A
1.3 COUNTER:
Gồm một socket:
JP15: COUNTER, cung cấp xung cho mạch đếm, dùng để mô phỏng cho bài thí
nghiệm đếm sản phẩm.
1.4 MATRIX LED 8x5:
Module ma trận LED 8 hàng, 5 cột, các bit hàng và cột đều tác dụng ở mức
cao, Các socket bao gồm:
TÊN CHỨC NĂNG
JP24: DATA_MATRIX 8 ĐƯỜNG DATA MA TRẬN LED
JP25: CATHOD BLUE 5 ĐƯỜNG ĐIỀU KHIỂN CỘT LED XANH
JP26: CATHOD RED 5 ĐƯỜNG ĐIỀU KHIỂN CỘT LED ĐỎ
IV TỔNG QUAN VỀ KIT THÍ NGHIỆM VI ĐIỀU KHIỂN uP8951
1.5 LED _ LCD TC1602A:
Gồm 8 led đơn, 5 ly màu đỏ, tác dụng ở mức cao và một LCD TC1602A, module
gồm các socket sau:
TÊN CHỨC NĂNG
JP27: DATA LED 8 BIT ĐIỀU KHIỂN LED ĐƠN
JP22: DATA LCD 8 BIT DATA CỦA LCD
JP23: CONTROL_LCD ĐƯỜNG ĐIỀU KHIỂN ĐỌC/ GHI LCD
1.6 LED 7 ĐOẠN:
Module gồm 8 led 7 đoạn cathod chung, các đường DATA vào điều khiển đều tác
động ở mức cao. Các socket:
TÊN CHỨC NĂNG
JP20: DATA_LED7S. 8 BIT DATA CỦA LED 7 ĐOẠN
JP21: CONTROL_LED7S 8 BIT ĐIỀU KHIỂN LED
1.7 STEP MOTOR:
Gồm một động cơ bước và mạch điều khiển, có một socket:
JP28: STEP_MOTOR, các đường điều khiển đều tác động ở mức cao.
1.8 CONTROL_KEYBOARD:
Gồm 4 phím nhấn, có một socket:
JP29: DATA_SW
1.9 DAC0808:
THỰC HÀNH VI ĐIỀU KHIỂN V
Gồm một mạch DAC 8 bit sử dụng IC DAC0808, ngõ ra của mạch nối với một LED
5 ly, dung để điều khiển độ sang của LED theo giá trị số ở ngõ vào. Module có một
socket:
JP18: DATA_DAC, gồm 8 bit data của bộ biến đổi Số – Tương tự.
1.10 ADC0804:
Gồm một ADC 8 bit sử dụng IC ADC0804, ngõ vào tương tự là bộ cảm biến nhiệt
độ dùng LM335, module gồm hai socket:
TÊN CHỨC NĂNG
JP16: DATA_ADC 8 BIT NGÕ RA SỐ
JP17: CONTROL_ADC CÁC ĐƯỜNG TÍN HIỆU ĐIỀU KHIỂN
VI TỔNG QUAN VỀ KIT THÍ NGHIỆM VI ĐIỀU KHIỂN uP8951
PPI-8255A
PC2
PC7
PC5
PC3
JP12
PB_8255
12345678
PC1
PC2
PC5
JP14
PC2_8255
12345678
PC4
PC6PC7
PC4
PC0
PC3
PC6
PC1
JP10DEC
OD
E_8255
12345678
JP11
PA_8255
12345678
PC0
JP9
DA
TA_8255
12345678
U3
8255
3433323130292827
432140393837
1819202122232425
1415161713121110
536
98
35
6
D0D1D2D3D4D5D6D7
PA0PA1PA2PA3PA4PA5PA6PA7
PB0PB1PB2PB3PB4PB5PB6PB7
PC0PC1PC2PC3PC4PC5PC6PC7
RDWR
A0A1RESET
CS
JP13
PC1_8255
12345678
SƠ ĐỒ NGUYÊN LÝ CÁC KHỐI:
D4
JP1
DA
TA_C
PU
12345678
C6
33p
VCC
D1
A11
A5
A0
VCC
A8
INT1
Y7
D6D6
A9
WR
RXD
P1.1
R64270
RD
D2
U5 74LS138
123
15141312111097
645
ABC
Y0Y1Y2Y3Y4Y5Y6Y7
G1G2AG2B
P1.0
JP7
P1_
CPU
12345678
D7
R61 2K2
A15
U6A 74LS08
1
23
T1
P1.0
A14
RD
A9
RESET
A10
C8
10uF
Y2
11,0592Mhz
PSEN
RN6 10K
1 2 3 4 5 6 7 8 9
<Doc> <Rev Code>
MICROCONTROLLER WITH EXTERNAL RAMB
1 1Monday , July 24, 2006
Title
Size Document Number Rev
Date: Sheet of
T1
TXD1
WR
P1.2
A1
JP5
P1_89C20511
2345678
A15
Y5
P1.7
Y3
D2
U23
AT89C2051
1
54
1213141516171819
236789
11
RST/VPP
XTAL1XTAL2
P1.0/AIN0P1.1/AIN1
P1.2P1.3P1.4P1.5P1.6P1.7
P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.7
JP4DEC
OD
E1_8255
12345678
Y4
Y1
11,0592Mhz
R62 2K2
RXD
Y1
A8
A12
C9
10uF
P1.3
A11
P1.3
TXD1
P1.5P1.6
TXD
(0000H - 1FFFH)
RD
Y8
RN3 10K
1 2 3 4 5 6 7 8 9
A13
R60 2K2
D17
READY
PC INTERFACE
A3
A15
D0
A7
VCC
A12
JP3
P2_AD
DR
ESS
12345678
A13
COMPORT 2051
A12
INT1
U6C
7408
9 108
Y2
A14
D4
D1
INT0
VCC
A14
R63270
A13
P1.0
D5
A11
DB
9_2 (Male)
594837261
A1
RXD1
D19
DATA LOAD
P1.7
T0
RXD
DB
9_1 (Female)
594837261
R19 100
A10
INT0
D5
U6B
7408
4 56R59 2K2
VCC
C15
10p
D7
A4P1.4
C10
10uF
C5
10p
D3
D6
A2
Y6
D4A6
P1.4
RN4 10K
1 2 3 4 5 6 7 8 9
RN7 10K
123456789
TXD
SW1
MEMORY SELECTION
1 2C7 10uF/50V
RN5 10K
1 2 3 4 5 6 7 8 9
RES
ET
A0
U20
MAX232
134526
12
9
11
10
13
8
14
7
C1+C1-C2+C2-V+V-
R1OUT
R2OUT
T1IN
T2IN
R1IN
R2IN
T1OUT
T2OUT
P1.2
D7
P1.1
D5
U2
SN74LS374
3478
13141718
111
256912151619
D0D1D2D3D4D5D6D7
OELE
Q0Q1Q2Q3Q4Q5Q6Q7
WR
P1.1
P1.6
TXD
R28 10K
D2
P1.5
U1 AT89C51
9
18
19
2930
31
12345678
2122232425262728
1011121314151617
3938373635343332
RST
XTAL2
XTAL1
PSENALE/PROG
EA/V
PP
P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7
P2.0/A8P2.1/A9
P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15
P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD
P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7
RESET SW
JP6
P3_8
9C20
51
12345678
C23
10p
RXD1
D3
A8
A10
D3
WRY2
JP8
P3_C
PU
12345678
VCC
D0D1
C11
10uF
T0
A9D0
U4 6264
109876543
25242123
2
1112131516171819
22272026
A0A1A2A3A4A5A6A7A8A9A10A11A12
D0D1D2D3D4D5D6D7
OEWECS1CS2
RD
R67 10K
RN2 10K
1 2 3 4 5 6 7 8 9
THỰC HÀNH VI ĐIỀU KHIỂN VII
VCC
U18
LM555
3
4 8
5
26
7
OUT
RS
T
VC
C
CV
TRGTHR
DSCHG
C4
104
R48 330
C3470uF
D18
LED
Q14C828
J15 COUNTER
1 2 3 4 5 6 7 8
OPTO
21
54
R46 47K
R50 270
R49 4K7
R47 2K7
S5
JP21
CO
NTR
OL_
LED
7S 12345678
S1
S3
D25
D16
LED
R43270
S5
W1
U16
ULN2803
101 2 3 4 5 6 7 8
18 17 16 15 14 13 12 11
CO
M
IN1
IN2
IN3
IN4
IN5
IN6
IN7
IN8
OU
T1O
UT2
OU
T3O
UT4
OU
T5O
UT6
OU
T7O
UT8
D26
S5
R37 15K
S6
S1
S5
W4
Q12
A1013
R39270
S2
MATRIX LED 8x5
MLED1
1 2 13 12 10 18 3 4 7 11
16
15
17
14
8
5
6
9
B1 B2 B3 B4 B5 R1
R2
R3
R4
R5
W1
W2
W3
W4
W5
W6
W7
W8
S2
R42270
D12
LED
D23
S8S7
S8
W8
VCC
D27
JP24
DATA_MATRIX
1 2 3 4 5 6 7 8
W7
S1
4007 X 8
S3
RN1
10K
1 2 3 4 5 6 7 8 9
R32 15KQ7
A1013
S7
R44270
S6S5
D30
JP22DATA_LCD
1 2 3 4 5 6 7 8
S7
S2
LED8
764219
105
3 8
abcdefgp C
1
C2
JP26
CATHOD RED
1 2 3 4 5 6 7 8
W4
S3
R655/3W
D13
LED
S2
S5
W6
S4
R41270
U14
ULN2803
101 2 3 4 5 6 7 8
18 17 16 15 14 13 12 11
CO
M
IN1
IN2
IN3
IN4
IN5
IN6
IN7
IN8
OU
T1
OU
T2
OU
T3
OU
T4
OU
T5
OU
T6
OU
T7
OU
T8
U17
ULN2803
101 2 3 4 5 6 7 8
18 17 16 15 14 13 12 11
CO
M
IN1
IN2
IN3
IN4
IN5
IN6
IN7
IN8
OU
T1O
UT2
OU
T3O
UT4
OU
T5O
UT6
OU
T7O
UT8
W5
D29
S7S6
S4
LED4
764219
105
3 8
abcdefgp C
1
C2
JP23
CONTROL_LCD
1 2 3 4 5 6 7 8
W8
S1S1
C27 104
VCC
W5
W3
C28 104
S6
R40270
R10 10K
R45270
JP25
CATHOD BLUE
1 2 3 4 5 6 7 8
12VDC
W2
Q8
A1013
S2
LED2
764219
105
3 8
abcdefgp C
1
C2
S3
S8
D11
LED
R66 4K7
S8
Q13
A1013
Q6
A1013
S4
S7
S3
S8
R31 15K
R20 150 X 8
S7
5VDC
S4
S6
D10
LED
LED7
764219
105
3 8
abcdefgp C
1
C2
S3
C34 104
S6
C30 104
D15
LED
S3S3
S1
R38270
W7
U12
ULN2803
10
12345678
1817161514131211
COM
IN1IN2IN3IN4IN5IN6IN7IN8
OUT1OUT2OUT3OUT4OUT5OUT6OUT7OUT8
S8
S5
W1
JP27
DATA_LED
1 2 3 4 5 6 7 8
LED6
764219
105
3 8
abcdefgp C
1
C2
C31 104C32 104
D14
LED
S8
<Doc> <Rev Code>
MATRIX 8x5 AND LCDB
1 1Monday , July 24, 2006
Title
Size Document Number Rev
Date: Sheet of
S4S5
R36 15K
S4
S8
C29 104
Q5
A1013
S2
S4
W6
Q9
A1013
W2
D24
C33 104Q11
A1013
LED3
764219
105
3 8
abcdefgp C
1
C2
THIS IS THE LCD2 LINES x 16 CHARACTERS LA
MP
LCD1
7 8 9 10 11 12 13 14 4 5 6 3 1 2 15 16
D0
D1
D2
D3
D4
D5
D6
D7
RS
R/W
CS
CO
NST
GN
D
VCC
A K
U15
ULN2803
101 2 3 4 5 6 7 8
18 17 16 15 14 13 12 11
CO
M
IN1
IN2
IN3
IN4
IN5
IN6
IN7
IN8
OU
T1
OU
T2
OU
T3
OU
T4
OU
T5
OU
T6
OU
T7
OU
T8
S1
S4
LED5
764219
105
3 8
abcdefgp C
1
C2
D9
LED
VCC
S7
R33 15K
S2 S2
Q10
A1013
D28R34 15K
R30 15K
S6 S6
W3
S7
JP20DATA_LED7S
12345678
S1
R35 15K
LED1
764219
105
3 8
abcdefgp C
1
C2
U13 74LS244
2468
1
18161412
11131517
9753
19
A1A2A3A4
1OE
Y 1Y 2Y 3Y 4
A5A6A7A8
Y 5Y 6Y 7Y 8
2OE
VIII TỔNG QUAN VỀ KIT THÍ NGHIỆM VI ĐIỀU KHIỂN uP8951
R16270
R14 4K7
R15270
Q4TIP122
Q2TIP122
VCC
R13 4K7
D6
LED3
D5
LED4
MG1
MOTOR STEPPER
123
4 5 6
VCC
D2
4007
D7
LED2
D8
LED1
R18270
JP28
STEP
_MO
TOR 1
2345678
Q1TIP122
R11 4K7
D4
4007
R17220
D3
4007
Q3TIP122
D1
4007
R12 4K7
INC
JP29
DA
TA_SW
12345678
MODE
C19
101
ENTER
C21
101
DEC
C20
101
C22
101
THỰC HÀNH VI ĐIỀU KHIỂN IX
C16CAP
R54
5K
-
+
U22A
JR4558
3
21
84
R56 2K7
D21
5V1
C12
100uF
R52 10
U21 DAC0808
1
3
16
14 15
2
13
56789
101112
4
GND
VEE
COMPS
VR
EF
+
VR
EF
- Iout
VC
C
D7D6D5D4D3D2D1D0
IoutR68270
+12VDC
R572K7
C14
104
R58150
C17
104
D22
LED
R512K7
JP18
DA
TA_D
AC
12345678
VCC
R29 10
R55
10K
VCCVCC
R69
2K7
JP19
DAC_OUT
12
-
+
U22B
JR4558
5
67
84
R53 820
D20
4007
-12VDC
C13
104
VCC
JP16
DA
TA_A
DC
12345678-VCC
-
+
U8AJR4558
3
21
84
R81K
-
+
U8B JR45585
67
84
VCC
R3 470KU9
LM35
2
3
1VS
+
ADJ
GN
D
R9
1K
-VCC
R1
1K
C2
100uF/25V
JP17 CO
NTR
OL_A
DC
12345678
VCC
R5 1K
C1
1nF
VCC
VCC
U7
ADC0804
67
9
1112131415161718
194
51
23
+IN-IN
VREF/2
DB7DB6DB5DB4DB3DB2DB1DB0
CLKRCLKIN
INTRCS
RDWR
R41K
R71K
R6 1K
VCC
R210K
THỰC HÀNH VI ĐIỀU KHIỂN 1
BÀI 1: SỬ DỤNG TẬP LỆNH
8051
1.1 MỤC ĐÍCH YÊU CẦU: Giúp sinh viên làm quen với thiết bị và tìm hiểu một số nhóm lệnh quan trọng
trong tập lệnh của họ 8051
1.2 CHUẨN BỊ THÍ NGHIỆM: - Bộ thí nghiệm DHC_uPC8951
- Máy tính
- Kiểm tra cable truyền
- Xem các module: microcontroller, led đơn
1.3 TIẾN TRÌNH THÍ NGHIỆM:
1.3.1 Nhóm lệnh di chuyển dữ liệu, lệnh nhảy: a) Nối mạch thí nghiệm:
Nối JP7: P1_CPU trên module Microcontroler với JP27: DATA_LED trên module
LED, các led tương ứng từ led1 đến led8 sẽ nối với các bit P1.0 đến P1.7, các led đều
tác động ở mức cao.
b) Viết các chương trình ứng dụng:
Chương trình 1.1: Chớp tắt 8 led vô hạn lần.
MAIN:
MOV P1,#0FFH ; P1 <- 11111111B, các led đều sáng
CALL DELAY ; gọi chương trình trì hoãn DELAY
2 BÀI 1: SỬ DỤNG TẬP LỆNH 8051
MOV P1,#00H ; P1 <- 00000000B, các led đều tắt
CALL DELAY
LJMP MAIN ; nhảy đến MAIN để lập lại quá trình vô hạn
DELAY:
PUSH 06 ; cất nội dung R6 vào ngăn xếp
PUSH 07 ; cất nội dung R7 vào ngăn xếp
MOV R6,#255
LAP:
MOV R7,#255
DJNZ R7,$ ; X: DJNZ R7,X
DJNZ R6, LAP
POP 07 ; lấy lại giá trị cũ của R7 trong ngăn xếp
POP 06 ; lấy lại giá trị cũ của R0 trong ngăn xếp
RET ; kết thúc chương trình con
END
NHẮC LẠI:
DJNZ Ri, <NHÃN>: Ri là một trong các thanh ghi từ R0 -> R7, lệnh giảm nội
dung thanh ghi Ri một đơn vị, nếu Ri > 0 thì nhảy đến NHÃN chỉ định, ngược lại sẽ
chuyển sang thực hiện kế tiếp.
Chương trình 1.2: giống nội dung chương trình 01 nhưng lặp lại quá trình 10 lần.
HƯỚNG DẪN:
MOV Ri, # <SỐ LẦN LẶP (1->255)>
NHÃN:
LỆNH 1
LỆNH 2
.
THỰC HÀNH VI ĐIỀU KHIỂN 3 .
LỆNH n
DJNZ Ri,<NHÃN>
CHƯƠNG TRÌNH:
MOV R7,#10
MAIN:
MOV P1,#0FFH ; P1 <- 11111111B, các led đều sáng
CALL DELAY ; gọi chương trình trì hoãn DELAY
MOV P1,#00H ; P1 <- 00000000B, các led đều tắt
CALL DELAY
DJNZ R7,MAIN
SJMP $ ; “dừng chương trình”
DELAY:
PUSH 06 ; cất nội dung R6 vào ngăn xếp
PUSH 07 ; cất nội dung R7 vào ngăn xếp
MOV R6,#255
LAP:
MOV R7,#255
DJNZ R7,$ ; X: DJNZ R7,X
DJNZ R6, LAP
DJNZ R6, LAP
POP 07 ; lấy lại giá trị cũ của R7 trong ngăn xếp
POP 06 ; lấy lại giá trị cũ của R0 trong ngăn xếp
RET ; kết thúc chương trình con
END
4 BÀI 1: SỬ DỤNG TẬP LỆNH 8051
c) BÀI TẬP SV:
Chương trình 1.3: Hiển thị 1 led sáng, dịch dần từ D1 đến D8 vô hạn lần.
Chương trình 1.4: Hiển thị 1 led sáng, dịch dần từ D8 đến D1 với số lần lặp là 6.
1.3.2 Nhóm lệnh quay vòng: a) Nối mạch thí nghiệm:
Nối JP7: P3_CPU trên module Microcontroler vôùi JP27: DATA_LED trên module
LED, các led tương ứng từ led1 đến led8 sẽ nối với các bit P3.0 đến P3.7, các led đều
tác động ở mức cao.
b) Viết các chương trình ứng dụng:
Chương trình 1.5: viết chương trình dịch một led sáng từ D1 D8:
MAIN:
MOV A,#01H
BEGIN:
MOV P3,A
RL A
CALL DELAY
LJMP BEGIN
DELAY:
PUSH 06 ; cất nội dung R6 vào ngăn xếp
PUSH 07 ; cất nội dung R7 vào ngăn xếp
MOV R6,#255
LAP:
MOV R7,#255
DJNZ R7,$ ; X: DJNZ R7,X
DJNZ R6, LAP
POP 07 ; lấy lại giá trị cũ của R7 trong ngăn xếp
THỰC HÀNH VI ĐIỀU KHIỂN 5 POP 06 ; lấy lại giá trị cũ của R0 trong ngăn xếp
RET ; kết thúc chương trình con
END
Chương trình 1.6: viết chương trình dịch một led sáng từ D8 D1:
MAIN:
MOV A,#80H
BEGIN:
MOV P3,A
RR A
CALL DELAY
LJMP BEGIN
DELAY:
PUSH 06 ; cất nội dung R6 vào ngăn xếp
PUSH 07 ; cất nội dung R7 vào ngăn xếp
MOV R6,#255
LAP:
MOV R7,#255
DJNZ R7,$ ; X: DJNZ R7,X
DJNZ R6, LAP
POP 07 ; lấy lại giá trị cũ của R7 trong ngăn xếp
POP 06 ; lấy lại giá trị cũ của R0 trong ngăn xếp
RET ; kết thúc chương trình con
END
6 BÀI 1: SỬ DỤNG TẬP LỆNH 8051
Chương trình 1.7: viết chương trình sáng dần các led từ D1 D8:
MAIN:
MOV A,#01H
BEGIN:
SETB C
MOV P3, A
RLC A
CALL DELAY
JNC BEGIN
LJMP MAIN
DELAY:
PUSH 06 ; cất nội dung R6 vào ngăn xếp
PUSH 07 ; cất nội dung R7 vào ngăn xếp
MOV R6,#255
LAP:
MOV R7,#255
DJNZ R7,$ ; X: DJNZ R7,X
DJNZ R6, LAP
POP 07 ; lấy lại giá trị cũ cuûa R7 trong ngăn xếp
POP 06 ; lấy lại giá trị cũ của R0 trong ngăn xếp
RET ; kết thúc chương trình con
END
Chương trình 1.8: viết chương trình sáng dần các led từ D8 D1:
MAIN:
MOV A,#80H
THỰC HÀNH VI ĐIỀU KHIỂN 7 BEGIN:
SETB C
MOV P3, A
RRC A
CALL DELAY
JNC BEGIN
LJMP MAIN
DELAY:
PUSH 06 ; cất nội dung R6 vào ngăn xếp
PUSH 07 ; cất nội dung R7 vào ngăn xếp
MOV R6,#255
LAP:
MOV R7,#255
DJNZ R7,$ ; X: DJNZ R7,X
DJNZ R6,LAP
POP 07 ; lấy lại giá trị cũ của R7 trong ngăn xếp
POP 06 ; lấy lại giá trị cũ của R0 trong ngăn xếp
RET ; kết thúc chương trình con
END
c) BÀI TẬP SV:
Chương trình 1.9: viết chương trình tắt dần các led từ D1 D8.
Chương trình 1.10: viết chương trình tắt dần các led từ D8 D1.
Chương trình 1.11: viết chương trình tắt dần các led từ D8 D1, thực hiện lặp
lại 20 lần.
8 BÀI 1: SỬ DỤNG TẬP LỆNH 8051 1.3.3 Nhóm lệnh toán học:
a) Nối mạch thí nghiệm:
Nối JP7: P3_CPU trên module Microcontroler vôi JP27: DATA_LED trên module
LED, các led tương ứng từ led1 đến led8 sẽ nối với các bit P3.0 đến P3.7, các led đều
tác động ở mức cao.
b) Viết các chương trình ứng dụng:
Chương trình 1.12: Viết chương trình cộng 2 số sau: 12 + 34, hiển thị kết quả
trên các led.
MAIN:
MOV A,#12
ADD A,#34
MOV P3,A
SJMP $
END
Chương trình 1.13: Viết chương trình cộng 2 số sau: 12 + 34, hiển thị kết quả
trên các led.
MAIN:
MOV A,#12
SETB C
ADDC A,#34
MOV P3,A
SJMP $
END
So sánh kết quả của chương trình 1 và chương trình 2.
Chương trình 1.14: Viết chương trình chia 2 số 17 cho 3, hiển thị kết quả (phần
nguyên) trên các led.
THỰC HÀNH VI ĐIỀU KHIỂN 9 MAIN:
MOV A,#17
MOV B,#3
DIV AB
MOV P3,A
SJMP $
END
Chương trình 1.15: Viết chương trình chia 2 số 17 cho 3, hiển thị kết quả (phần
dư) trên các led.
MAIN:
MOV A,#17
MOV B,#3
DIV AB
MOV P3,B
SJMP $
END
Chương trình 1.16: Viết chương trình nhân 2 số 23 cho 14, hiển thị kết quả
(byte thấp) trên các led.
MAIN:
MOV A,#7
MOV B,#14
MUL AB
MOV P3,A
SJMP $
END
10 BÀI 1: SỬ DỤNG TẬP LỆNH 8051
Chương trình 1.17: Viết chương trình nhân 2 số 23 cho 14, hiển thị kết quả
(byte cao) trên các led.
MAIN:
MOV A,#7
MOV B,#14
MUL AB
MOV P3,B
SJMP $
END
THỰC HÀNH VI ĐIỀU KHIỂN 11
BÀI 2: LED 7 ĐOẠN & BÀN
PHÍM
2.1 MỤC ĐÍCH YÊU CẦU: Giúp sinh viên tìm hiểu cách hiển thị thông tin trên led 7 đoạn bằng phương
pháp quét và xử lý thông tin trên bàn phím điều khiển.
2.2 CHUẨN BỊ THÍ NGHIỆM: - Bộ thí nghiệm DHC_uPC8951
- Máy tính
- Kiểm tra cable truyền
- Xem sơ đồ mạch điều khiển led 7 đoạn và bàn phím
- 74244 là IC đệm một chiều 8 bit với ngõ vào là Ai và ngõ ra là Yi tương ứng:
OE AI YI
1 X Z
0 0 0
0 1 1
X: mức logic 1 hoặc 0
Z: trạng thái cách ly (tổng trở cao)
- 2803 là IC đệm đảo công suất, bên trong gồm một dãy 8 transistor có cấu
trúc như sau:
OUT1
GND
IN1
12 BÀI 2: LED 7 ĐOẠN & BÀN PHÍM
e
g
d
be f
poin
ta d f
point
g
b
c
COM
ca
C21
101
JP29
DA
TA_SW
12345678
ENTERDECINC MODE
C22
101
C20
101
C19
101
Dòng điện IC cực đại là 500mA, chân GND của 8 transistor được nối chung và đưa
ra tại chân số 9 của IC.
- LED 7 đoạn dung trong mạch là loại cathod chung có cấu trúc như sau:
S8
S1
S6
JP21
CO
NTR
OL_
LED
7S 12345678
S7
S1
S7S6
S3
S8
S4S5
S6S5
S2
S7
S4 S4S5
LED6
764219
105
3 8
abcdefgp C
1
C2
S6S7
S1
S4S5
JP20
DATA_LED7S
12345678
S4
S1
S6
S4S3
LED2
764219
105
3 8
abcdefgp C
1
C2
S1R20 150 X 8
S5
S1S2
S5
LED4
764219
105
3 8
abcdefgp C
1
C2
S3
U13 74LS244
2468
1
18161412
11131517
9753
19
A1A2A3A4
1OE
Y1Y2Y3Y4
A5A6A7A8
Y5Y6Y7Y8
2OE
S3S4
S6
S2
LED3
764219
105
3 8
abcdefgp C
1
C2
LED8
764219
105
3 8
abcdefgp C
1
C2S8
S2S2
S7S6
LED5
764219
105
3 8
abcdefgp C
1
C2
S1
S8 S8
U12
ULN2803
10
12345678
1817161514131211
COM
IN1IN2IN3IN4IN5IN6IN7IN8
OUT1OUT2OUT3OUT4OUT5OUT6OUT7OUT8
S4
S8
S3S2
S7
S1
S7
S3
S8
S5
LED1
764219
105
3 8
abcdefgp C
1
C2
S7
S5S6
S2 S2S3
LED7
764219
105
3 8abcdefgp C
1
C2S8
S3
2.3 TIẾN TRÌNH THÍ NGHIỆM: a) Nối mạch thí nghiệm:
- Nối JP29(DATA_SW) của bàn phím với P3_CPU (port 3 8951)
- Nối P1_CPU với JP20 (DATA_LED7S)
- Nối P2_ADDRESS với JP21 (CONTROL_LED7S)
THỰC HÀNH VI ĐIỀU KHIỂN 13
b) Viết các chương trình ứng dụng:
Viết chương trình hiển thị thông tin trên led 7 đoạn:
Chương trình 2.1: viết chương trình hiển thị số 5 trên LED1:
SỐ D7 D6 D5 D4 D3 D2 D1 D0 Giá trị
HEX p G f e d c b a
0
1
2
3
4
5 0 1 1 0 1 1 0 1 6DH
6
7
8
9
MAIN:
MOV P2,#00H ; tắt các led
MOV P1,#6DH ; đặt DATA số 5 ra P1
MOV P2,#01H ; mở nguồn led1
SJMP $
END
Chương trình 2.2: viết chương trình hiển thị số 54 trên 2 led 7 và 8.
HƯỚNG DẪN: theo sơ đồ nguyên lý ở trên, ta thấy không thể hiển thị 2 thông
tin khác nhau trên 2 led tại cùng thời điểm. Do đó: tại mỗi thời điểm (khoảng vài ms)
ta hiển thị thông tin trên 1 led, sau đó tắt led và chuyển sang hiển thị thông tin khác
14 BÀI 2: LED 7 ĐOẠN & BÀN PHÍM trên led kế tiếp. Thực hiện quá trình này liên tục, do hiện tượng lưu ảnh của mắt sẽ
thấy hai thông tin được hiển thị đồng thời.
MAIN:
MOV P2,#00H ; tắt các led
BEGIN:
MOV P1,#6DH ; đặt DATA 5 ra P1
SETB P2.6 ; mở nguồn led 7
CALL DELAY ; trì hoãn để mắt lưu ảnh thông tin
CLR P2.6 ; tắt nguồn led 7
MOV P1,#66H ; đặt thông tin DATA 4 ra P1
SETB P2.7 ; mở nguồn led 8
CALL DELAY ; trì hoãn để mắt lưu ảnh
CLR P2.7 ; tắt nguồn led 8
LJMP BEGIN ; lặp lại quá trình vô hạn
DELAY: ; chương trình DELAY ~ 1ms
PUSH 07H
MOV R7,#100
DJNZ $
POP 07H
RET
END
Chương trình 2.3: viết chương trình hiển thị các số tăng dần từ 0 9 trên led 8.
HƯỚNG DẪN:
MOVC A,@A+DPTR ; là lệnh gán vào thanh ghi A nội dung ô nhớ chương trình
có địa chỉ = (nội dung hiện tại của A + nội dung thanh ghi DPTR), ví dụ: A = 20 và
THỰC HÀNH VI ĐIỀU KHIỂN 15
DPTR = 1000 => A (1020); lệnh này trong chương trình sau dùng để đổi nội dung
một ô nhớ (có giá trị từ 0 đến 9) sang mã 7 đoạn của số đó.
CNT EQU 127 ; khai báo biến CNT tại ô nhớ RAM 127
MAIN:
MOV P2,#00H ; tắt các led
MOV CNT,#0 ; khởi động biến đếm = 0
MOV DPTR,#MA_7S ; lấy địa chỉ đầu bảng mã 7 đoạn
BEGIN:
MOV A,CNT
MOVC A,@A+DPTR ; đổi nội dung CNT ra mã 7 đoạn
MOV P1,A ; đặt mã 7 đoạn ra P1
SETB P2.7 ; mở nguồn led8
CALL DELAY ; trì hoãn
INC CNT ; tăng nội dung biến đếm
MOV A,CNT
CJNE A,#10,BEGIN ; nếu biến < 10 thì tiếp tục hiện thi
MOV CNT,#0 ; nếu biến = 10 thì gán về 0
LJMP BEGIN
DELAY:
PUSH 06 ; cất nội dung R6 vào ngăn xếp
PUSH 07 ; cất nội dung R7 vào ngăn xếp
MOV R6,#255
LAP:
MOV R7,#255
DJNZ R7,$ ; X: DJNZ R7,X
DJNZ R6, LAP
16 BÀI 2: LED 7 ĐOẠN & BÀN PHÍM
POP 07 ; lấy lại giá trị cũ của R7 trong ngăn xếp
POP 06 ; lấy lại giá trị cũ của R6 trong ngăn xếp
RET ; kết thúc chương trình con
MA_7S: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
END
BÀI TẬP:
Chương trình 2.4: viết chương trình hiển thị: 15-10-06 trên 8 led.
Chương trình 2.5: viết chương trình hiển thị các số tăng dần từ 00 – 99 trên 2
led 1 và 2.
HƯỚNG DẪN: dùng 1 ô nhớ chứa số đếm, trước khi hiển thị nội dung ô nhớ, ta
phải đổi ra thành 2 số thập phân (0 -9), sau đó lần lượt đổi từng số thập phân sang
mã 7 đoạn và quét trên 2 led:
CNT EQU 127
DONVI EQU 126
CHUC EQU 125
DOI_SO:
PUSH ACC
PUSH B
MOV A,CNT
MOV B,#10
DIV AB
MOV CHUC,A
MOV DONVI,B
POP B
POP ACC
RET
THỰC HÀNH VI ĐIỀU KHIỂN 17 Thực hành điều khiển các phím:
Phím SW1 nối chân P3.0; SW2 nối chân P3.1; SW3 nối chân P3.2; SW4 nối chân
P3.3.
Chương trình 2.6: Viết chương trình thực hiện:
- Nhấn SW1: hiển thị số 3 trên led8
- Nhấn SW2: hiển thị số 7 trên led8
- Nhấn SW3: tắt các thông tin đang hiển thị
HƯỚNG DẪN: dùng lệnh JNB bit, <NHÃN> để kiểm tra phím nhấn;
ví dụ:
JNB P3.0, HT3 (hiển thị 3); nếu SW1 nhấn thì logic tại P3.0 là 0, nên lệnh này
thỏa điều kiện nhảy đến nhãn HT3, ngược lại sẽ thực hiện lệnh kế tiếp.
SW1 BIT P3.0 ; khai báo kiểu BIT: SW1 P3.0
SW2 BIT P3.1
SW3 BIT P3.2
MAIN:
MOV P2,#00H ; tắt các led
SETB P2.7 ; mở nguồn led8
BEGIN:
JNB SW1,HT3 ; nếu SW1 nhấn thì HT3
JNB SW2,HT7
JNB SW3,TAT
LJMP BEGIN
SW1:
MOV P1,#4FH ; hiển thị số 7
LJMP BEGIN ; trở về tiếp tục kiểm tra phím
SW2:
18 BÀI 2: LED 7 ĐOẠN & BÀN PHÍM
MOV P1,#07H
LJMP BEGIN
SW3:
MOV P2,#00H
LJMP BEGIN
END
Chương trình 2.7: Viết chương trình thực hiện:
- Nhấn SW1: tăng nội dung hiển thị một đơn vị trên led1 (0-1-2-3-4-5…9-0)
- Nhấn SW2: giảm nội dung hiển thị một đơn vị trên led1 (9-8-7…2-1-0-9)
HƯỚNG DẪN: dùng một ô nhớ chứa số đếm, khi nhấn SW1, tăng nội dung ô nhớ,
sau đó trì hoãn một thời gian (chờ nhấc tay khỏi phím, thời gian này thường chọn từ
100ms -> 500ms); khi nhấn SW2, giảm nội dung ô nhớ 1 đơn vị, sau đó trì hoãn; nếu
không phím nào được nhấn thì đổi nội dung ô nhớ sang mã led 7 đoạn và hiển thị.
CNT EQU 127
SW1 BIT P3.0
SW2 BIT P3.1
MAIN:
MOV P2,#00H
SETB P2.0
MOV CNT,#0
BEGIN:
JNB SW1,TANG
JNB SW2,GIAM
MOV A,CNT
MOVC A,@A+DPTR
MOV P1,A
THỰC HÀNH VI ĐIỀU KHIỂN 19 LJMP BEGIN
TANG:
INC CNT
MOV A,CNT
CJNE A,#10,TROVE
MOV CNT,#0
TROVE:
CALL DELAY
LJMP BEGIN
GIAM:
DEC CNT
MOV A,CNT
CJNE A,#255,TROVE
MOV CNT,#0
LJMP TROVE
DELAY:
PUSH 05 ; cất nội dung R5 vào ngăn xếp
PUSH 06 ; cất nội dung R6 vào ngăn xếp
PUSH 07 ; cất nội dung R7 vào ngăn xếp
MOV R5,#2
LAP1:
MOV R6,#255
LAP:
MOV R7,#255
DJNZ R7,$ ; X: DJNZ R7,X
20 BÀI 2: LED 7 ĐOẠN & BÀN PHÍM
DJNZ R6, LAP
DJNZ R5,LAP1
POP 07 ; lấy lại giá trị cũ của R7 trong ngăn xếp
POP 06 ; lấy lại giá trị cũ của R6 trong ngăn xếp
POP 05 ; lấy lại giá trị cũ của R5 trong ngăn xếp
RET ; kết thúc chương trình con.
MA_7S: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
END
BÀI TẬP:
Chương trình 2.8: giống chương trình 1 nhưng hiển thị các số thay đổi trong
khoảng 00 – 99.
THỰC HÀNH VI ĐIỀU KHIỂN 21
BÀI 3: TIMER HỌ 8951 &
PPI8255A
3.1 MỤC ĐÍCH YÊU CẦU: Giúp sinh viên tìm hiểu về timer trong họ 8951 và IC giao tiếp song song có lập
trình điều khiển PPI8255A.
3.2 CHUẨN BỊ THÍ NGHIỆM: - Bộ thí nghiệm DHC_uPC8951
- Máy tính
- Kiểm tra cable truyền
- Xem sơ đồ mạch điều khiển led 7 đoạn và bàn phím
- Xem các module: microcontroller, PPI8255 và led 7 đoạn
Tìm hiểu cấu trúc timer trong vi điều khiển:
Vi điều khiển 89C51 có hai thanh ghi timer/counter 16 bit. Các thanh
ghi này có thể hoạt động ở một trong hai trạng thái timer hoặc counter. Mỗi
thanh ghi gồm 2 thanh ghi 8 bit ghép lại:
TLx : 8 BITPULSE INPUT
THx : 8 BIT
Cấu trúc của bộ Timer/ Counter trong 89C51 như hình sau:
22 BÀI 3: TIMER HỌ 8951 & PPI8255A
Hoạt động của bộ Timer/Counter được điều khiển bởi hai thanh ghi TCON và
TMOD.
a) Thanh ghi TCON (timer control):
Là thanh ghi 8 bit, có thể truy xuất byte hoặc bit
IE1
3
TF0 IE0
6
TF1
2
IT0
4
TR1
1
TR0
7 0
IT1
5
TF1: báo trạng thái tràn cho bộ Timer/Counter1.
TR1: điều khiển cấp xung cho bộ Timer/Counter1.
TF0: báo trạng thái tràn cho bộ Timer/Counter0.
TR0: điều khiển cấp xung cho bộ Timer/Counter0.
IE1: không liên quan đến hoạt động của bộ Timer/Counter, bit này dùng để báo
trạng thái ngắt ngoài 1 (khi trạng thái logic thay đổi từ 1 xuống 0 tại chân 13 vi
điều khiển, bit này được đặt lên mức logic 1).
THỰC HÀNH VI ĐIỀU KHIỂN 23 IT1: không liên quan đến hoạt động của bộ Timer/Counter, bit này cho phép
tác động ngắt ngoài 1 bằng cạnh xuống (default IT1 = 0, tác động ngắt ngoài
bằng mức thấp).
IE0: không liên quan đến hoạt động của bộ Timer/Counter, bit này dùng để
báo trạng thái ngắt ngoài 0 (khi trạng thái logic thay đổi từ 1 xuống 0 0 tại
chân 12 vi điều khiển, bit này được đặt lên mức logic 1).
IT0: không liên quan đến hoạt động của bộ Timer/Counter, bit này dùng để báo
trạng thái ngắt ngoài 0 bằng cạnh xuống (default IT1 = 0, tác động ngắt ngoài
bằng mức thấp).
b) Thanh ghi TMOD (timer mode):
Là thanh ghi 8 bit, chỉ có thể truy xuất byte
ÑIEÀU KHIEÅN TIMER 0
GATE
3
M1 M1
6
GATE
2
M0
4
C/T
1
M0
ÑIEÀU KHIEÅN TIMER 1
7 0
C/T
5
GATE, C/T: điều khiển trạng thái hoạt động cho Timer/Counter (xem sơ đồ ở
trên).
M1, M0: chọn chế độ hoạt động cho Timer/Counter.
M1 M0 CHẾ ĐỘ (MODE) MÔ TẢ
0 0 0 Timer/Counter 13 bit
0 1 1 Timer/Counter 16 bit
1 0 2 Timer/Counter 8 bit, auto reload
1 1 3 Timer/Counter 8 bit
24 BÀI 3: TIMER HỌ 8951 & PPI8255A
Chế độ 0:
TLx : 5 BITPULSE INPUT
THx : 8 BIT TFx
Thanh ghi THx và TLx kết hợp tạo thành bộ Timer/Counter 13 bit, khi tràn 13 bit
thì cờ TFx sẽ đặt lên logic 1.
Chế độ 1:
TLx : 8 BITPULSE INPUT
THx : 8 BIT TFx
Chế độ 2:
TFx
THx : 8 BIT
OVERFLOW
TLx : 8 BITPULSE INPUT
TLx được nạp giá trị ban đầu từ THx và bắt đầu đếm từ giá trị này khi có xung ở
ngõ vào, khi tràn thì TFx sẽ đặt lên logic 1 đồng thời kích hoạt bộ khóa để nạp giá trị
trong THx vào TLx.
Chế độ 3:
THỰC HÀNH VI ĐIỀU KHIỂN 25
TL0 : 8 BIT
TR1
TF1TH0 : 8 BIT
PULSE INPUT
OSC:12
TF0
Trong chế độ này, TH1 và TL1 không được sử dụng thay vào đó là TH0 và TL0 hoạt
động như 2 bộ Timer 8 bit (TL0) và Timer/Counter 8 bit (TL0). Tuy nhiên, tín hiệu mở
xung cho TH0 không phải là TR0 mà là TR1.
Tìm hiểu PPI8255A:
xem sơ đồ mạch trang sau:
CONTROL REGISTER (CR)
DATA BUS PBPA
PC
U24
8255
3433323130292827
432140393837
1819202122232425
1415161713121110
536
98
35
6
D0D1D2D3D4D5D6D7
PA0PA1PA2PA3PA4PA5PA6PA7
PB0PB1PB2PB3PB4PB5PB6PB7
PC0PC1PC2PC3PC4PC5PC6PC7
RDWR
A0A1
RESET
CS
- CS (chip select): tác động thấp cho phép 8255 làm việc, khi CS = 1, tất cả
các tín hiệu ở tổng trở cao.
- D0 –D7: data bus, cho phép 8255 giao tiếp với hệ thống.
26 BÀI 3: TIMER HỌ 8951 & PPI8255A
- PA0-PA7: 8 chân của port A.
- PB0-PB7: 8 chân của port B.
- PC0-PC7: 8 chân của port C, có thể chia làm 2 nhóm: PCL gồm các chân PC0
đến PC3, và PCH gồm các chân PC4 đến PC7.
- A1, A0: các chân địa chỉ. Tại mỗi thời điểm, data bus chỉ có thể giao tiếp dữ
liệu với PA hoặc PB hoặc PC hoặc CR phụ thuộc vào vị trí của chuyển mạch, vị
trí của chuyển mạch được quyết định bởi tín hiệu địa chỉ:
A1 A0 GIAO TIẾP
0 0 DATA BUS --- PA
0 1 DATA BUS --- PB
1 0 DATA BUS --- PC
1 1 DATA BUS --- CR
- RD (read): tín hiệu cho phép đọc, tác động thấp, cho phép chuyển dữ liệu từ
một trong các port đến data bus.
- WR(write): tín hiệu ghi, tác động thấp, cho phép chuyển dữ liệu từ data bus
đến một trong các port hoặc đến CR.
- RESET: tác động cao, cho phép xóa nội dung cài đặt chế độ hoạt động của
8255.
Khi sử dụng 8255, trước hết phải xác lập cấu hình bằng cách ghi vào CR một
giá trị thích hợp tuỳ theo chế độ làm việc, ở chế độ I/O nội dung CR như sau:
135 0
ACT
7
0
4
PCH0 0PA
2
PCL
6
PB
trong đó: - ACT: là bit active, có giá trị 1
- bit 5 và bit 6 = 0
- bit 2 = 0
THỰC HÀNH VI ĐIỀU KHIỂN 27 - PA điều khiển port A, PB điều khiển port B, PCL điều khiển 4 chân
thấp của PC, PCH điều khiển 4 chân cao của port C; các bit này nếu đặt ở logic 1 thì
các port tương ứng sẽ là port nhập (không cho phép xuất dữ liệu từ data bus sang),
nếu các bit này là 0 thì các port tương ứng sẽ là port xuất (không thể đọc được dữ
liệu từ các port này), ví dụ: muốn định cấu hình ban đầu cho 8255 với PA xuất, PB
xuất, PCL xuất, PCH nhập thì phải ghi vào CR một byte có giá trị là: 10001000b =
88H.
Địa chỉ các PORT PPI8255 trong hệ thống:
ĐỊA CHỈ GIAO TIẾP
2000H DATA BUS --- PA
2001H DATA BUS --- PB
2002H DATA BUS --- PC
2003H DATA BUS --- CR
3.3 TIẾN TRÌNH THÍ NGHIỆM: a) Nối mạch thí nghiệm:
Sinh viên nối dây theo hướng dẫn cụ thể trong từng ứng dụng cụ thể dưới đây.
b) Viết các chương trình ứng dụng:
Viết chương trình sử dụng timer (tính toán timer sử dụng thạch anh
12Mhz):
- Nối JP7 với JP27
- Kiểm tra cable truyền
Chương trình 3.1: Viết chương trình hiển thị các led sang dần từ D1 đếnD8, với
thời gian Delay 200ms, sử dụng timer0, mode 1.
MAIN: MOV A,#0
28 BÀI 3: TIMER HỌ 8951 & PPI8255A
BEGIN: MOV P1,A
CALL DL_200MS
SETB C
RLC A ; dịch bit 1 vào A để sang dần các led
JNC BEGIN
SJMP MAIN
DL_200MS:
PUSH 02
MOV TMOD,#01H
MOV TH0,#HIGH(-10000)
MOV TL0,#LOW(-10000)
MOV R2,#20 ; lặp lại 20 lần
SETB TR0
X1:
CLR TF0
JNB TF0,$
DJNZ R2,X1
POP 02
RET
Chương trình 3.2: tương tự chương trình 3.1, nhưng dùng timer0, mode2.
Chương trình 3.3: tương tự chương trình 3.1 nhưng dùng timer0, mode3.
Chương trình 3.4: tương tự chương trình 3.1, nhưng thời gian delay là 500ms,
dùng timer1, mode1.
Viết chương trình điều khiển PPI8255:
- Nối JP1 với JP9
THỰC HÀNH VI ĐIỀU KHIỂN 29 - Nối JP4 với JP10
- Nối JP11 với JP20 (led 7 đoạn)
- Nối JP12 với JP21 (led 7 đoạn)
Chương trình 3.5: Viết chương trình hiển thị các số từ 0 đến 7 trên các led 7
đoạn.
MAIN:
MOV TMOD,#11H
MOV DPTR,#2003H
MOV A,#89H ;10001001, PC: NHAP, PA: XUAT, PB:XUAT
MOVX @DPTR,A
BEGIN:
CALL DISPLAY
LJMP BEGIN
DISPLAY:
PUSH A
MOV A,#3FH
MOV DPTR,#2000H
MOVX @DPTR,A
MOV A,#01H
MOV DPTR,#2001H
MOVX @DPTR,A
CALL DELAY
MOV A,#0
MOVX @DPTR,A
MOV A,#06H
MOV DPTR,#2000H
MOVX @DPTR,A
MOV A,#02H
MOV DPTR,#2001H
MOVX @DPTR,A
30 BÀI 3: TIMER HỌ 8951 & PPI8255A CALL DELAY
MOV A,#0
MOVX @DPTR,A
MOV A,#5BH
MOV DPTR,#2000H
MOVX @DPTR,A
MOV A,#04H
MOV DPTR,#2001H
MOVX @DPTR,A
CALL DELAY
MOV A,#00H
MOVX @DPTR,A
MOV A,#4FH
MOV DPTR,#2000H
MOVX @DPTR,A
MOV A,#08H
MOV DPTR,#2001H
MOVX @DPTR,A
CALL DELAY
MOV A,#0
MOVX @DPTR,A
MOV A,#66H
MOV DPTR,#2000H
MOVX @DPTR,A
MOV A,#10H
MOV DPTR,#2001H
MOVX @DPTR,A
CALL DELAY
MOV A,#0
THỰC HÀNH VI ĐIỀU KHIỂN 31
MOVX @DPTR,A
MOV A,#6DH
MOV DPTR,#2000H
MOVX @DPTR,A
MOV A,#20H
MOV DPTR,#2001H
MOVX @DPTR,A
CALL DELAY
MOV A,#00H
MOVX @DPTR,A
MOV A,#7DH
MOV DPTR,#2000H
MOVX @DPTR,A
MOV A,#40H
MOV DPTR,#2001H
MOVX @DPTR,A
CALL DELAY
MOV A,#0
MOVX @DPTR,A
MOV A,#07
MOV DPTR,#2000H
MOVX @DPTR,A
MOV A,#80H
MOV DPTR,#2001H
MOVX @DPTR,A
CALL DELAY
MOV A,#0
MOVX @DPTR,A
32 BÀI 3: TIMER HỌ 8951 & PPI8255A POP A
RET
DELAY:
PUSH 00
MOV R0,#100
DJNZ R0,$
POP 00
RET
MA_7D: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
END
Chương trình 3.6: Viết chương trình hiển thị NGÀY-THÁNG-NĂM trên 8 led 7
đoạn.
Chương trình 3.7: Viết chương trình hiển thị GIỜ-PHÚT-GIÂY trên 8 led.
THỰC HÀNH VI ĐIỀU KHIỂN 33
BÀI 4: NGẮT (INTERRUPT)
4.1 MỤC ĐÍCH YÊU CẦU: Giúp sinh viên tìm hiểu và sử dụng các ngắt trong 8951: ngắt timer, ngắt ngoài và
ngắt truyền thông nối tiếp.
4.2 CHUẨN BỊ THÍ NGHIỆM: - Bộ thí nghiệm DHC_uPC8951
- Máy tính
- Kiểm tra cable truyền
- Xem sơ đồ mạch trên các module: microcontroller, led 7 đoạn, bàn phím,
counter
DANH SÁCH CÁC NGẮT TRONG 8051:
- Ngắt ngoài 0:
Địa chỉ vector ngắt 0003H
Khai báo sử dụng ngắt
- SETB EA
- SETB EX0
- SETB IT0 (ngắt cạnh)
Sự kiện ngắt Xuất hiện cạnh xuống (hoặc
mức thấp) tại chân INT0
- Ngắt timer0:
Địa chỉ vector ngắt 000BH
Khai báo sử dụng ngắt - SETB EA
34 BÀI 4: NGẮT (INTERRUPT)
- SETB ET0
Sự kiện ngắt Tràn timer 0
- Ngắt ngoài 1:
Địa chỉ vector ngắt 00013H
Khai báo sử dụng ngắt
- SETB EA
- SETB EX1
- SETB IT1 (ngắt cạnh)
Sự kiện ngắt Xuất hiện cạnh xuống (hoặc
mức thấp) tại chân INT1
- Ngắt timer1:
Địa chỉ vector ngắt 0001BH
Khai báo sử dụng ngắt - SETB EA
- SETB ET1
Sự kiện ngắt Tràn timer 1
- Ngắt truyền thông (truyền/nhận UART):
Địa chỉ vector ngắt 00023H
Khai báo sử dụng ngắt - SETB EA
- SETB ES
Sự kiện ngắt
Nhận được một byte hoặc
truyền xong một byte trong
SBUF
THỰC HÀNH VI ĐIỀU KHIỂN 35
Tốc độ truyền nhận MODE
autoreload (timer1)
- TH1 = -3 ; 9600bps
- TH1 = -6 ; 4800bps
- TH1 = -12 ; 2400bps
- TH1 = -24 ; 1200bps
SƠ ĐỒ CHƯƠNG TRÌNH KHI CÓ SỬ DỤNG NGẮT:
4.3 TIẾN TRÌNH THÍ NGHIỆM: a) Nối mạch thí nghiệm:
Sinh viên nối dây theo hướng dẫn cụ thể trong từng ứng dụng cụ thể dưới đây.
b) Viết các chương trình ứng dụng:
Ngắt timer 0:
- Nối JP7 với JP20
- Nối JP3 với JP21
Chương trình 4.1: Viết chương trình hiển thị các số tăng dần từ 00-99 trên
2 led 7 và 8 (sử dụng ngắt timer0 để quét led).
CNT EQU 120
KHAI BÁO NGẮT
Sự kiện ngắt
Vector ngắt: . . . RETI
36 BÀI 4: NGẮT (INTERRUPT)
LED7 EQU 121
LED8 EQU 122
POS EQU 123
LJMP MAIN
ORG 000BH
LJMP QUET_LED
MAIN:
MOV TMOD,#11H
MOV TH0,#HIGH(-5000)
MOV TL0,#LOW(-5000)
MOV CNT,#0
MOV R0,#LED7
MOV POS,#40H
SETB EA
SETB ET0
SETB TR0
BEGIN:
CALL HEX_7S
CALL DL_300MS
INC CNT
MOV A,CNT
CJNE A,#100,BEGIN
MOV CNT,#0
LJMP BEGIN
;------- chương trình đổi số hex sang 2 mã 7 đoạn đặt vào LED1, LED2-----
THỰC HÀNH VI ĐIỀU KHIỂN 37 HEX_7S:
.
.
RET
;------ chương trình delay 300ms dùng timer1------------------------------------
DL_300MS:
.
.
RET
; ------- chương trình ngắt timer0--------------------------------------------------
QUET_LED:
PUSH PSW
PUSH ACC
MOV TH0,#HIGH(-5000)
MOV TL0,#LOW(-5000)
MOV P2,#00H ; tắt các led
MOV DPTR,#LED_7S
MOV A,@R0
MOV P1,A
MOV A,POS
MOV P2,A
RL A
MOV POS,A
INC R0
CJNE R0,#123,EXIT
38 BÀI 4: NGẮT (INTERRUPT)
MOV R0,#LED7
MOV POS,#40H
EXIT:
POP ACC
POP PSW
RETI
LED_7S: DB …………………….
END
Chương trình 4.2: Viết chương trình điều khiển đèn giao thông với các thông số:
thời gian đèn xanh: 15s, thời gian đèn vàng 3 giây (dùng ngắt timer0).
Ngắt ngoài 01:
- Nối JP7 với JP20
- Nối JP3 với JP21
- Nối JP8 với JP15
Chương trình 4.3: Viết chương trình đếm số xung tạo ra bởi mạch COUNTER,
hiển thị số đếm trên 8 led dạng: cnt—000 (dùng ngắt ngoài 1 để đếm và ngắt timer0
để quét led).
CNT EQU 127
LED1 EQU 126
LED2 EQU 125
LED3 EQU 124
LED4 EQU 123
LED5 EQU 122
LED6 EQU 121
LED7 EQU 120
THỰC HÀNH VI ĐIỀU KHIỂN 39 LED8 EQU 119
POS EQU 118
LJMP MAIN
ORG 000BH
LJMP QUET_LED
ORG 0013H
LJMP COUNTER
MAIN:
MOV TMOD,#11H
MOV CNT,#0
MOV POS,#01H
MOV R0,#LED1
SETB EA
SETB IT1
SETB EX1
SETB ET0
.
.
;------ chương trình ngắt ngoài 1--------------------------------
COUNTER:
INC CNT
RETI
Ngắt truyền thông:
- Nối JP7 với JP27
- Nối JP3 với JP29
40 BÀI 4: NGẮT (INTERRUPT)
Chương trình 4.4: Viết chương trình thực hiện:
- Nhấn SW1: tăng nội dung ô nhớ 1 đơn vị, hiển thị ra led đơn và truyền về
máy tính
- Nhấn SW2 giảm nội dung ô nhớ một đơn vị, hiển thị ra led và truyền về PC
- Chương trình cho phép nhận 4 byte truyền đến từ PC và hiển thị ra led
(tốc độ truyền 4800bps,n,8,1; sử dụng ngắt truyền thông).
THỰC HÀNH VI ĐIỀU KHIỂN 41
BÀI 5: ĐIỀU KHIỂN ĐỘNG CƠ
BƯỚC
5.1 MỤC ĐÍCH YÊU CẦU: Giúp sinh viên tìm hiểu stepper motor và điều khiển hoạt động của động cơ này.
5.2 CHUẨN BỊ THÍ NGHIỆM:
- Bộ thí nghiệm DHC_uPC8951
- Máy tính
- Kiểm tra cable truyền
- Xem sơ đồ mạch trên các module: microcontroller, led 7 đoạn, PPI8255, bàn
phím, stepper motor
CẤU TẠO ĐỘNG CƠ BƯỚC:
MG1
STEPPER MOTOR
123
4 5 6
Gồm 4 cuộn dây: 1-2, 2-3, 4-5 và 5-6, tất cả có cùng số vòng dây và được chia
thành 2 cuộn cách ly, sơ đồ mạch điều khiển như hình trang sau.
Điều khiển một bước (1.8 độ):
42 BÀI 5: ĐIỀU KHIỂN ĐỘNG CƠ BƯỚC
T1 T2 T3 T4 CHIỀU QUAY
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
1 0 0 0
Ti = 0: transistor ngưng dẫn
Ti = 1: transistor dẫn bão hòa
JP28
STEP
_MO
TOR 1
2345678
D8
LED1
R14 4K7
D7
LED2
D1
4007
R12 4K7
R17220
R18270
D5
LED4
R13 4K7
D6
LED3
R16270
Q4TIP122
D4
4007
R11 4K7
R15270
Q1TIP122
D3
4007
VCC
D2
4007
Q3TIP122
VCC
Q2TIP122
MG1
MOTOR STEPPER
123
4 5 6
Điều khiển nữa bước (0.9 độ):
Thuận Nghịch
THỰC HÀNH VI ĐIỀU KHIỂN 43
T1 T2 T3 T4 CHIỀU QUAY
1 0 0 1
1 0 0 0
1 1 0 0
0 1 0 0
0 1 1 0
0 0 1 0
0 0 1 1
0 0 0 1
1 0 0 1
Ti = 0: transistor ngưng dẫn
Ti = 1: transistor dẫn bão hòa
5.3 TIẾN TRÌNH THÍ NGHIỆM: a) Nối mạch thí nghiệm:
Sinh viên nối dây theo hướng dẫn cụ thể trong từng ứng dụng cụ thể dưới đây.
b) Viết các chương trình ứng dụng:
Chương trình 5.1: Viết chương trình điều khiển động cơ quay thuận (quay
từng bước) với tốc độ 6 vòng/ phút.
MAIN:
MOV R2,#4
MOV A,#01H
Thuận Nghịch
44 BÀI 5: ĐIỀU KHIỂN ĐỘNG CƠ BƯỚC
BEGIN:
MOV P1,A
CALL DL_50MS
RL A
DJNZ R2, BEGIN
LJMP MAIN
;-----chương trình delay 50ms dùng timer 0------------------------------
DL_50MS:
.
.
RET
END
Chương trình 5.2: Giảm từng bước thời gian delay của CT5.1, cho biết tốc
độ quay nhanh của động cơ bước này.
Chương trình 5.3: Chương trình điều khiển động cơ quay thuận (nửa bước).
MAIN:
MOV R2,#0
MOV DPTR,#DU_LIEU
BEGIN:
MOV A,R2
MOVC A,@A+DPTR
MOV P1,A
CALL DL_500MS
INC R2
THỰC HÀNH VI ĐIỀU KHIỂN 45 CJNE R2,#8,BEGIN
LJMP MAIN
;-----chương trình delay 500ms dùng timer 1------------------------------
DL_500MS:
.
.
RET
DU_LIEU: DB ……….
END
Chương trình 5.4: Viết chương trình thực hiện:
- Nhấn SW1: quay thuận (1 bước)
- Nhấn SW2: quay nghịch (1 bước)
- Nhấn SW3: dừng
- (mặc định: động cơ dừng)
Chương trình 5.5: Viết chương trình cho phép nhập vào số bước (lưu trong một
ô nhớ RAM) dùng SW1 (tăng 10 đơn vị ), SW2 (giảm một đơn vị), nội dung ô nhớ
hiển thị trên LED1-LED8: Count. 000; nhấn SW3 động cơ quay thuận với số bước đã
đặt; nhấn SW4 động cớ quay nghịch với số bước đã đặt; trong khi quay, số đếm trên
các LED giảm dần, khi giảm đến 0 thì động cơ dừng; trong khi quay: không cho phép
thao tác phím.
46 BÀI 6: ĐIỀU KHIỂN MA TRẬN LED
BÀI 6: ĐIỀU KHIỂN MA TRẬN
LED
6.1 MỤC ĐÍCH YÊU CẦU: Giúp sinh viên tìm hiểu led ma trận 2 màu và phương pháp hiển thị thông tin
nhiều màu trên led.
6.2 CHUẨN BỊ THÍ NGHIỆM: - Bộ thí nghiệm DHC-uPC8951
- Máy tính
- Kiểm tra cable truyền
- Xem sơ đồ mạch trên các module: microcontroller, led ma trận, PPI8255, bàn
phím.
SƠ ĐỒ MẠCH: (xem trang sau)
Hiển thị chữ J trên ma trận LED:
Cột 1 Cột 2 Cột 3 Cột 4 Cột 5
Hàng 01 1 1 1 1 1
Hàng 02 0 0 1 0 0
Hàng 03 0 0 1 0 0
Hàng 04 0 0 1 0 0
Hàng 05 0 0 1 0 0
THỰC HÀNH VI ĐIỀU KHIỂN 47
Hàng 06 0 0 1 0 0
Hàng 07 1 0 1 0 0
Hàng 08 0 1 0 0 0
DATA_MATRIX = 41H, 81H, 7FH, 01H, 01H
CATHODE_BLUE: 01H, 02H, 04H, 08H, 10H, hiển thị màu xanh
CATHODE_RED: 01H, 02H, 04H, 08H, 10H, hiển thị màu đỏ
5VDC
U14
ULN2803
101 2 3 4 5 6 7 8
18 17 16 15 14 13 12 11
CO
M
IN1
IN2
IN3
IN4
IN5
IN6
IN7
IN8
OU
T1
OU
T2
OU
T3
OU
T4
OU
T5
OU
T6
OU
T7
OU
T8
Q12
A1013
C32 104
Q11
A1013
R33 15K
W1 MATRIX LED 8x5
MLED1
1 2 13 12 10 18 3 4 7 11
16
15
17
14
8
5
6
9
B1
B2
B3
B4
B5
R1
R2
R3
R4
R5
W1
W2
W3
W4
W5
W6
W7
W8
Q9
A1013
JP25
CATHOD BLUE
1 2 3 4 5 6 7 8
C27 104
JP26
CATHOD RED
1 2 3 4 5 6 7 8
C28 104
W6
W2
Q8
A1013
4007 X 8
Q7
A1013
R30 15K
W8
W1
C33 104
D25
D24
W5
D27
D26
R36 15K
C29 104
R35 15KW6
W4
W4
D28
R37 15KW7
Q5
A1013
Q10
A1013D30
U15
ULN2803
101 2 3 4 5 6 7 8
18 17 16 15 14 13 12 11
CO
M
IN1
IN2
IN3
IN4
IN5
IN6
IN7
IN8
OU
T1
OU
T2
OU
T3
OU
T4
OU
T5
OU
T6
OU
T7
OU
T8
W2
U16
ULN2803
101 2 3 4 5 6 7 8
18 17 16 15 14 13 12 11
CO
M
IN1
IN2
IN3
IN4
IN5
IN6
IN7
IN8
OU
T1
OU
T2
OU
T3
OU
T4
OU
T5
OU
T6
OU
T7
OU
T8
W5R34 15K
D29
W3
W8
JP24
DATA_MATRIX
1 2 3 4 5 6 7 8
D23
Q6
A1013
W3
C30 104
12VDC
C31 104
W7
C34 104
RN1
10K
1 2 3 4 5 6 7 8 9
R32 15K
R31 15K
48 BÀI 6: ĐIỀU KHIỂN MA TRẬN LED
6.3 TIẾN TRÌNH THÍ NGHIỆM: a) Nối mạch thí nghiệm:
- Nối JP1 với JP9
- Nối JP4 với JP10
- Nối JP8 với JP29
- Nối JP11 với JP25
- Nối JP12 với JP26
- Nối JP13 với JP24
b) Viết các chương trình ứng dụng:
Chương trình 6.1: Viết chương trình hiển thị chữ J màu xanh trên ma trận
LED.
POS EQU 127
MAIN:
MOV POS,#0
MOV DPTR,#2003H
MOV A,#80H ; định cấu hình 8255 với các port đều xuất
MOVX @DPTR,A
BEGIN:
; ----------------------------------------------------------------------------
MOV A,#0H
MOV DPTR,#2002H ; PC = 0
MOVX @DPTR,A ; TAT LED
MOV A,POS
MOV DPTR,#COT
MOVC A,@A+DPTR
THỰC HÀNH VI ĐIỀU KHIỂN 49 MOV DPTR,#2000H ; PA = 01H
MOVX @DPTR,A
MOV A,POS
MOV DPTR,#DU_LIEU
MOVC A,@A+DPTR
MOV DPTR,#2002H ; PC = DATA
MOVX @DPTR,A
CALL DELAY
INC POS
MOV A,POS
CJNE A,#5,BEGIN
MOV POS,#0
LJMP BEGIN
;------------------------delay---------------------------------
DELAY:
MOV TMOD,#01H
MOV TH0,#HIGH(-100)
MOV TL0,#LOW(-100)
SETB TR0
CLR TF0
JNB TF0,$
CLR TR0
RET
;----------------------------------------------------------------
DU_LIEU: DB 41H, 81H, 7FH, 01H,01H
50 BÀI 6: ĐIỀU KHIỂN MA TRẬN LED
COT: DB 01H, 02H, 04H, 08H, 10H
END
c) BÀI TẬP SV:
Chương trình 6.2: Hiển thị chữ A màu đỏ trêm ma trận led.
Chương trình 6.3: Hiển thị chữ H màu cam trên MT led.
Chương trình 6.4: hiển thị các số tăng dần từ 0 – 9 trên ma trận led (dùng ngắt
timer 0 để quét led), thời gian tăng số là 0.5 giây (dùng timer 1).
Chương trình 6.5: Viết chương trình hiển thị chữ T trên ma trận led, chương trình
cho phép thay đổi thời gian quét màu đỏ (dùng SW1), thời gian quét màu xanh (dùng
SW2) để tạo hiệu ứng TRUE COLOR.
THỰC HÀNH VI ĐIỀU KHIỂN 51
BÀI 7: LCD TC1602A
7.1 MỤC ĐÍCH YÊU CẦU: Giúp sinh viên tìm hiểu LCD và viết chương trình giao tiếp LCD.
7.2 CHUẨN BỊ THÍ NGHIỆM: - Bộ thí nghiệm DHC-uPC8951
- Máy tính
- Kiểm tra cable truyền
- Xem sơ đồ mạch trên các module: microcontroller, LCD, bàn phím
SƠ ĐỒ MẠCH:
THIS IS THE LCD2 LINES x 16 CHARACTERS LA
MP
LCD1
7 8 9 10 11 12 13 14 4 5 6 3 1 2 15 16
D0
D1
D2
D3
D4
D5
D6
D7
RS
R/W
CS
CO
NS
T
GN
D
VC
C
A K
Q13
A1013R66 4K7
VCC
JP22DATA_LCD
1 2 3 4 5 6 7 8
R655/3W
VCC
R10 10K
JP23
CONTROL_LCD
1 2 3 4 5 6 7 8
- CONST: contrast, chỉnh độ tương phản (độ sáng của hình ảnh trên LCD)
- CS: chip selection, tác động bằng cạnh xuống, cho phép chốt dữ liệu
- RS: register selection, chọn thanh ghi lệnh (RS=1) hoặc thanh ghi dữ liệu (RS
= 0)
52 BÀI 7: LCD TC1602A
- R/W: chân đọc/ghi
- D7 – D0: data bus, hai hướng
- A, K: anod và cathode của đèn sáng nền của LCD
Tập lệnh LCD:
TẬP LỆNH (MÃ HEX) Chức năng
01H Xóa màn hình hiển thị
02H Trở về đầu dòng
04H Dịch con trỏ sang trái
06H Dịch con trỏ sang phải
05H Dịch hiển thị sang phải
07H Dịch hiển thị sang trái
08H Tắt con trỏ, tắt hiển thị
0AH Tắt hiển thị, bật con trỏ
0CH Bật hiển thị, tắt con trỏ
0EH Bật hiển thị, nhấp nháy con trỏ
0FH Tắt hiển thị, nhấp nháy con trỏ
10H Dịch vị trí con trỏ sang trái
14H Dịch vị trí con trỏ sang phải
18H Dịch toàn bộ hiển thị sang trái
1CH Dịch toàn bộ hiển thị sang phải
THỰC HÀNH VI ĐIỀU KHIỂN 53
80H Đưa con trỏ về đầu dòng 1
C0H Đưa con trỏ về đầu dòng 2
38H Xác lập chế độ 2 dòng và độ phân giải chữ 5x7
7.3 TIẾN TRÌNH THÍ NGHIỆM: a) Nối mạch thí nghiệm:
- Nối JP7 với JP22
- Nối JP8 với JP23
- Nối JP3 với JP29
b) Viết các chương trình ứng dụng:
Chương trình 7.1: Viết chương trình hiển thị:
“K. DIEN-DIEN TU” - dòng 1
“PTN TDH-VDK” - dòng 2
trên LCD
; -----------------------------------------------
; P1.0 - > D0
; P1.1 - > D1
; P1.2 - > D2
; . . .
; P1.7 - > D7
; P3.0 - > Enable
; P3.1 - > RS
; P3.2 - > RW
; --------------------------------------------------
54 BÀI 7: LCD TC1602A
EN BIT P3.4
RS BIT P3.2
RW BIT P3.3
LAMP BIT P3.5
;------------------------------------------------------------------------------
MAIN:
CLR LAMP ; bật đèn background LCD
CLR RS ; RS low
CLR RW ; RW low
SETB EN ; Enable
MOV TMOD,#01H
MOV TL0,#LOW(-50000)
MOV TH0,#HIGH(-50000) ; DELAY 50ms
MOV P1,#38H ; đặt chế độ 2 dòng
CALL GHI_LENH
CALL DELAY
MOV P1,#0CH ; bật hiển thị
CALL GHI_LENH
MOV P1,#01H ;xóa màn hình
CALL GHI_LENH
CALL DONG_01
CALL DONG_02
SJMP $
;-------------------------------------------------------------------
WRITE:
THỰC HÀNH VI ĐIỀU KHIỂN 55 PUSH ACC
MOV A,#0
MOVC A,@A+DPTR
CJNE A,#2,WRITE_DATA ; ACC = 2: kết thúc
POP ACC
RET
WRITE_DATA:
MOV P1,A
CALL GHI_DATA
INC DPTR
SJMP WRITE
;--------------------------------------------------------------------
DELAY:
CLR TF0
SETB TR0
JNB TF0,$
CLR TR0
RET
;--------------------------------------------------------------------------
DONG_01:
MOV P1,#080H ; đưa con trỏ về đầu dòng 01
CALL GHI_LENH
MOV DPTR,#DT_DONG1
CALL WRITE
RET
56 BÀI 7: LCD TC1602A
;-------------------------------------------------------------------------
DONG_02:
MOV P1,#0C0H ; đưa con trỏ về đầu dòng 01
CALL GHI_LENH
MOV DPTR,#DT_DONG2
CALL WRITE
RET
;------------------------------------------------------------------------
GHI_LENH:
CLR RS
SJMP WAIT
GHI_DATA:
SETB RS
NOP
WAIT:
CLR RW
CLR EN
NOP
SETB EN
NOP ; kiểm tra Busy Flag
MOV P1,#0FFH ;configure port1 to input mode
SETB RW
CLR RS
CLR EN
NOP
THỰC HÀNH VI ĐIỀU KHIỂN 57 SETB EN
WAIT1:
NOP
MOV A,P1
ANL A,#80H ; kiểm tra bit 7: busy flag
CJNE A,#00h,WAIT1 ; chờ
NOP
NOP
NOP
NOP
NOP
NOP
RET
DT_DONG1:
DB ' K. DIEN-DIEN TU', 02H
DT_DONG2:
DB ' PTN TDH-VDK ', 02H
END
c) BÀI TẬP SV:
Chương trình 7.2: Viết chương trình hiển thị NGÀY-THÁNG-NĂM trên dòng 01 và
GIỜ-PHÚT-GIÂY trên dòng 02.
58 BÀI 8: ADC-DAC
BÀI 8: ADC-DAC
8.1 MỤC ĐÍCH YÊU CẦU: Giúp sinh viên tìm hiểu thiết bị biến đổi tương tự – số và số tương tự 8 bit:
ADC0804 và ADC0808.
8.2 CHUẨN BỊ THÍ NGHIỆM: - Bộ thí nghiệm DHC-uPC8951
- Máy tính
- Kiểm tra cable truyền
- Xem sơ đồ mạch trên các module: microcontroller, LCD, bàn phím, module
ADC và DAC.
SƠ ĐỒ MẠCH ADC:
R5 1K
R81K
-
+
U8B JR45585
67
84
VCC
VCC
R3 470K
R1
1K
U7
ADC0804
67
9
1112131415161718
194
51
23
+IN-IN
VREF/2
DB7DB6DB5DB4DB3DB2DB1DB0
CLKRCLKIN
INTRCS
RDWR
U9
LM35
2
3
1VS
+
ADJ
GN
D
JP17 CO
NTR
OL_A
DC
12345678
C1
1nF
VCCR9
1K
C2
100uF/25V
R41K
R210K
R6 330
VCC
-VCC
-
+
U8AJR4558
3
21
84
JP16
DA
TA_A
DC
12345678
VCC
R71K
-VCC
VCC
THỰC HÀNH VI ĐIỀU KHIỂN 59
KÝ HIỆU NGÕ VÀO/RA CHỨC NĂNG
NGÕ VÀO
VREF Ngõ vào điện áp chuẩn,cho phép chỉnh
thang đo.
CLKIN/CLKR Các ngõ vào cho mạch dao động RC
VIN+ Ngõ vào đo +
VIN- Ngõ vào đo -
WR Ngõ vào khởi động ADC ( START)
RD Ngõ vào điều khiển đọc số liệu.
NGÕ RA
DB7 –DB0 Ngõ ra dữ liệu số 8 bit
INTR Ngõ ra báo tín hiệu biến đổi đã sẳn sàng
(EOC: end of converter).
ADC biến đổi điện áp :
VIN = VIN + - VIN -
Thành giá trị số 8 bit ở ngõ ra:
N = 255VV
REF
IN
Trong đó: Vref = R6*VCC/(R5+R6)
SƠ ĐỒ MẠCH DAC:
60 BÀI 8: ADC-DAC
R58150
VCC
JP19
DAC_OUT
12
R512K7
R69
2K7
R56 2K7
C14
104
R52 10
D22
LED
R29 10
JP18
DA
TA_D
AC
12345678
R53 820
VCC
D21
5V1
R572K7
U21 DAC0808
1
3
16
14 15
2
13
56789
101112
4
GND
VEE
COMPS
VR
EF+
VR
EF- Iout
VC
C
D7D6D5D4D3D2D1D0
Iout
C17
104
R55
10K
C13
104
D20
4007
VCC
R54
5K
-12VDC
-
+
U22A
JR4558
3
21
84
-
+
U22B
JR4558
5
67
84
C12
100uF
C16CAP
+12VDC
R68270
- D7-D0: 8 bit số ngõ vào
- Vref+, Vref-: các chân điện áp chuẩn
- Vout = (D7/2 + D6/4 +…+ D0/256)*Vref hoặc
Vout = N*Vref/255
CATHODE_RED: 01H, 02H, 04H, 08H, 10H, hiển thị màu đỏ
8.3 TIẾN TRÌNH THÍ NGHIỆM: a) Nối mạch thí nghiệm:
Sinh viên nối dây theo hướng dẫn cụ thể trong từng ứng dụng cụ thể dưới đây
b) Viết các chương trình ứng dụng:
ADC0804:
- Nối JP7 với JP16
- Nối JP8 với JP17
- Nối JP1 với JP9
- Nối JP4 với JP10
THỰC HÀNH VI ĐIỀU KHIỂN 61 - Nối JP11 với JP20
- Nối JP12 với JP21
Chương trình 8.1: Viết chương trình đọc giá trị ADC và hiển thị trên 6 led 7
đoạn (led3 – led8): 000doC (chỉnh biến trở để nhiệt độ đo được đúng với nhiệt độ
phòng)
Chương trình 8.2: Viết chương trình cho phép lấy mẫu nhiệt độ (1s một mẫu)
và truyền về PC (tốc độ 4800bps,n,8,1) để khảo sát sự thay đổi nhiệt độ trong phòng
thí nghiệm. Trên giao diện chương trình máy tính chọn Emulator và click START để
bắt đầu (chương trình cho phép vẽ các giá trị nhiệt độ nhận được trên đồ thị).
DAC0808:
- Nối JP7 với JP18
- Nối JP8 với JP29
- Nối JP1 với JP9
- Nối JP4 với JP10
- Nối JP11 với JP20
- Nối JP12 với JP21
Chương trình 8.3: Viết chương trình cho phép nhập vào một số 0 – 255 bằng
SW1 (tăng 10 đơn vị) và SW2 (giảm 1 đơn vị), hiển thị trên 3 led 6,7,8. Nhấn SW3 để
xuất ra ngõ vào ADC, quan sát trạng thái sáng của led ở ngõ ra DAC và dùng VOM để
đo điện áp.
Chương trình 8.4: Viết chương trình cho phép nhận một byte truyền từ PC
(4800,n,8,1) và xuất ra DAC.