⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 time-int.txt

📁 该程序利用了定时器1的周期中断功能
💻 TXT
字号:
// 该程序利用了定时器1的周期中断功能,每1ms产生一次中断
#include	"register.h"
//  屏蔽中断程序        
void inline disable() 
{
	asm(" setc INTM");
}
// 开总中断程序
void inline enable()
{
	asm(" clrc INTM"); 
}
// 系统初始化子程序
initial()
{
	asm(" setc	SXM");				// 符号位扩展有效
	asm(" clrc	OVM");				// 累加器中结果正常溢出
	asm(" clrc	CNF");				// B0被配置为数据存储空间
	SCSR1=0x81FE;				// CLKIN=6M,CLKOUT=4CLKIN=24M
	WDCR=0x0E8;				// 不使能看门狗,因为SCSR2中的WDOVERRIDE
		     					// 即WD?の桓次缓蟮娜笔≈滴?,故可以用
		     					// 软件禁止看门狗
	IMR=0x0002;					// 允许INT2中断
	IFR=0x0FFFF;				// 清除全部中断标志,"写1清0"
	WSGR=0X00;					// 禁止所有的等待状态
}
// 定时器1的初始化子程序
int  timer1int()
{
	EVAIMRA=EVAIMRA|0X0080;	// 允许定时器1的周期中断
	EVAIFRA=EVAIFRA&0X0080;	// 清除定时器1周期中断标志
	T1CON=0X160C;				// Timer1为连续增计数模式,预分频值为64,使用内部时钟
	T1PR=0X0177;				// Timer1的周期寄存器的值根据1ms延时和预分频值确定
	T1CNT=0X00;				// Timer1的计数器清零
}
// 定时器1周期中断服务程序
void interrupt T1INT()
{
	int flag;						// 定义一个局部变量
	flag=EVAIFRA&0X0080;
	if(flag!=0x0080)
	{
		enable( );					// 允许总中断
		return;					// 如果不是定时器1周期中断,则直接返回
	}
// 如果是定时器1周期中断定时器1的周期中断,则执行下面的程序
	T1CNT=0X00;				// 定时器1的计数器重新赋0
	EVAIFRA=EVAIFRA&0X0080;	// 清除定时器1周期中断标志,否则以后的中断将被忽略
	enable( );						// 允许总中断,因一进中断服务程序后总中断就自动关闭了
	return;						// 中断返回
}
// 其它优先级的中断服务程序,虽然程序中已经禁止,
// 但可能由于干扰会引起他们的执行,故该中断服务程序无额外操作,直接返回
void	interrupt nothing()
{
	enable( );						// 允许总中断,因一进中断服务程序后总中断就自动关闭了
	return;						// 中断返回
}
// 主程序
main()
{
	disable();						// 初始化时禁止中断
	initial();						// 系统初始化
 	timer1int();					// 定时器1的初始化	
	enable();						// 允许总中断
	T1CON=T1CON|0X0040;		// 启动Timer1
while(1)
{
		;						// 等待中断发生
}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -