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

Introduction to CCSC MPLAB example

71 87 0

Đ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 71
Dung lượng 6,02 MB

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

Nội dung

Bài giảng Vi Điều Khiển  2011 Page 10 B/ TÌM HIỂU COMPILER CCS-C VÀ CHƯƠNG TRÌNH MPLAB I/CCS_C: CCS là trình biên dịch lập trình ngôn ngữ C cho Vi điều khiển PIC của hãng Microchip.. Bà

Trang 1

Bài giảng Vi Điều Khiển  2011 Page 1

I/FD-ICP:

b/ Chương trình nạp: WinPicProg

Trang 2

Bài giảng Vi Điều Khiển  2011 Page 2

Main Window

Hardware setting:

Trang 3

Bài giảng Vi Điều Khiển  2011 Page 3

II/ PIG-PG1, PIG-PG2, PIG-PG3

a/PIG-PG1

Trang 4

Bài giảng Vi Điều Khiển  2011 Page 4

Chương Trình Nạp WinPicProg

b/ PIG-PIG2:

Trang 5

Bài giảng Vi Điều Khiển  2011 Page 5

Chương Trình Nạp WinPicProg

C/ PIG-PG3:

Trang 6

Bài giảng Vi Điều Khiển  2011 Page 6

Chương Trình Nạp ICPROG : 12Cxx, 16Cxxx, 16Fxx, 16F87x, 18Fxxx, 16F7x, 24Cxx, 93Cxx, 90Sxxx, 59Cxx, 89Cx051, 89S53, 250x0, PIC, AVR , 80C51 etc Main window:

Trang 7

Bài giảng Vi Điều Khiển  2011 Page 7

Hardware settings:

Trang 8

Bài giảng Vi Điều Khiển  2011 Page 8

Compare buffers:

Smartcard wizard:

Trang 9

Bài giảng Vi Điều Khiển  2011 Page 9

Options

Trang 10

Bài giảng Vi Điều Khiển  2011 Page 10

B/ TÌM HIỂU COMPILER CCS-C VÀ CHƯƠNG TRÌNH MPLAB

I/CCS_C:

CCS là trình biên dịch lập trình ngôn ngữ C cho Vi điều khiển PIC của hãng Microchip Chương trình là sự tích hợp của 3 trình biên dich riêng biết cho 3 dòng PIC khác nhau đólà:PCB cho dòng PIC 12bit opcodes, PCM cho dòng PIC 14bit opcodes và PCH cho dòng PIC 16 bit và 18bit

CCS giúp cho người sử dụng viết chương trình điều khiển sẽ được thực hiện nhanh chóng và đạt hiệu quả cao thông qua việc sử dụng ngôn ngữ lạp trình cấp cao – Ngôn ngữ C

a/ Cài đặt CCS-C: việc cài đặt CCS-C hoàn toàn dể dàng, chạy file setup.Chọn

vị trí cài đặt (mặc định C:\program\PICC)…Cài đặt kết thúc

b/ Sử dụng CCS-C

Tạo một project trong CCS-C: Tab Project chọn PIC Wizard

Trang 11

Bài giảng Vi Điều Khiển  2011 Page 11

Chọn vị trí lưu project:

Khai báo các thông tin phần cứng thông qua các mục sau: General, Communications, SPI and LCD, Timers, PCH Timers, Analog, Other, Interrupts, Drivers, I/O Pins, High/Low Voltage, Intr Oscillator Config, Header Files, CAN BUS, LCD options, MOD BUS, BOOT LOADER

General: chứa đựng các thôn tin cơ bản về loại PIC mà ta sử dụng và một số lựa chọn khác như chọn tần số thạch anh dao động, thiết lập các bit CONFIG nhằm thiết lập chế độ hoạt động cho PIC

Trang 12

Bài giảng Vi Điều Khiển  2011 Page 12

- Device: Liệt kê danh sách các loại PIC 12F, 16F, 18F… Ta sẽ chọn tên Vi điều khiển PIC mà ta sử dụng trong project

- Oscilator Frequency: Tần số thạch anh ta sử dụng, giá trị mặc định 20 MHz, có thể thay đổi được

- Fuses: Thiết lập các bit Config như: Chế độ dao động (HS, RC, Internal ), chế độ bảo vệ Code, Brownout detected…

- Chọn kiểu con trỏ RAM là 16bit hay 8bit

