Bài này giới thiệu cho các bạn các hàm và các toán tử cơ bản hay dùng trong khi lập trình cho vi điều khiển PIC bằng CCS. Cần nhắc lại là CCS tương tự như C nếu các bạn đã làm quen với C rồi thì rất dễ để lập trình.

xulybit

Các hàm xử lý số :
Sin() cos() tan()  Asin()  acos()  atan() 
Abs() : lấy trị tuyệt đối
Ceil( ) :làm tròn theo hướng tăng
Floor ( ) : làm tròn theo hướng giảm
Exp ( ) : tính e^x
Log ( ) :tính log
Log10 ( ) : log10
Pow ( ) : tính luỹ thừa
Sqrt ( ) :căn thức
Tùy thuộc vào dòng vì điều khiển mà tốc độ xử lý khác nhau (PIC 12,PIC 14) xử lý chậm, các dòng cao hơn thì xử lý nhanh.

Các toán tử cơ bản trong CCS:

Các toán tử cơ bản trong CCS hoàn toàn tương tự trong C.

 ,+, - , x , :  ý nghĩa là cộng, trừ, nhân, chia

Ví dụ: x+=5 nghĩa là x= x+5.

++, --  ý nghĩa là cộng thêm hoặc bớt đi một đơn vị vào biến

Ví dụ: a++; tức là a=a+1

 &&: phép AND, ||: phép OR,  !: phép NOT,  !=: không bằng, >>n: dịch trái n bit, <<n: dịch phải n bit

 Các hàm xử lý Bit, Byte trong CCS :

Shift_right ( address , byte , value ) , Shift_left   ( address , byte , value ) 
+ Dịch phải (trái ) 1 bit vào 1 mảng hay 1 cấu trúc .

Address :địa chỉ cần dịch đến.

byte: số byte cần dịch

value : 0 hoặc 1

Ví dụ : byte buffer[3];

shift_left(buffer,3,input(PIN_A3)); // Đọc 24 bits từ PIN A3 cất vào 3 byte buffer;

Rotate_right ()  ,  rotate_left () 

x = 0x86; rotate_left( &x, 1); // x is now 0x0d

Bit_clear ( var , bit ),Bit_set ( var , bit )  
+ Bit_clear ( ) dùng xóa  bit được chỉ định bởi vị trí bit trong biến var .
+ Bit_set ( ) dùng set=1 bit được chỉ định bởi vị trí bit trong biến var .
+ var : biến 8 , 16 , 32 bit bất kỳ .
+ bit : vị trí clear ( set )  : từ  0-7 ( biến 8 bit) , 0-15 ( biến 16 bit ) , 0-31 (biến 32 bit ) .
+ Hàm không trả về trị .
Ví dụ : int x; x=5; bit_set(x,3); // x is now 13

Bit_test ( var , bit ) : 
+ Dùng kiểm tra vị trí bit trong biến var .
+ Hàm trả về 0 hay 1 là giá  trị bit đó trong var .
+ var : biến 8, 16 ,32 bit .
+ bit : vị trí bit trong var .
Hàm này thường dùng để kiểm tra bit tại một vị trí xác định bởi biến var, rất hữu ích khi dùng trong vòng lặp hoặc dùng với câu lệnh điều kiện IF

Ví dụ : int8 x;  if ( bit_test ( x, 3)  // kiểm tra bit thứ 3 của biến x;
Swap ( var ) : 
+ var : biến 1 byte
+ Hàm này tráo vị trí 4 bit trên với 4 bit dưới của var , tương đương  var =( var>>4 ) | ( var << 4 )
+ Hàm không trả về trị .
VD : 
X= 5 ;  //x=00000101b 
Swap ( x) ; //x = 01010000b = 80

 make8  ( var  , offset ) : 
+Hàm này trích 1 byte từ biến var .
+ var : biến 8,16,32  bit . offset là vị trí của byte cần trích ( 0,1,2,3) . 
+ Hàm trả về giá trị byte cần trích .
VD : 
Int16 x = 1453 ;  // x=0x5AD  
Y = Make(x, 3) ;   //Y= 5 = 0x03 

make16 ( varhigh , varlow ) : 
+Trả về giá trị 16 bit kết hợp từ 2 biến 8 bit varhigh và varlow . Byte cao là varhigh , thấp là varlow .

make32 ( var1 , var2 , var3 , var4 ) :  
+ Trả về giá trị 32 bit kết hợp từ  các giá trị 8 bit hay 16 bit từ  var1 tới var4 . Trong đó var2 đến var4 có thể có hoặc không . Giá trị var1 sẽ là MSB , kế tiếp là var2 , . . .Nếu tổng số bit kết hợp ít hơn 32 bit thì 0 được thêm vào MSB cho đủ 32 bit .
VD:
Int a=0x05 , b=0x06 , c=0x07 , d=0x08 ;  // các giá trị hex 
Int32 e ; 
e = make32 (  a , b , c , d );   // e = 0x05060708

Các hàm tạo trễ (delay):

Các hàm tạo trễ gồm delay_cycles(), delay_us(), delay_ms. Tạo một khoảng thời gian trễ từ lúc lệnh được thực hiện. Chú ý là phải sử dụng khai báo tiền xử lý # use delay(clock=tần sô) thì mới dùng được các lệnh này.

  • delay_cycles(số chu kỳ): tạo trễ một khoảng thời gian bằng số chu kỳ. Số chu kỳ=0-255
  • delay_us(số micro giây): tạo trễ số micro giây. Số micro giây =0-65535
  • delay_ms(số mili giây): tạo trễ số mili giây. Số mili giây= 0-65535

Epicviet.com