1. Trang chủ
  2. » Luận Văn - Báo Cáo

cách lập trình trên CodeVisionAVR và một số ví dụ

18 1,6K 2

Đ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 18
Dung lượng 1,8 MB

Nội dung

Lập trình với code vesion AVR SV:Vũ Ngọc Bắc –CĐT4-K52Để lập trình cho AVR, chúng ta có thể sử dụng 2 ngôn ngữ cơ bản là C và ASMLập trình Assembly.. Nhưng nhược điểm của ngôn ngữ C là k

Trang 1

Lập trình với code vesion AVR SV:Vũ Ngọc Bắc –CĐT4-K52

Để lập trình cho AVR, chúng ta có thể sử dụng 2 ngôn ngữ cơ bản là C và

ASM(Lập trình Assembly)

Nhìn chung, 2 ngôn ngữ này có những ưu và nhược điểm riêng

Ngôn ngữ ASM có ưu điểm là gọn nhẹ, giúp người lập trình nắm bắt sâu

hơn về phần cứng Tuy nhiên lại có nhược điểm là phức tạp, khó triển khai về mặt thuật toán, không thuận tiện để xây dựng các chương trình lớn

Ngược lại ngôn ngữ C lại dễ dung, tiện lợi, dễ debug, thuận tiện để xây

dựng các chương trình lớn Nhưng nhược điểm của ngôn ngữ C là khó giúp người lập trình hiểu biết sâu về phần cứng, các thanh ghi, tập lệnh của vi điều khiển, hơn nữa, xét về tốc độ, chương trình viết bằng ngôn ngữ C chạy chậm hơn chương trình viết bằng ngôn ngữ ASM

Tùy vào từng bài toán, từng yêu cầu cụ thể mà ta chọn lựa ngôn ngữ lập

trình cho phù hợp

Có rất nhiều phần mềm lập trình cho AVR, như Code Vision, IAR,

AVRStudio…, trong đó Code Vision là một trong những phần mềm khá nổi tiếng

và phổ biến ở đây em xin giới thiệu phần mềm

Code Vision để lập trình cho AVR Với Ngôn Ngữ C cho những ví dụ đơn giản cho các bạn thực hành:

Các bạn có thể dowload CodeVisionAVR V2.03.4 tại đây:

http://www.mediafire.com/?ny7sti7gb481upl

Sau khi cài đặt và khởi động chương trình các ban có giao diện:

Giao diện phần mềm Code Vision

Trang 2

Tạo project trong Code Vision :

Để tạo Project mới chọn trên menu: File -> New được như sau:

Chọn Project sau đó click chuột vào OK được cửa sổ hỏi xem có sử dụng

Code Winzard không:

Chọn Yes

Trang 3

Lập trình với code vesion AVR SV:Vũ Ngọc Bắc –CĐT4-K52

Chọn Yes được cửa sổ CodeWinzardAVR như sau :

- Sử dụng chíp AVR nào và thạch anh tần số bao nhiêu ta nhập vào tab Chip

Để khởi tạo cho các cổng IO ta chuyển qua tab Ports

- Các chân IO của AVR mặc định trạng thái IN, muốn chuyển thành trạng

thái OUT để có thể đưa các mức logic ra ta click chuột vào các nút IN (mầu

trắng) để nó chuyển thành OUT trong các Tab Port

Sau đó chọn File ->Generate, Save and Exit

Trang 4

Sau đó ta save project lại

Ta được như sau :

Trang 5

Lập trình với code vesion AVR SV:Vũ Ngọc Bắc –CĐT4-K52

Như vậy là chúng ta đã tạo xong project trong Code Vision

3 Ví dụ minh họa

Chương trình sau sẽ làm nhấp nháy led, led nối vào port A

Phân tích:

Trang 6

Chương trình trên rất đơn giản, sơ đồ thuật toán của chương trình trên như sau :

