📄 ev_time1_1ms.c
字号:
//测试功能:定时器1发生1ms周期中断后,进入中断服务程序使LED DS1亮灭(间隔2秒)
#include "ioreg.h"
unsigned int wait_ms( volatile unsigned int delay_val );
void inline disable()
{
asm(" setc INTM");
}
void inline enable()
{
asm(" clrc INTM");
}
initial()
{
asm(" setc SXM");
asm(" clrc OVM");
asm(" clrc CNF");
SCSR1 = 0x81fe; //CLKIN=15MHz , CLKOUT=4*CLKIN=60MHz
WDCR = 0X0e8;
IMR = 0x0002;
IFR = 0x0ffff;
WSGR = 0x00;
}
int timer1int()
{
EVAIMRA = EVAIMRA|0x0080;
EVAIFRA = EVAIFRA&0x0080;
/* EVAIFRA = EVAIFRA|0x0080; */
T1CON = 0x160c;
T1PR = 0x03a8; // T1PR=(1/1000)/(1*64/60/1000000)-1=936=0x3a8
T1CNT = 0x00;
}
void interrupt T1INT()
{
int flag;
flag = EVAIFRA&0x0080;
if(flag!=0x0080)
{
enable();
return;
}
MCRB=MCRB&0xFF00;
PCDATDIR=PCDATDIR|0x0FF00;
PCDATDIR=PCDATDIR&0x0FF00;
PCDATDIR=PCDATDIR|0x0001; //DS1点亮
wait_ms(1000);
PCDATDIR=PCDATDIR&0x0FF00; //DS1熄灭
wait_ms(1000);
T1CNT = 0x00;
EVAIFRA = EVAIFRA&0x0080;
enable();
return;
}
void interrupt nothing()
{
enable();
return;
}
main()
{
disable();
initial();
timer1int();
enable();
T1CON = T1CON|0x0040;
while(1)
{
;
}
}
/* #define MS_TIME_LOOP */
#define MS_TIME_LOOP 0x500
unsigned int wait_ms( volatile unsigned int delay_val )
{
unsigned int i;
/* unsigned int ms_ctr; */
int ms_ctr;
for ( i = 0; i < delay_val; i++ )
{
ms_ctr = MS_TIME_LOOP;
while ( ms_ctr )
{
ms_ctr--;
}
}
return( delay_val );
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -