Dạy lập trình AVR cơ bản nhất - Chương 3 - Bài 2

20 568 2
Dạy lập trình AVR cơ bản nhất -  Chương 3 - Bài 2

Đ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

Lập trình vi điều khiển AVR với ngôn ngữ C WWW.EEELABS.ORG Trần Thừa – 2010 36 Bài 2 : NGÔN NGỮ C BẢN I. Giải thuật lập trình. Giải thuật lập trình có tác dụng định hướng cho lập trình viên trước khi bắt tay vào viết mã lệnh, nó giúp lập trình viên cái nhìn khái quát và phân rõ nhiệm vụ, chức năng cho từng khối lệnh. Giải thuật lập trình được đọng lại thành lưu đồ giải thuật với các khối chức năng được mô tả theo quy ước chung theo bảng 1. Hình dạng Chức năng Dữ liệu vào - ra Xử lý Kiểm điều kiện Hướng xử lý Gọi chương trình con hoặc hàm Điểm bắt đầu hoặc kết thúc Điểm ghép nối Bảng 1. Mô tả biểu tượng – chức năng bản của lưu đồ giải thuật. Để xây dựng lưu đồ giải thuật, bạn cần phải trả lời các câu hỏi: +Mục đích của chương trình, xây dựng để làm gì, cần phải chức năng gì? +Cần các hàm, các chương trình con như thế nào để đạt được từng chức năng đã đặt ra? Từ câu trả lời, bạn đã khái quát cấu trúc của chương trình, sau đó, bằng các biểu tượng ở bảng 1, ta thể lập thành lưu đồ, cuối cùng là chi tiết hóa bằng mã lệnh. Nếu là người nhiều kinh nghiệm, thể các bước trên đã nằm sẵn trong kỹ năng của bạn và chỉ việc viết code theo định hướng sẵn trong tư duy, tuy nhiên nếu là người mới thì làm việc trình tự và quy tắc giúp ta đạt được mục đích 1 cách nhanh chóng và hiệu quả nhất thể. Ví dụ: ai đó yêu cầu bạn dùng AVR làm cho 1 dãy đèn led gồm 8 bóng phát sáng lần lượt từng bóng từ phải sang trái và mỗi trạng thái duy trì 1s và cứ như thế xoay vòng mãi. Lập trình vi điều khiển AVR với ngôn ngữ C WWW.EEELABS.ORG Trần Thừa – 2010 37 +Đầu tiên, đề yêu cầu điều khiển ngoại vi là led, do đó dữ liệu của chân điều khiển phải là dữ liệu xuất, ta cấu hình hướng dữ liệu xuất, việc cấu hình này chỉ cần làm 1 lần. +Thứ 2, cần điều khiển 8 bóng led thì 1 PORT vi điều khiển AVRđầy đủ. Vì vậy ta sẽ thao tác dữ liệu trên thanh ghi PORT (PORTA chẳng hạn). +Thứ 3, nếu xem dữ liệu dữ liệu thanh ghi là 8 bit tương đương với 8 led, từng bóng lần lượt phát sáng, ta thấy tại mỗi thời điểm chỉ 1 trong 8 bit ở mức cao, và hình như bit cao này, sau 1 giây lại dịch trái 1 bit. Từ đây ta thể suy ra, chỉ cần cho dữ liệu lúc ban đầu bằng 1, sau đó, mỗi 1s lại nhân nó lên 2 lần (dịch trái 1 bit tương đương nhân lên 2 lần), và sẽ lặp lại 8 lần. Như vậy ta thể xây dựng lưu đồ như sau: Tùy mỗi người mà cách giải quyết 1 vấn đề sẽ khác nhau, tuy nhiên, nếu làm nhiều và rút kinh nghiệm ta sẽ các hướng giải quyết hợp lý nhất. Bởi vì tài nguyên vi điều khiển là hạn hẹp nên việc cân nhắc sử dụng tài nguyên đó như thế nào cho hợp lý rất đáng được quan tâm. Trì hoãn 1s Số lần=8? PORTA x 2 Cho PORTA=1 S ố lần=0 C ấu hình h ư ớng dữ liệu PORTA Bắt đầu Đúng Sai Lập trình vi điều khiển AVR với ngôn ngữ C WWW.EEELABS.ORG Trần Thừa – 2010 38 II. Cấu trúc chương trình viết bằng ngôn ngữ C. Để tìm hiểu cấu trúc 1 chương trình viết bằng ngôn ngữ C, ta sẽ xem xét 1 ví dụ đơn giản như sau: Ví dụ 1: /* CHUONG TRINH DICH LED NAM TRONG DVD TAI LIEU LAP TRINH C CHO VI DIEU KHIEN AVR TAI LIEU NAY CO NGUON TU WEBSITE WWW.EEELAB.ORG */ #include <delay.h> #define led_port PORTD //DINH NGHIA PORTB LA led_port char i; // KHAI BAO BIEN i, KIEU DU LIEU CUA I LA CHAR //CHUONG TRINH CHINH void main() { DDRD=0xff; while(1){ for(i=0;i<=7;i++){ led_port=0x01; led_port=led_port<<i; delay_ms(500); } } } 1. Khái niệm câu lệnh Một câu lệnh (statement) xác định một công việc mà chương trình phải thực hiện để xử lý dữ liệu đã được mô tả và khai báo. Các câu lệnh được ngăn cách với nhau bởi dấu chấm phẩy “ ; ”. 2. Chú thích. Khi viết chương trình đôi lúc ta cần phải vài lời ghi chú về 1 đoạn chương trình nào đó để dễ nhớ và dễ điều chỉnh sau này. Phần nội dung ghi chú không thuộc về chương trình (khi biên dịch phần này bị bỏ qua). Trong ngôn Lập trình vi điều khiển AVR với ngôn ngữ C WWW.EEELABS.ORG Trần Thừa – 2010 39 ngữ C, nội dung chú thích phải được viết trong cặp dấu /* và */ (nếu chú thích trên nhiều dòng), hoặc đặt sau cặp dấu // (nếu chú thích trên 1 dòng). Chú ý: Trình biên dịch MikroC chức năng khóa 1 đoạn mã lệnh bằng cặp dấu chú thích, khi cần khóa 1 đoạn lệnh, ta bôi đen đoạn lệnh đó và bấm vào nút {…} hoặc bấm tổ hợp phím Ctr+Shift+dấu chấm, khi muốn phục hồi lại đoạn lệnh đó, ta bấm vào nút {…} hoặc tổ hợp phím Ctr+Shift+ dấu phẩy. 3. Chỉ thị tiền xử lý. - Chỉ thị sự gộp vào của các tập tin nguồn khác: #include - Chỉ thị việc định nghĩa các macros hoặc ký hiệu: #define Chỉ thị đầu tiên được sử dụng trước hết là nhằm gộp vào nội dung của các tập tin cần (header file), không thể thiếu trong việc sử dụng một cách tốt nhất các hàm của thư viện chuẩn. Cú pháp : #include tên_thư_viện.h Đối với MikroC, chỉ thị include các thư viện của phần mềm vào chương trình được thực hiện tự động qua công cụ Library Manager. Nếu dùng các thư viện tự định nghĩa, ta vẫn dùng lệnh include để gộp tập tin thư viện. Chỉ thị thứ hai là dùng định nghĩa các biến, cú pháp : #define tên đối_tượng_cần_gán_tên 4. Khai báo biến(biến toàn cục). Khai báo các biến thuộc các kiểu dữ liệu khác nhau. Cú pháp: Kiểu dữ liệu tên_biến_1, tên_biến_2 ; Ví dụ: char var1, var_2 ; int var1, var2, var3, var4 ; 5. Khai báo các prototype Đây là phần khai báo đầu hàm (phần này không bắt buộc). Cú pháp: Kiểu_kết_quả_trả_về Tên_hàm (danh sách đối số vào) Lưu ý: Nếu 1 hàm được cài đặt sau 1 hàm khác, nó không thể được gọi trong các hàm cài đặt trước nó. Tuy nhiên, nếu khai báo prototype của hàm ta thể cài đặt hàm ở bất cứ đâu và thể gọi hàm ở bất kỳ hàm nào cài đặt trước hoặc sau nó. 6. Chương trình chính. Bắt buộc phải void main( ) { Các khai báo cục bộ trong hàm main; /* Các khai báo này chỉ tồn tại trong hàm mà thôi, thể là khai báo biến hay khai báo kiểu.*/ Lập trình vi điều khiển AVR với ngôn ngữ C WWW.EEELABS.ORG Trần Thừa – 2010 40 Các câu lệnh dùng để định nghĩa hàm main; } 7. Cài đặt các hàm. Kiểu_dữ_liệu_trả_về tên_hàm( các tham số) { Các khai báo cục bộ trong hàm. Các câu lệnh dùng để định nghĩa hàm return kết_quả_trả_về; } Một chương trình C bắt đầu thực thi từ hàm main (thông thường là từ câu lệnh đầu tiên đến câu lệnh cuối cùng). III. Bộ chữ viết, tên và hằng trong ngôn ngữ C. 1. Bộ chữ viết trong C. Bộ chữ viết trong ngôn ngữ C bao gồm những ký tự, ký hiệu sau: (phân biệt chữ in hoa và in thường):  26 chữ cái latin lớn A,B,C Z  26 chữ cái latin nhỏ a,b,c z.  10 chữ số thập phân 0,1,2 9.  Các ký hiệu toán học: +, -, *, /, =, <, >, (, )  Các ký hiệu đặc biệt: :. , ; " ' _ @ # $ ! ^ [ ] { }  Dấu cách hay khoảng trống. 2. Tên (danh biểu). Tên hay còn gọi là danh biểu (identifier) được dùng để đặt cho chương trình, hằng, kiểu, biến, chương trình con Tên hai loại là tên chuẩn và tên do người lập trình đặt. Tên chuẩn là tên do C đặt sẵn như tên kiểu: int, char, float,…; tên hàm: sin, cos Tên do người lập trình tự đặt để dùng trong chương trình của mình. Sử dụng bộ chữ cái, chữ số và dấu gạch dưới (_) để đặt tên, nhưng phải tuân thủ quy tắc:  Bắt đầu bằng một chữ cái hoặc dấu gạch dưới.  Không khoảng trống ở giữa tên.  Không được trùng với từ khóa(tên các lệnh hoặc đối tượng đã định nghĩa trong các thư viện).  Độ dài tối đa của tên là 32 ký tự, tuy nhiên cần đặt sao cho rõ ràng, dễ nhận biết và dễ nhớ.  Không cấm việc đặt tên trùng với tên chuẩn nhưng khi đó ý nghĩa của tên chuẩn không còn giá trị nữa. Ví dụ: Tên do người lập trình đặt: Chieu_dai, Chieu_Rong, Chu_Vi, Dien_Tich Lập trình vi điều khiển AVR với ngôn ngữ C WWW.EEELABS.ORG Trần Thừa – 2010 41 Tên không hợp lệ: Do Dai, 12A2… 3. Hằng (Constant). Là đại lượng không đổi trong suốt quá trình thực thi của chương trình. Hằng số thể là một chuỗi ký tự, một ký tự, một con số xác định. Chúng thể được biểu diễn hay định dạng với nhiều dạng thức khác nhau. IV. Các kiểu dữ liệu. 1. Các kiểu dữ liệu bản. a. Định dạng số học. Đây là cách biểu diễn các hệ thống số đếm trong trình biên dịch C. -Thập phân: Biểu diễn giống như số thập phân bình thường. Ví dụ 120 -Thập lục phân: Số thập lục phân được biểu diễn bắt đầu bằng “0X” (chữ “X” viết tắt của HEX và không phân biệt hoa thường). Ví dụ 0X0F -Nhị phân: Số nhị phân được biểu diễn bắt đầu bằng “0B” (chữ “B” viết tắt cửa BINARY và không phân biệt hoa thường). Ví dụ 0b01101100 b. Các kiểu dữ liệu số học. Tên kiểu Kích thước (byte) Khoảng giá trị (unsigned) char 1 0 255 signed char 1 -128 127 (signed) short (int) 1 -128 127 unsigned short (int) 1 0 255 (signed ) int 2 -32768 32767 unsigned int 2 0 65535 (signed) long (int) 4 -2147483648 2147483648 unsigned long (int) 4 0 4294967295 c. Kiểu số thực Tên kiểu Kích thước Khoảng giá trị float 4 -1.5*10 45 +3.4*10 38 Lập trình vi điều khiển AVR với ngôn ngữ C WWW.EEELABS.ORG Trần Thừa – 2010 42 double 4 -1.5*10 45 +3.4*10 38 long double 4 -1.5*10 45 +3.4*10 38 Ngoài ra ta còn kiểu dữ liệu void, kiểu này mang ý nghĩa là kiểu rỗng không chứa giá trị gì cả. Đối với AVR thêm 1 kiểu dữ liệu đặc biệt là kiểu bit, kiểu này chỉ giá trị 0 hoặc 1. d. Ép kiểu. Khi thực hiện các phép toán, nếu các số hạng không cùng kiểu dữ liệu, MikroC sẽ tự động chuyển các số hạng này về cùng kiểu dữ liệu trước rồi mới tính toán. Việc ép kiểu cũng thể thực hiện bởi lập trình viên. Nguyên tắc ép kiểu: Số hạng kiểu đơn giản hơn được chuyển sang kiểu của số hạng kiểu phức tạp hơn. Ép kiểu bắt buộc: <(type)> object Chuyển đổi kiểu đối tượng (object) thành kiểu mới (type). Ví dụ: /* Cho 2 biến a và b kiểu dữ liệu là char */ char a, b; /* Chuyển kiểu dữ liệu của biến a thành int*/ (unsigned int) a; /* Dòng lệnh sau sẽ chuyển biến a sang kiểu double sau đó chuyển biến b sang dạng double sau đó lấy a+b kết quả thuộc kiểu double */ (double) a + b; // equivalent to ((double) a) + b; 2. Các kiểu dữ liệu cấu trúc a. Mảng: là kiểu dữ liệu cấu trúc đơn giản và được sử dụng phổ biến nhất chứa 1 tập hợp các phần tử cùng kiểu. Cú pháp khai báo mảng: Cú pháp: Kiểu Tên_mảng [số phần tử] ; Kiểu dữ liệu: là kiểu dữ liệu mà mỗi phần tử của mảng được định dạng. Tên mảng: đây là một cái tên đặt đúng theo quy tắc đặt tên của danh biểu. Tên này cũng mang ý nghĩa là tên biến mảng. Số phần tử: là một hằng số nguyên, cho biết số lượng phần tử tối đa trong mảng là bao nhiêu (hay nói khác đi kích thước của mảng là gì). Giá trị này thể bỏ trống gọi là khai báo không tường minh. Để truy xuất từng phần tử của mảng, ta dùng cú pháp: Tên_mảng [Số_thứ_tự_của phần_tử]; Trong đó số thứ tự của phần tử giá trị từ 0 đến “số phần tử” trừ đi 1. Khởi tạo giá trị đầu cho mảng: Giá trị của các phần tử trong mảng thể được khởi tạo lúc khai báo bằng cú pháp sau: Lập trình vi điều khiển AVR với ngôn ngữ C WWW.EEELABS.ORG Trần Thừa – 2010 43 Kiểu Tên_mảng [ ]= {Các giá trị cách nhau bởi dấu phẩy}; Nếu kích thước của mảng được chỉ định thì số giá trị không được vượt quá kích thước của mảng này. Ngược lại, nếu không chỉ định thì trình biên dịch tự động cập nhật giá trị này cho phù hợp. Nếu khai báo 1 mảng kiểu char (character – ký tự). Thì ta thể viết gọn lại dưới dạng chuỗi. Ví dụ: const char msg1[] ={“T”, “E”,“S”,“T”} ; const char msg2] = “TEST ” ; Hai hằng số trên giá trị như nhau. 3. Cấu trúc. Chứa 1 tập hợp các phần tử được đặt tên bởi lập trình viên, các phần tử này thể 1 kiểu bất kỳ. Khai báo và khởi tạo cấu trúc: struct Tên_cấu_trúc { Kiểu Phần_tử 1 ; Kiểu Phần_tử 2 ; …… Kiểu Phần_tử n ; } Ví dụ: struct I2CSendByte{ char control; char dat; } Khai báo biến thuộc kiểu cấu trúc: thể khai báo lúc khai báo cấu trúc hoặc khai báo sau khi khai báo cấu trúc đều được. Ví dụ: Khai báo biến lúc khai báo cấu trúc: struct I2CSendByte{ char control; char dat; }d1,d2; Khai báo biến sau khi khai báo cấu trúc: struct I2CSendByte { char control; char dat; }; Lập trình vi điều khiển AVR với ngôn ngữ C WWW.EEELABS.ORG Trần Thừa – 2010 44 struct I2CSendByte d1,d2; Khởi tạo giá trị biến cấu trúc: tương tự như mảng Ví dụ: struct I2CSendByte d1={0xA1,'A'}; Truy xuất các phần tử trong cấu trúc: Sử dụng 2 toán tử sau: “.” Truy xuất trực tiếp các phần tử trong cấu trúc. “->” Truy xuất gián tiếp các phần tử trong cấu trúc. Chỉ áp dụng đối với con trỏ. Ví dụ: struct mystruct{ int i; char str[21]; double d; } s,*sptr=&s; s.i=3; // gán giá trị 3 cho phần tử I trong cấu trúc sptr ->d=1.23; // gán gián tiếp giá trị 1.23 cho phần tử d. V. Biểu thức Biểu thức là một sự kết hợp giữa các toán tử (operator) và các toán hạng (operand) theo đúng một trật tự nhất định. Mỗi toán hạng thể là một hằng, một biến hoặc một biểu thức khác. Trong trường hợp, biểu thức nhiều toán tử, ta dùng cặp dấu ngoặc đơn () để chỉ định toán tử nào được thực hiện trước. 1. Các toán tử số học Bảng tóm tắt các toán tử số học Toán tử Ý nghĩa Độ ưu tiên Các toán tử 2 toán hạng + Phép cộng 12 - Phép trừ 12 * Phép nhân 13 / Phép chia lấy phần nguyên 13 % Phép chia lấy phần dư (không hỗ trợ kiểu float) 13 Các toán tử 1 toán hạng + Cộng, không làm thay đổi toán hạng 14 - Đổi dấu toán hạng 14 ++ Tăng, cộng 1 đơn vị vào giá trị toán hạng. 14 Giảm, trừ 1 đơn vị vào giá trị toán hạng. 14 Tăng và giảm (++ & ) Lập trình vi điều khiển AVR với ngôn ngữ C WWW.EEELABS.ORG Trần Thừa – 2010 45 Toán tử ++ thêm 1 vào toán hạng của nó và – trừ bớt 1. Nói cách khác: x = x + 1 giống như ++x x = x – 1 giống như x— Cả 2 toán tử tăng và giảm đều thể tiền tố (đặt trước) hay hậu tố (đặt sau) toán hạng. Ví dụ: x = x + 1 thể viết x++ (hay ++x) Tuy nhiên giữa tiền tố và hậu tố sự khác biệt khi sử dụng trong 1 biểu thức. Khi 1 toán tử tăng hay giảm đứng trước toán hạng của nó, C thực hiện việc tăng hay giảm trước khi lấy giá trị dùng trong biểu thức. Nếu toán tử đi sau toán hạng, C lấy giá trị toán hạng trước khi tăng hay giảm nó. Tóm lại: x = 10 y = ++x //y = 11, x=11 Tuy nhiên: x = 10 y = x++ //y = 10, x=11 2. Các toán tử quan hệ và các toán tử Logic Các toán tử quan hệ dùng trong các biểu thức điều kiện. Ý nghĩa chính của toán tử quan hệ và toán tử logic là đúng hoặc sai. Trong ngôn ngữ C, các biểu thức giá trị khác 0 là đúng(true), bằng 0 là sai (false). Trong các biểu thức sử dụng toán tử quan hệ và logic kết quả trả về là 1(1 được xem là số khác 0 tiêu biểu) nếu biểu thức đúng và trả về 0 nếu biểu thức sai. Bảng tóm tắt các toán tử quan hệ và logic. Toán tử Ý nghĩa Độ ưu tiên Các toán tử quan hệ > Lớn hơn 10 >= Lớn hơn hoặc bằng 10 < Nhỏ hơn 10 <= Nhỏ hơn hoặc bằng 10 == Bằng 9 != Khác 9 Các toán tử Logic && Logic AND 5 || Logic OR 4 ! Logic NOT 14 Bảng sự thật cho các toán tử logic. p q p&&q p||q !p [...]... Tương tự: 0x1 23 4 | 0x5678; // Bằng 0x567C 0x1 23 4 ^ 0x5678; // Bằng 0x444C ~0x1 23 4 ; // Bằng 0xEDCB Toán tử thao tác bit phân biệt nhau dựa vào ví dụ sau: 0x 222 2 & 0x5555 = 0x0000; 0x 222 2 & 0x5555 = 1; /*AND logic giữa 2 giá trị khác 0 (đúng AND đúng = 1) */ ~0x1 23 4 = 0xEDCB; !0x1 23 4 =0; // Đảo giá trị khác 0 (đúng) thành giá trị sai =0 4 Toán tử điều kiện “?:” Toán tử điều kiện “?:” là toán tử 3 đối số... biểu thức 1 B2: Tính giá trị của biểu thức 2 - Nếu giá trị của biểu thức 2 là sai (=0): thoát khỏi câu lệnh for - Nếu giá trị của biểu thức 2 là đúng (!=0): được thực hiện B3: Tính giá trị của biểu thức 3 và quay lại B2 b Vòng lặp while Vòng lặp while giống như vòng lặp for, dùng để lặp lại một công việc nào đó cho đến khi điều kiện sai Trần Thừa – 20 10 53 Lập trình vi điều khiển AVR với ngôn... Thừa – 20 10 46 Lập trình vi điều khiển AVR với ngôn ngữ C WWW.EEELABS.ORG (Biểu_thức_1) ? (Biểu thức 2) : ( Biểu thức 3) ; Trong đó biểu thức 1 được tính toán trước, nếu kết quả là đúng thì biểu thức 2 được thực hiện , nếu kết quả là sai thì biểu thức 3 được thực hiện Ví dụ: Tìm số lớn hơn trong 2 số a và b max=(a>b)?a:b; Đổi ký tự in thường thành in hoa: c=(c>=’a’&&c Hoạt động Thực hiện AND 2 bit tương ứng, trả về 1 nếu cả 2 cùng bằng 1, trả về 0 nếu 1 trong 2 bằng 0 Thực hiện OR 2 bit tương ứng, trả về 0 nếu cả 2 cùng bằng 0, trả về 1 nếu 1 trong 2 bằng 1 Thực hiện XOR 2 bit tương ứng, trả về 1 nếu 2 bit khác nhau... không còn nhiều 3 Cấu trúc vòng lặp a Vòng lặp FOR Vòng lặp for cho phép lặp lại công việc cho đến khi điều kiện sai Cú pháp: for (Biểu thức 1; biểu thức 2; biểu thức 3) Công việc; Trần Thừa – 20 10 52 Lập trình vi điều khiển AVR với ngôn ngữ C WWW.EEELABS.ORG Vào Tính giá trị Biểu thức 1 Kiểm điều kiện ở biểu thức 2 Tính giá trị biểu thức 3 Đúng Thực hiện công việc Sai Ra Giải thích: - Biểu thức 1:... n-1) khối lệnh n-1; else khối lệnh n; Vào Sai BTĐK1 BTĐK2 Sai Sai BTĐK(n-1) Sai BTĐKn Đúng Khối lệnh 1 Đúng Khối lệnh 2 Đúng Khối lệnh n-1 Đúng Khối lệnh n Ra Giải thích: Nếu biểu thức điều kiện thứ n đúng thì thực hiện khối lệnh n, nếu tất cả biểu thức điều kiện đều cho giá trị sai thì thoát mà không làm gì cả Trần Thừa – 20 10 50 Lập trình vi điều khiển AVR với ngôn ngữ C WWW.EEELABS.ORG 2 Cấu trúc chọn... nhọn{} So sánh lưu đồ giải thuật của 2 dạng switch - case (có default và không default) Trần Thừa – 20 10 51 Lập trình vi điều khiển AVR với ngôn ngữ C Vào Vào Biểu thức = giá trị 1 WWW.EEELABS.ORG Biểu thức case giá trị 1 = giá trị 1 break ? = giá trị 2 case giá trị 2 break ? = giá trị 2 break ? = giá trị n case giá trị n case giá trị 1 case giá trị 2 break ? = giá trị n break ? case... khối lệnh 2 và thoát khỏi if Khối lệnh 1 Khối lệnh 2 Ví dụ: if(a==b) a++; //Nếu a=b thì a tăng 1 if (a!=b){ Ra a++; b=a; } Trần Thừa – 20 10 49 Lập trình vi điều khiển AVR với ngôn ngữ C WWW.EEELABS.ORG c Dạng ELSE IF Quyết định sẽ thực hiện 1 trong n khối lệnh cho trước Cú pháp: if(biểu thức điều kiện 1) khối lệnh 1; else if (biểu thức điều kiện 2) khối lệnh 2; … else if (biểu thức điều kiện n-1) khối... - Biểu thức 1: thông thường là một phép gán để khởi tạo giá trị ban đầu cho biến điều kiện - Biểu thức 2: là một biểu thức kiểm tra điều kiện đúng sai để dừng vòng lặp - Khi biểu thức 2 vắng mặt thì nó được coi là luôn luôn đúng - Biểu thức 3: thông thường là một phép gán để thay đổi giá trị của biến điều kiện - Trong mỗi biểu thức thể nhiều biểu thức con Các biểu thức con được phân biệt bởi dấu... bit khác nhau và trả về 0 nếu 2 bit giống nhau Toán tử 1 toán hạng, lấy đảo từng bit Dịch trái, dịch trái các bit, bỏ bit ngoài cùng bên trái(MSB) và gán 0 cho bit ngoài cùng bên phải (LSB) Dịch phải, dịch trái các bit, bỏ bit ngoài cùng bên phải(LSB) và gán 0 cho bit ngoài cùng bên trái (MSB) Độ ưu tiên 8 6 7 14 11 11 Các ví dụ: 0x1 23 4 & 0x5678; // Bằng 0x1 23 0 Vì: 0x1 23 4 : 0001 0010 0011 0100 & 0x5678 . 0 25 5 signed char 1 -1 28 127 (signed) short (int) 1 -1 28 127 unsigned short (int) 1 0 25 5 (signed ) int 2 -3 27 68 32 767 unsigned int 2 0 65 535 (signed) long (int) 4 -2 1474 836 48 21 474 836 48. Lập trình vi điều khiển AVR với ngôn ngữ C WWW.EEELABS.ORG Trần Thừa – 20 10 36 Bài 2 : NGÔN NGỮ C CƠ BẢN I. Giải thuật lập trình. Giải thuật lập trình có tác dụng định hướng cho lập trình. 429 496 729 5 c. Kiểu số thực Tên kiểu Kích thước Khoảng giá trị float 4 -1 .5*10 45 +3. 4*10 38 Lập trình vi điều khiển AVR với ngôn ngữ C WWW.EEELABS.ORG Trần Thừa – 20 10 42 double 4 -1 .5*10 45

Ngày đăng: 27/05/2014, 23:15

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan