1. Trang chủ
  2. » Cao đẳng - Đại học

vi điều khiển 02 CCS c compiler (ThangTV)

47 289 1

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

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 47
Dung lượng 705,36 KB

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

Nội dung

Hướng dẫn sử dụng chương trình CCS: 2... Các thành phần chính của source file:Các khai báo chính của chương trình: #include // No WatchDog, High Speed, No Power Up Timer, No Low Voltage

Trang 1

Bài 02

CCS C COMPILER

Trang 2

 Cài đặt trình biên dịch C dùng phần mềm CCS:

 Cửa sổ CCS:

1 Hướng dẫn sử dụng chương trình CCS:

2

Trang 3

 Tạo mới một source file: File->Source file (hoặc dùng project Wizard

như hướng dẫn trong giáo trình)

1 Chọn thư mục lưu trữ source file

2 Đặt tên file

3 Lưu file

Trang 4

Biên dịch chương trình tạo file *.HEX dùng Compile hoặc Rebuild

4 Chọn Device PIC16F877A và PCM 14 bit

Cửa sổ soạn thảo nội dung chương trình

Cửa sổ thông báo lỗi và cảnh báo khi biên dịch

Trang 5

 Sử dụng HELP của CCS: chứa tất cả các trợ giúp sử dụng cho các

khai báo và các hàm trong CCS dùng cho PIC

1 Click chuột trái vào biểu tượng HELP ở góc trên bên phải cửa sổ CCS

2 Chọn Contents hoặc Index

Trang 7

2 Các thành phần chính của source file:

Các khai báo chính của chương trình:

#include <16F877A.h>

// No WatchDog, High Speed, No Power Up Timer, No Low Voltage Programming

#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP

#use delay(clock=8M) // Tần số thạch anh dùng trong hệ thống

Các định nghĩa và biến toàn cục

CONST unsigned char a[10] = {0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09};

unsigned char Time;

Chương trình con và ngắt (Interrupt)

Trang 8

Chương trình chính chi tiết

Void main( )

{

/* 1 Khai báo biến cục bộ: là các biến chỉ dùng trong chương trình chính, không dùng

được trong chương trình con*/

unsigned char i,j;

// 3 Vòng lặp vô hạn để thực hiện nội dung chương trình

While (TRUE) // hoặc while (1)

{

// Nội dung chính của chương trình

}

Trang 9

3 Biến chương trình:

int1 True hay False ( 0 hay 1) số 1 bit

int8 0 đến 255 Số nguyên 1 byte ( 8 bit)

int16 0 đến 65,535 Số nguyên 2 byte

int32 0 đến 4,294,967,295 Số nguyên 4 byte

Float 3,4 đế 3,4 Số thực 32 bit

Lưu ý: có thể sử dụng signed hoặc unsigned trước các kiểu để chỉ cho

Trang 10

Ví dụ:

unsigned char a, i, j;

float set, temp;

CONST int8 a[3] = {2, 7, 0x7a};

- Phép toán logic: AND (&); OR( | )

- Dịch trái n bit biến a: a = a << n

- Dịch phải n bit biến a: a = a >> n

(Xem thêm trong HELP: operators)

* Các điều kiện logic:

Trang 12

b) Hàm I/O: xuất/ nhập một giá trị ra/ từ PIN (bit) hoặc PORT (byte)

Trong đó:

x: a, b, c, d, e

Byte: xác định ngõ vào hoặc ngõ ra cho các tín hiệu của một PORT

bit = 1: tín hiệu tương ứng là ngõ vàobit = 0: tín hiệu tương ứng là ngõ ra

Ví dụ: cấu hình PORT D với RD0 và RD1 là ngõ vào, RD7 đến RD2 là ngõ ra

Set_tris_d(0x03);// 0x03 = 00000011b

Hoặc: cấu hình RC7-RC4 là ngõ vào, RC3-RC0 là ngõ ra

Set_tris_c(11110000b);

12

Trang 14

- input_x(): x là a, b, c,d, hoặc e (port a, b, c,d, hoặc e)

Trang 15

c) Hàm truy xuất bộ nhớ EEPROM: ghi/ đọc nhớ

Trong đó:

address: địa chỉ vùng nhớ EEPROM (0 – 255)

Value: giá trị 8 bit cần ghi vào bộ nhớ

Trang 16

5 Các cấu trúc điều kiện thông dụng:

Trang 18

i ;}

Ví dụ 2:

