Phần 5: Chương trình biên dịch CCS cho vi điều khiển PIC

0
1513

Các thư viện giao tiếp, I/O, delay trong chương trình biên dịch CCS yêu cầu chỉ thị tiền xữ lý cho khởi tạo tham số của hệ thống. các chỉ thị đó bao gồm: #use delay, #user fast_io,#user standard_io, #use rs232, #use i2c…

#USE DELAY

Cú pháp

#use delay (options)

options có thể là một trong các tùy chọn sau, cách nhau bởi dấu phẩy

clock=speed với speed là một hằng số trong khoảng 1-100000000 (1hz đến 100mHz), số này có thể chứa dấu phẩy, có thể theo sau các đơn vị M, MHz, K, KHz. nó chỉ tốc độ xung clock mà CPU chạy . Khi dùng khai báo này, chương trình biên dịch cho phép ta sử dụng các hàm xây dựng sẳn delay_ms() và delay_us().

type=speed xác định kiểu xung clock mà bạn đang sử dụng. các giá trị sau đây có giá trị:  Oscillator (bộ dao động ngoài), osc (giống oscillator), crystal (Thạch anh), xtal( giống crystal), internal (bộ giao động nội), int (giống internal) hoặc RC (Mạch dao động RC). Chương trình biên dịch sẽ tự động thiết lập bit cấu hình bộ dao động dựa theo kiểu bạn định nghĩa. Nếu bạn chỉ định internal, chương trình biên dịch sẽ tự động thiết lập bộ dao động đến tốc độ đã chỉ định. Speed là tần số ngõ vào.

restart_wdt: sẽ retart bộ định thời watchdog mỗi khi hàm delay_us() và delay_ms được sử dụng

clock_out: sử dụng với bộ dao động nội (internal) hoặc oscillator, nó cho phép chân clockout xuất ra xung clock

fast_start: một vài chíp cho phép bắt đầu thực thi với xung clock nội cho đến khi xung clock chính được ổn định.

USB or USB_FULL: cho thiết bị tích bộ phần cứng giao tiếp USB. Khi sử dụng với tùy chọn type=speedchương trình biên dịch sẽ thiết lập bit cấu hình cho phần giao tiếp USB tại tốc độ Full-Speed.

USB_LOW: cho thiết bị tích bộ phần cứng giao tiếp USB. Khi sử dụng với tùy chọn type=speed chương trình biên dịch sẽ thiết lập bit cấu hình cho phần giao tiếp USB tại tốc độ Low-Speed.

 

#USE FAST_IO, #USE FIXED_IO, #USE FAST_IO, và #USE STANDARD_IO

Chỉ thị tiền xữ lý #use xxx_io ảnh hưởng đến việc biên dịch tạo mã khi Port I/O được truy xuất. Khi port I/O được đọc từ hoặc viết đến, thanh ghi TRIS phải được thiết lập tương ứng. Bạn có thể tác động lên thanh ghi TRIS một cách trực tiếp bằng lệnh hoặc bởi chương trình biên dịch một cách tự động.

Theo mặc định , trình biên dịch CCS tự sinh mã tương ứng để cấu hình pin xuất nhập là output hay input mỗi lần truy xuất. Hoặc có thể báo cho trình biên dịch bằng cách sử dụng lệnh #use standard_io.

Sử dụng chỉ thị tiền xữ lý #use fixed_io#use fast_io để báo cho trình biên dịch không tác động đến thanh ghi hướng (TRIS) mỗi khi truy xuất, nó giúp tiết kiệm thời gian và không gian code. Với chỉ thị #use fast_io , bạn phải tự thiết lập thanh ghi TRIS bằng lệnh (set_tris_x()). Với chỉ thị #use fixed_io nó yêu cầu tham số pin để thiết lập I/O cố định theo chân chỉ định.

Bất kỳ chỉ thị #use xxx_io ảnh hưởng đến tạo ra code đến khi trình biên dịch gặp lệnh #use xxx_iokhác.

Cấu trúc lệnh:

#use standard_io(x)

#use fixed_io(port_outputs=pin[,pin,pin…])

#use fast_io(x)

ở đây x đại diện cho tên port (từ A đến G, phụ thuộc vào dòng vi điều khiển) và pin là hằng số của pin.

Đoạn ví dụ ở bên dưới minh họa cách chương trình biên dịch tạo ra mã tương ứng với các chỉ thị tiền xữ lý

Ví dụ 1: sử dụng #use standard_io

#include <16f877a.h>
#use standard_io(b)
void main(void)
{
output_b(0x01);
while(true)
{
}
}

Asm do trình biên dịch sinh ra :

……………….. output_b(0x01);
000F:  CLRF   06
0010:  MOVLW  01
0011:  BCF    03.5
0012:  MOVWF  06

Ví dụ 2: sử dụng #use fast_io

#include <16f877a.h>
#use fast_io(b)
void main(void)
{
output_b(0x01);
while(true)
{
}
}

Asm do trình biên dịch sinh ra :

……………….. output_b(0x01);
000F:  MOVLW  01
0010:  BCF    03.5
0011:  MOVWF  06

Ví dụ 3: sử dụng #use fixed_io

#include <16f877a.h>
#use fixed_io(b_outputs=pin_b0,pin_b1)
void main(void)
{
output_high(pin_b0);
while(true)
{
}
}

Asm do trình biên dịch sinh ra :

……………….. output_high(pin_b0);
000F:  MOVLW  FC
0010:  MOVWF  06
0011:  BCF    03.5
0012:  BSF    06.0

Leave a Reply