You are on page 1of 283

CHƯƠNG 4 VÀO RA CƠ SỞ

4.1 Ba phương pháp điều khiển vào ra


4.2 Vào ra song song
4.3 Vào ra định thời ( Timer/ Counter )
4.4 Vào ra nối tiếp
4.5 Các chuẩn vào ra song song, nối tiếp

1
Ports

Processor rd'/wr Memory

port enable

addr[0-11]

data[0-7]

bus
• Conducting device on periphery
• Connects bus to processor or memory
• Often referred to as a pin
– Actual pins on periphery of IC package that plug into socket on printed-circuit board
– Sometimes metallic balls instead of pins
– Today, metal “pads” connecting processors and memories within single IC
• Single wire or set of wires with single function
– E.g., 12-wire address port

2
Timing Diagrams

• Most common method for describing a rd'/wr


communication protocol enable
• Time proceeds to the right on x-axis
addr
• Control signal: low or high
– May be active low (e.g., go’, /go, or go_L) data
– Use terms assert (active) and deassert
tsetup tread
– Asserting go’ means go=0
read protocol
• Data signal: not valid or valid
• Protocol may have subprotocols rd'/wr
– Called bus cycle, e.g., read and write
enable
– Each may be several clock cycles
addr
• Read example
– rd’/wr set low,address placed on addr for at data
least tsetup time before enable asserted, enable
triggers memory to place data on data wires tsetup twrite
by time tread write protocol

3
Basic protocol concepts

• Actor: master initiates, servant (slave) respond


• Direction: sender, receiver
• Addresses: special kind of data
– Specifies a location in memory, a peripheral, or a register within a peripheral
• Time multiplexing
– Share a single set of wires for multiple pieces of data
– Saves wires at expense of time
Time-multiplexed data transfer
Master req Servant Master req Servant
data(15:0) data(15:0)
addr data addr data

mux demux mux demux


data(8) addr/data

req req
data 15:8 7:0 addr/data addr data

data serializing address/data muxing

4
Basic protocol concepts: control methods

Master Servant Master req Servant


req
ack

data
data

req 1 3
req 1 3
data 2 4 ack 2 4
data
taccess
1. Master asserts req to receive data 1. Master asserts req to receive data
2. Servant puts data on bus within time taccess 2. Servant puts data on bus and asserts ack
3. Master receives data and deasserts req 3. Master receives data and deasserts req
4. Servant ready for next request 4. Servant ready for next request

Strobe protocol Handshake protocol

5
A strobe/handshake compromise

Master req Servant

wait

data

req 1 3 req 1 4
wait wait 2 3
data 2 4 data 5
taccess taccess
1. Master asserts req to receive data 1. Master asserts req to receive data
2. Servant puts data on bus within time taccess 2. Servant can't put data within taccess, asserts wait ack
(wait line is unused) 3. Servant puts data on bus and deasserts wait
3. Master receives data and deasserts req 4. Master receives data and deasserts req
4. Servant ready for next request 5. Servant ready for next request

Fast-response case Slow-response case

6
ISA bus protocol – memory access

Microprocessor
• ISA: Industry Standard ISA bus
Memory I/O Device

Architecture memory-read bus cycle


– Common in 80x86’s CYCLE C1 C2 WAIT C3 C4

• Features
CLOCK

D[7-0] DATA

– 20-bit address A[19-0] ADDRESS

ALE
– Compromise /MEMR

strobe/handshake control CHRDY

memory-write bus cycle


• 4 cycles default
CYCLE C1 C2 WAIT C3 C4
• Unless CHRDY deasserted CLOCK

– resulting in additional D[7-0] DATA

wait cycles (up to 6) A[19-0] ADDRESS

ALE

/MEMW

CHRDY

7
Microprocessor interfacing: I/O addressing
• A microprocessor communicates with other devices
using some of its pins
– Port-based I/O (parallel I/O)
• Processor has one or more N-bit ports
• Processor’s software reads and writes a port just like a register
• E.g., P0 = 0xFF; v = P1.2; -- P0 and P1 are 8-bit ports
– Bus-based I/O
• Processor has address, data and control ports that form a single bus
• Communication protocol is built into the processor
• A single instruction carries out the read or write protocol on the bus

8
Compromises/extensions

• Parallel I/O peripheral Processor Memory

– When processor only supports bus-based I/O System bus

but parallel I/O needed Parallel I/O peripheral

– Each port on peripheral connected to a register


within peripheral that is read/written by the Port A Port B Port C

processor Adding parallel I/O to a bus-


based I/O processor
• Extended parallel I/O Processor Port 0

– When processor supports port-based I/O but Port 1


Port 2

more ports needed Port 3

– One or more processor ports interface with Parallel I/O peripheral

parallel I/O peripheral extending total number of


ports available for I/O Port A Port B Port C

Extended parallel I/O


– e.g., extending 4 ports to 6 ports in figure

9
Types of bus-based I/O:
memory-mapped I/O and standard I/O
• Processor talks to both memory and peripherals using
same bus – two ways to talk to peripherals
– Memory-mapped I/O
• Peripheral registers occupy addresses in same address space as memory
• e.g., Bus has 16-bit address
– lower 32K addresses may correspond to memory
– upper 32k addresses may correspond to peripherals
– Standard I/O (I/O-mapped I/O)
• Additional pin (M/IO) on bus indicates whether a memory or peripheral
access
• e.g., Bus has 16-bit address
– all 64K addresses correspond to memory when M/IO set to 0
– all 64K addresses correspond to peripherals when M/IO set to 1
10
Memory-mapped I/O vs. Standard I/O
• Memory-mapped I/O
– Requires no special instructions
• Assembly instructions involving memory like MOV and ADD work
with peripherals as well
• Standard I/O requires special instructions (e.g., IN, OUT) to move
data between peripheral registers and memory
• Standard I/O
– No loss of memory addresses to peripherals
– Simpler address decoding logic in peripherals possible
• When number of peripherals much smaller than address space then
high-order address bits can be ignored
– smaller and/or faster comparators

11
ISA bus

• ISA supports standard I/O


– /IOR distinct from /MEMR for
ISA I/O bus read protocol
peripheral read CYCLE C1 C2 WAIT C3 C4
• /IOW used for writes CLOCK
DATA
– 16-bit address space for I/O vs. D[7-0]

A[15-0] ADDRESS
20-bit address space for ALE

memory /IOR

– Otherwise very similar to CHRDY

memory protocol

12
A basic memory protocol

D<0...7>
P0 Adr. 7..0 Data P0 D Q
A<0...15>
/CS
P2 Adr. 15…8 /OE
ALE G /WE
Q Adr. 7…0 74373 CS2 /CS1
8 HM6264
ALE P2
/WR /CS
/RD /RD
D<0...7>
/PSEN
A<0...14>
/OE
8051 27C256

• Interfacing an 8051 to external memory


– Ports P0 and P2 support port-based I/O when 8051 internal memory
being used
– Those ports serve as data/address buses when external memory is being
used
– 16-bit address and 8-bit data are time multiplexed; low 8-bits of address
must therefore be latched with aid of ALE signal

13
A more complex memory protocol

FSM description
GO=0
Specification for a single GO=1
read operation ADSP=1, ADSP=0,
CLK S0 ADSC=1 ADSC=0 S1
ADV=1, OE=1, ADV=0, OE=1,
Addr = ‘Z’ GO=0 Addr = Addr0
/ADSP

/ADSC Data is
ready
/ADV GO=0
GO=1 here!
addr <15…0>
/WE
ADSP=1, ADSP=1,
/OE
S2 ADSC=0 ADSC=1 S3
ADV=1, OE=1, ADV=0, OE=0,
/CS1 and /CS2 GO=1
Addr = ‘Z’ Addr = ‘Z’
CS3

data<31…0> GO=1
GO=0

• Generates control signals to drive the TC55V2325FF memory chip in burst mode
– Addr0 is the starting address input to device
– GO is enable/disable input to device

14
Chương IV Vào ra cơ sở

4.1 Ba phương pháp điều khiển vào ra:


1 .Bằng phương pháp thăm dò.
2 .Bằng phương pháp ngắt.
3 .Bằng phương pháp DMA: DMA8237.
Mỗi phương pháp có ưu nhược điểm của nó và phù hợp với
các đặc tính của các thiết bị ngoại vi cũng như cấu trúc kết nối
các thiết bị ngoại vi.
Chương IV Vào ra cơ sở

Thiết bị

Thiết bị

Sơ đồ
Bộ đệm Cổng
Bộ xử lý ưu tiên
vào/ra

Thiết bị

Thiết bị

Phối ghép các thiết bị ngoại vi với CPU theo ưu tiên


1.Phương pháp thăm dò ( Polling )

1.Phương pháp thăm dò ( Polling )


-Đặc điểm:
. Điều khiển vào /ra đơn giản và bằng phần mềm.
. Yêu cầu mỗi thiết bị ngoại vi phải đưa ra 01 bit cờ trạng thái
sẵn sàng của thiết bị (trong thanh ghi trạng thái).
. Phần mềm kiểm tra các bit trạng thái sẵn sàng của thiết bị có
trong hệ thống vi xử lý bằng các vòng lặp.Thiết bị nào có
trạng thái sẵn sàng thì được phục vụ.
. Có thể thăm dò tùy ý nhưng phải thăm dò hết các thiết bị có
trong có hệ thống và có thể thăm dò theo ưu tiên phục vụ.
. Dễ dàng thực hiện các sơ đồ ưu tiên (priority schemes).
1.Phương pháp thăm dò

-Đặc điểm:
. Thời gian của CPU bị chiếm nhiều để thực hiện chương
trình lặp thăm dò.
. Chỉ nên dùng cho một số thiết bị.
1.Phương pháp thăm dò
1.1. Thăm dò theo ưu tiên quay vòng.
-Đọc nội dung của thanh ghi trạng thái để kiểm tra.
-Chỉ thăm dò hết các thiết bị thì vòng thăm dò mới
quay trở lại để bắt đầu vòng thăm dò tiếp theo.
- Như vậy thiết bị nào vừa được phục vụ xong thì sẽ
phải xếp hàng và được phục vụ sau cùng ( ưu tiên
quay vòng )
-Phụ thuộc vào đặc điểm của thiết bị ngoại vi mà số
vòng nhiều hay ít.
-Phù hợp các hệ thống vi xử lý nhỏ chỉ có một ít thiết
bị ngoại vi và cùng tương tự nhau về đặc điểm.
Bắt đầu

Sẵn sàng (Yes)


A có nhu cầu Chương trình

phục vụ hay không? phục vụ A

Không
sẵn sàng (No)

Sẵn sàng (Yes)


B có nhu cầu Chương trình

phục vụ hay không? phục vụ B

Không
sẵn sàng (No)

C có nhu cầu Sẵn sàng (Yes)


Chương trình
phục vụ hay không?
phục vụ C

Không
sẵn sàng (No)

Điều khiển vào/ra bằng thăm dò ưu tiên quay vòng


1.Phương pháp thăm dò
1.2.Thăm dò theo ưu tiên tuyệt đối .
- Thiết bị có mức ưu tiên cao hơn được thăm dò trước.
- Lưu đồ:
Bắt đầu

Sẵn sàng (Yes)


A có nhu cầu Chương trình

phục vụ hay không? phục vụ A

Không
sẵn sàng (No)

Sẵn sàng (Yes)


B có nhu cầu Chương trình

phục vụ hay không? phục vụ B

Không
sẵn sàng (No)
C có nhu cầu Sẵn sàng (Yes)
Chương trình
phục vụ hay không?
phục vụ C

Không
sẵn sàng (No)

Điều khiển vào/ra bằng thăm dò ưu tiên tuyệt đối


1.Phương pháp thăm dò
a.Con chuột.
-Thực hiện thăm dò 30 lần trong 1s như vậy:
.Số chu kỳ nhịp đồng hồ cho thăm dò:30 x 100=300
.Tỷ lệ sử dụng chu kỳ nhịp đồnghồ:
3000/(50x10^6)=0.006%
1.Phương pháp thăm dò

b.Ổ đĩa mềm.


Truyền dữ liệu 16bit đến vi xử lý với tốc độ 50kbit/s thì:
-Số lượng truy nhập thăm dò trong 1s là:
(50kbit/s)/(2 byte/truy nhập)=25kbyte truy nhập thăm dò/s.
-Số nhịp đồng hồ để thăm dò: 25k x 100 = 25.6 x 10^5
-Tỷ lệ sử dụng nhịp đồng hồ cho thăm dò:
(25.6x10^5)/(50 x 10^6) = 5%
1.Phương pháp thăm dò
c.Ổ đĩa cứng
Truyền dữ liệu 16bit tốc độ 2MB/s thì:
-Số lượng truy nhập thăm dò:
(2MB/s)/(4byte/truy nhập) = 500k truy nhập thăm dò/s.
-Số nhịp đồng hồ để thăm dò:
500k x 100 = 51.2x10^6
-Tỷ lệ sử dụng nhịp đồng hồ cho thăm dò:
(51,2 x 10^6)/(50 x 10^6)=100%
2.Phương pháp ngắt

- Đặc điểm:
. Điều khiển chủ yếu bằng phần cứng.
. Thiết bị có yêu cầu được phục vụ phát sinh ra 1 yêu cầu cần
được phục vụ gọi là Ngắt (INTR) gửi về CPU.
. Tiếp nhận tín hiệu ngắt (INTR),CPU thực hiện xong các chu kỳ
dang dở của lệnh máy đang thực hiện,cất giữ nội dung của thanh
ghi cần thiết cho sự tiếp tục thực hiện trở lại chương trình dang
dở và gửi ra thiết bị ngoại vi có yêu cầu ngắt sự chấp nhận ngắt
(ACK).
. Nhận ACK tích cực,thiết bị có yêu cầu ngắt gửi về CPU vectơ
ngắt về CPU để lấy địa chỉ của chương trình con phục vụ ngắt.
. Qua địa chỉ chương trình phục vụ ngắt để vào/ra dữ liệu với thiết
bị có yêu cầu ngắt được thực hiện.
2.Phương pháp ngắt

- Đặc điểm:
. Kết thúc phục vụ ngắt cho thiết bị trở về lại điểm bị ngắt của
chương trình dang dở để tiếp tục thực hiện.
. Các thiết bị được gán mức ưu tiên cho yêu cầu ngắt để CPU
thực hiện các yêu cầu ngăt theo ưu tiên.
. Giảm thiểu thời gian của CPU danh cho điều khiển vào/ra thiết
bị .
. Có thể gắn các yêu cầu ngắt với các sự kiện để xử lý.
. Sự gắn kết các sự kiện ngắt với các số hiệu ngắt làm cho quá
trình thực hiện điều khiển vào/ra dữ liệu dược chuẩn hóa về địa
chỉ.
. Có hiệu quả với những thiết bị có khối lượng dữ liệu vào/ra
theo các khối(block device).
Cách xác định nguồn báo ngắt
1. Xác định nguồn báo ngắt Bằng phần mềm :
Phương pháp này yêu cầu 2 điều kiện
- Mỗi cổng vào ra cần có 1 bit trạng thái
- Khi có ngắt CPU sẽ tự động chạy đến 1 địa chỉ cố định ứng với
ngắt
Trong chương trình phục vụ ngắt CPU sẽ tiến hành chạy chương
trình hỏi vòng xem ngoại vi nào yêu cầu ngắt ( bằng cách kiểm
tra bit trạng thái ) để rẽ nhánh tới chương trình phục vụ ngắt
tương ứng. Lưu đồ chương trình tương tự như chương trình
thăm dò.
Phương pháp này có thể áp dụng cho CPU chỉ có 1 đầu vào ngắt
mà lại có nhiều ngoại vi .
2.Phương pháp ngắt
1.Xác định nguồn báo ngắt Bằng phần mềm :
Thực hiện :
-Các thiết bị ngoại vi được kết hợp vào mạch hoặc cho một
đường dây ngắt dẫn đến chân tín hiệu ngắt của CPU .
-Khi có ngắt Máy tính thực hiện quét các thiết bị để xác định
ngắt xuất phát từ đâu.Mức ưu tiên được tự động gắn vào các thiết
bị theo thứ tự quét.
-Bằng phương pháp mặt nạ hoặc sử dụng các lệnh quay vòng ,
thiết bị ngắt có mức ưu tiên cao nhất được chọn.
-Kỹ thuật này thường sử dụng cho thiết bị trao đổi chậm và
trong hệ thống ngắt đơn.
2.Phương pháp ngắt

2.Xác định nguồn báo ngắt Bằng phần cứng :


Có 2 cách
Cách 1. Mỗi nguồn báo ngắt có 1 đường vào riêng biệt và có vecto
ngắt riêng ( ví dụ MCS51)
Cách 2. Khi có ngắt CPU tiến hành 1 chu kỳ máy đặc biệt – Nhận
biết ngắt ( Interrupt acknowledge ).
Ví dụ 80x86 sử dụng mạch quản lý ngắt ưu tiên PIC 8259
( Programmable Interrupt Controller)
Khi đó CPU dùng tín hiệu INTA tích cực để đọc trên kênh số liệu
của 8259 thông tin đến nguồn ngắt ( gọi là số hiệu ngắt, ký hiệu
là n và có độ dài 8 bit ) . Sau đó CPU dùng số n này để tự động
tính ra vector ngắt tương ứng .
Một vi mạch PIC8259 quản lý được 8 đầu vào ngắt
2.Phương pháp ngắt
2.Xác định nguồn báo ngắt Bằng phần cứng ( tiếp )

DATA BUS
CPU

INT0 NGOẠI VI 1

INTA

PIC 8259
INT
INT7 NGOẠI VI 8

31
2.Phương pháp ngắt

3.Các bước xử lý ngắt và cấu trúc ngắt.


RST n (DI cấm ngắt)

Chương trình con


Chương phục vụ ngắt

trình chính
EI:cho phép ngắt.
RET trở về
Chương trình chính

Trả lời ngắt là lời gọi đến chương trình con


2.Phương pháp ngắt
4.Ngắt không che được (non-maskable interrupt)
Đặc điểm:
• Có mức ưu tiên cao nhất trong các ngắt cứng;
• Tác động bằng phần cứng với mức xung logic cao vào chân
NMI của vi xử lý (không dùng INTR)
• Không được điều khiển bởi 8259A (trong IBM PC/XT, AT)
• Được tạo ra khi xuất hiện các sự kiện: lỗi chẵn lẻ ở kênh
vào/ra, lỗi bộ đồng xử lý;
• Có thể bị cấm khi thiết lập bit 7 của thanh ghi địa chỉ 070h
trong các hệ thống từ AT286 trở lên.
Microprocessor interfacing: interrupts
• Suppose a peripheral intermittently receives data,
which must be serviced by the processor
– The processor can poll the peripheral regularly to see if data
has arrived – wasteful
– The peripheral can interrupt the processor when it has data
• Requires an extra pin or pins: Int
– If Int is 1, processor suspends current program, jumps to an
Interrupt Service Routine, or ISR
– Known as interrupt-driven I/O
– Essentially, “polling” of the interrupt pin is built-into the
hardware, so no extra time!

34
Microprocessor interfacing: interrupts

• What is the address (interrupt address vector) of the


ISR?
– Fixed interrupt
• Address built into microprocessor, cannot be changed
• Either ISR stored at address or a jump to actual ISR stored if not
enough bytes available
– Vectored interrupt
• Peripheral must provide the address
• Common when microprocessor has multiple peripherals connected
by a system bus
– Compromise: interrupt address table

35
Interrupt address table
• Compromise between fixed and vectored interrupts
– One interrupt pin
– Table in memory holding ISR addresses (maybe 256 words)
– Peripheral doesn’t provide ISR address, but rather index into
table
• Fewer bits are sent by the peripheral
• Can move ISR location without changing peripheral

36
Additional interrupt issues
• Maskable vs. non-maskable interrupts
– Maskable: programmer can set bit that causes processor to ignore
interrupt
• Important when in the middle of time-critical code
– Non-maskable: a separate interrupt pin that can’t be masked
• Typically reserved for drastic situations, like power failure requiring
immediate backup of data to non-volatile memory
• Jump to ISR
– Some microprocessors treat jump same as call of any subroutine
• Complete state saved (PC, registers) – may take hundreds of cycles
– Others only save partial state, like PC only
• Thus, ISR must not modify registers, or else must save them first
• Assembly-language programmer must be aware of which registers stored

37
3.Phương pháp DMA
3.1.Khái niệm DMA
• Kỹ thuật vào ra DMA(Direct Memory Acess) là phương pháp
truy cập trực tiếp tới bộ nhớ hoặc I/O mà không có sự tham gia
của CPU .Phương pháp này trao đổi dữ liệu giữa bộ nhớ và thiết
bị ngoại vi với tốc độ cao và chỉ bị hạn chế bởi tốc độ của bộ
nhớ hoặc của bộ điều khiển DMA .
• DMA được ứng dụng trong nhiều mục đích nhưng thông
thường nó được dùng trong quá trình "refresh" DRAM, màn
hình, đọc ghi đĩa, truyền dữ liệu giữa các vùng nhớ với tốc độ
cao.
ADDRESS LATCHES

ALE

AD0-AD15

CPU DATA BUS MEMORY


DATA BUS
CONTROL BUS
CONTROL BUS
(IOR, IOW, MEMR,MEMW)

DATA BUS
HOLD HRQ
DMA CONTROL BUS
CONTROLLER
HLDA HLDA DREQ PERIPHERAL
DACK DEVICE

Nguyên tắc vào ra bằng DMA trong hệ Vi xử lý.


Sơ đồ khối mạch điều khiển vào ra DMA

Address bus
8088

HRQ

8237
Quá trình trao đổi thông tin bằng DMA

41
Intel 8237 DMA controller

Signal Description
D[7..0] Intel 8237 REQ 0
A[19..0] ACK 0 D[7..0] These wires are connected to the system bus (ISA) and are used by the
ALE microprocessor to write to the internal registers of the 8237.
MEMR REQ 1
ACK 1 A[19..0] These wires are connected to the system bus (ISA) and are used by the DMA to
MEMW
IOR issue the memory location where the transferred data is to be written to. The 8237 is
IOW REQ 2 ALE* also addressed
This by the
is the address micro-processor
latch through
enable signal. The 8237theuselower bits ofwhen
this signal thesedriving
addressthelines.
ACK 2 system bus (ISA).
HLDA MEMR* This is the memory write signal issued by the 8237 when driving the system bus
HRQ REQ 3
ACK 3 (ISA).
MEMW* This is the memory read signal issued by the 8237 when driving the system bus (ISA).

IOR* This is the I/O device read signal issued by the 8237 when driving the system bus
(ISA) in order to read a byte from an I/O device
IOW* This is the I/O device write signal issued by the 8237 when driving the system bus
(ISA) in order to write a byte to an I/O device.
HLDA This signal (hold acknowledge) is asserted by the microprocessor to signal that it has
relinquished the system bus (ISA).
HRQ This signal (hold request) is asserted by the 8237 to signal to the microprocessor a
request to relinquish the system bus (ISA).
REQ 0,1,2,3 An attached device to one of these channels asserts this signal to request a DMA
transfer.
ACK 0,1,2,3 The 8237 asserts this signal to grant a DMA transfer to an attached device to one of
these channels.
*See the ISA bus description in this chapter for complete details.

42
Vi mạch DMA 8237
Tên tín hiệu Chức năng
D7 – D0 Bus dữ liệu, 2 chiều, 3 trạng thái
RESET Đầu vào thiết lập lại
CS# Đầu vào lựa chọn chip
MEMR# Đọc bộ nhớ
MEMW# Ghi bộ nhớ
A7 – A4 Đầu ra bus địa chỉ, 3 trạng thái
A3 – A0 Bus địa chỉ 2 chiều, 3 trạng thái
I/OR# Đọc I/O 2 chiều, 3 trạng thái
I/OW# Ghi I/O
READY Đầu vào sẵn sàng
CLK Đầu vào CLK
HRQ Đầu ra yêu cầu chờ
HLDA Đầu vào chấp nhận chờ
AEN Đầu ra cho phép địa chỉ
ADSTB Đầu ra định nhịp địa chỉ
EOP# Kết thúc quá trình, 2 chiều
MARK Đầu ra mặt nạ modul 128
DRQ3 - DRQ0 Đầu vào yêu cầu DMA
DACK3# - DACK0# Đầu ra chấp nhận DMA
Vcc +5V
GND Nối đất
Vi mạch DMA 8237
• 8237 là một bộ điều khiển DMA cung cấp địa chỉ bộ nhớ và tín
hiệu điều khiển trong suốt quá trình DMA và truyền số liệu với
tốc độ cao giữa bộ nhớ và thiết bị vào ra .
• 8237 là vi mạch có 4 kênh tương thích với bộ VXL 8088, các
kênh này có thể mở rộng thêm nhiều kênh khác mặc dù đối với
hệ thống nhỏ thì 4 kênh này là qúa đủ.
• DMAC 8237 có thể thực hiện truyền dữ liệu theo 3 kiểu: kiểu
đọc (từ bộ nhớ ra thiết bị ngoại vi), kiểu ghi (từ thiết bị ngoại vi
đến bộ nhớ) và kiểu kiểm tra.
1. Sơ đồ khối chức năng của DMA 8237
CH-0
DRQ0
Bộ đệm 16 bit
D7-D0 DACK0#
Bus dữ liệu ADDR
CNTR

I/OR# CH-1
I/OW# DRQ1
16 bit
CLK
RESET ADDR DACK1#
A0 Logic
CNTR
A1 đọc/ghi
A2 CH-2
A3 DRQ2
CS# 16 bit
DACK2#
ADDR
A4
A5 CNTR
A6
A7 Logic CH-3
DRQ3
READY 16 bit
đ/k và
HRQ
HLDA thanh ghi ADDR
DACK3#
MEMR# thiết lập CNTR
MEMW#
AEN
chế độ
ADSTB Bộ giải quyết
EOP#
ưu tiên
Vi mạch DMA 8237

2.Các khối chức năng của DMA 8237


• Khối đệm bus dữ liệu.
Ðây là bộ đệm 8 bit ghép nối 8237 với bus hệ thống .
(D0- D7) : Các đường bus dữ liệu ba trạng thái, hai chiều . Khi 8237 đang
được lập trình điều khiển bởi 8088 CPU , 8 bit dữ liệu của thanh ghi địa
chỉ DMA , thanh ghi chế độ (Mode set Register ) được gửi đến từ bus dữ
liệu. Khi 8088 CPU đọc một thanh ghi địa chỉ DMA , hoặc thanh ghi đếm (
terminal count Register ) ,thanh ghi trạng thái dữ liệu được truyền đến
8088 thông qua bus dữ liệu . Trong suốt chu kỳ DMA ( khi 8237 đang nắm
quyền điều khiển bus dữ liệu ) ,8237 sẽ gửi 8 bit quan trọng nhất của địa
chỉ bộ nhớ ( từ một trong số các thanh ghi địa chỉ DMA ) tới bộ điều khiển
bus. Các bit địa chỉ này sẽ được truyền ngay khi bắt đầu chu kỳ DMA ,sau
đó bus dữ liệu sẽ được giải phóng để thực hiện quá trình trao đổi dữ liệu
với bộ nhớ trong suốt quá trình DMA .
Vi mạch DMA 8237
2.Các khối chức năng của DMA 8237
• Các kênh DMA (DMA chanel )
Mỗi kênh (CH0 - CH3) bao gồm hai thanh ghi 16 bit :
Thanh ghi địa chỉ DMA và thanh ghi đếm (aTerminal Count Register )
Hai thanh ghi này phải được khởi tạo trước khi các kênh được phép
hoạt động . Thanh ghi địa chỉ DMA được đọc cùng với địa chỉ của ô
nhớ đầu tiên được truy cập .Giá trị được ghi vào thanh ghi đếm
( termianal count register ) xác định số các chu kỳ DMA ngay trước
khi đầu ra của bộ đếm Terminal (Terminal count ) TC hoạt động. Nói
chung khi muốn có N chu kỳ DMA thì giá trị N-1 phải được đưa tới 14
bit thấp của thanh ghi đếm cổng vào ra (Terminal Count Register ).
Hai bit cao nhất của thanh ghi này xác định loại hoạt động DMA cho
kênh này .
Vi mạch DMA 8237

2.Các khối chức năng của DMA 8237


• Khối đọc/ghi logic (Read/ Write logic )
Khi CPU là chủ và 8237 là tớ thì 8088 CPU đọc hoặc ghi nội dung một
trong số các thanh ghi của 8237. Khối logic điều khiển đọc ghi nhận lệnh
đọc I/O (IOR) hoặc I/O Write (IOW) thông báo cho vi mạch điều khiển
bus 8288 giải mã 4 bit địa chỉ thấp nhất (A0- A3 ) và đồng thời ghi nội
dung của bus dữ liệu vào thanh ghi địa chỉ (nếu là tín hiệu IOW) hoặc ghi
nội dung thanh ghi địa chỉ lên bus dữ liệu (nếu là tín hiệu IOR ). Trong
suốt quá trình DMA khối logic điều khiển đọc ghi thực hiện lệnh đọc I/O
và ghi bộ nhớ ( chu kỳ DMA ghi) hoặc tín hiệu ghi I/O và đọc bộ nhớ
( chu kỳ DMA đọc). Cần lưu ý rằng trong suốt quá trình điều khiển DMA
thiết bị I/O không hoạt đông trong chế độ này phải được đặt ở trạng thái
"cấm " sử dụng tín hiệu AEN .
Vi mạch DMA 8237

2.Các khối chức năng của DMA 8237


- CLK : Ðược nối với tín hiệu đồng hồ hệ thống .
- CS# :Tín hiệu chọn mạch ,thông thường nối với đầu ra của một
bộ giải mã. Khi 8237 là thợ và CPU là chủ thì CS# = 0 khi lập
trình CPU vào/ra với thanh ghi 8237.
- RESET : Là tín hiệu xóa toàn bộ hệ thống VXL. Nó xóa các
thanh ghi, các flip-flop bên trong 8237 và các tín hiệu yêu cầu
DMA. Sau khi kết thúc xung xóa 8237 được đưa đến trạng thái
“nghỉ” sẵn sàng nhận các lệnh và dữ liệu từ CPU.
- READY : tạo trạng thái chờ cho 8237 đối với bộ nhớ hoặc I/O
có tốc độ thấp .
- DRQ0 - DRQ3 (DMA request) : là 4 tín hiệu vào yêu cầu DMA
từ t/b nhớ ngoài. Khi có một trong các tín hiệu này chuyển lên
mức tích cực “1” thì 8237 sẽ phải chuyển yêu cầu này thông
qua sinh ta tín hiệu HRQ về CPU.
Vi mạch DMA 8237

2.Các khối chức năng của DMA 8237


- HRQ (hold request ) : nối với HOLD của VXL tạo yêu cầu có được quyền
điều khiển bus hệ thống .
- HLDA (hold Acknowledge ) :tín hiệu thông báo CPU đã thả nổi bus địa
chỉ ,dữ liệu ,điều khiển của nó. Khi nhận được tín hiệu HRQ ở mức tích
cực “1” VXL phải tạo ra HLDA để thực hiện trao quyền điều khiển bus hệ
thống cho 8237.
- DB0 - DB7 (data bus ): Chân nối với bus dữ liệu của bộ VXL 8088 được sử
dụng trong quá trình lập trình cho 8237A-5
- I/OR# và I/OW# : là tín hiệu 2 chiều, 3 trạng thái, điều khiển đọc và ghi I/O .
- EOP (end of process ) : tín hiệu hai chiều báo kết thúc DMA tại cuối chu kỳ
DMA .
- A3- A0 : là đường địa chỉ 2 chiều, 3 trạng thái. Chọn thanh ghi nội cần lập
trình và một phần địa chỉ truyền DMA trong quá trình DMA .
- A7 - A4 : là các đường ra địa chỉ, 3 trạng thái. Cung cấp 1 phần địa chỉ còn
lại của DMA .
Vi mạch DMA 8237

2.Các khối chức năng của DMA 8237


- DACK0- DACK3 : (DMA chanel acknowledge ) Ðầu ra chấp
nhận DMA ( có thể lập trình được ) . Thường dùng để chọn
thiết bị cần điều khiển DMA
- AEN : Cho phép chốt địa chỉ nối với DB0 - DB7 đồng thời
không cho phép các bộ đệm trong hệ thống được nối với
VXL . Khi AEN=“1”,8237 giành quyền điều khiển bus địa chỉ,
bus dữ liệu của bus hệ thống.
- ADSTB : (adress strobe ) : hoạt động như ALE nhưng chỉ sử
dụng bởi bộ điều khiển DMA chốt địa chỉ A8- A15 trong suốt
quá trình truyền DMA .
- MEMW# ,MEMR# :là tín hiệu ra, 3 trạng thái, điều khiển bộ
nhớ đọc,ghi dữ liệu trong chu kỳ DMA tương ứng .
RAM DATA Thiết bị
ngoại vi

MEMW# I/OW#
DMAC
I/OR#
MEMR# 8237

Trao đổi dữ liệu giữa thiết bị ngoại vi và RAM


Vi mạch DMA 8237

3. Các thanh ghi nội


- Thanh ghi địa chỉ hiện thời (CAR ) : Lưu 16 bít địa chỉ bộ nhớ
trong suốt quá trình truyền DMA . Mỗi kênh đều có một thanh
ghi này và CAR tăng hoặc giảm tuỳ thuộc vào cách lập trình .
- Thanh ghi đếm từ hiện thời (CWCR ) : điều khiển số byte được
truyền trong quá trình DMA . Số ghi trong thanh ghi này nhỏ
hơn số byte đã được truyền 1 đơn vị .
- Thanh ghi địa chỉ cơ sở và từ cơ sở (BWCR): sử dụng khi chọn
chế độ tự động kích hoạt cho một kênh ,trong quá trình này
thanh ghi BWCR được dùng để gọi lại các thanh ghi CAR và
CWCR sau khi DMA kết thúc.
- Thanh ghi lệnh : lập trình cho hoạt động của 8237.
Vi mạch DMA 8237

Thanh ghi lệnh (Command register )


Vi mạch DMA 8237

- Thanh ghi chế độ:Thiết lập chế độ hoạt động cho mỗi kênh.

Thanh ghi chế độ ( Mode register )


Vi mạch DMA 8237

-Thanh ghi yêu cầu: dùng yêu cầu truyền DMA bằng phần mềm

Thanh ghi yêu cầu DMA ( Request register ).


Vi mạch DMA 8237
- Thanh ghi che set/reset : xoá ,thiết lập việc cấm các kênh

Mask register set/reset mode


Vi mạch DMA 8237

- Thanh ghi cấm : xoá hoặc thiết lập việc cấm của tất cả
các kênh bằng một lệnh .

Thanh ghi cấm (Mask reegister)


Vi mạch DMA 8237

- Thanh ghi trạng thái (SR ) : xác định trạng thái của các
kênh DMA .

Thanh ghi trạng thái (Status register )


Vi mạch DMA 8237
4.Hoạt động DMA
- Các thao tác bên trong 8237 có thể thực hiện thông qua 7
trạng thái của quá trình DMA.
- DMAC 8237 có thể thực hiện truyền dữ liệu theo 3 kiểu:
kiểu đọc (từ bộ nhớ ra thiết bị ngoại vi), kiểu ghi (từ thiết bị
ngoại vi đến bộ nhớ) và kiểu kiểm tra.
Sơ đồ khối

Address bus
8088

HRQ

8237
Quá trình trao đổi thông tin
Vi mạch DMA 8237

4.Hoạt động DMA


• Trạng thái SI (Idle state), trạng thái nghỉ: Khi 8237 không
thực hiện một chu kỳ DMA nào thì nó ở trong trạng thái nghỉ
SI, nó chỉ nhận lệnh từ CPU.
• Trạng thái S0 : là trạng thái đầu tiên của quá trình DMA. Một
chu kỳ DMA bắt đầu khi một hay nhiều tín hiệu yêu cầu
DMA(DRQn) chuyển lên mức tích cực “1”. Khi đó, 8237 sẽ
chuyển vào trạng thái S0 và gửi về CPU tín hiệu “yêu cầu
treo” bus hệ thống HRQ. 8237 trong trạng thái S0 chờ đợi tín
hiệu “chấp nhận treo” bus HLDA
• Các trạng thái làm việc S1,S2,S3,S4: quá trình thực hiện DMA
mỗi một chu kỳ DMA bao gồm ít nhất 4 trạng thái bên trong:
S1,S2,S3 và S4.
Vi mạch DMA 8237

4.Hoạt động DMA


- Hai tín hiệu để yêu cầu và xác nhận trong hệ thống là HOLD
được sử dụng để yêu cầu DMA và HLDA là đầu ra xác nhận
DMA .Khi tín hiệu HOLD hoạt động ( = 1) DMA được yêu
cầu. Bộ VXL trả lời bằng cách kích hoạt tín hiệu HLDA ,xác
nhận yêu cầu đồng thời thả nổi các công việc hiện thời cùng
các bus dữ liệu và địa chỉ ,điều khiển được đặt ở trạng thái trở
kháng cao . Trạng thái này cho phép các thiết bị I/O bên ngoài
hoặc các bộ VXL khác nắm quyền điều khiển bus hệ thống để
truy cập trực tiếp bộ nhớ . Tín hiệu HOLD có mức ưu tiên cao
hơn INTR( interrupt request ) hoặc đầu vào NMI (ngắt không
che được ) và chỉ sau RESET .
- Tín hiệu HOLD luôn có hiệu lực tại bất kỳ thời điểm nào trong
suốt quá trình thực hiện các lệnh khác của VXL .
Vi mạch DMA 8237

4.Hoạt động DMA


- Ðể điều khiển quá trình đọc DMA ta cần hai tín hiệu hoạt động
MEMR(đọc bộ nhớ) và IOW (ghi I/O ) .Ðể điều khiển quá
trình ghi ta có hai tín hiệu MEMW ( ghi bộ bộ nhớ ) và IOR
(đọc I/O ).Bộ điều khiển DMA cung cấp địa chỉ bộ nhớ và tín
hiệu chọn thiết bị I/O cho 8088 trong suốt quá trình DMA .
DRQ
HRQ
DMAC
DACK# HLDA
8237

DRQ HRQ
DMAC HLDA DRQ0
DACK# 8237
DACK0#
DRQ1 HRQ
DACK0#
DMAC
HRQ HLDA CPU
DRQ DRQ2 8237
HLDA DACK0#
DMAC
DACK# 8237 DRQ3
DACK0#

DRQ HRQ
DMAC HLDA
DACK# 8237
Kết nối tầng các mạch DMA
Advanced communication principles

• Layering
– Break complexity of communication protocol into pieces easier to design and
understand
– Lower levels provide services to higher level
• Lower level might work with bits while higher level might work with packets of data
– Physical layer
• Lowest level in hierarchy
• Medium to carry data from one actor (device or node) to another
• Parallel communication
– Physical layer capable of transporting multiple bits of data
• Serial communication
– Physical layer transports one bit of data at a time
• Wireless communication
– No physical connection needed for transport at physical layer
70
Parallel communication
• Multiple data, control, and possibly power wires
– One bit per wire
• High data throughput with short distances
• Typically used when connecting devices on same IC or same
circuit board
– Bus must be kept short
• long parallel wires result in high capacitance values which requires more
time to charge/discharge
• Data misalignment between wires increases as length increases
• Higher cost, bulky

71
Serial communication

• Single data wire, possibly also control and power wires


• Words transmitted one bit at a time
• Higher data throughput with long distances
– Less average capacitance, so more bits per unit of time
• Cheaper, less bulky
• More complex interfacing logic and communication protocol
– Sender needs to decompose word into bits
– Receiver needs to recompose bits into word
– Control signals often sent on same wire as data increasing protocol
complexity

72
Wireless communication
• Infrared (IR)
– Electronic wave frequencies just below visible light spectrum
– Diode emits infrared light to generate signal
– Infrared transistor detects signal, conducts when exposed to infrared
light
– Cheap to build
– Need line of sight, limited range
• Radio frequency (RF)
– Electromagnetic wave frequencies in radio spectrum
– Analog circuitry and antenna needed on both sides of transmission
– Line of sight not needed, transmitter power determines range

73
Error detection and correction
• Often part of bus protocol
• Error detection: ability of receiver to detect errors during transmission
• Error correction: ability of receiver and transmitter to cooperate to correct
problem
– Typically done by acknowledgement/retransmission protocol
• Bit error: single bit is inverted
• Burst of bit error: consecutive bits received incorrectly
• Parity: extra bit sent with word used for error detection
– Odd parity: data word plus parity bit contains odd number of 1’s
– Even parity: data word plus parity bit contains even number of 1’s
– Always detects single bit errors, but not all burst bit errors
• Checksum: extra word sent with data packet of multiple words
– e.g., extra word contains XOR sum of all data words in packet

74
4.2 Vào/ ra song song

1. Nguyên lý, cấu trúc cổng vào không đối thoại,có đối thoại.
2. Nguyên lý cấu trúc cổng ra không đối thoại,có đối thoại.
3. Nguyên lý, cấu trúc cổng ra cổng Read-back,cổng định
hướng.

75
4.2 Vào/ ra song song
• Quá trình vào ra trong máy tính là quá trình trao đổi thông tin
giữa CPU và các thiết bị ngoại vi trong hệ thống xử lý.
• Có nhiều phương pháp vào ra khác nhau,nhưng có thể chia
làm 3 nhóm chính:
• Vào ra điều khiển bằng chương trình.
• Vào ra điều khiển bằng ngắt.
• Vào ra thâm nhập trực tiếp bộ nhớ (DMA).

76
4.2 Vào/ ra song song
• Trong phương pháp vào ra điều khiển bằng chương trình,
ngoại vi được ghép nối với Bus hệ thống của vxl qua các
phần: thích ứng về công nghệ và thích ứng về logic. Chúng
được gọi là các mạch ghép nối.
• Thích ứng về công nghệ làm nhiệm vụ làm nhiệm vụ điều
chỉnh mức tín hiệu giữa công nghệ sản xuất thiết bị ngoại vi
và công nghệ sản xuất các mạch cấu tạo nên Bus của VXL.
• Thích ứng về logic có nhiệm vụ tạo tín hiệu điều khiển ngoại
vi từ tín hiệu điều khiển trên Bus hệ thống.

77
4.2 Vào/ ra song song
• Sơ đồ ghép nối:

78
4.2 Vào/ ra song song
• Bộ ghép nối được chia làm 2 nhóm chính:
- Bộ ghép nối song song.
- Bộ ghép nối tiếp.
• Ghép nối song song được sử dụng rộng rãi: để kết nối
máy in tới PC,ghép nối với bộ nhớ ngoài
(SRAM,EPROM…),các hệ thống thu nhận dữ liệu…
• Các bộ ghép nối song song đơn giản,nó là các cửa vào ra
được ghép nối trực tiếp với bộ VXL.Thông thường nó
được cấu tạo bởi các thanh chốt dữ liệu và các mạch đệm.
• Trước hết chúng ta cần biết về bộ VXL được dùng trong
ghép nối này.

79
4.2 Vào/ ra song song
I. Nguyên lý cấu trúc cổng vào có đối thoại và không đối thoại 1.
1. Giới thiệu một số IC để cấu tạo cổng vào ra song song :
• Trước tiên ta cần làm quen với 1 số IC được dùng để cấu tạo nên
cổng.
1. IC chốt 74LS373:

80
4.2 Vào/ ra song song

. Bảng chức năng:

81
4.2 Vào/ ra song song

2. IC đệm vào 3 trạng thái 74LS244:

.Bảng chức năng:

82
4.2 Vào/ ra song song

• 2. Cấu trúc cổng vào không đối thoại


• Đặc điểm : Ngoại vi luôn luôn sẵn sàng cấp số liệu và Vi
xử lý có thể đọc bất kỳ lúc nào mà không cần kiểm tra
tính sẵn sàng của dữ liệu.

83
4.2 Vào/ ra song song
• Nguyên lý hoạt động:
. Để giảm số chân của CPU người ta thường ghép các tín hiệu
địa chỉ và dữ liệu.VD các chân AD0…AD7 được ghép cho
các bit thấp của địa chỉ.Vì vậy ta cần IC 74LS373 để tách tín
hiệu này ra.
. Khi ALE =1 thì dữ liệu mang 8bit phần thấp của địa chỉ,nó
sẽ làm mở chốt,thông tin về địa chỉ được tách. Khi ALE =0
thông tin về địa chỉ được giữ lại ở bộ chốt 74LS373.
. Khi cần đọc dữ liệu đưa vào CPU gửi tín hiệu =0, tín
hiệu này cùng với tín hiệu giải mã địa chỉ sẽ làm cho bộ đệm
thông ( khi =0, =0),dữ liệu từ ngoại vi sẽ qua bộ đệm
và được CPU đọc.

84
• 3. Cổng vào có đối thoại:
IBF (Input Buffer Full, Input Data Ready )
(INT)

Reset by device

STB (Strobe) by device

Sometimes, IORD is directly connected to CLR pin of D-FF to reset D-FF 85


4.2 Vào/ ra song song
• Nguyên lý hoạt động :
. Khi ngoại vi có dữ liệu cần gửi cho CPU,dữ liệu được
đưa tới đầu vào của IC chốt, khi dữ liệu đã ổn định ngoại
vi gửi 1 xung CLK đến. Sườn lên của xung này để mở IC
chốt,dữ liệu được giữ an toàn trong chốt này. Sườn xuống
của xung CLK làm D flip-flop hoạt động, tại đầu ra Q có
tín hiệu SR ( Input Buffer Full) mức logic 1.
. Tín hiệu SR này được nối tới chân READY của CPU để
báo CPU biết ngoại vi sẵn sàng gửi dữ liệu.
. CPU sẽ gửi tín hiệu = 0 và địa chỉ tương ứng của
ngoại vi để giải mã. Tín hiệu và tín hiệu đã giải mã
được kết hợp qua cổng OR thành tín hiệu IORD.

86
4.2 Vào/ ra song song

• Sườn xuống của tín hiệu IORD này sẽ làm thông bộ đệm
74LS244 và dữ liệu sẽ được truyền từ ngoại vi vào CPU.
Sườn lên của xung này sẽ làm cho D flip-flop hoạt động
(đây cũng là kết thúc quá trình đọc của CPU) đầu ra Q sẽ
có mức logic 1 báo cho ngoại vi biết dữ liệu đã được
truyền xong.
• Ngoại vi sẽ tạo ra tín hiệu thiết lập để xóa các latch D flip-
flop về lại trạng thái ban đầu để chuẩn bi cho quá trình gửi
dữ liệu tiếp theo.

87
4.2 Vào/ ra song song
• Biểu đồ thời gian quá trình đọc:
CLK

RR

IORD

Quá trình đọc dữ liệu

Dữ liệu đã được gửi

Thiết lập

88
4.2 Vào/ ra song song
• Lưu đồ thuật toán để thể hiên quá trình vào có đối thoại:

89
4.2 Vào/ ra song song
II. Nguyên lý cấu trúc cổng ra có đối thoại và không đối thoại:
1. Cổng ra song song không đối thoại:
Đặc điểm : Ngoại vi luôn ở trạng thái sẵn sàng nhận số liệu, Vi xử
lý có thể đưa dữ liệu ra bất cứ khi nào cần mà không phải kiểm
tra tính sẵn sàng của ngoại vi

90
4.2 Vào/ ra song song
• Nguyên lý hoạt động:
. Khi CPU thực hiện câu lệnh đưa dữ liệu ra thì Bộ điều khiển
sẽ thực hiện các bước sau :
- Phát tín hiệu địa chỉ lên kênh địa chỉ
- Phát tín hiệu ALE để chốt địa chỉ
- Phát dữ liệu lên kênh dữ liệu
- Phát tín hiệu điều khiển =0
. Tương tự như cổng vào.thông tin địa chi được phân kênh nhờ
IC chốt. Địa chỉ được giải mã và kết hợp với tín hiệu
qua cổng OR,tín hiệu ra của cổng OR này được đưa vào chân
C của IC chốt thứ 2. Tín hiệu này làm thông các latch và dữ
liệu được ghi vào bộ chốt và đưa đến ngoại vi.

91
4.2 Vào/ ra song song
2. Cổng ra song song có đối thoại:
. Sơ đồ:
OBF (Output Buffer Full,
Output Data Ready)

(ACK)

92
4.2 Vào/ ra song song
• Nguyên lý:
.CPU sẽ kiểm tra ngoại vi xem có sẵn sàng để nhận dữ liệu hay
không.
. Khi ngoại vi sẵn sàng thì tín hiệu ngoại vi sẵn sàng sẽ đươc
thiết lập,sườn lên của xung này sẽ mở đệm và tín hiệu RR sẽ
được gửi đến chân READY của CPU để báo CPU biết ngoại vi
đã sẵn sàng.
. Sau khi biết ngoại vi đã sẵn sàng CPU sẽ gửi tín hiệu =0
cùng với địa chỉ tương ứng của ngoại vi. Qua cổng OR ta được
tín hiệu IOWR, sườn lên của xung này sẽ kích hoạt IC chốt làm
việc,và dữ liệu từ CPU được gửi tới ngoại vi.

93
4.2 Vào/ ra song song

. Sau khi CPU gửi dữ liệu xong,lúc này sườn xuống của
xung IOWR sẽ làm D flip-flop hoạt động, đầu ra Q sẽ có
mức logic 1,báo cho ngoại vi biết dữ liệu đã gửi xong.
Lúc này ngoại vi sẽ sinh ra tín hiệu thiết lập để xóa các D
flip-flop trở lại trạng thái ban đầu.
. Biểu đồ thời gian:

94
4.2 Vào/ ra song song

95
4.2 Vào/ ra song song
• Lưu đồ thuật toán thể hiện quá trình ghi:

96
4.2 Vào/ ra song song
• III. Nguyên lý cấu trúc cơ bản cổng ra cổng read back,
cổng định nghĩa hướng:

97
4.2 Vào/ ra song song
• Hình trên minh họa chi tiết cho cấu trúc bên trong của
cổng máy in(cổng song song).
• Thực tế cổng này được hợp thành bởi 3 cổng:
. Cổng Dữ liệu 8 bit.
. Cổng Điều Khiển 4 bit.
. Cổng Trạng Thái 5 bit.
. Thông thường địa chỉ trong Ram của cổng song song là:

98
4.2 Vào/ ra song song

99
• Hình trên minh họa các chi tiết của cổng Dữ liệu:
. Cổng Dữ liệu gồm 2 cổng : một cổng đầu ra và một cổng
đầu vào có cùng địa chỉ. Cổng đầu vào này thường được
gọi là cổng read-back.
. Đầu vào của latch 74LS374 được nối tới BUS,đầu ra của
latch này được nối tới các chân ra của cổng Dữ Liệu. Và
8bit đầu vào này được nối tới bộ đệm 74LS244 đầu ra của
bộ đệm này được nối trở lại BUS.

100
4.2 Vào/ ra song song

101
4.2 Vào/ ra song song
• Hình trên là cấu trúc của cổng Trạng Thái. Đây là cổng
vào. Tín hiệu vào được qua bộ đệm đảo đảo 74LS240
được đưa tới các bit cao byte dữ liệu (bit D3 – D7).

102
4.2 Vào/ ra song song

103
4.2 Vào/ ra song song
• Hình trên miêu tả cấu trúc của cổng Điều Khiển. 4 bit của
cổng này là 4 bit thấp của byte dữ liệu (D0 – D3). Các bit
này được nối đầu vào của latch 74LS174, đầu ra của latch
được nối các chân ra của cổng Điều Khiển. Các chân này
cũng có tác dụng đọc tín hiệu vào. Khi đọc tín hiệu vào,thì
tín hiệu được nối qua bộ đệm đảo 74LS240 và được đưa
trở lại các bit D0-D3.
• Dữ liệu cũng có thể được gửi qua cổng ĐK giống như gửi
qua cổng Dữ liệu. VD: Ta có thể dùng cổng Điều Khiển
để ghép nối PC với vi điều khiển AVR.

104
4.2 Vào/ ra song song
• Khi gửi dữ liệu,những dữ liệu thích hợp sẽ được gửi tới
cổng ĐK và sẽ được gửi tới AVR. Còn khi đọc dữ
liệu,trước tiên các bit của cổng ĐK được đặt lên ‘1’ và
khi có tín hiệu điều khiển đọc dữ liệu bộ đệm sẽ được mở
và dữ liệu được đọc.

105
4.3 VÀO RA ĐỊNH THỜI
4.3 Vào ra định thời
• 1 Định nghĩa, nguyên lý mạch định thời và Bộ đếm

107
Timers ( Mạch định thời )
• Timer: Đo khoảng thời gian
– Tạo ra các sự kiện đầu ra theo thời gian
• Ví dụ giữ đèn giao thông màu xanh sáng trong 10 s
– Đo sự kiện ở đầu vào
• Ví dụ đo tốc độ xe hơi, tần số
Basic timer
• Dựa trên việc đếm số xung với tần số chuẩn 16-bit up
Clk 16 Cnt
• Ví dụ xung clock có khu kỳ Tclk= 10 ns counter

• Và Bộ đếm đếm đươc 20,000 xung clock Tov


• Như vậy khoảng thời gian 200 us đã qua Reset
• Bộ đếm 16-bit có thể đếm 65,535*10 ns = 655.35
microsec., resolution = 10 ns
• Hiện tượng tràn : khi Bộ đếm đếm đến giá trị lớn
nhất nếu có xung tiếp theo bộ đếm sẽ bị tràn và
quay về giá trị 0000, khi đó nó sẽ phát tín hiệu Tov

108
Counters ( Bộ đếm )
• Counter: tương tự như Timer cũng
cấu tạo từ 1 bộ đếm, nhưng xung
đếm được tạo ra từ một sự kiện và
đưa đến đầu vào đếm ( Count_in ) Timer/counter

chứ không phải đầu vào Clk Clk


2x1 16-bit up
16 Cnt
mux counter
– Ví dụ : Đếm số xe đi qua cảm biến
Cnt_in
– Có thể cấu hình hoạt động như timer Top

hoặc counter Reset


Mode

109
Các cấu trúc timer khác

• Interval timer 16/32-bit timer

– Indicates when desired time Clk 16-bit up


counter 16 Cnt1
Timer with a terminal
interval has passed count
– We set terminal count to 16-bit up
Top1
Clk
desired interval counter 16 Cnt
16-bit up Cnt2
• Number of clock cycles counter 16

= Desired time interval / Reset Top2


Clock period
=
• Cascaded counters Top Time with prescaler

• Prescaler Clk Prescaler 16-bit up


counter
Terminal count
– Divides clock
– Increases range, decreases
resolution Mode

110
Example: Reaction Timer

indicator reaction
/* main.c */
light button
#define MS_INIT 63535
LCD time: 100 ms void main(void){
int count_milliseconds = 0;

configure timer mode


• Measure time between turning light on and set Cnt to MS_INIT

user pushing button wait a random amount of time


turn on indicator light
– 16-bit timer, clk period is 83.33 ns, counter start timer

increments every 6 cycles while (user has not pushed reaction button){
if(Top) {
– Resolution = 6*83.33=0.5 microsec. stop timer
set Cnt to MS_INIT
– Range = 65535*0.5 microseconds = 32.77 start timer
reset Top
milliseconds count_milliseconds++;
}
– Want program to count millisec., so initialize }
turn light off
counter to 65535 – 1000/0.5 = 63535 printf(“time: %i ms“, count_milliseconds);
}

111
Watchdog timer

• Must reset timer every


osc clk overflow overflow
X time unit, else timer prescaler scalereg timereg
to system reset
or
generates a signal interrupt

• Common use: detect checkreg

