Tóm tắt : Lập trình điều khiển led bật tắt ,sử dụng cách định nghĩa PIN và PORT ,cách dùng thư viện delay.h của codevision.
Giới thiệu:
Cấu trúc chân của AVR có thể phân biệt rõ chức năng (vào ra) trạng thái (0 1) từ đó ta có 4 kiểu vào ra cho một chân của avr.Khác với 89 là chỉ có 2 trạng thái duy nhất (0 1) . Đặc biệt nguồn từ chân của AVR đủ khoẻ để điều khiển Led trực tiếp (mA) còn 89 chỉ là vài uA .
Để điều khiển các chân này chúng ta có 2 thanh ghi
->PORTx :giá trị tại từng chân (0 – 1) có thể truy cập tới từng bit PORTx.n
->DDRx : thanh ghi chỉ trạng thái của từng chân , vào hoặc là ra .Giá trị 1 là ra và 0 là vào .
Ví dụ 1 : Nhấp nháy lần lượt đèn xanh và đèn đỏ , khi ấn nút bấm chỉ có đèn đỏ sáng.
Phần cứng : đèn xanh PORTB.4 , đèn đỏ PORTB.5 , nút bấm PINB.7
Chú ý :
định nghĩa 1 chân là chân vào PIN x.x
#define nut_bam PINB.7
định nghĩa 1 chân là chân vào PORT x.x
#define den_do PORTB.5
Trong bài này PORT B có 2 biến đầu ra là PB5 và PB6
DDRB=0b00110000 =0x30
Khởi tạo chân PB7 cần được treo lên 5V , khi ấn nút bấm sẽ thông GND(0V) nên ta có PORTB=0b10000000=0x80;
Sau khi định nghĩa , nếu bạn den_do=1; đèn led đỏ sẽ tắt
den_do=0; đèn sẽ sáng .
( do cách thiết kế mạch đầu dương led nối 5V còn đầu âm nối vào VĐK)
delay.h có 2 cách gọi là trễ theo ms và us
delay_ms(time);
delay_us(time);
c code
1.
2.
/*****************************************************
3.
This program was produced by the
4.
CodeWizardAVR V1.24.8d Professional
5.
Automatic Program Generator
6.
© Copyright 1998-2006 Pavel Haiduc, HP InfoTech s.r.l.
7.
http://www.hpinfotech.com
8.
9.
Project :
10.
Version :
11.
Date : 12/27/2007
12.
Author : LENGOCTUAN
13.
Company : VAGAM
14.
Comments:
15.
16.
17.
Chip type : ATmega16
18.
Program type : Application
19.
Clock frequency : 8.000000 MHz
20.
Memory model : Small
21.
External SRAM size : 0
22.
Data Stack size : 256
23.
*****************************************************/
24.
25.
#include
26.
#include
27.
28.
// Declare your global variables here
29.
30.
#define den_xanh PORTB.5
31.
#define den_do PORTB.6
32.
#define nut_bam PINB.7
33.
34.
void main(void)
35.
{
36.
37.
// Port B initialization
38.
// Func7=In Func6=Out Func5=Out Func4=In Func3=In Func2=In Func1=In Func0=In
39.
// State7=T State6=0 State5=0 State4=T State3=T State2=T State1=T State0=T
40.
PORTB=0x80;
41.
DDRB=0x30;
42.
43.
44.
45.
while (1)
46.
{
47.
// Place your code here
48.
//khi nut bam chua duoc bam logic nut_bam=1
49.
if(nut_bam)
50.
{
51.
den_xanh=1;den_do=0;
52.
delay_ms(500);
53.
den_xanh=0;den_do=1;
54.
delay_ms(500);
55.
}
56.
//khi nut bam duoc an nut_bam=0 chi den do sang
57.
else
58.
{den_xanh=1;den_do=0;}
59.
};
60.
}
61.
62.
63.
Bạn gặp phải vấn đề dội nút nhấn. Điều gì xảy ra khi bạn nhấn nút ?
- Đặc tính dội: Thời gian dội nút từ 10ms đến 50ms (tùy loại nút)
Từ giản đồ, suy nghĩ hồi lâu wink , người ta nghĩ ra chiến thuật chống lại hiện tượng này:
Lưu đồ của bài toán bạn đặt ra như sau: