凌阳16位单片机之IRQ4中断
来源:互联网 发布:知尚书是几品官 编辑:程序博客网 时间:2024/05/29 04:29
IRQ4中断是由 b4 b5 b5三位来控制的
实现功能:利用IRQ4三个时基中断,即IRQ4_1kHz、IRQ4_2kHz和IRQ4_4kHz中断,在各自的中断服务程序中对相应的变量进行累加;并通过点亮、熄灭发光二极管来表示相应变量计数器累加的速度;
实验现象:D4和D5的亮灭周期为2s,D6和D7的亮灭周期为1s,D8~D11的亮灭周期为0.5s。
这个需要有一个变量来计数,
#include "SPCE061A.H"
#define sec2 0x0003 //宏定义,低八位的低两个口
#define sec1 0x000c
#define sec5 0x00f0
unsigned int i,j;
void IRQ4(void)__attribute__((ISR));
void IRQ4()
{
static unsigned int IRQ_2=0,IRQ_1=0,IRQ_4=0;//设置三个计数器
//unsigned int IRQ42,IRQ41,IRQ44;
//unsigned int Output = 0x0000,i;
//*P_IOA_Data=0x00ff;
//asm("INT OFF");
if(*P_INT_Ctrl & C_IRQ4_1KHz)//1024
{
if(++IRQ_1>=2048)
{
IRQ_1=0;
if(((*P_IOA_Buffer)&sec2)==0)
{
*P_IOA_Data+=sec2;
}
else
{
*P_IOA_Data-=sec2;
}
}
//通过判断亮暗来进行加减 下面两个都是类似的
*P_INT_Clear = C_IRQ4_1KHz;
}
if(*P_INT_Ctrl & C_IRQ4_2KHz)//2048
{
if(++IRQ_2>=2048)
{
IRQ_2=0;
if(((*P_IOA_Buffer)&sec1)==0)
{
*P_IOA_Data+=sec1;
}
else
{
*P_IOA_Data-=sec1;
}
}
*P_INT_Clear = C_IRQ4_2KHz;
}
if(*P_INT_Ctrl & C_IRQ4_4KHz)//4096
{
IRQ_4++;
if(IRQ_4>=2048)
{
IRQ_4=0;
if(((*P_IOA_Data)&sec5)==0)
{
(*P_IOA_Data)=(*P_IOA_Data)+sec5;
}
else
{
(*P_IOA_Data)=(*P_IOA_Data)-sec5;
}
}
*P_INT_Clear =C_IRQ4_4KHz;
}
//asm("INT IRQ");
}
int main()
{
*P_IOA_Dir = 0x00ff;
*P_IOA_Attrib = 0x00ff;
*P_IOA_Data = 0x0000;
*P_INT_Ctrl = C_IRQ4_2KHz+C_IRQ4_1KHz+C_IRQ4_4KHz;//01110000 开启了IRQ4的三种不同频率的中断
asm("INT IRQ");
while(1)
{
*P_Watchdog_Clear = 0x0001;
}
return 0;
}
- 凌阳16位单片机之IRQ4中断
- 凌阳16位单片机之定时器中断
- 凌阳16位单片机之FIQ中断
- 凌阳16位单片机之FIQ中断
- 凌阳16位单片机之IRQ6中断
- 凌阳16位单片机之外部中断
- 凌阳16位单片机之用时基中断定时
- 单片机之中断
- PIC单片机之中断
- 单片机之中断
- 【51单片机学习过程记录】16 中断之 串口中断的应用2(中断方式)
- PIC单片机之中断程序
- 51单片机之中断 学习心得
- c51单片机上的发送中断标志位
- 单片机定时器/计数器、中断和串口控制位
- 学习笔记之-51单片机中断
- 51单片机之中断的实现过程
- 89C52单片机之流水灯中断
- Java反射 具体需求实现案例二
- Linux的SOCKET编程详解
- 栅栏密码
- Linux下MongoDB实现自动备份脚本
- Java实现简单定时任务
- 凌阳16位单片机之IRQ4中断
- Ubuntu 12.04下搜狗输入法安装
- 使用rsync+inotify配置触发式(实时)远程同步
- Android apk动态加载机制的研究
- Unity3D 打包Bundle
- sqlcommand
- poj题目分析
- SDWebImage使用,图片加载和缓存
- 19、Cocos2dx 3.0游戏开发找小三之Action:流动的水没有形状,漂流的风找不到踪迹、、、