立即注册 找回密码

微雪课堂

搜索
微雪课堂 AVR AVR单片机笑傲江湖 查看内容

AVR 外部中断程序

2015-6-2 16:55| 发布者: waveshare-admin| 查看: 5432| 评论: 0

摘要: 系统功能   使用AVR外部中断INT1检测按键,并使用LED作出简单指示!硬件设计AVR主控电路原理图(点击图片放大,不需要放大镜!)LED控制电路原理图(点击图片放大,不需要放大镜!)软件设计下面部分从TXT拷出,拷 ...
系统功能

   使用AVR外部中断INT1检测按键,并使用LED作出简单指示!


硬件设计


AVR主控电路原理图(点击图片放大,不需要放大镜!) 
 
LED控制电路原理图(点击图片放大,不需要放大镜!) 



软件设计

下面部分从TXT拷出,拷到网页,代码部分缺省了很多空格,比较凌乱,请谅解!

//目标系统: 基于AVR单片机
//应用软件: ICC AVR

/*10101010101010101010101010101010101010101010101010101010101010101010
----------------------------------------------------------------------
实验内容:
使用AVR的外部中断INT1检测PD3Key,如果有按键按下,则唤醒休眠的MCU,并使它的PB口的LED做加1指示。
----------------------------------------------------------------------
硬件连接: 
将PB口的LED指示灯使能开关切换到"ON"状态。
----------------------------------------------------------------------
注意事项: 
(1)若有加载库程序,请将光盘根目录下的“库程序”下的“ICC_H”文件夹拷到D盘
(2)请详细阅读:光盘根目录下的“产品资料\开发板实验板\SMK系列\SMK1632\说明资料”  
----------------------------------------------------------------------
10101010101010101010101010101010101010101010101010101010101010101010*/

#include <iom16v.h>
#include "D:\ICC_H\CmmICC.H"

#define DISP_DDR DDRB
#define DISP_PORT   PORTB
#define IN_PD3  cbi(DDRD,3)  //PD3
#define SET_PD3  sbi(PORTD,3)
#define GET_PD3  gbi(PIND,3)

/*--------------------------------------------------------------------
程序名称:外部中断服务程序
程序功能:
注意事项:
提示说明:
输    入:
返    回:
--------------------------------------------------------------------*/
#pragma interrupt_handler int1_isr:3
void int1_isr(void)
{
 GICR &= 0b01111111;  // disable int1 interrupt
 DISP_PORT++;   // 显示口指示加1,指示被按次数
 delay50ms(4);
 GICR |= 0b10000000;   // enable int1 interrupt
}
/*--------------------------------------------------------------------
程序名称:外部中断初始化程序
程序功能:
注意事项:
提示说明:
输    入:
返    回:
--------------------------------------------------------------------*/
void int1_init()
{
  IN_PD3;    // set PD3/INT1 as input
 SET_PD3;   // set PD3/INT1 as output,high level,avoid triggering
 MCUCR |= 0b11110011;  // set PD3/INT1 as low level active
 GICR  |= 0b10000000;  // enable global interrupt
 SEI();       // enable external interrupt
}
/*--------------------------------------------------------------------
程序名称:
程序功能:
注意事项:
提示说明:
输    入:
返    回:
--------------------------------------------------------------------*/
void main(void)
{
 DISP_DDR  = 0xFF;
 DISP_PORT = 0x00;
 int1_init();
 asm("sleep");   // set mcu as sleep modle
 while(1);
}


系统调试

开机后MCU处于SLEEP状态,之后按按键,LED作出了简单指示。

以下资料由微雪电子整理并发布,未经许可不得转载,否则追究相应责任!


364

顶一下

刚表态过的朋友 (364 人)

最新评论

所有教程
AVR

微雪官网|产品资料|手机版|小黑屋|微雪课堂. ( 粤ICP备05067009号 )

GMT+8, 2024-12-22 18:34 , Processed in 0.019325 second(s), 20 queries .

返回顶部