Ngat ngoai trong avr
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: truyentop.pro