Nguyên lý điều khiển và xây dựng mạch mô phỏng trên Proteus

Một phần của tài liệu Hướng dẫn lập trình AVR rất hay (Trang 31 - 35)

4 Các bài tập ví dụ

4.2.2 Nguyên lý điều khiển và xây dựng mạch mô phỏng trên Proteus

Nguyên lý điều khiển giống như trong bài ví dụ Điều khiển thiết bị ngoài.

Mạch mô phỏng trên Proteus cũng tương tự ví dụ Điều khiển thiết bị ngoài, trừ việc có thêm một nút bấm đưa vào chân PD2/INT0 để điều khiển ngắt INT0.

4.2.3 Lập trình cho vi xử lý

a) Xác định yêu cầu làm việc của vi xử lý

Vi xử lý điều khiển bật/tắt đèn Led theo chu kỳ 0,5s và 2s theo tác động bấm nút của người dùng.

b) Xây dựng thuật toán điều khiển

Thuật toán cho ví dụ được thể hiện trên sơ đồ sau:

Hình 38: Sơ đồ thuật toán ví dụ Lập trình sử dụng ngắt ngoài Ý tưởng của thuật toán này như sau

Chu kỳ nháy được đặt bằng một biến x, trong chương trình, x hoặc có giá trị 500 (0,5s)

hoặc 2000 (2s).

Khi ngắt ngoài được kích hoạt, chương trình ngắt gán giá trị x = 2000 (nếu giá trị hiện thời của x = 500), hoặc gán giá trị x = 500 (nếu giá trị hiện thời của x = 2000).

Chương trình chính sẽ thực hiện điều khiển nháy led với chu kỳ x.

Như vậy khi người dùng nhấn nút, sẽ kích hoạt ngắt ngoài, đổi giá trị biến x, đèn led sẽ được điều khiển nhấp nháy theo giá trị biến x tương ứng.

c) Chuẩn bị lập trình bằng phần mềm CodeVision.

Các bước chọn vi xử lý, tần số thạch anh, chức năng I/O cho chân PB5 được thực hiện giống như ví dụ Điều khiển thiết bị ngoài.

Để kích hoạt tính năng INT0, trong cửa sổ CodeWizardAVR, chọn thẻ External IRQ (ngắt ngoài) và thiết lập như hình sau.

Hình 39: Kích hoạt INT0

Trong ô “Mode”, click chọn “Falling Edge” để chọn chế độ kích hoạt ngắt ở cạnh lên.

d) Viết chương trình điều khiển.

Trong ví dụ này có sử dụng biến x để đặc trưng cho chế độ làm việc của mạch. Biến là

một khái niệm trong lập trình, để chỉ các giá trị số, giá trị logic, chuỗi ký tự, matrận… Biến có thể có giá trị không đổi hoặc thay đổi trong lập trình tùy thuộc vào cách sử dụng.

Mỗi kiểu biến có đặc trưng khác nhau (để chỉ giá trị số, giá trị logic…), muốn sử dụng biến trong lập trình cần phải có bước “khai báo”. Bao gồm khai báo tên biến (x, y, bien1, bien2,…) và kiểu dữ liệu(char, str, …). Các kiểu và thuộc tính của kiểu dữ liệu được cho trong bản phần phụ lục.

Trong ví dụ này ta khai báo biến x là biến kiểu int (giá trị số nguyên từ -32768 ~

+32767).

Include thêm file header sau: delay.h.

Khai báo biến bằng dòng lệnh: char x=500; Ở đây chúng ta gán cho x giá trị

x=500 ngay từ đầu, để khi cấp điện, đèn led nhấp nháy ngay với chu kỳ 0,5s.

Hình 40: Khai báo biến và nơi viết chương trình ngắt

Viết chương trình phục vụ ngắt ngoài: Trình phục vụ ngắt ngoài được viết tại vị trí như trong hình trên. Cấu trúc chương trình ngắt có thể được hình dung như sau:

interrupt [EXT_INT0] void ext_int0_isr(void) {

Nếu x=500, gán giá trị x=2000;

Nếu x không bằng 500, gán giá trị x=500; }

Phép so sánh điều kiện “nếu” ở trên trong lập trình được gọi là phép so sánh if, cấu trúc của lệnh if như sau:

if (biểu thức so sánh) { Các dòng lệnh A; } else { Các dòng lệnh B; }

Trong đó “biểu thức so sánh” là một biểu thức logic, giá trị trả về là 0 hoặc 1. Ví dụ khi muốn so sánh giá trị của x (có giá trị hiện thời là 2000) xem có bằng 500 hay không, ta viết:

x == 500;

Ký hiệu hai dấu bằng “==” là ký hiệu của phép so sánh, như dòng lệnh trên, giá trị trả về sẽ bằng 0, vì giá trị hiện thời của x là 2000 khác 500

x == 500 = 0;

Nếu biểu thức so sánh trả về giá trị 1, các dòng lệnh a sẽ được thực hiện, nếu giá trị biểu thức so sánh trả về bằng không, các dòng lệnh B sẽ được thực hiện.

Như vậy đoạn code của chương trình ngắt như sau: if (x==500) { x=2000; } else { x=500; }

Lúc này toàn bộ code được viết như sau:

Hình 41: Code chương trình ngắt

Chương trình trong vòng lặp while chính tương tự như trong ví dụ Điều khiển thiết bị ngoài, chỉ khác ở chỗ giá trị 500 ms chu kỳ nháy được thay bằng biến x.

Hình 42: Đoạn code trong vòng lặp while chính

Sau khi viết code, kiểm tra, sửa lỗi và complie thành công, dùng mạch mô mỏng vừa tạo trên phân mềm Proteus để chạy mô phỏng.

Tóm tắt

Cách hoạt động của ngắt ngoài.

Biến và kiểu dữ liệu của biến.

So sánh if.

Câu hỏi mở rộng

Điều khiển led 7 thanh hiện các số từ tăng từ 0 đến 9 theo thao tác nhấn nút của người dùng.

Một phần của tài liệu Hướng dẫn lập trình AVR rất hay (Trang 31 - 35)

Tải bản đầy đủ (PDF)

(66 trang)