Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 139 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
139
Dung lượng
5,16 MB
Nội dung
BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT HƯNG YÊN LẬP TRÌNH VI ĐIỀU KHIỂN TRÌNH ĐỘ ĐÀO TẠO: ĐẠI HỌC NGÀNH ĐÀO TẠO: CƠNG NGHỆ THÔNG TIN (INFORMATION TECHNOLOGY) 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 10 1.2.4 PIC 16F877A 11 1.2.4.1 Sơ đồ chân/sơ đồ khối 11 1.2.4.2 Tổ chức không gian nhớ 13 1.3 Quy trình phát triển ứng dụng vi điều khiển 16 1.3.1 Ngơn ngữ lập trình 17 1.3.2 Mạch nạp 17 1.3.3 Lập trình cho PIC CCS 18 1.4 Quy trình phát triển ứng dụng 19 Bài 2: CỔNG VÀO RA CỦA PIC 16F877A 21 2.1 Các cổng vào (nhập/xuất) .21 2.1.1 PORT A .21 2.1.2 PORT B 23 24 2.1.3 PORT C 25 2.1.4 PORT D .26 2.1.5 PORT E 28 2.2 Lập trình điều khiển 29 2.2.1 Các lệnh vào CCS 29 2.2.1.1 Các hàm sử lý bít phép tốn 29 2.2.1.2 Các hàm vào .30 2.2.2 Bài tập áp dụng 35 Bài 3: THỰC HÀNH: LẬP TRÌNH ĐIỀU KHIỂN VÀO RA 36 Bài 4: LẬP TRÌNH HIỂN THỊ 37 4.1 Tổng quan led 37 4.2 Kỹ thuật lập trình 38 4.2.1 Phương pháp xuất liệu trực tiếp .40 4.2.2 Phương pháp Quét Led 43 4.3 Tổng quan LCD 46 4.4 Lập trình với LCD .51 4.4.1 Lập trình với Assembly .51 4.5 Lập trình với LCD bit .53 4.6 Lập trình với LCD bit .55 Bài 5: THỰC HÀNH: LẬP TRÌNH HIỂN THỊ 58 Bài 6: BỘ TIMER/COUTER 59 6.1 Tổng quan timer/counter 59 6.2 Hoạt động timer/counter 59 6.3 Các timer/counter 61 6.3.1 Bộ timer 61 6.3.2 Bộ timer 64 6.3.3 Bộ TIMER .68 6.4 Lập trình với CCS .70 6.4.1 Các lệnh ccs .70 Bài 7: THẢO LUẬN VỀ BỘ ĐỊNH THỜI – BỘ ĐẾM 76 7.1 Bộ timer/counter 76 7.2 Câu hỏi tập thảo luận .76 Bài 8: THỰC HÀNH VỀ BỘ ĐỊNH THỜI – BỘ ĐẾM 76 Bài 9: BỘ CHUYỂN ĐỔI TƯƠNG TỰ-SỐ .77 9.1 Tổng quan ADC/DAC 77 9.1.1 Tổng quan 77 9.1.2 Chuyển đổi ADC 77 9.1.3 Một số khái niệm 77 9.1.4 Quy trình chuyển đổi AD 78 9.1.6 Các tiêu kỹ thuật chuyển đổi 82 9.2 Bộ ADC PIC 84 9.2.1 Sơ đồ khối ADC 84 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 85 9.3 Lập trình với CCS .86 Bài 10: THỰC HÀNH: LẬP TRÌNH BỘ CHUYỂN ĐỔI ADC 90 Bài 11: NGẮT TRÊN PIC 91 11.1 Tổng quan ngắt 91 11.2 Ngắt PIC 91 11.2.1 Cấu trúc chương trình dung ngắt 94 11.2.2 Một số ngắt thường dùng .95 11.3 Lập trình ngắt với CCS 96 11.3.1 Các lệnh phục vụ ngắt 96 11.3.2 Ví dụ áp dụng .97 Bài 12: THỰC HÀNH: LẬP TRÌNH NGẮT 102 Bài 13: BỘ CCP 103 13.1 Bộ CCP 103 13.1.1 Capture 103 13.1.2 Bộ so sánh 103 13.1.3 Bộ PWM (Pulse Width Modulation) 106 13.2 Lập trình với CCS 109 Bài 14: THẢO LUẬN VỀ NGẮT/ADC/CCP 114 Bài 15: THỰC HÀNH: LẬP TRÌNH VỚI BỘ CCP 115 Bài 16: LẬP TRÌNH TRUYỀN THƠNG 116 16.1 Tổng quan 116 16.2 Chuẩn RS232 116 16.3 Lập trình với CCS 120 16.4 Chuẩn giao tiếp SPI 128 16.4.1 Tổng quan 128 16.4.2 Chuẩn SPI Trong vi điêu khiển PIC 16F877A 129 16.5 Chuẩn giao tiếp I2C 130 16.5.1 Giới thiệu chung I2C 130 16.5.2 Đặc điểm giao tiếp I2C 131 16.5.3 Đặc điểm giao tiếp I2C 131 16.5.4 START and STOP conditions 133 16.5.5 Định dạng truyền liệu 134 16.5.6 Định dạng thiết bị chủ tớ 135 16.5.7 Truyền liệu bus I2C, chế độ Master-Slave 136 16.6 Lập trình với CCS 138 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 ngồi 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 VonNeuman 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 Ví 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 cịn 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 Và để 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 ln 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, cịn PIC16F877A flash) Ngồi cịn 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 10 case : set_uart_speed(9600); break; case : set_uart_speed(19200); break; } Tóm tắt: Ví dụ code xử lý PIC 125 h Ví 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 ví dụ sau 126 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 //using 10 bit A/D converter #use delay(clock=20000000) //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 input ports: 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() { 127 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 tồn phần (full- duplex) tức thời điểm xảy đồng thời q trình truyền nhận Đơi SPI cịn 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 (pointto-point) Hiện nay, SPI sử dụng nhiều dạng kết nối khác multimaster hay multi-slave 128 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) 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 129 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 khơng có 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ớ 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… 130 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 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 131 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 cị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ịn 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ớ, cịn 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) 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) 132 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 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 133 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 Hình 16.15 Dữ liệu truyền BUS I2C 134 Hình 16.16 Bit ACK BUS I2C Hình 16.17 Lưu đồ thuật tốn q trình trung nhận liệu 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 135 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 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ớ 136 ‐ 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 q 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ớ ‐ 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 137 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 ‐ 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