Lập trình C trong CodeVisionAVR

0
4416

1. Khai báo thư viện

Ta sử dụng khai báo #include , VD: #include <delay.h> Khai báo này báo cho trình biên dịch biết lấy file thư viện trong thư mục mặc định của CAVR

Cách 2 là #include “adc.h  Khai báo này trình biên dịch sẽ tìm file trong thư mục Project của ta.

2. Khai báo tên thay thế

Ta sử dụng khai báo #define BUT PINC.5 Từ BUT sẽ thay cho PINC.5, tương tự ta có thể khai báo bất kỳ dữ liệu nào bạn muốn #define Time  400 ………….

3. Khai báo kiểu dữ liệu biến

Kiểu
Số Byte
Khoảng giá trị
Char
1
-128 – +127
Unsigned char
1
0 – 255
Int
2
-32768 – +32767
Unsigned int
2
0 – 65535
Long
4
-2147483648 – +2147483647
Unsigned long
4
0 – 4294967295
Float
4

VD: unsigned char time; hoặc unsigned int dem=1000; (Gán giá trị ban đầu cho biến, mặc định = 0)

Khai báo nhiều biến chung một kiểu dữ liệu unsigned char x=10, y=1, z, t;

Lưu ý: Khi sử dụng biến nếu giá trị vượt quá cho phép sẽ bị tràn và không lưu dc ví dụ như ta khai báo kiểu 8bit unsigned char mà ta muốn lưu giá trị 257 là bị tràn, ta phải dùng kiểu 16bit để chứa giá trị trên

4. Khai dữ liệu mảng

– Mảng 1 chiều: unsigned char led[10];

– Mảng 2 chiều:unsigned char led[2][10]; Công thức dữ liệu: 2×10 dữ liệu

– Mảng 3 chiều: unsigned char led[5][2][10]; Công thức dữ liệu: 5x2x10 dữ liệu – Phức tạp ít sử dụng trong lập trình

……………….

Chọn bộ nhớ lưu mảng, mặc định trong trình biên dịch luôn luôn là RAM nếu bạn không khai báo gì cho nó, để tiết kiệm tài nguyên RAM cho các biến khác ta sẽ cho các mảng cố định vào trong ROM, lưu ý chỉ mảng cố định mà ta không thay đổi dữ liệu trong quá trình sử dụng.

Rất đơn giản ta thêm chữ flash vào trước khai báo ta sẽ được như sau: flash unsigned char led[10];

Truy suất mảng trong code khá là đơn giản, dữ liệu đầu tiên mang giá trị 0 vì 0 là bắt đầu chứ không phải là 1 đâu nha, VD: PORTD=led[0];  xuat gia tri đầu tiên của mảng

Với mảng 2 chiều cũng tương tự ta xuất theo công thức  (trục x,y) PORTD=led[1][2];  xuat gia tri thứ 13 của mảng theo khai báo led[2][10]

Nghe có vẻ hơi khó hiểu chỗ này đúng k, ta hiểu đơn giản như sau nhóm 10 dữ liệu lại thành một nhóm lớn ở đây có 2 nhóm lớn, mỗi nhóm lớn sẽ có 10 dữ liệu bên trong như vậy ta sẽ truy suât led[1][2] tức lấy nhóm lớn thứ 2 và dữ liệu trong nhóm nằm ở vị trí thứ 3 trong mảng.

5. Khai báo bộ nhớ EEPROM

Đây là khai báo đặc biệt chỉ có trong CodeVisionAVR các phần mềm khác không hỗ trợ, với các viết sau các bạn không cần phải viết hàm lưu dữ liệu vào EEPROM nội của AVR nữa mà trình biên dịch sẽ tự động làm việc này.

Đơn giản nó chỉ là một biến, tức ta cho thể đọc và ghi vào biến này như các biến bình thường.

Khai báo như sau: eeprom unsigned char abc;

Thật là đơn giản đúng không, lúc này ta chỉ cần viết abc = 123; lưu giá trị 123 vào eeprom nội, vậy đọc ra thì sẽ như thế nào. Quá đơn giản: data = abc;  data là biến lưu trong RAM và data sẽ mang giá trị 123

Còn bạn muốn chỉ định địa chỉ thì thêm @địa_chỉ VD eeprom unsigned char abc@0x02;

6. Khai báo chân giao tiếp xuất nhập

Trong AVR mỗi PORT của nó có tới 3 thanh ghi điều khiển: DDRx, PINx, PORTx Trong khi 8051 chỉ có 1, PIC có 2 phụ trách điều hướng và xuất nhập dữ liệu.

– Trong đó DDRx là thanh ghi điều hướng, set lên 1 cho bit nào là chân đó làm OUTPUT và set 0 là INPUT

– Thanh ghi PINx là thanh ghi lấy dữ liệu về dùng cho INPUT, ta sẽ đọc dữ liệu từ thanh ghi này

– Thanh ghi PORTx là thanh ghi xuất dữ liệu ra chân vi điều khiển, ta sẽ ghi mức logic vào đây

VD:

DDRD = 0xff; PORT D làm OUTPUT

PORTD = 0xff; Xuất mức 1 ra 8 chân của PORT D

abc = PIND; Đọc trạng thái logic trên PORT D lưu vào biến abc

Ta có thể sử dụng trở câu nội của AVR trong trường hợp làm INPUT bằng cách khai báo set: 

DDRD = 0x00; 

PORTD = 0xff;

Nếu không sử dụng trở câu toàn bộ chân AVR sẽ ở trạng thái hở. Khác hẳn với 8051 chỉ P0 là hở

CodeVisionAVR cho phép bạn set bit cho từng chân của PORT

VD: PIND.6 , PORTD.2, DDRC.3

Các bạn có thể tìm hiểu thêm một số cách set bit trong thanh ghi cũng như kiểm tra bit nào đó trong một thanh ghi VD: while(!(UCSRA & (1<<UDRE)));  kiểmtra bit UDRE trong thanh ghi UCSRA

Leave a Reply