76
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

Thuc hanh Vi dieu khien.pdf

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

Ấn bản 2013

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.

62 BÀI 8: ADC-DAC

THỰC HÀNH VI ĐIỀU KHIỂN 63

TÀI LIỆU THAM KHẢO