Trong kỹ thuật lập trình vi điều khiển nói chung, ngôn ngữ lập trình được sử dụng thường chia làm 2 loại: Ngôn ngữ bậc thấp và Ngôn ngữ bậc cao. Ngôn ngữ bậc cao là các ngôn ngữ gần vơi ngôn ngữ con người hơn, do đó việc lập trình bằng các ngôn ngữ này trở nên dễ dàng và đơn giản hơn. Có thể kể đến một số ngôn ngữ lập trình bậc cao như C, Basic, Pascal… trong dó C là ngôn ngữ thông dụng hơn cả trong kỹ thuật vi điều khiển....
Đề cương ứng dụng lập trình C cho vi điều khiển 8051 Bài 1: Ngơn ngữ C – Trình dịch Keil C I Ngôn ngữ C cho vi điều khiển 1, Giới thiệu ngôn ngữ C Trong kỹ thuật lập trình vi điều khiển nói chung, ngơn ngữ lập trình sử dụng thường chia làm loại: Ngôn ngữ bậc thấp Ngôn ngữ bậc cao Ngôn ngữ bậc cao ngôn ngữ gần vơi ngôn ngữ người hơn, việc lập trình ngơn ngữ trở nên dễ dàng đơn giản Có thể kể đến số ngơn ngữ lập trình bậc cao C, Basic, Pascal… dó C ngôn ngữ thông dụng kỹ thuật vi điều khiển Về chất, sử dụng ngôn ngữ thay cho ngôn ngữ bậc thấp giảm tải cho lập trình viên việc nghiên cứu tập lệnh xây dựng cấu trúc giải thuật Chương trình viết ngơn ngữ bậc cao phần mềm máy tính gọi trình biên dịch (Compiler) chuyển sang dạng hợp ngữ trước chuyển sang mã máy Khi sử dụng ngôn ngữ C người lập trình khơng cần hiểu sâu sắc cấu trúc vi điều khiển Có nghĩa với người chưa quen với vi điểu khiển cho trước xây dựng chương trình cách nhanh chóng hơn, khơng phải thời gian tìm hiểu kiến trúc vi điều khiển Và việc sử dụng lại chương trình xây dựng trước dễ dàng hơn, sử dụng tồn sửa chữa phần Ngôn ngữ C 2.1 Kiểu liệu 2.1.1 Kiểu liệu C Kiểu Char Unsigned char Int Unsigned int Long Unsigned long Float Số Byte 1 2 4 Khoảng giá trị -128 – +127 – 255 -32768 - +32767 - 65535 -2147483648 - +2147483647 – 4294697295 * Khai báo biến: - Cú pháp: Kiểu_dữ_liệu Vùng_nhớ Tên_biến _at_ Đia_chỉ; Ví dụ: Unsigned char data x; - Khi khai báo biến gán ln cho biến giá trị ban đầu Ví dụ: Thay vì: unsigned char x; x = 0; Ta cần: unsigned char x = 0; - Có thể khai báo nhiều biến kiểu lúc Ví dụ: unsigned int x,y,z,t; - Chỉ định vùng nhớ: từ khố “Vùng_nhớ” cho phép người dùng vùng nhớ sử dụng để lưu trữ biến sử dụng chương trình Các vùng nhớ sử dụng là: CODE, DATA, DATAB, IDATA, PDATA, XDTA Khi khơng khai báo vùng nhớ trình dịch Keil C mặc định vùng nhớ DATA Vùng nhớ CODE DATA BDATA IDATA PDATA XDATA Ý nghĩa Bộ nhớ mã nguồn chương trình Bộ nhớ liệu gồm 128 Byte thấp RAM vi điều khiển Bộ nhớ liệu có thê định địa bit, nằm vùng nhớ DATA Bộ nhớ liệu gồm 128 Byte cao RAM vi điều khiển có số dòng vi điều khiển sau Bố nhớ liệu gồm 256 Byte, truy cập địa đặt P0 Bộ nhớ liệu ngồi có dung lượng lên đến 64 KB, truy cập địa đặt P0 P2 * Định nghĩa lại kiểu - Cú pháp: typedef Kiễu_dữ_liệu Tên_biến; - Ten_biến sau sử dụng kiểu liệu dùng để khai báo biến khác Ví dụ: typedef int m5[5]; Dùng tên m5 khai báo hai biến tên a b có kiểu liệu mảng chiểu phần tử: m5 a,b; 2.1.2 Kiểu liệu Keil C Kiểu Số bit Bit Sbit Sfr Sfr16 16 - bit : dùng để khai báo biến có giá trị hay biến logic vùng RAM vi điều khiển Khi khai báo biến kiểu bit trình dịc Keil C mặc định vùng nhớ sử dụng BDATA ` - sbit, sfr, sfr16: dùng để định nghĩa cho ghi chức cổng vi điều khiển dùng để truy nhập đoạn liệu bit, bit, 16 bit 2.1.3 Mảng Mảng tập hợp nhiều phần tử kiểu giá trị chung tên Các phần tử mảng phân biệt với số hay số thứ tự phần tử dãy phẩn tử Mỗi phần tử có vai trị biến lưu trữ giá trị độc lập với phần tử khác mảng Mảng mảng chiều mảng nhiều chiều Khai báo: - Cú pháp: Tên_kiểu Vùng_nhớ Tên_mảng[số_phần_tử_mảng]; Khi bỏ trống số phần tử mảng ta có mảng có số phần tử Ví dụ: Unsigned int data a[5],b[2] [3]; Với khai báo ta có: mảng a mảng chiều phần tử Mảng b mảng hai chiều, tổng số phần tử Chỉ số mảng số Mảng có chiều phải cung cấp đầy đủ nhiêu sơ Ví du: phần tử mảng b[0] [1] Khi viết b[0] sai 2.1.4 Con trỏ Khi ta khai báo biến, biến cấp phát khoảng nhớ bao gồm số byte định dùng để lưu trữ giá trị Địa khoảng nhớ địa biến khai báo Con trỏ biến dùng để chứa địa mà không chứa giá trị, hay giá trị trỏ địa khoảng nhớ mà trỏ tới Với vùng nhớ cụ thể trỏ tới vùng nhớ chiếm dung lượng phụ thuộc vào độ lớn vùng nhớ Con trỏ tổng qt khơng xác định trước vùng nhớ có dung lượng lớn tốt nên sử dụng trỏ cụ thể Loại trỏ Con trỏ tổng quát Con trỏ XDATA Con trỏ CODE Con trỏ DATA Con trỏ IDATA Con trỏ PDATA Kích thước byte byte byte byte byte byte Khai báo biến trỏ: - Cú pháp: Kiểu_Dữ_liệu Vùng_nhớ *Tên_biến; - Ví dụ: int *int_ptr; long data *long_ptr; - khơng rõ vùng nhớ trỏ coi trỏ tổng quát 2.1.5 Kiểu liệu cấu trúc Kiểu liệu cấu trúc tập hợp biến, mảng kiểu cấu trúc khác biểu thị tên kiểu liệu cấu trúc dùng để lưu trữ giá trị, thơng tin có liên quan đến Định nghĩa khai báo biến cấu trúc: - Định nghĩa: typedef struct { Khai báo biến thành phần; } Tên_kiểu_cấu_trúc; - Khai báo: Tên_kiểu_cấu_trúc Vùng_nhớ Tên_biến; Ví dụ: typedef struct { char day; char month; int year; } Date_type; Date_type date,date_arr[5]; 2.2 Phép tốn Phép gán kí hiệu: “=” - Cú pháp: Biến_1 = Biến_2; Trong Biến_2 giá trị xác định biến 2.2.1 Phép tốn số học Phép tốn ý nghĩa Ví dụ + Phép cộng X=a+b Phép trừ X=a-b * Phép nhân X=a*b / Phép chia lấy phần X=a/b nguyên (a=9, b=2 → X=4) % Phép chia lấy phần dư a%b (a=9, b=2 → X=1) 2.2.2 Phép toán Logic AND: && OR: || NOT: ! 2.2.3 Các phép toán so sánh: PhÐp toán ý nghià > So sánh lớn >= < b 4>5 có giá trị a>=b 6>=2 có giá trị a