dce

2009

Chương 6 - Giao tiếp ngoại vi

1. Cổng giao tiếp song song. 2. Giao tiếp nối tiếp.

BK TP.HCM

©2009, CE Department

dce

2009

Cổng giao tiếp song song

Có 3 cổng 8 bit, 2 chiều : PORTA, PORTB và PORTC. Mỗi cổng có 3 thanh ghi :

TRISx : chọn chiều dữ liệu 8 bit.

0 = Output

1=Input

PORTx : dùng để đọc dữ liệu từ ngoài thiết bị vào hoặc cũng có thể đọc lại dữ liệu đã ghi ra cổng LATx. LATx : dùng để chốt dữ liệu xuất ra cổng (thường dùng phục vụ cơ chế Đọc-Sửa-Ghi).

©2009, CE Department 2

dce

2009

Sơ đồ khối 1 bit của cổng

Dữ liệu đã xuất ra

1 bit của tuyến dữ liệu

Dữ liệu từ thiết bị về hoặc dữ liệu xuất ra

©2009, CE Department 3

dce

2009

Cổng A

Các bit của cổng A có thể sử dụng theo nhiều chức năng :

Bit xuất / nhập thông thường. Chức năng chuyên dụng khác như :

Ngỏ nhập tương tự (RA5, RA3 - RA0 ). [Mặc định sau khi RESET] Ngỏ nhập điện áp chuẩn (Vref) trong chế độ A-D hoặc so sánh. Ngỏ nhập xung sự kiện cho bộ định thì 0 (RA4). Ngỏ xuất chế độ so sánh (RA5, RA4). Chân của bộ dao động chính (RA7, RA6). Ngỏ nhập phát hiện điện áp thấp (RA5).

Chân RA4 có ngỏ ra dạng cực máng hở (open drain), ngỏ nhập dạng Schmitt trigger. Các chân RA khác có ngỏ ra dạng CMOS, ngỏ nhập dạng TTL.

©2009, CE Department 4

dce

2009

Chức năng các bit cổng A

Chân

Ngỏ nhập Chức năng

OSC1/CLKI/RA7

TTL

OSC1 / Nhập xung clock

OSC2/CLKO/RA6

TTL

OSC2 / Xuất xung clock

RA5/AN4/SS/LVDIN/C2OUT

TTL

Nhập tương tự / Nhập chọn slave cho MSSP / Nhập phát hiện điện áp thấp / Xuất so sánh 2

RA4/T0CKI/C1OUT

ST

Nhập xung sự kiện cho Timer0 / Xuất so sánh 1 (Open drain)

RA3/AN3/VREF+

TTL

Nhập tương tự / Xuất Vref+

RA2/AN2/VREF-/CVREF

TTL

Nhập tương tự / Xuất Vref- / Xuất Vref so sánh

RA1/AN1

TTL

Nhập tương tự

RA0/AN0

TTL

Nhập tương tự

©2009, CE Department 5

dce

2009

Lập trình cổng A

Xóa nội dung cổng A về 0 : PORTA LATA

clrf clrf

Chọn các chân RAi dùng theo kỹ thuật số (digital IO) :

movlw 0x0F movwf ADCON1

Chọn chiều xuất / nhập cho các chân RAi :

movlw 0xCF ; RA3-RA0 nhập, RA5-RA4 xuất. movwf TRISA

©2009, CE Department 6

dce

2009

Sơ đồ chân RA5, RA3 - RA0

©2009, CE Department 7

dce

2009

Sơ đồ chân RA4

Dạng cực máng hở

Dạng Schmitt trigger

©2009, CE Department 8

dce

2009

Cổng B

Các bit của cổng B có thể sử dụng theo nhiều chức năng :

Bit xuất / nhập thông thường. Chức năng chuyên dụng khác như :

Ngỏ nhập tương tự (RB4-RB0). [Mặc định sau khi RESET] Ngỏ nhập ngắt quãng ngoài (RB2-RB0). Ngỏ nhập ngắt quãng đổi trạng thái (RB7-RB4). Thường dùng cho việc đánh thức CPU bằng cách nhấn phím. Ngỏ nhập cho chế độ lấy mẫu (RB3). Lập trình nối tiếp ICSP (RB7-RB5). Ngỏ xuất so sánh (RB3).