Sau khi viết xong chương trình, chúng ta nhấn Shift+F9 để biên dịch Nếu

chương trình không có lỗi và biên dịch thành công, sẽ có thông báo như sau :

Trang 7

Lập trình với code vesion AVR SV:Vũ Ngọc Bắc –CĐT4-K52

Để nạp chương trình các bạn cần cấu hình cho mạch nạp Vào menu:

Settings -> Programmer được cửa sổ như sau :

Chú ý: (Mạch nạp ta dùng STK 200 do đó các bạn chọn Kanda Systems

STK200+/300) Nhấp OK Sau đó các bạn chọn trên menu : Projects -> Configure

được cửa sổ như sau:

Trang 8

Sau đó bạn chọn Too/ Chip Programmer để nạp cho AVR :

Chúng ta được cửa sổ như sau :

Trang 9

Lập trình với code vesion AVR SV:Vũ Ngọc Bắc –CĐT4-K52

Các bạn cấu hình các thông số cần thiết, như chọn thạch anh nội hay ngoại,

cấu hình các fuse bit… rồi nhấn vào Program All để nạp chương trình

Ví Dụ 2:

Trang 10

Em trình bày về nguyên lí lập trình cho led 7 thanh:

Ở ví dụ sau, chúng ta sẽ hiển thị lần lượt các số từ 0 đến 9 lên led 7 thanh

Sơ đồ mạch :

Led 7 thanh bao gồm 7 thanh a,b,c,d,e,f,g và 1 “thanh” dp, mỗi thanh là một

led Tùy vào cách nối chung anot hay catot giữa các thanh mà ta có 2 loại anot chung hoặc catot chung

Như hình vẽ trên, led 7 thanh có dạng anot chung, muốn thanh nào sáng, chúng

ta chỉ việc cấp điện áp dương vào chân tương ứng, khi đó led tương ứng với thanh

đó sẽ được phân cực thuận và phát sáng

Ví dụ như hình vẽ trên, để sáng thành hình số 5, ta cần các thanh a,f,g,c,d sáng, khi đó ta cần cấp mức logic 1 (tương ứng với điện áp 5V) vào các chân tương ứng,

và kết quả là ta được 1 chuỗi số nhị phân 10110110, hay ở dạng mã hex : 0xB6 Bằng cách tương tự, ta cũng tạo được giá trị (mã) để xuất ra port của vi điều

khiển để led sáng các số từ 0 đến 9 Người ta thường tạo ra 1 bảng mã như vậy như vậy để tiện sử dụng

Bảng mã hóa các chữ số

Trang 11

Lập trình với code vesion AVR SV:Vũ Ngọc Bắc –CĐT4-K52

Chương trình:

Trong chương trình trên, các câu lệnh cấu hình tương tự như phần trước, chúng

Trang 12

ta chỉ phân tích về thuật toán.

Biến font[] là một mảng số kiểu char, dùng để lưu trữ các mã của các số tương ứng, ví dụ số 0 sẽ có mã là phần tử đầu tiên của mảng : font[0] hay 0xC0, tương

tự, số 1 sẽ có mã là font[1] hay 0xF9…

Lần lượt chúng ta xuất từng phần tử của mảng font[] ra cổng nối vào led (port

B), khi chạy chương trình, chúng ta sẽ thấy led sáng từ 0 đến 9

Ví Dụ 3

Giới thiệu với các bạn phần lập trình và thuật toán nhận bít đường đi của robot đội TNT trong cuộc thi RoBoCon 2009:

Sơ đò mạch Led do đường

Mạch nguyên lý:

Trang 13

Lập trình với code vesion AVR SV:Vũ Ngọc Bắc –CĐT4-K52

Mạch layout:

Lập trình dò đường:

/*void kiemtralech(void)

{

if((!R3) || (!R2) || (!R1)) TEMP=1; //lech trai

else if((!L3) || (!L2) || (!L1)) TEMP=2; //lech phai

else if((!L4) || (!R4)) TEMP=3; // dang di dung duong

} */

void kiemtralech(void)

{

if(!R3) ktlechl=1; //lech trai

if(ktlechl==1) if(!R2) ktlechl=2;

if(ktlechl==2) if(!R1) ktlechl=3;

if(ktlechl==3) if(!R2) ktlechl=2;

if(!L3) ktlechr=1; //lech phai

if(ktlechr==1) if(!L2) ktlechr=2;

Trang 14

if(ktlechr==2) if(!L1) ktlechr=3;

if(ktlechr==3) if(!L2) ktlechr=2;

}

//*****************************************************************

*********************************************

unsigned char doc_sensor()

{

tongcambien=0;

if(!L4) tongcambien++;

if(!R4) tongcambien++;

if(!L3) tongcambien++;

if(!R3) tongcambien++;

if(!L2) tongcambien++;

if(!R2) tongcambien++;

if(!L1) tongcambien++;

if(!R1) tongcambien++;

delay_ms(10);

return(tongcambien);

}

Trang 15

Lập trình với code vesion AVR SV:Vũ Ngọc Bắc –CĐT4-K52

interrupt [ADC_INT] void adc_isr(void)

{

static unsigned char input_index=0;

// Read the 8 most significant bits

// of the AD conversion result

adc_data[input_index]=ADCH;

// Select next ADC input

if (++input_index > (LAST_ADC_INPUT-FIRST_ADC_INPUT)) input_index=0; ADMUX=(FIRST_ADC_INPUT|ADC_VREF_TYPE)+input_index;

// Start the AD conversion

ADCSRA|=0x40;

if (input_index==0)//Dua ket qua quet sensor vao thanh ghi SENSOR

{

if(adc_data[0]<=adc_level[0]) L1=0;else L1=1;

if(adc_data[1]<=adc_level[1]) L2=0;else L2=1;

if(adc_data[2]<=adc_level[2]) L3=0;else L3=1;

if(adc_data[3]<=adc_level[3]) L4=0;else L4=1;

if(adc_data[4]<=adc_level[4]) R4=0;else R4=1;

if(adc_data[5]<=adc_level[5]) R3=0;else R3=1; if(adc_data[6]<=adc_level[6]) R2=0;else R2=1; if(adc_data[7]<=adc_level[7]) R1=0;else R1=1; };

kiemtralech();

Trang 16

/

******************************************************************

*******************************************/

/

******************************************************************

*******************************************/

void sensor(void)

//Dung thanh ghi SENSOR

//Sensor i nhan tuong ung bit thu i la 0, nguoc lai no nhan gia tri 1

{

// ADC Interrupts: On

ADCSRA=0x8E;

// Global enable interrupts

#asm("sei") //nhung' asm

// Select ADC input 0

ADMUX=0;

// Bat dau quet

ADCSRA|=0x40; //bat' dau` cho senser quet'

}

/

******************************************************************

*******************************************/

void xem_tongcambien(void)

Trang 17

Lập trình với code vesion AVR SV:Vũ Ngọc Bắc –CĐT4-K52

{

unsigned char xem,j;

while(1)

{

j=0;

xem=0;

xem=doc_sensor();

lcd_clear();lcd_gotoxy(0,0);lcd_putsf(" TCB:");lcd_putnum(xem);lcd_putsf(" P8thoat");

lcd_gotoxy(0,1);lcd_putsf("Van");lcd_gotoxy(12,1);lcd_putsf("Long");

while(j!=8)

{

if(adc_data[j]<=adc_level[j])

{

lcd_gotoxy(3+j,1);lcd_putsf("*");

} else {lcd_gotoxy(3+j,1);lcd_putsf("-");};

j++;

}

CT08 if(!PINB.4) break;

}

Trang 18

Chúc các bạn thực hành tôt:

Ngày đăng: 10/08/2015, 15:21

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w