MENU

Thư viện sử dụng cho AVR STUDIO

Dưới đây là các thư viện thường được sử dụng trong lập trình AVR STUDIO.

Thư viện AVR STUDIO

Trong lập trình nhúng , các thư viện đóng vai trò rất quan trọng trong việc biên dịch chương trình và giảm đáng kể kích thước mã. Tuy nhiên, việc tối ưu hóa  kích thước tệp đầu ra phụ thuộc rất nhiều vào trình biên dịch. Trong AVR Studio, thư viện khá lớn và nó rất phức tạp. Để cung cấp tính di động, một lượng lớn công việc đã được thực hiện trong các tệp Header của nó . CHính vì vậy, AVR thành công trong việc giữ các quy tắc cho lập trình nhúng của vi điều khiển AVR dễ tiếp cận hơn với các quy tắc trong ANSI C( các tiêu chuẩn lập trình C) . Họ đã giải quyết vấn đề địa chỉ thanh ghi bằng cách xác định các macrocho các thanh ghi tương ứng. Điều này giúp ta có thể sử dụng chúng như các biến. Bây giờ người dùng có thể tập trung vào các mã hơn là các cấu hình phần cứng bên trong của bộ vi điều khiển. Dưới đây là một số tệp Header quan trọng.

avr/io.h

Thư viện trên giải quyết vấn đề xử lý các thanh ghi và dễ dàng sử dụng các thanh ghi như là các biến. Điều này giúp làm việc gán một giá trị cho chúng đơn giản hơn. Ví dụ: để ghi dữ liệu vào thanh ghi hướng dữ liệu cổng B, thanh ghi có thể được xử lý bằng biến ' DDRB '.Trong mã, bạn có thể viết một biểu thức như thế này:

DDRB = 0xff;

Bạn có thể thực hiện gán các thanh ghi khác theo cách tương tự trên. Tuy nhiên có một số trường hợp ngoại lệ và phức tạp.

util/delay.h

Trong nhiều chương trình vi điều khiển, vòng lặp trì hoãn rất quan trọng. Thư viện này xác định 2 vòng lặp trì hoãn.

_delay_us (DELAY_TIME)

Đây là một chức năng cơ bản để tạo độ trễ ' DELAY_TIME ' micro giây . Chúng được thực hiện với vòng lặp dừng và chờ cơ bản. Các biến không được phép sử dụng làm đối số, thay vào đó bạn có thể sử dụng các hằng số được xác định trước. Và để sử dụng vòng lặp này, bạn cần chỉ định tần suất hoạt động của CPU (sử dụng: #define F_CPU). Dưới đây là 1 ví dụ cụ thể

int main()

 

{ #define F_CPU 1000000

int DELAY=0;

DELAY=29;

_delay_us(DELAY);

//…

}

Hoặc

int main()

{ #define F_CPU 1000000

int DELAY=0;

for(DELAY=35;DELAY>=0;DELAY–)

{ _delay_us(DELAY);

//…

}

}

Cả hai chương trình mẫu trên sẽ thất bại khi biên dịch chương trình. Nhưng đoạn chương trình dưới đây có giá trị:

int main()

{ #define F_CPU 1000000

_delay_us(29);

//…

}

int main()

{ #define F_CPU 1000000

#define DELAY 35

_delay_ms(DELAY);

//…

}

_delay_ms(DELAY_TIME)

Cũng giống như các vòng lặp trước, nó tạo ra độ trễ tính bằng mili giây, các sự kiện còn lại sử dụng hàm delay_us() cũng được áp dụng trong delay_ms(). Ví dụ

#include

#include

int main()

{ #define F_CPU 1000000

DDRB=0x0f;

PORTB=0x05;

while(1)

{ _delay_ms(1000);

PORTB ~=PORTB;

//…

}

avr / interrupt.h

Vi điều khiển có một số nguồn ngắt . Trong ANSI C , không có xử lý ngắt. Nhưng đối với bộ vi điều khiển, ngắt có ý nghĩa đặc biệt quan trọng! Nhiều chương trình phụ thuộc rất nhiều vào nó! Vì vậy thư viện  avr / interrupt.h giúp người dùng thực hiện mã chương trình con dễ dàng hơn. Nó xác định một số chức năng và macro được mô tả bên dưới.

sei ()

Hàm trên có chức năng này cho phép ngắt toàn cầu bằng cách ngắt toàn cục.

cli ()

Hàm này vô hiệu hóa ngắt toàn cầu bằng cách đặt lại ngắt toàn cầu.

reti ()

Cho phép ngắt bằng cách đặt ngắt toàn cục. Hàm này biên dịch thành một dòng mã của lập trình Assembly.

 ISR (INTERRUPT_vect)

ISR là viết tắt của Interrupt Sub Routine. Sử dụng chương trình này, người dùng có thể lập trình theo Ngắt phụ thông qua ngắt 'INTERRUPT'. Ở vị trí của đối số của hàm cung cấp một số ký hiệu. Ở đây, các ký hiệu được đặt tên theo các vectơ ngắt mà chúng đại diện. Đối với bộ vi điều khiển cụ thể, một số ký hiệu được sử dụng. Để làm được điều này hãy xem hướng dẫn tham khảo của AVR GCC đi kèm với Studio Studio. Hãy xem một ví dụ dưới đây:

#include

ISR(INT0_vect)

{ PORTB ~=PORTB; }

void initInterrupt(void)

{ cli();

GICR=0x40;

MCUCR=0x03;

sei();

}

int main()

{ initInterrupt();

DDRB=0xff;

PORTB=0x55;

}

 stdio.h

Thuật ngữ “stdio.h” là viết tắt của “Standard Input Output”. Thư viện này có chức năng giảm kích thước mã nhưng tệp HEX được biên dịch tốn rất nhiều dung lượng. Nó định nghĩa nhiều hàm có cùng tên gọi khác của ANSI C. Các hàm này có các chức năng tương tự như các phiên bản ANSI C của nó.

string.h

Thực hiện chức năng thao tác trên chuỗi ví dụ như nối 2 chuỗi với nhau, sao chép hai chuỗi, di chuyển vị trí các phần tử trong chuỗi,…Hàm này sẽ giúp chúng ta dễ dàng xử lí các công việc trên. Trong nhiều tác vụ lập trình nâng cao, các hàm được xác định trước này giúp công việc dễ dàng hơn.

math.h

Nếu bạn đang muốn lập trình một số chức năng toán học, thư viện này sẽ giảm tài nguyên cần thiết. Nó định nghĩa các hàm toán học như sin () , cos () , tan () , exp () và một số hàm khác,…

stlib.h

Nó bao gồm một số hàm thư viện tiêu chuẩn như exit ( ), calloc () , malloc () , qsort () {qsort là viết tắt của sắp xếp nhanh}, realloc () và một số hàm không phổ biến () khác. Đây là các hàm không được sử dụng thường xuyên. Nhưng trong trường hợp đặc biệt, chúng trở nên rất hữu ích.

 

 

 

 

 

 

 

Hỗ trợ liên kết
0979466469
0899909838
0938128290
0899909838
Khiếu nại: 0964238397
0979466469

Hotline: 0979 466 469

Thương hiệu nổi bật