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.
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