?? led.c
字號:
#include "2407c.h"
#define T1MS 0x9c3f /* 9c3fH=40000-1 */
void interrupt gptime1(void); /* 中斷服務(wù)程序,定時器計數(shù)T1MS次時中斷調(diào)用 */
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"); /* 關(guān)中斷,進(jìn)行關(guān)鍵設(shè)置時不允許發(fā)生中斷,以免干擾 */
*WDCR=0x6f;
*WDKEY=0x5555;
*WDKEY=0xaaaa; /* 關(guān)閉看門狗中斷 */
*SCSR1=0x81fe; /* 設(shè)置DSP運(yùn)行頻率40m */
(*MCRB)=0;
uWork=(*MCRC); /* 將PWM12/IOPE6設(shè)置成通用I/O口,以控制實(shí)驗(yàn)箱上指示燈 */
uWork&=0x0ffbf;
(*MCRC)=uWork;
gp_init(); /* 設(shè)置定時器 */
*IMR=0x2; /* 使能定時器中斷(INT2) */
*IFR=0xffff; /* 清除中斷標(biāo)志 */
asm(" clrc INTM"); /* 開中斷 */
}
// 中斷服務(wù)程序:響應(yīng)INT2中斷
void interrupt gptime1(void) /* 中斷服務(wù)程序定義,須使用interrupt聲 */
{
uWork=(*PIVR); /* 讀外設(shè)中斷向量寄存器*/
switch(uWork)
{
case 0x27: /* T1PINT,0x27為定時器1的周期中斷的向量值 */
{
(*EVAIFRA)=0x80; /* 清除中斷標(biāo)志T1PINT */
nCount++;
if ( nCount>=500 ) /* 計數(shù)500此=500ms=0.5秒*/
{
uWork=(*PEDATDIR); /* 設(shè)置指示燈狀態(tài)翻轉(zhuǎn)一次 */
uWork|=0x4000;
uWork^=0x0040;
(*PEDATDIR)=uWork;
nCount=0;
}
break;
}
}
}
void gp_init(void)
{
*EVAIMRA = 0x80; /* 使能T1PINT即通用定時器1周期中斷 */
*EVAIFRA = 0xffff; /* 清除中斷標(biāo)志 */
*GPTCONA = 0x0000;
*T1PR = T1MS; /* 周期寄存器=40000 */
*T1CNT = 0; /* 計數(shù)初值=0 */
*T1CON = 0x1040; /* 啟動計數(shù)器 */
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -