我写的C程序:希望在执行中断后将IOPF6脚的小灯点亮,MAIN中是暗的,执行中断亮:
#include \"f2407regs.h\"
#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>
#include <math.h>
#include <string.h>
#define uint unsigned int
void main(void)
{
asm(\" setc INTM \"
;
asm (\" clrc CNF \"
; /*映射数据存储空间*/
asm (\" clrc OVM \"
; /*累加器中结果正常溢出*/
asm (\" setc SXM \"); /*抑制符号扩展*/
*SCSR1 = 0x0001; /*clkout输出CPU时钟,进入IDLE1低功耗模式
不倍频,关断ADC,无效地址复位*/
*WDCR = 0X0E8; /*WDOVERRIDE默认为1,禁止看门狗*/
*IMR = 0X0004;
*IFR = 0Xffff; /*清除所有中断标志*/
*T1CON = 0X974c; /*0001011000001100,t1连续增计数,64分频,内部时钟*/
*T1CNT = 0X00;
*MCRC = *MCRC & 0xbfff;
*PFDATDIR = *PFDATDIR | 0x4000;
*PFDATDIR = *PFDATDIR & 0xffbf;
asm(\" clrc INTM \");
while(1)
{
;
}
}
void interrupt T1INT()
{volatile int flag,i;
*T1CNT = 0X00;
*MCRC = *MCRC & 0xbfff;
*PFDATDIR = *PFDATDIR | 0x4040;
asm(\" setc INTM \");
flag = *EVAIFRA & 0X0400;
if (flag != 0x0400)
{
asm(\" clrc INTM \");
return;
}
*EVAIFRA = *EVAIFRA | 0Xffff; /*清定时器1上溢中断标志*/
i++;
*MCRC = *MCRC & 0xbfff;
*PFDATDIR = *PFDATDIR | 0x4040;
if(i==7)
{i=0;
*MCRC = *MCRC & 0xbfff;
*PFDATDIR = *PFDATDIR | 0x4040;
}
}
void interrupt nothing()
{
return;
}
以下是中断向量程序:
.title \"vectors.asm\"
.ref _c_int0,_nothing,_T1INT
.sect \".vectors\"
rsvect: B _c_int0
INT1: B _nothing
INT2: B _T1INT
INT3: B _nothing
INT4: B _nothing
INT5: B _nothing
INT6: B _nothing
为什么实现不了呢?我试了,MAIN中没什么问题,就是好像不进中断,在就是请大虾看看我在中断中的FOR语句延时1S那么写对吧?
谢谢