119
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

Bao cao thuc tap pic18 f4520

Embed Size (px)

Citation preview

Page 1: Bao cao thuc tap pic18 f4520

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).

Page 2: Bao cao thuc tap pic18 f4520

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

Page 3: Bao cao thuc tap pic18 f4520

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.

Page 4: Bao cao thuc tap pic18 f4520

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

Page 5: Bao cao thuc tap pic18 f4520

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

Page 6: Bao cao thuc tap pic18 f4520

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

Page 7: Bao cao thuc tap pic18 f4520

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.

Page 8: Bao cao thuc tap pic18 f4520

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ớ )

Page 9: Bao cao thuc tap pic18 f4520

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.

Page 10: Bao cao thuc tap pic18 f4520

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)

Page 11: Bao cao thuc tap pic18 f4520

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

Page 12: Bao cao thuc tap pic18 f4520

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ủ

Page 13: Bao cao thuc tap pic18 f4520

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.

Page 14: Bao cao thuc tap pic18 f4520

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

Page 15: Bao cao thuc tap pic18 f4520

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

Page 16: Bao cao thuc tap pic18 f4520

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ỉ.

Page 17: Bao cao thuc tap pic18 f4520

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.

Page 18: Bao cao thuc tap pic18 f4520

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.

Page 19: Bao cao thuc tap pic18 f4520

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.

Page 20: Bao cao thuc tap pic18 f4520

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)

Page 21: Bao cao thuc tap pic18 f4520

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.

Page 22: Bao cao thuc tap pic18 f4520

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.

Page 23: Bao cao thuc tap pic18 f4520

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.

Page 24: Bao cao thuc tap pic18 f4520

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

Page 25: Bao cao thuc tap pic18 f4520

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.

Page 26: Bao cao thuc tap pic18 f4520

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

Page 27: Bao cao thuc tap pic18 f4520

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.

Page 28: Bao cao thuc tap pic18 f4520

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

Page 29: Bao cao thuc tap pic18 f4520

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

Page 30: Bao cao thuc tap pic18 f4520

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

Page 31: Bao cao thuc tap pic18 f4520

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.

Page 32: Bao cao thuc tap pic18 f4520

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>)

Page 33: Bao cao thuc tap pic18 f4520

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 )

Page 34: Bao cao thuc tap pic18 f4520

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 )

Page 35: Bao cao thuc tap pic18 f4520

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 )

Page 36: Bao cao thuc tap pic18 f4520

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

Page 37: Bao cao thuc tap pic18 f4520

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.

Page 38: Bao cao thuc tap pic18 f4520

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

Page 39: Bao cao thuc tap pic18 f4520

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

Page 40: Bao cao thuc tap pic18 f4520

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 :

Page 41: Bao cao thuc tap pic18 f4520

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

Page 42: Bao cao thuc tap pic18 f4520

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

Page 43: Bao cao thuc tap pic18 f4520

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.

Page 44: Bao cao thuc tap pic18 f4520

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

Page 45: Bao cao thuc tap pic18 f4520

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ì :

Page 46: Bao cao thuc tap pic18 f4520

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.

Page 47: Bao cao thuc tap pic18 f4520

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

Page 48: Bao cao thuc tap pic18 f4520

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

Page 49: Bao cao thuc tap pic18 f4520

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)

Page 50: Bao cao thuc tap pic18 f4520

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

Page 51: Bao cao thuc tap pic18 f4520

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;

Page 52: Bao cao thuc tap pic18 f4520

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;

Page 53: Bao cao thuc tap pic18 f4520

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){

Page 54: Bao cao thuc tap pic18 f4520

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;

Page 55: Bao cao thuc tap pic18 f4520

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;

Page 56: Bao cao thuc tap pic18 f4520

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

Page 57: Bao cao thuc tap pic18 f4520

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

Page 58: Bao cao thuc tap pic18 f4520

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

Page 59: Bao cao thuc tap pic18 f4520

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.

Page 60: Bao cao thuc tap pic18 f4520

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

Page 61: Bao cao thuc tap pic18 f4520

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>).

Page 62: Bao cao thuc tap pic18 f4520

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

Page 63: Bao cao thuc tap pic18 f4520

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ộ

Page 64: Bao cao thuc tap pic18 f4520

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

Page 65: Bao cao thuc tap pic18 f4520

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ỏ.

Page 66: Bao cao thuc tap pic18 f4520

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ộ

Page 67: Bao cao thuc tap pic18 f4520

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

Page 68: Bao cao thuc tap pic18 f4520

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

Page 69: Bao cao thuc tap pic18 f4520

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ộ

Page 70: Bao cao thuc tap pic18 f4520

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.

Page 71: Bao cao thuc tap pic18 f4520

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ị

Page 72: Bao cao thuc tap pic18 f4520

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à

Page 73: Bao cao thuc tap pic18 f4520

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.

Page 74: Bao cao thuc tap pic18 f4520

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ủ

Page 75: Bao cao thuc tap pic18 f4520

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

Page 76: Bao cao thuc tap pic18 f4520

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)

Page 77: Bao cao thuc tap pic18 f4520

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.

Page 78: Bao cao thuc tap pic18 f4520

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

Page 79: Bao cao thuc tap pic18 f4520

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

Page 80: Bao cao thuc tap pic18 f4520

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;

}

Page 81: Bao cao thuc tap pic18 f4520

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 :

Page 82: Bao cao thuc tap pic18 f4520

Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử

4.1 Sơ đồ nguyên lý :

Page 83: Bao cao thuc tap pic18 f4520

Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử

4.2 Sơ đồ mạch in :