Khóa luận Thu thập dữ liệu nhiệt độ môi trường trên cở sở dùng vi điều khiển PIC18F458

Khóa luận đã xây dựng được hệ thống thu thập số liệu đo lường trên cở sở dùng vi điều khiển PIC18F458. Với ứng dụng cụ thể là thu thập dữ liệu nhiệt độ môi trường. Hệ thống được xây dựng dựa trên việc kết hợp nhiều khối thiết bị ngoại vi khác, bao gồm bàn phím PS/2 cho phép nhập dữ liệu có thể là địa điểm của khu vực đặt hệ thống.v.v., đồng hồ thời gian thực dựa trên vi mạch DS1307 cho phép cập nhật thời gian cho hệ thống với đồng hồ này thông chỉ cần cài đặt một lần đồng hồ sẽ chạy cho tới khi không còn một nguồi nuôi nào, khối giao tiếp thẻ nhớ MMC lưu trữ tất cả dữ liệu mà người sử dụng cần với mục đích sử dụng hệ thống ví dụ địa điểm đặt hệ thống, thông tin về nhiệt độ đo được cập nhật cùng thời gian của hệ thống, và cuối cùng là khối hiển thị dùng LCD 16 cột 2 dòng hiển thị cùng lúc 32 ký tự, thể hiện những thông tin người thiết lập hệ thống muốn thông báo trong quá trình kiểm tra hoặc khi sử dụng . Tất cả hệ thống được lắp ráp trên một bo mạch tương đối nhỏ gọn.

doc92 trang | Chia sẻ: ngtr9097 | Ngày: 11/05/2013 | Lượt xem: 1434 | Lượt tải: 5download
Bạn đang xem nội dung tài liệu Khóa luận Thu thập dữ liệu nhiệt độ môi trường trên cở sở dùng vi điều khiển PIC18F458, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
LỜI CẢM ƠN Lời đầu tiên của bản khóa luận này cho phép em được bày tỏ lời cảm ơn sâu sắc tới PGS. TS Ngô Diên Tập, người đã tận tình hướng dẫn chỉ bảo em trong suốt thời gian em làm khóa luận. Em xin chân thành cảm ơn sâu sắc tới các thầy cô giáo trong Trường Đại học Công Nghệ - ĐHQGHN đã chỉ bảo, dạy dỗ và cung cấp những kiến thức cơ bản và chuyên môn trong suốt 4 năm qua và tạo điều kiện thuận lợi để em hoàn thành bản khóa luận này. Cuối cùng em xin gửi lời cảm ơn tới gia đình, bạn bè đã nhiệt tình giúp đỡ và động viên em hoàn thành khóa luận này. Xin chúc thầy cô giáo và các bạn sức khỏe, hạnh phúc. Hà nội, tháng 05 năm 2008 Sinh viên: Nguyễn Văn Cường TÓM TẮT NỘI DUNG Khóa luận đã xây dựng được hệ thống thu thập số liệu đo lường trên cở sở dùng vi điều khiển PIC18F458. Với ứng dụng cụ thể là thu thập dữ liệu nhiệt độ môi trường. Hệ thống được xây dựng dựa trên việc kết hợp nhiều khối thiết bị ngoại vi khác, bao gồm bàn phím PS/2 cho phép nhập dữ liệu có thể là địa điểm của khu vực đặt hệ thống.v.v., đồng hồ thời gian thực dựa trên vi mạch DS1307 cho phép cập nhật thời gian cho hệ thống với đồng hồ này thông chỉ cần cài đặt một lần đồng hồ sẽ chạy cho tới khi không còn một nguồi nuôi nào, khối giao tiếp thẻ nhớ MMC lưu trữ tất cả dữ liệu mà người sử dụng cần với mục đích sử dụng hệ thống ví dụ địa điểm đặt hệ thống, thông tin về nhiệt độ đo được cập nhật cùng thời gian của hệ thống, và cuối cùng là khối hiển thị dùng LCD 16 cột 2 dòng hiển thị cùng lúc 32 ký tự, thể hiện những thông tin người thiết lập hệ thống muốn thông báo trong quá trình kiểm tra hoặc khi sử dụng…. Tất cả hệ thống được lắp ráp trên một bo mạch tương đối nhỏ gọn. MỤC LỤC LỜI CẢM ƠN 1 TÓM TẮT NỘI DUNG 2 CHƯƠNG 1: TỔNG QUAN VỀ VẤN ĐỀ NGHIÊN CỨU 7 1.1 Tổng quan về hệ thống đo lường và điều khiển. 7 1.2 Hệ thống đo lường nhiệt độ. 8 CHƯƠNG 2: VI ĐIỀU KHIỂN PIC18F458 10 2.1 Tổng quan về vi điều khiển PIC. 10 2.1.1 Sơ đồ chân của vi điều khiển PIC18F458. 11 2.1.2 Một vài thông số về vi điều khiển PIC18F458. 11 2.1.2.1 CPU theo kiến trúc RISC 11 2.1.2.2 Các đặc tính ngoại vi. 11 2.2 Các ứng dụng được sử dụng trong khóa luận. 12 2.2.1 Bộ chuyển đổi tương tự số ADC. 12 2.2.2 Truyền nối tiếp đồng bộ SPI. 15 2.2.3 Truyền nối tiếp đồng bộ I2C. 18 CHƯƠNG 3: CẢM BIẾN NHIỆT ĐỘ VÀ VI MẠCH LM35 20 3.1 Nhiệt độ và ý nghĩa của đo nhiệt độ. 20 3.2 Cảm biến nhiệt độ LM35. 20 3.3.1 Một số đặc tính của LM35. 20 3.3.2 Sơ đồ ghép nối với vi điều khiển. 21 3.3.3 Xử lý và tính toán kết quả 21 CHƯƠNG 4: BÀN PHÍM PS/2 VÀ GIAO TIẾP BÀN PHÍM VỚI VI ĐIỀU KHIỂN 23 4.1 Bàn phím PS/2. 23 4.2 Giao diện vật lý. 23 4.3 Truyền nhận dữ liệu. 24 4.2.1 Thông tin từ bàn phím tới host. 24 4.2.2 Thông tin từ host tới bàn phím. 26 4.3 Mã quét. 27 4.4.1 Make Codes, Break Codes, và Typematic Repeat 28 4.4.1.1 Make code. 28 4.4.1.2 Break code. 28 4.4.1.3 Typematic. 29 4.4 Cài đặt. 29 4.4.1 Quá trình khởi động. 29 4.4.2 Các lệnh thiêt lập. 30 4.5 Mạch điều khiển bàn phím i8042. 31 4.6 PIC điều khiển bàn phím. 32 4.6.1 Sơ đồ ghép nối Keyboard PS/2 với PIC 18F452. 32 4.6.2 Khởi tạo giao tiếp và các hàm chức năng. 32 4.6.2.1 Khởi tạo giao tiếp. 32 4.6.2.2 Các hàm chức năng sử dụng trong chương trình. 33 CHƯƠNG 5: ĐỒNG HỒ THỜI GIAN THỰC 34 5.1 Mô tả chung về DS1307 34 5.2 Hoạt động của các chân. 35 5.3 Tổ chức bộ nhớ RAM của DS1307 35 5.3.1 Các thanh ghi thời gian của DS1307. 36 5.3.2 Thanh ghi điều khiển. 36 5.3 Cấu hình phần cứng. 37 5.4 Truyền dữ liệu theo chuẩn I2C. 38 5.5.1 Ghi dữ liệu vào DS1307. 38 5.5.2 Đọc dữ liệu từ DS1307. 39 5.5 Sơ đồ ghép nối PIC với DS1307 theo chuẩn I2C 40 5.6 Sơ đồ khối qúa trình khởi tạo và các hàm chức năng cho DS1307. 41 5.6.1 Khởi tạo đồng hồ thời gian thực. 41 5.6.2 Các hàm chức năng. 41 5.6.2.1 Hàm cài đặt thời gian cho đồng hồ. 42 5.6.2.2 Hàm cập nhật thời gian từ đồng hồ. 42 5.7 Giao tiếp I2C mềm. 43 5.7.1 Các bước thực hiện. 43 5.7.2 Hàm thư viện của khối I2C mềm. 43 CHƯƠNG 6: MMC VÀ ỨNG DỤNG ĐỌC GHI DỮ LIỆU 46 6.1 Chuẩn giao tiếp của MMC. 47 6.1.1 MultiMediaCard Mode. 47 6.1.2 SPI Mode. 48 6.2 Sơ đồ ghép nối MMC với PIC và một số linh kiện được sử dụng. 50 6.2.1 Sơ đồ ghép nối. 50 6.2.2 CD4050 và LM1117-3.3V. 50 6.2.2.1 CD4050. 50 6.2.2.2 LM1117-3.3V. 51 6.3 Đặc tính của MMC trong chuẩn SPI. 52 6.3.1 Các thanh ghi của MMC. 53 6.3.2 Định dạng khung lệnh của MMC. 53 6.3.3 Các lệnh được sử dụng. 54 6.3.3.1 Lớp các lệnh sử dụng. 54 6.3.3.2 Chi tiết các lệnh được sử dụng. 55 6.3.4 Đáp ứng của các lênh. 56 6.4 Khởi tạo MMC trong chế độ SPI. 57 6.4.1 Thiết lập lại phần mềm. 57 6.4.2 Khởi tạo. 58 6.5 Quá trình đọc ghi khối dữ liệu đối với MMC trong SPI mode. 60 6.6 Hệ thống tệp tin. 61 6.6.1 Master Boot Record. 63 6.6.1.1 Mục phân vùng trên MBR. 63 6.6.2 Sector khởi động. 64 6.6.3 Thư mục gốc. 65 6.6.5 Sử dụng hàm khi định dạng thẻ theo FAT16. 67 CHƯƠNG 7: LCD 71 7.1 Giới thiệu LCD. 71 7.1.1 Bảng mô tả các chân của LCD: 72 7.1.2 RAM chứa dữ liệu hiển thị. 72 7.1.3 ROM phát ký tự. 73 7.1.4 Thanh ghi chỉ thị và thanh ghi dữ liệu. 74 7.2 Lệnh và chỉ thị. 74 7.3 Khởi tạo LCD. 76 7.4 Các hàm thao tác cơ bản với LCD. 78 7.4.1 Cờ bận và đọc cờ bận. 78 7.4.2 Gửi lệnh và dữ liệu đến LCD. 79 7.4.3 Cài đặt vị trí con trỏ trên LCD. 79 7.4.4 Gửi dữ liệu tới LCD. 80 7.5 LCD hoạt động ở chế độ 4 bit. 81 7.5.1 Khởi tạo LCD ở chế độ 4 bit. 82 7.5.2 Gửi lệnh và dữ liệu tới LCD. 82 CHƯƠNG 8: KẾT QUẢ THỰC NGHIỆM 84 KẾT LUẬN 88 Ứng dụng. 88 Hướng phát triển. 88 PHỤ LỤC 1 : Sơ đồ nguyên lý 90 PHỤ LỤC 2: Keyboard Scan Codes: Set 2 91 TÀI LIỆU THAM KHẢO 93 CHƯƠNG 1: TỔNG QUAN VỀ VẤN ĐỀ NGHIÊN CỨU 1.1 Tổng quan về hệ thống đo lường và điều khiển. Hệ thông đo lường và điều khiển là một hệ thống tập hợp các thiết bị kỹ thuật có cùng một nhiệm vụ, cùng một thuật toán chức năng làm sao để thu nhận được thông tin, biến đổi nó, gia công và chuyển nó thành một dạng mà con người có thể thu nhận được và đưa đến bộ điều khiển.  Hình 1.1: Sơ đồ khối của hệ thống Để có một hệ thống đo đạt hiệu quả và phù hợp với công việc thì việc thiết kế một mô hình ban đầu rất quan trọng nó ảnh hưởng đến toàn bộ công việc sau này của chúng ta. Trong thực tế có nhiều mô hình cấu trúc như là mô hình nối tiếp, mô hình song song, mô hình nối tiếp song song.v.v.. Mỗi mô hình được ứng dụng trong từng trường hợp nhưng tùy thuộc vào yêu cầu của công việc chúng ta phải lựa chọn một mô hình cho phù hợp. Yêu cầu về một hệ thống đo và thu thập thông tin trong công nghiệp là cần phải đạt độ chính xác cao, khả năng đo được nhiều kênh, có thể kết nối được với nhiều thiết bị khác, lượng dữ liệu lưu trữ được trong quá trình đo phải lớn để có thể đánh giá được sự biến đổi của đối tượng trong một thời gian dài từ đo đưa ra được những phương án điều khiển phù hợp. 1.2 Hệ thống đo lường nhiệt độ.  Hình 1.2: Sơ đồ khối của hệ thống đo lường nhiệt độ. Khóa luận đã khảo sát đối tượng là nhiệt độ môi trường. Một sensor nhiệt độ được sử dụng với mục đích cảm nhận. Đầu ra là giá trị điện áp tùy thuộc vào sự biến đổi của đối tượng, được đưa vào bộ biến đổi ADC chuyển thành các giá trị số. Tiếp tục vi điều khiển đảm nhận làm nhiệm vụ tính toán và xử lý, kết quả của quá trình này được hiển thị thông qua LCD để quan sát. Trong khóa luận này đã ứng dụng thêm mạch giao tiếp với thẻ nhớ MMC qua đó ta có thể lưu trữ nhiều giá trị nhiệt độ đo được mà ít phải quan tâm đến việc đầy bộ nhớ như việc ghép nối với các EPROM truyền thống. Thêm một lợi điểm nữa của việc dùng thẻ nhớ là ta có thể tháo lắp và đọc các giá trị đã ghi được một cách rất đễ dàng. Không chỉ là đo nhiệt độ hiển thị, và lưu giá trị nhiệt độ. Khóa luận đã phát triển thêm các giao tiếp với bàn phím PS/2 và đồng hồ thời gian thực. Với ghép nối PS/2 cho phép ta nhập các dữ liệu, thông tin về địa điểm đặt đầu đo, thông tin về hệ thống.v.v..Còn đồng hồ sẽ cho biết thông tin về thời gian mà nhiệt độ được đo. Tất cả dữ liệu nhập từ bàn phím và thông tin về thời gian cũng như nhiệt độ đo được sẽ được lưu vào thẻ nhớ. Với một hệ thống với nhiều đầu đo đặt tại nhiều vị trí hoặc khi triển khai hệ thống trên một phạm vi rộng, thì việc kết hợp những giao tiếp như trên sẽ rất có lợi cho việc quản lý và giám sát các thiết bị. ================================================= CHƯƠNG 2: VI ĐIỀU KHIỂN PIC18F458 2.1 Tổng quan về vi điều khiển PIC. Hiện nay trên thị trường có rất nhiều họ vi điều khiển như 8051, Motorola 68HC, AVR, ARM,... Ngoài họ 8051 được hướng dẫn một cách căn bản ở môi trường đại học, bản thân em đã chọn họ vi điều khiển PIC để mở rộng vốn kiến thức và phát triển các ứng dụng trên công cụ này vì các nguyên nhân sau: Họ vi điều khiển này có thể tìm mua dễ dàng tại thị trường Việt Nam. Giá thành không quá đắt. Có đầy đủ các tính năng của một vi điều khiển khi hoạt động độc lập. Là một sự bổ sung rất tốt về kiến thức cũng như về ứng dụng cho họ vi điều khiển mang tính truyền thống: họ vi điều khiển 8051. Số lượng người sử dụng họ vi điều khiển PIC. Hiện nay tại Việt Nam cũng như trên thế giới, họ vi điều khiển này được sử dụng khá rộng rãi. Điều này tạo nhiều thuận lợi trong quá trình tìm hiểu và phát triển các ứng dụng như: số lượng tài liệu, số lượng các ứng dụng mở đã được phát triển thành công, dễ dàng trao đổi, học tập, dễ dàng tìm được sự chỉ dẫn khi gặp khó khăn,… Sự hỗ trợ của nhà sản xuất về trình biên dịch, các công cụ lập trình, nạp chương trình từ đơn giản đến phức tạp… Các tính năng đa dạng của vi điều khiển PIC, và các tính năng này không ngừng được phát triển. 2.1.1 Sơ đồ chân của vi điều khiển PIC18F458.  Hình 2.1: Sơ đồ chân vi điều khiển PIC18F458. 2.1.2 Một vài thông số về vi điều khiển PIC18F458. 2.1.2.1 CPU theo kiến trúc RISC Bộ nhớ chương trình 32 Kbyte. Bộ nhớ dữ liệu (RAM) 1536 Byte. Hệ thống có thể hoạt động với tốc lên tới 10 triệu lênh trên giây. Tần số thạch anh tối đa là 40 MHz. Các lệnh có độ dài 16 bit và các đường dữ liệu rộng 8 bit. Có các mức độ ưu tiên ngắt khác nhau. 2.1.2.2 Các đặc tính ngoại vi. Dòng sinh cao khoảng 25 mA. Có 3 chân ngắt ngoài. Khối Timer0 có thể là 8 bit hoặc 16 bit timer/counter với bộ chia tần 8 bit. Khối Timer1 là 16 bit timer/counter. Khối Timer2 8 bit timer/counter vói thanh ghi chu kỳ 8 bit (ứng dụng với PWM). Khối Timer3 16 bit timer/counter. Các khối Capture/Compare/PWM. Truyền dữ liệu nối tiếp đồng bộ với khối SPI 3 đường dây, hỗ trợ cả 4 chế độ SPI I2C cho cả chế độ Master và Slave. Khối UART truyền dữ liệu nối tiếp. 8 kênh chuyển đổi AD 10 bit. 2.2 Các ứng dụng được sử dụng trong khóa luận. 2.2.1 Bộ chuyển đổi tương tự số ADC. ADC (Analog to Digital Converter) là bộ chuyển đổi tín hiệu giữa hai dạng tương tự và số. PIC18F458 có 8 ngõ vào analog (RA4:RA0 và RE2:RE0). Hiệu điện thế chuẩn VREF có thể được lựa chọn là VDD, VSS hay hiệu điện thể chuẩn được xác lập trên hai chân RA2 và RA3. Kết quả chuyển đổi từ tín tiệu tương tự sang tín hiệu số là 10 bit số tương ứng và được lưu trong hai thanh ghi ADRESH:ADRESL. Khi không sử dụng bộ chuyển đổi ADC, các thanh ghi này có thể được sử dụng như các thanh ghi thông thường khác. Khi quá trình chuyển đổi hoàn tất, kết quả sẽ được lưu vào hai thanh ghi ADRESH:ADRESL, bit GO/DONE (ADCON0) được xóa về 0 và cờ ngắt ADIF được thiết lập. Qui trình chuyển đổi từ tương tự sang số bao gồm các bước sau: Thiết lập các thông số cho bộ chuyển đổi ADC: Chọn ngõ vào analog, chọn điện áp mẫu (dựa trên các thông số của thanh ghi ADCON1) Chọnh kênh chuyển đổi AD (thanh ghi ADCON0). Chọnh xung clock cho kênh chuyển đổi AD (thanh ghi ADCON0). Cho phép bộ chuyển đổi AD hoạt động (thanh ghi ADCON0). Thiết lập các cờ ngắt cho bộ AD Clear bit ADIF. Set bit ADIE. Set bit PEIE. Set bit GIE. Đợi cho tới khi quá trình lấy mẫu hoàn tất. Bắt đầu quá trình chuyển đổi (set bit GO/DONE). Đợi cho tới khi quá trình chuyển đổi hoàn tất bằng cách: Kiểm tra bit GO/DONE. Nếu = 0, quá trình chuyển đổi đã hoàn tất. Kiểm tra cờ ngắt. Đọc kết quả chuyển đổi và xóa cờ ngắt, set bit GO/DONE (nếu cần tiếp tục chuyển đổi). Tiếp tục thực hiện các bước 1 và 2 cho quá trình chuyển đổi tiếp theo.  Hình 2.2: Cách lưu kết quả chuyển đổi AD.  Hình 2.3: Sơ đồ khối bộ chuyển đổi AD Cần chú ý là có hai cách lưu kết quả chuyển đổi AD, việc lựa chọn cách lưu được điều khiển bởi bit ADFM và được minh họa cụ thể ở hình 2.2. Các thanh ghi liên quan đến bộ chuyển đổi ADC bao gồm: INTCON (địa chỉ 0Bh, 8Bh, 10Bh, 18Bh): cho phép các ngắt (các bit GIE, PEIE). PIR1 (địa chỉ 0Ch): chứa cờ ngắt AD (bit ADIF). PIE1 (địa chỉ 8Ch): chứa bit điều khiển AD (ADIE). ADRESH (địa chỉ 1Eh) và ADRESL (địa chỉ 9Eh): các thanh ghi chứa kết quả chuyển đổi AD. ADCON0 (địa chỉ 1Fh) và ADCON1 (địa chỉ 9Fh): xác lập các thông số cho bộ chuyển đổi AD. PORTA (địa chỉ 05h) và TRISA (địa chỉ 85h): liên quan đến các ngõ vào analog ở PORTA. PORTE (địa chỉ 09h) và TRISE (địa chỉ 89h): liên quan đến các ngõ vào analog ở PORTE. 2.2.2 Truyền nối tiếp đồng bộ SPI. Chuẩn giao tiếp SPI cho phép truyền nhận đồng bộ.  Hình 2.4: Sơ đồ khối SPI Ta cần sử dụng 4 pin cho chuẩn giao tiếp này: RC5/SDO: ngõ ra dữ liệu dạng nối tiếp (Serial Data output). RC4/SDI/SDA: ngõ vào dữ liệu dạng nối tiếp (Serial Data Input). RC3/SCK/SCL: xung đồng bộ nối tiếp (Serial Clock). RA5/AN4/SS/C2OUT: chọn đối tượng giao tiếp (Serial Select) khi giao tiếp ở chế độ Slave mode. Các thanh ghi liên quan đến MSSP khi hoạt động ở chuẩn giao tiếp SPI bao gồm: Thanh ghi điều khiển SSPCON, thanh ghi này cho phép đọc và ghi. Thanh ghi trạng thái SSPSTAT, thanh ghi này chỉ cho phép đọc và ghi ở 2 bit trên, 6 bit còn lại chỉ cho phép đọc. Thanh ghi đóng vai trò là buffer truyền nhận SSPBUF, dữ liệu truyền đi hoặc nhận được sẽ được đưa vào thanh ghi này. SSPBUF không có cấu trúc đệm hai lớp (doubled buffer), do đó dữ liệu ghi vào thanh ghi SSPBUF sẽ lập tức được ghi vào thanh ghi SSPSR. Thanh ghi dịch dữ liệu SSPSR dùng để dịch dữ liệu vào hoặc ra. Khi 1 byte dữ liệu được nhận hoàn chỉnh, dữ liệu sẽ từ thanh ghi SSPSR chuyển qua thanh ghi SSPBUF và cờ hiệu được set, đồng thời ngắt sẽ xảy ra. Khi sử dụng chuẩn giao tiếp SPI trước tiên ta cần thiết lập các chế độ cho giao diện bằng cách đưa các giá trị thích hợp vào hai thanh ghi SSPCON và SSPSTAT. Các thông số cần thiết lập bao gồm: Master mode hay Slave mode. Đối với Master mode, xung clock đồng bộ sẽ đi ra từ chân RC3/SCK/SCL. Đối với Slave mode, xung clock đồng bộ sẽ được nhận từ bên ngoài qua chân RC3/SCK/SCL. Các chế độ của Slave mode. Mức logic của xung clock khi ở trang thái tạm ngưng quá trình truyền nhận (Idle). Cạnh tác động của xung clock đồng bộ (cạnh lên hay cạnh xuống). Tốc độ xung clock (khi hoạt động ở Master mode). Thời điểm xác định mức logic của dữ liệu (ở giữa hay ở cuối thời gian 1 bit dữ liệu được đưa vào). Master mode, Slave mode và các chế độ của Slave mode được điều khiển bởi các bit SSPM3:SSPM0 (SSPCON). MSSP bao gồm một thanh ghi dịch dữ liệu SSPSR và thanh ghi đệm dữ liệu SSPBUF. Hai thanh ghi này tạo thành bộ đệm dữ liệu kép (doubled-buffer). Dữ liệu sẽ được dịch vào hoặc ra qua thanh ghi SSPSR, bit MSB được dịch trước. Đây là một trong những điểm khác biệt giữ hai giao diện MSSP và USART (USART dịch bit LSB trước). Trong quá trình nhận dữ liệu, khi dữ liệu đưa vào từ chân RC4/SDI/SDA trong thanh ghi SSPSR đã sẵn sàng (đã nhận đủ 8 bit), dữ liệu sẽ được đưa vào thanh ghi SSPBUF, bit chỉ thị trạng thái bộ đệm BF (SSPSTAT) sẽ được set để báo hiệu bộ đệm đã đầy, đồng thời cờ ngắt SSPIF (PIR1) cũng được set. Bit BF sẽ tự động reset về 0 khi dữ liệu trong thanh ghi SSPBUF được đọc vào. Bộ đệm kép cho phép đọc tiếp byte tiếp theo trước khi byte dữ liệu trước đó được đọc vào. Tuy nhiên ta nên đọc trước dữ liệu từ thanh ghi SSPBUF trước khi nhận byte dữ liệu tiếp theo. Quá trình truyền dữ liệu cũng hoàn toàn tương tự nhưng ngược lại. Dữ liệu cần truyền sẽ được đưa vào thanh ghi SSPBUF đồng thời đưa vào thanh ghi SSPSR, khi đó cờ hiệu BF được set. Dữ liệu được dịch từ thanh ghi SSPSR và đưa ra ngoài qua chân RC5/SDO. Ngắt sẽ xảy ra khi quá trình dịch dữ liệu hoàn tất. Tuy nhiên dữ liệu trước khi được đưa ra ngoài phải được cho phép bởi tín hiệu từ chân RA5/SS . Chân này đóng vai trò chọn đối tượng giao tiếp khi SPI ở chế độ Slave mode. Khi quá trình truyền nhận dữ liệu đang diễn ra, ta không được phép ghi dữ liệu vào thanh ghi SSPBUF. Thao tác ghi dữ liệu này sẽ set bit WCON (SSPCON). Một điều cần chú ý nữa là thanh ghi SSPSR không cho phép truy xuất trực tiếp mà phải thông qua thanh ghi SSPBUF. Cổng giao tiếp của giao diện SPI được điều khiển bởi bit SSPEN (SSPSON). Bên cạnh đó cần điều khiển chiều xuất nhập của PORTC thông qua thanh ghi TRISC sao cho phù hợp với chiều của giao diện SPI. Cụ thể như sau: RC4/SDI/SDA sẽ tự động được điều khiển bởi khối giao itếp SPI. RS5/SDO là ngõ ra dữ liệu, do đó cần clear bit TRISC. Khi SPI ở dạng Master mode, cần clear bit TRISC để cho phép đưa xung clock đồng bộ ra chân RC3/SCK/SCL. Khi SPI ở dạng Slave mode, cần set bit TRISC để cho phép nhận xung clock đồng bộ từ bên ngoài qua chân RC3/SCK/SCL. Set bit TRISC để cho phép chân RA5/AN4/SS/C2OUT nhận tín hiệu điều khiển truy xuất dữ liệu khi SPI ở chế độ Slave mode.  Hình 2.5: Sơ đồ ghép nối theo chuẩn SPI. Theo sơ đồ kết nối này, khối Master sẽ bắt đầu quá trình truyền nhận dữ liệu bằng cách gửi tín hiệu xung đồng bộ SCK. Dữ liệu sẽ 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 Master và Slave nên được ấn định chung các qui tắc tác động của xung clock đồng bộ để dữ liệu có thể dịch chuyển đồng thời. 2.2.3 Truyền nối tiếp đồng bộ I2C. Đây là một dạng khác của MSSP. Chuẩn giao tiếp I2C cũng có hai chế độ Master, Slave và cũng được kết nối với ngắt. I2C sẽ sử dụng 2 pin để truyền nhận dữ liệu: RC3/SCK/SCL: chân truyền dẫn xung clock. RC4/SDI/SDA: chân truyền dẫn dữ liệu. Các khối cơ bản trong sơ đồ khối của I2C không có nhiều khác biệt so với SPI. Tuy nhiên I2C còn có thêm khối phát hiện bit Start và bit Stop của dữ liệu (Start and Stop bit detect) và khối xác định địa chỉ (Match detect). Các thanh ghi liên quan đến I2C bao gồm: Thanh ghi SSPCON và SSPCON2: điều khiển MSSP. Thanh ghi SSPSTAT: thanh ghi chứa các trạng thái hoạt động của MSSP. Thanh ghi SSPBUF: buffer truyền nhận nối tiếp. Thanh ghi SSPSR: thanh ghi dịch dùng để truyền nhận dữ liệu. Thanh ghi SSPADD: thanh ghi chứa địa chỉ của giao diện MSSP. Các thanh ghi SSPCON, SSPCON2 cho phép đọc và ghi. Thanh ghi SSPSTAT chỉ cho phép đọc và ghi ở 2 bit đầu, 6 bit 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 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 ở Slave mode. Khi hoạt động ở Master mode, 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, sau khi nhận được 1 byte dữ liệu hoàn chỉnh, thanh ghi SSPSR sẽ chuyển dữ liệu vào thanh ghi SSPBUF. Thanh ghi SSPSR không đọc và ghi được quá trình truy xuất thanh ghi này phải thông qua thanh ghi SSPBUF. Trong quá trình truyền dữ liệu, dữ liệu cần truyền khi được đưa vào thanh ghi SSPBUF cũng sẽ đồng thời đưa vào thanh ghi SSPSR. I2C có nhiều chế độ hoạt động và được điều khiển bởi các bit SSPCON, bao gồm: I2C Master mode, xung clock = fosc/4*(SSPADD+1). I2C Slave mode, 7 bit địa chỉ. I2C Slave mode, 10 bit địa chỉ. I2C Slvae mode, 7 bit địa chỉ, cho phép ngắt khi phát hiện bit Start và bit Stop. I2C Slave mode, 10 bit địa chỉ, cho phép ngắ