资讯详情

atmege16外部中断程序

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

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

编辑环境:ICC

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

#include<iom16v.h>

#include<macros.h>

#define uint unsigned int

#define uchar unsigned char

#define beep_0 (PORTD&=~(1<<PD7))

#define beep_1 (PORTD|=(1<<PD7))

//响

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<ms;i++)

{

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

}

}

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

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

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

void port_init()

{

A=0XFF;

PORTA=0XFF;

DDRB&=(0< NT2

PORTB|=(1<<PB2);

DDRD&=(0<<PD2);//INT0

PORTD|=(1<<PD2);

DDRD&=(0<<PD3);//INT1

PORTD|=(1<<PD3);

}

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

外部中断初始化

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

void INT_init()

{

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

GICR|=(1<<INT0)|(1<<INT1)|(1<<INT2);//三个中断使能

CR=(1<

MCUCSR=(0<<ISC2);//INT2下降沿触发中断

}

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

流水灯函数

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

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<<PD7);

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();//流水灯函数

}

}

-电子元器件采购网(www.ruidan.com)是本土元器件目录分销商,采用“小批量、现货、样品”销售模式,致力于满足客户多型号、高质量、快速交付的采购需求。 自建高效智能仓储,拥有自营库存超过50,000种,提供一站式正品现货采购、个性化解决方案、选型替代等多元化服务。
锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台