📄 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 + -