280 likes | 535 Views
VI ĐIỀU KHIỂN và LẬP TRÌNH C. Trần Xuân Nghĩa Phan Văn Hòa. Vi Điều Khiển?. Dùng khắp mọi nơi Vật gia dụng hằng ngày: Điện thoại di động Nồi cơm điện TV, tủ lạnh Đồng hồ điện tử Trò chơi điện tử (PSP, Nintendo DS…) Robot…. Bộ Nhúng. Chủ yếu là dùng ngôn ngữ C lập trình Bao gồm:
E N D
VI ĐIỀU KHIỂNvàLẬP TRÌNH C Trần Xuân NghĩaPhan Văn Hòa
Vi Điều Khiển? • Dùng khắp mọi nơi • Vật gia dụng hằng ngày: • Điện thoại di động • Nồi cơm điện • TV, tủ lạnh • Đồng hồ điện tử • Trò chơi điện tử (PSP, Nintendo DS…) • Robot… NH
Bộ Nhúng • Chủ yếu là dùng ngôn ngữ C lập trình • Bao gồm: • Phần cứng (điện tử) • Phần mềm • Bộ phận cơ khí , và nhiều thành phần khác. • Điều khiển: • Đơn giản: đèn giao thông, • Phức tạp: viết games , máy tính cao cấp màu , robot… NH
Vi Điều Khiển (VDK) Trong Cuộc Sống • Ứng dụng nhiều trong nhu cầu cần thiết của cuộc sống • Tự động hóa mọi gia dụng • Đa số thiết bị trong nhà bếp có VDK NH
Vi Điều Khiển • Thời gian thực : có phần giới hạn • 4, 8, 16, 32 bits (có tới 2 nhân) • Bộ nhớ có giới hạn • Giá thành phẩm • Độ bền, tuổi thọ NH
Phần mềm • Thông thường sử dụng lập trình C • Có đủ khả năng điều khiển phần mềm với một mức độ cao. • Khá phổ thông với nhiều thư viện • Không phụ thuộc vào CPU • Trình dịch khá vững và giá không đắt lắm • GNU C trình dịch NH
Bộ Nhớ • Mỗi dữ kiện được chứa ở một địa chỉ nhất định • Mỗi địa chỉ tương ứng với một dữ kiện • Dữ kiện có thể đọc và viết • Tùy thuộc từng loại, khả năng và tốc độ NH
Bộ Vi Điều Khiển Kết cấu: CPU, bộ nhớ và I/O • CPU: Bộ kiểm soát và dẫn dắt dữ kiện • Bộ nhớ: nơi giữ mã lệnh và dữ kiện • RAM: Bộ nhớ truy xuất (viết và đọc) • ROM/Flash: Bộ nhớ (chỉ đọc ra, rất ít viết) • I/O: thiết bị ngoại vi (GPIO, UART, ADC, SPI, CAN, PWM, QEI…) NH
Bộ nhớ • ROM (Read Only Memory) Đọc • Nơi chứa đựng mã lệnh dành cho CPU trong bộ nhúng, đồng thời được lập đi lập lại sau mỗi lần bật tắt máy (dữ liệu không bị xóa) • Dùng làm bộ nhớ tin liệu cho hệ thống khởi động • Loại ROM khác: • EPROM, EEPROM and Flash NH
Bộ nhớ (tiếp theo) • RAM: nơi cất giữ dữ kiện và được truy cập bởi CPU • Các loại RAM • RAM Tĩnh: SRAM (nhanh) • RAM Động: • SDRAM • RDRAM • DDR, DDR2 SDRAM… NH
CPU • Thành phần xử lý trung tâm • Cất giữ, thu lượm , phân phối, điều hành , tính toán • Thanh ghi: đọc và viết nhanh, cất giữ toán hạng và dữ kiện khác. • Điều kiện thanh ghi => kết quả hữu lý • Thanh ghi xử lý ngoại lệ, =>(lỗi) • Điều khiển vòng lập (bộ đếm) NH
CPU BUS I/O • BUS nối tiếp giữa CPU và I/Os • Nhịp cầu CPU BUS I/O Thế giới • CPUBUSBộ Nhớ • Thanh ghi đại diện cho mỗi phần ngoại vi: GPIO, UART, SPI, ADC… NH
Vi Điều Khiển Ngoại Vi • Thiết bị nối tiếp với thế giới bên ngoài • Thí dụ: • GPIO • UART • ADC Phần 1 • SPI • I2C • CAN • PWM Phần 2 • QEI NH
Những Lệnh Chính • Tính Toán & Logic: Cộng, Trừ, Nhân, Chia, and, or, not, xor • Chuyển dời dữ kiện giữa thanh ghi và bộ nhớ • Kiểm soát: rẽ nhánh và nhảy. NH
Tại Sao Chọn C ? • Ngôn ngữ Cơ bản cho bộ nhúng • Dễ dàng bão trì cho những công trình lớn • Một tầng cao hơn assembly language • Khá hiệu quả trong việc xử lý • Trực tiếp điều khiển bộ ngoại vi • Có nhiều hàm sẵn sàng trong thư viện • Quan trọng là Lập Trình Giao Diện Ứng Dụng (API) • Giảm thiểu thời gian lập trình, và công trình mau chóng ra thị trường. NH
Lập trình C • Bit: đơn vị nhỏ nhất của thông tin • Hệ 2: 02 giá trị (bật – tắt , đóng – mở…) • 1: đúng (bật, đóng…) • 0: sai (tắt, mở…) • Nibble: 04 bits • 16 giá trị (0-15) # (0000-1111) • 1 chữ Hex (0,1,2…9,A,B,C,D,E,F) • Byte, Word, Double Word • 8 bits, 16 bits, 32bits Switch NH
Lập trình C (tiếp theo) • Hệ phổ thông: • Hệ 2: 0,1 • Hệ 10: 0,1,2,…,9 • Hệ 16: 0,1,2,…,9,A,B,C,D,E,F • Hệ 08: 0,1,2,…,7 • Chuyển hệ: • 10100111 = 167 • 1010 0111 = 167 • A 7 = 167 NH
Quy Định Biến Số Trong C • Không được có dấu (ngoại trừ gạch nối dưới) • Phải bắt đầu bằng mẫu tự (không có số) • Chữ thường khác chữ hoa • Hạn chế viết tắt. NH
Quy Định Biến Số Trong C (t2) • Vòng lập (bộ đếm) nên dùng: i, j, k… • Trình bày kỹ => Tiết kiệm thời gian gở lỗi. • Thí dụ: ChieuDai, ThoiGian, Van_Toc, NgoaiViDiaChiGoc… NH
Xin Chào Thế Giới • int main(void) • { • // • // Chuẩn bị hệ dao động ở 8 MHz. • // • SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN | SYSCTL_XTAL_8MHZ); • // • // Thiết lập liên lạc và khởi tạo OLED display. • // • RIT128x96x4Init(1000000); • // Màn hình 128x96; • //(x,y) = (0,0) : Đỉnh trên cùng bên tay trái • // x → chiều tăng y ↓ chiều tăng • RIT128x96x4StringDraw("Xin Chao!", 30, 4, 15); • RIT128x96x4StringDraw("THE GIOI TUOI DEP!", 10, 24, 15); • // • // Thoát Exit. • // • DiagExit(0); • return (0); • } • /* bạn thường muốn • * tiền xử lí stdio.h và stdlib.h • */ • #include <stdio.h> • #include <stdlib.h> • int main (void) • { • printf(“Xin Chao The Gioi\n”); • exit(0); • } x y Độ sáng 4 bits (0-15) NH
Quy trình của trình dịch C Code Red IDE NH
Download phần mềm cho LM3S2110 PC => LM3S2110 qua dây JTAG giữa 2 boards Nguồn qua dây liên kết giữa 2 boards NH
Lab 1 • hello.zip NH