Upload
yen-thanh-thanh
View
40
Download
0
Embed Size (px)
Citation preview
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
BÁO CÁO THỰC TẬP
ĐỀ TÀI : Tìm hiểu về truyền thông nối tiếp trong vi điều khiển
pic18f4520 và thiết kế modul thí nghiệm.
I. Tổng quan về vi điều khiển pic18f4520
Bộ vi điều khiển ghi tắt là Micro-controller là mạch tích hợp trên một chip có
thể lập trình được, dùng để điều khiển hoạt động của hệ thống. Theo các tập lệnh
của người lập trình, bộ vi điêu khiển tiến hành đọc, lưu trữ thông tin, xử lý thông
tin, đo thời gian và tiến hành đóng mở một cơ cấu nào đó .
Trong các thiết bị điện và điện tử các bộ vi điều khiển điều khiển hoạt động của ti
vi, máy giặt, đầu đọc lase, lò vi ba, điện thoại …Trong hệ thống sản xuất tự động,
bộ vi điều khiển sử dụng trong robot, các hệ thống đo lường giám sát .Các hệ thống
càng thông minh thì vai trò của vi điều khiển ngày càng quan trọng. Hiện nay trên
thị trường có rất nhiều họ vi điều khiển như: 6811 của Motorola, 8051 của Intel, Z8
của Zilog, PIC của Microchip Technology …
Trong đề tài này nghiên cứu về pic18f4520 vì nó có nhiều ưu điểm hơn các loại vi
điều khiển các như : ADC 10 BÍT, PWM 10 BÍT, EEPROM 256 BYTE,
COMPARATER, …ngoài ra nó còn được các trường đại học trên thế giới đặc biệt
là ở các nước Châu Âu hầu hết xem PIC là 1 môn học trong bộ môn vi diều khiển
nói vậy các bạn cũng thấy sự phổ biến rộng rãi của nó. Ngoài ra PIC còn được rất
nhiều nhà sản xuat phần mềm tạo ra các ngôn ngữ hổ trợ cho việc lập trình ngoài
ngôn ngữ Asembly như :MPLAB, CCSC, HTPIC, MIRKROBASIC,…
Hiện nay có khá nhiều dòng PIC và có rất nhiều khác biệt về phần cứng, nhưng
chúng ta có thể điểm qua một vài nét như sau :
8/16 bít CPU, xây dựng theo kiến trúc trên kiến trúc Harvard sửa đổi, với tập
lệnh rút gọn (do vậy PIC thuộc loại RISC).
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
Flash và Rom có thể tuỳ chọn 256 byte đến 256 kbybe
Các cổng xuất/nhập (mức lôgic thường từ 0v đến 5v, ứng với mức logic 0 và
1)
8/16 bít timer
Các chuẩn giao tiếp ngoại vi nối tiếp đồng bộ/ không đồng bộ
Bộ chuyển đổi ADC
Bộ so sánh điện áp
MSSP Pripheral dùng cho các giao tiếp I2C, SPI
Bộ nhớ nội EEPROM - có thể ghi/ xoá lên tới hàng triệu lần
Modul điều khiển động cơ, đọc encoder
Hỗ trợ giao tiếp USB
Hỗ trợ điều khiển Ethernet
Hỗ trợ giao tiếp CAN
Hỗ trợ giao tiếp LIN
Hỗ trợ giao tiếp IRDA
DSP những tính năng xử lý tín hiệu số
1. Sơ đồ chân vi điều khiển pic18f4520
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
2. Các thông số về vi điều khiển pic18f4520
CPU tốc độ cao có 75 cấu trúc lệnh, nếu được cho phép có thể kéo dài đến
83 cấu trúc lệnh.
Hầu hết các cấu trúc lệnh chỉ mất một chu kỳ máy, ngoại trừ lệnh rẽ nhánh
chương trình mất hai chu kỳ máy
Tốc độ làm việc: xung clock đến 40MHz, tốc độ thực thi lệnh 125ns
Bộ nhớ chương trình ( flash program memory) là 32kbyte
Bộ nhớ dữ liệu SRAM là 1536 byte
Bộ nhớ dữ liệu EEPROM là 256 byte
5 port Vào hoặc ra
4 bộ timer
1 capture/compare/PWM modules
1 enhanced capture/ compare/PWM modules
Giao tiếp nối tiếp : MSSP, enhanced USART.
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
Cổng giao tiếp song song.
13 bộ Analog to Digital module 10 bít
POR,BOR
Bên cạnh đó là một vài đặc tính khác của vi điều khiển như:
+ Bộ nhớ Flash có khả năng ghi xoá được 100.000 lần.
+ Bộ nhớ EEPROM với khả năng ghi xoá được 1.000.000 lần.
+ Flash/Dữ liệu bộ nhớ EEPROM có thể lưu trữ hàng 100 năm.
+ Khả năng tự nạp chương trình với sự điều khiển của phần mềm.
+ Watchdog timer với bộ dao động trong.
+ Chức năng bảo mật mã chương trình .
+ Chế độ SLEEP.
+ Có thể hoạt động với nhiều dạng Oscillator khác nhau.
3. Sơ đồ khối của vi điều khiển pic18f4520
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
4. Sơ đồ khối bộ nhớ dữ liệu pic18f4520
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
II. Truyền thông nối tiếp
1. giới thiệu
CHủ SYNCHRONOUS SERIAL PORT (MSSP) MODULE
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
- SPI
- I2C
ENHANCED UNIVERSAL SYNCHRONOUS RECEIVER RANSMITTER
(EUSART)
2. Tổng quan về khối MSSP
MSSP là khối giao diện đồng bộ nối tiếp, được sử dụng để giao tiếp với các
thiết bị ngoại vi khác hoặc các vi điều khiển khác. Các thiết bị ngoại vi như là
EFPROM, thanh ghi dịch, điều khiển hiện thị, các khối chuyển đổi A/D, . . .
Các chế độ hoạt động của MSSP :
+ Chế độ SPI
+ Chế độ I2C
Trong chế độ I2C phần cứng đã hỗ trợ các chế độ sau :
+ Chế độ chủ.
+ Chế độ đa chủ.
+ Chế độ tớ.
Thanh ghi điều khiển
Khối MSSP có 3 thanh ghi liên quan đến đó là : thanh ghi trạng thái
(SSPSTAT), và 2 thanh ghi điều khiển (SSPCON1 và SSPCON2 ). Thiết lập các
thanh ghi để xác định chế độ làm việc của khối MSSP là SPI hoặc I2C.
2.1 SPI
2.1.1 Giới thiệu về giao tiếp SPI
Chế độ SPI cho phép 8 bít dữ liệu được truyền và nhận đồng thời. Tất cả 4
chế độ của khối SPI đều được hỗ trợ. Có 3 chân điển hình cho chuẩn giao tiếp này :
+ Ngõ ra dữ liệu dạng nối tiếp RC5/SDO.
+ Ngõ vào dữ liệu dạng nối tiếp RC4/SDI/SDA.
+ xung đồng bộ nối tiếp RC3/SCK/SCL.
Trong chế độ tớ chân thứ 4 có thể được sử dụng để điều khiển đó là : Chân chọn
đối tượng giao tiếp : RA5/AN4/ /HLVDIN/C2OUT.
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
Hình 1:
Biểu diễn sơ đồ khối của khối MSSP khi điều khiển trong khối SPI
2.1.2 Khởi tạo chế độ SPI
Khi khởi tạo chế độ SPI ta cần thiết đặt cho các bít SSPCON<5:0> và
SSPSTAT<7:6> để cho phép các chế độ hoạt động và các đặc tính trong chế độ
SPI, đó là :
+ Chế độ chủ
+ Chế độ tớ
+ Cực tính xung clock
+ Pha lấy mẫu dữ liệu vào
+ Sườn xung clock
+ Xung nhip ( chỉ có trong chế độ chủ )
+ Lựa chọn chế độ tớ (chỉ có trong chế độ tớ )
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
MSSP bao gồm thanh ghi dịch truyền nhận (SSPSR) và thanh ghi đệm
(SSPBUF) , SSPSR dùng để dịch dữ liệu vào và ra, đầu tiên là bít msb. Khi quá
trình nhận dữ liệu sẵn sàng, dữ liệu sẽ được ghi vào SSPSR sau đó dữ liệu sẽ được
giữ ở SSPBUF. Khi phát hiền bộ đệm đầy cờ BF (SSPSTAT<0>) và bít cho phép
ngắt được đặt lên. Bộ đệm dữ liệu 2 lớp cho phép nhận tiếp 1 byte dữ liệu trước khi
đọc. bất kỳ sự ghi nào tới thanh ghi SSPBUF trong thời gian truyền nhận dữ liệu sẽ
bị lờ đi và bít phát hiện xung đột WCOL (SSPCON1<7>) sẽ được đặt lên. Bít
WCOL phải được xóa bằng phần mềm để xác định việc ghi tiếp theo lên thanh ghi
SSPBUF. SSPSR không thể đọc hoặc ghi trực tiếp mà chỉ có thể truy cập thông
qua thanh ghi SSPBUF.
2.1.3 Thanh ghi
Khối MSSP có 4 thanh ghi điều khiển khi hoạt động ở chế độ SPI :
+ Thanh ghi điều khiển 1 ( SSPCON1)
+ Thanh ghi trạng thái ( SSPSTAT )
+ Thanh ghi đệm truyền hoặc nhận (SSPBUF)
+ Thanh ghi dịch dữ liệu ( SSPSR) ( không trực tiếp điều khiển được )
SSPCON1 và SSPSTAT là thanh ghi điều khiển và thanh ghi trạng thái trong chế
độ SPI. Thanh ghi SSPCON1 có thể đọc và ghi. 6 bít dưới của thanh ghi SSPSTAT
chỉ có thể đọc, 2 bít trên có thể đọc và ghi.
Hình 2 SSPSTAT : Thanh ghi trạng thái (chế độ SPI )
Bít 7 SMP : bít lấy mẫu
SPI chế độ chủ :
1= lấy mẫu dữ liệu vào thời điểm cuối của dữ liệu ra.
0= lấy mẫu dữ liệu vào thời điểm giữa của dữ liệu ra.
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
SPI chế độ tớ :
SMP phải được xóa khi SPI được sử dụng ở chế độ tớ.
Bít 6 CKE : bít chọn xung clock
1= Truyền khi xuất hiện sự chuyển tiếp từ tích cực đến trạng thái nghỉ.
0= Truyền khi xuất hiện sự chuyển tiếp từ trạng thái nghỉ lên tích cực.
Bít 5 D/ : Dữ liệu hoặc địa chỉ
Chỉ sử dụng trong chế độ I2C .
Bít 4 P : bít stop
Chỉ sử dụng trong chế độ I2C.
Bít 3 S : bít bắt đầu
Chỉ sử dụng trong chế độ I2C.
Bít 2 R/ : đọc hoặc ghi thông tin
Chỉ sử dụng trong chế độ I2C.
Bít 1 UA : bít cập nhật địa chỉ
Chỉ sử dụng trong chế độ I2C.
Bít 0 BF : bít trạng thái báo đầy bộ đệm ( duy nhất ở chế độ truyền )
1= Truyền hoàn tất ( SSPBUF đầy )
0= Truyền không hoàn tất ( SSPBUF rỗng)
Hình 3 SSPCON1 : Thanh ghi điều khiển khối MSSP (trong chế độ SPI)
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
Bít 7 WCOL : bít phát hiện xung đột khi ghi
1= Thanh ghi SSPxBUF được ghi trong khi vẫn có sự truyền từ trước.
0= không có xung đột.
Bít 6 SSPOV : bít cờ tràn nhận
SPI chế độ tớ :
1= 1 byte được nhận trong khi dữ liệu cũ vẫn còn trong thanh ghi SSPBUF.
Trong trường hợp này dữ liệu trong SSPSR bị ghi đè lên. Tràn chỉ xuất
hiện duy nhất trong chế độ tớ. Người sử dụng phải đọc SSPBUF để dữ liệu
truyền là duy nhất, tránh cờ tràn được đặt lên.( cờ tràn phải xóa bằng phần
mềm).
0= không có sự tràn xẩy ra.
Bít 5 SSPEN : bít cho phép truyền thông nối tiếp
1= cho phép cổng nối tiếp và thiết lập SCK, SDO, SDI, và như là các
chân của cổng nối tiếp.
0= không cho phép cổng nối tiếp và thiết lập các chân như là chân vào hoặc
ra.
Bít 4 CKP : bít chọn cực tính xung clock.
1= trạng thái nghỉ khi xung ở mức cao.
0= trạng thái nghỉ khi xung ở mức thấp.
Bít 3 SSPM3 : SSPM0 : các bít chọn chế độ
0101= SPI chế độ tớ (SCK là chân xung clock, không cho phép hoạt
động, sử dụng như chân vào hoặc ra ).
0100= SPI chế độ tớ (SCK là chân xung clock, cho phép hoạt động).
0011 : SPI chế độ chủ ( xung clock = đầu ra TMR2/2 ).
0010 : SPI chế độ chủ (xung clock = Fosc/64).
0001 : SPI chế độ chủ ( xung clock =Fosc /16).
0000 : SPI chế độ chủ (xung clock =Fosc/4).
2.1.4 Cho phép SPI vào hoặc ra
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
Thiết lập thanh ghi SSPCON và bít SSPEN ( SSPCON1<5>) được đặt lên để
cho phép cổng nối tiếp. Việc thiết lập này cho phép SDI, SDO, SCK, là các chân
của cổng nối tiếp. Xác định hướng dữ liệu của các chân này được thiết lập trong
thanh ghi trisc :
+ SDI : tự động điều khiển bởi khối SPI
+ SDO : xóa bít thứ 5 trong thanh ghi TRISC
+ SCK : (chế độ chủ ) phải xóa bít thứ 3 trong thanh ghi TRISC
+ SCK : (chế độ tớ ) phải đặt bít thứ 3 trong thanh ghi TRISC.
+ : phải đặt bít thứ 5 trong thanh ghi TRISC
Sơ đồ kết nối điển hình :
Hinh 4
sơ đồ kết nối SPI chủ hoặc tớ
Hình 4 biểu diễn sơ đồ kết nối giữa 2 vi điều khiển. Vi điều khiển chủ (processor
1) khởi tạo quá trình truyền dữ liệu bằng việc gửi tín hiệu xung đồng bộ SCK. Dữ
liệu sẽ được dịch từ cả hai thanh ghi SSPSR đưa ra ngoài nếu có một cạnh của
xung đồng bộ tác động và ngưng dịch khi có tác động của cạnh còn lại. Cả hai khối
chủ và tớ nên được ấn định chung các quy tắc tác động của xung clock đồng bộ để
dữ liệu có thể dịch chuyển đồng thời.
2.1.5 Chế độ chủ
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
Vi điều khiển chủ có thể khởi tạo quá trình truyền dữ liệu ở bất cứ thời điểm
nào bởi vì nó điều khiển xung đồng bộ SCK. Trong chế độ chủ, dữ liệu được
truyền/nhận ngay khi thanh ghi SSPSR được ghi lên. Nếu chỉ cần nhận dữ liệu, lúc
này chân SDO không có tác dụng ta có thể ấn định nó là ngõ vào ( đặt bít
TRISC<5>), dữ liệu sẽ được dịch vào thanh ghi SSPSR theo một tốc độ được định
sẵn cho xung clock. Sau khi nhận được 1 byte dữ liệu hoàn chỉnh, byte dữ liệu sẽ
được đưa vào thanh ghi SSPBUF, bít BF được đặt và ngắt xẩy ra.
Trong chế độ chủ, tốc độ của xung đồng bộ clock được chọn :
+ Fosc/4
+ Fosc/16
+ Fosc/64
+ Đầu ra timer2/2
Điều này cho phép tốc độ tối đa truyền dữ liệu ở 40 MHZ hoặc 10000 Mbps.
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
Hình 5
Giản đồ xung của chế độ chủ và các tác động của các bít điều khiển
2.1.6 Chế độ tớ
Trong chế độ này, dữ liệu được truyền và nhận khi có xung đồng bộ bên
ngoài xuất hiện ở chân SCK. Khi nhận đủ 8 bít thì cờ ngắt SSPIF được đặt lên.
Trước khi cho phép khối SPI ở chế độ tớ thì đường xung clock phải ở trạng thái
nghỉ (idle), ta có thể quan sát đường này bằng việc quan sát quá trình đọc tại chân
SCK. Trạng thái idle được xác định bởi bít CKP ( SSPCON1<4> ).
Chế độ này hoạt động ngay cả khi vi điều khiển đang ở chế độ ngủ. Ngắt truyền
nhận cho phép “đánh thức” vi điều khiển
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
Hình 6
Giản đồ xung chuẩn giao tiếp SPI ( chế độ tớ )
2.1.7 Tóm lược
+ Thanh ghi INTCON : Chứa bít cho phép ngắt toàn cục (GIE VÀ PEIE )
+ Thanh ghi PIR1 : Chứa bít SSPIF
+ Thanh ghi PIE1 : Chứa bít SSPIE
+ Thanh ghi IPR1 : Chứa bít SSPIP
+ Thanh ghi TRISA : Điều khiển xuất nhập chân
RA4/AN4/ /HLVDIN/C2OUT
+ Thanh ghi TRISC : Điều khiển xuất nhập PORTC.
+ Thanh ghi SSPBUF : Thanh ghi đệm dữ liệu
+ Thanh ghi SSPCON1 : Điều khiển chuẩn giao tiếp SPI
+ Thanh ghi SSPSTAT : Chứa các bít chỉ thị trạng thái chuẩn giao tiếp SPI
2.2 I2C
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
2.2.1 Giới thiệu về giao tiếp I2C
Đây là một chế độ khác của khối MSSP. Chuẩn giao tiếp I2C cũng có
Chế độ chủ , tớ và cũng được kết nối với ngắt. Chuẩn giao tiếp I2C sử dụng 2 chân
để truyền nhận dữ liệu :
+ RC3/SCK/SCL : Chân truyền dẫn nối tiếp xung clock
+ RC4/SDI/SDA : Chân truyền dẫn nối tiếp dữ liệu
Hình 7 :
Sơ đồ khối MSSP ( Chế độ I2C )
2.2.2 Các chế độ hoạt động
Khối MSSP được cho phép bởi bít SSPEN (SSPCON1<5>). Giao tiếp I2C
có nhiều chế độ hoạt động và được điều khiển bởi các bít SSPCON1<3:0> bao gồm
:
+ I2C chế độ chủ, xung clock = (Fosc/4 )*(SSPADD+1).
+ I2C chế độ tớ, 7 bít địa chỉ.
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
+ I2C chế độ tớ, 10 bít địa chỉ.
+ I2C chế độ tớ, 7 bít địa chỉ, cho phép ngắt khi phát hiện bít start và stop .
+ I2C chế độ tớ, 10 bít địa chỉ, cho phép ngắt khi phát hiện bít start và stop .
+ I2C điều khiển chế độ chủ bằng phần mềm, chế độ tớ thì không có chế độ này.
Lựa chọn chế độ I2C và đặt bít SSPEN, các chân SCL và SDA sẽ ở trạng thái cực
thu hở. Do đó phải kéo điện trở ngoài, đồng thời cần thiết đặt các giá trị phù hợp
cho các bít trong thanh ghi TRISC đối với các chân SDA và SCL.
2.2.3 Thanh ghi
Khối MSSP có 6 thanh ghi để điều khiển chế độ I2C. Các thanh ghi đó là :
+ Thanh ghi điều khiển MSSP 1 (SSPCON1)
+ Thanh ghi điều khiển MSSP 2 (SSPCON2)
+ Thanh ghi trạng thái MSSP (SSPSTAT)
+ Thanh ghi đệm truyền nhận nối tiếp (SSPBUF)
+ Thanh ghi dịch MSSP (SSPSR) (không trưc tiếp truy cập).
+ Thanh ghi địa chỉ MSSP (SSPADD)
Các thanh ghi điều khiển SSPCON1 và SSPCON2 có thể đọc và ghi. Thanh ghi
SSPSTAT chỉ cho phép đọc và ghi ở 2 bít đầu, 6 bít còn lại chỉ cho phép đọc.
Thanh ghi SSPBUF chứa dữ liệu sẽ được truyền đi hoặc nhận được và đóng vai trò
như một thanh ghi đệm cho thanh ghi dịch dữ liệu SSPSR. Thanh ghi SSPSR
không thể truy xuất trực tiếp được, muốn truy xuất nó ta phải thông qua thanh ghi
SSPBUF.
Thanh ghi SSPADD chứa địa chỉ của thiết bị ngoại vi cần truy xuất dữ liệu của I2C
khi hoạt động ở chế độ tớ. Khi hoạt động ở chế độ chủ, thanh ghi SSPADD chứa
giá trị tạo ra tốc độ baud cho xung clock dùng để truyền nhận dữ liệu.
Trong quá trình nhận dữ liệu, cả 2 thanh ghi SSPSR và SSPBUF tạo thành bộ đệm
nhận dữ liệu 2 lớp. khi SSPSR thực hiện nhận 1 byte hoàn tất, nó sẽ ghi tới thanh
ghi SSPBUF và cờ ngắt SSPIF được đặt.
Trong quá trình truyền, chúng không đóng vai trò là bộ đệm dữ liệu 2 lớp. Khi ghi
tới SSPBUF lúc này sẽ ghi tới cả SSPBUF và SSPSR.
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
Hình 8 SSPSTAT : Thanh ghi trạng thái MSSP(chế độ I2C)
Bít 7 SMP : bít điều khiển tốc độ
Trong chế độ chủ hoặc chế độ tớ :
1= không điều khiển tốc độ, để chế độ tốc độ chuẩn (100 KHZ và 1MHZ ).
0= cho phép điều khiển tốc độ, tốc độ cao (400 KHZ)
Bít 6 CKE : bít chọn SMBUS
Trong chế độ chủ hoặc chế độ tớ :
1= cho phép đầu vào SMBUS
0= không cho phép đầu vào SMBUS
Bít 5 D/ bít dữ liệu hoặc bít địa chỉ
Trong chế độ chủ :
Dùng để dự chữ.
Trong chế độ tớ :
1= byte cuối của quá trình truyền hoặc nhận là dữ liệu.
0= byte cuối của quá trình truyền hoặc nhận là địa chỉ.
Bít 4 P : bít stop
1= xác định bít stop
0= không xác định bít stop
Bít 3 S : bít start
1= phát hiện bít start
0= không phát hiện bít start
Bít 2 R/ : đọc hoặc ghi thông tin
Trong chế độ tớ :
1= đọc.
0= ghi.
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
Trong chế độ chủ :
1= cho phép truyền.
0= không cho phép truyền.
Bít 1 UA : bít cập nhật địa chỉ ( chế độ tớ 10 bít )
1= cập nhật địa chỉ vào thanh ghi SSPADD
0= không cập nhật địa chỉ
Bít 0 BF : bít báo trạng thái đầy bộ đệm
Trong chế độ truyền :
1= SSPBUF đầy.
0= SSPBUF rỗng.
Trong chế độ nhận :
1= SSPBUF đầy ( không bao gồm và bít stop ).
0= SSPBUF rỗng ( không bao gồm và bít stop ).
Hình 9 SSPCON1 : Thanh ghi điều khiển 1 (chế độ I2C)
Bít 7 WCOL : bít phát hiện xung đột lúc ghi
Truyền trong chế độ chủ :
1= dữ liệu truyền được đưa vào thanh ghi SSPBUF trong khi chế độ truyền
dữ liệu của I2C chưa sẵn sàng.
0= không có sự xung đột.
Truyền trong chế độ tớ :
1= dữ liệu mới được đưa vào thanh ghi SSPBUF trong khi chưa truyền
xong dữ liệu cũ.
0= không có sự xung đột.
Trong chế độ nhận (chế độ chủ hoặc tớ ) :
Không sử dụng đến bít này.
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
Bít 6 SSPOV : bít cờ tràn nhận
Chế độ nhận :
1= 1 byte dữ liệu mới được nhận trong khi dữ liệu cũ vẫn còn trong thanh
ghi SSPBUF.
0= không có tràn.
Chế độ truyền :
Không sử dụng đến bít này.
Bít 5 SSPEN : bít cho phép cổng nối tiếp
1= cho phép cổng nối tiếp và thiết lập SDA và SCL là các chân của cổng
nối tiếp.
0= không cho phép cổng nối tiếp và thiết lập chúng như các chân vào ra.
Bít 4 CKP : SCK : bít điều khiển tác động
Chế độ tớ :
1= cho xung clock tác động
0= giữ xung clock ở mức thấp (để đảm bảo thời gian thiết lập dữ liệu)
Chế độ chủ :
Không sử dụng trong chế độ này.
Bít 3-0 SSPM3 : SSPM0 : các bít lựa chọn chế độ hoạt động cổng nối tiếp
1111 : I2C chế độ tớ, 10 bít địa chỉ, cho phép ngắt khi phát hiện bít start và
bít stop.
1110 : I2C chế độ tớ, 7 bít địa chỉ, cho phép ngắt khi phát hiện bít start và
bít stop.
1011 : dùng phần mềm điều khiển chế độ chủ (chế độ tớ không dùng)
1000 : I2C chế độ chủ, clock = Fosc/(4*(SSPADD+1))
0111 : I2C chế độ tớ , 10 bít địa chỉ.
0110 : I2C chế độ tớ, 7 bít địa chỉ.
Hình 10 SSPCON2 : Thanh ghi điều khiển MSSP 2(chế độ I2C)
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
Bít 7 GCEN : bít cho phép gọi chung. (duy nhất trong chế độ tớ )
1= cho phép ngắt khi địa chỉ 0000h được nhận vào trong SSPSR.
0= không cho phép gọi địa chỉ trên.
Bít 6 ACKSTAT : bít trạng thái (duy nhất trong chế độ chủ : truyền
truyền dữ liệu )
1= chưa nhận được xung từ tớ
0= nhận được xung từ tớ.
Bít 5 ACKDT : bít dữ liệu (chỉ có trong chế độ chủ : nhận dữ liệu )
1= không có xung
0= có xung
Bít 4 ACKEN : bít cho phép xung ACK.(chỉ có trong chế độ chủ: nhận dữ liệu )
1= khởi tạo xung trên các chân SDA và SCL. Bít dữ liệu truyền
ACKDT ). Tự động xóa bằng phần cứng.
0= không cho phép xung ACK.
Bít 3 RCEN : bít cho phép nhận (duy nhất trong chế độ chủ )
1= cho phép nhận dữ liệu.
0= không cho phép nhận dữ liệu.
Bít 2 PEN : bít cho phép điều kiện stop.
1= khởi tạo điều kiện stop trên các chân SDA và SCL. Tự động xóa bằng
phần cứng.
0= không cho phép điều kiện stop.
Bít 1 RSEN : bít cho phép điều kiện start (duy nhất trong chế độ chủ )
1= khởi tạo điều kiện start trên các chân SDA và SCL. Tự động xóa bằng
phần cứng.
0= không cho phép điều kiện start.
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
Bít 0 SEN : bít cho phép điều kiện start hoặc cho phép khóa.
Chế độ chủ :
1= khởi tạo điều kiện start trên các chân SDA và SCL. Tự động xóa bằng
phần cứng.
0= không cho phép điều kiện start.
Chế độ tớ :
1= cho phép khóa xung clock từ chế độ tớ truyền và nhận.
0= không cho phép khóa xung clock.
2.2.4 Chế độ chủ
Chế độ chủ được cho phép bởi việc cài đặt hoặc xóa các bít SSPM trong
thanh ghi SSPCON1 và cài đặt bít SSPEN. Trong chế độ chủ các chân SDA và
SCL được điều khiển bởi với phần cứng MSSP.
Hoạt động của chế độ chủ được hỗ trợ bởi việc phát sinh các ngắt khi phát hiện bít
start và stop. Bít start và stop được xóa khi reset hoặc khi khối MSSP không hoạt
động. Việc điều khiển giao tiếp I2C có thể tiếp tục khi bít stop được đặt hoặc khi
bus rỗng với cả hai bít start và stop đều xóa.
Điều khiển chế độ chủ bằng phần mềm người sử dụng ghi mã điều khiển tất cả
giao tiếp bên trong 2 bít start và stop.
1 chế độ chủ được cho phép, người sử dụng phải có 6 thao tác:
+ Có điều kiện bít start trên chân SDA và SCL.
+ Điều kiện lặp lại bít start trên chân SDA và SCL.
+ Thanh ghi SSPBUF được khởi tạo truyền dữ liệu hoặc địa chỉ.
+ Thiết lập cổng giao tiếp I2C để nhận dữ liệu.
+ Xuất hiện xung khi kết thúc nhận 1 byte dữ liệu.
+ Xuất hiện bít stop trên chân SDA và SCL.
Các sự kiện sau sẽ gây ra ngắt MSSP : Bít cờ và SSPIF được đặt
+ Xuất hiện bít start.
+ Xuất hiện bít stop.
+ Byte dữ liệu chuyển đổi truyền/nhận.
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
+ Truyền xung .
+Lặp lại bít start.
Hình 11
Sơ đồ khối MSSP (I2C chế độ chủ )
2.2.4.1 Hoạt động của chế độ chủ:
I2C chủ đóng vai trò tích cực trong quá trình giao tiếp và điều khiển các I2C
tớ thông qua việc chủ động tạo ra các xung giao tiếp và các điều kiện start, stop khi
truyền nhận dữ liệu. Một byte dữ liệu có thể được bắt đầu bằng điều kiện start, kết
thúc bằng điều kiện stop hoặc bắt đầu và kết thúc với cùng một điều kiện khởi động
lặp lai (repeated start ).
Quá trình truyền trong chế độ chủ, dữ liệu nối tiếp được xuất ra tại chân SDA trong
khi SCL xuất ra xung clock đồng bộ nối tiếp. Byte đầu tiên truyền đi sẽ chứa địa
chỉ của thiết bị nhận (7 bít) và 1 bít R/ . Trong trường hợp này R/ sẽ có mức
logic là 0, dữ liệu 8 bít thì truyền 8 bít trong 1 lần, sau đó mỗi byte tiếp theo được
truyền và 1 bít được nhận lại từ tớ khi tớ nhận được đủ 1 byte. Điều kiện start
và stop được xuất ra chỉ ra quá trình bắt đầu và kết thúc của 1 khung truyền nối
tiếp.
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
Quá nhận dữ liệu trong chế độ chủ, byte đầu tiên được truyền chứa địa chỉ của thiết
bị tớ (7 bít ) và 1 bít R/ . Trong trường hợp này bít R/ sẽ có giá trị la 1. Vời giá
trị của bít R/ là 1 thì thiết bị tớ hiểu rằng nó sẽ nhận dữ liệu. Dữ liệu nối tiếp
được nhận tại chân SDA, trong khi đầu ra xung clock tại chân SCL. 8 bít dữ liệu
được nhận trong 1 lần, sau mỗi byte được nhận thì 1 bít được truyền, điều
kiện start và stop được xuất ra chỉ ra quá trình bắt đầu và kết thúc của 1 khung
truyền nối tiếp.
Tốc độ người sử dụng trong chế độ I2C để tần số của xung clock là 100 KHZ,
400KHZ hoặc 1MHZ
1 quá trình truyền điển hình như sau :
+ Sử dụng điều kiện start bằng việc cài đặt bít SEN (SSPCON2<0> ) cho phép
Start.
+ Đặt bít SSPIF, khối MSSP sẽ chờ sự xuất hiện của bít start trước khi có bất kỳ
thao tác nào xẩy ra.
+ Người sử dụng sẽ đưa địa chỉ của tớ vào thanh ghi SSPBUF để truyền.
+ Địa chỉ được dịch ra ngoài tại chân SDA.
+ Khối MSSP sẽ nhận bít từ thiết bị tớ và ghi giá trị đó vào trong thanh ghi
SSPCON2 (SSPCON2<6>).
+ Khối MSSP sẽ phát sinh 1 ngắt ở xung thứ 9 bằng việc cài đặt bít SSPIF.
+ Người sử dụng cập nhật 8 bít dữ liệu trong thanh ghi SSPBUF.
+ Dữ liệu được dịch ra ngoài tại chân SDA cho đến khi 8 bít được truyền xong.
+ Khối MSSP sẽ nhận bít từ thiết bị tớ và ghi giá trị đó vào trong thanh ghi
SSPCON2 (SSPCON2<6>).
+ Khối MSSP sẽ phát sinh 1 ngắt ở xung thứ 9 bằng việc cài đặt bít SSPIF.
+ Người sử dụng tạo ra 1 điều kiện stop bằng việc cài đặt bít PEN
(SPCON2<2>) cho phép stop.
+ Ngắt được sinh ra từ điều kiện stop thì hoàn tất 1 khung truyền nối tiếp.
2.2.4.2 Giao tiếp I2C chế độ chủ trong quá trình truyền dữ liệu
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
Quá trình truyền dữ liệu, xung clock sẽ được đưa tới chân SCL và dữ liệu
được đưa tới chân SDA. Byte đầu tiên là byte xác định địa chỉ, 7 bít dữ liệu hoặc 1
nửa của 10 bít địa chỉ được ghi tới thanh ghi SSPBUF. Điều này sẽ đặt bít cờ bộ
đệm đầy, bộ đếm tạo xung clock nối tiếp BRG bắt đầu đếm và bắt đầu truyền . Mỗi
bít địa chỉ hoặc dữ liệu sẽ được dịch ra qua chân SDA tại mỗi sườn xuống của xung
clock. Sau khi 8 bít được dịch hết ra ngoài. I2C chủ ngưng tác động lên chân SDA
để chờ tín hiệu từ I2C tớ ( tín hiệu xung ) . Tại cạnh xuống của xung clock thứ
9, I2C chủ sẽ lấy mẫu tín hiệu từ chân SDA để kiểm tra địa chỉ đã được I2C tớ
nhận dạng chưa. Trạng thái được đưa vào bít ACKSTAT (SSPCON2<6>).
Cũng tại thời điểm bít BF sẽ tự động được xóa, cờ ngắt SSPIF được đặt và BRG
tạm ngưng hoạt động cho tới khi dữ liệu hoặc địa chỉ tiếp theo được đưa vào thanh
ghi SSPBUF, dữ liệu hoặc địa chỉ tiếp tục được truyền đi tại cạnh xuống của xung
clock tiếp theo.
Bít cờ trạng thái BF :
Trong quá trình truyền, bít BF (SSPSTAT<0>) được đặt khi CPU ghi tới
SSPBUF và được xóa khi tất cả 8 bít được dịch hết ra ngoài.
Bít cờ trạng thái WCOL :
Nếu ghi tới thanh ghi SSPBUF khi đang truyền thì bít WCOL được đặt và
nội dung bộ đệm không thay đổi. Bít WCOL phải được xóa bằng phần mềm.
Bít cờ trạng thái ACKSTAT :
Trong quá trình truyền, bít ACKSTAT (SSPCON2<6>) được xóa khi thiết bị tớ
gửi một xung ( =0) và được đặt khi thiết bị tớ không gửi xung (
=1). Thiết bị tớ gửi 1 xung khi nhận đúng địa chỉ của nó hoặc khi nhận dữ
liệu.
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
Hình 12
Giản đồ xung I2C chế độ chủ trong quá trình truyền dữ liệu
(7 hoặc 10 bít địa chỉ)
2.2.4.3 Giao tiếp I2C chế độ chủ trong quá trình nhận dữ liệu
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
Quá trình nhận dữ liệu trong chế độ chủ được cho phép băng cách đặt bít cho phép
nhận RCEN (SSPCON2<3>). Cần chú ý là khối MSSP phải ở trạng thái nghỉ trước
khi bít RCEN được đặt hoặc bít RCEN sẽ được bỏ qua.
BRG bắt đầu đếm, dữ liệu sẽ được dịch vào trong I2C chủ tại mỗi cạnh xuống của
chân SCL. Sau sườn xuống của xung clock thứ 8, cờ cho phép nhận tự động được
xóa, giá trị trong thanh ghi SSPSR được cập nhật vào trong thanh ghi SSPBUF, bít
cờ BF và bít cờ SSPIF được đặt và BRG ngừng đếm, chân SCL được đưa xuống
mức thấp. Khi đó MSSP ở trạng thái nghỉ và chờ lệnh tiếp theo. Khi bộ đệm sẵn
sàng, bít cờ BF sẽ tự động được xóa, lúc này ta có thể gửi 1 xung bằng cách
cài đặt bít cho phép ACKEN(SSPCON2<4>).
Bít cờ trạng thái BF :
Trong quá trình truyền, bít BF được đặt khi 1 byte địa chỉ hoặc dữ liệu được
đưa vào trong thanh ghi SSPBUF từ SSPSR. Nó được xóa khi thanh ghi SSPBUF
được đọc.
Bít cờ trạng thái SSPOV :
Trong quá trình truyền, bí SSPBUF được đặt khi 8 bít được nhận vào trong
thanh ghi SSPSR và bít cờ BF được đặt từ quá trình nhận trước.
Bít cờ trạng thái WCOL :
Nếu ta ghi tới thanh ghi SSPBUF khi nhận đang hoạt động thì bít cờ WCOL
được đặt và nội dung bộ đệm không thay đổi.
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
Hình 13
Giản đồ xung I2C chế độ chủ trong quá trình truyền dữ liệu
(7 bít địa chỉ )
2.2.4.4 I2C Chế độ chủ tính toán điều kiện start
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
Khởi tạo điều kiện start, người sử dụng đặt bít SEN(SSPCON2<0>) cho
phép start. Nếu chân SDA và SCL lấy mẫu mức cao, tốc độ baud được cập nhật lai
và chứa trong thanh ghi SSPADD<6:0> và bắt đầu đếm. Nếu hai chân SDA và
SCL lấy mẫu mức cao và thời gian ra của tốc độ baud (Tbrg ), chân SDA xuống mức
thấp. Tại thời điểm SDA đưa xuống mức thấp trong khi SCL vẫn ở mức cao thỉ
điêu kiện start hình thành và bít S (SSPSTAT<3>) được đặt.
Trong trường hợp SCL và SDA ở trạng thái logic thấp hoặc trong quá trình điều
kiện start, chân SCL được đưa về trạng thái logic thấp trước khi chân SDA được
đưa về trạng thái logic thấp thì điều kiện start không được hình thành, cờ ngắt
BCLIF sẽ được đặt và I2C sẽ ở trạng thái nghỉ (IDLE).
Hình 14
Quá trình tạo bít start
2.2.4.5 Lặp lại điều kiện start
Để tạo điều kiện start lặp lại trong quá trình truyền dữ liệu, trước hết cần đặt
bít RSEN(SSPCON2<2>). Sau khi đặt bít RSEN, chân SCL được đưa xuống mức
logic thấp, chân SDA được đưa lên mức logic cao, BRG lấy giá trị từ thanh ghi
SSPADD vào để bắt đầu quá trình đếm. Sau khoảng thời gian TBRG chân SCL cũng
được đưa lên mức logic cao trong khoảng thời gian TBRG tiếp theo. Trong khoảng
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
thời gian TBRG kế tiếp , chân SDA lại được đưa xuống mức thấp trong khi SCL vẫn
được giữ ở mức logic cao. Tai thời điểm đó bít S (SSPSTAT<3>) được đặt để báo
hiệu điều kiện start được hình thành, bít RSEN tự động được xóa và cờ ngắt SSPIF
sẽ được đặt sau 1 khoảng thời gian TBRG nữa. Lúc này địa chỉ của I2C tớ có thể
đước đưa vào thanh ghi SSPBUF, sau đó chỉ việc đưa tiếp địa chỉ hoặc dữ liệu tiếp
theo vào thanh ghi SSPBUF mỗi khi nhận được tín hiệu từ I2C tớ, I2C chủ sẽ
tự động tạo tín hiệu lặp lại start cho quá trình truyền dữ liệu liên tục.
Hình 15
Giản đồ xung trong quá trình tạo điều kiện lặp lại bít start
2.2.5 Chế độ tớ
Trong chế độ tớ các chân SCL và SDA phải được thiết lập là đầu vào. Khối
MSSP sẽ ép trạng thái đầu vào thành trạng thái dữ liệu ra khi cần thiết (thiết bị tớ
truyền ).
Chế độ tớ luôn tồn tại 1 ngắt trên 1 địa chỉ phù hợp. Lựa chọn các bít có thể chọn
ngắt bít start và stop. I2C của vi điều khiển sẽ được điều khiển bởi một vi điều
khiển hoặc một thiết bị ngoại vi khác thông qua các địa chỉ. Khi địa chỉ này chỉ đến
vi điều khiển , thì tại thời điểm này và tại thời điểm dữ liệu truyền nhận xong sau
đó vi điều khiển sẽ tạo ra xung để báo hiệu kết thúc dữ liệu. Giá trị trong
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
thanh ghi SSPSR sẽ được đưa vào thanh ghi SSPBUF. Tuy nhiên xung sẽ
không được tạo ra nếu một trong các trường hợp sau :
+ Bít BF (SSPSTAT <0>) báo hiệu bộ đệm đầy, đã được đặt trước khi quá trình
truyền nhận xẩy ra.
+ Bít SSPOV(SSPCON2<6>) được đặt trước khi quá trình truyền nhận xẩy ra
Trong các trường hợp trên thanh ghi SSPSR sẽ không đưa giá trị vào trong thanh
ghi SSPBUF, nhưng bít SSPIF (PIR1<3>) được đặt. Để quá trình truyền nhận dữ
liệu được tiếp tục , cần đọc dữ liệu từ thanh ghi SSPBUF vào trước, khi đó bít BF
sẽ tự động được xóa , còn bít SSPOV phải xóa bằng phần mềm.
2.2.5.1 Định địa chỉ
Khi khối MSSP đã được cho phép, nó sẽ chờ sự xuất hiện của bít start. Theo
sau bít start là 8 bít được dịch vào trong thanh ghi SSPSR. Các bít đưa vào sẽ được
lấy mẫu tại cạnh lên của xung clock. Gíá trị của thanh ghi SSPSR được so sánh với
giá trị của thanh ghi SSPADD tại canh xuống của xung clock thứ 8. Nếu kết quả so
sánh bằng nhau, tức là I2C chủ chỉ định đối tượng giao tiếp là vi điều khiển đang ở
chế độ tớ. Bít BF và SSPOV sẽ được xóa về 0 và gây ra các sự kiện sau :
+ Giá trị thanh ghi SSPSR được cập nhật vào trong thanh ghi SSPBUF.
+ Bộ đệm đầy, cờ BF được đặt.
+ Một xung được tạo ra.
+ Cờ ngắt SSPIF được đặt (PIR1<3>) ( ngắt được tạo ra nếu cho phép ) tại cạnh
xuống của xung clock thứ 9.
Trong chế độ địa chỉ 10 bít, 2 byte địa chỉ cần được nhận vào bởi thiết bị tớ khi bít
R/ = 0 để so sánh. Byte đầu tiên có định dạng “11110A9A80” trong đó A9,A8 là
hai bít MSB của 10 bít địa chỉ. Byte thứ hai là 8 bít địa chỉ còn lại.
Quá trình nhận dạng địa chỉ của MSSP ở chế độ I2C, chế độ tớ 10 bít địa chỉ như
sau :
1 : Byte đầu tiên chứa 2 bít MSB của 10 bít địa chỉ được nhận trước, bít
SSPIF,BF và UA (SSPSTAT<1>) được đặt.
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
2 : Byte thứ hai chưa 8 bít địa chỉ thấp được cập nhật vào thanh ghi SSPBUF, bít
UA bị xóa.
3 : Đọc thanh ghi SSPBUF (bít BF bị xóa ), xóa cờ ngắt SSPIF.
4 : Nhận 8 bít địa chỉ thấp của byte thứ 2 , các bít SSPIF,BF và UA được đặt .
5 : Cập nhật vào thanh ghi SSPADD các bít ở byte đầu tiên. Nếu địa chỉ là đúng
xung clock ở chân SCL được khởi tạo và bít UA được đặt.
6 : Đọc thanh ghi SSPBUF (xóa bít BF) và bít cờ SSPIF bị xóa.
7 : Nhận tín hiệu start.
8 : Nhận byte địa chỉ cao , bít SSPIF và BF được đặt.
9 : Đọc thanh ghi SSPBUF(xóa bít BF) và xóa cờ ngắt SSPIF.
2.2.5.2 Giao tiếp I2C chế độ tớ trong quá trình nhận dữ liệu
Trong quá trình nhận dữ liệu ở chế độ tớ, các bít địa chỉ sẽ được đưa vào
trước. khi bít R/ của byte địa chỉ có giá trị bằng 0 và địa chỉ là đúng. Bít R/
của thanh ghi SSPSTAT được xóa về 0. Địa chỉ nhận được đưa vào trong thanh ghi
SSPBUF và đường dữ liệu SDA được đưa về mức logic thấp (xung ). Khi
điều kiện tràn byte địa chỉ tồn tại thi xung NOT được sinh ra. Điều kiện tràn
xẩy ra thì 2 bít BF(SSPSTAT<0>) được đặt, hoặc bít SSPOV(SSPCON1<6>)
được đặt.
Ngắt MSSP khi truyền mỗi byte dữ liệu, bít cờ SSPIF(PIR1<3>) được đặt, phải
được xóa bằng phần mềm. Thanh ghi SSPSTAT được sử dụng để xác định trạng
thái của byte.
Khi bít SEN (SSPCON2<0>) được đặt, sau khi 1 byte dữ liệu được nhận, xung
clock từ chân RC3/SCK/SCL sẽ được đưa xuống mức thấp. Muốn khởi tạo lại xung
clock ta đặt bít CKP(SSPCON<4>)
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
Hình 16
Giản đồ xung của I2C chế độ tớ 7 bít địa chỉ trong quá trình nhận dữ
Liệu (bít SEN = 0 )
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
Hình 17
Giản đồ xung của I2C chế độ tớ 10 bít địa chỉ trong quá trình nhận dữ
liệu (bít SEN = 0 )
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
Hình 18
Giản đồ xung của I2C chế độ tớ 7 bít địa chỉ trong quá trình nhận dữ
liệu (bít SEN = 1 )
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
Hình 19
Giản đồ xung của I2C chế độ tớ 10 bít địa chỉ trong quá trình nhận
dữ liệu (bít SEN = 1 )
2.2.5.3 Giao tiếp I2C chế độ tớ trong quá trình truyền dữ liệu
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
Khi bít R/ của byte địa chỉ được đặt và địa chỉ được chỉ định là đúng. Bít
R/ của thanh ghi SSPSTAT được đặt. Địa chỉ được nhận và được đưa vào trong
thanh ghi SSPBUF. 1 xung sẽ được tạo ra và gửi trong bít thứ 9, xung clock ở
chân RC3/SCK/SCL được kéo xuống mức thấp bất chấp trạng thái của bít SEN.
Khi đó I2C chủ sẽ không được đưa xung clock vào I2C tớ cho đến khi quá trình
truyền dữ liệu ở trạng thái sẵn sàng. Quá trình truyền dữ liệu phải được đưa vào
trong thanh ghi SSPBUF và đồng thời đưa vào trong thanh ghi SSPSR. Tiếp theo
cho phép xung ở chân RC3/SCK/SCL bằng cách đặt bít CKP (SSPCON<4>). 8
bít trong byte dữ liệu sẽ được dịch dần ra tại mỗi sườn xuống của xung clock. Như
vậy dữ liệu sẽ sẵn sàng ở ngõ ra khi xung clock ở mức logic cao, giúp cho I2C chủ
nhận được tại mỗi cạnh lên của xung clock.
Tại sườn lên của xung clock thứ 9, dữ liệu đã được dịch hết vào I2C chủ, xung
sẽ được tạo ra ở I2C chủ. Nếu chân SDA được dữ ở mức cao và dữ liệu truyền
đã hoàn thành thì xung NOT sẽ được tạo ra. Trong trường hợp xung được
chốt bởi I2C tớ , thanh ghi SSPSTAT sẽ được reset. I2C tớ sẽ chờ tín hiệu của bít
start để tiếp tục truyền byte dữ liệu tiếp theo, đưa byte dữ liệu vào thanh ghi
SSPBUF và đặt bít CKP.
Ngắt MSSP xẩy ra khi kết thúc truyền 1 byte dữ liệu. bít SSPIF được đặt tại sườn
xuống của xung clock thứ 9 và phải xóa bằng phần mềm, để đảm bảo sẽ được đặt
khi byte dữ liệu tiếp theo truyền xong.
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
Hình 20
Giản đồ xung của I2C chế độ tớ 7 bít địa chỉ trong quá trình truyền dữ liệu
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
Hình 21
Giản đồ xung của I2C chế độ tớ 10 bít địa chỉ trong quá trình truyền
dữ liệu
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
2.2.6 Tốc độ baud
Trong chế độ chủ của giao tiếp I2C, xung giao tiếp nối tiếp được tạo ra từ
RRG (bau rate generator), giá trị xác định tần số xung clock nối tiếp được lấy từ 7
bít thấp của thanh ghi SSPADD. Khi dữ liệu được đưa vào thanh ghi SSPBUF, bít
BF được đặt và BRG tự động đếm ngược về 0 và dừng lại, chân SCL được giữ
nguyên trạng thái trước đó. Khi dữ liệu tiếp theo được đưa vào, BRG sẽ cần một
khoảng thời gian để tự động reset lại giá trị để tiếp tục quá trình đếm ngược. Mỗi
vòng lệnh (có thời gian )Tcy BRG sẽ giảm giá trị 2 lần. Trong chế độ chủ, thanh ghi
SSPADD sẽ không được sử dụng để chứa địa chỉ, thay vào đó chức năng của
SSPADD lúc này là thanh ghi chứa giá trị của BRG.
Hình 22
Sơ đồ khối BRG (baud rate generator )
Các giá trị cụ thể của tần số xung nối tiếp do BRG tạo ra được liệt kê trong bảng
sau :
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
2.2.6.1 Giám sát xung clock
Giám sát xung clock xuất hiện khi chủ trong thời gian truyền, nhận hoặc
điều kiện lặp lại start/stop.
Khi chân SCL ở mức cao thì thì tốc độ baud được dừng lại từ bộ đếm cho đến khi
chân SCL được lấy mẫu ở mức cao. Khi chân SCL được lấy mẫu ở mức cao, tốc độ
baud được cập nhật lại chứa trong SSPADD<6:0> và bắt đầu đếm.
Hình 23
Tốc độ baud với việc giám sát xung clock
2.2.7 Địa chỉ gọi chung
Quá trình truyền nhận trong giao tiếp I2C , các bít địa chỉ được truyền đầu
tiên trong byte thứ nhất sau bít start nhằm xác định địa chỉ của thiết bị tớ cần giao
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
tiếp. Bên cạnh đó I2C cung cấp một địa chỉ mà có thể gọi tất cả các thiết bị I2C tớ.
Địa chỉ này là một trong 8 địa chỉ đặc biệt của protocol I2C. Địa chỉ này được định
dạng là 1 chuỗi các bít “0” với bít R = 0. Việc gọi địa chỉ này được cho phép bằng
cách đặt bít GCEN(SSPCON2<7>). Sau khi xác định bít start, 8 bít tiếp theo được
dịch vào trong thanh ghi SSPSR và địa chỉ này được so sánh với SSPADD. Nếu địa
chỉ gọi chung là đúng, SSPADD sẽ truyền tới SSPBUF 8 bít và cờ BF được đặt và
trên sườn xuống của bít thứ 9 ( bít ) bít cờ ngắt SSPIF được đặt.
Trong chế độ 10 bít, SSPADD đòi hỏi phải cập nhật nửa thứ 2 của địa chỉ đúng và
bít UA (SSPSTAT <1> ) được đặt. Nếu địa chỉ gọi chung được lấy mẫu khi bít
GCEN đặt. Trong khi thiết bị tớ thiết lập chế độ 10 bít địa chỉ thì nửa thứ 2 của địa
chỉ chưa cần thiết, bít UA sẽ không được đặt và thiết bị tớ sẽ bắt đầu nhận dữ liệu
sau bít .
Hình 24
Địa chỉ gọi chung trong chế độ tớ ( chế độ 7 hoặc 10 bít địa chỉ )
2.2.8 Tính toán thời gian chuỗi
Một chuỗi được cho phép bằng cách đặt bít cho phép ACKEN
(SSPCON2<4>). Khi bít này được đặt, chân SCL được kéo xuống mức thấp và dữ
liệu được xuất ra trên chân SDA. Nếu muốn khởi động một xung thì bít
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
ACKDT được xóa. Nếu không ta đặt bít ACKDT trước khi bắt đầu chuỗi .
Khi chân SCL lấy mẫu mức cao, BRG đếm tới TBRG , chân SCL được kéo xuống
thấp. Theo sau nó là bít ACKEN sẽ tự động được xóa. BRG không hoạt động và
khối MSSP ở chế độ nghỉ.
Bít cờ trạng thái WCOL :
Nếu ta ghi vào thanh ghi SSPBUF khi một chuỗi đang hoat động thì bít
cờ WCOL được đặt và nội dụng bộ đệm không thay đổi.
Hình 25
Giản đồ xung chuỗi ACK
2.2.9 Tính toán điều kiện stop
Tín hiệu stop được đưa tới chân SDA khi kết thúc dữ liệu truyền hoặc nhận
bằng cách đặt bít PEN (SSPCON2<2>) . Kết thúc qua trình truyền hoặc nhận, chân
SCL được kéo xuống mức thấp sau sườn xuống thư 9 của xung clock. Khi bít PEN
được đặt, I2C chủ sẽ kéo SDA xuống mức thấp. Khi SDA được lấy mẫu mức thấp,
BRG được cập nhật lại và bắt đầu đếm ngược về 0. Sau 1 khoang thời gian TBRG ,
chân SCL được đưa lên mức logic cao và sau 1 khoảng thời gian TBRG nữa chân
SDA cũng được đưa lên mức cao. Ngay tại thời điểm đó bít P(SSPSTAT<4>) đươc
đặt ( điều kiện stop đã được tạo ra ). Sau 1 khoảng thời gian TBRG nữa bít PEN tự
động được xóa và cờ ngắt SSPIF được đặt.
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
Hình 26
Giản đồ xung trong quá trình tạo điều kiện lặp lại bít stop
2.2.10 Chế độ đa chủ
Trong chế độ đa chủ, ngắt được sinh ra khi xuất hiện điều kiện start và stop
hoặc khi bus rỗng. Bít start và stop được xóa khi reset hoặc khối MSSP không sử
dụng. Điều khiển giao tiếp I2C có thể lấy khi bít P (SSPSTAT<4>) được đặt hoặc
khi bus ở trạng thái nghỉ với cả hai bít start và stop bị xóa. Khi bus bận, MSSP sẽ
cho phép ngắt khi xuất hiện điều kiện stop.
Trong hoạt động ở chế độ đa chủ, chân SDA cần được kiểm tra, nếu mức tín hiệu
chờ đầu ra. Việc kiểm tra này được thực hiện bởi phần cứng với kết quả được đặt
trong bít BCLIF.
Các trạng thái có thể bị mất giám sát đó là :
+ Chuyển đổi địa chỉ.
+ Chuyển đổi dữ liệu.
+ 1 điều kiện start.
+ 1 điều kiện lặp lại start.
+ 1 điều kiện .
2.2.10.1 Truyền thông đa chủ, xung đột bus và giám sát bus
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
Truyền thông đa chủ được hỗ trợ giám sát bus. Khi đầu ra chủ là các bít địa
chỉ hoặc dữ liệu trên chân SDA. Giám sát chủ xẩy ra khi đầu ra chủ là 1 trên chân
SDA và dữ liệu lấy mẫu trên chân SDA là 0 thì xung đột bus có xẩy ra. Chủ sẽ đặt
bít cờ ngắt xung đột bus và BCLIF và reset cổng I2C để nó về trạng thái nghỉ.
Nếu truyền đang hoạt động, khi va chạm bus xuất hiện, truyền sẽ dừng lại, cờ BF
được xóa, các chân SDA và SCL sẽ dừng hoạt động và có thể ghi tới thanh ghi
SSPBUF. Khi sử dụng dịch vụ ngắt xung đột bus và nếu bus I2C rỗng, người sử
dụng có thể tiếp tục truyền thông bằng cách khởi tạo một điều kiện start.
Nếu 1 start, lặp lại start, stop hoặc điều kiện đang hoạt động khi xuất hiện
xung đột bus, điều kiện này sẽ không có tác dụng, các chân SDA và SCL sẽ dừng
và bít điều khiển tương ứng trong thanh ghi SSPCON2 được xóa. Khi sử dụng dịch
vụ ngắt do xung đột bus và khi bus I2C rỗng người sử dụng có thể tiếp tục truyền
thông bằng cách khởi tạo điều kiện start.
Thiết bị chủ sẽ tiếp tục giám sát các chân SDA và SCL. Nếu điều kiện stop xuất
hiện, bít SSPIF sẽ được đặt.
Quá trình ghi tới thanh ghi SSPBUF sẽ bắt đầu truyền dữ liệu ở bít dữ liệu đầu tiên.
Hình 27
Giản đồ xung giao tiếp I2C chế độ đa chủ khi có xung đột bus, xung
2.2.10.2 Xung đột bus trong khi có điều kiện start
Trong khi có điều kiện start, xuất hiện xung đột bus thì :
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
+ SDA và SCL được lấy mẫu mức thấp vào thời điểm bắt đầu điều kiện start.
+ SCL được lấy mẫu ở mức thấp trước khi SDA kéo xuống mức thấp.
Trong khi có 1 điều kiện start cả hai chân SDA và SCL đều được theo dõi. Nếu
chân SDA đã ở mức thấp hoặc SCL đã ở mức thấp thì sẽ xuất hiện :
+ Điều kiện start không có tác dụng.
+ bít cờ BCLIF được đặt
+ Khối MSSP ređặt để đến trạng thái nghỉ.
Khi chân SDA lấy mẫu mức cao, BRG cập nhật từ SSPADD<6:0> và đếm lùi về 0.
Nếu chân SCL lấy mẫu mức thấp trong khi SDA ở mức cao, 1 sự xung đột bus xuất
hiện. Nếu chân SDA lấy mẫu mức thấp trong thời gian đếm này, BRG sẽ reset. Tuy
nhiên nếu lấy mẫu trên SDA là 1, chân SDA ở mức thấp ở thời điểm cuối của bộ
đếm. BRG sẽ được cập nhật lại và đếm lùi về 0. Nếu chân SCL lấy mẫu bằng 0
trong thời gian này thì không có sự xung đột bus, ở thời điểm cuối của bộ đếm
BRG, chân SCL xuống thấp.
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
Hình 28
Xung đột bus trong thời gian điều kiện start( duy nhất ở chân SDA)
Hình 29
Xung đột bus trong thời gian điều kiện start( SCL=0)
Hình 30
BRG ređặt để giám sát SDA trong thời gian điều kiện start
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
2.2.10.3 Xung đột bus trong thời gian lặp lại điều kiện start
Trong thời gian lặp lại điều kiện start, xuất hiện 1 sự xung đột bus nếu:
+ Trên chân SDA được lấy mẫu mức thấp khi SCL từ thấp lên cao.
+ SCL xuống mức thấp trước khi SDA thấp.
Khi SDA lên mức cao BRG cập nhật lại với thanh ghi SSPADD<6:0> và bộ đếm sẽ
đếm ngược về 0. Chân SCL lấy mẫu mức cao ở chân dữ liệu SDA.
Nếu SDA ở mức thấp khi đó 1 sự xung đột bus xuất hiện ( trường hợp 1 )
Nếu SDA được lấy mẫu mức cao, BRG sẽ cập nhật lại và bắt đầu đếm, nếu SDA từ
mức cao xuống thấp trước khi BRG đếm xong thì không xuất hiện xung đột bus.
Nếu SCL từ cao xuống thấp trước khi BRG đếm xong và SDA không xác định mức
thì xuất hiện xung đột bus. ( trường hợp 2 )
Nếu kết thúc BRG mà cả hai SCL và SDA đều mức cao. Chân SDA được điều
khiển xuống thấp và BRG sẽ được cập nhật lại và bắt đầu đếm. Khi kết thúc đếm,
bất chấp trạng thái của chân SCL, chân SCL được đưa xuống thấp và điều kiện lặp
lại start hoàn thành.
Hình 31
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
Xung đột bus trong thời gian lặp lại điều kiện start ( trường hợp 1)
Hình 32
Xung đột bus trong thời gian lặp lại điều kiện start ( trường hợp 2)
2.2.10.4 Xung đột bus trong thời gian điều kiện stop
Xung đột bus trong thời gian điều kiện stop nếu :
+ Sau khi chân SDA lên cao, SDA được lấy mẫu mức thấp sau đó BRG đếm hết.
+ SCL được lấy mẫu mức thấp trước khi SDA lên cao.
Điều kiện stop bắt đầu khi chân SDA ở mức thấp, SDA được lấy mẫu thấp. SCL
lên cao. BRG được cập nhật lại và bắt đầu đếm ngược về 0. Sau khi BRG đếm
xong , SDA được lấy mẫu, nếu chân SDA được lấy mẫu thấp thì xuất hiện xung đột
bus ( trường hợp 1) . Nếu SCL được lấy mẫu thấp trước khi SDA cho phép lên cao
thì cũng xuất hiện xung đột bus. ( trường hợp 2)
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
Hình 33
Xung đột bus trong thời gian điều kiện stop ( trường hợp 1)
Hình 34
Xung đột bus trong thời gian điều kiện stop ( trường hợp 2)
2.2.11 ví dụ :
Đọc và ghi giá trị vào ds1307 hiển thị lcd :
Code :#include<p18f4520.h>#include<stdio.h>#include<i2c.h>#include<math.h>#pragma config OSC = HS#pragma config IESO = OFF
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
#pragma config PWRT = OFF#pragma config WDT = OFF#pragma config WDTPS = 32768#pragma config MCLRE = ON#pragma config LVP = OFF#pragma config DEBUG = OFF#pragma config CP0 = OFF#pragma config CP1 = OFF#pragma config CPB = OFF#pragma config CPD = OFF#pragma config WRT0 = OFF#pragma config WRT1 = OFF#pragma config WRTB = OFF#pragma config WRTC = OFF#pragma config WRTD = OFF#pragma config EBTR0 = OFF#pragma config EBTR1 = OFF#pragma config EBTRB = OFF#define rs PORTCbits.RC1#define en PORTCbits.RC2#define gio PORTBbits.RB0#define phut PORTBbits.RB1#define set PORTBbits.RB2#define LOA PORTAbits.RA0void delay(unsigned int t);void loa(void);void ghilenh(unsigned char a);void ghidulieu(unsigned char b);void chuoi(char *s);void dieukhien(void);void ghi_ds(unsigned char diachighi, unsigned char dulieu);void doc_ds(unsigned char diachidoc);int bcd_int(char x);int int_bcd(int y);void chedo(void);void hienthi(void);
char M[32];int s;
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
int gio=0,phut=0,giay=0;int dem=0,dem1=0;
void delay(unsigned int t){
unsigned int i;for(i=0;i<=t;i++);
}//++-------------------------
void loa(void){
int j;for(j=0;j<100;j++)
{LOA=0;delay(35);LOA=1;delay(50);
}}//++-------------------------void ghilenh(unsigned char a){
delay(100);rs=0;en=1;PORTD=a;en=0;
}//++-------------------------void ghidulieu(unsigned char b){
delay(100);rs=1;
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
en=1;PORTD=b;en=0;
}//++-------------------------void chuoi(char *s){
while(*s){
ghidulieu(*s);s++;
}}//++-------------------------void dieukhien(void){
ghilenh(0x38);ghilenh(0x0C);ghilenh(0x01);
}//++-------------------------
void ghi_ds(unsigned char diachighi, unsigned char dulieu){
StartI2C();IdleI2C();WriteI2C(0xD0);IdleI2C();WriteI2C(diachighi);IdleI2C();WriteI2C(int_bcd(dulieu));IdleI2C();StopI2C();}//++-------------------------void doc_ds(unsigned char diachidoc){
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
StartI2C();IdleI2C();WriteI2C(0xD0);IdleI2C();WriteI2C(diachidoc);IdleI2C();RestartI2C();IdleI2C();WriteI2C(0xD1);IdleI2C();s= ReadI2C();IdleI2C();NotAckI2C();IdleI2C();StopI2C();}//++-------------------------
int bcd_int(char x){return((((x&0xF0)>>4)*10)+(x&0x0F));}
//*********************************
int int_bcd(int y){return((((y/10)<<4)&0xf0)+((y%10)&0x0f));}
void chedo(void){
if(gio==0){
loa();while(!gio){
gio++; if(gio==23) gio=0;ghi_ds(0x02,gio);break;
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
}//++---------------
if(phut==0){
loa();while(!phut){
phut++; if(gio==60) phut=0;ghi_ds(0x01,phut);break;
}
void hienthi(void){
doc_ds(0x00);giay =bcd_int(s);doc_ds(0x01);phut = bcd_int(s);doc_ds(0x02);gio = bcd_int(s);ghilenh(0x80);sprintf(&M[0],"timer:%d%d:%d%d:%d%d",gio/10,gio
%10,phut/10,phut%10,giay/10,giay%10);chuoi(&M[0]);delay(100);
}//++-------------------------
void main(void){
TRISA=0X00;TRISD=0X00;TRISC=0X00;TRISB=0X0F;TRISE=0X00;LATE=0X00;LATA=0XFF;
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
ADCON1=0XFF;dieukhien();OpenI2C(MASTER, SLEW_ON);
SSPADD=0x63;delay(1000);ghilenh(0xC0);sprintf(&M[0]," wellcome ");chuoi(&M[0]);delay(100);while(1){
if(set==0){
ghi_ds(0x00,0x00);delay(500);ghi_ds(0x01,0x05);delay(500);ghi_ds(0x02,0x05);delay(500);ghi_ds(0x07,0xD0);delay(500);
}hienthi();
chedo();
}
}
3 EUSART
3.0 Tổng quan về khối EUSART
EUSART là ghi tắt của cụm từ Enhanced Univesal Synchronous
Asynchronous Receiver Transmitter. USART là một trong 2 khối vào ra nối tiếp.
USART còn được gọi là giao diện truyền thông nối tiếp SCI. USART có thể thiết
lập như là hệ thống bất đồng bộ song công truyền thông với các thiết bị ngoại vi,
với các vi điều khiển hoặc các máy tính. Nó có thể thiết lập như là hệ thống đồng
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
bộ đơn công truyền thông với các thiết bị ngoại vi như là A/D hoăc D/A, truyền
thông nối tiếp EEPROMs,…
USART có thể thiết lập 1 trong các chế độ sau :
+ Bất đồng bộ
+ Chế độ đồng bộ chủ
+ Chế độ đồng bộ tớ
Hai chân dùng cho giao tiếp này là RC6/TX/CK và RC7/RX/DT. Để cho phép khối
USART thì cần thiết lập :
+ Đặt bít SPEN(RCSTA<7>
+ Đặt bít TRISC<7:6>
Để điều khiển khối USART thì cần điều khiển các thanh ghi sau :
+ Thanh ghi TXSTA : Trạng thái truyền và điều khiển
+ Thanh ghi RCSTA : Trạng thái nhận và điều khiển
+ Thanh ghi BAUDCON : Điều khiển tốc độ baud
3.1 Các thanh ghi
Hình 35 TXSTA : Trạng thái truyền và thanh ghi điều khiển
Bít 7 CSRC : bít lựa chọn nguồn xung
Chế độ bất đồng bộ :
Không sử dụng bít này.
Chế độ đồng bộ :
1= chế độ chủ.
0= chế độ tớ.
Bít 6 TX9 : bít cho phép truyền 9 bít
1= chọn truyền 9 bít
0= chọn truyền 8 bít
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
Bít 5 TXEN : bít cho phép truyền
1= cho phép truyền.
0= không cho phép truyền.
Bít 4 SYNC : bít lựa chon chế độ EUSART
1= chế độ đồng bộ
0= chế độ bất đồng bộ
Bít 3 SENDB : đặc tính gửi ngắt quãng bít
Chế độ bất đồng bộ :
1= ngắt quãng đồng bộ gửi trên quá trình truyền ( xóa bởi phần
cứng để hoàn thành).
0= truyền ngắt quãng đồng bộ được hoàn thành
Chế độ đồng bộ :
Không sử dụng bít này.
Bít 2 BRGH : bít lựa chọn tốc độ baud cao
Chế độ bất đồng bộ :
1= tốc độ cao.
0= tốc độ thấp.
Chế độ đồng bộ :
Không sử dung bít này.
Bít 1 TRMT : bít trạng thái truyền của thanh ghi dịch
1= TSR rỗng.
0= TSR đầy.
Bít 0 TX9D : truyền dữ liệu của bít thứ 9
Có thể là bít địa chỉ, bít dữ liệu hoặc bít chẵn lẻ.
Hình 36 RCSTA : Trạng thái nhận và thanh ghi điều khiển
Bít 7 SPEN : bít cho phép cổng nối tiếp
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
1= cho phép cổng nối tiếp.
0= không cho phép cổng nối tiếp.
Bít 6 RX9 : bít cho phép nhận 9 bít
1= chọn nhận 9 bít.
0= chọn nhận 8 bít.
Bít 5 SREN : bít cho phép nhận đơn (nhận 8 bít dữ liệu )
Chế độ bất đồng bộ :
Không sử dụng bít này.
Chế độ đồng bộ chủ :
1= cho phép nhận đơn.
0= không cho phép nhận đơn.
Bít này được xóa sau khi nhận hoàn tất.
Chế độ đồng bộ tớ :
Không sử dụng bít này.
Bít 4 CREN : bít cho phép tiếp tục nhận
Chế độ bất đồng bộ :
1= cho phép nhận.
0= không cho phép nhận.
Chế độ đồng bộ :
1= cho phép tiếp tục nhận cho đến khi bít cho phép CREN được xóa.
0= không cho phép tiếp tục nhận.
Bít 3 ADDEN : bít cho phép xác định địa chỉ
Chế độ bất đông bộ 9 bít (RX9 =1):
1= cho phép phát hiện địa chỉ, cho phép ngắt và cập nhật bộ đệm khi bít
RSR<8> được đặt.
0= không cho phép phát hiện địa chỉ, tất cả byte được nhân và bít thứ 9 có
thể sử dụng là bít chẵn lẻ.
Chế độ đồng bộ 9 bít ( RX9 = 0 ) :
Không sử dụng bít này.
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
Bít 2 FERR : bít lỗi khung
1= lỗi khung ( có thế xóa bởi việc đọc thanh ghi RCREG và nhận byte tiếp
theo).
0= không có lỗi khung.
Bít 1 OERR : bít lỗi tràn
1= lỗi tràn (có thể xóa bằng cách xóa bít CREN).
0= không có lỗi tràn.
Bít 0 RX9D : nhận dữ liệu của bít thứ 9.
Đây có thể là bít địa chỉ hoặc dữ liệu và phải tính toán bằng phần mềm.
Hình 37 BAUDCON : Thanh ghi điều khiển tốc độ baud
Bít 7 ABDOVF : bít trạng thái đồng thời thu nhận tự động tốc độ baud
1= BRG đồng thời xuất hiện trong thời gian phát hiện tự động
tốc độ baud.(phải xóa bằng phần mềm )
0= BRG không đồng thời xuất hiện.
Bít 6 RCIDL : bít trạng thái hoạt động nhận
1= hoạt động nhận được nghỉ.
0= hoạt động nhận tích cực.
Bít 5 RXDTP : bít lựa chọn cực tính dữ liệu hoặc nhận
Chế độ bất đồng bộ :
1= dữ liệu nhận (RX) bị đảo ( tích cực mức thấp ).
0= dữ liệu nhận (RX) không đảo ( tích cực mức cao ).
Chế độ đồng bộ :
1= dữ liệu (DT) bị đảo (tích cực mức thấp).
0= dữ liệu (DT) không đảo ( tích cực mức cao ).
Bít 4 TXCKP : bít lựa chọn cực tính xung clock và dữ liệu
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
Chế độ bất đồng bộ :
1= trạng thái nghỉ truyền (TX) ở mức thấp.
0= trạng thái nghỉ truyền (TX) ở mức cao.
Chế độ đồng bộ :
1= trạng thái nghỉ của xung clock(CK) ở mức cao.
0= trạng thái nghỉ của xung clock (CK) ở mức thấp.
Bít 3 BRG16 : bít cho phép thanh ghi tốc độ baud 16 bít
1= tạo ra tốc độ baud 16 bít – SPBRGH và SPBRG.
0= tạo ra tốc độ baud 8 bít – chỉ sử dụng với thanh ghi SPBRG, thanh ghi
SPBRGH không sử dụng.
Bít 2 Không dùng đọc là 0.
Bít 1 WUE : bít cho phép đánh thức
Chế độ bất đồng bộ :
1= EUART tiếp tục lấy mẫu ở chân RX, sinh ra ngăt sườn xuống, bít được
xóa bởi phần cứng trên sườn lên tiếp theo.
0= chân RX không giám sát hoặc phát hiện sườn lên.
Chế độ đồng bộ :
Không sử dụng bít này.
Bít 0 ABDEN : bít cho phép phát hiện tự động tốc độ baud
Chế độ bất đồng bộ :
1= cho phép đo tốc độ baud trên đặc tính tiếp theo. Xóa bởi phần cứng khi
hoàn thành.
0= không cho phép đo tốc độ baud hoặc hoàn thành.
Chế độ đồng bộ :
Không sử dụng bít này.
3.2 Bộ phát tốc độ baud (BRG)
Bộ phát tốc độ baud 8 bít hoặc 16 bít đều được hỗ trợ cho cả hai chế độ đồng
bộ và bất đồng bộ của chế độ EUSART. Mặc định BRG hoạt động ở chế độ 8 bít.
Cài đặt BRG 16 bít bằng bít BRG16 (BAUDCON<3>).
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
Điều khiển hai cặp thanh ghi SPBRGH:SPBRG để vận hành thời gian chạy tự do.
Trong chế độ bất đồng bộ, bít BRGH(TXSTA<2>) và bít BRG16
(BAUDCON<3>) cũng được dùng để điều khiển tốc độ baud. Trong chế độ đồng
bộ, BRGH(TXSTA<2>) được lờ đi.
Tốc độ baud có thể được tính toán theo các công thức sau :
Bảng 1
Công thức tính toán tốc độ baud
Bảng 2
Các thanh ghi liên quan tới phát tốc độ baud
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
Bảng 3
Tốc độ baud ở các chế độ bất đồng bộ
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
Bảng 4
Tốc độ baud ở các chế độ đồng bộ
3.2.1 Tự động phát hiện tốc độ baud
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
Khối USART được hỗ trợ tự động phát hiện và điều chỉnh tốc độ baud. Đặc
tính này duy nhất được tích cực ở chế độ bất đồng bộ và khi bít WUE bị xóa. Chuỗi
phép đo tốc độ baud tự động bắt đầu ở bất cứ khi nào nhận được bít start và bít
ABDEN được đặt.
Trong khối tự động phát hiện tốc độ baud (ABD), xung clock tơi BRG bị đảo
ngược. Trong chế độ ABD bên trong BRG được sử dụng như là một bộ đếm để
định chu kỳ các bít của byte đầu vào. Khi bít ABDEN được đặt thì BRG được xóa
và chờ bít start. Tự động phát hiện tốc độ baud phải nhận 1 byte với giá trị 55h.
(ASCII ”U”), trong lệnh kế tiếp phải tính toán tốc độ bít phù hợp. Phép đo lấy cả
hai bít thấp và cao để tối thiểu hóa bất kỳ hiệu ứng nào gây ra bởi sự bất đối xứng
tín hiệu vào. Sau bít start SPBRG bắt đầu đếm lên, sử dụng nguồn xung đã có sẵn
trên sườn lên đầu tiên ở RX.
Sau 8 bít trên chân RX hoặc 5 sườn lên thì một giá trị tổng BRG nằm ở bên trái
trong cặp thanh ghi SPBRGH:SPBRG. Ở sườn lên thứ 5 thì bít ABDEN sẽ tự động
bị xóa.
Nếu đồng thời xuất hiện BRG ( 1 sự tràn từ FFFFh về 0000h), sự kiện dừng bởi bít
trạng thái ABDOVF(BAUDCON<7>). Nó được đặt trong phần cứng bởi BRG và
có thể đặt hoặc xóa trong phần mềm. Chế độ ABD được tích cực trở lại sau những
sự kiện đồng thời và bít ABDEN được tự động xóa. Trong khi định chu kỳ tốc độ
baud, thanh ghi BRG được tính tại 1/8 tốc độ xung clock được định sẵn. Cần chú ý
rằng thời gian BRG sẽ được thiết lập bởi bít BRG16 và bít BRGH. Cài đặt bít
BRG16, cả hai SPBRG và SPBRGH sẽ được sử dụng như là bộ đếm 16 bít. Điều
này cho phép người sử dụng thử lại mà không cần quan tâm đến sự xuất hiện của
chế độ 8 bít bằng cách kiểm tra địa chỉ 00h trong thanh ghi SPBRGH. Trong khi
trạng thái ABD xẩy ra thì EUSART được giữ ở trạng thái nghỉ. Ngắt RCIF được
đặt khi phát hiện sườn lên thứ 5 trên chân RX. Cần đọc giá trị RCREG để xóa ngắt
RCIF. Nội dung của RCREG cần phải được xóa bỏ.
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
Bảng 5
Tốc độ xung nhip máy đếm BRG
Hình 38
Tính toán tự động tốc độ baud
Hình 39
Chuỗi tràn BRG
3.3 Chế độ EUSART bất đồng bộ
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
Hoạt động của chế độ bất đồng bộ được lựa chọn bằng cách xõa bít SYNC
(TXSTA<4>). Trong chế độ này, EUSART sử dụng chuẩn NRZ ( 1 bít start, 8 hoặc
9 bít dữ liệu và 1 bít stop ), khung dữ liệu chung là 8 bít. Trên chip BRG 8bít hoặc
16 bít có thể sử dụng để điều khiển tấn số tốc độ baud chuẩn từ bộ dao động.
EUSART truyền và nhận bít lsb đầu tiên (bít thấp nhất). Truyền và nhận trong
EUSART thì có chức năng độc lập nhưng sử dụng giống nhau về định dạng dữ liệu
và tốc độ baud. BRG tạo ra xung clock, 8x16 hoặc 8x64 tốc độ dịch bít, điều này
phụ thuộc vào bít BRGH và BRG16 (TXSSTA <2> và BAUDCON<3>). Cờ chẵn
lẻ không được hỗ trợ bởi phần cứng nhưng có thể được thực hiện bởi phần mềm và
nó được cất ở bít dữ liệu thứ 9.
Khi hoạt động trong chế độ bất đồng bộ khối EUSART bao gồm các thành phần
sau :
+ BRG
+ Mạch lấy mẫu
+ Truyền bất đồng bộ
+ Nhận bất đồng bộ
+ Tự động đánh thức khi ngát quãng đồng bộ
+ Đặc tính truyền ngắt quãng 12 bít
+ Phát hiện tốc độ baud tự động
3.3.1 Quá trình truyền trong EUSART bất đồng bộ
Trung tâm của khối truyền là thanh ghi dịch TSR. Dữ liệu được đọc hoặc ghi
truyền tới thanh ghi đệm TXREG. Thanh ghi TXREG sẽ cập nhật dữ liệu trong
phần mềm, thanh ghi TSR không thể cập nhật cho đến khi bít stop được truyền từ
quá trình cập nhật trước. Ngay khi bít stop được truyền, thanh ghi TSR sẽ cập nhật
giá trị mới từ thanh ghi TXREG, khi đó TXREG sẽ rỗng và cờ TXIF(PIR1<4>)
được đặt. Ngắt này được cho phép hoặc không cho phép bằng cách cài đặt bít cho
phép ngắt TXIE(PIE1<4>). TXIF sẽ được đặt bất chấp trạng thái của TXIE. Nó
không thể xóa bằng phần mềm
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
Trong khi TXIF phản ánh trạng thái của thanh ghi TXREG thì bít
TRMT<TXSTA<1>) phản ánh trạng thái của thanh ghi TSR. TRMT chỉ có thể đọc
và được đặt khi thanh ghi TSR rỗng.
Các bước của quá trình truyền bất đồng bộ :
+ Khởi tạo tốc độ baud băng cách đưa giá trị thích hợp vào thanh ghi SPBRGH và
thanh ghi SPBRG.
+ Cho phép cổng nối tiếp bất đồng bộ bằng cách xóa bít SYNC và đặt bít SPEN
+ Nếu muốn ngắt thì đặt bít cho phép ngắt TXIE
+ Nếu muốn truyền 9 bít thì đặt bít TX9
+ Cho phép truyền bằng việc cài đặt bít TXEN
+ Nếu lựa chọn truyền 9 bít thì bít thứ 9 có thể cập nhật vào trong bít TX9D.
+ Cập nhật dữ liệu vào thanh ghi TXREG
+ Nếu sử dụng ngắt cần chắc chắn rằng bít GIE và PEIE trong thanh ghi INTCON
(INTCON<7:6> ) được đặt.
Hình 40
Sơ đồ khối truyền EUSART
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
Hình 41
Truyền bất đồng bộ
Hình 42
Truyên bất đồng bộ (back to back)
Bảng 6
Các thanh ghi liên hệ với truyền bất đồng bộ
3.3.2 Quá trình nhận trong EUSART bất đồng bộ
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
Dữ liệu được nhận trên chân RX và điều khiển khối khôi phục dữ liệu. Khối
khôi phục dữ liệu hoạt động với tốc độ cao vơi thời gian bằng x16 tốc độ baud.
Trong khi chủ yếu hoạt động nhận dịch chuyển nối tiếp ở tốc độ truyền theo bít
hoặc ở Fosc. Chế độ này điển hình được sử dụng trong hệ thống RS-232.
Các bước trong quá trình nhận bất đồng bộ :
+ Khởi tạo tốc độ baud băng cách đưa giá trị thích hợp vào thanh ghi SPBRGH va
thanh ghi SPBRG.
+ Cho phép cổng nối tiếp bất đồng bộ bằng cách xóa bít SYNC và xóa bít SPEN
+ Nếu muốn ngắt thì đặt bít cho phép ngắt RCIE
+ Nếu muốn nhận 9 bít thì đặt bít RX9
+ Cho phép nhận bằng việc cài đặt bít CREN
+ Bít cờ RCIF sẽ được đặt khi nhận hoàn thành và ngắt sẽ tạo ra nếu bít cho phép
ngắt RCIE được đặt.
+ Đọc thanh ghi RCSTA để lấy bít thứ 9 ( nếu đã được cho phép) và xác định nếu
có bất kỳ lỗi nào xuất hiện trong quá trình nhận
+ Đọc 8 bít nhận dữ liệu bằng cách đọc thanh ghi RCREG.
+ Nếu có bất kỳ lỗi nào xuất hiện, xóa lỗi bằng cách xóa bít cho phép CREN.
+ Nếu sử dụng ngắt, cần chắc chắn rằng bít GIE và PEIE trong thanh ghi INTCON
(INTCON<7:6>) được đặt.
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
Hình 43
Sơ đồ khối nhận EUSART
3.3.3 Cài đặt chế độ 9 bít với địa chỉ phát hiện
Chế độ này điển hình được sử dụng trong hệ thống RS-458. Để thiết lập nhận bất
đồng bộ với địa chỉ phát hiện, các bước thực hiện như sau :
+ Khởi tạo tốc độ baud băng cách đưa giá trị thích hợp vào thanh ghi
SPBRGH va SPBRG.
+ Cho phép cổng nối tiếp bất đồng bộ bằng cách xóa bít SYNC và xóa bít
SPEN
+ Nếu muốn ngắt thì đặt bít RCEN và lựa chọn mức ưu tiên với bít RCIP.
+ Đặt bít RX9 để cho phép nhận 9 bít
+ Đặt bít ADDEN để cho phép địa chỉ phát hiện
+ Cho phép nhận bằng cách cài đặt bít CREN
+ Bít RCIF sẽ được đặt khi nhận hoàn thành. Ngắt sẽ xẩy ra khi bít RCIE
Và bít GIE được đặt.
+ Đọc thanh ghi RCSTA để xác định nếu bất kỳ lỗi nào xuất hiện trong
Thời gian nhận
+ Đọc RCREG để xác định nếu là địa chỉ thiết bị
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
+ Nếu có bất kỳ lỗi nào xẩy ra thì xóa bíts CREN
+ Nếu thiết bị có địa chỉ, xóa bít ADDEN để cho phép nhận tất cả dữ liệu
Vào trong bộ đệm nhận và ngắt CPU.
Hình 44
Quá trình nhận ở chế độ bất đồng bộ
Bảng 7
Các thanh ghi liên quan tới quá trình nhận bất đồng bộ
3.4 EUSART đồng bộ
Giao diện USART đồng bộ được kích hoạt bằng cách sét bít SYNC. Cổng
giao tiếp nối tiếp vẫn là hai chân RC7/RX/DT và RC6/TX/CK, cho phép cổng nối
tiếp bằng cách đặt bít SPEN. USART cho phép hai chế độ truyền nhận dữ liệu là
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
chế độ chủ và chế độ tớ. Chế độ chủ được kích hoạt bằng cách đặt bít
CSRC(TXSTA<7>), chế độ tớ được kích hoạt bằng cách xóa bít CSRC.
3.4.1 EUSART chế độ đồng bộ chủ
Chế độ đồng bộ chủ được cài đặt bít CSRC( TXSTA<7>). Trong chế độ
này, dữ liệu được truyền đơn công. Khi truyền dữ liệu, quá trình nhận bị dừng lại.
Chế độ đồng bộ được cài đặt bởi bít SYNC( TXSTA<4>) và đặt bít SPEN
(RCSTA<7>) để thiết lập các chân TX và RX là các chân CK(clock) và DT (data)
tương ứng.
Chế độ chủ chỉ ra rằng bộ vi xử lý truyền xung clock trên chân CK. Cực tính của
xung được lựa chọn bằng bít TXCKP (BAUDCON<4>). Đặt bít TXCKP trạng thái
nghỉ trên chân CK là mức cao, khi xóa bít này thì trạng thái nghỉ trên chân CK là
mức thấp.
3.4.1.1 Quá trình truyền trong EUSART chế độ đồng bộ chủ
Trung tâm của quá trình truyền là thanh ghi dịch truyền TSR. Dữ liệu được
đọc hoặc ghi truyền tới thanh ghi đệm TXREG. Thanh ghi TXREG sẽ cập nhật dữ
liệu trong phần mềm, thanh ghi TSR không thể cập nhật cho đến khi các bít được
truyền hết từ quá trình cập nhật trước. Ngay khi bít cuối cùng truyền xong, thanh
ghi TSR được cập nhật dữ liệu mới từ thanh ghi TXREG. Dữ liệu trong thanh ghi
TXREG được truyền tới thanh ghi TSR. Đồng thời TXREG sẽ rỗng và cờ TXIF
(PIR1<4>) được đặt. Ngắt có thể được cho phép hoặc không cho phép bằng cách
đặt hoặc xóa bít TXIE (PIE1<4>). TXIF được đặt bất chấp trạng thái của bít cho
phép TXIE. Nó có thể được xóa bởi phần mềm. Nó duy nhất được ređặt khi có dữ
liệu mới được cập nhật vào thanh ghi TXREG.
Trong khi bít TXIF phản ánh trạng thái của thanh ghi TXREG, bít TRMT
(TXSTA<1>) phản ánh trạng tháo của thanh ghi TSR. TRMT chỉ có thể đọc và
được đặt khi thanh ghi TSR rỗng.
Các bước trong quá trình truyền ở chế độ đồng bộ chủ :
+ Khởi tạo tốc độ baud bằng cách đưa giá trị thích hợp vào thanh ghi
SPBRGH va SPBRG.
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
+ Cho phép cổng nối tiếp ở chế độ đồng bộ chủ bằng cách cài đặt các bít
SYNC, SPEN và CSRC.
+ Nếu muốn ngắt, đặt bít cho phép TXIE
+ Nếu muốn truyền 9 bít, đặt bít TX9
+ Cho phép truyền bằng cách cài đặt bít TXEN
+ Lựa chọn truyền 9 bít, bít thứ 9 được để ở bít TX9D.
+ Bắt đầu truyền bằng cách cập nhật dữ liệu tới thanh ghi TXREG
+ Nếu sử dụng ngắt, phải đặt các bít GIE và PEIE trong thanh ghi
INTCON.
Hình 45
Qua trình truyền ở chế độ đồng bộ chủ
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
Hình 46
Qua trình truyền ở chế độ đồng bộ chủ (thông qua TXEN)
Bảng 8
Các thanh ghi liên quan đến quá trình truyền ở chế độ đồng bộ chủ
3.4.1.2 Quá trình nhận trong EUSART chế độ đồng bộ chủ
Chế độ đồng bộ được lựa chọn. Quá trình nhận được cho phép bằng cách cài
đặt bít nhận đơn SREN ( RCSTA<5>), hoặc bít cho phép tiếp tục nhận CREN
( RCSTA<4>). Dữ liệu được lấy mẫu trên chân RX ở các sườn xuống của xung
clock.
Nếu bít cho phép SREN được đặt thì 1 word dữ liệu được nhận. Nếu bít cho phép
CREN được đặt, quá trình nhận tiếp tục cho đến khi bít CREN bị xóa. Nếu cả hai
bít này đều được đặt thì bít CREN được ưu tiên.
Các bước trong quá trình nhận ở chế độ đồng bộ chủ :
+ Khởi tạo tốc độ baud bằng cách đưa giá trị thích hợp vào thanh ghi
SPBRGH va SPBRG.
+ Cho phép cổng nối tiếp ở chế độ đồng bộ chủ bằng cách cài đặt các bít SYNC,
SPEN và CSRC.
+ Xóa các bít CREN và SREN.
+ Nếu muốn ngắt cần đặt bít cho phép RCIE.
+ Nếu muốn nhận 9 bít cần sét bít RX9
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
+ Nếu muốn nhận 1 word dữ liệu cần đặt bít SREN. Để tiếp tục nhận cần đặt bít
CREN.
+ Bít cờ ngắt RCIF sẽ được đặt khi nhận hoàn thành và ngắt sẽ được gọi nếu bít
cho phép RCIE đã được đặt.
+ Đọc 8 bít dữ liệu đã được nhận bằng cách đọc thanh ghi RCREG.
+ Nếu bất kỳ lỗi nào xuất hiện, xóa lỗi bằng cách xóa bít CREN.
+ Nếu sử dụng ngắt, cần chắc chắn rằng bít GIE và PEIE của thanh ghi INTCON
đã được đặt.
Hình 47
Quá trình nhận ở chế độ đồng bộ chủ (SREN)
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
Bảng 9
Các thanh ghi liên quan tơi quá trình nhận ở chế độ đồng bộ chủ
3.4.2 EUSART ở chế độ đồng bộ tớ
Chế độ đồng bộ tớ được cài đặt bằng cách xóa bít CSRC (TXSTA<7>). Chế
độ này khác vơi chế độ đồng bộ chủ là nó lấy xung đồng bộ từ bộ tạo xung baud
bên ngoài đến chân ở chân CK in. Điều này cho phép chuyển đổi hoặc nhận dữ liệu
trong bất kỳ chế độ nguồn thấp.
3.4.2.1 Quá trình truyền ở chế độ đồng bộ tớ
Hoạt động ở chế độ đồng bộ chủ và đồng bộ tớ là đồng nhất. Trừ trong
trường hợp ở chế độ ngủ.
Nếu 2 word dữ liệu được ghi đến thanh ghi TXREG và sau đó chế độ sleep được
thực hiện, theo sau no sẽ là :
+ word dữ liệu đầu tiên sẽ ngay lập tức được chuyển tới thanh ghi TSR và
truyền.
+ word dữ liệu thứ hai sẽ giữ lại trong thanh ghi TXREG.
+ Bít cờ TXIF sẽ không được đặt
+ Khi word đầu tiên được dịch ra thanh ghi TSR, thanh ghi TXREG sẽ
Chuyển word thứ hai tới thanh ghi TSR và cờ TXIF sẽ đặt.
+ Nếu bít cho phép TXIE được đặt, ngắt sẽ đánh thức vi điều khiển từ chế
độ ngủ, nếu bít ngăt toàn cục được cho phép thì chương trình sẽ nhảy tới
vector ngắt.
Các bước thực hiện ở chế độ đồng bộ tớ :
+ Cho phép cổng nối tiếp hoạt động ở chế độ đồng bộ tớ bằng cách đặt các bít
SYNC, SPEN và xóa bít CSRC
+ Xóa bít CREN và SREN
+ Nếu muốn ngắt thì đặt bít cho phép TXIE .
+ Nếu muốn truyền 9 bít thì đặt bít TX9
+ Cho phép truyền bằng cách cài đặt bít cho phép TXEN.
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
+ Nếu lựa chon truyền 9 bít thì bít thứ 9 được đọc ở bít TX9D
+ Bắt đầu truyền bằng cách cập nhật dữ liệu vào thanh ghi TXREG
+ Nếu sử dụng ngắt, chắc chắn rằng bít GIE và PEIE trong thanh ghi INTCON
được đặt.
Bảng 10
Các thanh ghi liên quan tới quá trình truyền ở chế độ đông bộ tớ
3.4.2.2 Quá trình nhận ở chế độ đông bộ tớ
Hoạt động ở chế độ đồng bộ chủ và đồng bộ tớ là đồng nhất. Trừ trong
trường hợp ở chế độ ngủ hoặc bất kỳ chế độ nghỉ nào. Bít SREN thì không được sử
dụng trong chế độ này.
Quá trình nhận được cho phép bằng cách cài đặt bít CREN trước khi vào chế độ
ngủ hoặc bất kỳ chế độ nghỉ nào. 1 word dữ liệu có thể nhận trong chế độ nguồn
thấp. Mỗi lần nhận 1 word dữ liệu được nhận vào, thanh ghi RSR sẽ chuyển dữ liệu
tới thanh ghi RCREG, nếu bít cho phép RCIE được đặt, ngắt tạo ra sẽ đánh thức vi
điều khiển từ chế độ nguồn thấp. Nếu ngắt toàn cục được cho phép, chuong trình sẽ
nhảy tới vector ngắt.
Các bước thực hiện ở chế độ đồng bộ tớ :
+ Cho phép cổng nối tiếp hoạt động ở chế độ đồng bộ tớ bằng cách đặt các bít
SYNC, SPEN và xóa bít CSRC
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
+ Nếu muốn ngắt thì đặt bít cho phép ngắt RCIE
+ Nếu muốn nhận 9 bít thì đặt bít RX9
+ Cho phép nhận bằng cách đặt bít CREN
+ Bít cờ RCIF sẽ được đặt khi nhận hoàn thành, 1 ngắt sẽ tạo ra nếu bít cho Phép
RCIE đã được đặt.
+ Đọc thanh ghi RCSTA lấy bít thứ 9 (nếu cho phép) và xác định bất kỳ lỗi nào
xuất hiện trong thời gian nhận.
+ Đọc 8 bít dữ liệu đã nhận được bằng cách đọc thanh ghi RCREG
+ Nếu có bất kỳ lỗi nào xuất hiện, xóa lỗi bằng cách xóa bít CREN
+ Nếu sử dụng ngắt thì chắc chắn rằng các bít GIE và PEIE trong thanh ghi
INTCON được đặt.
Bảng 11
Các thanh ghi liên quan tới quá trình nhận ở chế độ đồng bộ tớ.
3.5 ví dụ :
Truyền liên tục ký tự @ 9 ra cổng com .#include<p18f4520.h>#include<stdio.h>#pragma config OSC = HS#pragma config IESO = OFF#pragma config PWRT = OFF#pragma config WDT = OFF
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
#pragma config WDTPS = 32768#pragma config MCLRE = ON#pragma config LVP = OFF#pragma config DEBUG = OFF#pragma config CP0 = OFF#pragma config CP1 = OFF#pragma config CPB = OFF#pragma config CPD = OFF#pragma config WRT0 = OFF#pragma config WRT1 = OFF#pragma config WRTB = OFF#pragma config WRTC = OFF#pragma config WRTD = OFF#pragma config EBTR0 = OFF#pragma config EBTR1 = OFF#pragma config EBTRB = OFFint j=0,k=0;volatile unsigned char count;void delay(unsigned long int t){unsigned long int i;for(i=0;i<=t;i++);}
void Init_UART(void) { TXSTA = 0b00100100; BAUDCON = 0b00000000; SPBRG =25; RCSTA = 0b10010000;
}
void KIEMTRA(unsigned int a){
while(TXSTAbits.TRMT==0);TXREG = a;
}
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
void main(void){
TXSTAbits.TRMT=0;TRISA=0X00;TRISC = 0b11000000; ADCON1=0XFF;Init_UART();delay(10000);while(1){
KIEMTRA(64); delay(3000);
KIEMTRA(57);KIEMTRA(32);
delay(3000);delay(10000);}
}
4. Modul thí nghiệm :
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
4.1 Sơ đồ nguyên lý :
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
4.2 Sơ đồ mạch in :