Tải bản đầy đủ (.doc) (8 trang)

CHƯƠNG IV NGÔN NGỮ lập TRÌNH CHO PIC

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (97.18 KB, 8 trang )

CHƯƠNG IV: NGÔN NGỮ LẬP TRÌNH CHO PIC

Ngôn ngữ lập trình cho PIC rất đa dạng . Ngôn ngữ lập trình cấp thấp có
Asemmbler , các ngôn ngữ lập trình cấp cao có C, Basic, Pascal, Kell C, …Ngoài ra
còn có 1 số ngôn ngữ lập trình được phát triển dành riêng cho Pic như PicBasic,
MikroBasic, … Nhưng do giới hạn của
đề tài này mà nhóm chi giới thiệu về ngôn ngữ lập trình C.
4.1
Các kiểu khai báo biến, mảng
4.1.1 Các khai báo biến
int1 số 1 bit có giá trị là 0 hoặc 1.
int8 số nguyên 1 byte ( 8 bit) có giá trị từ từ -127 đến 128.
int16 số nguyên 16 bit .
int32 số nguyên 32 bit
char ký tự 8 bit .
float số thực 32 bit.
short như kiểu int1 .
byte như kiểu int8 .
int như kiểu int8 .
long như kiểu int16.
Khai báo Unsigned ở phía trước để đó là số không dấu.
Ví dụ: Unsigned int8 sẽ có giá trị từ 0 đến 255.
4.1.2 Khai báo mãng
4.1.2.1Khai báo mãng 1 chiều
Đối với việc khai báo mãng 1chiều có 2 cách để khai báo đó là khai báo mãng
tĩnh và mãng động.
Khai báo mãng tĩnh: Int8 const a[i]={a0,……., ai}
Nếu khai báo mảng như trên thì ta sẻ có 1 mảng gồm i phần tử.
Lưu ý: nếu đánh không đủ số phần tử vào trong ngoặc kép như đã khai báo, các
phần tử còn lại sẽ là 0. Truy xuất giá trị vượt quá chỉ số mãng khai báo sẻ làm chương
trình chạy vô tận.


VD: int8 const a[7]={1,2,3,4,5,6} thì phần tử thứ 7 sẽ mang giá trị là 0.
Khai báo mãng động: Int8 const a[]={a0,…….,ai}
Nếu khai báo mảng như trên thì ta sẻ có 1 mảng có kích thước bằng với số phần
tử được nhập vào .
VD: int8 const a[]={1,2,3,4,5,6,7} thì mãng a[] sẽ có kích thước là 7 .
4.1.2.2Khai báo mãng 2 chiều
Int8 const a[i][j]={a00,………….,a0j
………………...
ai0…………...,aij}
VD: int8 const a[2][3]={1,2,3
4,5,6}.

Trường CĐKT Cao Thắng

Trang 1


CHƯƠNG IV: NGÔN NGỮ LẬP TRÌNH CHO PIC

4.2

4.3

4.3.1

If….else

Các phép toán trong C

+

Phép cộng
+=
Phép cộng bằng VD: x+=8  x=x+8
=
Phép gán giá trị
/
Phép chia lấy phần nguyên
==
So sánh bằng
>
Lớn hơn
>=
Lớn hơn hoăc bằng
++
Tăng 1 đơn vị
*
Nhân
!=
Khác
<<=
Dịch trái
<
Bé hơn
<<
Dịch trái
<=
Bé hơn hoặc bằng
&&
Phép ‘AND’
!

Phủ định
-Phép giảm 1 đơn vị
||
Phép OR
%
Phép chia lấy phần dư
~
Phép bù
>>=
Dịch phải
>>
Dịch phải
Phép Trừ
Dạng 1:
If (điều kiện)
{lệnh 1;
lệnh 2;
……….
lệnh n;}
VD: if(x==5)
{x=1;}

Trường CĐKT Cao Thắng

Các
cấu
trúc
hàm

bản

của
C

Trang 2


CHƯƠNG IV: NGÔN NGỮ LẬP TRÌNH CHO PIC

Dạng 2:
If (điều kiện)
{lệnh 1;
lệnh 2;
……….
lệnh n;}
else

4.3.2

{lệnh 1;
lệnh 2;
……….
lệnh n;}
Dạng 3:
If (điều kiện)
{lệnh 1;
lệnh 2;
……….
lệnh n;}
else if (điều kiện)
{lệnh 1;

lệnh 2;
……….
lệnh n;}
Cấu trúc For
Cấu trúc:
For(gt 1,…gti;dk1,……dkm,bt1,….btk)
{lệnh 1;
lệnh 2;
…………;
lệnh n;}

4.3.3

