Chào mừng đến với Câu Lạc Bộ Sáng Tạo
Chia sẻ kinh nghiệm
Kết nối đam mê
Đang cập nhật thời gian...
BÀI VIẾT NỔI BẬT
Xin chào! Tôi là Ếch Sáng Tạo :-)
Chia sẻ trang




Chuyên mục
Bài mới
Xem nhiều
Thống kê
  • Bài viết: 334/334
  • Thành viên: 10.085
  • Đang online: 6
  • Khách hôm nay: 2.625
  • Khách hôm qua: 2.812
  • Tổng khách: 16.181.956
Bài viết
Lập trình C trong CodeVisionAVR - SangTaoClub.Net
Lập trình C trong CodeVisionAVR
Đăng bởi: Vũ Văn Thái - Thời gian: 28-04-2014, 19:30
Chuyên mục: Học lập trình AVR - Lượt xem: 17.136

Lập trình C trong CodeVisionAVR

Hôm nay chúng ta sẽ tìm hiểu về C cho AVR, bài viết này sẽ liệt kê tất cả cách khai báo C trong CodeVisionAVR.

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: 2x10 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

Về cơ bản ta lập trình như nhau các bạn có thể tham khảo bài sau:

http://sangtaoclub.net/bai-viet/31-ngon-ngu-lap-trinh-c-co-ban-cho-8051.html

Chúc bạn học tốt............!

 


Bài viết sửa lúc 29-04-2014, 12:29 bởi Vũ Văn Thái
  • Bạn chưa đăng nhập, không thể viết bình luận!
    Bấm vào đây để Đăng nhập hoặc Đăng ký!
  • canhvktech lúc 13-03-2017, 04:43
    thanks
  • Trang 1/1: 1

    Bài viết cùng chuyên mục
    ATMG16 giao tiếp với LCD ATMG16 giao tiếp với LCD
    Đăng bởi: haydayanh - Thời gian: 04-06-2021, 22:33
    Chuyên mục: Học lập trình AVR - Lượt xem: 2.680
    Hướng dẫn làm KIT AVR đơn giản Hướng dẫn làm KIT AVR đơn giản
    Đăng bởi: Vũ Văn Thái - Thời gian: 25-10-2014, 09:39
    Chuyên mục: Học lập trình AVR - Lượt xem: 11.061
    [Bài 6] Lập trình giao tiếp USART và RS232 với AVR [Bài 6] Lập trình giao tiếp USART và RS232 với AVR
    Đăng bởi: Vũ Văn Thái - Thời gian: 15-08-2014, 15:25
    Chuyên mục: Học lập trình AVR - Lượt xem: 19.125
    [Bài 5] Lập trình ADC - Đo nhiệt độ dùng LM35 hiển thị LCD với AVR [Bài 5] Lập trình ADC - Đo nhiệt độ dùng LM35 hiển thị LCD với AVR
    Đăng bởi: Vũ Văn Thái - Thời gian: 25-06-2014, 10:17
    Chuyên mục: Học lập trình AVR - Lượt xem: 57.814
    [Bài 4] Lập trình giao tiếp LCD16x2 cho AVR trên CodeVisionAVR [Bài 4] Lập trình giao tiếp LCD16x2 cho AVR trên CodeVisionAVR
    Đăng bởi: Vũ Văn Thái - Thời gian: 22-06-2014, 10:42
    Chuyên mục: Học lập trình AVR - Lượt xem: 24.141
    [Bài 3] Lập trình ngắt cho AVR trên CodeVisionAVR [Bài 3] Lập trình ngắt cho AVR trên CodeVisionAVR
    Đăng bởi: Vũ Văn Thái - Thời gian: 16-06-2014, 14:06
    Chuyên mục: Học lập trình AVR - Lượt xem: 23.175
    [Bài 2] Tìm hiểu bộ Timer-Counter trên AVR [Bài 2] Tìm hiểu bộ Timer-Counter trên AVR
    Đăng bởi: Vũ Văn Thái - Thời gian: 15-06-2014, 11:55
    Chuyên mục: Học lập trình AVR - Lượt xem: 20.604
    [Bài 1] Xuất nhập Port đơn giản cho AVR [Bài 1] Xuất nhập Port đơn giản cho AVR
    Đăng bởi: Vũ Văn Thái - Thời gian: 29-05-2014, 21:22
    Chuyên mục: Học lập trình AVR - Lượt xem: 9.828
    Hướng dẫn set fuse bit cho AVR Hướng dẫn set fuse bit cho AVR
    Đăng bởi: Vũ Văn Thái - Thời gian: 16-05-2014, 22:09
    Chuyên mục: Học lập trình AVR - Lượt xem: 22.625
    Mạch nạp ISP cho vi điều khiển AVR và 89S Mạch nạp ISP cho vi điều khiển AVR và 89S
    Đăng bởi: Vũ Văn Thái - Thời gian: 10-05-2014, 12:22
    Chuyên mục: Học lập trình AVR - Lượt xem: 20.752
    
    Chào mừng hieutrang đã tham gia câu lạc bộ sáng tạo!
    Vũ Văn Thái - vuthai
    Hôm nay là sinh nhật của boykage, 01295776836, caongocanh, xathutu, oalaocong, caothangc4, donghi, tontaidoclap, VanRen, hoahaiduong1, nguyenvangoc8a5, Nhanpro, phunghung_198, thanhcdt, ngoanancnsh, thanhk46cdt, nhantt, fx15000, dohiep, baotuyet12567, vu123456, lekimhoai190494, boythaibinh, huynhhiep, cuongk57m, Nhoangvuong95ts, kienvuce, ← Gửi tin nhắn chúc mừng
    Múi giờ: UTC+07:00 - Asia/Ho Chi Minh ***** IP của bạn: 3.135.185.194 ***** Status: Cache Update thành công!