【proteus仿真】定时器0中断实验

本文详细介绍了如何在C语言中利用REGX51.H库和定时器0(Timer0)实现1秒定时,并通过中断函数和静态变量确保计数的连续性。通过设置中断,当计数达到1000时,LED1的状态会切换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <REGX51.H>
sbit LED1=P2^0;
void delay(unsigned int ten_s)
{
	while(ten_s--);
}
void inittime0(void)
{
	TMOD=0x01;//选择为定时器0模式,工作方式1
	TH0=0xFC;//初值=65536-1000=64536=FC18H,定时1ms
	TL0=0x18;
	ET0=1;//打开定时器0中断允许
	EA=1;//打开总中断
	TR0=1;//打开定时器
}
void main()
{
	inittime0();
	while(1)
	{
	
	}
}
void time0() interrupt 1//定时器0中断函数
{
	static unsigned int i;
	TH0=0xFC; //初值=65536-1000=64536=FC18H,定时1ms
	TL0=0x18;
	i++;
	if(i==1000)
	{
		i=0;
		LED1=!LED1;
	}
}

使用static关键字将i定义为静态变量:我们希望每次进入中断函数时,i保存的是上次累加值,使用了static关键字,就可以让变量实现这种功能,即不会每次进入中断函数后被初始化为0。假如去掉static,那么变量i就是一个局部变量,每次进入中断时,变量i的初始值都是0,也就是说它的值永远也不会递增到1000,从而实现不了1s的定时。 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值