VD: for(i=0;i<9;i++)
{x+=5;}
Cấu trúc do…..while
Cấu trúc:
Do
{lệnh 1;
Trường CĐKT Cao Thắng

Trang 3


CHƯƠNG IV: NGÔN NGỮ LẬP TRÌNH CHO PIC

lệnh 2
…………;
lệnh n;}
4.3.4


4.3.5

4.4.1

while(điều kiện)
Cấu trúc While
Cấu trúc:
While(điều kiện)
{lệnh 1;
lệnh 2;
………
lệnh n;}
Cấu trúc Switch….case
Cấu trúc:
Switch(variable)
{case (value 1):{lệnh 1;break;}
case (value 2):{lệnh 2;break;}
-----------------------------------case (value n):{lệnh n;break;}
4.4
Các lênh cơ bản
Các lệnh tiền xử lý

#INCLUDE
Cú pháp : #include <tên PIC.h>
Luôn phải có và đăt ở dòng đầu tiên.
#BYTE
Cú pháp: #byte id=X
Tạo 1 byte đặt ở địa chỉ X
VD: #byte PortB=0x06.

#BIT
Cú pháp:
#bit id = x.y
Mô tả: Tạo 1 bit đặt ở byte X vị trí Y dùng kiểm tra hay gán giá trị bit cho thanh
ghi.
#USE DELAY
Cú pháp: #USE DELAY (CLOCK=SPEDD)
Khai báo tần số thạch anh sử dụng.
VD: #use delay (clock=4000000)
#USE FAST_IO
Cú pháp: #use fast_io(tên Port)
4.4.2 Các lệnh delay
Delay_cycles(value)
Value : giá trị từ 0 đến 255. Là số chu kì lệnh. 1 chu kì lệnh bằng 4 chu kì máy.
Trường CĐKT Cao Thắng

Trang 4


CHƯƠNG IV: NGÔN NGỮ LẬP TRÌNH CHO PIC

4.4.3

4.4.4

Delay_us(time)
Time là thời gian delay đơn vị tính là µs.
Nếu Time là hằng số thì Time nằm trong khoảng 0 ≤ Time ≥ 65535.
Nếu Time là biến số thì Time nằm trong khoảng 0 ≤ Time ≥ 255.
Delay_ms(time)

Time là thời gian delay đơn vị tính là ms.
Nếu Time là hằng số thì Time nằm trong khoảng 0 ≤ Time ≥ 65535.
Nếu Time là biến số thì Time nằm trong khoảng 0 ≤ Time ≥ 255.
Các lệnh I/O
Output_low(pin) và Output_high(pin)
Dùng thiết lập mức ‘0’ hay mức ‘1’ cho các chân của IC.
Output_X(value)
X: tên Port .
Value: từ 0 đến 255.
Input(pin)
Input_X(tên port)
Set_tris_X(value)
Value: từ 0 đến 255.
Hàm này định nghĩa chân I/O của 1 port.
Các lệnh sử dụng khối chức năng
4.4.4.1 ADC
Setup_ADC ( mode ) :
Dùng cài đặt thời gian chuyển đổi của bộ ADC
ADC_OFF
: tắt bộ ADC
ADC_CLOCK_INTERNAL
: thời gian lấy mẫu bằng tốc độ xung Clock
ADC_CLOCK_DIV_2
: thời gian lấy mẫu bằng tốc độ xung Clock/2
ADC_CLOCK_DIV_8
: thời gian lấy mẫu bằng tốc độ xung Clock/8
ADC_CLOCK_DIV_32
: thời gian lấy mẫu bằng tốc độ xung
Clock/32
Setup_ADC_ports ( value )

Xác định chân lấy tín hiệu Analog và điện thế chuẩn
ALL_ANALOGS : tất cả các chân đều để đọc Analog : A0 A1 A2 A3 A5 E0 E1
E2 (Vref=Vdd)
NO_ANALOG : Không dùng Analog các chân sẻ là I/O .
AN0_AN1_AN2_AN4_AN5_AN6_AN7_VSS_VREF : A0 A1 A2 A5 E0 E1 E2
VRefh=A3
AN0_AN1_AN2_AN3_AN4 : A0 A1 A2 A3 A5
AN0_AN1_AN3 : A0 A1 A3 , Vref = Vdd
AN0_AN1_VSS_VREF : A0 A1 VRefh = A3
AN0_AN1_AN4_AN5_AN6_AN7_VREF_VREF : A0 A1 A5 E0 E1 E2
VRefh=A3 , VRefl=A2
Trường CĐKT Cao Thắng

Trang 5


CHƯƠNG IV: NGÔN NGỮ LẬP TRÌNH CHO PIC

AN0_AN1_AN2_AN3_AN4_AN5 : A0 A1 A2 A3 A5 E0
AN0_AN1_AN2_AN4_AN5_VSS_VREF : A0 A1 A2 A5 E0 VRefh=A3
AN0_AN1_AN4_AN5_VREF_VREF : A0 A1 A5 E0 VRefh=A3 VRefl=A2
AN0_AN1_AN4_VREF_VREF : A0 A1 A5 VRefh=A3 VRefl=A2
AN0_AN1_VREF_VREF : A0 A1 VRefh=A3 VRefl=A2
AN0 : A0
AN0_VREF_VREF : A0 VRefh=A3 VRefl=A2
Set_ADC_channel(channel)
Chọn chân để đọc giá trị ADC. Giá trị channel tùy thuộc vào từng loại Pic.Đối
với Pic16F877A channel có những giá trị sau:
0-chân A0
1-chân A1

2-chân A2
3-chân A3
4-chân A5
5-chân E0
6-chân E1
7-chân E2
Read_ADC()
Dùng đọc giá trị từ thanh ghi chứa kết quả biến đổi ADC.
4.4.4.2 Timer0
Setup_Timer_0 (mode|bộ chia tần)
Hàm này có chức năng là cài đặt bộ timer0
Trong đó mode là:
RTCC_Internal
: xung tác động là xung nội
RTCC_EXT_L_TO_H
: xung (cạnh lên) tác động từ chân RA4
RTCC_EXT_H_TO_L
: xung (cạnh xuống) tác động từ chân RA4
RTCC_DIV_1
: chia tần 1:1
RTCC_DIV_2
: chia tần 1:2
RTCC_DIV_4
: chia tần 1:4
RTCC_DIV_8
: chia tần 1:8
RTCC_DIV_16
: chia tần 1:16
RTCC_DIV_32
: chia tần 1:32

RTCC_DIV_64
: chia tần 1:64
RTCC_DIV_128
: chia tần 1:128
RTCC_DIV_256
: chia tần 1:256
Set_timer0(value)
Hàm này có chức năng gán giá trị vào Timer0.
Get_timer0()
Hàm này có chức năng trả về giá trị của Timer0.
4.4.4.3 Timer1
Trường CĐKT Cao Thắng

Trang 6


CHƯƠNG IV: NGÔN NGỮ LẬP TRÌNH CHO PIC

Setup_timer_1(mode|bộ chia tần)
Hàm này có chức năng là cài đặt bộ timer0
Trong đó mode là:
T1_INTERNAL
: xung tác động là xung nội
T1_EXTERNAL
: xung (không đồng bộ) tác động từ chân RC0
T1_EXTERNAL_SYNC : xung (đồng bộ) tác động từ chân RC0
T1_DIV_BY_1
: chia tần 1:1
T1_DIV_BY_2
: chia tần 1:2

T1_DIV_BY_4
: chia tần 1:4
T1_DIV_BY_8
: chia tần 1:8
Set_timer1(value)
Hàm này có chức năng gán giá trị Timer1.
Get_timer1()
Hàm này có chức năng trả về giá trị của Timer1.
4.4.4.4 Timer2
Setup_timer_2(bộ chia tần,period,postscale)
Hàm này có chức năng là cài đặt bộ timer2
T2_DIV_BY_1
: chia tần 1:1
T2_DIV_BY_4
: chia tần 1:4
T2_DIV_BY_16
: chia tần 1:16
Set_timer1(value)
Hàm này có chức năng gán giá trị vào Timer2.
Get_timer1()
Hàm này có chức năng trả về giá trị của Timer2.
4.4.4.5 PWM
Setup_ccpX(ccp_pwm)
set_pwmX_duty(x);
Setup_timer_2(bộ chia tần,period,postscale)
4.4.4.6 SPI
setup_spi(SPI_MASTER | SPI_h_TO_l| SPI_CLK_DIV_16);
spi_write(value);
Trên đây chỉ giới thiệu 1 số lệnh cơ bản của C. Ngoài ra nó còn nhiều lệnh khác chi tiết
xem tại file Help của CCS.

4.4.5 Cấu trúc của 1 chương trình C.
#include <16f877a.h>
#use delay(clock=speed)
………………………….
Void chuongtrinhcon 1;//có thể có hoặc không tùy theo cách viết
……………………….
Void chuongtrinhcon n;
Void main()
Trường CĐKT Cao Thắng

Trang 7


CHƯƠNG IV: NGÔN NGỮ LẬP TRÌNH CHO PIC

{lệnh 1 ;
……….;
Chuongtrinhcon 1 (); //nếu có.
lệnh n;
}
Void chuongtrinhcon 1()
{ lệnh 1 ;
……….;
lệnh n;
}

Trường CĐKT Cao Thắng

Trang 8




×