📄 led.c
字号:
#include "2407c.h"
#define T1MS 0x9c3f /* 9c3fH=40000-1 */
void interrupt gptime1(void); /* 中断服务程序,定时器计数T1MS次时中断调用 */
void gp_init(void); /* 定时器初始化 */
unsigned int uWork,nCount;
int * pf;
main()
{
int i;
nCount=0;
pf=0000;
for(i=0;i<0xfff0;i++)
{
*pf=i;
}
asm(" setc INTM"); /* 关中断,进行关键设置时不允许发生中断,以免干扰 */
*WDCR=0x6f;
*WDKEY=0x5555;
*WDKEY=0xaaaa; /* 关闭看门狗中断 */
*SCSR1=0x81fe; /* 设置DSP运行频率40m */
(*MCRB)=0;
uWork=(*MCRC); /* 将PWM12/IOPE6设置成通用I/O口,以控制实验箱上指示灯 */
uWork&=0x0ffbf;
(*MCRC)=uWork;
gp_init(); /* 设置定时器 */
*IMR=0x2; /* 使能定时器中断(INT2) */
*IFR=0xffff; /* 清除中断标志 */
asm(" clrc INTM"); /* 开中断 */
}
// 中断服务程序:响应INT2中断
void interrupt gptime1(void) /* 中断服务程序定义,须使用interrupt声 */
{
uWork=(*PIVR); /* 读外设中断向量寄存器*/
switch(uWork)
{
case 0x27: /* T1PINT,0x27为定时器1的周期中断的向量值 */
{
(*EVAIFRA)=0x80; /* 清除中断标志T1PINT */
nCount++;
if ( nCount>=500 ) /* 计数500此=500ms=0.5秒*/
{
uWork=(*PEDATDIR); /* 设置指示灯状态翻转一次 */
uWork|=0x4000;
uWork^=0x0040;
(*PEDATDIR)=uWork;
nCount=0;
}
break;
}
}
}
void gp_init(void)
{
*EVAIMRA = 0x80; /* 使能T1PINT即通用定时器1周期中断 */
*EVAIFRA = 0xffff; /* 清除中断标志 */
*GPTCONA = 0x0000;
*T1PR = T1MS; /* 周期寄存器=40000 */
*T1CNT = 0; /* 计数初值=0 */
*T1CON = 0x1040; /* 启动计数器 */
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -