KKỹỹ thuthuậật Vi đi Th.STh.S LÊ XLÊ XỨỨNG vNG vàà Th.S NGUY TrưTrườờng Đng Đạạii hhọọcc BBááchch khoa,

t Vi điềềuu khikhiểểnn Th.S NGUYỄỄN BN BÁÁ HHỘỘII ĐHĐN khoa, ĐHĐN hoinb@ud.edu.vn Lexung59@yahoo.com hoinb@ud.edu.vn Lexung59@yahoo.com

Xung & Hoi

1

Sáchthamkh ảo

• I. Scott Mackenzie, Họ Vi điềukhi ển8051 , Dịch: Tống Văn

On vàHoàng Đức Hải, 2001

• NgôDiên T ập, Kỹ thuậtghép n ốimáytính , 2000 • NgôDiên T ập, Đo lườngvà điềukhi ển bằngmáytính , 1998 • Đỗ XuânTi ến, Kỹ thuậtVi x ử lývà l ậptrìnhAssembly cho h ệ

vi xử lý, 2003

• SencerYeralan, The 8051 Cookbook for Assembly and C with

Experiments in MechatronicsamdRobotics , 2000

• SencerYeralan, Programming and Interfacing the 8051

Xung & Hoi

2

Microcontroller, 1995

ức năng đặcbi ệt

Xung & Hoi

3

1.Gi ớithi ệu 2. Sơđồ khốivàchân 3. Tổ chức bộ nhớ 4.Cácthanhghich 5.Dao độngvàho ạt độngreset 6. Tập lệnh 7.Cácmode định địach ỉ 8. LậptrìnhIO 9. Tạotr ễ 10.LậptrìnhTimer/Counter 11.Lậptrìnhgiaoti ếp nốiti ếp 12.Lậptrìnhng ắt 13.Lậptrình h ợpng ữ

Xung & Hoi

4

1.LED 1 2.LED 2 3.Hi ểnth ị vớiLED 7 đoạn 4.Keypad 5. Đoth ờigian 6. Tạosóngvuông 7. Đồng hồ số 8.Giaoti ếpPC, vi ếtC code 9.ADC, c ảmbi ến& xu ấtLED 7 đoạn 10.Motor b ước 11.PWM

Vi Vi xxửử lýlý

•CPU chocácmáytính •Khôngcó RAM, ROM, I/O trênCPU chip •Vd: Intel’s x86, Motorola’s 680x0

Data Bus

Nhiềuchips trênbo m ạchch ủ

RAM

ROM

Timer

CPU Vi xử lý

Cổng nốiti ếp

I/O Port

Address Bus

Xung & Hoi

5

Hệ thốngvi x ử lý

Vi Vi điđiềềuu khikhiểểnn •Làmáytínhmini

•Có RAM, ROM, I/O ports trênCPU chip

•Vd: Motorola’s 6811, Intel’s 8051, Zilog’sZ80, & PIC 16X

CPU

RAM ROM

tất cả bêntrong1 chip

Timer

Cổng nốiti ếp

I/O Port

Xung & Hoi

6

Vi điềukhi ển

Vi Vi xxửử lýlý & Vi & Vi điđiềềuu khikhiểểnn

Vi xử lý

Vi điềukhi ển

(cid:216) CPU chip riêngbi ệt. RAM, ROM, I/O, Timer bênngoài (cid:216) CPU, RAM, ROM, I/O & Timer nằmtrêncùng1 chip

(cid:216) LượngROM, RAM, I/O (cid:216) Cốđị nh lượngROM, RAM,

Ports tùy ý I/O Ports trênchip

(cid:216) Giáthànhcao (cid:216) Thích hợpchocác ứng dụng:

(cid:216) Đa năng (cid:252)giá cả thấp

(cid:216) Đa mục đích (cid:252)năng lượngtiêuth ụ thấp

(cid:252)khônggian h ạnch ế

Xung & Hoi

7

(cid:216) Đơn mục đích

HHệệ ththốống nh

ng nhúúng (Embedded

System) ng (Embedded System)

Bộ xử lý được nhúng(embedded) vào một ứng dụng cụ thể

Một sảnph ẩmnhúngch ỉ sử dụngVXL,V ĐK, FPGA, DSP... để thựcthi1 côngvi ệcduynh ất

Chỉ có mộtph ần mềm ứng dụng& thôngth ường được nộp trongROM

Xung & Hoi

8

vd:printer, keyboard, video game player...

3 3 tiêutiêu chchíí chchọọnn vi vi điđiềềuu khikhiểểnn

1. Đáp ứngyêu c ầu về nhiệm vụ vàgiáthànhthicông

(cid:216) Tốc độ, lượng bộ nhớ, cổngI/O, timers, kích c ỡ, đóng

gói, năng lượngtiêuth ụ

(cid:216) Dễ nâng cấp

(cid:216) Giáthành

2.Cáccông c ụ pháttri ểnph ần mềm

(cid:216) Assember, bộ sửa lỗi, trình dịchC, môph ỏng, hỗ trợ kỹ

thuật

Xung & Hoi

9

3.Th ị trườngcung c ấp sảnph ẩmtin c ậy

ức năng đặcbi ệt(SFR)

Xung & Hoi

1

1.Gi ớithi ệu 2. Sơđồ khốivàchân(block and pin diagrams) 3. Tổ chức bộ nhớ 4.Cácthanhghich 5.Dao độngvàho ạt độngreset 6. Tập lệnh 7.Cácmode định địach ỉ 8. LậptrìnhIO 9. Tạotr ễ 10.LậptrìnhTimer/Counter 11.Lậptrìnhgiaoti ếp nốiti ếp 12.Lậptrìnhng ắt 13.Lậptrình h ợpng ữ

22--1. 1. SơSơ đđồồ khkhốốii

External

by Timers, Serial Port

Timer/Counter

Timer 1

Interrupt Control

On-chip RAM

Timer 0

On-chip ROM for program code

Counter Inputs T1,T0

CPU

4 I/O Ports

Serial Port

OSC

Bus Control

P0 P1 P2 P3

/EA

TxDRxD

ALE

RST

Address/Data

/PSEN

Xung & Hoi

2

22--2. So

8051 2. So ssáánhnh ccáácc ththàànhnh viênviên hhọọ 8051

8052 8752 Specification 8031 8051 8751 8951

0K

Code Mem on chip (bytes)

8K ROM 256 8K EPROM 256 128 4K ROM 128 4K EPROM 128 4K Flash 128

Data Mem on chip (bytes) Timers 2 2 2 2 3 3

I/O pins Serial Port 32 1 32 1 32 1 32 1 32 1 32 1

5 5 5 5 6 6

Xung & Hoi

3

Interrupt sources

22--3. 3. SơSơ đđồồ chânchân

Vcc P0.0(AD0) P0.1(AD1) P0.2(AD2) P0.3(AD3) P0.4(AD4) P0.5(AD5) P0.6(AD6) P0.7(AD7) EA/VPP ALE/PROG PSEN P2.7(A15) P2.6(A14) P2.5(A13) P2.4(A12) P2.3(A11) P2.2(A10) P2.1(A9) P2.0(A8)

P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 RST (RXD)P3.0 (TXD)P3.1 (INT0)P3.2 (INT1)P3.3 (T0)P3.4 (T1)P3.5 (WR)P3.6 (RD)P3.7 XTAL2 XTAL1 GND

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21

Xung & Hoi

4

8051

CCáácc chânchân 8051 (

8051 (phphầầnn 1)1)

§ Vcc (chân40):

(cid:252)Cung cấpngu ồnchochip

(cid:252)+5V

§ GND (chân20): đất

§ XTAL1 & XTAL2 (chân19, 18)

(cid:252)2 châncung c ấpxungclock ngoài

(cid:252)Cách1: dao độngdùngth ạchanh

(cid:252)Cách2: dao động từ nguồnxungclock TTL bênngoài

Xung & Hoi

5

(cid:252)Quan hệ giữachu k ỳ máyvàXTAL

CCáácc chânchân 8051 (

8051 (phphầầnn 2)2)

§ RST (chân9): reset

(cid:252)input & kíchho ạt mứccao

(cid:252)Đểđả m bảoho ạt độngreset x ảyra, xungkíchkh ởi phảikéodàiítnh ấtlà 2 chu kỳ máy

(cid:252)Giátr ị cácthanhghich ịutác động bởiho ạt độngreset, xem bảngtrongph ần5 bàigi ảng

Xung & Hoi

6

(cid:252)Mạchreset cóch ốngrung

CCáácc chânchân 8051 (

8051 (phphầầnn 3)3)

(cid:216) /EA (chân31): External Access

(cid:252)/EA nốimass ch ỉđị nh rằngcode l ưutrên b ộ nhớ ngoài

(cid:252)/PSEN & ALE dùngchoROM ngoài

(cid:252)Với8051, 8031, 8032 thì/EA n ốiVcc

(cid:252)“/”: chỉđị nhtác động mứcth ấp

(cid:216) /PSEN (chân29): Program Store Enable

(cid:252)Output, chophéptruyxu ất bộ nhớ chươngtrìnhngoài

(cid:252)Nối tớichân/OE c ủaROM/EPROM

Xung & Hoi

7

(cid:252)Khith ựcthich ươngtrình ở ROM nội, /EA được gán mức 1, (khi đó/PSEN được tự động giữ ở mức1)

CCáácc chânchân 8051 (

8051 (phphầầnn 4)4)

(cid:216) ALE (pin 30):Address Latch Enable

(cid:216)Làchânoutput chophépch ốt địach ỉđể giải đa hợp(de- multiplexing) bus dữ liệuvàbus địach ỉ

ốt nửa đầu củachu k ỳ bộ nhớ

(cid:216)ALE xuấttínhi ệu để chốt địach ỉ (byte thấp địach ỉ 16-bit) vào1 thanhghingoàitrongsu (memory cycle). Trong nửachu k ỳ bộ nhớ còn lại, P0 sẽ xuất/nhập dữ liệu

(cid:216)ALE cóf=1/6f clock (cid:216)Có1 ngo ại lệ: trongth ờigianth ựcthi l ệnhMOVX, m ột xungALE b ị bỏ qua

Xung & Hoi

8

(cid:216) CổngI/O : P0, P1, P2, & P3. Mỗi cổng: 8 chân.

CCáácc ccổổngng I/OI/O (cid:216) 4 cổngI/O

Port 0 (chân32-39) :P0 (P0.0〜P0.7) Port 1 (chân1-8) :P1 (P1.0〜P1.7) Port 2 (chân21-28) :P2 (P2.0〜P2.7) Port 3 (chân10-17) :P3 (P3.0〜P3.7)

Mỗi cổngcó 8 chân

ĐánhtênP0.X (X=0,1,...,7), P1.X, P2.X, P3.X Ex:P0.0 làbit 0 (LSB) c ủaP0 Ex:P0.7 làbit 7 (MSB) c ủaP0 8 bits này cấuthành1 byte

Xung & Hoi

9

Mỗi cổngcóth ểđượ cdùngnh ư input hay output

ức năng đặcbi ệt

Xung & Hoi

1

1.Gi ớithi ệu 2. Sơđồ khốivàchân 3. Tổ chức bộ nhớ (Memory Organization) 4.Cácthanhghich 5.Dao độngvàho ạt độngreset 6. Tập lệnh 7.Cácmode định địach ỉ 8. LậptrìnhIO 9. Tạotr ễ 10.LậptrìnhTimer/Counter 11.Lậptrìnhgiaoti ếp nốiti ếp 12.Lậptrìnhng ắt 13.Lậptrình h ợpng ữ

Hai đặctính c ần lưu ý

1.Các

thanhghi vàcác I/O port được định địach ỉ theoki ểu ánh xạ bộ nhớ (memory mapped) & do đó đượctruyxu ấtnh ư 1 vị trính ớ trong bộ nhớ

2.Stack làtrênRAM n

ộithayvìtrênRAM ngoàinh

ư

đối vớicác b ộ VXL

Xung & Hoi

2

3-1. Khônggian b ộ nhớ ROM nội

0000H

0000H

0000H

4k

8k

0FFFH

32k

1FFFH

8751 AT89C51

7FFFH

8752 AT89C52

DS5000-32

AtmelCorporation

Dallas Semiconductor

Xung & Hoi

3

3-2. Khônggian b ộ nhớ RAM nội

7A7B7C7D7E

79

78

2F

7F …

2E

Byte address 7FH

RAM đa mục

đích

30H

2FH

RAM định địa chỉ bit

20H

1FH

Bank 3

18H

17H

Bank 2

10H

15

13

Bank 1 (Stack)

0FH 08H

07H

20

R7 R6

1F 17 0F 07

1A1B1C1D1E 16 14 12 0A0B0C0D0E 06 04 02

05

03

19 11 09 01

… 18 10 08 00

00H

Default Register Bank for R0-R7

R5

R4

Bit address

R3

R2

4

Xung & Hoi

R1

R0

3-2-1. VùngRAM đa mục đích

•Truyxu ất tự do 80 bytes nàytheoki ểu định địach ỉ trựcti ếp

hay giánti ếp

•MOV A, 5FH

Hoặc:

Xung & Hoi

5

MOV R0, #5FH MOV A, @R0

3-2-2. VùngRAM định địach ỉ bit

•Truyxu ấtcácbit riêng r ẽ là1 đặctr ưng của VĐK. Cácbit có

thểđượ cset, xóa, AND, OR …ch ỉ bằng1 l ệnhso v ới1 chu ỗi lệnh củaVXL

ũng được định địach ỉ bit

•Cácport c •Vd: để set bit 7FH bằng1, tavi ết:

VĐK:

SETB 7FH

VXL:

đọc cả byte

Xung & Hoi

6

MOV A,2FH; ORL A,#10000000B; set bit MOV 2FH,A; ghitr ở lại cả byte

3-2-3. Cácdãythanhghi(register banks)

•Các l ệnhdùngthanhghilành ững lệnhng ắn& th ựchi ện

nhanh hơn –MOV A,R5; 1 byte –MOV A,05H; 2 bytes

•Các d ữ liệuth ườngdùngnênch ứa ở cácthanhghi •Ý t ưởngcácdãythanhghichophép chuyển đổing ữ cảnh

Xung & Hoi

7

nhanhvàhi ệuqu ả ở cácmodule độc lậpnhau c ủaph ần mềm

3-2-4. Ngăn xếp

7FH

Scratch pad RAM

30H

•Thanhghidùngtruy

2FH

Bit-Addressable RAM

cậpng ăn xếp gọilà SP (stack pointer) • SP làthanhghi8 bit:

Register Bank 3

giátr ị từ 00 (cid:224) FFH. được cấpngu ồn •Khi

Register Bank 2

(Stack) Register Bank 1

Register Bank 0

20H 1FH 18H 17H 10H 0FH 08H 07H 00H

Xung & Hoi

8

hay saukhireset, SP=07H

VD:MOVR6,#25H

0BH

0BH

0BH

0BH

F3

0AH

0AH

0AH

0AH

12

12

09H

09H

09H

09H

25

25

25

08H

08H

08H

08H

Start SP=07H

SP=08H

SP=0AH

SP=09H

Xung & Hoi

9

MOVR1,#12H MOVR4,#0F3H PUSH 6 PUSH 1 PUSH 4

(SFR) thanh ghighi chchứứcc năngnăng đđặặcc bibiệệtt (SFR)

Xung & Hoi

1

1.Gi ớithi ệu 2. Sơđồ khốivàchân 3. Tổ chức bộ nhớ 4.4. CCáácc thanh 5.Dao độngvàho ạt độngreset 6. Tập lệnh 7.Cácmode định địach ỉ 8. LậptrìnhIO 9. Tạotr ễ 10.LậptrìnhTimer/Counter 11.Lậptrìnhgiaoti ếp nốiti ếp 12.Lậptrìnhng ắt 13.Lậptrình h ợpng ữ

SFRs

Xung & Hoi

2

XêmthêmHình2.6 trang26

CPU registers:

-ACC: Accumulator. -B: B register. -PSW: Program Status Word. -SP: Stack Pointer. -DPTR: Data Pointer (DPH, DPL).

Interrupt control:

-IE: Interrupt Enable. -IP: Interrupt Priority.

I/O Ports:

Xung & Hoi

3

-P0: Port 0. -P1: Port 1. -P2: Port 2. -P3: Port 3.

TImers:

-TMOD: Timer mode.

-TCON: Timer control.

-TH0: Timer 0 high byte.

-TL0: Timer 0 low byte.

-TH1: Timer 1 high byte.

-TL1: Timer 1 low byte.

Serial I/O:

-SCON: Serial port control.

-SBUF: Serial data registers.

Other:

Xung & Hoi

4

-PCON: Power control & misc.

4-1. ThanhghiPSW •ThanhghiPSW (bit addressable)

C

AC

F0

RS1

RS0

OV

--

P

C nh# C nh# ph% Available to user for general purpose

Bit chọndãythanhghi 1 Bit chọndãythanhghi 0 C tràn D( tr* - User define bit C ch,n l0

PSW.7 PSW.6 PSW.5 PSW.4 PSW.3 PSW.2 PSW.1 PSW.0

C AC -- RS1 RS0 OV -- P

RS1RS0Register BankByte Address of R0-R7 0 0000H-07H 0 1108H-0FH 1 0210H-17H 1 1318H-1FH

D7

D6

D5

D4

D3

D2

Địach ỉ bit

D1 D0 Xung & Hoi

5

• C (carry flag) - Cờ nhớ

– Đượcset b ằng1 n ếucó s ố nhớ từ phép cộngbit 7 hay có s ố

•MOVA,#FFH •ADD A,#1

mượnmang đếnbit 7

–Còn đượcdùngnh ư 1 thanhghi1 bit đối vớicác l ệnhlogic

•ANLC,25H

thaotáctrêncácbit

•AC (auxiliary carry) – Cờ nhớ phụ

– Đượcset b ằng1 n ếucó s ố nhớ từ bit 3 sang bit 4

SETB RS1 ” SETB 0D4H SETBRS0

MOVA,R7

Xung & Hoi

6

•RS1, RS0 - Cácbit ch ọndãy(bank) thanhghi –Dùng để xác địnhdãythanhghitích c ực –Chúng đượcxóakhireset

•OV (overflow flag) - Cờ tràn

–Set b ằng1 sauphéptoán c ộngho ặctr ừ nếucóxu ấthi ện1 tràn số học. Khicác s ố có dấu được cộngho ặctr ừ, phần mềmcóth ể kiểmtrabit trànOV để xác địnhKQ có n ằm trong tầmhay không

– Vớicác s ố có dấu, KQ nhỏ hơn-128 ho ặc lớn hơn+127 s ẽ set cờ OV = 1. Vớicác s ố không dấu, OV=1 khiKQ v ượt quá255

–VD:

ậpphân15

•0Fth •+7F+127 •_________ •8E142 •8EH bi ễudi ễn-114 không đúng vớiKQ mongmu ốnlà

Xung & Hoi

7

142 nênOV = 1

•P (parity) - Cờ chẵn lẻ

–Ki ểmtrach ẵn lẻ chothanhch ứa A – Số cácbit 1 trongthanhch ứaA c ộng vớibit P luônluôn

chẵn

•MOV A,#10101101B • (cid:224)P=1

–Bit ch ẵn lẻđượ c sử dụng kết hợp vớicácch ươngtrình

xuất/nhập nốiti ếptr ướckhitruy ền dữ liệuho ặc để kiểmtra chẵn lẻ saukhinh ận dữ liệu

Xung & Hoi

8

VD1: MOVA,#88H ADDA,#93H VD3: MOVA,#38H ADDA,#2FH VD2: MOVA,#9CH ADDA,#64H VD4: MOVA,#FFH ADDA,#1

VD: MOVA,# ADDA,#

88H 93H

VD: MOVA,#9CH ADDA,#64H

88 +93

9C +64

---------------- 11B

10011100 +01100100 -- 00000000

---------------- 100

C=1

AC=0

10001000 +10010011 -- 00011011 P=0

C=1

AC=1P=

0

VD:

MOVA,#FFH

VD: MOVA,#38H ADDA,#2FH

ADDA,#1

A=00H;C=1;AC=1;

--

3800111000 +2F+00101111 ---------------- 67

01100111

C=0 AC=1P=1

Xung & Hoi

9

X cóth ể là1 hoặc 0

Xung & Hoi10

Những lệnh ảnh hưởng đếncácbit c ờ

4-2. Thanhghi B

•B đượcdùng v ớithanhch ứaA trongcácphéptoánnhân,

chia •MULA,B

•DIVAB

; nhân2 s ố 8-bit không dấuch ứatrongA & B, KQ 16-bit chứavào c ặpthanhghi B:A (B chứabyte cao) ; chiaA b ởiB, th ương số cấttrongA, d ư cấttrong B

được xử lýnh ư thanhghinháp

F7

F6

F5

F4

F3

F2

F1

F0

Xung & Hoi11

•B còn •B được định địach ỉ bit

4-3. Con trỏ ngăn xếp (SP)

Địach ỉ byte 81

•SP ch ứa địach ỉ của dữ liệuhi ện đang ởđỉ nh củastack •Các l ệnhliênquan đếnstack bao g ồm lệnh cất dữ liệuvào

stack (làm tăngSP tr ướckhighi d ữ liệu) và lệnh lấy dữ liệu khỏistack ( giảmSP )

•Mu ốnstack b ắt đầu ở 60H:

–MOVSP,#5FH –Thìvùngstack s ẽ là32 byte trên8051 vì địach ỉ caonh ất

củaRAM n ộilà7FH

–5FH đượcdùngvìSP t ănglên60H tr ướckhithaotác c ất

Xung & Hoi12

vàostack đầutiên đượcth ựcthi

• Nếukhôngkh ởi độngSP, n ộidung m ặc địnhlà07H ( để duy trì sự tươngthích v ới8048) (cid:224) thaotác c ấtvàostack đầutiên sẽ lưu dữ liệuvào v ị trính ớ có địach ỉ 08H

•Trongtr ường hợpnày, n ếuph ần mềm ứng dụngkhôngkh ởi

ẽ 2, 3) sẽ khôngcòn h ợp lệ vì

độngSP, dãythanhghi1 (vàcó l chúng được sử dụnglàmstack

•PUSH & POP cất dữ liệuvàostack và l ấy dữ liệu từ stack •ACALL, LCALL, RET, RETI cấtvàph ục hồi bộđế mch ương

Xung & Hoi13

trìnhPC

VD:MOVR6,#25H

0BH

0BH

0BH

0BH

F3

0AH

0AH

0AH

0AH

12

12

09H

09H

09H

09H

25

25

25

08H

08H

08H

08H

Start SP=07H

SP=08H

SP=0AH

SP=09H

Xung & Hoi14

MOVR1,#12H MOVR4,#0F3H PUSH 6 PUSH 1 PUSH 4

4-4. Con trỏ dữ liệu (DPTR)

•DPTR đượcdùng để truyxu ất bộ nhớ chươngtrìnhngoàiho ặc

bộ nhớ dữ liệungoài

•VD:

83H

82H

MOVA,#55H MOVDPTR,#1000H MOVX@DPTR,A

Xung & Hoi15

DPH DPL

4-5. CácthanhghiI/O port: P0, P1, P2, P3

• Tất cả port đều được định địach ỉ bit •VD: ( điềukhi ểnmotor n ốibit P1.0)

• Đoạnch ươngtrìnhki ểmtratr ạngthái BUSY của

thiết bị: WAIT: JB P1.5, WAIT

Xung & Hoi16

SETBP1.0 CLRP1.0

4-6. Cácthanhghi địnhth ời

•8051 có 2 bộđế m/địnhth ời16-bit đểđị nhcáckho ảngth ời

gianho ặc đếmcác s ự kiện

•Ho ạt động của bộđị nhth ời đượcthi ết lập bởi:

Xung & Hoi17

–TMOD (Timer Mode Register) –TCON (Timer Control Register)

4-7. Cácthanhghi c ủaport n ốiti ếp

ốiti ếp để truyềnthông v ớicácthi ết bị nốiti ếp

Xung & Hoi18

•8051 có1 port n •SBUF (Serial Data Buffer): lưutr ữ dữ liệutruy ềnvành ận •SCON (Serial Port Control Register): chọnch ếđộ hoạt động

4-8. Cácthanhghing ắt

•IE (interrupt enable) •IP (interrupt priority)

Xung & Hoi19

ức năng đặcbi ệt

Xung & Hoi

1

1.Gi ớithi ệu 2. Sơđồ khốivàchân 3. Tổ chức bộ nhớ 4.Cácthanhghich 5.Dao độngvàho ạt độngreset (oscillator and reset) 6. Tập lệnh 7.Cácmode định địach ỉ 8. LậptrìnhIO 9. Tạotr ễ 10.LậptrìnhTimer/Counter 11.Lậptrìnhgiaoti ếp nốiti ếp 12.Lậptrìnhng ắt 13.Lậptrình h ợpng ữ

5-1. Dao độngdùngth ạchanh

C2

XTAL2

30pF

C1

XTAL1

30pF

GND

Xung & Hoi

2

5-2. Dao động từ nguồnxungclock ngoài

XTAL2

N C

(cid:216) Dùng bộ dao độngTTL

(cid:216) Chúý XTAL2:

XTAL1

EXTERNAL OSCILLATOR SIGNAL

GND

Xung & Hoi

3

NC

5-3. Dao động& chu k ỳ máy

ATìmchu k ỳ máycho

(a) XTAL = 11.0592 MHz

(b) XTAL = 16 MHz.

Giải đáp:

(a) 11.0592 MHz / 12 = 921.6 kHz;

Chu kỳ máy(machine cycle) = 1 / 921.6 kHz = 1.085 m s

(b) 16 MHz / 12 = 1.333 MHz;

Xung & Hoi

4

Chu kỳ máy(machine cycle) = 1 / 1.333 MHz = 0.75 m s

5-4. MạchReset cóch ốngrung

Vcc

100

31

EA/VPP X1

10 uF

30 pF

X2 RST

9

8.2 K

Xung & Hoi

5

5-5. Giátr ị Reset củacácthanhghi8051

Thanhghi Giátr ị Reset

PC A B PSW SP DPTR P0, P1, P2 ,P3

0000H 00H 00H 00H 07H 0000H FFH

Xung & Hoi

6

RAM nôikhông b ị ảnh hưởng

Xung & Hoi

1

1.Gi ới thiệu 2. Sơ đồ khối vàchân 3. Tổ chức bộ nhớ 4.Các thanh ghi ch ức năng đặc biệt 5.Dao động vàho ạt động reset 6. Tập lệnh (Instruction Set) 7.Các mode định địa chỉ 8. Lập trình IO 9. Tạo trễ 10.Lập trình Timer/Counter 11.Lập trình giao tiếp nối tiếp 12.Lập trình ngắt 13.Lập trình hợp ngữ

MOV dest, source ; dest = source

MOVDPTR, #7634H MOVDPL, #34H MOVDPH, #76H

MOVA, #72H;A=72H MOVR4, #62H;R4=62H MOVA, R4;A=62H MOVB, 7EH MOVP1, A;mov A to port 1

MOVDPTR, A MOVRm, Rn

Chúý 1:

≠ MOVA,72H MOVA,#72H

8051

8086 MOVAL,72HMOVA,#72H MOVBX,72H MOVAL,[BX]MOVA,72H

Chúý 2:

2

≡ MOVA,R3 MOVA,3 Xung & Hoi

ADDA, Source ;A=A+Source

ADDA,#6;A=A+6 ADDA,R6;A=A+R6 ADD A,6;A=A+[6] or A=A+R6

;A=A+source+CY

ADDCA, source SETBC;CY=1 ADDCA,R5;A=A+R5+1

;A=A-source-CY

Xung & Hoi

3

SUBBA, source SETBC;CY=1 SUBBA,R5;A=A-R5-1

SETBbit; bit=1 CLRbit; bit=0

SETBC; CY=1 SETBP0.0;bit 0 from port 0 =1 SETBP3.7;bit 7 from port 3 =1 SETBACC.2;bit 2 from Accumulator =1 SETB05 ;set bit địa chỉ 05h (tại RAM có địa chỉ byte20h)

Chúý: Lệnh xóa bit CLR tương tự lệnh set bit SETB

CLRC;CY=0

Song tồn tại 1 ngoại lệ câu lệnh sau đây chỉ cho CLR

Xung & Hoi

4

CLRA;A=0

A

DECbyte;byte=byte-1 INCbyte;byte=byte+1 INCR7 DEC DEC40H; [40]=[40]-1

CPLA;1’s complement

MOVA,#55H;A=01010101 B

L01:CPL A

Xung & Hoi

5

MOVP1,A ACALLDELAY SJMPL01

ANL -ORL –XRLdest, source vd:

MOVR5,#89H ANLR5,#08H

RR A RL A RRC A RLC A

Xung & Hoi

6

NOP & RET & RETI Giống như các lệnh của 8086

MULAB

;B|A = A*B

MOVA,#25H MOVB,#65H MULAB;25H*65H=0E99

;B=0EH, A=99H

DIVAB

;A = A/B, B = A mod B

MOVA,#25 MOVB,#10 DIVAB;A=2, B=5

Xung & Hoi

7

Các lệnh nhảy có điều kiện:

source

Xung & Hoi

8

JZ rel JNZ rel DJNZ byte, rel CJNE dest, source, rel JC rel JNC rel JB bit, rel JNB bit, rel JBC bit, rel Jump if A=0 Jump if A„ 0 Decrement & jump if byte„ 0 Jump if dest „ Jump if CY=1 Jump if CY=0 Jump if bit=1 Jump if bit=0 Jump if bit=1 & clear bit

(cid:216) DJNZbyte, rel-addr

Viết chương trình xóa thanh ghiA, sau đó cộng 3 vào A mười lần?

(cid:224)

ORG 0000H MOVA,#0; MOVR2,#10

AGAIN:ADDA,#03

Xung & Hoi

9

DJNZR2,AGAIN ;repeat until R2=0 (10 l ần) MOVP1, A

CJNE , , rel •So sánh vành ảy nếu không bằng. CJNE so sánh 2 giátr ị đầu

tiên và rẽ nhánh nếu các giátr ị của 2 toán hạng không bằng nhau

•C được set bằng 1 nếu giátr ị nguyên không dấu của

byte> nhỏ hơn của . Ngược lại, C = 0

Xung & Hoi10

• Cả 2 toán hạng không bị ảnh hưởng sau khi thực thi lệnh

VD: Viết 1 chương trình so sánh R0, R1: Nếu R0>R1: gửi 1 ra port 2 Else if R0

Giải đáp:

CJNER0, 1, NOT_EQ …;R0=R1

NOT_EQ: JCR0_NHO_HON

…;R0>R1

Xung & Hoi11

R0_NHO_HON:…;R0

VD:

MOV A, 79H

Port 1 làngõ vào cógiátr ị thay đổi liên tục.

….

WAIT:CJNEA,P1,WAIT

tác dụng gì?

Xung & Hoi12

Trả lời: Chương trình lặp lại tại điểm này cho tới khi nhận giátr ị 79H tại đầu vào P1.

• SJMPrel-addr

Là lệnh nhảy không điều kiện. Là lệnh nhảy ngắn (2-byte). Byte đầu tiên làopcode, byte th ứ 2 là địa ch ỉ tương đối của đích. Địa ch ỉ tương đối trong kho ảng 00 (cid:224)FFH nh ưng chia thành 2 hướng: tới, lui (forward, backward) nên tầm nhảy cho phép là -128 đến +127 bytes trước lệnh vàsau l ệnh.

•VD: PC

RelativeAddress

0100H:SJMP … 0123H: RelativeAddress

(cid:224) Byte độ dời của lệnh: 0123H-0102H=21H là độ dời

Xung & Hoi13

tương đối

aaaaaaaa

10000aaa

AJMP addr11 Là lệnh nh ảy không điều ki ện. Nh ảy đến địa ch ỉ tuyệt đối. Đích nh ảy đến ph ải ở trong vùng 2K c ủa bộ nhớ ch ương trình với byte đầu tiên của lệnh theo sau l ệnh AJMP. Mã đối tượng như sau:

A10-A8 & A7-A0 của địa chỉ đích

đầu tiên là

Xung & Hoi14

LJMP addr16 Là lệnh nh ảy không điều ki ện (3 bytes). Byte opcode, byte 2 & 3 ch ứa địa ch ỉ đích 16-bit. T ầm nh ảy từ 0000(cid:224)FFFFH

CALL 1 lệnh chuyển điều khiển khác làCALL, dùng để gọi 1 chương trình con (subroutine).

aaaaaaaa

aaaaaaaa

01001000

LCALL Là lệnh 3 bytes. LCALL dùng để gọi chương trình con nằm bất kỳ đâu trong khoảng 64K byte không gian địa chỉ của 8051.

Xung & Hoi15

A15-A8 & A7-A0 của địa chỉ đích

RAMRAMRAM

0BH

0BH

0BH

0AH

0AH

0AH

12H

34H

09H

09H

09H

01H

PC

26H

26H

08H

08H

08H

Start SP=07H

SP=08H

SP=09H

Xung & Hoi16

VD: Ban đầu không khởi động stack pointer (SP). Nhãn Subroutine đặt tại vị trí1234H trong b ộ nhớ chương trình. Tại 0123H thực hiện:LCALL Subroutine Mô tả hoạt động sau khi thực hiện lệnh trên?

10001aaa

aaaaaaaa

ACALL Là lệnh 2-byte. Chương trình con phải ở trong phạm vi 2K của bộ nhớ chương trình so với byte đầu tiên của lệnh theo sau ACALL.

Xung & Hoi17

A10-A8 & A7-A0 của địa chỉ đích

ức năng đặcbi ệt(SFR)

Xung & Hoi

1

1.Gi ớithi ệu 2. Sơđồ khốivàchân 3. Tổ chức bộ nhớ 4.Cácthanhghich 5.Dao độngvàho ạt độngreset 6. Tập lệnh 7.7. CCáácc mode mode đđịịnhnh đđịịaa chchỉỉ (addressing modes) (addressing modes) 8. LậptrìnhIO 9. Tạotr ễ 10.LậptrìnhTimer/Counter 11.Lậptrìnhgiaoti ếp nốiti ếp 12.Lậptrìnhng ắt 13.Lậptrình h ợpng ữ

Dữ liệuch ứa ở đâukhith ựcthi1 l ệnh? (cid:224) Nhiều lờigi ải tương ứngcácki ểu định địach ỉ khácnhau

•Cácki

ểu định địach ỉ chophépxác địnhngu ồnvà đích của ống lậptrình. dữ liệutheonhi ềucáchkhácnhautùytìnhhu

Xung & Hoi

2

1. Tứcth ời 2.Thanhghi 3.Tr ựcti ếp 4.Giánti ếp 5.Ch ỉ số

7-1. Định địach ỉ tứcth ời

MOVA,#65H MOVR6,#65H MOVDPTR,#2343H MOVP1,#65H

VD :

Xung & Hoi

3

NumEQU30 … MOVR0, #Num MOVDPTR, #data1 … ORG100H data1:db“BACHKHOA”

7-2. Định địach ỉ thanhghi

MOVRn, A;n=0,..,7 ADDA, Rn MOVDPL, R6

MOVDPTR, A MOVRm, Rn

Xung & Hoi

4

7-3. Định địach ỉ trựcti ếp

*

•Dùngtruyxu ấtcácbi ếnnh ớ hoặccácthanhghitrênchip •Mặc dầucóth ể truy cập cả 128 bytes RAM nội sử dụngki ểu định địach ỉ trựcti ếp, song thôngth ườngtach ỉ dùngchovùngRAM nội đa mục đích(có địach ỉ từ 30 –7FH)

≡ MOV A, R4

MOVR0, 40H MOV56H, A MOVA, 4; MOV6, 2; copy R2 to R6; MOV R6,R2 !

5

Thanhghich ức năng đặcbi ệt& địach ỉ: ≡ MOV A,#66H MOV0E0H, #66H; ≡ MOV B, R2 MOV0F0H, R2; ≡ MOV P1,A MOV80H,A; Xung & Hoi

7-4. Định địach ỉ giánti ếp •Làmth

ế nàonh ậnbi ết1 bi ếnkhi địach ỉ biến đã đượcxác định, tínhtoánho ặc sửa đổitrongkhi1 ch ươngtrình đang chạy?

•Khiqu ảnlýcác v ị trính ớ liênti ếp. Các điểmnh ập được định

chỉ số trongcác b ảngch ứatrongRAM (cácdãy s ố hay các chuỗiký t ự)

(cid:224) Giảipháplàki ểu định địach ỉ giánti ếp •Khinày, thanhghi được sử dụngnh ư 1 con trỏ (pointer) đến

; copy dữ liệutr ỏ bởiRivàoA ( i=0 hay 1)

dữ liệu •MOVA,@Ri •MOV@R1,B •Nóicáchkhác, n ộidung c ủacácthanhghiR0 hay R1 cóth ể là

Xung & Hoi

6

nguồnho ặc đíchtrongcác l ệnhMOV, ADD & SUBB

Bàitoán7.1. Copy bytes trongRAM n ội

AViếtch ươngtrìnhcopy 10 bytes t ừ vùngRAM có địach ỉ bắt đầu là37H t ớivùngRAM có địach ỉ bắt đầulà59H

Giải đáp:

ỏ nguồn ỏ đích

MOV R0,#37h; Con tr MOV R1,#59h; Con tr MOV R2,#10; B ộđế m

L1: MOV A,@R0

Xung & Hoi

7

MOV @R1,A INC R0 INC R1 DJNZ R2,L1

Bàitoán7.2. XóaRAM n ội A Viếtch ươngtrìnhxóaRAM n ội từ 60H (cid:224)7FH

Trả lời:

MOVR0,#60H

LOOP:MOV@R0,#0

Xung & Hoi

8

INCR0 CJNER0,#80H,LOOP

7-5. Định địach ỉ chỉ số & truy cậpROM n ội

• Được sử dụngkhitruy c ậpcácthànhph ần dữ liệu của bảng

nhảy hoặc bảngtìmki ếm MOVCA, @A+DPTR A = nộidung t ại địach ỉ A+DPTR trongROM

Chúý: •Cácthànhph ần dữ liệu được lưutrongkhônggian b ộ nhớ

Thanhghi n ền

Offset

Địach ỉ tác động

PC (or DPTR)

A

PC (or DPTR)

=

+

Xung & Hoi

9

chươngtrìnhROM c ủa8051, nên s ử dụngMOVC thayvì MOV. “C”: code.

Bàitoán7.3. Copy bytes ROM (cid:224) RAM

ớ RAM bắt đầu tại

• VD: Giả sử khônggian b ộ nhớ ROM bắt đầu tại địa chỉ 250H chứa“ROBOCON”, vi ếtch ươngtrình truyềncácbytes trênvàovùngnh địach ỉ 40H

Xung & Hoi10

Giải đáp:

0

ORG MOVDPTR,#MYDATA MOVR0,#40H

L1:CLR

A MOVCA,@A+DPTR JZL2 MOV@R0,A INCDPTR INCR0 SJMPL1

L2:SJMPL2 ;-------------------------------------

Xung & Hoi11

ORG250H MYDATA:DB“ROBOCON”, 0

END

Bàitoán7.4. Đọcx & xu ất x2

• Viếtch ươngtrình đọcgiátr ị x từ port 1 vàxu ấtgiátr ị x2 ra

Xung & Hoi12

port 2 ?

Giải đáp:

0

ORG MOVDPTR, #TAB1 MOVA, #0FFH; chúý! MOVP1, A

L01:

MOVA, P1 MOVCA, @A+DPTR MOVP2, A SJMPL01

;----------------------------------------------------

ORG300H

TAB1:DB 0,1,4,9,16,25,36,49,64,81

Xung & Hoi13

END

•MOVC A,@A+PC ;hoạt động tương tự, ngoạitr ừ ở đây, bộ

đếmch ươngtrình PC đượcdùng để chứa địach ỉ nền và bảng đượctruyxu ấtnh ờ vàoch ươngtrìnhcon . Số của điểmnh ập (entry-number) yêu cầuchovàothanhch ứaA, sau đóch ương trìnhcon được gọi. Bảngph ải được địnhngh ĩangaysau l ệnh RET trongch ươngtrình.

TIM-KIEM:

MOVA, entry-number CALLTIM-KIEM … … INC A MOVCA, @A+PC RET

Xung & Hoi14

TABLE:DBdata1,data2,data3,…

Homework

Xung & Hoi15

Viếtch ươngtrìnhcho2 ví d ụ trêndùng MOVC A, @A+PC thayvì MOVC A, @A+DPTR?

ức năng đặcbi ệt

Xung & Hoi

1

1.Gi ớithi ệu 2. Sơđồ khốivàchân 3. Tổ chức bộ nhớ 4.Cácthanhghich 5.Dao độngvàho ạt độngreset 6. Tập lệnh 7.Cácmode định địach ỉ 8. LậptrìnhIO (IO Port Programming) 9. Tạotr ễ 10.LậptrìnhTimer/Counter 11.Lậptrìnhgiaoti ếp nốiti ếp 12.Lậptrìnhng ắt 13.Lậptrình h ợpng ữ

8-1. Cổng1 (Port 1)

Port 1 (chân1-8)

Port 1 đượckýhi ệuP1

(cid:224) Cácchân: P1.0 -P1.7

Sử dụngP1 trongcácví d ụ sau đây để chỉ raho ạt động củachúng

(cid:224) P1 là cổngra –output (ghi d ữ liệuCPU racácchân bênngoài)

Xung & Hoi

2

(cid:224) P1 là cổngvào –input ( đọc dữ liệu từ cácchânbên ngoàivàoCPU bus)

8-2. Cấutrúcph ần cứng củaP1.x

Read DFF

Vcc

TB2

Tải

P1.x

D

Bus nội

Q P1.x

M1

Clk Q

Write to DFF

TB1

Read pin

Xung & Hoi

3

8051 IC

a.Bus n ội: giaoti ếp vớiCPU

b. Bộ chốt dữ liệuDFF: l ưutr ữ giátr ị củachân. Khi

“Write to DFF”= 1: ghi d ữ liệuvàoDFF

c.Hai b ộđệ m3 tr ạngthái(tri-state buffers):

-TB1: điềukhi ển bởi“Read pin”. Khi“Read pin”= 1: đọcgiátr ị tạichân ngoài

-TB2: điềukhi ển bởi“Read DFF”. Khi“Read DFF”= 1: đọcgiátr ị từ DFF nội

Xung & Hoi

4

d.Transistor M1

Bộđệ m3 tr ạngthái(Tri-state Buffer)

OutputInput

Trở khángcao (hở mạch)

0

Tri-state control (kíchho ạt mứccao)

0

1

1

0

1

1

Xung & Hoi

5

8-3. Ghira c ổngoutput

Vd:

MOV A, #55H

BACK: MOV P1, A

ACALLDELAY

CPL A

Xung & Hoi

6

SJMP BACK

8-3-1. Ghi“1”rachânoutput P1.x

Read DFF

Vcc

TB2

Tải

1

2. Chânralà Vcc P1.x

D

1.ghi 1 Bus nội

Q P1.x

output 1

0

M1

Clk Q

Write to DFF

TB1

Read pin

Xung & Hoi

7

8051 IC

8-3-2. Ghi“0”rachânoutput P1.x

Read DFF

Vcc

TB2

Tải

2. Chânra nối đất

0

P1.x

D

1. ghi0 Bus nội

Q P1.X

output 0

1

M1

Clk Q

Write to DFF

TB1

Read pin

Xung & Hoi

8

8051 IC

8-4. Đọc từ châninput & b ộ chốt

Khi đọcchân, cóhaikh ả năngsau:

(cid:216)Đọctr ạngthái c ủachân input (bênngoài )

MOVA,Px

JNBP2.1,Label

JBP2.1,Label

(cid:216)Đọc dữ liệu bộ chốt củachân output (bêntrong )

ANLP1,A

ORLP1,A

INCP1

Xung & Hoi

9

Đọc-Sửa đổi-Ghi

8-4-1. Đọc từ châninput

Để P1 làinput, P1 ph ải được lậptrình b ằngcáchghi“1” vào tất cả cácbit c ủaP1

MOV P1,#0FFH ; P1=11111111B

; P1 làinput

BACK:MOV A,P1

MOV P2,A

SJMP BACK

Xung & Hoi10

E tương tự choP0, P2, P3

Đọc“1” t ạichâninput

Read DFF

Vcc

2. MOV A,P1 Chânngoài=“1”

TB2

1.ghi1

Tải

MOV P1,#0FFH

1

1

P1.x

D

Bus nội

Q P1.x

0

M1

Clk Q

Write to DFF

3. Read pin=1 Read DFF=0 Write to DFF=0

TB1

Read pin

8051 IC

Xung & Hoi11

Đọc“0” t ạichâninput

Read DFF

Vcc

TB2

1.Ghi 1

Tải

2. MOV A,P1 Chânngoài=“0”

MOV P1,#0FFH

0

1

P1.x

D

Bus nội

Q P1.x

0

M1

Clk Q

Write to DFF

3. Read pin=1 Read DFF=0 Write to DFF=0

TB1

Read pin

8051 IC

Xung & Hoi12

Các lệnh đọcchâninput

Lệnh MOV A,PX Ví dụ MOV A,P2 Mô tả ĐọcP2 vào A

JNB PX.Y,.. JNB P2.1,TARGET Nhảy nếuP2.1 = 0

JB PX.Y,.. JB P1.3,TARGET Nhảy nếuP1.3 = 1

Xung & Hoi13

MOV C,PX.Y MOV C,P2.4 Copy trạngtháichân P2.4 vàoCY

8-4-2. Đọcchânouput t ức đọc bộ chốt

MOVP1,#55H; P1=01010101

ORLP1,#0F0H;P1=11110101

(cid:216) “Read DFF”kíchho ạtTB2 vàchuy ển dữ liệu từ Q của

DFF vàoCPU (cid:224) đọc đượcP1.7 = 0

(cid:216) CPU thựchi ệnOR d ữ liệunày v ớibit 1 (cid:224) được 1

(cid:216) D củaDFF b ị thay đổithành 1

Xung & Hoi14

(cid:216) GhiKQ rachân (cid:224) P1.7 = 1

Đọc bộ chốt

1.Read pin = 0

Read DFF = 1 Write to DFF = 0 (ban đầuP1.7=0)

Read DFF

Vcc

TB2

Tải

2. CPU tính(P1.7 OR 1 )

4. P1.7 = 1

0

1 0

1

P1.7

D

Bus nội

Q P1.7

1

0

M1

Clk Q

Write to DFF 3. GhiKQ vàoDFF Read pin=0 Read DFF=0

TB1

Write to DFF=1 Read pin

8051 IC

Xung & Hoi15

Đọc-Sửa đổi-Ghi

Đặc điểmnàybao g ồm3 hành độngtrong1 l ệnh đơn:

1.CPU đọc bộ chốt

2.CPU th ựchi ệntínhtoán (cid:224) sửa đổi bộ chốt

3.Ghirachân

Xung & Hoi16

Chú ý: 8 chân củaPort làmvi ệc độc lậpnhau

Các lệnhcó đặc điểm Đọc-Sửa đổi-Ghi

Lệnh

Ví dụ

ANL

ANL P1,A

ORL

ORL P1,A

XRL

XRL P1,A

JBC PX.Y, TARGET

JBC P1.1, TARGET

CPL

CPL P1.2

INC

INC P1

DEC

DEC P1

DJNZ PX, TARGET

DJNZ P1,TARGET

MOV PX.Y,C

MOV P1.2,C

CLR PX.Y

CLR P1.3

SETB PX.Y

SETB P1.4

Xung & Hoi17

Tóm lại

•1 chânlàoutput thìcóth •1 chânlàoutput thì

ể ghi dữ liệutr ựcti ếprachân đọctr ạngthái c ủachânngh ĩalà đọc

bộ chốt tương ứng củachân

•1 chânlàinput thìset nólên“1”tr •1 chânlàinput thì

ướckhithaotác đọctr ạngtháitr ựcti ếp từ chân

Xung & Hoi18

Câu hỏi gợinh ớ

(cid:216) Cách ghi dữ liệurachân?

(cid:216) Cách đọc dữ liệu từ chân?

(cid:252)Đọcgiátr ị từ chânbênngoài

•Tạisaoph ảiset chântr ướckhiti ếnhành đọc?

(cid:252)Đọcgiátr ị từ bộ chốt

Xung & Hoi19

•Lệnhnh ư thế nào gọilàcótínhch ất Đọc-Sửa đổi-Ghi?

Bàitoán1: thaotácbit

đếnkhinh ận được“1”

ận được“1”, ghi45H raP0

Bàitoán: 1.Theo dõibit P1.2 cho 2.Khinh 3.& g ửixung“High-to-Low”rachânP2.3

Xung & Hoi20

Giải đáp:

SETB P1.2 ;P1.2 làinput MOV A,#45H ;A=45H

AGAIN:JNB P1.2,AGAIN;l ặp lại đếnkhiP1.2=1

ấtA raP0

MOV P0,A ;xu SETB P2.3 ;P2.3 = “High” CLR P2.3 ;P2.3 = “Low”for H-to-L

Xung & Hoi21

Trong đó: 1. JNB: jump if no bit (jump if P1.2 = 0) 2. Xung“H-to-L” được tạo bởichu ỗi lệnhSETB & CLR

Bàitoán2: Ưu điểmkhi s ử dụngcâu l ệnhcó đặc điểm Đọc-Sửa đổi-Ghi

ACóbacách để nháycácbit c ủaPort 1 liên t ục

• Cách1: Gửi dữ liệu tớiP1 qua thanhch ứa A

BACK: MOV A,#55H ;A=01010101B

Xung & Hoi22

MOV P1,A ACALL DELAY MOV A,#0AAH ;A=10101010B MOV P1,A ACALL DELAY SJMP BACK

;P1=01010101B

• Cách2: Xuất dữ liệutr ựcti ếp BACK: MOV P1,#55H ACALL DELAY MOV P1,#0AAH ;P1=10101010B ACALL DELAY SJMP BACK

• Cách3: Dùng lệnh với đặc điểm Đọc-Sửa đổi-Ghi

MOV P1,#55H ;P1=01010101B

Xung & Hoi23

AGAIN: XRL P1,#0FFH ACALL DELAY SJMP AGAIN

8-5. Các cổng(port) còn l ại

(cid:216) P1, P2, P3 có điệntr ở tải nội

(cid:216) P0 khôngcó điệntr ở tải nội

(cid:216) Phíang ười lậptrình: khôngcó s ự khácbi ệtnàogi ữacác

cổng

Xung & Hoi24

(cid:216) Tất cả các cổnglàoutput và ở mứclogic caokhiReset

Cấutrúcph ần cứngP0.x

Read DFF

TB2

P0.X

D

Bus nội

Q P1.X

M1

Clk Q

Write to DFF

TB1

Read pin

Xung & Hoi25

Port 0

KhiP0 đượcdùng để xuấthay nh ập dữ liệu, phảicócác điệntr ở kéolênbênngoài(10K ho ặc4,7K)

Và vớicác điệntr ở kéolênbênngoàinày, khireset hay khi bậtngu ồn, P0 mặc địnhlàoutput.

Vcc

10 K

8051

P o r t

0

P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7

Xung & Hoi26

8-6. Vaitròkép c ủaP0

•Khi n ối8051 t ới bộ nhớ ngoàithìnó s ử dụngcácport

để gửi địach ỉ và đọccác l ệnh –8051 cókh ả năngtruyxu ất64K bytes b ộ nhớ ngoài – Địach ỉ 16-bit: P0 cung cấpcác đường địach ỉ A0-A7, P2

cung cấpA8-A15

•KhiP0 được sử dụng đa hợp địach ỉ/dữ liệu, nó được

kết nối tới74LS373 để chốt địach ỉ –Khinàykhông c

– Đồngth ời, P0 cung cấpcác đường dữ liệuD0-D7

Xung & Hoi27

ầncác điệntr ở kéolênbênngoài

8-6-1. Bộ chốt74LS373

8051

A15 -A8

PORT2

ROM(S)

ADDRESS

ALE

AD7 -AD0

LATCH

ADDRESS INPUTS

PORT0

A7 -A0

DATA

D7 -D0

OUTPUTS

PSEN

OE

ChânALE đượcdùng để giải đa hợp(de-multiplexing) địach ỉ và dữ liệu bằngcách n ối tớichânG c ủa bộ chốt74LS373

KhiALE=0, P0 cung c ấp dữ liệuD0-D7

Xung & Hoi28

KhiALE=1, P0 cung c ấp địach ỉ A0-A7

OE

PSEN ALE

74LS373

G

P0.0

A0

D

P0.7

A7

D0

D7

EA

P2.0

A8

P2.7

A15

Xung & Hoi29

8051 ROM

State 1State 2State 3State 4State 5State 6State 1State 2

P1P2

P1P2

P1P2

P1P2

P1P2

P1P2

P1P2

P1P2

XTAL2

ALE

_____ PSEN

PCL out

P0

PCL out

PCL out

Data sampled

Data sampled

Data sampled

PCH out

PCH out

P2

Xung & Hoi30

8-6-2. ĐọcROM ngoài(1/2)

2. 74373 chốt địa chỉ & gửi tớiROM

1. Gửi địach ỉ tớiROM

OE

PSEN ALE

74LS373

G

P0.0

A0

D

P0.7

A7

Address

D0

D7

/EA

P2.0

A8

P2.7

A12

Xung & Hoi31

8051 ROM

ĐọcROM ngoài(2/2)

2. 74373 chốt địa chỉ & gửi tớiROM

OE

PSEN ALE

74LS373

G

P0.0

A0

D

P0.7

A7

Address

D0

D7

/EA

3. ROM gửi lệnh trở lại

P2.0

A8

P2.7

A12

Xung & Hoi32

8051 ROM

8-6-3. ĐọcghiRAM ngoài

8051

RAM(S) or I/O

DECODE

CE

PORT 2

ALE

ADDRESS LATCH

PORT 0

ADDRESS INPUTS DATA OUTPUTS

R/W OE

WR RD

Xung & Hoi33

Khônggian t ối đa64KB. Truyxu ất địach ỉ giánti ếpqua 2 thangghiR0 vàR1, con tr ỏ dữ liệu.

8-7. Port 3

•Port 3 không c ầncác điệntr ở kéolênbênngoài • Mặc dầuPort 3 c ũng được cấuhìnhnh ư ouputkhireset nh ưng

nóth ườngdùngchocácch ức năngriêngnêu d ưới đây

P3 Bit

Function

Pin

Xung & Hoi34

P3.0 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7

RxD TxD INT0 INT1 T0 T1 WR RD

10 11 12 13 14 15 16 17

Xung & Hoi35

ức năng đặcbi ệt(SFR)

Xung & Hoi

1

1.Gi ớithi ệu 2. Sơ đồ khốivàchân 3. Tổ chức bộ nhớ 4.Cácthanhghich 5.Dao độngvàho ạt độngreset 6. Tập lệnh 7.Cácmode định địach ỉ (addressing modes) 8. LậptrìnhIO 9.9. TTạạoo trtrễễ 10.LậptrìnhTimer/Counter 11.Lậptrìnhgiaoti ếp nốiti ếp 12.Lậptrìnhng ắt 13.Lậptrình h ợpng ữ

Chu kỳ máy-Machine Cycle (MC)

•Chy k ỳ máy(machine cycle) là đơn vị đoth ờigianth ựcthicác

lệnh

• Tần số dao động củath ạchanhcho h ọ 8051 cóth ể từ 4MHz đến30 MHz, tùythu ộcnhà s ảnxu ất. Song thôngth ường, loại 11.0592 MHz đượcdùngnh ằmlàmchocác h ệ thống dựatrên 8051 tươngthích v ới cổng nốiti ếp củaIBM PC.

Xung & Hoi

2

• Với họ 8051, mộtchu k ỳ máykéodài12 chu k ỳ dao động

Bàitoán9.1. Tínhth ờigianth ựcthi1 l ệnh

• Cho1 h ệ 8051 códao động thạchanh11.0592 MHz. Tìmth ờigianth ựcthicho cáccâu l ệnhsau:

a b c 1 2 4 1*1.085us 2*1.085us 4*1.085us

d 1 1*1.085us

e 2 2*1.085us

f 1 1*1.085us

Xung & Hoi

3

a.MOVR3,#79H b.LJMP c.MULAB d.DECR5 e.SJMP f.NOP Giải đáp:

Bàitoán9.2. Tínhth ờigiantr ễ đoạncode • Tìmth ờigiantr ễ choch ươngtrìnhcon say đây, (với tần số

dao độngth ạchanhlà11.0592 MHz)

DELAY:MOVR3,#250;1 MC HERE:NOP;1 MC

NOP;1 MC NOP;1 MC NOP; 1 MC DJNZR3,HERE;2 MC RET;1 MC

Xung & Hoi

4

Answer:[250x(1+1+1+1+2)+2]x1.085 us=1629.67us

Bàitoán9.3. NháyLED AChươngtrình l ần lượtthay đổitr ạngtháisáng/t ối củaLED hay lần lượtthay đổitr ạngthái đóng/mở của rơle: (vớiKIT 8951)

ORG0000 MOVA,#01H A L1:RL

MOVP2,A LCALLDELAY_500ms LCALLDELAY_500ms SJMPL1

Xung & Hoi

5

DELAY_500ms: …

DELAY_500ms: MOVR1, #250

PUSH 00H PUSH 01H

MOVR1, #250

D2:MOVR0, #250 DJNZR0, $ MOVR0, #250 DJNZR0, $ DJNZR1, D2

D1:MOVR0, #250 DJNZR0, $ MOVR0, #250 DJNZR0, $ DJNZR1, D1 POP01H POP00H RET

Xung & Hoi

6

END

ức năng đặcbi ệt(SFR)

Xung & Hoi

1

1.Gi ớithi ệu 2. Sơ đồ khốivàchân 3. Tổ chức bộ nhớ 4.Cácthanhghich 5.Dao độngvàho ạt độngreset 6. Tập lệnh 7.Cácmode định địach ỉ 8. LậptrìnhIO 9. Tạotr ễ Timer/Counter 10.10.LLậậpp trtrììnhnh Timer/Counter 11.Lậptrìnhgiaoti ếp nốiti ếp 12.Lậptrìnhng ắt 13.Lậptrình h ợpng ữ

10-1. Giớithi ệu

•8051 có2 timers/counters: timer/counter 0 & timer/counter 1.

Chúngcóth ểđượ cdùngnh ư:

1. Bộđị nhth ời (Timer) dùngnh ư 1 bộ tạotr ễ ồnxungclock chínhlàdao –Ngu độngth ạchanhbêntrong

2. Bộđế m sự kiện (Event Counter)

– Đầuvào t ừ chânbênngoài đểđế m số sự kiện –Cóth ể dùng đếm số người điqua c ổng, số vòngquay c ủa

bánhxe, hay b ất kể các sự kiệnmàchuy ển đượcsang d ạng xung

Xung & Hoi

2

3. Tạo tốc độ baud (baud rate) choport n ốiti ếp của8051

Timer

ạtTimer, sau đó8051 tínhlên

ừ clock nội(machine cycle)

•Kh ởi tạogiátr ị ban đầuchocácthanhghi •Kíchho •Ngõvàolà t •Khicácthanhghi b ằng0 thì8051 s ẽ set cờ tràn

8051

P2 P1

to LCD

TH0

Set Timer 0

TL0

Xung & Hoi

3

Counter

• Đếm số sự kiện:

–Ch ỉ ra số sự kiệntrêncácthanhghi –Counter 0: Ngõvào t ừ chânbênngoàiT0 (P3.4) –Counter 1: Ngõvào t ừ chânbênngoàiT1 (P3.5)

TH0

P1

TL0

to LCD

P3.4

Xung & Hoi

4

T0 a switch

Cácthanhghidùngtruyxu

ấtTimer/Counter

•TH0, TL0, TH1, TL1 •TMOD thanhghich ếđộđị nhth ời(Timer mode register) •TCON thanhghi điềukhi ển địnhth ời(Timer control register) •8052 v ới3 timers/counters s ẽ cóthêmcácthanhghiT2CON

SFR Name

Description

SFR Address

TH0

Timer 0 High Byte

8Ch

TL0

Timer 0 Low Byte

8Ah

TH1

Timer 1 High Byte

8Dh

TL1

Timer 1 Low Byte

8Bh

TCON

Timer Control

88h

TMOD

89h

Timer Mode Xung & Hoi

5

(Timer 2 control register), TH2 and TL2

–Cácthanhghinày l ưutr ữ

TH0, TL0, TH1, TL1 (not bit addressable) • Cả timer 0 & timer 1 đềucó độ rộng16 bits

–Timer 0: TH0 & TL0

•Giátr ị tạoth ờigiantr ễ (time delay) (nếulàtimer) • Số sự kiện(number of events) (n ếulàcounter)

–Timer 1: TH1 & TL1

•Timer 0 high byte, timer 0 low byte

– Mỗi bộđị nhth ời16-bit cóth ểđượ ctruy c ậpnh ư 2

thanhghi8-bit táchbi ệt

Xung & Hoi

6

•Timer 1 high byte, timer 1 low byte

TH0TL0

D15

D14

D13

D12

D11

D10

D9

D8

D7

D6

D5

D4

D3

D2

D1

D0

TH1TL1

D15

D14

D13

D12

D11

D10

D9

D8

D7

D6

D5

D4

D3

D2

D1

D0

Timer 0

Xung & Hoi

7

Timer 1

10-2. Thanhghich ếđộđị nhth ờiTMOD

•Timer mode register: TMOD (not bit addressable)

–Thanhghi8-bit –Thi ết lậpch ếđộ hoạt độngchocác b ộđị nhth ời: •4 bits th ấpdànhchoTimer 0 (Set to 0000 if not used) •4 bits caodànhchoTimer 1 (Set to 0000 if not used)

(MSB)(LSB)

GATE

C/T

M1

M0

GATE

C/T

M1

M0

Timer 1

Timer 0

Xung & Hoi

8

(MSB)(LSB)

GATE

C/T

M1

M0

GATE

C/T

M1

M0

Timer 1

Timer 0

GATE

ạt động

Bit điềukhi ển cổng. Khiset lên1, timer ch ỉ hoạt độngkhi chân/INTx ở mứccaovàTRx= 1. Khixóa, timer ho khiTRx= 1

C/T

Bit chọnch ức năng đếmho ặc địnhth ời: 1: đếm; 0: địnhth ời

M1

Chọnmode -bit 1

M0

Xung & Hoi

9

Chọnmode -bit 0

GATE

–GATE=0

–GATE=1

• Điềukhi ểnbêntrong(Internal control) • Bậthay t ắttimer b ằngph ần mềm •Timer đượcchophépkhiTR đượcset

• Điềukhi ểnbênngoài(External control) • Bậthay t ắttimer b ằngph ần mềm& m ộtngu ồnbên

ngoài(external source)

•Timer đượcchophépkhichân/INT ở mứccao& TR

Xung & Hoi10

đượcset

÷ 12

XTAL oscillator

C/T = 0

C/T = 1

T0 Pin Pin 3.4

TR0

Gate

INT0 Pin Pin 3.2

Xung & Hoi11

M1, M0

0

0

0

M1 M0 Mode Hoạt động

0

1

1

Chếđộđị nhth ời 13-bit 8-bit THx+ 5-bit TLx(x= 0 or 1)

1

0

2

1

1

3

Chếđộđị nhth ời 16-bit 8-bit THx+ 8-bit TLx

Chếđộ tựđộ ng nạp lại 8-bit (auto reload mode) 8-bit auto reload timer/counter; THx lưutr ữ giátr ị nạp lạichoTLx m ỗi khitràn(overflow) Chếđộđị nhth ờichia s ẻ (Split timer mode) Xung & Hoi12

VD: Tìmgiátr ị TMOD nếumu ốn lậptrìnhTimer 0 làmvi ệc ở mode 2 ? Dùng8051 XTAL choxungclock, & dùng l ệnh để bậthay t ắttimer Giải đáp:

timer 1

timer 0

TMOD= 0000 0010 Timer 1 khôngdùng

Timer 0, mode 2 C/T = 0 (cid:224) dùngngu ồnxungclock ( Timer)

Xung & Hoi13

GATE = 0 (cid:224) điềukhi ển bằng phần mềm

10-3. Thanhghi điềukhi ển địnhth ờiTCON

•Timer control register: TCON

–½byte caochotimer/counter, ½byte th ấpchointerrupts

• TR (run control bit)

–TR0 for Timer/counter 0; TR1 for Timer/counter 1. –TR đượcset hay xóa b ởiph ần mềm để bật/tắttimer/counter

(MSB)(LSB)

TF1

TR1

TF0

TR0

IE1

IT1

IE0

IT0

Timer 1 Timer0

for Interrupt

Xung & Hoi14

•TR=0: off (stop) •TR=1: on (start)

• TF (timer flag, control flag) – Cờ tràn của bộđị nhth ời –TF0 chotimer/counter 0; TF1 chotimer/counter 1 –Kh ởi đầu, TF=0 & đượcset b ởiph ần cứngkhicótràn – t ức

TH-TL chuyển đếm về 0000 từ FFFFH

• Nếuchophépng ắt, thìTF=1 s ẽ kíchkh ởiISR

– Đượcxóa b ởiph ần mềm (hoặc bởiph ần cứngkhi b ộ xi xử

(MSB)(LSB)

TF1

TR1

TF0

TR0

IE1

IT1

IE0

IT0

Timer 1 Timer0

for Interrupt

Xung & Hoi15

lýtr ỏđế ntrìnhph ục vụ ngắt)

mode

10-4. Cácch ếđộđị nhth ời

Timer clock

overflow flag 0

TFx

THx

TLx

overflow flag

Timer clock

TFx

THx

TLx

1

overflow flag

Timer clock

TFx

TLx

2

reload

THx

Timer clock

TLx

THx

3

Timer clock

TL0

TF0

Fosc/12

TH0

TF1

Xung & Hoi16

0

0

0

M1 M0 Mode Hoạt động

0

1

1

Chếđộđị nhth ời 13-bit 8-bit THx+ 5-bit TLx(x= 0 or 1)

1

0

2

1

1

3

Chếđộđị nhth ời 16-bit 8-bit THx+ 8-bit TLx

Xung & Hoi17

Chếđộ tựđộ ng nạp lại 8-bit (auto reload mode) 8-bit auto reload timer/counter; THx lưutr ữ giátr ị nạp lạichoTLx m ỗi khitràn(overflow) Chếđộđị nhth ờichia s ẻ (Split timer mode)

10-4-1. Chếđộđị nhth ời16-bit (mode 1)

1.Ch ọntimer 0 làmvi ệc ở mode 1 (địnhth ời16-bit)

– MOV TMOD,#01H

2.Kh ởi tạogiátr ị ban đầu nạpchoTH0 & TL0.

– MOV TH0,#FFH – MOV TL0,#FCH

3.Tho ạt đầunênxóa c ờ TF0 về 0

– CLR TF0

4. BậtTimer 0

Xung & Hoi18

– SETB TR0

overflow flag

Timer clock

TLx

THx

TFx

TR0=0

TH0

TL0

TR0=1 Start timer

Stop timer

FFFC FFFD FFFF 0000 FFFE

TF = 0 TF = 0TF = 0 TF = 0 TF = 1

TF

Theo dõiTF đếnkhiTF = 1

5.Khicóxungclock đến, 8051 bắt đầu đếmlên b ằngcách t ăng

Xung & Hoi19

giátr ị trongcácthanhghiTH0-TL0 TH0-TL0= FFFCH,FFFDH,FFFEH,FFFFH,0000H

6.KhiTH0-TL0có s ự chuyển sốđế m từ FFFFH (cid:224) 0000 thì

8051 set TF0=1 – TH0-TL0 = FFFEH, FFFFH, 0000H (khinàyTF0=1 )

7.Theo dõi c ờ tràn(TF)

– AGAIN: JNB TF0, AGAIN

8.XóaTR0 để tắttimer 0

– CLR TR0

9.Xóa c ớ trànchovòngti ếptheo

Xung & Hoi20

– CLR TF0

C/T=0: up

Nguồnxungclock cung c ấpcho b ộđị nhth ời

C/T=0: down

C/T

÷ 12

XTAL oscillator

T0 hay T1 pin

TLx

THx

TFx

overflow flag

TF goes high when FFFF (cid:224) 0

TRx

Timer clock

Xung & Hoi21

Mode 1

Bàitoán10.1. Sóngvuông

EViếtch ươngtrình t ạosóngvuôngcóth ờigian m ứccaovà ạotr ễ mode 1 thấp bằngnhautrênchânP1.5. DùngTimer 0 t ;each loop is a half clock

MOV TMOD, #01 ;Timer 0,mode 1(16-bit)

ị Timer0 = FFF2H

HERE: MOV TL0, #0F2H ;Giátr MOV TH0, #0FFH CPL P1.5 ACALL DELAY SJMP HERE

P1.5

50% 50%

whole clock Xung & Hoi22

;tạotr ễ dùngtimer 0 DELAY:

SETB TR0 ;start the timer 0 JNB TF0, $ CLR TR0 ;stop timer 0 CLR TF0 ;clear timer 0 flag RET

TF0 = 0

TF0 = 0TF0 = 0

TF0 = 0

TF0 = 1

Xung & Hoi23

FFF2 FFF3 FFFF 0000 FFF4

Vài điểm cầnchúý trongVD trên:

1. TMOD = 0000 0001 đượcth ựcthi 2. FFF2H chuyểnvàoTH0 –TL0 3. Set vàxóaP1.5 trongth ờigian m ứccaovàth ấp củaxung 4. CTC DELAY dùngTimer được gọi 5. TrongCTC DELAY, b ậttimer 0 dùng l ệnh “SETB TR0” ấp bởidao 6. Timer 0 đếmlên m ỗikhicóxungclock (cung c

ị: FFF3, FFF4, FFF5, FFF6, FFF7,

độngth ạchanh) Timer 0 đếmqua cácgiátr FFF8, FFF9, FFFA, FFFB, FFFC, FFFFD, FFFE, FFFFH, 0000H (cid:224) TF0 = 1 vàkhinày l ệnhJNB b ị bỏ qua

Xung & Hoi24

7. TắtTimer 0 dùng l ệnh “CLR TR0”. CTC DELAY kếtthúc,

tiếntrình được lặp lại. Chúý, làmvi ệc vớimode 1, nên để lặp lạiti ếntrình, taph ải nhập lạigiátr ị chocácthanhghiTH-TL & b ật lạiTimer.

10-4-2. Chếđộđị nhth ời13-bit (mode 0)

•Mode 0 t ương tự mode 1, ngoạitr ừ nólà 13-bit timer thayvì

16-bit. –8-bit TH0 + 5-bit TL0

• Bộđế mvìth ế cógiátr ị từ 0000 đến1FFF trongcácthanhghi

địnhth ờiTH0-TL0 – 213-1= 2000H-1=1FFFH

•Ta c ũnggáncácgiátr ị ban đầuvàoTH0-TL0 để thựchi ện

đạt đến1FFFH thìnóchuy ển về 0000, vàTF0 được đếmlên •KhiTimer

overflow flag

Timer clock

THx

TFx

TLx

Xung & Hoi25

set

10-4-3. Chếđộ tự nạp lại8-bit (mode 2)

• Bộđị nhth ời8-bit –Chophépcácgiátr ị từ 00 đếnFFH l ưutrongTH0

overflow flag

Timer clock

TFx

TLx

TF goes high when FF (cid:224) 0

reload

THx

Xung & Hoi26

• Tựđộ ng nạp lại(Auto-reloading) •TL0 được tănglênkhiTR0=1 •VD, tạoth ờigiantr ễ với200 chu k ỳ máy(MC) trêntimer 0.

1.Ch

ọnmode 2 timer 0 – MOV TMOD,#02H

2.Kh ởi tạogiátr ịđầ utrongTH0

– MOV TH0,#38H ờ TF0=0. 3.Xóa c

– CLR TF0

4.SaukhiTH0 đượcgán, 8051 copy giátr ị nàyvàoTL0

– TL0=TH0=38H

5. BậtTimer

Xung & Hoi27

– SETB TR0

6.8051 đếmlênTL0

– TL0= 38H, 39H, 3AH,....

7.KhiTL0 t ừ FFH (cid:224) 00 thì8051 set TF0=1. Bên c ạnh đó,

TL0 được tựđộ ng nạp lạigiátr ị lưugi ữ trongTH0 – TL0= FEH, FFH, 00H (lúcnày TF0=1) ựđộ ng nạp lại TL0=TH0=38H. –8051 t ại bước 6

Xung & Hoi28

–Quay l 8.CLR TF0 9.CLR TR0

C/T=0: up

C/T=0: down

C/T

÷ 12

XTAL oscillator

T0 hay T1 pin

TL1

TF1

overflow flag

reload

TH1

TRx

TF goes high when FF (cid:224) 0

Timer clock

Xung & Hoi29

Mode 2

10-5. Tínhtoántr ễ dùngTimer

Áp dụng đ/v chếđộđị nhth ời16-bit (mode 1)

(a) Dạnghexa (b) Dạngth ậpphân

(FFFF –YYXX + 1) * 1.085 m s

ị YYXX Chuyểncácgiátr củaTH, TL sang d ạngth ập phânNNNNN, (cid:224) tacó

XTAL = 11.0592 MHz

Xung & Hoi30

Trong đóYYXX làcácgiá trị ban đầu củaTH, TL tương ứng (65536 –NNNNN) * 1.085 m s

Bàitoán10.2. Sóngvuông, tìm f

EChươngtrìnhsau t ạosóngvuôngtrênchânP1.5 liên t ụcdùng

timer 1 tạotr ễ mode 1. Tìm tần số? (Khôngbao g ồmoverhead gây b ởicác l ệnhtrongvòng l ặp)

MOV TMOD,#10H ;timer 1, mode 1

AGAIN:MOV TL1,#34H ;timer value=7634H

MOV TH1,#76H SETB TR1 ;start

BACK: JNB TF1,BACK

;next half clock

Xung & Hoi31

CLR TR1 ;stop CPL P1.5 CLR TF1 ;clear timer flag 1 SJMP AGAIN ;reload timer1

Giải đáp:

Vớimode 1, cácthanhghi địnhth ờiTH, TL ph ải đượckh ởi động

lạisau m ỗi lầntràn.

FFFFH –7634H + 1 = 89CCH = 35276 clock count ½chu k ỳ Chu kỳ Tần số = 35276 × 1.085 m s = 38.274 ms = 2 × 38.274 ms = 76.548 ms = 1/ 76.548 ms = 13.064 Hz.

ồmoverhead gây b ởi

Xung & Hoi32

Trongcáctínhtoántrên, khôngbao g các lệnhtrongvòng l ặp

Bàitoán10.3.

• ETìmKQ cácbàitoántrêntrongtr ường hợpcótính đến

overhead?

• EGiảicácbàitoántrên v ớich ếđộđị nhth ời tự nạp lại8-bit

(mode 2)?

• EVớiph ạmvi t ần số nàothìkhôngth ể dùngch ếđộ tự nạp lại

Xung & Hoi33

8-bit (mode 2), giảithích?

10-6. Tìmgiátr ị cácthanhghi địnhth ời

ảđị nhbi ếttr ướcth ờigiantr ễ, XTAL = 11.0592 MHz

1.Chiath ờigiantr ễ cho 1.085 ms. 2.Th ựchi ện 65536 –n, với n (decimal) từ bước 1 3.Chuy ểnKQ trong b ước2 sang hex yyxx 4.Set TH = yy và TL = xx.

Xung & Hoi34

•Gi •Làmsaotínhtoáncácgiátr ị cầngánchoTH, TL?

Bàitoán10.4. T ạosóngvuôngtheof cho sẵn EXTAL = 11.0592 MHz, viếtch ươngtrình t ạosóngvuông50

Hz trênchânP2.3

Giải đáp:

(a) T = 1 / 50 Hz = 20 ms. (b) Thờigian m ứccao= Th ờigian m ứcth ấp= 10 ms. (c) 10 ms / 1.085 m s = 9216

65536 –9216 = 56320 in decimal = DC00H in hex.

Xung & Hoi35

(d) TL1 = 00H and TH1 = DCH.

MOV TMOD,#10H ;timer 1, mode 1

AGAIN: MOV TL1,#00 ;Timer value = DC00H

MOV TH1,#0DCH SETB TR1 ;start

BACK: JNB TF1,BACK

CLR TR1 ;stop CPL P2.3 CLR TF1 ;clear timer flag 1 SJMP AGAIN ;reload timer since

Xung & Hoi36

;mode 1 is not ;auto-reload

Tạoth ờigiantr ễ lớn

địnhth ờiTH &

TL

• Độ lớn tdelay phụ thuộc2 thông s ố: – Tần số dao độngth ạchanh –Giátr ị chứatrongcácthanhghi

•Th ờigiantr ễ là lớnnh ấtkhiTH=TL=0.

NNếếuu vvẫẫnn chưa

chưa đđủủ??

Xung & Hoi37

Bàitoán10.5. Tínhdelay EKhảosátBT sauvàtìmth

ờigiantr ễ? (Khôngtínhoverhead)

MOV TMOD,#10H MOV R3,#200

AGAIN: MOV TL1,#08H

MOV TH1,#01H SETB TR1 BACK: JNB TF1,BACK CLR TR1 CLR TF1 DJNZ R3,AGAIN

Xung & Hoi38

Giải đáp: TH –TL = 0108H = 264 (decimal) 65536 –264 = 65272. Trễ do timer = 65272 × 1.085 m s = 70.820 ms Tổngth ờigiantr ễ = 200 × 70.820 ms = 14.164024 seconds

;Timer 0,mode 2

Bàitoán10.6. Tính t ần số xungvuông ETìm tần số xungvuôngtrênchânP1.0 ? MOV TMOD,#2H MOV TH0,#0

AGAIN:MOV R5,#250 ;count 250 times

ACALL DELAY CPL P1.0 SJMP AGAIN

DELAY:SETB TR0 ;start BACK: JNB TF0,BACK

CLR TR0 ;stop CLR TF0 ;clear TF DJNZ R5,DELAY ;timer 2: auto-reload RET

Giải đáp:T= 2 (250 × 256 × 1.085 m s) = 138.88 ms (cid:224) f = 72 Hz.

Xung & Hoi39

Bàitoán10.7. Tìmgiátr

ị gánchoTH

•Gi ải đáp: Vài 8051 assemblers cho

phép cách thức sau:

•-200 = -C8H (cid:224) 2’s complement of –200 = 100H –C8H = 38H Decimal2’s complement (TH

value)

EGiả sử đang lậptrình choTimer ở mode 2, tìm giátr ị hex gánchothanh ghiTH trongcáctr ường hợpsau: (a) MOV TH1,#-200 (b) MOV TH0,#-60 (c) MOV TH1,#-3 (d) MOV TH1,#-12 (e) MOV TH0,#-48

Xung & Hoi40

-200 = -C8H38H -60 = -3CHC4H -3FDH -12F4H -48D0H

ần số sóngvuông v ới đoạncode sau

Bàitoán10.8. Tìm f (a)Tìm t (b)Th ờigian m ứccaovàth ấp MOV TMOD,#2H ;Timer 0,mode 2

MOV TH0,#-150 ;Count=150

AGAIN:SETB P1.3 high period

low period

ACALL DELAY ACALL DELAY CLR P1.3 ACALL DEALY SJMP AGAIN

Xung & Hoi41

DELAY:SETB TR0 ;start BACK: JNB TF0,BACK

CLR TR0 ;stop CLR TF0 ;clear TF RET

Giải đáp: “MOV TH0,#-150”dùng150 clocks. CTC DELAY = 150 × 1.085 m s = 162 m s. Thờigian m ứccao g ấp2 l ầnth ờigian m ứcth ấp(66% duty cycle). Chu kỳ

Xung & Hoi42

= Thờigian m ứccao+ th ờigian m ứcth ấp = 325.5 m s + 162.25 m s = 488.25 m s = 2.048 kHz. Tần số

10-7. Bộđế m •Các b ộđị nhth ời(timers) c ũngcóth ể dùngnh ư những bộđế m

(counters) đểđế m sự kiện xảyrabênngoài8051

đó, xung từ ngoài sẽ làm tănggiátr ị cácthanhghiTH, TL

•Khi •KhiC/T=1, b ộđế m sẽđế mlênkhicóxungxu ấthi ện từ:

–T0: timer 0 input (Pin 14, P3.4) –T1: timer 1 input (Pin 15, P3.5)

Pin 14 Port Pin P3.4 Function T0 Description Timer/Counter 0 external input

15

P3.5

T1

Timer/Counter 1 external input

(MSB)(LSB)

GATE C/T=1 M1 M0 GATE C/T=1 M1 M0

Xung & Hoi43

Timer 1 Timer 0

10-7-1. Chếđộđế m16-bit (mode 1)

• 16-bit counter (TH0 and TL0) •Giátr ăngkhi: TR0 đượcset

ị trongcácthanhghiTH0-TL0 t lên1 và mộtxungbênngoài(T0) xu ấthi ện

overflow flag

Timer 0 ngõvào từ bênngoài chân3.4 (T0)

TL0

TH0

TF0

C/T = 1

TF0 goes high when FFFF (cid:224) 0

Xung & Hoi44

TR0

•Khi b ộđế m(TH0-TL0) đạt tớigiátr ị lớnnh ấtlàFFFFH, nó đượcchuy ểntr ạngthái v ề 0000, vàTF0 đượcset lên1 • Bằngcách n ạpgiátr ị ban đẩuchoTH0-TL0, theodõiTF0=1 để nhậnbi ết1 tìnhhu ốngnào đó(vd: 100 ng ười đã đến).

10-7-2. Chếđộđế m tự nạp lại8-bit (mode 2)

•8-bit counter.

–Ch ỉ chophépcácgiátr ị từ 00 đếnFFH n ạpvàoTH0

• Tựđộ ng nạp lại(Auto-reloading) • Giátr ị trongTL0 s ẽ tăng nếuTR0=1 và 1 xungbênngoàixu ất

Xung & Hoi45

hiện

Bàitoán10.9. Đếmxung& xu ấtport

Giảđị nh1 xungclock được đưavàochânT1, vi ếtch ương trình bộđế m1 làmvi ệc ở mode 2 đểđế mxung& hi ểnth ị giá trị củaTL1 raP2, khiCounter trànthì k ếtthúc?

8051

P2

to LEDs

P3.5

Xung & Hoi46

T1

Ans:

MOV TMOD, #01100000B ;mode 2, counter 1 MOV TH1, #0 SETB P3.5 SETB TR1;start

BACK: MOV A,TL1

Xung & Hoi47

MOV P2,A;display in P2 JNB TF1,BACK;overflow CLR TR1;stop CLR TF1;make TF=0

Bàitoán10.10. Đếmxung& Hi ểnth ị LCD

•Gi ả sử 1 xung tần số 1Hz được cấpvàochânP3.4. Vi ết

chươngtrìnhhi ểnth ị counter 0 trênLCD. Kh ởi tạogiátr ị ban đầuchothanhghiTH0 là-60.

8051

P1

to LCD

P3.4

Xung & Hoi48

T0 1 Hz clock

ACALL LCD_SET_UP ;initialize the LCD MOV TMOD,#00000110B ;Counter 0,mode2 MOV TH0,#-60 SETB P3.4 ;make T0 as input

AGAIN:

SETB TR0 ;starts the counter

BACK:

;every 60 events ;convert in R2,R3,R4 ;loop if TF0=0 ;stop

Xung & Hoi49

MOV A,TL0 ACALL CONV JNB TF0,BACK CLR TR0 CLR TF0 SJMP AGAIN

;converting 8-bit binary to ASCII

CONV: MOV B,#10 ;divide by 10

;make it ASCII

Xung & Hoi50

R3 R4 R2

DIV AB MOV R2,B ;save low digit MOV B,#10 ;divide by 10 once more DIV AB ORL A,#30H MOV R4,A MOV A,B ORL A,#30H MOV R3,A MOV A,R2 ORL A,#30H MOV R2,A ;ACALL LCD_DISPLAY here RET

Bàitoán10.11. Đồng hồ số

• Cảiti ếnví d ụ trênth ựchi ện1 đồng hồ sốđơ ngi ản, chưa cần

cácnúthi ệuch ỉnhgi ở, phút ?

•Vi ệc sử dụng lệnh “JNB TF0,target” để giámsát c ờ TF0

Xung & Hoi51

là sự hoangphíth ờigianvôcùng l ớn –Gi ảipháplàdùngng ắt, đề cậptrongph ần12 c ủabàigi ảng – Vớing ắt, tacóth ể thựcthinhi ềuvi ệc –Khi c ờ TF đượcset, nó s ẽ thôngbáochochúngta

ức năng đặcbi ệt(SFR)

programming) (serial commcomm programming)

