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