打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
AVR单片机外部中断触发的流水灯程序
/*   program name : 外部中断程序;
这费了我好几个小时的心血!成功的喜悦难以用言语表达!
概述:
8位流水非精确定时,一秒循环灯闪烁,等待外部中断一下降沿中断触发信号,
外部中断一旦触发,等待触发按键弹起(此时流水灯暂停状态),中断按键一旦弹
起,继续运行上一级程序(流水灯继续运行);
accomplish time : 2014-2-7 22:47:15;
*/
#include <avr/io.h>
#include <avr/interrupt.h>  //中断必备的头文件;
typedef unsigned char uint8;
typedef unsigned int uint16;
void init_io()     //所有io口初始化函数;
{
DDRA=0XFF;
PORTA=0X00;   //PA口输出0;
DDRB=0XFF;
PORTB=0X00;   //PB口输出0;
DDRC=0XFF;
PORTC=0X00;   //PC口输出0;
DDRD=~(1<<3);    //INT1引脚设为输入状态;
PORTD=0XFF;      //INT1引脚内部有上拉,其他引脚输出1;
}
void delay()
{
uint16 u=0 ;
uint8 s=0;
for(s=0;s<200;s++)
{
for(u=0;u<50000;u++);   //5毫秒左右;
}
}
void buzz()
{
uint16 s=0;
uint8 i=0;
PORTC|=0X80;
for(i=0;i<10;i++)
{
for(s=0;s<50000;s++);
}
PORTC&=~0X80;
}
int main(void)
{
init_io();  //初始化io口;
//* 1. 先设置好由那个引脚来触发外部中断, 和触发方式;
//  MCUCR 是中断触发模式控制寄存器;
MCUCR|=1<<3;   //ISC11 被置一,其他位全部是零,代表 INT1 (外部中断1)下降沿产生异步中断;
//一旦 INT1 被拉低,就会进入中断子程序;
//*  2. 开启中断使能位;
GICR |=0X80;  //  GICR是中断使能寄存器,最高位被置一,表示外部INT1中断使能
//  (在MCUCR寄存器中,INT1被设置为下降沿异步中断触发方式);
sei();//全局中断使能函数.没有此函数,中断将无法执行.(我不知道为什么!或许是甲鱼的屁股--规定!)
while(1)
{
PORTB|=1<<2;  //使能流水灯,此时PA口为全零(流水灯全亮);
delay();  //非精确延时1秒左右;
PORTB&=~(1<<2);  //关闭流水灯;
delay();  //非精确延时1秒左右;
}
}
//==================中断服务子程序=============================
SIGNAL(SIG_INTERRUPT1) //外部中断INT1 中断服务子程序函数(中断一旦被触发,cpu将会进入此函数);
{
buzz();
while((PIND&(1<<3))==0);
}
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
AVR单片机学习(五)C语言的流水灯验证
最全的心形流水灯制作资料(含源程序电路图及仿真)
一、单片机学习——流水灯实验
PWM生成正弦波的程序
UC头条:基于51单片机的通讯聊天系统(下)
点亮单片机中任意一个流水灯亮灭的C语言程序该如何做呢?
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服