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ề điều kh khiể iểnn các các như : ADC 10 BÍT, ÍT, PWM PWM 10 BÍT, ÍT, EEPR EEPRO OM 25 2566 BYTE, YTE, 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
Trường Đại Học Công Nghiệp Hà Nội
•
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.
•
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á xoá được 100.000 lần. lần. + Bộ nhớ EEPROM với khả năng ghi xoá được 1.000.000 lần. + Flash/Dữ liệu bộ nhớ nhớ EEPROM có thể lưu trữ 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.
Khoa điện tử
Trường Đại Học Công Nghiệp Hà Nội
3. Sơ đồ khối của vi điều khiển pic18f4520
Khoa điện tử
Trường Đại Học Công Nghiệp Hà Nội
4. Sơ đồ khối bộ nhớ dữ liệu pic18f4520
II. Truyền thông nối tiếp
Khoa điện tử
Trường Đại Học Công Nghiệp Hà Nội
Khoa điện tử
1. giới thiệu CHủ SYNCHRONOUS SERIAL PORT (MSSP) MODULE - 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ế độ I 2C Trong chế độ I 2C 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 I 2C. 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.
Trường Đại Học Công Nghiệp Hà Nội
Khoa điện tử
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/ SS /HLVDIN/C2OUT.
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ủ )
Trường Đại Học Công Nghiệp Hà Nội
Khoa điện tử
+ Lựa chọn chế độ tớ (chỉ có trong chế độ 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.
Trường Đại Học Công Nghiệp Hà Nội
Khoa điện tử
0= lấy mẫu dữ liệu vào thời điểm giữa của dữ liệu ra. 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/ A : Dữ liệu hoặc địa chỉ Chỉ sử dụng trong chế độ I 2C . Bít 4
P : bít stop Chỉ sử dụng trong chế độ I 2C.
Bít 3 S : bít bắt đầu Chỉ sử dụng trong chế độ I 2C. Bít 2
R/ W : đọc hoặc ghi thông tin Chỉ sử dụng trong chế độ I 2C.
Bít 1 UA : bít cập nhật địa chỉ Chỉ sử dụng trong chế độ I 2C. 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à
SS
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, động,
SS
SS
không cho phép hoạt
sử dụng như chân vào hoặc ra ).
0100= SPI chế độ tớ (SCK là chân xung clock,
SS
cho phép hoạt động).
0011 : SPI chế độ chủ ( xung clock = đầu ra TMR2/2 ). 0010 : SPI chế độ chủ (xung clock = Fosc/64).
Trường Đại Học Công Nghiệp Hà Nội
Khoa điện tử
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 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,
SS
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. +
SS
: 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
Trường Đại Học Công Nghiệp Hà Nội
Khoa điện tử
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ủ 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ường Đại Học Công Nghiệp Hà Nội
Khoa điện tử
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
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/ SS /HLVDIN/C2OUT
+ Thanh ghi TRISC
: Điều khiển xuất nhập PORTC.
Trường Đại Học Công Nghiệp Hà Nội
+ Thanh ghi SSPBUF
Khoa điện tử
: 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 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
Trường Đại Học Công Nghiệp Hà Nội
Khoa điện tử
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ỉ. + 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.
Trường Đại Học Công Nghiệp Hà Nội
Khoa điện tử
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. 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/ A 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
Trường Đại Học Công Nghiệp Hà Nội
Khoa điện tử
0= không phát hiện bít start Bít 2 R/ W : đọc hoặc ghi thông tin Trong chế độ tớ : 1= đọc. 0= ghi. 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 0= SSPBUF rỗng ( không bao gồm Hình 9
ACK
AC K
và bít stop ). và bít stop ).
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ớ :
Trường Đại Học Công Nghiệp Hà Nội
Khoa điện 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. 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))
Trường Đại Học Công Nghiệp Hà Nội
Khoa điện tử
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)
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
A C K
(duy nhất trong chế độ chủ : truyền
truyền dữ liệu ) 1= chưa nhận được xung
A C K
từ tớ
0= nhận được xung từ tớ. Bít 5 ACKDT : bít dữ liệu 1= không có xung 0= có xung
AC K
(chỉ có trong chế độ chủ : nhận dữ liệu )
ACK
AC K
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
AC K
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ủ )
Trường Đại Học Công Nghiệp Hà Nội
Khoa điện tử
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. 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
ACK
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
Trường Đại Học Công Nghiệp Hà Nội
Khoa điện 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. + Truyền xung
AC K
.
+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/ W . Trong trường hợp này R/ W 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
Trường Đại Học Công Nghiệp Hà Nội
truyền và 1 bít
AC K
Khoa điện 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. 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/ W . Trong trường hợp này bít R/ W sẽ có giá trị la 1. Vời giá trị của bít R/ W 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
AC K
đượ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
AC K
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
ACK
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.
Trường Đại Học Công Nghiệp Hà Nội
Khoa điện tử
+ 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 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
ACK
) . 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
ACK
đượ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 ACK
AC K
(
AC K
=0) và được đặt khi thiết bị tớ không gửi xung
=1). Thiết bị tớ gửi 1 xung
dữ liệu.
ACK
AC K
(
khi nhận đúng địa chỉ của nó hoặc khi nhận
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
ACK
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 (T brg ), 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 lại điều kiện start 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 T BRG chân SCL cũng được đưa lên mức logic cao trong khoảng thời gian T BRG 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 T BRG 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
AC K
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
A C K
để 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
ACK
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 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 SSPADD tại canh xuống của xung clock thứ 8. Nếu kết 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
ACK
đượ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/ W = 0 để so sánh. Byte đầu tiên có định dạng “11110A9A80” “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/ W của byte địa chỉ có giá trị bằng 0 và địa chỉ là đúng. Bít R/ W 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 điều kiện tràn byte địa chỉ tồn tại thi xung NOT
AC K
ACK
). Khi
đượ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/ W của byte địa chỉ được đặt và địa chỉ được chỉ định là đúng. Bít R/ W của thanh ghi SSPSTAT được đặt. Địa chỉ được nhận và được đưa vào trong thanh ghi SSPBUF. 1 xung
ACK
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 ACK
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 ACK
AC K
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 )T cy 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 W = 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
ACK
) 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
AC K
.
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
AC K
ACK
đượ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
AC K
được xuất ra trên chân SDA. Nếu muốn khởi động một xung
AC K
thì
Trường Đại Học Công Nghiệp Hà Nội
Khoa điện tử
bít ACKDT được xóa. Nếu không ta đặt bít ACKDT trước khi bắt đầu chuỗi
ACK
. Khi chân SCL lấy mẫu mức cao, BRG đếm tới T BRG , 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
A C K
đ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 T
BRG ,
chân SCL được đưa lên mức logic cao và sau 1 khoảng thời gian T BRG 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 T BRG 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
ACK
.
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
ACK
đ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ì :
ACK
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
#include #include #include #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.RA0 void 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
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;
Khoa điện tử
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
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;
Khoa điện tử
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
Bảng 3 Tốc độ baud ở các chế độ bất đồng bộ
Khoa điện tử
Trường Đại Học Công Nghiệp Hà Nội
Bảng 4 Tốc độ baud ở các chế độ đồng bộ 3.2.1 Tự động phát hiện tốc độ baud
Khoa điện tử
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
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ộ
Khoa điện tử
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) 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
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ộ
Khoa điện tử
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 #include #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
#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 int 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; }
Khoa điện tử
Trường Đại Học Công Nghiệp Hà Nội
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 :
Khoa điện tử
Trường Đại Học Công Nghiệp Hà Nội
4.1 Sơ đồ nguyên lý :
Khoa điện tử