|
/*将cpu从掉电模式唤醒,并且产生中断处理,中断中绿灯亮灭,
唤醒的主函数中黄灯亮灭*/
/*问题:如果去掉while(1)中的led_y()这个函数中断正常,如果加上就中断似乎只能进去一次。而且黄灯也不闪了,谁能帮忙看看啊,程序还有protues模拟图都有呢*/
#include "config.h"
#define LED_YELLOW 7
#define LED_BLUE 8
int delay(unsigned int i)
{
unsigned int k;
for(;i;i--)
{
for(k=0;k<65500;k++);
}
return 0;
}
int LED_Y(void)
{
IO0SET |= (1<<LED_YELLOW);
delay(20);
IO0CLR |= (1<<LED_YELLOW);
delay(20);
return 0;
}
int LED_B(void)
{
IO0SET |= (1<<LED_BLUE);
delay(20);
IO0CLR |= (1<<LED_BLUE);
delay(20);
return 0;
}
int int0_fun(void)
{
EXTINT |= 0X01; //中断标志清空
VICVectAddr =0; //硬件中断复位
LED_B();
return 0;
}
int VIC_init(void)
{
VICIntSelect = 0x00000000;
VICVectCntl0 = 0x20|14; //外部中断0添到控制0中,irq中优先级最高
VICVectAddr0 = (unsigned int)int0_fun; //中断处理函数关联
VICIntEnable = 1<<14; //使能中断处理
return 0;
}
int main(void)
{
PINSEL0 = 0X0000000C; //使能外部中断0
IO0DIR = (1<<LED_BLUE)|(1<<LED_YELLOW);//控制口作为输出
EXTMODE = 0X01; //边沿触发
EXTPOLAR= 0X00; //下降沿触发
VIC_init();
IRQEnable(); //使能向量中断
// INTWAKE = 0X01; //外部中断0唤醒
// PCON = 0X02; //进入掉电模式
while(1)
{
LED_Y();
// PCON = 0X02; //进入掉电模式
}
return 0;
}
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
阿莫论坛20周年了!感谢大家的支持与爱护!!
曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
|