1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

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

8 246 2

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 8
Dung lượng 35,05 KB

Nội dung

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 đ

Trang 1

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}

Trang 2

4.2 Các phép toán trong C

cấu trúc hàm cơ bản của C

4.3.1

If….else

Dạng 1:

If (điều kiện)

{lệnh 1;

lệnh 2;

………

lệnh n;}

VD: if(x==5) {x=1;}

+= 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ị

<<= Dịch trái

<< Dịch trái

<= Bé hơn hoặc bằng

&& Phép ‘AND’

Phép giảm 1 đơn vị

% Phép chia lấy phần dư

>>= Dịch phải

>> Dịch phải

Trang 3

Dạng 2:

If (điều kiện)

{lệnh 1;

lệnh 2;

………

lệnh n;}

else

{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;}

4.3.2 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;}

VD: for(i=0;i<9;i++)

{x+=5;}

4.3.3 Cấu trúc do… while

Cấu trúc:

Do

{lệnh 1;

Trang 4

lệnh 2 …………;

lệnh n;}

while(điều kiện) 4.3.4 Cấu trúc While

Cấu trúc:

While(điều kiện)

{lệnh 1;

lệnh 2;

………

lệnh n;}

4.3.5 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

4.4.1 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

Trang 5

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

4.4.3 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

4.4.4 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_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

Trang 6

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

Trang 7

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()

Trang 8

{lệnh 1 ;

……….;

Chuongtrinhcon 1 (); //nếu có

lệnh n;

}

Void chuongtrinhcon 1()

{ lệnh 1 ;

……….;

lệnh n;

}

Ngày đăng: 07/09/2017, 15:43

TỪ KHÓA LIÊN QUAN

w