Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 26 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
26
Dung lượng
723,44 KB
Nội dung
Chuyên đề II Vi xử lý nâng cao TS Nguyễn Hồng Quang Mục tiêu chuyên đề Cung cấp kiến thức thức tế vi điều khiển ứng dụng đề tài tốt nghiệp Cập nhật thông tin hệ vi điều khiển Nâng cao kỹ thực hành cho sinh viên Các kiến thức trang bị Vi điều khiển PIC DsPIC 30F4011 DsPIC D PIC 33F128GP Atmega16-128 Phần mềm Giao tiếp thiết bị ngoại vi UART,CAN, A/D … Hệ điều hành thời gian thực RTOS TCP/IP Dự án Điều khiển PID số Hệ điều khiển nhiệt độ Hệ điều tốc/kích từ Tài liệu tham khảo Microchip application notes Microchip websites Trang Web pic Vietnam Ebook Learn Hardware, Firmware and Software design, OG Popa Intelligent Sensor Design Using the Microchip dsPIC, Creed Huddleston Đánh giá Tiến hành demo thiết bị thực hành Chấm điểm nhóm sản phẩm Nội dung cụ thể Tuần Nội dung Giới thiệu môn học tóm tắt ngôn ngữ lập trình C Tổng quan phần cứng DsPIC DsPIC với giao tiếp I/O đơn giản, LCD Ngắt ADC InputCapture Output Compare UART protocol ự RTOS Hệệ điều hành thời ggian thực Bộ điều khiển số PID ứng dụng điều khiển Vài khái niệm CPLD, FPGA DSP Texas 10 TCP/IP stack với Microchip 11 Quản lý dự án điều khiển nhúng 12 Tóm tắt kết học trả lời thắc mắc Khoa CNTT Cty Fsoft Phần cứng 5V 3.3V GND PGND I2C 485 POWER B LCD Button tt Button Real Time Led Max 485 CAN RS 232 5V 3.3V ADC M Programer DSPIC 33F ULN2803 Ethernet SD Card ADC Input Phần mềm - MPLAB Ngôn ngữ C – MpLAB C30 Mạch nạp DsPIC- tme 10 Thi cuối kỳ Demo sản phẩm theo nhóm Làm báo cáo theo cá nhân 11 Tóm tắt C cho vi điều khiển 12 Bài tập nhà 13 Chương trình C # c ude #include eg5 void main(void) { for (;;) { P1=0x55; P1 AA P1=0xAA; } } #include void main(void) { while(1) { P1=0x55; P1=0xAA; AA } } 14 Ví dụ lệnh sử dụng bit #include void main(void) { unsigned char z; z=P1; z=z&0x3; 15 Chuyển đổi Hex - ASCII #include void main(void) { unsigned char x,y,z; unsigned char mybyte=0x29; x=mybyte&0x0F; P1=x|0x30; y=mybyte&0xF0; y=y>>4; P2=y|0x30; } 16 #include void main(void) { unsigned char bcdbyte; unsigned char w=‘4’; unsigned char z=‘7’; w=w&0x0F; w w&0x0F; w=w(b) ? (a) : (b)); Dịch có điều kiện Các lệnh dịch có điề điều kiện C: C #if, #elif, #else, #endif #ifdef, #ifndef Mục đích: Thêm vào đoạn gỡ lỗi chương trình Thêm vào đoạn không phãi mã chuẩn chuẩn, Bảo vệ header-files sử dụng nhiều lần gọi 17 Typedefs A typedef có ý nghĩa #define, tức tùy thực việc thay văn bản, typedef từ khóa C, dịch chương trình dịch Từ khóa typedef cho phép tạo kiểu liệu với tên typedef int Length; Length len, maxlen; Length lengths[50]; Toán tử làm việc với bit C cung cấp toán tử bit: & | ^ ~ > Các toán tử làm việc với kiểu char, short, int, long Không dùng cho dấu phẩy động Và p phép pg gán bit sau &= |= ^= = Phép gán tương tự với phép gán số học z &= x | y; z = z & (x | y); 18 Mặt nạ bit Bước Tạo số nguyên để đại diện cho trạng thái bit (hoặt nhóm bit) Ví dụ enum { FIRST SECND THIRD FORTH ALL = }; = 0x01, = 0x02, = 0x04, = 0x08, 0x0f /* /* /* /* /* 0001 0010 0100 1000 1111 binary binary binary binary binary */ */ */ */ */ 37 Mặt nạ bit Một cách khác enum { FIRST SECND THIRD FORTH ALL = }; = [...]... động gán ký tự \0 vào cuối Các hàm thư vi n trong C luôn giả thiết là kết thúc xâu ký tự là \0 Điều \0 Điề này à khiế khiến các á lậ lập trình t ì h vi n iê phải hải lluôn ô ttự mình ì h đảm đả bảo bả kết thúc một xâu tự tạo ra với ký từ \ 0 nằm cuối Tại sao là cần \0? Đơn giản, đây là cách khẳng định vi c kết thúc một xâu, vì thế khi truyền một xâu vào hàm, bạn không phải đưa vào chiều dài của... tới địa chỉ của vùng nhớ Nếu không, nó sẽ trả về NULL Thực tế, các PC có bộ nhớ ảo (virtual memory) và có thể coi vùng nhớ là không giới hạn Nên có thói quen kiểm tra giá trị trả về của các hàm này free() free() giải phóng vùng nhớ được cấp phát bởi malloc() Vùng nhớ được giải phóng và sẵn sàng cho vi c sử dụng của các hàm khác void free(void *p); Không cần ép kiểu (cast) xxx* về void *... gọii đến đế vào à phần hầ mềm ề 16 Macros Lệnh #define thường được sử dụng trong vi c tạo ra các macro Khai báo sau #define MAX(x,y) ((x)>(y) ? (x) : (y)) Macro giống như hàm, nhưng thực chất không phải hàm Thực tế chương trình dịch sẽ thay thế mọi khai báo MAX bằng dòng lệnh tương ứng các đối số đưa vào (inline) int a=4, b= -7, c; c = MAX(a,b); expands to: c = ((a)>(b) ? (a) : (b)); Dịch có điều kiện... Các lệnh dịch có điề điều kiện trong C: C #if, #elif, #else, #endif #ifdef, #ifndef Mục đích: Thêm vào các đoạn gỡ lỗi chương trình Thêm vào các đoạn không phãi mã chuẩn chuẩn, Bảo vệ các header-files sử dụng nhiều lần gọi 17 Typedefs A typedef cũng có cùng ý nghĩa như #define, tức là thuần tùy thực hiện vi c thay thế văn bản bản, nhưng typedef là từ khóa của C, và được dịch bởi chương... tả vi c gọi hàm trong ví dụ trên 23 Tham Số Và Biến Cục Bộ Phạm vi tĩnh (Static Scope) Biến hay hàm có từ khóa static ở trước chỉ có phạm vi trong file được dùng đó Khởi tạo biến tĩnh mặc định là 0 Biến cục bộ dùng trong hàm khi có khai báo static sẽ giữ nguyên giá trị giữa các lần gọi hàm int increment(void) { _ static int local_static; return local_static++; } 48 24 Phạm vi Tĩnh Biến và hàm... và hàm tĩnh của một file không thể được sử dụng bởi các d á fil file khá khác Có thể có cùng một tên mà không bị tranh chấp tên File one.c: static double myvariable; static void myfunc(int idx); File two two.c: c: static int myvariable; static int myfunc(int idx); 49 Tóm tắt Hàm có phạm vi ngoài là mặc định Hàm và biến có khai báo static chỉ giới hạn sử dụng trong file đó Biến định nghĩa trong... Để mở file, sử dụng hàm fopen() FILE *fopen(const char *name, const char *mode); 2 đối số: Tên Tê file fil eg, myfile.txt fil t t Kiểu đọc “r”, “w”, “a” Giá trị trả về : Con trỏ tới file nếu thành công và NULL nếu không Luôn kiểm tra giá trị trả về: NULL fclose() Để đóng file, sử dụng fclose() i t fclose(FILE int f l (FILE *fp); *f ) fclose()ngắt kết nối với file và giải phóng... chỉ trong bộ nhớ của biến đấy Khai báo * nghĩa là “trỏ tới” Khai báo & nghĩa là “địa chỉ của ” Lấy y nội ộ dung g thông gq qua * 11 Truyền tham chiếu Thay y vi đưa vào theo giá g trị,ị, người g ta đưa vào theo con trỏ Giá trị đầu vào sẽ được copy những vẫn trỏ đến cùng ô nhớ ban đầu swap(&a, &b); /* Pass pointers to a and b */ void swap(int* px, int* py) /*px and py are copies... hiệ á vi c iệ thay th thế một ột đoạn đ mã ã bằ bằng một ột câu â lệnh lệ h trước khi được chuyển tới chương trình dịch Macro là tên (hoặc có thể là đối) mà được nhận dạng và chuyển đổi được bởi bộ tiền xử lý Các bộ tiền xử lý trong C bao gồm File header Định nghĩa các nhãn hằng Định nghĩa các macro Các điều kiện chương trình dịch Lệnh include Xác định các khai báo của các hàm và các... khóa typedef cho phép tạo ra kiểu dữ liệu mới với tên mới typedef int Length; Length len, maxlen; Length lengths[50]; Toán tử làm vi c với bit C cung cấp 6 toán tử bit: & | ^ ~ > Các toán tử này chỉ làm vi c với các kiểu char, short, int, long Không dùng cho dấu phẩy động Và 5 p phép pg gán bit như sau &= |= ^= = Phép gán này tương tự với phép gán số học z &= x | y; z = z & (x | y); 18 Mặt nạ