While(1){output_toggle(PIN_D4); delay_ms(300);}

18

Trang 20

6 Các ứng dụng cơ bản: LED đơn, LED 7 đoạn, Text LCD, phím

nhấn đơn

a) LED đơn

D2 LED ICSPCLK

VDD J1

JTAG

1 2 3 4 5 6

R1 10K C3 1uF

R11 270

RST

U2 PIC16F877A

1

2 3 4 5 6 7

8 9 10

13

14

15 16 17 18

19 20 21 22 23

24 25 26

27 28 29 30

33 34 35 36 37 38 39 40

MCLR/Vpp

RA0/AN0 RA1/AN1 RA2/AN2/Vref - RA3/AN3/Vref + RA4/TOCKI RA5/AN4/SS

RE0/RD/AN5 RE1/WR/AN6 RE2/CS/AN7

RC0/T1OSO/T1CKI RC1/T1OSI/CCP2 RC2/CCP1 RC3/SCL

RD0/PSP0 RD1/PSP1 RD2/PSP2 RD3/PSP3 RC4/SDA

RC5/SDO RC6/TX/CK RC7/RX/DT

RD4/PSP4 RD5/PSP5 RD6/PSP6 RD7/PSP7

Y 1 8M

RST

VDD

C2 4.7uF - 10uF

ICSPDAT

R10 270

VDD

ICSPDAT

VDD VDD

20

Trang 21

#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP

#use delay(clock=8M) // Tần số thạch anh dùng trong hệ thống

Trang 22

#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP

#use delay(clock=8M) // Tần số thạch anh dùng trong hệ thống

Trang 23

YÊU CẦU:

3 Viết chương trình điều khiển LED D2 sáng/tắt (nhấp nháy) với

thời gian delay 500 ms, lặp lại 10 lần

Hướng dẫn:

#include <16F877A.h>

#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP

#use delay(clock=8M) // Tần số thạch anh dùng trong hệ thống

Trang 24

b) LED 7s

g R4

R

e

C2 4.7uF - 10uF

8 9 10

13

14

15 16 17 18

19 20 21 22 23

24 25 26

27 28 29 30

33 34 35 36 37 38 39 40

MCLR/Vpp

RA0/AN0 RA1/AN1 RA2/AN2/Vref - RA3/AN3/Vref + RA4/TOCKI RA5/AN4/SS

RE0/RD/AN5 RE1/WR/AN6 RE2/CS/AN7

RC0/T1OSO/T1CKI RC1/T1OSI/CCP2 RC2/CCP1 RC3/SCL

RD0/PSP0 RD1/PSP1 RD2/PSP2 RD3/PSP3 RC4/SDA

RC5/SDO RC6/TX/CK RC7/RX/DT

RD4/PSP4 RD5/PSP5 RD6/PSP6 RD7/PSP7

b

C6 33P

LED2 LED7S

7 6 4 2 1 9 10 5

a b c d e f g

p C C

b

LED1 LED7S

7 6 4 2 1 9 10 5

a b c d e f g

p C C

a

R7 R

VDD

a d

LED3 LED7S

7 6 4 2 1 9 10 5

a b c d e f g

p C C

d R3

R

c

f g b

Y 1 8M

c

LED4 LED7S

7 6 4 2 1 9 10 5

a b c d e f g

p C C

f p R6

R

a a

R11 4K7 c

Q1 A1013

R5 R

g

Q4 A1013

RST

b

24

Trang 25

YÊU CẦU:

1 Viết chương trình hiển thị số 1 trên LED 4

Hướng dẫn:

#include <16F877A.h>

#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP

#use delay(clock=8M) // Tần số thạch anh dùng trong hệ thống

Trang 26

YÊU CẦU:

2 Viết chương trình hiển thị số chữ “HELP” trên 4 led, sử dụng

delay 5 ms để quét led

Hướng dẫn: cách 01

#include <16F877A.h>

#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP

#use delay(clock=8M) // Tần số thạch anh dùng trong hệ thống

26

Trang 27

Hướng dẫn: cách 02

#include <16F877A.h>

#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP

#use delay(clock=8M) // Tần số thạch anh dùng trong hệ thống

int8 data_led7[4] = {“H”7s, “E”7s, “L”7s, “P”7s };

int8 control_led7[4] = {0xF7, 0xFB, 0xFD,0xFE};

Void quet_LED()