Xung & Hoi

1

1.Gi ớithi ệu 2. Sơđồ khốivàchân 3. Tổ chức bộ nhớ 4.Cácthanhghich 5.Dao độngvàho ạt độngreset 6. Tập lệnh 7.Cácmode định địach ỉ (addressing modes) 8. LậptrìnhIO 9. Tạotr ễ 10.LậptrìnhTimer/Counter 11.11.LLậậpp trtrììnhnh giaogiao titiếếpp nnốốii titiếếpp (serial 12.Lậptrìnhng ắt(interrupt programming) 13.Lậptrình h ợpng ữ

11-1. Giớithi ệu

•Port n ốiti ếpho ạt độngsong công ( full duplex), nghĩalàcó

khả năngthuvàphát đồngth ời

• Sử dụng2 thanhghich ức năng đặcbi ệt SBUF (địach ỉ byte là 99H) & SCON (địach ỉ byte là98H) để truyxu ấtport n ốiti ếp

•Vi ệc ghilênSBUF sẽ nạp dữ liệu để phát, vàvi ệc đọcSBUF sẽ truyxu ất dữ liệu đãnh ận được (cid:224) thựcracó2 SBUF riêng rẽ

•SCON chứacácbit tr ạngtháivà điềukhi ển, thanhnày được

định địach ỉ bit

• Tần số hoạt động củaport n ốiti ếphay còn g ọilà tốc độ baud

Xung & Hoi

2

(baud rate) cóth ể cốđị nhho ặcthay đổi

RXD (P3.0)

TXD (P3.1)

D

Shift Register

Clk SBUF

Q

Clk

(write only)

Baud rate clock (phát)

Baud rate clock (thu)

SBUF (read only)

8051 internal bus

Xung & Hoi

3

SM2 REN

SM0

SM1

RB8

TB8

TI

RI

11-2. Thanhkhi điềukhi ểnport n ốiti ếp SCON

ềnthông đa xử lý

SM1, SM0: chọnch ếđộ củaport n ốiti ếp SM2: chophéptruy REN: chophépthu, ph ải đượcset để nhậncácký t ự TB8:bit th ứ 9 đượcphát ở chếđộ 2 & 3 RB8:bit th ứ 9 nhận được TI:

RI:

Xung & Hoi

4

cờ ngắtphát, đượcset ngaysaukhi k ếtthúcvi ệcphát1 ký tự; đượcxóa b ởiph ần mềm cờ ngắtthu, đượcset ngaysaukhi k ếtthúcvi ệcthu1 ký tự; đượcxóa b ởiph ần mềm

11-3. Cácch ếđộ hoạt động

ịch

SM0SM1ModeMô t 0 0 ả 0Thanhghi d 1UART 8-bit 0 1

1 0 2UART 9-bit C Tốc độ baud Cốđị nh(f OSC/12) Thay đổi (thiết lập bởi bộđị nhth ời) ốđị nh(f OSC/12

1 1 3UART 9-bit

Xung & Hoi

5

hoặc fOSC/64) Thay đổi (thiết lập bởi bộđị nhth ời)

11-3-1. Thanhghi d ịch8-bit (mode 0)

•Khiphátvàthu d ữ liệu8-bit, bit LSB đượcphátho ặcthutr ước

tiên

• Tốc độ baud cốđị nh= f OSC/12 •ChânRxDdùngcho c ả việcthuphát d ữ liệutrongkhiTxD

dùnglàmchânxu ấtclock d ịchbit

•Phát:

Xung & Hoi

6

–GhivàoSBUF – Dữ liệu được dịchrangoàitrênchânRxD(P3.0) –Xungclock d ịchbit được gửiratrênchânTxD(P3.1) – Mỗibit h ợp lệ truyền đitrênRxDtrong1 chu k ỳ máy

•Thu:

–Ch ỉđượ ckh ởi độngkhiREN = 1 & RI = 0, ngh ĩalàph ảiset REN = 1 ở thời điểm bắt đầuch ươngtrình& xóaRI để bắt đầucôngvi ệcthu d ữ liệu

– Dữ liệu được dịchvàochânRxD b ởixungclock d ịchbit

(tác động sườnlên)

•1 Ứng dụng củamode 0:

– Mở rộngthêmcácngõracho8051

8 ngõra m ở rộng

8051

Clock TxD(P3.1)

Shift Regsiter

Xung & Hoi

7

RxD(P3.0) Data

11-3-2. UART 8-bit có tốc độ baud thay

đổi(mode 1)

•UART là b ộ thuphát d ữ liệu nốiti ếp với mỗiký t ự dữ liệu được đứngtr ước bởi1 bit start và đứngsau b ởi1 bit stop. Thỉnhtho ảng1 bit parity đượcchènvào.

•Ho ạt độngch ủ yếu củaUART làbi ến dữ liệuphát t ừ // thành

ntvàbi ến dữ liệuthu t ừ ntthành//

• Cờ ngắtphátTI đượcset b ằng1 ngaykhibit stop xu ấthi ện

1 / baud rate

Stop bit

Start bit

TxD

D0D1D2D3D4D5D6D7

TI

Xung & Hoi

8

trênTxD

TI (ready for more data)

•Vi ệcnh ận đượckh ởi động bởi1 chuy ểntr ạngthái t ừ 1 xuống

0 trên đườngRxD(bit start)

•Bit start sau đó được bỏ qua & 8 bit dữ liệusau đó đượcnh ận

tuần tự vàothanhghi d ịchbit c ủaport n ốiti ếp. Khi cả 8 bit đượcnh ận, tacó: –Bit th ứ 9 (bit stop) (cid:224) RB8 củaSCON –8 bit d ữ liệu được nạpvàoSBUF – Cờ ngắtthuRI đượcset

Xung & Hoi

9

•Note: Các điềutrênch ỉ xảyra n ếutr ước đó cờ RI = 0

11-4. Khởi độngvàtruyxu ấtcácthanhghi

•Chophépnh ận: REN trongSCON ph ải đượcset b ởiph ần

mềm để chophépnh ậnký t ự SETBREN Hoặc MOVSCON, #xxx1xxxxB

•Thêmvàobit ch ẵn lẻ: bit P trongPSW đượcset ho ặcxóa ở

đưabit ki ểmtrach ẵnvàoTB8

ở thànhbit th ứ 9

Xung & Hoi10

mỗichu k ỳ máy để thiết lậpvi ệcki ểmtrach ẵncho8 bit ch ứa trong A MOVC, P; MOVTB8, C; bit nàytr MOVSBUF, A; dichuy ển8 bit d ữ liệuvàoSBUF

•Các c ờ ngắt: RI vàTI đượcset b ằngph ần cứngnh ưngph ải

xóa bằngph ần mềm

CTC nhận1 ký t ự qua port nốiti ếpnh ư sau: INCHAR:JNBRI, $

CLRRI MOVA, SBUF RET

Xung & Hoi11

CTC phát1 ký t ự qua port nt: OUTCHAR:JNBTI, $ CLRTI MOVSBUF, A RET

11-5. Tốc độ baud củaport n ốiti ếp

Baud rate clock

On-chip OSC

Mode 0

SMOD=0

‚ 12

Baud rate clock

On-chip OSC

SMOD=1

‚ 64

Mode 2

SMOD=0

‚ 32

Baud rate clock

Timer 1 overflow

SMOD=1

‚ 32

Mode 1 & 3

Xung & Hoi12

‚ 16

Dùngtimer 1 làmxungclock t ốc độ baud

•Thôngth ườngkh ởi độngthanhghiTMOD ở chếđộ tựđộ ng nạp lại8-bit (mode 2) & đặtgiátr ị nạp lạithích h ợpvàothanh ghiTH1 để có tốc độ tràn đúng, từ đó tạora t ốc độ baud

•MOVTMOD, #0010xxxxB ;for timer 1 •Baud rate = Timer 1 overflow / 32 hay /16 tùythu ộcgiátr ị bit

Xung & Hoi13

SMOD

Bàitoán11.1

•Tínhtoáncácgiátr ị nạp lạichothanhghiTH1 đối vớicác t ốc

SMOD

Sai số

Tốc độ baud

Tần số thạch anh(MHz)

Giátr ị nạp choTH1

Tốc độ baud thực tế

9600

12

1

-7 (F9H)

8929

~7%

1200

12

0

-26 (E6H)

1202

0,16%

19200

11,0592

-3 (FDH)

19200

1

0%

9600

11,0592

0

-3 (FDH)

9600

0%

4800

11,0592

0

-6 (FAH)

4800

0%

0

2400

11,0592

-12 (F4H)

2400

0%

1200

11,0592

0

-24 (E8H)

1200

0%

Xung & Hoi14

độ baud 9600, 4800, 2400, 1200 (XTAL = 11,0592MHz)?

Tóm lại: NếuPCON.7 = 0 •TH1 = 256 -((Crystal / 384) / Baud) NếuPCON.7 =1 •TH1 = 256 -((Crystal / 192) / Baud)

Làmvd v ớibaud rate 19200 để chứng tỏ vaitròbit SMOD 11.059Mhz crystal: •TH1 = 256 -((Crystal / 384) / Baud)

Xung & Hoi15

TH1 = 256 -((11059200 / 384) / 19200 ) TH1 = 256 -((28799) / 19200) TH1 = 256 -1.5 = 254.5

• Nếuset 254 ta đạt được14,400 baud còn v ới255 ta đạt được

28,800 baud

•Set PCON.7 (SMOD). Ta có:

TH1 = 256 -((Crystal / 192) / Baud) TH1 = 256 -((11059200 / 192) / 19200) TH1 = 256 -((57699) / 19200) TH1 = 256 -3 = 253

Xung & Hoi16

Kếtlu ận với19,200 baud (11.0592MHz crystal) taph ải: 1. CấuhìnhPort n ốiti ếpmode 1 or 3 2.Timer 1 ho ạt độngmode 2 (8-bit auto-reload) 3.Set TH1 b ằng253 4.Set PCON.7 (SMOD)

MAX 232

Xung & Hoi18

Xung & Hoi19