微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > atmege16外部中断程序

atmege16外部中断程序

时间:12-01 来源:互联网 点击:
/******************************************

功能:演示ATMEGA16的3个外部中断程序

编辑环境:ICCAVR

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

#include

#include

#define uint unsigned int

#define uchar unsigned char

#define beep_0 (PORTD&=~(1

#define beep_1 (PORTD|=(1

//蜂鸣器响

uint count;

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

三个外部中断声明,注意中断向量号

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

#pragma interrupt_handler Exint0:2

#pragma interrupt_handler Exint1:3

#pragma interrupt_handler Exint2:19

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

系统延时函数

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

void delay(uint ms)

{

uint i,j;

for(i=0;i

{

for(j=0;j<1140;j++);

}

}

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

端口初始化每个外部中断端口是固定的

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

void port_init()

{

DDRA=0XFF;

PORTA=0XFF;

DDRB&=(0

PORTB|=(1

DDRD&=(0

PORTD|=(1

DDRD&=(0

PORTD|=(1

}

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

外部中断初始化

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

void INT_init()

{

SREG=0X80;//打开全局中断

GICR|=(1

MCUCR=(1

MCUCSR=(0

}

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

流水灯函数

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

void LED_1()

{

uchar i;

for(i=0;i<8;i++)

{

PORTA=~BIT(i);

delay(200);

}

}

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

LED_2函数

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

void LED_2()

{

PORTA=0X0F;

delay(500);

PORTA=0XF0;

delay(500);

}

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

LED_3函数

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

void LED_3()

{

PORTA=0X81;

delay(500);

PORTA=0X7E;

delay(500);

}

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

外中断0函数

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

void Exint0()

{

LED_2();

}

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

外中断1函数

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

void Exint1()

{

LED_3();

}

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

外中断2函数

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

void Exint2()

{

DDRD=(1

for(count=0;count<4;count++)

{

beep_0;delay(200);

beep_1;delay(200);

}

}

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

主函数

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

void main()

{

port_init();//端口初始化

INT_init();//中断初始化

while(1)// 当非0值时执行下面函数

{

LED_1();//流水灯函数

}

}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top