×
单片机 > 单片机程序设计 > 详情

ARM7单片机(学习ing)—(二)、中断控制编程—02

发布时间:2020-07-08 发布时间:
|

进行了MDK中断设置之后~~

马上中断就可以用了~~

要想了解的话,找EDA软件板块~~

今天赶紧写完就哦了~~

二、中断控制编程

二—(01)、计数器(通过三个外部中断来控制计数的加减或者清零~~)





MDK2_1.c

//------------------------------------------------------------------------------
//通过外部中断0、外部中断1、外部中断2实现加减计数器,并输出数码管显示
#include"lpc210x.h"
#include"delay.h"
#include"bit.h"
#include"macroandconst.h"
//------------------------------------------------------------------------------
#define CON 0x000000ff      //用于设置IOCLR,拉低数据引脚
uchar seg_display=0x00;      //LED数码管显示,uchar型变量       
//------------------------------------------------------------------------------
//外部中断0处理函数,实现加计数器
//名称:EINT0
void __irq EINT0(void)
{
 seg_display++;
 while(GET_BIT(EXTINT,0))     //等待外部中断信号恢复为高电平,然后对EXTINT的第0位写‘1’来清零
  SET_BIT(EXTINT,0);
 IOCLR=CON;        //在显示之前要将数据口置零~~与下面的IOSET相配合~~然后达到送高低电平
 IOSET=seg_display;
 VICVectAddr=0;       //处理完成后,写向量地址寄存器为0,通知VIC中断处理结束
}
//------------------------------------------------------------------------------
//外部中断0处理函数,实现减计数器
//名称:EINT1
void __irq EINT1(void)
{
 seg_display--;
 while(GET_BIT(EXTINT,1))     //等待外部中断信号恢复为高电平,然后对EXTINT的第1位写‘1’来清零
  SET_BIT(EXTINT,1);
 IOCLR=CON;        //在显示之前要将数据口置零~~与下面的IOSET相配合~~然后达到送高低电平
 IOSET=seg_display;
 VICVectAddr=0;       //处理完成后,写向量地址寄存器为0,通知VIC中断处理结束
}
//------------------------------------------------------------------------------
//外部中断0处理函数,实现减计数器
//名称:EINT2
void __irq EINT2(void)
{
 seg_display=0;
 while(GET_BIT(EXTINT,2))     //等待外部中断信号恢复为高电平,然后对EXTINT的第2位写‘1’来清零
  SET_BIT(EXTINT,2);
 IOCLR=CON;        //在显示之前要将数据口置零~~与下面的IOSET相配合~~然后达到送高低电平
 IOSET=seg_display;
 VICVectAddr=0;       //处理完成后,写向量地址寄存器为0,通知VIC中断处理结束
}
//------------------------------------------------------------------------------
//端口初始化函数
void port_init(void)
{
 PINSEL0=0000000;      //设置I/O工作模式,分别为EINT0、EINT1、EINT2,其它为GPIO
 PINSEL1=0x00000001;
 IODIR=CON;        //设置I/O方向,第八位数据位为输出         
}
//------------------------------------------------------------------------------
//外部中断初始化函数
void eint_init(void)
{
 VICIntSelect=0;       //终端选择寄存器,选择为IRQ
 VICIntEnable=0x0001c000;    //使能EINT0、EINT1、EINT2中断

 VICVectCntl0=0x0000002e;    //EINT0通道分配到IRQ Slot0,既优先级最高
 VICVectCntl1=0x0000002f;    //EINT1通道分配到IRQ Slot1
 VICVectCntl2=0x00000030;    //EINT2通道分配到IRQ Slot2

 VICVectAddr0=(int)EINT0;
 VICVectAddr1=(int)EINT1;
 VICVectAddr2=(int)EINT2; 
}
//------------------------------------------------------------------------------
int main(void)
{
 port_init();
 eint_init();
 IOCLR=CON;
 IOSET=seg_display;

 EXTINT=0x07;       //清除外部中断
 while(1);
}

其它的辅助文件我就不贴了~~

都是挺简单的~~



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
AVR单片机中RC电容触摸的感应原理解析