Communications: Mục Communications liệt kê các giao tiếp nối tiếp mà một con PIC hỗ trợ, thường là RS232 và I2C, cùng với các lựa chọn để thiết lập chế độ hoạt động cho từng loại giao tiếp

Trang 13

Bài giảng Vi Điều Khiển  2011 Page 13

- Giao tiếp RS232 Mỗi một Vi điều khiển PIC hỗ trợ một cổng truyền thông RS232 chuẩn Mục này cho phép ta lựa chọn chân Rx, Tx, tốc độ Baud, Data bit, Bit Parity…

- Giao tiếp I2C Để sử dụng I2C ta tích vào nút chọn Use I2C, khi đó ta có các lựa chọn: Chân SDA, SCL, Tốc độ truyền (Fast - Slow), chế độ Master hay Slave, địa chỉ cho Salve

SPI and LCD: Mục này liệt kê cho người dùng các lựa chọn đối với giao tiếp nối tiếp SPI, chuẩn giao tiếp tốc độ cao mà PIC hỗ trợ về phần cứng Chú ý khi ta dùng I2C thì không thể dùng SPI và ngược lại Để có thể sử dụng cả hai giao tiếp này cùng một lúc thì buộc một trong 2 giao tiếp phải lập trình bằng phần mềm (giồng như khi dùng I2C cho các chip AT8051, không có hỗ trợ phần cứng SSP) Phần cấu hình cho LCD dành cho các chíp dòng 18F và 30F

Trang 14

Bài giảng Vi Điều Khiển  2011 Page 14

Timer: Liệt kê các bộ đếm/định thời mà các con PIC dòng Mid-range có: Timer0, timer1, timer2, WDT…Trong các lựa chọn cấu hình cho các bộ đếm /định thời có: chọn nguồn xung đồng hồ (trong/ngoài), khoảng thời gian xảy ra tràn…

Analog: Liệt kê các lựa chọn cho bộ chuyển đổi tương tự/số (ADC) của PIC Tùy vào từng IC cụ thể mà có các lựa chọn khác nhau

Trang 15

Bài giảng Vi Điều Khiển  2011 Page 15

- Lựa chọn cổng vào tương tự

- Chọn chân điện áp lấy mẫu (Vref)

- Chọn độ phân giải: 8bit = 0 ~ 255 hay 10bit = 0~1023

- Nguồn xung đồng hồ cho bộ ADC (trong hay ngoài), từ đó mà ta có được tốc độ lấy mẫu, thường ta chọn là internal 2 6 us

- Khi không sử dụng bộ ADC ta chọn none

Other: Tab này cho phép ta thiết lập các thông số cho các bộ Capture/Comparator/PWM

Trang 16

Bài giảng Vi Điều Khiển  2011 Page 16

Ta có các lựa chọn thực hiện lệnh khi xảy ra bằng nhau giữa 2 đối tượng so sánh

là giá trị của Timer1 với giá trị lưu trong thanh ghi để so sánh

Bao gồm:

 Thực hiện ngắt và thiết lập mức 0

 Thực hiện ngắt và thiết lập mức 1

 Thực hiện ngắt nhưng không thay đổi trạng thái của chân PIC

 Đưa Timer1 về 0 nhưng không thay đổi trạng thái chân

- PWM - Điều chế độ rộng xung: Lựa chọn về tần số xung ra và duty cycle Ta có thể lựa chọn sẵn hay tự chọn tần số, tất nhiên tần số ra phải nằm trong một khoảng nhất định

Trang 17

Bài giảng Vi Điều Khiển  2011 Page 17

- Comparator - So sánh điện áp: Lựa chọn mức điện áp so sánh Vref Có rất nhiều mức điện áp để ta lựa chọn Ngoài ra ta còn có thể lựa chọn cho đầu vào của các

bộ so sánh

Interrupts: cho phép ta lựa chọn nguồn ngắt mà ta muốn sử dụng Tùy vào từng loại PIC mà số lượng nguồn ngắt khác nhau, bao gồm: ngắt ngoài 0(INT0), ngắt RS232, ngắt Timer, ngắt I2C-SPI, ngắt onchange PORTB.v.v…

Drivers: được dùng để lựa chọn những ngoại vi mà trình dịch đã hỗ trợ các hàm giao tiếp Đây là nhưng ngoại vi mà ta sẽ kết nối với PIC, trong các IC mà CCS hỗ trợ, đáng chú ý là các loại EEPROM như 2404, 2416, 2432, 9346, 9356…Ngoài ra còn có IC RAM PCF8570, IC thời gian thực DS1302, Keypad 3x4, LCD, ADC… Chi tiết ta có thể xem trong thư mục Driver của chương trình: \ \PICC\Drivers

Trang 18

Bài giảng Vi Điều Khiển  2011 Page 18

I/O Pins: Mục này cho phép ta chọn chân tương ứng là xuất hoặc nhập từ PortA tới PortE

Ngoài ra còn các Tab khác: High/Low Voltage, Intr Oscillator Config, Header Files,Can Bus, LCD options, Mod Bus, Boot Loader

Trang 19

Bài giảng Vi Điều Khiển  2011 Page 19

Sau cùng chúng ta đã hoàn tất việc tao một project mới

Kiểm tra lỗi và biên dịch sang dạng hex, ta vào Tab Compile và chọn mục Build All

Các hàm lệnh trong CCS-C

Trang 20

Bài giảng Vi Điều Khiển  2011 Page 20

II/ MPLAB:

1/ Cài đặt: chạy setup.exe …

2/ Tạo một Project trong MPLAB

Bước 1: Khời động chương trình MPLAB

Bước 2: Tạo Project bằng công cụ Project Wizard, click Project và chọn Project Wizard

Trang 21

Bài giảng Vi Điều Khiển  2011 Page 21

Một thông báo chào nừng xuất hiện ta chọn Next

Bước 3: Chọn loại chíp tương ứng mà ta sử dụng và click Next

Trang 22

Bài giảng Vi Điều Khiển  2011 Page 22

Buớc 4: chọn ngôn ngữ sử dụng

Bước 5: Chọn vị trí lưu project, để chọn vị trí lưu ta chọn Browse

Trang 23

Bài giảng Vi Điều Khiển  2011 Page 23

Chọn vị trí lưu

Nhập tên project và nhấn Save

Trang 24

Bài giảng Vi Điều Khiển  2011 Page 24

Bước 6: Chọn add các Source Files (.ASM), Header Files (.INC), Linker Files (.lkr)….trong mục Microchip khi cài đặt chương trình MPLAB hoặc có thể bỏ qua bước này và tiến hành add sau

Trang 25

Bài giảng Vi Điều Khiển  2011 Page 25

Bước 7: Finish để hoàn tất quá trình tạo một project

Sau khi hoàn tất ta có giao diện project như bên dưới, ta có thể chọn add các Source Files (.ASM), Header Files (.INC), Linker Files (.lkr)….như sau:

Nhấp phải chuột vào mục Source Files và chọn Add Files

Trang 26

Bài giảng Vi Điều Khiển  2011 Page 26

Tiếp theo ta chọn tới mục chứa files tương ứng với chíp đang sử dụng có đuôi ASM và chọn Open

Tương tự ta add các Source Files và các File khác

Trang 27

Bài giảng Vi Điều Khiển  2011 Page 27

Tiếp theo ta vào Tab File và chọn New, ta được cửa sổ giao diện như bên dưới

Vào File chọn Save As

Trang 28

Bài giảng Vi Điều Khiển  2011 Page 28

Chọn vị trí lưu và tên cần lưu

Tiếp theo ta add Source Files và add file mới vừa tạo vào

Trang 29

Bài giảng Vi Điều Khiển  2011 Page 29

Sau đó ta double click vào file vừa add và thao tác trên file này

Sau khi lập trình xong, ta tiến hành kiểm tra lỗi và biên dịch, ta vào Tab Project

và chọn Build All

Nếu chương trình chúng ta bị lỗi và biên dịch không thành công sẽ có giao diện như bên dưới:

Trang 30

Bài giảng Vi Điều Khiển  2011 Page 30

Nếu chương trình chúng ta không bị lỗi và biên dịch thành công sẽ có giao diện như bên dưới

Để tiến hành nạp chương trình vào chíp (chíp được kết nối vào mạch nạp thích hợp), ta vào Tab Programmer và chọn MPLAB ICD2

Trang 31

Bài giảng Vi Điều Khiển  2011 Page 31

Chọn Next

Chọn cổng giao tiếp và chọn Next:

Trang 32

Bài giảng Vi Điều Khiển  2011 Page 32

Chọn nguồn cung cấp và chọn Next:

Chọn Next để tiến hành nạp chương trình cho chíp

Trang 33

Bài giảng Vi Điều Khiển  2011 Page 33

Chọn Finish để hoàn tất quá trình nạp

Trang 34

Bài giảng Vi Điều Khiển  2011 Page 34

III/ PHƯƠNG PHÁP NHÚNG TRÌNH DỊCH CCS-C VÀO MPLAB

Để có thể sử dụng trình dịch CCS-C trong môi trường MPLAB, ta cần cài đặt thêm chương trình MPALB PLUGIN

Tiếp theo ta mở chương trình MPLAB và tiến hành tạo Project tương tự như trên, riêng tới bước chọn ngôn ngữ lập trình ta chọn như giao diện bên dưới

Các bước tiếp theo ta tiến hành add các Source Files và Header như bình thường

Trang 35

Bài giảng Vi Điều Khiển  2011 Page 35

C/ MỘT SỐ TẬP LỆNH TRONG CCS-C

1 / Khai báo biến, hằng, mảng :

Các loại kiểu dữ liệu sau được hỗ trợ :

- int1 số 1 bit = true hay false ( 0 hay 1)

- int8 số nguyên 1 byte ( 8 bit)

Trang 36

Bài giảng Vi Điều Khiển  2011 Page 36

- int16 số nguyên 16 bit

- int32 số nguyên 32 bit

- char ký tự 8 bit

- float số thực 32 bit

- short mặc định như kiểu int1

- byte mặc định như kiểu int8

- int mặc định như kiểu int8

- long mặc định như kiểu int16

Khai báo biến: VD: Signed int8 a // a là 8 bit

Khai báo hằng: VD: Int8 const a=231;

Khai báo mảng: VD Int8 const a[5] = { 3,5,6,8,6 } ; // a[0]=3

Int8 const a[5]={ }; // sử dụng 5 byte Int8 const a[256]={ }; // 256 phần tử x 1 byte = 256 byte Int16 const a[12] = { }; // 12 x 2= 24 byte

Int16 const a[128] = { }; // 128 x 2= 256 byte int8 const a [7] = { 0 , 3,5 ,9 } // các phần tử a[4] ,a[5],a[6] đều

=0 Khai báo 1 biến mảng : kích thước tuỳ thuộc khai báo con trỏ trong #device và kích thước mãng phụ thuộc vào loại VDK

VD: # device *= 8 : không gian bộ nhớ chỉ có 256 byte cho tất cả các biến chương trình bất chấp VĐK của chúng ta có hơn 256 byte RAM

Với 16F877 có 368 byte ram , thường thì kích thước để khai báo mãng không quá 60 byte ,có khi dưới 40 byte , nếu khai báo lớn hơn sẽ gặp lỗi : not enough ram for all variable trong khi thực sự VDK còn rất nhiều RAM

Trang 37

Bài giảng Vi Điều Khiển  2011 Page 37

Với Pic18 kích thước mãng không bị giới hạn, khai báo #device *=16 mảng sử dụng có thể trọn bộ nhớ RAM

Khai báo biến mảng : int16 a[125] ; // biến mảng 126 phần tử , kích thước 252 byte ram

2/ Cấu trúc lệnh:

- If (expr) stmt; else (stmt): lệnh điều kiện nếu biểu thức đúng thì sẽ làm

những lệnh này không thì làm những lệnh kia

- While (expr) stmt : xét điều kiện trước, nếu điều kiện còn đúng thì làm những lệnh này Điều kiện sai thì thoát khỏi

- Do stmt while (expr) : Làm những câu lệnh này trước rồi sau đó mới kiềm tra điều kiện

- Return : dùng cho hàm có trả về trị, hoặc không trả về trị cũng được, khi đó chỉ cần dùng: return ; ( nghĩa là thoát khỏi hàm tại đó )

- Break : ngắt ngang ( thoát khỏi ) vòng lặp while

- Continue : quay trở về đầu vòng lặp while

Trang 38

Bài giảng Vi Điều Khiển  2011 Page 38

3/ Chỉ thị tiền xử lý: xem chi tiết tất cả ở phần HELP, mục pre_processor

a / #ASM và #ENDASM :

- Cho phép đặt 1 đoạn mã ASM giữa 2 chỉ thị này , Chỉ đặt trong hàm CCS định nghĩa sẵn 1 biến 8 bit _RETURN_ để chúng ta gán giá trị trả về cho hàm từ đoạn mã Assembly Tuy nhiên C đủ mạnh để thay thế Assmemly Vì vậy nên hạn chế lồng mã Assembly vào vì thường gây ra xáo trộn dẫn đến sau khi biên dịch mã chạy sai, trừ phi chúng ta nắm rõ Assembly và đọc hiểu

mã Assembly sinh ra thông qua mục C/Asm list

Trang 39

Bài giảng Vi Điều Khiển  2011 Page 39

- Khi sử dụng các biến không ở bank hiện tại , CCS sinh thêm mã chuyển bank

tự động cho các biến đó Nếu sử dụng #ASM ASIS thì CCS không sinh thêm mã chuyển bank tự động , chúng ta phải tự thêm vào trong mã ASM

- Lưu ý : mã Assembly theo đúng mã tập lệnh VDK , không phải mã kiểu

Trang 40

Bài giảng Vi Điều Khiển  2011 Page 40

b /Chỉ thị: #INCLUDE:

- Cú pháp : #include <filename> Hay #include “ filename” Filename : tên file cho thiết bị *.h, *.c Nếu chỉ định file ở đường dẫn khác thì thêm đường dẫn vào Luôn phải có để khai báo chương trình viết cho VĐK nào , và luôn đặt ở dòng đầu tiên

#bit TMR1Flag = 0xb.2 //bit cờ ngắt timer1 ở địa chỉ 0xb.2 (PIC16F877)

TMR1Flag = 0 // xoá cờ ngắt timer1

Trang 41

Bài giảng Vi Điều Khiển  2011 Page 41

Int16 a=35; //a=00000000 00100011

#bit b= a.11 //b=0 , nếu b= a.0 (b chỉ vị trí LSB )sau đó b = 1

Lưu ý không dùng được : if ( 0xb.2 ) mà phải khai báo như trên rồi dùng :

if(TMR1Flag)

- #BYTE id = x

X: địa chỉ, id : tên biến trong C

Gán tên biến id cho địa chỉ (thanh ghi ) x , sau đó muốn gán hay kiểm tra địa chỉ x chỉ cần dùng tên id

Không tốn thêm bộ nhớ , tên id thường dùng tên gợi nhớ chức năng thanh ghi ở địa chỉ đó Lưu ý

rằng giá trị thanh ghi có thể thay đổi bất kỳ lúc nào do hoạt động chương trình nên giá trị id cũng tự

thay đổi theo giá trị thanh ghi đó

VD:

#byte port_b = 0xc6; // 16F877 :0xc6 là địa chỉ portb

port_b=120; // port b có giá trị 120

- # LOCATE id = x

-Làm việc như #byte nhưng có thêm chức năng bảo vệ không cho CCS sử dụng địa chỉ đó vào mục

đích khác VD: # LOCATE temp = 0xc20 // 0xc20 :thanh ghi đa mục đích

- Sử dụng #LOCATE để gán biến cho 1 dãy địa chỉ kề nhau ( cặp thanh ghi ) sẽ tiện lợi hơn thay vì

Trang 42

Bài giảng Vi Điều Khiển  2011 Page 42

phải dùng 2 biến với #byte

VD : CCP1 có giá trị là cặp thanh ghi 0x15 ( byte thấp ) và 0x16 ( byte cao ) Để gán trị cho CCP1 :

d / # DEVICE : # DEVICE chip option

chip : tên VĐK sử dụng , không dùng tham số này nếu đã khai báo tên chip ở # include

option : toán tử tiêu chuẩn theo từng chip:

* = 5 dùng pointer 5 bit ( tất cả PIC )

* = 8 dùng pointer 8 bit ( PIC14 và PIC18 )

* = 16 dùng pointer 16 bit ( PIC14 ,PIC 18)

ADC = x sử dụng ADC x bit ( 8 , 10 , bit tuỳ chip ) , khi dùng hàm read_adc( ) ,

sẽ trả

về giá trị x bit

Trang 43

Bài giảng Vi Điều Khiển  2011 Page 43

ICD = true : tạo mã tương thích debug phần cứng Microchip

HIGH_INTS = TRUE : cho phép dùng ngắt ưu tiên cao

- Khai báo pointer 8 bit , chúng ta sử dụng được tối đa 256 byte RAM cho tất cả biến chương trình

- Khai báo pointer 16 bit , chúng ta sử dụng được hết số RAM có của VDK

- Chỉ nên dùng duy nhất 1 khai báo #device cho cả pointer và ADC

VD : #device * = 16 ADC = 10

e / # ORG :

# org start , end

# org segment

#org start , end { }

Start , end: bắt đầu và kết thúc vùng ROM dành riêng cho hàm theo sau , hoặc để riêng không dùng

Ngày đăng: 06/11/2017, 21:10

TỪ KHÓA LIÊN QUAN