Ngat ngoai trong avr

Màu nền
Font chữ
Font size
Chiều cao dòng

Atmega16 có 3 ngắt ngoài INT0(PORTD.2) INT1(PORTD.3) và INT2(PORTB.2)

Khi xảy ra một trong các sự kiện đối với các chân này :

Low level - Điện áp ở chân ngắt xuống mức logic 0 V

Any change - Bất kì sự thay đổi điện áp từ chân ngắt

Falling Edge - Khi có 1 sườn điện áp xuống (5V->0V)

Rising Edge -Khi có 1 sườn điện áp lên (0V->5V)

Sau đó 1 cờ ngắt sẽ dựng lên 1 và báo cho biết có ngắt , nhảy đến chương trình con thực hiện ngắt .

Ví dụ : Dùng ngắt để báo động khi xảy ra sự cố của hệ thống .

Khi hệ thống xảy ra sự cố , chân PORTD3(INT1 ) sẽ có giá trị là 0V chương trình sẽ bật đèn đỏ để cảnh báo .Khi kết thúc sự cố bật trở lại đèn xanh .

Ban đầu khởi tạo ta sẽ để đèn xanh bật đỏ tắt , PORTD.3 treo lên 5V , là port vào

PORTD=0x08;

DDRD=0x00;

Chọn ngắt INT1 chế độ Low level (khi nào chân PD3 có mức logic 0V là xảy ra ngắt )

GICR|=0x80;

MCUCR=0x00;

MCUCSR=0x00;

GIFR=0x80;

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

This program was produced by the

CodeWizardAVR V1.24.8d Professional

Automatic Program Generator

© Copyright 1998-2006 Pavel Haiduc, HP InfoTech s.r.l.

http://www.hpinfotech.com

Project :

Version :

Date : 12/29/2007

Author : le ngoc tuan

Company : vagam

Comments:

Chip type : ATmega16

Program type : Application

Clock frequency : 8.000000 MHz

Memory model : Small

External SRAM size : 0

Data Stack size : 256

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

#include <mega16.h>

#include <delay.h>

// Declare your global variables here

#define den_xanh PORTB.4

#define den_do PORTB.5

// External Interrupt 1 service routine

interrupt [EXT_INT1] void ext_int1_isr(void)

{

// Place your code here

den_xanh=1;den_do=0;//bat den do ,tat den xanh

}

void main(void)

{

// Declare your local variables here

// Input/Output Ports initialization

// Port A initialization

// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In

// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T

PORTA=0x00;

DDRA=0x00;

// Port B initialization

// Func7=In Func6=Out Func5=Out Func4=In Func3=In Func2=In Func1=In Func0=In

// State7=T State6=0 State5=0 State4=T State3=T State2=T State1=T State0=T

PORTB=0x80;

DDRB=0x30;

// Port C initialization

// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In

// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T

PORTC=0x00;

DDRC=0x00;

// Port D initialization

// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In

// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T

PORTD=0x08;

DDRD=0x00;

// External Interrupt(s) initialization

// INT0: Off

// INT1: On

// INT1 Mode: Low level

// INT2: Off

GICR|=0x80;

MCUCR=0x00;

MCUCSR=0x00;

GIFR=0x80;

// Global enable interrupts

#asm("sei")

while (1)

{

den_xanh=0;den_do=1;

};

}

Bạn đang đọc truyện trên: Truyen2U.Pro