{ for (int8 i = 0; i < 4; i++)

{output_d(0xFF); output_b(data_led7[i]); output_d(control_led7[i]); delay_ms(5);}

}

Trang 28

YÊU CẦU:

3 Viết chương trình hiển thị số tăng dần từ 0-9 và dừng lại trên LED

1; thời gian delay 500 ms

Hướng dẫn:

#include <16F877A.h>

#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP

#use delay(clock=8M) // Tần số thạch anh dùng trong hệ thống

28

Trang 29

c) LCD (Liquid Crystal Display)

R4 5/3W

U2 PIC16F877A

1

2 3 4 5 6 7

8 9 10

11 12

13

14

15 16 17 18

19 20 21

22 23

24 25 26

27 28 29 30

33 34 35 36 37 38 39

40

MCLR/Vpp

RA0/AN0 RA1/AN1 RA2/AN2/Vref - RA3/AN3/Vref + RA4/TOCKI RA5/AN4/SS

RE0/RD/AN5 RE1/WR/AN6 RE2/CS/AN7

RD0/PSP0 RD1/PSP1 RD2/PSP2

RD3/PSP3 RC4/SDA

RC5/SDO RC6/TX/CK RC7/RX/DT

RD4/PSP4 RD5/PSP5 RD6/PSP6 RD7/PSP7

R6 4K7

Trang 30

- Khởi động LCD và đặt trạng thái PORTD = 0x00

lcd_init();

set_tris_d(0x00);

output_d(0x00);

- Dùng hàm lcd_gotoxy để chuyển con trỏ và hàm printf để xuất chuỗi ra LCD.

YÊU CẦU:

1 Viết chương trình hiển thị chữ: “Welcome to” và

“*****HUTECH*****” trên dòng 01 và 02 của LCD

Trang 32

YÊU CẦU:

2 Viết chương trình hiển thị chữ: “Counter:” trên dòng 1 và số đếm từ 00

– 99 trên dòng 2 từ tọa độ (x,y) = (10,2); thời gian delay để tăng số đếm là

Trang 34

c) Phím nhấn

D1 LED

R24 270

VDD VDD

VDD

R22 10K

RST

VDD

R1 10K

R21 10K

C3 1uF

U2 PIC16F877A

1

2 3 4 5 6 7

8 9 10

13

14

15 16 17 18

19 20 21

22 23

24 25 26

27 28 29 30

33 34 35 36 37 38 39

40

MCLR/Vpp

RA0/AN0 RA1/AN1 RA2/AN2/Vref - RA3/AN3/Vref + RA4/TOCKI RA5/AN4/SS

RE0/RD/AN5 RE1/WR/AN6 RE2/CS/AN7

RD0/PSP0 RD1/PSP1 RD2/PSP2

RD3/PSP3 RC4/SDA

RC5/SDO RC6/TX/CK RC7/RX/DT

RD4/PSP4 RD5/PSP5 RD6/PSP6 RD7/PSP7

C11 33P

C6 33P

R23 270

VDD

D2 LED

Y 1 8M

C2 4.7uF - 10uF

34

Trang 36

if(!input(SW2)) output_low(D1);

}

Trang 37

YÊU CẦU:

2 Viết chương trình điều khiển:

Trang 38

}//end main

38

Trang 39

}//end main

Trang 40

BÀI TẬP

c R4

7 6 4 2 1 9 10 5

a b c d e f g

p C C

R32 270X8

d

U2 PIC16F877A

1

2 3 4 5 6 7

8 9 10

13

14

15 16 17 18

19 20 21 22 23

24 25 26

27 28 29 30

33 34 35 36 37 38 39 40

MCLR/Vpp

RA0/AN0 RA1/AN1 RA2/AN2/Vref - RA3/AN3/Vref + RA4/TOCKI RA5/AN4/SS

RE0/RD/AN5 RE1/WR/AN6 RE2/CS/AN7

RC0/T1OSO/T1CKI RC1/T1OSI/CCP2 RC2/CCP1 RC3/SCL

RD0/PSP0 RD1/PSP1 RD2/PSP2 RD3/PSP3 RC4/SDA

RC5/SDO RC6/TX/CK RC7/RX/DT

RD4/PSP4 RD5/PSP5 RD6/PSP6 RD7/PSP7

RST

Q4 A1013

D5

R8 100X8

c f a

C2 4.7uF - 10uF

e

D7

R12 4K7 a

D6 e

R25

LED3 LED7S

7 6 4 2 1 9 10 5

a b c d e f g

7 6 4 2 1 9 10 5

a b c d e f g

p C C

b R2

f c

R26

R6 R

g f

7 6 4 2 1 9 10 5

a b c d e f g

Q1 A1013

D8

R9 4K7

a

R7 R

VDD

b R5

Cho sơ đồ mạch:

40

Trang 41

(D1,D8), lặp lại vô hạn lần; delay 200 ms.

delay 3 ms

5 ms

đồng thời hiển thị số lần trên LED 7 đoạn 4; delay 500 ms

Trang 42

BÀI TẬP

Cho sơ đồ mạch:

Q2 A1013 LMP

R1 10K

U2 PIC16F877A

1

2 3 4 5 6 7

8 9 10

13

14

15 16 17 18

19 20 21 22 23

24 25 26

27 28 29 30

33 34 35 36 37 38 39 40

MCLR/Vpp

RA0/AN0 RA1/AN1 RA2/AN2/Vref - RA3/AN3/Vref + RA4/TOCKI RA5/AN4/SS

RE0/RD/AN5 RE1/WR/AN6 RE2/CS/AN7

RC0/T1OSO/T1CKI RC1/T1OSI/CCP2 RC2/CCP1 RC3/SCL

RD0/PSP0 RD1/PSP1 RD2/PSP2 RD3/PSP3 RC4/SDA

RC5/SDO RC6/TX/CK RC7/RX/DT

RD4/PSP4 RD5/PSP5 RD6/PSP6 RD7/PSP7

R22 10K

42

Trang 43

BÀI TẬP

7 Viết chương trình thực hiện:

(1,1)

8 Viết chương trình thực hiện: hiển thị chữ “Set value:” trên dòng 1 tại (x,y) = (5,1) và hiển thị biến set_val (khởi động = 0) trên dòng 2 tại (x,y) = (8,2); và nếu:

Nội dung thay đổi của set_val được cập nhật tức thời trên dòng 2 LCD tại vị trí (x,y) = (8,2)

Trang 44

10 Viết chương trình thực hiện: hiển thị chữ “DONG HO” trên dòng 1 tại (4,1)

và hiển thị “giờ:phút:giây” tại (6,2); thời gian bắt đầu là “00:00:00” và nếu:

44

Trang 45

BÀI TẬP

11 Viết chương trình hiển thị các LED đơn sáng dần từ D1 đến D8, delay 250

ms, lặp lại 8 lần, sau đó tắt dần từ D1 đến D8, delay 300 ms, lặp lại 20 lần

12 Viết chương trình hiển thị các LED đơn sáng dần từ D8 đến D1, delay 450

ms, sau đó tắt dần từ D8 đến D1, delay 500 ms, lặp lại hai quá trình trên 10 lần

BT* Viết chương trình hiển thị led đơn sáng dần từ D1 đến D8, thời gian delay

250 ms (dùng Timer 0) Lặp lại quá trình 17 lần

Trang 46

BÀI TẬP

Cho sơ đồ mạch:

R3 R 0

Y1 8M

7

R7 R

E

R6 R

RST

R4 R

VDD

B

C6 33P

R14 10K

C2 4.7uF - 10uF

6

R1 10K 8

C11 33P

R13 10K

R5 R C

VDD

R16 10K

R8 270X8

4

R1 R

VDD

R15 10K

LED1 LED7S

7 6 4 2 1 9 10 5

a b c d e f g

p C C

U2 PIC16F877A

1

2 3 4 5 6 7

8 9 10

13

14

15 16 17 18

19 20 21 22 23

24 25 26

27 28 29 30

33 34 35 36 37 38 39 40

MCLR/Vpp

RA0/AN0 RA1/AN1 RA2/AN2/Vref - RA3/AN3/Vref + RA4/TOCKI RA5/AN4/SS

RE0/RD/AN5 RE1/WR/AN6 RE2/CS/AN7

RC0/T1OSO/T1CKI RC1/T1OSI/CCP2 RC2/CCP1 RC3/SCL

RD0/PSP0 RD1/PSP1 RD2/PSP2 RD3/PSP3 RC4/SDA

RC5/SDO RC6/TX/CK RC7/RX/DT

RD4/PSP4 RD5/PSP5 RD6/PSP6 RD7/PSP7

F

46

Ngày đăng: 24/10/2020, 08:00

TỪ KHÓA LIÊN QUAN

w