?? timer.c
字號:
//循環接收
#include "c2407A.h"
unsigned int uWork,nCount;
void Initial()
{
asm(" setc INTM") ; //INTM = 1 , 禁止中斷
asm(" setc SXM") ; //SXM = 1 , 符號擴展位使能
asm(" clrc OVM") ; //OVM = 0 , 累加器中結果正常溢出
asm(" clrc CNF") ; //CNF = 0 , 雙口RAM區B0被映射到數據存儲空間
*IMR=0x0002 ; //INT2中斷允許
*IFR=0xFFFF ; //清除所有的INTFlag
*SCSR1=0x81EF; //CLIKN=10M, CLKOUT=40M
*WDCR=0xE8; //看門狗
}
void timer1init()
{
*EVAIMRA=*EVAIMRA|0x0080;//7位置1,其他位清零:通用定時器1周期中斷使能
*EVAIFRA=*EVAIFRA&0x0080;//7位為1時將其復位,為0時不管
*GPTCONA = 0x0000;
*T1CON=0x160C; //連續增計數,64分頻,使用北部時鐘
*T1PR=0x0271; //計數周期為1Ms,40000000/64=625000,0x271=625
*T1CNT=0x00; //計數器清零
}
void inline disable() //中斷子程序
{
asm(" setc INTM ");
}
void inline enable() //使能中斷子程序
{
asm(" clrc INTM") ;
}
//假中斷程序
void interrupt nothing()
{
return;
}
void interrupt timer1a()
{
unsigned int flag;
flag=*PIVR;
switch(flag)
{
case 0x27:
{
(*EVAIFRA)=0x80;//7位為1時將其復位,為0時不管
nCount++;
if(nCount>=200)
{
uWork=*PBDATDIR;
uWork^=0x0080;
*PBDATDIR=uWork;
nCount=0;
}
break;
}
}
}
void main()
{
Initial();
timer1init();
nCount=0;
uWork=*MCRA;
uWork&=0x00FF;
*MCRA=uWork; //IOPB配置為普通IO
uWork=*PBDATDIR;
uWork|=0x8000;
*PBDATDIR=uWork; //IOPB7配置為輸出
enable();
*T1CON=*T1CON|0x0040; //啟動Timer1
while(1){}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -