View Single Post
Old 16-08-2008, 01:03 AM   #3
phamminhtuan
Super Moderator
 
phamminhtuan's Avatar
 
Tham gia ngày: Feb 2006
Bài gửi: 150
:
C30 - Lướt qua

Kết nối phần cứng đến đây là tạm ổn, từ giờ về sau, hầu như mọi công việc mà chúng ta phải làm là học và viết phần mềm trên C30. Cần nói sơ lược về cấu trúc chương trình viết cho VĐK như sau:

Trình biên dịch C30 sẽ dịch trỏ đến hàm main() sau khi reset, có nghĩa là mọi hoạt động của VĐK bắt đầu ở hàm main(), sau khi CPU thực hiện hết chuỗi lệnh trong hàm này mà không có 1 lệnh rẽ nhánh hay chuyển hướng nào thì nó sẽ nạp cho bằng hết các mã lệnh trong Flash, cho đến địa chỉ cuối cùng và nhảy về địa chỉ ban đầu, reset và tiếp tục như vậy. Nhưng chúng ta thì không muốn thế, bao giờ mình cũng cần khởi tạo các giá trị nào đó và sau đó là muốn CPU thực hiện công việc gì đó lặp đi lặp lại, vì vậy cần phải lưu ý đến vòng lặp vô hạn để giữ cho CPU làm việc trong 1 chu trình nhất định.
PHP Code:
#include ....
void function1() {
 ...
}
char function2() {
...
}

void main() {
 
//Chương trình chính nằm ở đây
 
while(1) {
   
//Chương trình thực hiện lặp đi lặp lại ở đây
 
}

Comment
PHP Code:
//Đây là dòng comment đơn, trình dịch sẽ bỏ qua tất cả sau 2 dấu //
/* 
Đây là block comment, trình dịch sẽ bỏ qua tất cả nằm giữa 2 dấu
này
*/ 
Kiểu dữ liệu và khai báo,
PHP Code:
unsinged char     uchar1uchar2uchar3 'a'uchar4//kiểu ký tự 8 bit 
//không âm, giới hạn từ 0-255

char        c1c2
signed char        sc1sc2//cả cách khai báo đều tạo ra biến mang dấu 8 bit,
// giới hạn từ -128 đến 127

unsigned short     us1us2
unsigned int        ui1ui2;  //hai kiểu này không dấu, dương, 16 bit, 
//giới hạn từ 0 đến 65535

int              iaib;
signed int     siasib;  //Hai cách khai báo khác nhau, 
//nhưng tạo ra 1 biến int 16 bit, mang dấu, giới hạn từ -32768 đến 32767

short             sasb;
signed short        ssassb;  //Hai cách khai báo khác nhau, 
//nhưng tạo ra 1 biến short 16 bit, mang dấu, giới hạn từ -32768 đến 32767

unsigned long   ul1ul2//32 bit, không dấu 
signed long        sl1sl2//32bit có dấu
long            l1l2//tương tự cách khai báo với signed

unsigned long long    ll1ll2//64bit nguyên, không dấu
long long     sll1sll2//64 bit nguyên có dấu
signed long long     sll1sll2//64 bit nguyên có dấu

double      d1d2//dấu chấm động 32 bit
float         f1f2//số thực, dấu chấm động 32 bit
long double  ld1;  //dấu chấm động 64 bit 
Khai báo mảng, chuỗi, con trỏ
PHP Code:
char  carray[] = {1,2,3,4,5}; //Khai báo mảng kiểu Char gán luôn 5 phần tử,
//carray[0] = 1 và carray[4] = 5

int     iarray[5]; //khai báo vùng biến kiểu Int, chưa gán

char str[] = "abc"//Khai báo chuỗi, hay mảng ký tự
// str[0] = 'a';
// str[1] = 'b';
// str[2] = 'c';
// str[3] = '\0'
char str1[20] = "Hello Picvietnam"//ok,

//Khai báo mảng 2 chiều
char  str1[2][2] = {{'a''b'}, {'c','d'}};
//truy xuất mảng hai chiều
//str1[0][0] = 'a';...
//str1[1][1] = 'd';

//Khai báo con trỏ, dữ liệu loại nào thì khai báo con trỏ loại đó
char    x;
char   *ptr_x = &x
//ptr_x mang giá trị là địa chỉ của x, *ptr_x mang giá trị của x

float  f[] = {0.10.20.3};
float  *ptr_f = &f;
//*ptr_f  =  f[0]
//*(ptr_f+1) = f[1]
//(*ptr_f+1) = 1.1

//Khai báo const với con trỏ
const char *menu[3] = {"Main" "Sub""Sub2"}; 
Cấu trúc
PHP Code:
struct complex {
 
float re;
 
float im;
a
//Định nghĩa kiểu số phức được gọi là a
//sử dụng như sau
struct complex b;
a.re 2.5;
b.im 1.0;

//1 cách khác
typedef struct ComplexNumber {
 
float re;
 
float im;
complex;
//complex như là 1 kiểu dữ liệu, sử dụng như sau
complex a = {1.11.2};
complex b;
b.im a.im;
//Sử dụng cấu trúc trong cấu trúc
struct point {
 
float x;
 
float y;
}
struc line {
 
struct point a;
 
struct point b;
}
//sử dụng
struct line my_line;
my_line.a.1.2;
my_line.b.2.0
Con trỏ và cấu trúc
PHP Code:
//con trỏ và cấu trúc
struct Strings {
 
char A[4];
 
chat *B;
str;
//sử dụng
str.A[0] = 'r';
str.A[1] = 'e';
str.A[2] = 'd';
str.A[3] = '\0';
str."Hello Wold";

typedef struct ComplexNumber {
 
float re;
 
float im;
complex;
//
complex a = {1.22.2};
complex *b;
= &a;
b->re += 3.0//a.re = 4.2
b->im -= 1//a.im = 1.2 
Kiểu hợp và Bit Fields
PHP Code:
typedef union {
 
char a;
 
int b;
 
float c
u_test;
//sử dụng
u_test xy;
x.'A';
x.0xFF00;
y.0.1;

//Bit Fields
typedef struc {
 
bit0:1;
 
bit1:1;
 
bit23:2;
 
bit4567:4;
bitfields;

bitfieds c;
c.bit0 1;
c.bit23 3//ok, 
c.bit4567 0x0F//ok, 

Kiểu liệt kê
PHP Code:
 enum colors {RED=1GREENBLUE};//GREEN = 2, BLUE=3
 
int sum REG+GREEN+BLUE//6
 
 
enum colors {REDGREENBLUE};
 
enum colors pixel;
 
pixel RED//0 
Phần C các bạn có thể xem thêm lập trình ANSI C và MPLAB® C30 User’s Guide đã cung cấp link

thay đổi nội dung bởi: phamminhtuan, 16-08-2008 lúc 09:39 PM.
phamminhtuan vẫn chưa có mặt trong diễn đàn