failure, self-reset
• Another use: timeouts /* main.c */ watchdog_reset_routine(){
/* checkreg is set so we can load value into
main(){ timereg. Zero is loaded into scalereg and
– e.g., ATM machine wait until card inserted 11070 is loaded into timereg */
call watchdog_reset_routine
– 16-bit timer, 2 checkreg = 1
microsec. resolution while(transaction in progress){ scalereg = 0
if(button pressed){ timereg = 11070
– timereg value = 2*(216- perform corresponding action }
call watchdog_reset_routine
1)–X = 131070–X } void interrupt_service_routine(){
– For 2 min., X = eject card
/* if watchdog_reset_routine not called every reset screen
120,000 microsec. < 2 minutes, interrupt_service_routine is }
called */
}

112
Intel 8051: Timers/Counters
• Có 2 bộ 16-bit Timer/Counter registers
• Timer: Nội dung thanh ghi tăng thêm 1 sau mỗi chu kỳ máy ( 1 chu
kỳ máy bằng 12 chu kỳ oscillator )
• Counter: Nội dung thanh ghi tăng thêm 1 khi có chuyển tiếp sườn
xuống (1-0 ) tại chân T0, T1 nối với bên ngoài .
– Tín hiệu từ chân T0, T1 được lấy mẫu tại S5P2 của mỗi chu kỳ
máy
– Khi lấy mẫu nếu thấy ở chu kỳ này là mức cao , chu kỳ tiếp theo
là mức thấp thì bộ đếm sẽ tang lên 1
– Giá trị mới sẽ xuất hiệu tại S3P1 ở chu kỳ nhận biết sau

– Tần số lớn nhất của xung đếm là 1/24 of oscillator frequency


• TMOD - Timer/Counter mode register
• TCON - Timer/Counter control register
Intel 8051: Timers/Counters
• GATE: = 0 ; điều khiển bằng phần mềm
• C/T: = 0 : Timer , C/T =1 : Counter
• M1 M0:
– 00: 8-bit Timer/Counter with 5-bit GATE
TIMER0
prescaler C/T
– 01: 16-bit Timer/Counter TIMER1 M1
M0
– 10: 8-bit auto reload Timer/Counter
– 11: (Timer0)
TL0 is 8-bit Timer/Counter controlled by
Timer0 control bits
TH0 is 8-bit timer only controlled by
Timer1 control bits
– 11: (Timer1) Timer/Counter is stopped

114/175
Intel 8051: Timers/Counters
7 6 5 4 3 2 1 0
TCON TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0

• TF: Overflow flag ( Cờ tràn )


– TF = 1 ( Set bởi phần cứng ) Khi Timer/Counter tràn (overflow )
– TF = 0 (Cleared bởi phần cứng ) khi xử lý ngắt Timer
• TR: Bit điều khiển chạy/ dừng Timer/Counter ( TR=1 : RUN, TR=0 : STOP)
– SET/ CLEAR bằng phần mềm để điều khiển Run/Stop Timer/Counter
• IE: Interrupt Edge flag ( Cờ báo sườn ngắt )
– IE = 1 ; Set bởi phần cứng khi nhận thấy có sườn xuống ở chân ngắt ngoài
– CIE= 0 khi ngắt được xử lý
• IT: Interrupt Type control bit ( Bit điều khiển kiểu ngắt )
– Set/Cleared bằng phần mềm ; ITx = 1 : Ngắt tích cực theo sườn xuống ; ITx =
0 : Ngắt tích cực mức thấp

115/175
Intel 8051: Timers/Counters

O SC 1/12

T L1 TH1
T F1 IN T ER R U PT
(5 bits) (8 bits)

T 1 PIN

TR1
G AT E M ODE 0
IN T 1 PIN
Intel 8051: Timers/Counters

OSC 1/12
C /T =0
TL1 TH1
TF1 IN T E R R U P T
(8 b its) (8 b its)

C /T =1
T 1 P IN

TR1
G AT E M O DE 1
IN T 1 P IN
Intel 8051: Timers/Counters

OSC 1/12

TL1
TF1 IN T E R R U P T
(8 b its)

T 1 P IN
R E L O AD

TR1
G AT E TH1
(8 b its)
M O DE 2
IN T 1 P IN
Intel 8051: Timers/Counters
O SC 1/12
C /T =0
T L0
T F0 INT ER RU PT
(8 bits)

C /T =1
T 0 PIN

T R0
G AT E MODE 3
INT 0 PIN
T H0
1/12 f osc T F1 INT ER RU PT
(8 bits)

T R1
‰ The 8051 has two timers/counters,
PROGRAMMING
TIMERS
they can be used either as
 Timers to generate a time delay or as
 Event counters to count events happening
outside the microcontroller
‰ Both Timer 0 and Timer 1 are 16 bits
wide
 Since 8051 has an 8-bit architecture, each
16-bits timer is accessed as two separate
registers of low byte and high byte

2
‰ Accessed as low byte and high byte
PROGRAMMING
 The low byte register is called TL0/TL1
TIMERS
and
 The high byte register is called TH0/TH1
Timer 0 & 1
 Accessed like any other register
Registers
ƒ MOV TL0,#4FH
ƒ MOV R5,TH0
TH0 TL0

D15 D14 D13 D12 D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0

TH1 TL1

D15 D14 D13 D12 D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0

3
‰ Both timers 0 and 1 use the same
PROGRAMMING
TIMERS
register, called TMOD (timer mode), to
set the various timer operation modes
TMOD ‰ TMOD is a 8-bit register
Register
 The lower 4 bits are for Timer 0
 The upper 4 bits are for Timer 1
 In each case,
ƒ The lower 2 bits are used to set the timer mode
ƒ The upper 2 bits to specify the operation
(MSB) (LSB)

GATE C/T M1 M0 GATE C/T M1 M0

Timer1 Timer0

4
(MSB) (LSB)

GATE C/T M1 M0 GATE C/T M1 M0


PROGRAMMING
Timer1 Timer0
TIMERS

TMOD M1 M0 Mode Operating Mode

Register 0 0 0 13-bit timer mode


8-bit timer/counter THx with TLx as 5-bit
(cont’) prescaler

0 1 1 16-bit timer mode 16-bit timer/counter


THx and TLx are cascaded; there is no
prescaler

Gating control when set. 1 0 2 8-bit auto reload


8-bit auto reload timer/counter; THx holds a
Timer/counter is enable value which is to be reloaded TLx each time
only while the INTx pin is it overfolws
high and the TRx control 1 1 3 Split timer mode
pin is set
When cleared, the timer is Timer or counter selected
enabled whenever the TRx Cleared for timer operation (input from internal
control bit is set system clock)
Set for counter operation (input from Tx input pin)

5
Example 9-1
PROGRAMMING Indicate which mode and which timer are selected for each of the following.
(a) MOV TMOD, #01H (b) MOV TMOD, #20H (c) MOV TMOD, #12H
TIMERS
Solution:
We convert the value from hex to binary. From Figure 9-3 we have:
TMOD (a) TMOD = 00000001, mode 1 of timer 0 is selected. (b)
Register TMOD = 00100000, mode 2 of timer 1 is selected.
(c) TMOD = 00010010, mode 2 of timer 0, and mode 1 of timer 1 are
(cont’) selected.

If C/T = 0, it is used
as a timer for time Example 9-2
delay generation. Find the timer’s clock frequency and its period for various 8051-based system,
The clock source for with the crystal frequency 11.0592 MHz when C/T bit of TMOD is 0.
the time delay is the
Solution:
crystal frequency of
XTAL
the 8051 ÷12
oscillator

1/12 × 11.0529 MHz = 921.6 MHz; T


= 1/921.6 kHz = 1.085 us

6
‰ Timers of 8051 do starting and stopping
by either software or hardware control
PROGRAMMING
 In using software to start and stop the timer
TIMERS where GATE=0
ƒ The start and stop of the timer are controlled by
TMOD way of software by the TR (timer start) bits TR0
Register and TR1
- The SETB instruction starts it, and it is
stopped by the CLR instruction
GATE
- These instructions start and stop the timers
as long as GATE=0 in the TMOD register
 The hardware way of starting and stopping
the timer by an external source is achieved
• Timer 0, mode 2 by making GATE=1 in the TMOD register
• C/T = 0 to use
XTAL clock source Find the value for TMOD if we want to program timer 0 in mode 2,
• gate = 0 to use use 8051 XTAL for the clock source, and use instructions to start
internal (software) start and stop the timer.
and stop method.
TMOD = 0000 0010

7
‰ The following are the characteristics
PROGRAMMING and operations of mode1:
TIMERS
1. It is a 16-bit timer; therefore, it allows
value of 0000 to FFFFH to be loaded into
Mode 1 the timer’s register TL and TH
Programming
2. After TH and TL are loaded with a 16-bit
initial value, the timer must be started
ƒ This is done by SETB TR0 for timer 0 and
SETB TR1 for timer 1
3. After the timer is started, it starts to
count up
ƒ It counts up until it reaches its limit of FFFFH

XTAL TH TL TF
÷12
oscillator
TF goes high Overflow
TR when FFFF → 0 flag
C/T = 0

8
3. (cont’)
ƒ When it rolls over from FFFFH to 0000, it sets
PROGRAMMING high a flag bit called TF (timer flag)
TIMERS - Each timer has its own timer flag: TF0 for
timer 0, and TF1 for timer 1
- This timer flag can be monitored
Mode 1 ƒ When this timer flag is raised, one option
Programming would be to stop the timer with the
(cont’) instructions CLR TR0 or CLR TR1, for timer 0
and timer 1, respectively
4. After the timer reaches its limit and rolls
over, in order to repeat the process
ƒ TH and TL must be reloaded with the original
value, and
ƒ TF must be reloaded to 0

XTAL TH TL TF
÷12
oscillator
TF goes high Overflow
C/T = 0 TR when FFFF → 0 flag

9
‰ To generate a time delay
PROGRAMMING 1. Load the TMOD value register indicating
TIMERS which timer (timer 0 or timer 1) is to be
used and which timer mode (0 or 1) is
selected
Mode 1
Programming 2. Load registers TL and TH with initial count
value
Steps to Mode 1 3. Start the timer
Program 4. Keep monitoring the timer flag (TF) with
the JNB TFx,target instruction to see
if it is raised
ƒ Get out of the loop when TF becomes high
5. Stop the timer
6. Clear the TF flag for the next round
7. Go back to Step 2 to load TH and TL
again
Department of Instrumentation and Industrial Information
10
Ha Noi University of Science and Technology,VIETNAM
Example 9-4
PROGRAMMING In the following program, we create a square wave of 50% duty cycle (with
equal portions high and low) on the P1.5 bit. Timer 0 is used to generate the
TIMERS time delay. Analyze the program

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


Mode 1 HERE: MOV TL0,#0F2H ;TL0=F2H, the low byte
Programming MOV TH0,#0FFH ;TH0=FFH, the high byte
CPL P1.5 ;toggle P1.5
ACALL DELAY
Steps to Mode 1 SJMP HERE
Program
(cont’) In the above program notice the following step.
1. TMOD is loaded.
2. FFF2H is loaded into TH0-TL0.
3. P1.5 is toggled for the high and low portions of the pulse.

11
Example 9-4 (cont’)

DELAY:
PROGRAMMING SETB TR0 ;start the timer 0
AGAIN: JNB TF0,AGAIN ;monitor timer flag 0
TIMERS ;until it rolls over
CLR TR0 ;stop timer 0
CLR TF0 ;clear timer 0 flag
Mode 1 RET
Programming 4. The DELAY subroutine using the timer is called.
5. In the DELAY subroutine, timer 0 is started by the SETB TR0 instruction. 6.
Timer 0 counts up with the passing of each clock, which is provided by the
Steps to Mode 1
crystal oscillator. As the timer counts up, it goes through the states of FFF3,
Program FFF4, FFF5, FFF6, FFF7, FFF8, FFF9, FFFA, FFFB, and so on until it
(cont’) reaches FFFFH. One more clock rolls it to 0, raising the timer flag (TF0=1).
At that point, the JNB instruction falls through.

FFF2 FFF3 FFF4 FFFF 0000

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


7. Timer 0 is stopped by the instruction CLR TR0. The DELAY subroutine
ends, and the process is repeated.
Notice that to repeat the process, we must reload the TL and TH registers, and
start the process is repeated …

12
Example 9-5
In Example 9-4, calculate the amount of time delay in the DELAY
PROGRAMMING subroutine generated by the timer. Assume XTAL = 11.0592 MHz.
TIMERS Solution:
The timer works with a clock frequency of 1/12 of the XTAL
Mode 1 frequency; therefore, we have 11.0592 MHz / 12 = 921.6 kHz as the
timer frequency. As a result, each clock has a period of T =
Programming 1/921.6kHz = 1.085us. In other words, Timer 0 counts up each 1.085 us resulting in delay = number of
counts × 1.085us.
Steps to Mode 1 The number of counts for the roll over is FFFFH - FFF2H = 0DH (13
Program decimal). However, we add one to 13 because of the extra clock
(cont’) needed when it rolls over from FFFF to 0 and raise the TF flag. This gives 14 × 1.085us = 15.19us for half
the pulse. For the entire period it is T = 2 × 15.19us = 30.38us as the time delay generated by the timer.

(a) in hex (b) in decimal


(FFFF - YYXX + 1) × Convert YYXX values
1.085 us, where YYXX of the TH, TL register
are TH, TL initial to decimal to get a
values respectively. NNNNN decimal, then
Notice that value (65536 - NNNN) ×
YYXX are in hex. 1.085 us

13
Example 9-6
In Example 9-5, calculate the frequency of the square wave generated
on pin P1.5.
PROGRAMMING
TIMERS Solution:
In the timer delay calculation of Example 9-5, we did not include the
overhead due to instruction in the loop. To get a more accurate timing,
Mode 1 we need to add clock cycles due to this instructions in the loop. To do
Programming that, we use the machine cycle from Table A-1 in Appendix A, as
shown below.
Cycles
Steps to Mode 1 HERE: MOV TL0,#0F2H 2
Program MOV TH0,#0FFH 2
(cont’) CPL P1.5 1
ACALL DELAY 2
SJMP HERE 2
DELAY:
SETB TR0 1
AGAIN: JNB TF0,AGAIN 14
CLR TR0 1
CLR TF0 1
RET 2
Total 28
T = 2 × 28 × 1.085 us = 60.76 us and F = 16458.2 Hz

14
Example 9-7
Find the delay generated by timer 0 in the following code, using both
PROGRAMMING of the Methods of Figure 9-4. Do not include the overhead due to
TIMERS instruction.
CLR P2.3 ;Clear P2.3
MOV TMOD,#01 ;Timer 0, 16-bitmode
Mode 1 HERE: MOV TL0,#3EH ;TL0=3Eh, the low byte
Programming MOV TH0,#0B8H ;TH0=B8H, the high byte
SETB P2.3 ;SET high timer 0
SETB TR0 ;Start the timer 0
Steps to Mode 1 AGAIN: JNB TF0,AGAIN ;Monitor timer flag 0
Program CLR TR0 ;Stop the timer 0
(cont’) CLR TF0 ;Clear TF0 for next round
CLR P2.3
Solution:
(a) (FFFFH - B83E + 1) = 47C2H = 18370 in decimal and 18370 × 1.085 us = 19.93145 ms

(b) Since TH - TL = B83EH = 47166 (in decimal) we have 65536 - 47166 = 18370. This means that the
timer counts from B38EH to FFFF. This plus Rolling over to 0 goes through a total of 18370 clock cycles,
where each clock is 1.085 us in duration. Therefore, we have 18370 × 1.085 us = 19.93145 ms as the
width of the pulse.

15
Example 9-8
Modify TL and TH in Example 9-7 to get the largest time delay
PROGRAMMINGp ossible. Find the delay in ms. In your calculation, exclude the

TIMERS overhead due to the instructions in the loop.


Solution:
To get the largest delay we make TL and TH both 0. This will count
Mode 1 up from 0000 to FFFFH and then roll over to zero.
Programming CLR P2.3 ;Clear P2.3
MOV TMOD,#01 ;Timer 0, 16-
Steps to Mode 1 bitmode HERE: MOV TL0,#0;TL0=0, the
low byteMOV TH0,#0;TH0=0, the high byte
Program SETB P2.3 ;SET high P2.3
(cont’) SETB TR0 ;Start timer 0
AGAIN: JNB TF0,AGAIN ;Monitor timer flag 0
CLR TR0 ;Stop the timer 0
CLR TF0 ;Clear timer 0 flag
CLR P2.3
Making TH and TL both zero means that the timer will count from 0000 to FFFF, and then roll over to
raise the TF flag. As a result, it goes through a total Of 65536 states. Therefore, we have delay =
(65536 - 0) × 1.085 us = 71.1065ms.

16
Example 9-9
The following program generates a square wave on P1.5 continuously
PROGRAMMING using timer 1 for a time delay. Find the frequency of the square
TIMERS wave if XTAL = 11.0592 MHz. In your calculation do not
include the overhead due to Instructions in the loop.

Mode 1 MOV TMOD,#10;Timer 1, mod 1 (16-bitmode)


AGAIN: MOV TL1,#34H ;TL1=34H, low byte of timer
Programming MOV TH1,#76H ;TH1=76H, high byte timer
SETB TR1 ;start the timer 1
BACK: JNB TF1,BACK ;till timer rolls over
Steps to Mode 1 CLR TR1 ;stop the timer 1
Program CPL P1.5 ;comp. p1. to get hi, lo
(cont’) CLR TF1 ;clear timer flag 1
SJMP AGAIN ;is not auto-reload
Solution:
Since FFFFH - 7634H = 89CBH + 1 = 89CCH and 89CCH = 35276 clock count and 35276 × 1.085 us =
38.274 ms for half of the square wave. The frequency = 13.064Hz.

Also notice that the high portion and low portion of the square wave
pulse are equal. In the above calculation, the overhead due to all
the instruction in the loop is not included.

17
‰ To calculate the values to be loaded
PROGRAMMING
TIMERS
into the TL and TH registers, look at
the following example
Mode 1  Assume XTAL = 11.0592 MHz, we can
Programming use the following steps for finding the TH,
TL registers’ values
Finding the 1. Divide the desired time delay by 1.085 us
Loaded Timer
2. Perform 65536 - n, where n is the decimal
Values
value we got in Step1
3. Convert the result of Step2 to hex, where
yyxx is the initial hex value to be loaded into
the timer’s register
4. Set TL = xx and TH = yy

18
Example 9-10
Assume that XTAL = 11.0592 MHz. What value do we need to load
PROGRAMMING the timer’s register if we want to have a time delay of 5 ms
TIMERS (milliseconds)? Show the program for timer 0 to create a pulse width
of 5 ms on P2.3.

Mode 1 Solution:
Since XTAL = 11.0592 MHz, the counter counts up every 1.085 us.
Programming This means that out of many 1.085 us intervals we must make a 5 ms
pulse. To get that, we divide one by the other. We need 5 ms / 1.085
Finding the us = 4608 clocks. To Achieve that we need to load into TL and TH
Loaded Timer the value 65536 - 4608 = EE00H. Therefore, we have TH = EE and
TL = 00.
Values
(cont’) CLR P2.3 ;Clear P2.3
MOV TMOD,#01 ;Timer 0, 16-bitmode
HERE: MOV TL0,#0 ;TL0=0, the low byte
MOV TH0,#0EEH ;TH0=EE, the high byte
SETB P2.3 ;SET high P2.3
SETB TR0 ;Start timer 0
AGAIN: JNB TF0,AGAIN ;Monitor timer flag 0
CLR TR0 ;Stop the timer 0
CLR TF0 ;Clear timer 0 flag

19
Example 9-11
Assume that XTAL = 11.0592 MHz, write a program to generate a
PROGRAMMING
square wave of 2 kHz frequency on pin P1.5.
TIMERS
Solution:
Mode 1 This is similar to Example 9-10, except that we must toggle the bit to
generate the square wave. Look at the following steps.
Programming (a) T = 1 / f = 1 / 2 kHz = 500 us the period of square wave.
(b) 1 / 2 of it for the high and low portion of the pulse is 250 us.
Finding the (c) 250 us / 1.085 us = 230 and 65536 - 230 = 65306 which in hex
Loaded Timer is FF1AH.
Values (d) TL = 1A and TH = FF, all in hex. The program is as follow.
(cont’) MOV TMOD,#01 ;Timer 0, 16-bitmode
AGAIN: MOV TL1,#1AH ;TL1=1A, low byte of
timer MOV TH1,#0FFH ;TH1=FF, the high
byteTR1
SETB ;Start timer 1
BACK: JNB TF1,BACK ;until timer rolls over
CLR TR1 ;Stop the timer 1
CLR P1.5 ;Clear timer flag 1
CLR TF1 ;Clear timer 1 flag
SJMP AGAIN ;Reload timer

20
Example 9-12
Assume XTAL = 11.0592 MHz, write a program to generate a square
PROGRAMMING wave of 50 kHz frequency on pin P2.3.
TIMERS
Solution:
Look at the following steps.
Mode 1 (a) T = 1 / 50 = 20 ms, the period of square wave.
Programming (b) 1 / 2 of it for the high and low portion of the pulse is 10 ms.
(c) 10 ms / 1.085 us = 9216 and 65536 - 9216 = 56320 in decimal,
and in hex it is DC00H.
Finding the
(d) TL = 00 and TH = DC (hex).
Loaded Timer
Values MOV TMOD,#10H ;Timer 1, mod 1
(cont’) AGAIN: MOV TL1,#00 ;TL1=00,low byte of timer
MOV TH1,#0DCH ;TH1=DC, the high byte
SETB TR1 ;Start timer 1
BACK: JNB TF1,BACK ;until timer rolls over
CLR TR1 ;Stop the timer 1
CLR P2.3 ;Comp. p2.3 to get hi, lo
SJMP AGAIN ;Reload timer
;mode 1 isn’t auto-reload

21
Example 9-13
PROGRAMMING Examine the following program and find the time delay in seconds.
TIMERS Exclude the overhead due to the instructions in the loop.

MOV TMOD,#10H ;Timer 1, mod 1


Mode 1 MOV R3,#200 ;cnter for multiple delay
Programming AGAIN: MOV TL1,#08H ;TL1=08,low byte of timer
MOV TH1,#01H ;TH1=01,high byte
Generating Large SETB TR1 ;Start timer 1
BACK: JNB TF1,BACK ;until timer rolls over
Time Delay
CLR TR1 ;Stop the timer 1
CLR TF1 ;clear Timer 1 flag
DJNZ R3,AGAIN ;if R3 not zero then
;reload timer
Solution:
TH-TL = 0108H = 264 in decimal and 65536 - 264 = 65272. Now
65272 × 1.085 μs = 70.820 ms, and for 200 of them we have
200 ×70.820 ms = 14.164024 seconds.

22
‰ The following are the characteristics
PROGRAMMING and operations of mode 2:
TIMERS
1. It is an 8-bit timer; therefore, it allows
only values of 00 to FFH to be loaded
Mode 2 into the timer’s register TH
Programming
2. After TH is loaded with the 8-bit value,
the 8051 gives a copy of it to TL
ƒ Then the timer must be started
ƒ This is done by the instruction SETB TR0 for
timer 0 and SETB TR1 for timer 1
3. After the timer is started, it starts to
count up by incrementing the TL register
ƒ It counts up until it reaches its limit of FFH ƒ
When it rolls over from FFH to 00, it sets high the
TF (timer flag)

23
When the TL register rolls from FFH to 0
4.
PROGRAMMINGand TF is set to 1, TL is reloaded
TIMERS
automatically with the original value kept
by the TH register
Mode 2 ƒ To repeat the process, we must simply clear
Programming TF and let it go without any need by the
(cont’) programmer to reload the original value ƒ
This makes mode 2 an auto-reload, in
contrast with mode 1 in which the
programmer has to reload TH and TL

XTAL Overflow
÷12 TL TF
oscillator flag

TR TF goes high
C/T = 0 Reload
when FF → 0
TH

24
‰ To generate a time delay
PROGRAMMING
1. Load the TMOD value register indicating
TIMERS
which timer (timer 0 or timer 1) is to be
used, and the timer mode (mode 2) is
Mode 2 selected
Programming 2. Load the TH registers with the initial
count value
Steps to Mode 2
Program 3. Start timer
4.Keep monitoring the timer flag (TF) with
the JNB TFx,target instruction to see
whether it is raised
ƒ Get out of the loop when TF goes high
5. Clear the TF flag
6. Go back to Step4, since mode 2 is auto-
reload

25
Example 9-14
PROGRAMMING Assume XTAL = 11.0592 MHz, find the frequency of the square
TIMERS wave generated on pin P1.0 in the following program
MOV TMOD,#20H ;T1/8-bit/auto reload
Mode 2 MOV TH1,#5 ;TH1 = 5
Programming SETB TR1 ;start the timer 1
BACK: JNB TF1,BACK ;till timer rolls over
CPL P1.0 ;P1.0 to hi, lo
Steps to Mode 2 CLR TF1 ;clear Timer 1 flag
Program SJMP BACK ;mode 2 is auto-reload
(cont’)
Solution:
First notice the target address of SJMP. In mode 2 we do not need to reload TH since it is auto-reload. Now
(256 - 05) × 1.085 us = 251 × 1.085 us = 272.33 us is the high portion of the pulse. Since it is a
50% duty cycle square wave, the period T is twice that; as a result T = 2 × 272.33 us = 544.67 us
and the frequency = 1.83597 kHz

26
Example 9-15
PROGRAMMING Find the frequency of a square wave generated on pin P1.0.
TIMERS
Solution:

Mode 2 MOVTMOD,#2H;Timer 0, mod 2


;(8-bit, auto reload)
Programming MOV TH0,#0
AGAIN: MOV R5,#250 ;multiple delay count
Steps to Mode 2 ACALL DELAY
Program CPL P1.0
(cont’) SJMP AGAIN

DELAY: SETB TR0 ;start the timer 0


BACK: JNB TF0,BACK ;stay timer rolls over
CLR TR0 ;stop timer
CLR TF0 ;clear TF for next round
DJNZ
R5,DELAY RET
T = 2 ( 250 × 256 × 1.085 us ) = 138.88ms, and frequency = 72 Hz

27
Example 9-16
PROGRAMMING Assuming that we are programming the timers for mode 2, find the
value (in hex) loaded into TH for each of the following cases.
TIMERS
(a) MOV TH1,#-200 (b) MOV TH0,#-60
Mode 2 (c) MOV TH1,#-3 (d) MOV TH1,#-12
(e) MOV TH0,#-48
Programming
Solution:
Steps to Mode 2 You can use the Windows scientific calculator to verify the result
Program provided by the assembler. In Windows calculator, select
(cont’) decimal and enter 200. Then select hex, then +/- to get the TH
value. Remember that we only use the right two digits and ignore
the rest since our data is an 8-bit data.
Decimal 2’s complement (TH value)
-3 FDH
-12 F4H The advantage of using
The number 200 is the
-48 D0H negative values is that you
timer count till the TF
-60 C4H don’t need to calculate the
is set to 1
-200 38H value loaded to THx

28
‰ Timers can also be used as counters
COUNTER
PROGRAMMING
counting events happening outside the
8051
 When it is used as a counter, it is a pulse
outside of the 8051 that increments the
TH, TL registers
 TMOD and TH, TL registers are the same as
for the timer discussed previously ‰
Programming the timer in the last section
also applies to programming it as a
counter
 Except the source of the frequency

29
‰ The C/T bit in the TMOD registers
COUNTER
PROGRAMMING
decides the source of the clock for the
timer
C/T Bit in  When C/T = 1, the timer is used as a
TMOD Register counter and gets its pulses from outside
the 8051
ƒ The counter counts up as pulses are fed from
pins 14 and 15, these pins are called T0 (timer
0 input) and T1 (timer 1 input)

Port 3 pins used for Timers 0 and 1

Pin Port Pin Function Description


14 P3.4 T0 Timer/counter 0 external input
15 P3.5 T1 Timer/counter 1 external input

30
Example 9-18
Assuming that clock pulses are fed into pin T1, write a
program COUNTERfor counter 1 in mode 2 to count the pulses and display the state
of the TL1 count on P2, which connects to 8 LEDs.
PROGRAMMING
Solution:
C/T Bit in MOV TM0D,#01100000B ;counter 1, mode 2,
;C/T=1 external pulses
TMOD Register MOV TH1,#0;clear TH1
(cont’) SETB P3.5 ;make T1 input
AGAIN: SETB TR1 ;start the counter
BACK: MOV A,TL1 ;get copy of TL
MOV P2,A ;display it on port 2
JNB TF1,Back ;keep doing, if TF = 0
CLR TR1 ;stop the counter 1
CLR TF1 ;make TF=0
SJMP AGAIN ;keep doing it
Notice in the above program the role of the instruction SETB P3.5.
Since ports are set up for output when the 8051 is powered up,
we make P3.5 an input port by making it high. In other words,
we must configure (set high) the T1 pin (pin P3.5) to allow
pulses to be fed into it.

31
COUNTER Timer with external input (Mode 1)
PROGRAMMING Timer Overflow
external flag
input pin
TH TL TF
C/T Bit in 3.4 or 3.5
TF goes high
TMOD Register C/T = 1 TR when FFFF → 0
(cont’)

Timer with external input (Mode 2)


Timer Overflow
external flag
input pin
TL TF
3.4 or 3.5
C/T = 1
TR Reload
TF goes high
when FF → 0
TH

32
‰ TCON (timer control) register is an 8-
COUNTER
PROGRAMMING
bit register
TCON: Timer/Counter Control Register
TCON
Register TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0

The upper four


bits are used to The lower 4 bits
store the TF and are set aside for
TR bits of both controlling the
timer 0 and 1 interrupt bits

33
‰ TCON register is a bit-addressable
COUNTER
PROGRAMMING
register
Equivalent instruction for the Timer Control Register
TCON For timer 0
Register SETB TR0 = SETB TCON.4
(cont’) CLR TR0 = CLR TCON.4
SETB TF0 = SETB TCON.5
CLR TF0 = CLR TCON.5
For timer 1
SETB TR1 = SETB TCON.6
CLR TR1 = CLR TCON.6
SETB TF1 = SETB TCON.7
CLR TF1 = CLR TCON.7

34
‰ If GATE = 1, the start and stop of the
COUNTER
PROGRAMMING
timer are done externally through pins
P3.2 and P3.3 for timers 0 and 1,
TCON respectively
Register  This hardware way allows to start or stop
the timer externally at any time via a
Case of GATE = 1
simple switch

XTAL
÷12 C/T = 0
oscillator

Tx Pin
Pin 3.4 or 3.5 C/T = 1

Gate TR
INT0 Pin
Pin 3.2 or 3.3

35
Example 9-20
Write an 8051 C program to toggle all the bits of port P1
continuously PROGRAMMINGwith some delay in between. Use Timer 0, 16-bit mode to
generate the delay.
TIMERS IN C
Solution:
Accessing #include <reg51.h>
void T0Delay(void);
Timer Registers void main(void){
while (1) {
P1=0x55;
T0Delay();
P1=0xAA;
T0Delay(); }
}
void T0Delay(){
TMOD=0x01; FFFFH -3500H = CAFFH
TL0=0x00;
TH0=0x35; = 51967 + 1 = 51968
TR0=1; 51968 × 1.085 μs = 56.384 ms is the
while (TF0==0);
TR0=0; approximate delay
TF0=0;
}

36
‰ To speed up the 8051, many recent
PROGRAMMING
TIMERS IN C
versions of the 8051 have reduced the
number of clocks per machine cycle
Calculating from 12 to four, or even one
Delay Length ‰ The frequency for the timer is always
Using Timers
1/12th the frequency of the crystal
attached to the 8051, regardless of the
8051 version

37
Example 9-21
Write an 8051 C program to toggle only bit P1.5 continuously
every PROGRAMMING50 ms. Use Timer 0, mode 1 (16-bit) to create the delay. Test the
program on the (a) AT89C51 and (b) DS89C420.
TIMERS IN C
Solution:
Times 0/1 #include <reg51.h>
void T0M1Delay(void);
Delay Using sbit mybit=P1^5;
void main(void){
Mode 1 (16-bit while (1)
Non Auto- { mybit=~mybi
T0M1Delay();
t;
reload) }
}
void T0M1Delay(void){
TMOD=0x01;
TL0=0xFD; FFFFH - 4BFDH = B402H
TH0=0x4B; = 46082 + 1 = 46083
TR0=1;
while (TF0==0); 46083 × 1.085 μs = 50 ms
TR0=0;
TF0=0; }

38
Example 9-22
Write an 8051 C program to toggle all bits of P2 continuously every
PROGRAMMING 500 ms. Use Timer 1, mode 1 to create the delay.

TIMERS IN C Solution:
//tested for DS89C420, XTAL = 11.0592 MHz
#include <reg51.h>
Times 0/1 void T1M1Delay(void);
void main(void){
Delay Using unsigned char x;
Mode 1 (16-bit P2=0x55;
while (1) {
Non Auto- P2=~P2;
for (x=0;x<20;x++)
reload) T1M1Delay();
(cont’) }
}
void T1M1Delay(void){
TMOD=0x10;
TL1=0xFE; A5FEH = 42494 in decimal
TH1=0xA5; 65536 - 42494 = 23042
TR1=1;
while (TF1==0); 23042 × 1.085 μs = 25 ms and
TR1=0; 20 × 25 ms = 500 ms
TF1=0;
}

39
Example 9-25
PROGRAMMING A switch is connected to pin P1.2. Write an 8051 C program to
TIMERS IN C monitor SW and create the following frequencies on pin P1.7:
SW=0: 500Hz
SW=1: 750Hz, use Timer 0, mode 1 for both of them.
Times 0/1
Solution:
Delay Using #include <reg51.h>
Mode 1 (16-bit sbit mybit=P1^5;
sbit SW=P1^7;
Non Auto- void T0M1Delay(unsigned char);
void main(void){
reload) SW=1;
(cont’) while (1) {
mybit=~mybit; if
(SW==0)
T0M1Delay(0);
else
T0M1Delay(1);
}
}

40
Example 9-25
PROGRAMMING
TIMERS IN C
void T0M1Delay(unsigned char c){
TMOD=0x01;
Times 0/1 if (c==0) {
Delay Using TL0=0x67; FC67H = 64615
TH0=0xFC; 65536 - 64615 = 921
Mode 1 (16-bit }
else { 921 × 1.085 μs = 999.285 μs
Non Auto- TL0=0x9A; 1 / (999.285 μs × 2) = 500 Hz
reload) }
TH0=0xFD;
(cont’) TR0=1;
while (TF0==0);
TR0=0;
TF0=0;
}

41
Example 9-23
Write an 8051 C program to toggle only pin P1.5 continuously every
250 ms. Use Timer 0, mode 2 (8-bit auto-reload) to create the
PROGRAMMING delay.
TIMERS IN C
Solution:
#include <reg51.h>
Times 0/1 void T0M2Delay(void);
sbit mybit=P1^5;
Delay Using void main(void){ Due to overhead of the for loop
Mode 2 (8-bit unsigned char x,y;
while (1) {
in C, we put 36 instead of 40
Auto-reload) mybit=~mybit;
for (x=0;x<250;x++)
for (y=0;y<36;y++) //we put 36, not 40
T0M2Delay();
}
}
void T0M2Delay(void){
TMOD=0x02;
TH0=-23; 256 - 23 = 233
TR0=1; 23 × 1.085 μs = 25 μs and
while (TF0==0);
TR0=0; 25 μs × 250 × 40 = 250 ms
TF0=0;
}

42
Example 9-24
PROGRAMMING Write an 8051 C program to create a frequency of 2500 Hz on pin
TIMERS IN C P2.7. Use Timer 1, mode 2 to create delay.

Solution:
Times 0/1 #include <reg51.h>
void T1M2Delay(void);
Delay Using sbit mybit=P2^7;
Mode 2 (8-bit void main(void){
unsigned char x;
Auto-reload) while (1) {
mybit=~mybit;
(cont’) T1M2Delay();
}
}
void T1M2Delay(void){
TMOD=0x20; 1/2500 Hz = 400 μs
TH1=-184;
TR1=1; 400 μs /2 = 200 μs
while (TF1==0); 200 μs / 1.085 μs = 184
TR1=0;
TF1=0;
}

43
Example 9-26
PROGRAMMING Assume that a 1-Hz external clock is being fed into pin T1 (P3.5). Write
TIMERS IN C a C program for counter 1 in mode 2 (8-bit auto reload) to count
up and display the state of the TL1 count on P1. Start the count at 0H.

C Programming Solution:
#include <reg51.h>
of Timers as sbit T1=P3^5;
Counters void main(void){
T1=1;
TMOD=0x60;
TH1=0;
while (1) {
do {
TR1=1;
P1=TL1;
}
while (TF1==0);
TR1=0;
TF1=0;
}
}

44
Example 9-27
Assume that a 1-Hz external clock is being fed into pin T0 (P3.4).
PROGRAMMINGWrite a C program for counter 0 in mode 1 (16-bit) to count the pulses
TIMERS IN C and display the state of the TH0 and TL0 registers on P2 and P1,
respectively.

C Programming Solution:
#include <reg51.h>
of Timers as void main(void){
T0=1;
Counters TMOD=0x05;
(cont’) TL0=0
TH0=0;
while (1) {
do {
TR0=1;
P1=TL0;
P2=TH0; }
while (TF0==0);
TR0=0;
TF0=0;
}
}

45
4.4 Vào ra nối tiếp

164
SERIAL COMMUNICATION
 1. Định nghĩa, Vai trò, mục đích
BASICS OF
 Truyền Nối tiếp ( Serial Transfer)
SERIAL
 Dữ liệu được truyền từng bít theo thời gian
COMMUNICA-
TION  Để truyền dữ liệu đi xa người ta thường sử
dụng truyền tín nối tiếp

Parallel Transfer
D0
Serial Transfer
Sender Receiver
Sender Receiver

D7

2
 Tại nơi truyền 1 byte dữ liệu cần phải
BASICS OF biến đổi thành các bit nối tiếp sử dụng
SERIAL
thanh ghi vào song song- ra nối tiếp
COMMUNICA-
TION Tại nơi nhận thì sử dụng thanh ghi
(cont’) Vào nối tiếp – ra song song để nhận
dữ liệu nối tiếp và đóng gói thành 1 byte
 Khi khoảng cách gần, tín hiệu số có thể truyền
nguyên bản bằng đường dây đơn giản và không
cần phải điều chế (modulation)
 Nếu dữ liệu được truyền trên đường dây điện
thoại , Nó cần được chuyển đổi thành tín hiệu 0/1
dạng audiotones
 Thiết bị chuyển đổi này gọi là MODEM
“Modulator/demodulator”

3
 Truyền tin nối tiếp sử dụng 2 phương thức
BASICS OF
SERIAL
 Phương thức đồng bộ : Truyền cả khối dữ liệu
COMMUNICA- Trong khoảng thời gian
TION
 Phương thức không đồng bộ : Truyền từng byte
(cont’)
trong khoảng thời gian

 Có rất nhiều IC để thực hiện việc này :

ƒ UART (universal asynchronous Receiver-


transmitter)

ƒ USART (universal synchronous-asynchronous


Receiver-transmitter)

4
 Chế độ truyền nối tiếp
 Simplex : Nếu data chỉ truyền theo 1 chiều
BASICS OF Half Duplex: Nếu data chỉ truyền theo 1 chiều
SERIAL trong 1 khoảng thời gian
COMMUNICA-  Full duplex : Dữ liệu được truyền nhận đồng thời
TION
cả 2 chiều
Half- and Full-
Duplex
Transmission Simplex Transmitter Receiver

Transmitter Receiver
Half Duplex
Receiver Transmitter

Transmitter Receiver
Full Duplex
Receiver Transmitter

5
 Giao thức ( Protocol ) là tập hợp các quy định
BASICS OF được đồng ý bởi cả bên phát và bên nhận về việc:
SERIAL  Dữ liệu đóng gói như thế nào
COMMUNICA-  Dữ liệu dài bao nhiêu bít
TION
 Khi nào dữ liệu bắt đầu và kết thúc
Start and Stop
 Truyền tin nối tiếp dị bộ sử dụng để truyền từng
Bits
ký tự ( byte)

 Mỗi ký tự được đóng khung giữa 1 bit


START và 1 bit STOP, gọi là 1 Frame

 Bit START luôn có độ dài 1 bit, còn bit


STOP có thể dài 1 hoặc 2 bít

6
‰ Start bit luôn là 0 (low) và
BASICS OF Stop bit (s) luôn là 1 (high)
SERIAL
COMMUNICA- ASCII character “A” (8-bit binary 0100 0001)
TION

Start and Stop


Bits Space Stop 0 1 0 0 0 0 0 1
Start
Bit
Mark

Bit
(cont’)
D7 D0

Goes out last Goes out first

Mức 0 gọi là space The transmission begins with a


start bit followed by D0, the
LSB, then the rest of the bits Khi không truyên
until MSB (D7), and finally,
Tín hiệu ở mức 1
the one stop bit indicating the
end of the character Gọi là mark

7
 Ký tự ASCII mở rộng có độ dài 8 bit
BASICS OF Sử dụng mã ASCII 8 bit
SERIAL
Trong các hệ thống cũ , ký tự ASCII dài 7 bit
COMMUNICA-
TION  Trong các hệ PCs mới sử dụng chuẩn bit
STOP dài 1 bit.
STr Trong các hệ thống cũ thường sử dụng

Start and bit STOP dài 2 bit, lý do là các ngoại vi
Stop Bits thế hệ cũ tốc độ chậm nên cần thời gian
dài hơn để hoàn thành việc nhận dữ liệu.
(cont’)

8
 Trong truyền tin nối tiếp nhịp truyền
BASICS OF được định nghĩa là bps (bits per second)
SERIAL
COMMUNICA-  Có một thuật ngữ khác tính nhịp truyền là
TION baud rate
 Baud rate là thuật ngữ của modem và được định
Data Transfer nghĩa là số lần thay đổi tín hiệu trong 1 s
Rate  In modems, có trường hợp một lần thay đổi tín hiệu
Có thể truyền đi vài bit

 Nhưng hiện nay người ta dùng cả hai


cách tính là bps và baud rate

10
‰ The data transfer rate of given
BASICS OF computer system depends on
SERIAL communication ports incorporated into
COMMUNICA- that system
TION  IBM PC/XT could transfer data at the rate
of 100 to 9600 bps
Data Transfer  Pentium-based PCs transfer data at rates as
Rate high as 56K bps
(cont’)  In asynchronous serial data communication,
the baud rate is limited to 100K bps

11
‰ A line driver such as the MAX232 chip is
8051 required to convert RS232 voltage
CONNECTION levels to TTL levels, and vice versa
TO RS232 ‰ 8051 has two pins that are used
specifically for transferring and receiving
data serially
 These two pins are called TxD and RxD and
are part of the port 3 group (P3.0 and P3.1) 
These pins are TTL compatible; therefore, they
require a line driver to make them RS232
compatible

18
‰ To allow data transfer between the PC
SERIAL and an 8051 system without any error,
COMMUNICA- we must make sure that the baud rate
TION of 8051 system matches the baud rate
PROGRAMMING of the PC’s COM port
‰ Hyperterminal function supports baud
rates much higher than listed below
PC Baud Rates
110

150
300
600

1200
2400
4800
9600
19200 Baud rates supported by
486/Pentium IBM PC BIOS

21
With XTAL = 11.0592 MHz, find the TH1 value needed to have the
following baud rates. (a) 9600 (b) 2400 (c) 1200
SERIAL Solution:
COMMUNICA- The machine cycle frequency of 8051 = 11.0592 / 12 = 921.6 kHz,
and 921.6 kHz / 32 = 28,800 Hz is frequency by UART to timer 1 to
TION
set baud rate.
PROGRAMMING (a) 28,800 / 3 = 9600 where -3 = FD (hex) is loaded into TH1
(cont’) (b) 28,800 / 12 = 2400 where -12 = F4 (hex) is loaded into TH1
(c) 28,800 / 24 = 1200 where -24 = E8 (hex) is loaded into TH1
Notice that dividing 1/12 of the crystal frequency by 32 is the default
value upon activation of the 8051 RESET pin.
11.0592 MHz

Machine cycle freq 28800 Hz


XTAL ÷ 32
÷ 12
oscillator 921.6 kHz By UART To timer 1
To set the
Baud rate
Baud Rate TH1 (Decimal) TH1 (Hex)
9600 -3 FD
TF is set to 1 every 12 4800 -6 FA
ticks, so it functions as 2400 -12 F4
a frequency divider 1200 -24 E8

22
4.5 CÁC CHUẨN NỐI TIẾP ( Tiếp theo )

• UART
• Chuẩn I2C
• Chuẩn SPI
• Chuẩn CAN bus
• Chuẩn USB

178
UART

Giới thiệu chung


Định nghĩa:
UART( Universal Asynchronous Receiver /
Transmitter)
 Bộ thu/phát không đồng bộ đa năng
 Dùng để thực hiện việc chuyển đổi dữ liệu song song
thành dữ liệu nối tiếp và truyền nhận nối tiếp giữa các bên
phát và thu.

04/18/24
Giới thiệu chung về UART

Cấu trúc

Bộ điều Bộ truyền Bộ nhận


Bộ ngắt dữ liệu
khiển dữ liệu
Interrupt UnRX
UnBRG UnTX

04/18/24
Đặc điểm của UART

 Truyền nhận theo từng byte


 Định dạng và giới hạn thời gian các xâu bit dữ
liệu nối tiếp.
 Các UART được sử dụng để chuyển đổi dữ
liệu song song thành định dạng nối tiếp ở bên
phát và chuyển đổi dữ liệu nối tiếp thành định
dạng song song ở bên thu

04/18/24
Đặc điểm của UART
Định dạng nối tiếp
Việc truyền tải được thực hiện theo từng kí tự 7 hoặc 8 bit,
được bổ sung 2 bit đánh dấu đầu cuối và một bit kiểm tra lỗi
chẵn lẻ (parity bit).Ví dụ với 8 bit được minh hoạ dưới đây:

start 0 1 2 3 4 5 6 7 P Stop

04/18/24 group 6
182
Đặc điểm của UART

 Có thể truyền dữ liệu theo 2 chiều một cách đồng thời


(full duplex).
 Nhận có đệm (receive-buffered)
 Một byte được nhận và cất vào vùng đệm
 Trong khi đó byte thứ hai vẫn được tiếp tục nhận
 Tốc độ truyền dẫn của UART cũng được lập trình
 Tự động tạo và loại bỏ chuỗi các bít không đồng bộ
(start, stop, bit chẵn lẻ)

04/18/24
Đặc điểm của UART

 Kiểm soát một cách độc lập Transmit, Receive, Line


Status, và dữ liệu thiết lập ngắt.
 Có thể lập trình giao diện là một chuỗi các kí tự
 Có thể phát hiện False Start Bit
 Có khả năng báo cáo tình trạng đầy đủ

04/18/24
Đặc điểm của UART

 Có khả năng kiểm soát nội bộ :


 Cô lập lỗi bằng vòng lặp điều khiển cho
Communications Link
 Ngắt, chẵn lẻ, tràn, và khung báo lỗi

04/18/24
UART- Các chế độ hoạt động

Các chế độ hoạt động

Mode 0 Mode 1 Mode 2 Mode 3

04/18/24
UART- Các chế độ hoạt động

 Mode 0:
 Dữ liệu truyền nối tiếp vào và ra qua cổng RxD, TxD.
 Truyền và nhận 8 bit, bit thấp nhất được truyền trước (LSB).
 Tốc độ baud xấp xỉ 1/16 tần số xung nhịp của CPU.

04/18/24
UART- Các chế độ hoạt động

 Mode 1:
 10 bit phát (qua TxD) hoặc nhận (qua RxD):1start bit
(logic ‘0’), 8 data bit (LSB trước) và 1 stop bit (logic ‘1’).
 Khi dữ liệu đang nhận, stop bit chứa trong RB8 trong
thanh ghi chức năng đặc biệt SCON, tốc độ baud là một số
có thể thay đổi và xác định bằng tốc độ tràn của Timer 1
hay từ bộ sinh tốc độ baud.

04/18/24
UART- Các chế độ hoạt động

 Mode 2:
 11 bit được phát (qua TxD) hoặc nhận(RxD): 1 start bit
(logic ‘0’), 8 data bit, data bit thứ 9 có thể lập trình, và
1 stop bit (logic ‘1’).
 Tốc độ baud được chọn bằng 1/16 hoặc 1/32 tần số
CCLK, tùy vào giá trị của bit SMOD ở thanh ghi
PCON.

04/18/24
UART- Các chế độ hoạt động

 Mode 3:

Tương tự Mode 1, chỉ có điều tốc độ


baud có thể chọn lấy từ Timer 1, hoặc máy
sinh tốc độ baud độc lập

04/18/24
UART- Các chế độ hoạt động

→Trong cả 4 chế độ, sự truyền phát được khởi


tạo bằng cách tạo các giá trị khởi điểm cho
SBUF, sự thu nhận được khởi tạo bằng cách
cho bít REN=1(trong thanh ghi SCON).

04/18/24
UART- Lập trình truyền thông
Tốc độ baud trong 8051.
 8051 truyền và nhận dữ liệu nối tiếp theo nhiều
tốc độ khác nhau.
 Tốc độ truyền của nó có thể lập trình được, thực
hiện nhờ sự trợ giúp của bộ định thời Timer1.
 Muốn Timer1 đặt tốc độ baud thì nó phải được lập
trình về chế độ làm việc mode2, đó là chế độ thanh ghi
8 bít tự động nạp lại.

04/18/24
UART- Lập trình truyền thông
Tốc độ baud trong 8051.
 Các giá trị của thanh ghi TH1 trong Timer1 cho các
tốc độ baud khác nhau:

04/18/24
UART- Lập trình truyền thông
Tốc độ baud trong 8051.

 Serial Port in Mode 0


OscillatorFrequency
BaudRate 
12
 Serial Port in Mode 1 and 3

2 SMOD * OscillatorFrequency
TH 1  256 
384 * BaudRate

 Serial Port in Mode 2


2 SMOD * OscillatorFrequency
BaudRate 
64
04/18/24
UART- Lập trình truyền thông

Thanh ghi SBUF


 SBUF là thanh ghi 8 bít được dùng riêng cho
truyền thông nối tiếp trong 8051.
 Một byte dữ liệu cần phải được truyền qua đường
TxD thì nó phải được đặt trong thanh ghi SBUF.
 SBUF giữ một byte dữ liệu khi nó được nhận bởi
đường RxD của 8051.
 SBUF có thể được truy cập bởi mọi thanh ghi bất kỳ
trong 8051.
04/18/24
UART- Lập trình truyền thông

Thanh ghi SBUF

 Truy cập vào thanh ghi SBUF:


Ví dụ:
MOV SBUF, # “D” ; Nạp vào SBUF giá trị 44H mã
ACSII của ký tự D.
MOV SBUF, A ; Sao thanh ghi A vào SBUF.
MOV A, SBUF ; Sao SBUF vào thanh ghi A.

04/18/24
UART- Lập trình truyền thông

Thanh ghi SBUF


 Khi một byte được ghi vào thanh ghi SBUF nó
được đóng khung với các bít Start và Stop và được
truyền nối tiếp qua chân TxD.
 Khi các bít được nhận nối tiếp từ RxD thì 8051 mở
khung nó để loại trừ các bít Start và Stop để lấy ra
một byte từ dữ liệu nhận được và đặt nó vào thanh
ghi SBUF.

04/18/24
UART- Lập trình truyền thông

Thanh ghi điều khiển nối tiếp SCON

 Thanh ghi SCON là thanh ghi 8 bít được dùng để


lập trình việc đóng khung Start bít, Stop bít và các
bít dữ liệu cùng với việc khác.

04/18/24
UART- Lập trình truyền thông

Thanh ghi điều khiển nối tiếp SCON


 Cấu trúc :

04/18/24
UART- Lập trình truyền thông

Thanh ghi điều khiển công suất PCON


 Đây là thanh ghi 8 bít, trong có một số bít không được
dùng để điều khiển công suất của 8051. Bít dành cho
truyền thông là bít D7 - bít SMOD (serial mode)
 SMOD quy định tốc độ truyền của cổng nối tiếp
 Khi 8051 được bật nguồn thì SMOD ở mức thấp 0
 Nếu SMOD = 1 : tốc độ tăng gấp đôi. Để thiết lập ta
dùng các lệnh:
MOV A, PCON ; Đặt bản sao của PCON vào ACC
SETB ACC.7 ; Đặt D7 của ACC lên 1.
MOV PCON, A ; Bây giờ SMOD = 1 mà không thay đổi bất kỳ bít nào khác

04/18/24
UART- Lập trình truyền thông

Lập trình 8051 để truyền dữ liệu nối tiếp


Khi lập trình 8051 để truyền các byte ký tự nối tiếp
thì cần phải thực hiện các bước sau:
1. Nạp giá trị cho thanh ghi TMOD để khai báo sử dụng bộ định
thời:
Thanh ghi TMOD

04/18/24
UART- Lập trình truyền thông

Lập trình 8051 để truyền dữ liệu nối tiếp


2. Nạp thanh ghi TH1 giá trị để thiết lập chế độ baud truyền
dữ liệu nối tiếp (với giả thiết tần số XTAL = 11.0592MHz)
theo bảng:

hoặc theo công thức:


2 SMOD * OscillatorFrequency
TH 1  256 
384 * BaudRate

04/18/24
UART- Lập trình truyền thông

Lập trình 8051 để truyền dữ liệu nối tiếp


3. Nạp giá trị cho thanh ghi SCON báo chế độ truyền.
4. Bật TR1 = 1để khởi động Timer.
5. Xoá bít TI bằng lệnh “CLR TI” .
6. Byte ký tự cần phải truyền được ghi vào SBUF.
7. Bít cờ TI được hiển thị bằng lệnh “JNB TI, xx” để báo ký
tự đã được truyền hoàn tất chưa.
8. Để truyền ký tự tiếp theo quay trở về bước 5.

04/18/24
UART- Lập trình truyền thông

Lập trình 8051 để truyền dữ liệu nối tiếp

Chú ý:
 Bằng việc hiển thị cờ TI ta biết chắc rằng ta không nạp
quá vào thanh ghi SBUF.
 Nếu ta nạp một byte vào SBUF trước ghi TI được bật
thì phần dữ liệu của byte trước chưa truyền hết sẽ bị
mất.
 Bít cờ TI có thể kiểm tra bằng lệnh “JNB TI …” hoặc
có thể sử dụng ngắt ở địa chỉ 0023H trong ROM

04/18/24
UART- Lập trình truyền thông

Lập trình 8051 để nhận dữ liệu


Lập trình 8051 để nhận các byte ký tự nối tiếp thì cần
phải thực hiện các bước sau:
1. 1. Nạp giá trị vào thanh ghi TMOD để báo sử dụng bộ định
thời:
Thanh ghi TMOD

04/18/24
UART- Lập trình truyền thông

Lập trình 8051 để nhận dữ liệu:

2. Nạp TH1 giá trị để tạo ra tốc độ baud với giả thiết XTAL =
10.0592MHz, theo bảng:

Hoặc theo công thức:


2 SMOD * OscillatorFrequency
TH 1  256 
384 * BaudRate

04/18/24
UART- Lập trình truyền thông

Lập trình 8051 để nhận dữ liệu


3. Nạp giá trị vào thanh ghi SCON để báo sử dụng chế độ truyền
nối tiếp.
4. Bật TR1 = 1 để khởi động Timer1.
5. Xoá cờ ngắt RI bằng lệnh “CLR RI”
6. Bít cờ RI được hiển thị bằng lệnh “JNB RI, xx” để xem toàn
bộ ký tự đã được nhận chưa.
7. Khi RI được thiết lập thì trong SBUF đã có 1 byte. Chúng ta
dùng lệnh copy nội dung SBUF vào một nơi an toàn.
8. Để nhận một ký tự tiếp theo quay trở về bước 5.

04/18/24
UART- Lập trình truyền thông

Lập trình 8051 để nhận dữ liệu


Chú ý
 Nếu ta sao nội dung SBUF vào nơi an toàn trước khi RI
được bật thì sẽ sao dữ liệu chưa đầy đủ.
 Sau khi SBUF được ghi vào nơi an toàn thì cờ RI
được xoá về 0 bằng lệnh “CLR RI” nhằm cho các ký tự
kế tiếp nhận được đưa vào SBUF. Nếu không làm được
điều này thì gây ra mất ký tự vừa nhận được.
 Bít cờ RI có thể được kiểm tra bởi lệnh “JNB RI, xx” hoặc
bằng ngắt ở địa chỉ 0023H trong ROM
04/18/24
CHUẨN RS232
 Tên chính thức: EIA/TIA-232, do Electronic
Industry Association và Telecommunication
Industry Association cùng xây dựng
 Tên thường dùng: RS-232 (Recommended
Standard)
 Các phiên bản: RS-232c, RS-232f, chuẩn sử dụng
cho cổng COM của máy tính cá nhân thường là
RS-232c.
 Tương ứng với chuẩn châu Âu là CCITT V.24
04/18/24
RS232
Đặc điểm

Ghép nối

Ưu nhược điểm

04/18/24
RS232- Đặc điểm

 RS232 sử dụng phuơng thức truyền không đối


xứng hay đơn cực (unbalanced mode, single-
ended mode), tức là sử dụng tín hiệu điện áp
chênh lệch giữa một dây dẫn và đất.
 Truyền không đồng bộ: Cấu trúc một khung
truyền bao gồm :1 start bit, 7-8 data bit, 0-1 pariy
bit, 1-2 stop bit.

04/18/24
RS232- Đặc điểm

Định dạng của một kí tự truyền theo chuẩn RS232

04/18/24
RS232- Đặc điểm

 Truyền số liệu 2 chiều đồng thời (Full-duplex),


sử dụng 3 dây: TxD, RxD, GND.
 Ghép nối điểm-điểm (peer-to-peer)

04/18/24
RS232- Đặc điểm

 Mức điện áp

04/18/24
RS232- Đặc điểm

 Mức logic
• Mức 1 ứng với điện áp từ -25V đến -3V
• Mức 0 ứng với điện áp + 3V đến +25V
• Điện áp – 3V đến + 3V là không xác định.
→Vì lý do này để kết nối một RS232 bất kỳ đến một hệ
vi điều khiển thì ta phải sử dụng các bộ biến đổi điện
áp như MAX232 để chuyển đổi các mức lô-gíc TTL
về mức điện áp RS232 và ngược lại. Các chíp IC
MAX232 nhìn chung được coi như các bộ điều khiển
đường truyền.
04/18/24
RS232 – Ghép nối

 Chuẩn RS232 qui định 3 loại giắc cắm là DB-9,


DB-25 và ALT-A, trong đó hai loại đầu được sử
dụng rộng rãi hơn.

04/18/24
RS232 – Ghép nối

DB9

04/18/24
RS232 – Ghép nối

DB9
1. Data carrier detect (DCD) – Phát hiện tín hiệu mang dữ liệu
2. Received data (RxD) - Dữ liệu được nhận
3. Transmitted data (TxD) - Dữ liệu được gửi
4. Data terminal ready (DTR) - Đầu cuối dữ liệu sẵn sàng
5. Signal ground (GND) – Đất của tín hiệu
6. Data set ready (DSR) - Dữ liệu sẵn sàng
7. Request to send (RTS) - Yêu cầu gửi
8. Clear to send (CTS) - Xoá để gửi
9. Ring indicator (RL) - Báo chuông

04/18/24
RS232 – Ghép nối

DB25

04/18/24
RS232 – Ghép nối

ALT A

04/18/24
RS232 - Ghép nối

04/18/24
RS232 - Ghép nối

04/18/24
RS232 - Ghép nối

Sơ đồ MAX232

04/18/24
‰ We need a line driver (voltage
8051 converter) to convert the R232’s signals
CONNECTION to TTL voltage levels that will be
TO RS232 acceptable to 8051’s TxD and RxD pins

MAX232 Vcc
C3
MAX232 requires
16 2
+
four capacitors
+
1 MAX232
C1
3 6 8051
4 C4
+
C2
+
MAX232
5 11 11
P3.1
TxD 14 2 5

T1in T1out
11 14
13 3
R1out R1in P3.0 10 12
12 13
RxD
T2in T2out
10 7
DB-9
R2out R2int
9 8

MAX232 has two


TTL side 15 RS232 side
sets of line drivers

19
RS232 - Ưu nhược điểm

 Khoảng cách truyền ngắn, 15 - 30m


 Tốc độ truyền dẫn thấp, phụ thuộc vào chiều dài
dây dẫn
 Mức điện áp không thực sự tương thích với
chuẩn nguồn của nhiều thiết bị.

04/18/24
RS232 - Ưu nhược điểm của

 Mặc dù tính năng hạn chế nhưng RS232 là một


trong các chuẩn tín hiệu có từ lâu đời nhất, vì thế
được dùng rất rộng rãi.Ngày nay, mỗi máy tính cá
nhân đều có một vài cổng RS232 để nối với các
thiết bị ngoại vi hoặc với máy tính khác.RS232
cũng được tích hợp trong lõi 8051 và có nhiều ứng
dụng rất thuận tiện.

04/18/24
RS485

Tên chính thức EIA/TIA-485, phiên bản mới nhất là EIA/TIA-


485b

04/18/24
RS485

Đặc điểm chung

Các chế độ truyền

Ghép nối

Ưu nhược điểm

04/18/24
RS485 - Đặc điểm chung

Phương thức truyền dẫn chênh lệch đối xứng

 Sử dụng điện áp chênh lệch giữa hai dây dẫn A và B


(hoặc –và +)
 Ưu nhược điểm của phương thức chênh lệch đối xứng
 Không tiết kiệm dây dẫn lắm
 Khả năng kháng nhiễu tốt
 Có thể sử dụng mức tín hiệu thấp
 Tốc độ truyền cao
 Khoảng cách truyền lớn
04/18/24
RS485 - Đặc điểm chung

 Ghép nối nhiều điểm, có 32 bộ phát và 32 bộ thu trên


một đường truyền
 Có thể dùng tới 3 bộ lặp (4 đoạn mạng), trong thực tế
có thể hơn
 Trở đầu cuối: 100 hoặc 120 Ω (để cân bằng với trở
kháng của đường dây )
 Bộ phát của RS485 có thể hoạt động ở 3 trạng thái:
mức logic "1", mức logic "0" và trạng thái cao trở

04/18/24
RS485 - Đặc điểm chung

 Truyền ở tốc độ cao, khoảng cách truyền xa, để tăng


khoảng cách truyền và số trạm ta cần phải dùng các
bộ repeater
 Có thể dùng nguồn cung cấp đơn 5V cho bộ phát
 Các nút mạng phải được đánh địa chỉ và phải có một
giao thức điều khiển truy nhập đường truyền. các
đầu ra phải có mạch hạn dòng để tránh hỏng hóc khi
có xung đột xảy ra.

04/18/24
RS485 - Đặc điểm chung

Mức logic của RS485

04/18/24
RS485 – Các chế độ truyền

Các chế độ truyền

Truyền ở chế độ full duplex Truyền ở chế độ half duplex


sử dụng 5 dây sử dụng 3 dây

04/18/24
RS485 - Ưu nhược điểm

 Tốc độ truyền cao (có thể tới > 10Mbps)


 Khoảng cách truyền lớn (có thể tới 1200m)

04/18/24
SPI

SERIAL PERIPHERAL INTERFACE


 SPI là chuẩn giao tiếp tuần tự ngoại vi cho phép
truyền đồng bộ dữ liệu tốc độ cao giữa vi xử lý và
thiết bị ngoại vi (tốc độ 2Mb/s).
 Do Motorola đề xuất
 Song song sử dụng cùng chuẩn I2C, chuẩn SPI
được một số hãng tin dùng, đặc biệt là ATMEL

04/18/24 group 6
235
SPI

SPI

Đặc điểm Truyền dữ Các chế độ


chung liệu hoạt động

04/18/24
SPI – Đặc điểm chung

Các tín hiệu


 SCK / SCLK (Serial Clock)
Điều khiển truyền nhận dữ liệu.
 SDO (Serial data out)
Dữ liệu ra.
 SDI (Serial Data In)
Dữ liệu vào.
 SS / CS (Slave Select, Chip Select)
Khi SS ở mức thấp thì Slave được phép.
04/18/24
SPI – Đặc điểm chung

Các tín hiệu

04/18/24
SPI – Đặc điểm chung

 SCK luôn luôn do master tạo ra.


 Dữ liệu được đồng thời dịch ra/vào các chip sau
mỗi xung clock.
 Chế độ 2 chiều đồng thời (full-duplex).
→Slave phải hoàn thành việc ghi dữ liệu vào bộ đệm
SPI trước khi master ghi vào bộ đệm của master, để cả
master lẫn slave đều có dữ liệu hợp lệ khi bắt đầu
truyền dữ liệu.

04/18/24
SPI – Đặc điểm chung

 Tốc độ truyền dữ liệu trong giao tiếp SPI khá cao


(clock có thể đạt đến 40 MHz), tuy nhiên, điều này
cũng giới hạn chiều dài của bus khiến cho SPI thường
chỉ được dùng trên các board mạch chứ không dùng
với các thiết bị trường.

04/18/24
SPI – Truyền dữ liệu

 Đường truyền SPI

 SCLK : serial clock ( output from master )


 MOSI/SIMO : master output, slave input
( output from master)
 MISO/SOMI : master input, salve output
( output from salve)
 SS : slave select (active low, output form master)
04/18/24
SPI – Truyền dữ liệu

 Các dạng truyền


Dạng độc lập Dạng mắt xích

04/18/24
SPI – Truyền dữ liệu

Quá trình truyền dữ liệu

04/18/24
SPI – Truyền dữ liệu

 Master cấu hình cho Clock, tần số nhỏ hơn hoặc bằng
tần số cực đại mà Slave hỗ trợ.(Tần số phổ biến từ 0-
70MHz).
 Master kéo bit SS (slave select) xuống mức thấp để
yêu cầu chip, trên các slave nếu SS ở mức cao không
làm việc. Nếu có một khoảng thời gian chờ được yêu
cầu, thì khi đó master phải chờ ít nhất là khoảng thời
gian trên để bắt đầu cấp phát xung clock.

04/18/24
SPI – Truyền dữ liệu

 Mỗi một chu kỳ clock SPI, dữ liệu truyền theo chế


độ full-duplex xuất hiện :
 Master gửi một bit trên đường MOSI, Slave đọc bit đó
cũng trên đường MOSI.
 Slave gửi một bit trên đường MISO, Master đọc bit đó
cũng trên đường MISO.

04/18/24
SPI – Các chế độ hoạt động

Tùy vào pha (phase) và cực tính (polarity) của tín hiệu SCK, có 4
chế độ khác nhau được định nghĩa cho giao thức SPI:

 Chế độ (0, 0): Chân SCK ổn định ở mức '0' khi không
có xung, lấy mẫu dữ liệu ở đầu chu kỳ (cạnh trước
của xung clock).
 Chế độ (0, 1): Chân SCK ổn định ở mức '0' khi không
có xung, lấy mẫu dữ liệu ở giữa chu kỳ (cạnh sau của
xung clock).
04/18/24
SPI – Các chế độ hoạt động

 Chế độ (1, 0): Chân SCK ổn định ở mức '1' khi không
có xung, lấy mẫu dữ liệu ở đầu chu kỳ (cạnh trước của
xung clock).
 Chế độ (1, 1): Chân SCK ổn định ở mức '1' khi không
có xung, lấy mẫu dữ liệu ở giữa chu kỳ (cạnh sau của
xung clock).

04/18/24
SPI – Các chế độ hoạt động
Số lượng xung clock (số bit dữ liệu của mỗi từ) không
bị giới hạn là 8, vì thực tế không có ủy ban tiêu chuẩn
nào phê chuẩn giao thức SPI. Cũng vì lý do này, thứ
tự truyền các bit trong các thông điệp cũng có thể khác
nhau, hay mức tích cực của chân SS cũng có thể thay
đổi giữa các vi mạch khác nhau, và một số vi mạch
cũng có thể chỉ thu hoặc phát dữ liệu theo một chiều
duy nhất.

04/18/24
Project

Chương trình để truyền chữ “UART” nối tiếp liên


tục với tốc độ 9600 baud (8 bít dữ liệu, 1 bít Stop)

04/18/24
Project
Chương trình viết bằng ASM
MOV TMOD, #20H ; Chọn bộ Timer1, chế độ 2
MOV TH1, # - 3 ; Chọn tốc độ 9600 baud
MOV SCON, #50H ; Truyền 8 bít dữ liệu, 1 bít Stop cho phép thu
SETB TR1 ; Khởi động Timer1
AGAIN: MOV A, # “U" ; Truyền ký tự “U”
ACALL TRANS
MOV A, # “A" ; Truyền ký tự “A”
ACALL TRANS
MOV A, # “R" ; Truyền ký tự “R”
ACALL TRANS
MOV A, # “T" ; Truyền ký tự “T”
ACALL TRANS
SJMP AGAIN ; Tiếp tục

04/18/24
Project
Chương trình viết bằng ASM
; Chương trình con truyền dữ liệu nối tiếp.
TRANS: MOV SBUF, A ; Nạp SBUF
HERE: NB TI, HERE ; Chờ cho đến khi truyền bít cuối cùng
CLR TI ; Chờ sẵn cho một byte kế tiếp
RET

04/18/24
Project

Chương trình để nhận các byte dữ liệu nối tiếp và đặt


chúng vào cổng P1. Đặt tốc độ baud là 9600, 8 bít dữ
liệu và 1 bít Stop

04/18/24
Project
Chương trình viết bằng ASM
MOV TMOD, #20H ; Chọn bộ Timer1, chế độ 2 (tự động nạp lại)
MOV TH1, # - 3 ; Chọn tốc độ 9600 baud
MOV SCON, #50H ; Chọn khung dữ liệu 8 bít, 1 bít Stop.
SETB TR1 ; Khởi động bộ Timer1
HERE: JNB R1, HERE ; Đợi nhận toàn bộ lý tự vào hết
MOV A, SBUF ; Lưu cất ký tự vào thanh A
MOV P1, A ; Gửi ra cổng P.1
CLR RI ; Sẵn sàng nhận byte kế tiếp
SJMP HERE ; Tiếp tục nhận dữ liệu

04/18/24
Project
 Sử dụng ngắt
Chương trình trong đó 8051 nhận dữ liệu từ cổng P1 và gửi liên
tục đến cổng P2 trong khi đó dữ liệu đi vào từ cổng nối tiếp
COM được gửi đến cổng P0. Giả thiết tần số XTAL là
11.0592MHz và tốc độ baud 9600.

04/18/24
Project
 Sử dụng ngắt
ORG 0
LJMP MAIN
ORG 23H
LJMP SERIAL
ORG 03H
MAIN: MOV P1, # FFH ; Lấy cổng P1 là cổng đầu vào
MOV TMOD, # 20H ; Chọn Timer và chế độ hai tự nạp lại
MOV TH1, # 0FDH ;Khung dữ liệu: 8 bít dữ liệu, 1 stop, cho phép REN
MOV SCON, # 50H
MOV IE, # 10010000B ; Cho phép ngắt nối tiếp
SETB TR1 ; Khởi động Timer1
BACK: MOV A, P1 ; Đọc dữ liệu từ cổng P1
MOV P2, A ; Gửi dữ liệu đến cổng P2
SJMP BACK ; ở lại trong vòng lặp

04/18/24
Project
 Sử dụng ngắt ( tiếp theo )
; -------------------------Trình phục vụ ngắt cổng nối tiếp.
ORG 100H
SERIAL: JB TI, TRANS ; Nhảy nếu Ti cao
MOV A, SBUF ; Nếu không tiếp tục nhận dữ liệu
MOV P0, A ; Gửi dữ lệu đầu vào đến cổng P0
CLR RI ; Xoá vờ RI vì CPU không xoá cờ này
RETI ; Trở về từ ISR
TRANS: CLS TI ; Xoá cờ TI và CUP không xoá cờ này.
RETI ; trở về từ ISR
END

04/18/24
Serial protocols: I2C

• I2C (Inter-IC)
– Two-wire serial bus protocol developed by Philips Semiconductors
nearly 20 years ago
– Enables peripheral ICs to communicate using simple communication
hardware
– Data transfer rates up to 100 kbits/s and 7-bit addressing possible in
normal mode
– 3.4 Mbits/s and 10-bit addressing in fast-mode
– Common devices capable of interfacing to I2C bus:
• EPROMS, Flash, and some RAM memory, real-time clocks, watchdog
timers, and microcontrollers

257
I2C bus structure

SCL
SDA

Micro- EEPROM Temp. LCD-


controller (servant) Sensor controller
(master) (servant) (servant) < 400 pF

Addr=0x01 Addr=0x02 Addr=0x03

SDA SDA SDA SDA

SCL SCL SCL SCL

Start condition Sending 0 Sending 1 Stop condition

From From
Servant receiver

D
C
S A A A A R A D D D A S O
T R 6 5 0 / C 8 7 0 C T P
T w K K
Typical read/write cycle

258
Serial protocols: CAN

• CAN (Controller area network)


– Protocol for real-time applications
– Developed by Robert Bosch GmbH
– Originally for communication among components of cars
– Applications now using CAN include:
• elevator controllers, copiers, telescopes, production-line control systems, and
medical instruments
– Data transfer rates up to 1 Mbit/s and 11-bit addressing
– Common devices interfacing with CAN:
• 8051-compatible 8592 processor and standalone CAN controllers
– Actual physical design of CAN bus not specified in protocol
• Requires devices to transmit/detect dominant and recessive signals to/from bus
• e.g., ‘1’ = dominant, ‘0’ = recessive if single data wire used
• Bus guarantees dominant signal prevails over recessive signal if asserted simultaneously

259
Serial protocols: FireWire

• FireWire (a.k.a. I-Link, Lynx, IEEE 1394)


– High-performance serial bus developed by Apple Computer Inc.
– Designed for interfacing independent electronic components
• e.g., Desktop, scanner
– Data transfer rates from 12.5 to 400 Mbits/s, 64-bit addressing
– Plug-and-play capabilities
– Packet-based layered design structure
– Applications using FireWire include:
• disk drives, printers, scanners, cameras
– Capable of supporting a LAN similar to Ethernet
• 64-bit address:
– 10 bits for network ids, 1023 subnetworks
– 6 bits for node ids, each subnetwork can have 63 nodes
– 48 bits for memory address, each node can have 281 terabytes of distinct locations

260
Serial protocols: USB
• USB (Universal Serial Bus)
– Easier connection between PC and monitors, printers, digital speakers, modems,
scanners, digital cameras, joysticks, multimedia game equipment
– 2 data rates:
• 12 Mbps for increased bandwidth devices
• 1.5 Mbps for lower-speed devices (joysticks, game pads)
– Tiered star topology can be used
• One USB device (hub) connected to PC
– hub can be embedded in devices like monitor, printer, or keyboard or can be standalone
• Multiple USB devices can be connected to hub
• Up to 127 devices can be connected like this
– USB host controller
• Manages and controls bandwidth and driver software required by each peripheral
• Dynamically allocates power downstream according to devices
connected/disconnected

261
Intel 8051: Serial Port Interface

• Song công ( Full Duplex)


• Thanh ghi SBUF sử dụng để truyền và nhận dữ liệu

– Viết vào thanh ghi SBUF sẽ nạp bộ đệm phát


– Đọc từ thanh ghi SBUF sẽ truy cập bộ đệm nhận riêng biệt
• Có 4 chế độ hoạt động
– Trong cả 4 chế độ thì Truyền đi có thể thực hiện bất kỳ khi
nào khi có lệnh sử dụng SBUF như là thanh ghi đích
( destination register )
– Ở Mode 0 : Nhận sẽ bắt đầu nếu RI =0 và REN =1;
– Còn ở các Mode còn lại quá trình nhận sẽ bắt đầu khi có bit
START và REN = 1
• SCON - Serial Port Control Register
Intel 8051: Serial Port Interface
7 6 5 4 3 2 1 0
SCON SM0 SM1 SM0 REN TB8 RB8 TI RI

• SM0 SM1:
– 00: Mode 0, Shift register, fosc//12
– 01: Mode 1, 8-bit UART, variable
– 10: Mode 2, 9-bit UART, fosc//32 or fosc//64
– 11: Mode 3, 9-bit UART, variable
• SM2: Cho phép tính năng nhiều uP trong Mode 2 và Mode 3
– Khi nhận được bit STOP, Ngắt dẽ được kích hoạt chỉ khi bit
RB8=1 (9th bit =1)
• REN: Enables serial reception ( Cho phép nhận nối tiếp )
– Set/Clear bằng phần mềm
263/175
Intel 8051: Serial Port Interface

7 6 5 4 3 2 1 0
SCON SM0 SM1 SM0 REN TB8 RB8 TI RI

• TB8: 9th data bit, sẽ được truyền trong Mode2 and Mode3
– Set/Clear bằng phần mềm
• RB8: 9th data bit that was received in Mode2 and Mode3
In Mode 1, if SM2=0, is the stop bit that was received
• TI: Transmit interrupt flag ( Cờ ngắt truyền )
– Set bằng phần cứng. Cần xóa bằng phần mềm
• RI: Receive interrupt flag ( Cờ ngắt nhận )
– Set bằng phần cứng. Cần xóa bằng phần mềm

264/175
Intel 8051: Serial Port Interface

• MODE 0:
– Dữ liệu nối tiếp vào / ra qua chân RXD
– TXD xuất ra xung nhịp truyền
– Truyền/ nhận 8 data bits (LSB ra đầu tiên )
– baud rate cố định và bằng 1/12 tần số oscillator
• MODE 1:
– Dữ liệu nối tiếp vào chân RXD, ra ở TXD
– Truyền/ nhận 10 bits :
start bit(0), 8 data bits (LSB first), stop bit(1)
– Khi nhận thì bít stop được ghi vào bit RB8 trong SCON
– The baud rate thay đổi được
Intel 8051: Serial Port Interface

• MODE 2:
– Dữ liệu nối tiếp vào chân RXD, ra ở TXD
– Truyền/ nhận 11 bits :
start bit(0), 8 data bits (LSB first), a programmable 9th bit,
stop bit(1)
– Khi truyền , 9th bit là bit TB8 trong thanh ghi SCON
– Khi nhận , 9th bit ghi vào bit RB8 trong thanh ghi SCON
– The baud rate lập trình được bằng
1/32 hoặc 1/64 the oscillator frequency
• MODE 3:
– MODE 3 cơ bản giống MODE2, chỉ khác là
– The baud rate thay đổi được giống MODE 1
Intel 8051: Serial Port Interface
• Mode 0 Baud Rate = Oscillator frequency/12
• Mode 2 Baud Rate =[(2SMOD)/64]*Oscillator frequency
– SMOD is bit in Special Function Register PCON
• Mode 1 and Mode3 baud rate is
determined by Timer 1 overflow rate
• Mode 1,3 Baud Rate =[(2SMOD)/32]* Timer 1 Overflow Rate
– Timer mode, auto-reload :
Timer Overflow Rate=Oscillator frequency/[12*(256-TH1)]
Intel 8051: Serial Port Interface
Timer1
Baud
fosc SMOD
Rate Reload
C/T Mode
Value
62.5 K 12 MHz 1 0 2 FF
19.2 K 11.059 MHz 1 0 2 FD
9.6 K 11.059 MHz 0 0 2 FD
4.8 K 11.059 MHz 0 0 2 FA
2.4 K 11.059 MHz 0 0 2 F4
1.2 K 11.059 MHz 0 0 2 E8
135.5 11.059 MHz 0 0 2 1D
110 6 MHz 0 0 2 72
110 12 MHz 0 0 1 FEEB
268/175
Serial Transmission Using UARTs

• UART: Universal
embedded
Asynchronous Receiver 1 0
device
1 1
Transmitter 0
0 1 1

– Takes parallel data and


transmits serially
1 0 0 1 1 0 1 1 1 0 0 1 1 0 1 1
– Receives serial data and
converts to parallel Sending UART Receiving UART
start bit end bit
• Parity: extra bit for simple data

error checking
• Start bit, stop bit
• Baud rate
– signal changes per second
– bit rate usually higher 1 0 0 1 1 0 1 1

269
LẬP TRÌNH TRUYỀN TIN NỐI TIẾP 8051

270
‰ TI (transfer interrupt) is raised when
SERIAL
COMMUNI-
the last bit of the framed data, the
CATION stop bit, is transferred, indicating that
INTERRUPT the SBUF register is ready to transfer
the next byte
‰ RI (received interrupt) is raised when
the entire frame of data, including the
stop bit, is received
 In other words, when the SBUF register
has a byte, RI is raised to indicate that the
received byte needs to be picked up before
it is lost (overrun) by new incoming serial
data

33
‰ In the 8051 there is only one interrupt
SERIAL
COMMUNI-
set aside for serial communication
CATION  This interrupt is used to both send and
INTERRUPT receive data
 If the interrupt bit in the IE register (IE.4)
RI and TI Flags is enabled, when RI or TI is raised the
and Interrupts 8051 gets interrupted and jumps to
memory location 0023H to execute the ISR 
In that ISR we must examine the TI and RI
flags to see which one caused the interrupt
and respond accordingly
TI
0023H
RI
Serial interrupt is invoked by TI or RI flags

34
‰ The serial interrupt is used mainly for
SERIAL
COMMUNI-
receiving data and is never used for
CATION sending data serially
INTERRUPT  This is like getting a telephone call in
which we need a ring to be notified
Use of Serial  If we need to make a phone call there are
COM in 8051 other ways to remind ourselves and there
is no need for ringing
 However in receiving the phone call, we
must respond immediately no matter what
we are doing or we will miss the call

35
Example 11-8
Write a program in which the 8051 reads data from P1 and writes it to
SERIAL P2 continuously while giving a copy of it to the serial COM port to be
transferred serially. Assume that XTAL=11.0592. Set the baud rate at
COMMUNI- 9600.
CATION Solution:
INTERRUPT ORG 0000H
LJMP MAIN
ORG 23H
Use of Serial LJMP SERIAL ;jump to serial int ISR
ORG 30H
COM in 8051 MAIN: MOV P1,#0FFH;make P1 an input port
(cont’) MOV TMOD,#20H ;timer 1, auto reload
MOV TH1,#0FDH ;9600 baud rate
MOV SCON,#50H ;8-bit,1 stop, ren enabled
MOV IE,10010000B ;enable serial int.
SETB TR1 ;start timer 1
BACK: MOV A,P1 ;read data from port 1
MOV SBUF,A ;give a copy to SBUF
MOV P2,A ;send it to P2
SJMP BACK ;stay in loop indefinitely

36
;-----------------SERIAL PORT ISR
SERIAL ORG 100H
COMMUNI- SERIAL: JB TI,TRANS;jump if TI is high
MOV A,SBUF ;otherwise due to receive
CATION CLR RI ;clear RI since CPU doesn’t
INTERRUPT RETI ;return from ISR
TRANS: CLR TI ;clear TI since CPU doesn’t
RETI ;return from ISR
Use of Serial END
COM in 8051
(cont’) The moment a byte is written into SBUF it is framed and transferred
serially. As a result, when the last bit (stop bit) is transferred the TI is
raised, and that causes the serial interrupt to be invoked since the
corresponding bit in the IE register is high. In the serial ISR, we check
for both TI and RI since both could have invoked interrupt.

37
Example 11-9
Write a program in which the 8051 gets data from P1 and sends it to
SERIALP2 continuously while incoming data from the serial port is sent to P0.
COMMUNI- Assume that XTAL=11.0592. Set the baud rata at 9600.
CATION Solution:
INTERRUPT ORG 0000H
LJMP MAIN
ORG 23H
Use of Serial LJMP SERIAL ;jump to serial int ISR
COM in 8051 ORG 30H
(cont’) MAIN: MOV P1,#0FFH ;make P1 an input port
MOV TMOD,#20H ;timer 1, auto
reload MOV TH1,#0FDH ;9600 baud
rate
MOV SCON,#50H ;8-bit,1 stop, ren enabled
MOV IE,10010000B ;enable serial int.
SETB TR1 ;start timer 1
BACK: MOV A,P1 ;read data from port 1
MOV P2,A ;send it to P2
SJMP BACK ;stay in loop indefinitely

38
;-----------------SERIAL PORT ISR
SERIAL
ORG 100H
COMMUNI- SERIAL: JB TI,TRANS;jump if TI is high
CATION MOV A,SBUF;otherwise due to receive
INTERRUPT MOV P0,A ;send incoming data to P0
CLR RI ;clear RI since CPU doesn’t
RETI ;return from ISR
Use of Serial TRANS: CLR TI ;clear TI since CPU doesn’t
COM in 8051 RETI ;return from ISR
END
(cont’)

39
Example 11-10
Write a program using interrupts to do the following:
SERIAL (a) Receive data serially and sent it to P0,
(b) Have P1 port read and transmitted serially, and a copy given to
COMMUNI- P2,
CATION(c) Make timer 0 generate a square wave of 5kHz frequency on P0.1.
INTERRUPT Assume that XTAL-11,0592. Set the baud rate at 4800.
Solution:
ORG 0
Clearing RI and LJMP MAIN
TI before RETI ORG 000BH ;ISR for timer 0
CPL P0.1 ;toggle P0.1
RETI ;return from ISR
ORG 23H ;
LJMP SERIAL ;jump to serial interrupt ISR
ORG 30H
MAIN: MOV P1,#0FFH ;make P1 an input port
MOV TMOD,#22H;timer 1,mode 2(autoreload)
MOV TH1,#0F6H;4800 baud rate
MOV SCON,#50H;8-bit, 1 stop, ren enabled
MOV TH0,#-92 ;for 5kHZ wave

40
SERIAL MOV IE,10010010B ;enable serial int.
;start timer 1
COMMUNI- SETB TR1
SETB TR0 ;start timer 0
CATION BACK: MOV A,P1 ;read data from port 1
INTERRUPT MOV SBUF,A ;give a copy to SBUF
MOV P2,A ;send it to P2
Clearing RI and SJMP BACK ;stay in loop indefinitely
;-----------------SERIAL PORT ISR
TI before RETI ORG 100H
(cont’) SERIAL:JB TI,TRANS;jump if TI is high
MOV A,SBUF ;otherwise due to receive
MOV P0,A ;send serial data to P0
CLR RI ;clear RI since CPU doesn’t
RETI ;return from ISR
TRANS: CLR TI ;clear TI since CPU doesn’t
RETI ;return from ISR
END

41
Parallel protocols: PCI Bus
• PCI Bus (Peripheral Component Interconnect)
– High performance bus originated at Intel in the early 1990’s
– Standard adopted by industry and administered by PCISIG (PCI Special Interest
Group)
– Interconnects chips, expansion boards, processor memory subsystems
– Data transfer rates of 127.2 to 508.6 Mbits/s and 32-bit addressing
• Later extended to 64-bit while maintaining compatibility with 32-bit schemes
– Synchronous bus architecture
– Multiplexed data/address lines
Wireless protocols: IrDA
• IrDA
– Protocol suite that supports short-range point-to-point infrared data
transmission
– Created and promoted by the Infrared Data Association (IrDA)
– Data transfer rate of 9.6 kbps and 4 Mbps
– IrDA hardware deployed in notebook computers, printers, PDAs, digital
cameras, public phones, cell phones
– Lack of suitable drivers has slowed use by applications
– Windows 2000/98 now include support
– Becoming available on popular embedded OS’s

281
Wireless protocols: Bluetooth

• Bluetooth
– New, global standard for wireless connectivity
– Based on low-cost, short-range radio link
– Connection established when within 10 meters of each other
– No line-of-sight required
• e.g., Connect to printer in another room

282
Wireless Protocols: IEEE 802.11
• IEEE 802.11
– Proposed standard for wireless LANs
– Specifies parameters for PHY and MAC layers of network
• PHY layer
– physical layer
– handles transmission of data between nodes
– provisions for data transfer rates of 1 or 2 Mbps
– operates in 2.4 to 2.4835 GHz frequency band (RF)
– or 300 to 428,000 GHz (IR)
• MAC layer
– medium access control layer
– protocol responsible for maintaining order in shared medium
– collision avoidance/detection

283

You might also like