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

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

8 250 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

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

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