1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Đề cương lập trình vi điều khiển

139 218 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 139
Dung lượng 5,33 MB

Nội dung

MỤC LỤC TỔNG QUAN VỀ VI ĐIỀU KHIỂN Bài 1: 1.1 Tổng quan vi điều khiển 1.1.1 Sơ đồ tổng quan 1.1.2 Một số dòng vi điều khiển phổ biến 1.2 Vi điều khiển PIC/PIC 16F877A 1.2.1 Kiến trúc PIC 1.2.2 RISC CISC 1.2.3 Các dòng PIC 1.2.4 PIC 16F877A 10 1.2.4.1 Sơ đồ chân/sơ đồ khối 10 1.2.4.2 Tổ chức không gian nhớ 11 1.3 Quy trình phát triển ứng dụng vi điều khiển 15 1.3.1 Ngôn ngữ lập trình 15 1.3.2 Mạch nạp 16 1.3.3 Lập trình cho PIC CCS 16 1.4 Quy trình phát triển ứng dụng 18 Bài 2: CỔNG VÀO RA CỦA PIC 16F877A 19 2.1 Các cổng vào (nhập/xuất) 19 2.1.1 PORT A 19 2.1.2 PORT B 22 2.1.3 PORT C 23 2.1.4 PORT D 25 2.1.5 PORT E 26 2.2 Lập trình điều khiển 27 2.2.1 Các lệnh vào CCS 27 2.2.1.1 Các hàm sử lý bít phép toán 27 2.2.1.2 Các hàm vào 28 2.2.2 Bài tập áp dụng 33 Bài 3: THỰC HÀNH: LẬP TRÌNH ĐIỀU KHIỂN VÀO RA 34 Bài 4: LẬP TRÌNH HIỂN THỊ 35 4.1 Tổng quan led 35 4.2 Kỹ thuật lập trình 36 4.2.1 Phương pháp xuất liệu trực tiếp 38 4.2.2 Phương pháp Quét Led 41 4.3 Tổng quan LCD 44 4.4 Lập trình với LCD 49 4.4.1 Lập trình với Assembly 49 4.5 Lập trình với LCD bit 51 4.6 Lập trình với LCD bit 53 Bài 5: THỰC HÀNH: LẬP TRÌNH HIỂN THỊ 56 Bài 6: BỘ TIMER/COUTER 57 6.1 Tổng quan timer/counter 57 6.2 Hoạt động timer/counter 58 6.3 Các timer/counter 59 6.3.1 Bộ timer 59 6.3.2 Bộ timer 62 6.3.3 Bộ TIMER 66 6.4 Lập trình với CCS 69 6.4.1 Các lệnh ccs 69 Bài 7: THẢO LUẬN VỀ BỘ ĐỊNH THỜI – BỘ ĐẾM 75 7.1 Bộ timer/counter 75 7.2 Câu hỏi tập thảo luận 75 Bài 8: THỰC HÀNH VỀ BỘ ĐỊNH THỜI – BỘ ĐẾM 75 Bài 9: BỘ CHUYỂN ĐỔI TƢƠNG TỰ-SỐ 76 9.1 Tổng quan ADC/DAC 76 9.1.1 Tổng quan 76 9.1.2 Chuyển đổi ADC 76 9.1.3 Một số khái niệm 76 9.1.4 Quy trình chuyển đổi AD 77 9.1.6 Các tiêu kỹ thuật chuyển đổi 81 9.2 Bộ ADC PIC 83 9.2.1 Sơ đồ khối ADC 83 9.2.2 Quy trình chuyển đổi từ tương tự sang số bao gồm bước sau: 84 9.2.3 Lựa chọn nguồn xung cho chuyển đổi ADC 84 9.3 Lập trình với CCS 85 Bài 10: THỰC HÀNH: LẬP TRÌNH BỘ CHUYỂN ĐỔI ADC 89 Bài 11: NGẮT TRÊN PIC 90 11.1 Tổng quan ngắt 90 11.2 Ngắt PIC 90 11.2.1 Cấu trúc chương trình dung ngắt 93 11.2.2 Một số ngắt thường dùng 94 11.3 Lập trình ngắt với CCS 95 11.3.1 Các lệnh phục vụ ngắt 95 11.3.2 dụ áp dụng 97 Bài 12: THỰC HÀNH: LẬP TRÌNH NGẮT 101 Bài 13: BỘ CCP 102 13.1 Bộ CCP 102 13.1.1 Capture 102 13.1.2 Bộ so sánh 102 13.1.3 Bộ PWM (Pulse Width Modulation) 105 13.2 Lập trình với CCS 108 Bài 14: THẢO LUẬN VỀ NGẮT/ADC/CCP 113 Bài 15: THỰC HÀNH: LẬP TRÌNH VỚI BỘ CCP 114 Bài 16: LẬP TRÌNH TRUYỀN THÔNG 115 16.1 Tổng quan 115 16.2 Chuẩn RS232 115 16.3 Lập trình với CCS 119 16.4 Chuẩn giao tiếp SPI 127 16.4.1 Tổng quan 127 16.4.2 Chuẩn SPI Trong vi điêu khiển PIC 16F877A 128 16.5 Chuẩn giao tiếp I2C 129 16.5.1 Giới thiệu chung I2C 129 16.5.2 Đặc điểm giao tiếp I2C 130 16.5.3 Đặc điểm giao tiếp I2C 130 16.5.4 START and STOP conditions 132 16.5.5 Định dạng truyền liệu 133 16.5.6 Định dạng thiết bị chủ tớ 135 16.5.7 Truyền liệu bus I2C, chế độ Master-Slave 135 16.6 Lập trình với CCS 137 Bài 17: THẢO LUẬN VỀ GIAO TIẾP NỐI TIẾP 139 Bài 18: THỰC HÀNH: LẬP TRÌNH GHÉP NỐI 139 Bài 19: THỰC HÀNH: LẬP TRÌNH TỔNG HỢP 139 Bài 1: TỔNG QUAN VỀ VI ĐIỀU KHIỂN 1.1 Tổng quan vi điều khiển 1.1.1 Sơ đồ tổng quan Vi điều khiển hệ thống bao gồm vi xử lý có hiệu suất đủ dùng giá thành thấp (khác với vi xử lý đa dùng máy tính) kết hợp với khối ngoại vi nhớ, mô đun vào/ra, mô đun biến đổi số sang tương tự tương tự sang số (hình 1.2) Ở máy tính mô đun thường xây dựng chíp mạch hình 1.1) Hình 1.1 Sơ đồ tổng quan máy tính Hình 1.2 Sơ đồ tổng quan vi điều khiển 1.1.2 Một số dòng vi điều khiển phổ biến  Họ vi điều khiển Atmel o Dòng 8051 (8031, 8051, 8751, 8951, 8032, 8052, 8752, 8952) o Dòng Atmel AT91 (Kiến trúc ARM THUMB) o Dòng AT90, Tiny & Mega – AVR (Atmel Norway design) o Dòng Atmel AT89 (Kiến trúc Intel 8051/MCS51) o Dòng MARC4  Họ vi điều khiển Microchip o PIC 8-bit (xử lý liệu 8-bit, 8-bit data bus)  Từ lệnh dài 12-bit (Base-line): PIC10F, PIC12F vài PIC16F  Từ lệnh dài 14-bit (Mid-Range Enhance Mid-Range): PIC16Fxxx, PIC16F1xxx  Từ lệnh dài 16-bit (High Performance): PIC18F o PIC 16-bit (xử lý liệu 16-bit)  PIC điều khiển động cơ: dsPIC30F  PIC có DSC: dsPIC33F  Phổ thông: PIC24F, PIC24E, PIC24H o PIC 32-bit (xử lý liệu 32-bit): PIC32MX  Họ vi điều khiển Freescale Semiconductor Từ năm 2004, vi điều khiển phát triển tung thị trường Motorola o Dòng 8-bit  68HC05 (CPU05)  68HC08 (CPU08)  68HC11 (CPU11) o Dòng 16-bit  68HC12 (CPU12)  68HC16 (CPU16)  Freescale DSP56800 (DSPcontroller) o Dòng 32-bit  Freescale 683XX (CPU32)  MPC500  MPC 860 (PowerQUICC)  MPC 8240/8250 (PowerQUICC II)  MPC 8540/8555/8560 (PowerQUICC III)  Họ vi điều khiển Intel o Dòng 8-bit: 8XC42, MCS48, MCS51, 8061, 8xC251 o Dòng 16-bit: 80186/88, MCS96, MXS296 o Dòng 32-bit: 386EX, i960  Họ vi điều khiển STMicroelectronics o aST 62 o ST7 o STM8 o STM32 (Cortex-Mx)  Họ vi điều khiển Philips Semiconductors o LPC2000 o LPC900 o LPC700 1.2 Vi điều khiển PIC/PIC 16F877A 1.2.1 Kiến trúc PIC Cấu trúc phần cứng vi điều khiển thiết kế theo hai dạng kiến trúc: kiến trúc Von Neuman kiến trúc Havard Tổ chức phần cứng PIC thiết kế theo kiến trúc Havard Điểm khác biệt kiếntrúc Havard kiến trúc Von-Neuman cấu trúc nhớ liệu nhớ chương trình Hình 1.3 Kiến trúc Von-Neumann kiến trúc Havard Đối với kiến trúc Von-Neuman, nhớ liệu nhớ chương trình nằm chung nhớ, ta tổ chức, cân đối cách linh hoạt nhớ chương trình nhớ liệu Tuy nhiên điều có ý nghĩa tốc độ xử lí CPU phải cao, với cấu trúc đó, thời điểm CPU tương tác với nhớ liệu nhớ chương trình Như nói kiến trúc Von-Neuman không thích hợp với cấu trúc vi điều khiển Đối với kiến trúc Havard, nhớ liệu nhớ chương trình tách thành hai nhớ riêng biệt Do thời điểm CPU tương tác với hai nhớ, tốc độ xử lí vi điều khiển cải thiện đáng kể Một điểm cần ý tập lệnh kiến trúc Havard tối ưu tùy theo yêu cầu kiến trúc vi điều khiển mà không phụ thuộc vào cấu trúc liệu dụ, vi điều khiển dòng 16F, độ dài lệnh 14 bit (trong liệu tổ chức thành byte), kiến trúc Von-Neuman, độ dài lệnh bội số byte (do liệu tổ chức thành byte) Đặc điểm minh họa cụ thể hìnhVon Neuman kiến trúc Havard 1.2.2 RISC CISC Như trình bày trên, kiến trúc Havard khái niệm so với kiến trúc VonNeuman Khái niệm hình thành nhằm cải tiến tốc độ thực thi vi điều khiển.Qua việc tách rời nhớ chương trình nhớ liệu, bus chương trình bus liệu, CPU lúc truy xuất nhớ chương trình nhớ liệu, giúp tăng tốc độ xử lí vi điều khiển lên gấp đôi Đồng thời cấu trúc lệnh không phụ thuộc vào cấu trúc liệu mà linh động điều chỉnh tùy theo khả tốc độ vi điều khiểnđể tiếp tục cải tiến tốc độ thực thi lệnh, tập lệnh họ vi điều khiển PIC thiết kế cho chiều dài mã lệnh cố định (ví dụ họ 16Fxxxx chiều dài mã lệnh 14 bit) cho phép thực thi lệnh chu kì xung clock ( ngoại trừ số trường hợp đặc biệt lệnh nhảy, lệnh gọi chương trình … cần hai chu kì xung đồng hồ) Điều có nghĩa tập lệnh vi điều khiển thuộc cấu trúc Havard lệnh hơn, ngắn hơn, đơn giản để đáp ứng yêu cầu mã hóa lệnh số lượng bit định Vi điều khiển tổ chức theo kiến trúc Havard gọi vi điều khiển RISC (Reduced Instruction Set Computer) hay vi điều khiển có tập lệnh rút gọn Vi điều khiển thiết kế theo kiến trúc Von-Neuman gọi vi điều khiển CISC (Complex Instruction Set Computer) hay vi điều khiển có tập lệnh phức tạp mã lệnh số cố định mà bội số bit (1 byte) 1.2.3 Các dòng PIC Các kí hiệu vi điều khiển PIC: PIC12xxxx: độ dài lệnh 12 bit PIC16xxxx: độ dài lệnh 14 bit PIC18xxxx: độ dài lệnh 16 bit C: PIC có nhớ EPROM (chỉ có 16C84 EEPROM) F: PIC có nhớ flash LF: PIC có nhớ flash hoạt động điện áp thấp LV: tương tự LF, kí hiệu cũ Bên cạnh số vi điệu khiển có kí hiệu xxFxxx EEPROM, có thêm chữ A cuối flash (ví dụ PIC16F877 EEPROM, PIC16F877A flash) Ngoài có thêm dòng vi điều khiển PIC dsPIC Ở Việt Nam phổ biến họ vi điều khiển PIC hãng Microchip sản xuất  Cách lựa chọn vi điều khiển PIC phù hợp: Trước hết cần ý đến số chân vi điều khiển cần thiết cho ứng dụng Có nhiều vi điều khiển PIC với số lượng chân khác nhau, chí có vi điều khiển có chân, có vi điều khiển 28, 40, 44, … chân Cần chọn vi điều khiển PIC có nhớ flash để nạp xóa chương trình đượcnhiều lần Tiếp theo cần ý đến khối chức tích hợp sẵn vi điều khiển, chuẩn giao tiếp bên Sau cần ý đến nhớ chương trìnhvi điều khiển cho phép Ngoài thông tin cách lựa chọn vi điều khiển PIC tìm thấy sách “Select PIC guide” nhà sản xuất Microchip cung cấp Hình 1.4 Các dòng vi điều khiển PIC 1.2.4 PIC 16F877A 1.2.4.1 Sơ đồ chân/sơ đồ khối Hình 1.5 Sơ đồ chân vi điều khiển PIC 16F877A 10 h dụ áp dụng Sử dụng đường truyền RS232 để lấy liệu từ ADC Sơ đồ mạch dùng PIC16F877 chương trình dụ sau 125 Hình 16.8: Sơ đồ kết nối vi điều khiển CODE: //file name: using_rs232.c //using RS232 to get value from A/D converter //pins connections // A0: Analog input (from 10K variable resistor) #include #device PIC16F877 *=16 ADC=10 #use delay(clock=20000000) //using 10 bit A/D converter //we're using a 20 MHz crystal #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7) int16 value; void AD_Init() //initialize A/D converter { setup_adc_ports(RA0_RA1_RA3_ANALOG); //set analog A0,A1,A3 setup_adc(ADC_CLOCK_INTERNAL); //using internal clock set_adc_channel(0); //input Analog at pin A0 delay_us(10); //sample hold time } void main() 126 input ports: { AD_Init(); //initialize A/D converter while(1) { output_high(PIN_C0); //motor direction output_high(PIN_C3); //brake value=read_adc(); //for changing motor speed printf("A/D value %lu\r", value); } } 16.4 Chuẩn giao tiếp SPI 16.4.1 Tổng quan SPI (Serial Peripheral Interface), SPI bus – Giao diện ngoại vi nối tiếp, bus SPI Chuẩn SPI phát triển Motorola Đây chuẩn đồng nối tiếp để truyền liệu chế độ song công toàn phần (full- duplex) tức thời điểm xảy đồng thời trình truyền nhận Đôi SPI gọi chuẩn giao tiếp dây (Four-wire) SPI giao diện đồng bộ, trình truyền đồng hóa với tín hiệu clock chung, tín hiệu sinh master SPI thường dùng phép vi điều khiển giao tiếp với linh kiện ngoại vi bên nhớ EEPROM với giao tiếp chủ yếu theo kiểu điểmđiểm (point-to-point) Hiện nay, SPI sử dụng nhiều dạng kết nối khác multi-master hay multi-slave 127 Hình 16.9: Một dạng kết nối chuẩn truyền SPI Dưới ta có bảng chức chân chuẩn truyền SPI Bảng 16.3: Bảng chức chân chuẩn truyền SPI Hoạt động: Bước 1: Khi master muốn truyền/nhận liệu, kéo tín hiệu chọn chip /CS xuống mức thấp Bước 2: Master cung cấp clock đồng việc truyền/nhận liệu đường SCK SPI giao thức xử lý song công, liệu truyền từ master slave diễn lúc theo dao động xung SCK 16.4.2 Chuẩn SPI Trong vi điêu khiển PIC 16F877A MSSP ( Master Synchronous Serial Port) giao diện đồng nối tiếp dùng để giao tiếp với thiếtbị ngoại vi (EEPROM, ghi dịch, chuyển đổi ADC,…) hay vi điều khiển khác MSSP hoạt động hai dạng giao tiếp: - SPI (Serial Pheripheral Interface) - I2C (Inter-Intergrated Circuit) 128 Chuẩn giao tiếp SPI cho phép truyền nhận đồng Ta cần sử dụng pin cho chuẩn giao tiếp này: - RC5/SDO: ngõ liệu dạng nối tiếp (Serial Data output) - RC4/SDI/SDA: ngõ vào liệu dạng nối tiếp (Serial Data Input) - RC3/SCK/SCL: xung đồng nối tiếp (Serial Clock) - RA5/AN4/SS/C2OUT: chọn đối tượng giao tiếp (Serial Select) giao tiếp chế độ Slave mode Các ghi liên quan đến MSSP hoạt động chuẩn giao tiếp SPI bao gồm: - Thanh ghi điều khiển SSPCON, ghi cho phép đọc ghi - Thanh ghi trạng thái SSPSTAT, ghi cho phép đọc ghi bit trên, bit lại cho phép đọc - Thanh ghi đóng vai trò buffer truyền nhận SSPBUF, liệu truyền nhận đưa vào tranh ghi SSPBUF cấu trúc đệm hai lớp (doubledbuffer), liệu ghi vào ghi SSPBUF ghi vào ghi SSPSR - Thanh ghi dịch liệu SSPSR dùng để dịch liệu vào Khi byte liệu nhận hoàn chỉnh, liệu từ ghiSSPSR chuyển qua ghi SSPBUF cờ hiệu set, đồng thời ngắt xảy 16.5 Chuẩn giao tiếp I2C 16.5.1 Giới thiệu chung I2C Ngày hệ thống điện tử đại, nhiều ICs hay thiết bị ngoại vi cần phải giao tiếp với ICs hay thiết bị khác – giao tiếp với giới bên Với mục tiêu đạt hiệu cho phần cứng tốt với mạch điện đơn giản, Phillips phát triển chuẩn giao tiếp nối tiếp dây gọi I2C I2C tên viết tắt cụm từ Inter - Intergrated Circuit – Bus giao tiếp IC với I2C phát triển bới Philips, nhiều nhà sản xuất IC giới sử dụng I2C trở thành chuẩn công nghiệp cho giao tiếp điều khiển, kể vài tên tuổi Philips như: Texas Intrument (TI), Maxim‐Dallas, analog Device, National Semiconductor … Bus I2C sử dụng làm bus giao tiếp ngoại vi cho nhiều loại IC khác loại Vi điều khiển 8051, PIC, AVR, ARM, chíp nhớ 129 RAM tĩnh (Static Ram), EEPROM, chuyển đổi tương tự số (ADC), số tương tụ (DAC), IC điểu khiển LCD, LED… Hình 16.10: Bus I2C thiết bị ngoại vi 16.5.2 Đặc điểm giao tiếp I2C Một giao tiếp I2C gồm có dây: Serial Data (SDA) Serial Clock (SCL) SDA đƣờng truyền liệu hƣớng, SCL đƣờng truyền xung đồng hồ theo hƣớng Nhƣ hình vẽ trên, thiết bị ngoại vi kết nối vào đƣờng I2C chân SDA nối với dây SDA bus, chân SCL nối với dây SCL Hình 16.11 Kết nối thiết bị vào bus I2C chế độ chuẩn (Standard mode) chế độ nhanh (Fast mode) 16.5.3 Đặc điểm giao tiếp I2C Mỗi dây SDA hay SCL nối với điện áp dương nguồn cấp thông qua điện trở kéo lên (pull‐up resistor) Sự cần thiết điện 130 trở kéo chân giao tiếp I2C thiết bị ngoại vi thường dạng cực máng hở (open‐drain or open‐collector) Giá trị điện trở khác tùy vào thiết bị chuẩn giao tiếp, thường dao động khoảng 1KΩ đến 4.7KΩ Trở lại với hình 16.10, ta thấy có nhiều thiết bị (ICs) kết nối vào bus I2C, nhiên không xảy chuyện nhầm lẫn thiết bị, thiết bị nhận địa với quan hệ chủ/tớ tồn suốt thời gian kết nối Mỗi thiết bị hoạt đông thiết bị nhận liệu hay vừa truyền vừa nhận Hoạt động truyền hay nhận tùy thuộc vào việc thiết bị chủ (master) hay tớ (slave) Một thiết bị hay IC kết nối với bus I2C, địa (duy nhất) để phân biệt, cấu hình thiết bị chủ (master) hay tớ (slave) Tại lại có phân biệt ? Đó bus I2C quyền điều khiển thuộc thiết bị chủ (master) Thiết bị chủ nắm vai trò tạo xung đồng hồ cho toàn hệ thống, hai thiết bị chủ/tớ giao tiếp thiết bị chủ có nhiệm vụ tạo xung đồng hồ quản lý địa thiết bị tớ suốt trình giao tiếp Thiết bị chủ giữ vai trò chủ động, thiết bị tớ giữ vai trò bị động viêc giao tiếp Hình 16.12 Truyền nhận liệu chủ/tớ Nhìn hình ta thấy xung đồng hồ có hướng từ chủ đến tớ, luồng liệu theo hai hướng, từ chủ đến tớ hay ngược lại tớ đến chủ Về liệu truyền bus I2C Một bus I2C chuẩn truyền 8‐bit liệu có hướng đường truyền với tốc độ 100Kbits/s – Chế độ chuẩn (Standard mode) Tốc độ truyền lên tới 400Kbits/s – Chế độ nhanh (Fast mode) cao 3,4Mbits/s – Chế độ caotốc (High‐speed mode) 131 Một bus I2C hoạt động nhiều chế độ khác nhau: - Một chủ tớ (one master – one slave) - Một chủ nhiều tớ (one master – multi slave) - Nhiều chủ nhiều tớ (Multi master – multi slave) Dù chế độ nào, giao tiếp I2C dựa vào quan hệ chủ/tớ Giả thiết thiết bị A muốn gửi liệu đến thiết bị B, trình thực sau: ‐ Thiết bị A (Chủ) xác định địa thiết bị B (tớ), cừng với việc xác định địa chỉ, thiết bị A định việc đọc hay ghi vào thiết bị tớ ‐ Thiết bị A gửi liệu tới thiết bị B ‐ Thiết bị A kết thúc trình truyền liệu Khi A muốn nhận liệu từ B, trình diễn trên, khác A nhận liệu từ B Trong giao tiếp này, A chủ B tớ Chi tiết việc thiết lập giao tiếp 16.5.4 START and STOP conditions START STOP điều kiện bắt buộc phải có thiết bị chủ muốn thiết lập giao tiếp với thiết bị mạng I2C START điều kiện khởi đầu, báo hiệu bắt đầu giao tiếp, STOP báo hiệu kết thúc giao tiếp Hình mô tả điều kiện START STOP Ban đầu chưa thực trình giao tiếp, hai đường SDA SCL mức cao (SDA = SCL = HIGH) Lúc bus I2C coi dỗi (“bus free”), sẵn sàng cho giao tiếp Hai điều kiện START STOP thiếu việc giao tiếp thiết bị I2C với 132 Hình 16.13: Điều kiện Start/Stop BUS I2C Điều kiện START: chuyển đổi trạng thái từ cao xuống thấp đường SDA đường SCL mức cao (cao = 1; thấp = 0) báo hiệu điều kiện START Điều kiện STOP: Một chuyển đổi trạng thái từ mức thấp lên cao đường SDA đường SCL mức cao Cả hai điều kiện START STOP tạo thiết bị chủ Sau tín hiệu START, bus I2C coi trang thái làm việc (busy) Bus I2C rỗi, sẵn sàng cho giao tiếp sau tín hiệu STOP từ phía thiết bị chủ Sau có điều kiện START, qua trình giao tiếp, có tín hiệu START lặp lại thay tín hiệu STOP bus I2C tiếp tục trạng thái bận Tín hiệu START lặp lại START có chức giống khởi tạo giao tiếp 16.5.5 Định dạng truyền liệu Dữ liệu truyền bus I2C theo bit, bit liệu truyền sườn dương xung đồng hồ dây SCL, trình thay đổi bit liệu xảy SCL mức thấp Hình 16.14 Quá trình truyền bit liệu Mỗi byte liệu truyền có độ dài bits Số lượng byte truyền lần không hạn chế Mỗi byte truyền theo sau bit ACK để báo hiệu nhận liệu Bit có trọng số cao (MSB) truyền đầu tiên, bít truyền Sau xung clock dây SCL, bit liệu truyền Lúc thiết bị nhận, sau nhận đủ bít liệu kéo SDA xuống mức thấp tạo xung ACK ứng với xung clock thứ dây SDA để báo hiệu nhận đủ bit Thiết bị truyền nhận bit ACK tiếp tục thực trình truyền kết thúc 133 Hình 16.15 Dữ liệu truyền BUS I2C Hình 16.16 Bit ACK BUS I2C Hình 16.17 Lưu đồ thuật toán trình truyêng nhận liệu 134 Một byte truyền có kèm theo bit ACK điều kiên bắt buộc, nhằm đảm bảo cho trình truyền nhận diễn xác Khi không nhận địa hay muốn kết thúc trình giao tiếp, thiết bị nhận gửi xung Not‐ACK (SDA mức cao) để báo cho thiết bị chủ biết, thiết bị chủ tạo xung STOP để kết thúc hay lặp lại xung START để bắt đầu trình 16.5.6 Định dạng thiết bị chủ tớ Mỗi thiết bị ngoại vi tham gia vào bus i2c có địa nhất, nhằm phân biệt thiết bị với Độ dài địa – bit, điều có nghĩa bus I2C ta phân biệt tối đa 128 thiết bị Khi thiết bị chủ muốn giao tiếp với ngoại vi bus I2C, gửi bit địa thiết bị bus sau xung START Byte gửi bao gồm bit địa bít thứ điều khiển hướng truyền Hình 16.18 Cấu trúc byte liệu Mỗi thiết bị ngoại vi có địa riêng nhà sản xuất quy định Địa cố định hay thay đổi Riêng bit điều khiển hướng quy định chiều truyền liệu Nếu bit “0” có nghĩa byte liệu sau truyền từ chủ đến tớ, ngược lại “1” byte theo sau byte liệu từ tớ gửi đến chủ Việc thiết lập giá trị cho bit chủ thi hành, tớ tùy theo giá trị mà có phản hồi tương ứng đến chủ 16.5.7 Truyền liệu bus I2C, chế độ Master-Slave Việc truyền liệu diễn chủ tớ Dữ liệu truyền theo hướng, từ chủ đến tớ hay ngược lại Hướng truyền quy định bit thứ byte truyền 135 Hình 16.19 Quá trình truyền liệu Truyền liệu từ chủ đến tớ (ghi liệu): Thiết bị chủ muốn ghi liệu đến tớ, trình thực là: ‐ Thiết bị chủ tạo xung START ‐ Thiết bị chủ gửi địa thiết bị tớ mà cần giao tiếp với bit = bus đợi xung ACK phản hồi từ tớ ‐ Khi nhận xung ACK báo nhận diện thiết bị tớ, chủ bắt đầu gửi liệu đến tớ theo byte Theo sau byte xung ACK Số lượng byte truyền không hạn chế ‐ Kết thúc trình truyền, chủ sau truyền byte cuối tạo xung STOP báo hiệu kết thúc Hình 16.20 Ghi liệu từ chủ đến tớ Truyền liệu từ tớ đến chủ (đọc liệu): Thiết bị chủ muốn đọc liệu từ thiết bị tớ, trình thực sau: ‐ Khi bus rỗi, thiết bị chủ tạo xung START, báo hiệu bắt đầu giao tiếp ‐ Thiết bị chủ gửi địa thiết bị tớ cần giao tiếp với bit = đợi xung ACK từ phía thiết bị tớ 136 ‐ Sau xung ACK dầu tiên, thiết bị tớ gửi byte bus, thiết bị chủ nhận liệu trả xung ACK Số lượng byte không hạn chế ‐ Khi muốn kết thúc trình giao tiếp, thiết bị chủ gửi xung Not‐ACK tạo xung STOP để kết thúc Hình 16.21 Đọc liệu từ thiết bị tớ Quá trình kết hợp ghi đọc liệu: hai xung START STOP, thiết bị chủ thực việc đọc hay ghi nhiều lần, với hay nhiều thiết bị Để thực việc đó, sau trình ghi hay đọc, thiết bị chủ lặp lại xung START lại gửi lại địa thiết bị tớ bắt đầu trình Hình 16.22 Qúa trình phối hợp đọc ghi liệu Chế độ giao tiếp Master‐Slave chế độ bus I2C, toàn bus quản lý master Trong chế độ không xảy tình trạng xung đột bus hay đồng xung clock có master tạo xung clock 16.6 Lập trình với CCS Việc khởi tạo, chọn chế độ hoạt động thực giao tiếp I2C có hàm dựng sẵn CCS thực Các hàm liệt kê phiên CCS 3.242, là: ‐ i2c_isr_state(): Thông báo trạng thái giao tiếp I2C ‐ i2c_start(): Tạo điều kiện START ‐ i2c_stop(): Tạo điều kiện STOP 137 ‐ i2c_read(): Đọc giá trị từ thiết bị I2C, trả giá trị bit ‐ i2c_write(): Ghi giá trị bit đến thiết bị I2C Để sử dụng khối I2C ta sử dụng khai báo sau: #use i2c(chế_độ, tốc độ, sda = PIN_C4, scl=PIN_C3) ‐ Chế độ: Master hay Slave ‐ Tốc độ: Slow (100KHz) hay Fast (400KHz) ‐ SDA SCL chân i2c tương ứng PIC Sau khai báo trên, ta sử dụng hàm nêu để thực hiện, xử lý giao tiếp i2c với thiết bị ngoại vi khác 138 Bài 17: THẢO LUẬN VỀ GIAO TIẾP NỐI TIẾP 17.1 Chuẩn RS232 - Nguyên lý hoạt động - Cấu tạo ngắt - Lập trình với CCS 17.2 Chuẩn SPI - Nguyên lý hoạt động - Các thông số cần ý - Lập trình với CCS 17.3 Chuẩn I2C - Nguyên lý hoạt động - Các thông số cần ý - Lập trình với CCS 17.4 Câu hỏi tập Bài 1: Viết chương trình điều khiển thiết bị ngoại vi từ máy tính sử dụng PIC16F877A Máy tính kết nối với vi điều khiển theo chuẩn RS232 Bài 2: Viết chương trình mô truyền thông theo chuẩn SPI sử dụng vi điều khiển PIC16F877A Bài 3: Viết chương trình mô truyền thông theo chuẩn I2C sử dụng vi điều khiển PIC16F877A Bài 18: THỰC HÀNH: LẬP TRÌNH GHÉP NỐI Bài 19: THỰC HÀNH: LẬP TRÌNH TỔNG HỢP 139 ... chọn vi điều khiển PIC phù hợp: Trước hết cần ý đến số chân vi điều khiển cần thiết cho ứng dụng Có nhiều vi điều khiển PIC với số lượng chân khác nhau, chí có vi điều khiển có chân, ngồi có vi điều. .. dòng vi điều khiển PIC đời Chính đặc điểm trình biên dịch phù hợp với vi c lập trình cho dòng vi điều khiển mà hỗ trợ Đây dạng ngơn ngữ thao tác phần cứng, can thiệp vào cấp ghi vi điều khiển. .. kiến trúc Havard gọi vi điều khiển RISC (Reduced Instruction Set Computer) hay vi điều khiển có tập lệnh rút gọn Vi điều khiển thiết kế theo kiến trúc Von-Neuman gọi vi điều khiển CISC (Complex

Ngày đăng: 24/10/2017, 15:51

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w