Các chân RBi đều có trở kéo lên bên trong được lập trình. Khi được dùng làm ngỏ nhập ngắt quãng hoặc lập trình nối tiếp, các tín hiệu đều qua mạch Schmitt trigger.

©2009, CE Department 9

dce

2009

Chức năng các bit cổng B

Chân

Ngỏ nhập Chức năng

TTL/ST

Ngắt đổi trạng thái 3 / Dữ liệu lập trình nối tiếp

RB7/KBI3/PGD

TTL/ST

Ngắt đổi trạng thái 2 / Clock lập trình nối tiếp

RB6/KBI2/PGC

TTL/ST

RB5/KBI1/PGM

Ngắt đổi trạng thái 1 / Cho phép lập trình ICSP điện áp thấp

TTL

Nhập tương tự / Ngắt đổi trạng thái 0

RB4/AN11/KBI0

TTL/ST

RB3/AN9/CCP2

Nhập tương tự / Nhập lấy mẫu 2 / Xuất so sánh 2 / Xuất PWM (khi CCP2MX được lập)

TTL/ST

Nhập tương tự / Nhập ngắt ngoài 2

RB2/AN8/INT2

TTL/ST

Nhập tương tự / Nhập ngắt ngoài 1

RB1/AN10/INT1

TTL/ST

Nhập tương tự / Nhập ngắt ngoài 0

RB0/AN12/INT0

©2009, CE Department 10

dce

2009

Sơ đồ chân RB7-RB5

Chọn trở kéo lên

Trở kéo lên

Dạng Schmitt trigger

©2009, CE Department 11

dce

2009

Sơ đồ chân RB2-RB0

ngắt ngoài

©2009, CE Department 12

dce

2009

Sơ đồ chân RB3

©2009, CE Department 13

dce

2009

Cổng C

Các bit của cổng C có thể sử dụng theo nhiều chức năng :

Bit xuất / nhập thông thường. Chức năng chuyên dụng khác như :

Chân truyền / nhận nối tiếp bất đồng bộ (RC7,RC6). Chân dữ liệu / clock nối tiếp đồng bộ (RC7,RC6). Chân lập trình SPI / I2C (RC5-RC2). Chân giao tiếp của bộ CCP (RC2,RC1). Chân dao dộng cho Timer1 (RC1,RC0).

©2009, CE Department 14

dce

2009

So đồ chân RCi

©2009, CE Department 15

dce

2009

Chức năng các bit cổng C

Chân

Ngỏ nhập Chức năng

ST

RC7/RX/DT

Dữ liệu nhận nối tiếp bất đồng bộ / Dữ liệu nối tiếp đồng bộ

ST

RC6/TX/CK

Dữ liệu truyền nối tiếp bất đồng bộ / Clock nối tiếp đồng bộ

ST

Xuất dữ liệu MSSP

RC5/SDO

ST

Nhập dữ liệu SPI / xuất nhập dữ liệu I2C

RC4/SDI/SDA

ST

Clock cho chế độ SPI / Clock chế độ I2C™

RC3/SCK/SCL

ST

Nhập lấy mẫu 1 / Xuất so sánh 1 / Xuất PWM1

RC2/CCP1

ST

RC1/T1OSI/CCP2

Nhập dao động Timer1 / Nhập lấy mẫu 2 / Xuất so sánh 2 / xuất PWM (khi bit CCP2MX bị cấm)

ST

Xuất dao động Timer1 / Nhập clock Timer1

RC0/T1OSO/T1CKI

©2009, CE Department 16

dce

2009

2. Giao tiếp nối tiếp

PIC 18F2220 có các khả năng giao tiếp nối tiếp sau :

Khối MSSP (Master Synchronous Serial Port) cung cấp khả năng giao tiếp với các vi điều khiển khác và các vi mạch ngoại vi (EEPROM, thanh ghi dịch, vi mạch lái màn hình, vi mạch chuyển đổi AD. . .) theo hai phương pháp :

SPI (Serial Peripheral Interface). I2C (Inter-Integrated Circuit).

Khối USART (Universal Synchronous Asynchronous Receiver Transmitter) cho phép hoạt động theo các chế độ :

Truyền nhận bất đồng bộ (song công). Truyền nhận đồng bộ chủ (bán song công). Truyền nhận đồng bộ tớ (bán song công).

©2009, CE Department 17

dce

2009

Chế độ SPI của MSSP

Interface) cho phép truyền

Chế độ SPI (Serial Peripheral nhận đồng thời dữ liệu đồng bộ 8 bit. Các tín hiệu sử dụng trong chế độ này :

- Dữ liệu nhận nối tiếp.

SDO - Dữ liệu truyền nối tiếp. SDI SCK - Xung clock SS

- Chọn slave (chỉ dùng khi chọn chế độ slave).

©2009, CE Department 18

dce

2009

Sơ đồ khối chế độ SPI

Dữ liệu vào

thanh ghi dịch

Dữ liệu ra

Xung clock Xung clock

©2009, CE Department 19

dce

2009

Thanh ghi SSPSTAT

SMP

CKE

D / A

P

S

R / W

UA

PS

SMP : lấy mẫu bit

Trong chế độ SPI chủ :

1= lấy mẫu dữ liệu ở cuối bit 0= lấy mẫu dữ liệu ở giữa bit

Trong chế độ SPI tớ : phải được xóa về 0.

(bit 6) CKE : Chọn cạnh tác động của xung clock truyền

Khi CKP=0:

1= truyền dữ liệu theo cạnh lên 0= truyền dữ liệu theo cạnh xuống

Khi CKP=1

1= truyền dữ liệu theo cạnh xuống 0= truyền dữ liệu theo cạnh lên

©2009, CE Department 20

dce

2009

Thanh ghi SSPSTAT (tt.)

(bit 5) D / A : chọn dữ liệu / địa chỉ ( chỉ trong chế độ I2C) (bit 4) P : Stop bit (chỉ dùng với chế độ I2C) (bit 3) S : Start bit (chỉ dùng với chế độ I2C) (bit 2) R / W : chọn hoạt động đọc / ghi (chỉ dùng với I2C) (bit 1) UA : update address bit (chỉ dùng với I2C) (bit 0) BF : bit trạng thái báo đệm đầy (Buffer Full status bit)

Trong chế độ truyền :

1= dữ liệu đang truyền, SSPBUF đầy. 0= dữ liệu đã truyền xong, SSPBUF rỗng.

Trong chế độ nhận :

1= đã nhận xong, SSPBUF đầy. 0= chưa nhận xong, SSPBUF rỗng.

©2009, CE Department 21

dce

2009

Thanh ghi SSPCON1

WCOL

SSPOV SSPEN CKP

SSPM3 SSPM2 SSPM1 SSPM0

(bit 7) WCOL : phát hiện lỗi truyền

=1 : xuất dữ liệu ra SSPBUF khi chưa truyền xong dữ liệu trước =0 : không bị lỗi.

(bit 6) SSPOV : lỗi nhận tràn dữ liệu (nhận dữ liệu mới trong khi SSPBUF vẫn còn giữ dữ liệu nhận trước đó. (bit 5) SSPEN : cho phép dùng giao tiếp MSSP.

1= cho phép. 0= cấm

(bit4) CKP : chọn cực cho xung clock.

1= chọn mức cao làm trạng thái tắt của clock. 0= chọn mức thấp làm trạng thái tắt của clock.

©2009, CE Department 22

dce

2009

Thanh ghi SSPCON1 (tt.)

SSPM3 - SSPM0 : chọn chế độ hoạt động 0101 : SPI tớ, clock=SCK, không dùng SS. 0100 : SPI tớ, clock=SCK, dùng SS. 0011 : SPI chủ, clock=(đầu ra Timer2) / 2 0010 : SPI chủ, clock=FOSC/64 0001 : SPI chủ, clock=FOSC/16 0001 : SPI chủ, clock=FOSC/4

©2009, CE Department 23

dce

2009

Ví dụ truyền nhận dùng polling

Lặp vòng chờ nhận dữ liệu LOOP

BTFSS BRA MOVF MOVWF

SSPSTAT,BF ;kiểm tra bit Buffer Full =1 LOOP ;lặp lại chờ SSPBUF, W ;nhận dữ liệu RXDATA

;cất dữ liệu vào RAM

Truyền dữ liệu

MOVF MOVWF

TXDATA, W ;lấy dữ liệu từ RAM SSPBUF

;chuyển sang đệm truyền

©2009, CE Department 24

dce

2009

Hoạt động chủ/tớ

Chế độ SPI chủ / tớ dùng đối với 2 MCU:

MCU chủ xuất xung SCK, MCU tớ nhận SCK. Hai MCU phải chọn cực của xung clock (CKP) như nhau. Cả hai MCU có thể truyền nhận cùng lúc.

©2009, CE Department 25

dce

2009

Lập trình - Cấu hình

Cho phép chế độ SSP (SSPEN=1). Muốn lập trình lại chế độ SSP ta làm theo trình tự sau :

Xóa SSPEN - lập trình SSPCON - lập SSPEN Cấu hình các bit SDI, SDO, SCK, SS như sau :

SDI SDO SCK (chủ) SCK (tớ) SS

: xóa bit TRISC4 : xóa bit TRISC5 : xóa bit TRISC3 : lập bit TRISC3 : lập bit TRISA5

Trong chế độ SPI tớ, SS hổ trợ sử dụng một chủ - nhiều tớ. Kết hợp với chế độ ngủ, dùng để đánh thức MCU bằng ngắt quãng MSSP.

©2009, CE Department 26

dce

2009

Giản đồ xung chế độ chủ

©2009, CE Department 27

dce

2009

Chế độ I2C của MSSP

Chế độ I2C (Inter-IC) của PIC có thể chọn chủ/tớ. Các tín hiệu sử dụng trong chế độ này :

Dữ liệu nối tiếp - RC4/SDI/SDA Xung clock - RC3/SCK/SCL

Các thanh ghi dùng trong chế độ I2C :

SSPCON1 - điều khiển SSP. SSPCON2 SSPSTAT - trạng thái SSP. SSPBUF - đệm truyền nhận. SSPADD - giữ địa chỉ nhận dạng của IC tớ. SSPSR - thanh ghi dịch (không thể tác động trực tiếp).

©2009, CE Department 28

dce

2009

Sơ đồ khối chế độ I2C

Xung clock Xung clock

Dữ liệu nối tiếp

©2009, CE Department 29

dce

2009

Giao tiếp nối tiếp USART

Khối USART cung cấp các chế độ giao tiếp nối tiếp:

Bất đồng bộ (Asynchronous) song công. Thường dùng trao đổi thông tin với máy tính. Đồng bộ chủ (Synchronous) bán song công. Dùng để điều khiển các thiết bị ngoại vi như EEPROM, mạch chuyển đổi AD, DA Đồng bộ tớ bán song công.

Các chân sử dụng :

RC6/TX/CK : là ngỏ truyền dữ liệu nối tiếp. RC7/RX/DT : là ngỏ nhập dữ liệu nối tiếp.

Các thanh ghi sử dụng :

TXSTA : điều khiển và trạng thái truyền. RCSTA : điều khiển và trạng thái nhận. TXREG : đệm dữ liệu truyền/nhận.

©2009, CE Department 30

dce

2009

Chế độ bất đồng bộ

Khung dữ liệu : 1 start bit + 8(hoặc 9) data bits + 1 stop bit

©2009, CE Department 31

dce

2009

Sơ đồ khối truyền bất đồng bộ

©2009, CE Department 32

dce

2009

Sơ đồ khối nhận bất đồng bộ

©2009, CE Department 33

dce

2009

Thanh ghi TXSTA

CSRC

TX9

TXEN

SYNC

-

BRGH TRMT

TX9D

CSRC : chọn nguồn xung clock (chỉ dùng cho chế độ đồng bộ) 1= chế độ chủ (tạo xung clock từ bộ phát xung BRG). 0= lấy mẫu dữ liệu ở giữa bit TX9 : Chọn khung truyền 8 bit hay 9 bit

1= khung 9 bit (1-8-1-1) 0= khung 8 bit (1-8-1)

TXEN : cho phép truyền

1= cho phép 0= cấm

SYNC : chọn chế độ đồng bộ hay bất đồng bộ

1= chế độ đồng bộ 0= chế độ bất đồng bộ

©2009, CE Department 34

dce

2009

Thanh ghi TXSTA (tt.)

CSRC

TX9

TXEN

SYNC

-

BRGH TRMT

TX9D

BRGH : chọn tốc độ truyền nhận cao hay thấp (chỉ dùng cho chế độ bất đồng bộ)

1= tốc độ cao 0= tốc độ thấp

TRMT : trạng thái thanh ghi dịch truyền (TSR)

1= TSR rỗng 0= TSR chưa rỗng

TX9D : bit dữ liệu truyền thứ 9 (dùng cho chế độ 9 bit), có thể là bit phân biệt dữ liệu/địa chỉ hay bit kiểm tra chẳn lẻ.

©2009, CE Department 35

dce

2009

Thanh ghi RCSTA

SPEN

RX9

SREN CREN ADDEN FERR OERR

RX9D

SPEN : cho phép cổng nối tiếp

1= cho phép cổng giao tiếp nối tiếp. 0= cấm (mặc định sau Reset).

RX9 : Chọn khung nhận (1= khung 9 bit, 0= khung 8 bit) SREN : cho phép nhận đơn (chế độ đồng bộ chủ)

1= cho phép nhận 1 ký tự 0= cấm

CREN : cho phép nhận liên tục

Chế độ bất đồng bộ

1= cho phép bộ nhận 0= cấm Chế độ đồng bộ

1= cho phép nhận liên tục 0= cấm

©2009, CE Department 36

dce

2009

Thanh ghi RCSTA (tt.)

SPEN

RX9

SREN CREN ADDEN FERR OERR

RX9D

ADDEN : cho phép phát hiện địa chỉ (chỉ dùng trong chế độ đồng bộ 9 bit)

1= cho phép phát hiện địa chỉ, cho phép ngắt quãng. 0= cấm (mặc định sau Reset).

FERR : lỗi sai về khung dữ liệu OERR : lỗi tràn ký tự

1= lỗi 0= cấm

RX9D : bit dữ liệu nhận thứ 9.

©2009, CE Department 37

dce

2009

Bộ phát xung truyền nhận BRG

Xung clock dùng trong giao tiếp nối tiếp được tạo ra bởi bộ tạo xung BRG (Baud rate generator). Số đếm nạp vào thanh ghi SPBRG được tính theo công thức sau :

Ví dụ : tính số đếm cho tốc độ 9600 với FOCS=16 MHz, BRGH=0, SYNC=0 X = ((FOSC/tốc độ)/64) - 1 = ((16000000/9600)/64) - 1 = 25.042 X ≈ 25 tính ngược lại tốc độ ứng với số đếm 25, ta có 9615. Như vậy, sai số giữa tốc độ thực và tốc độ mong muốn là 0.16%.

©2009, CE Department 38

dce

2009

Bảng số đếm tham khảo

©2009, CE Department 39

dce

2009

Lập trình chế độ truyền bất đồng bộ

Khởi động SPBRG với số đếm tra bảng tốc độ. Cho bit SYNC=0 và bit SPEN=1. Nếu dùng ngắt quãng, cho bit TXIE=1. Nếu dùng 9 bit dữ liệu, cho bit TX9=1. Cho bit TXEN=1 và bit TXIF=1. Nếu cần, nạp bit TX9D. Nạp dữ liệu vào thanh ghi TXREG. Nếu có sử dụng ngắt quãng, chú ý cho phép ngắt (GIE và PEIE).

©2009, CE Department 40

dce

2009

Lập trình chế độ nhận bất đồng bộ

Khởi động SPBRG với số đếm tra bảng tốc độ. Cho bit SYNC=0 và bit SPEN=1. Nếu dùng ngắt quãng, cho bit TXIE=1. Nếu dùng 9 bit dữ liệu, cho bit RX9=1. Cho bit CREN=1. Đọc RCSTA để lấy bit 9 và kiểm tra lỗi. Nhập dữ liệu từ thanh ghi RCREG. Nếu có lỗi, tiến hành xóa lỗi. Nếu có sử dụng ngắt quãng, chú ý cho phép ngắt (GIE và PEIE).

©2009, CE Department 41