定时器中断的一些小问题理解(自我记录)

刚刚学完计时器兴奋的不得了,那就赶紧写个最常见的计时器压压惊。当上手代码发现自己竟然忘了数码管怎么用的了(狗头),不管了不管了对着原理图一顿操作。en? ,那个那个60进制的时间表示用动态数码管怎么实现呢,是不是要用两个中断,就当我想要寻求大佬的时候我负隅顽抗了一下,从9到0的一个倒计时我总能写出来吧,果真我真的行。
上代码`

# include <reg51.h>
typedef unsigned  long u16;
typedef unsigned char u8;
u8 num[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; 
sbit L1= P2^2;
sbit L2= P2^3;
sbit L3= P2^4;
u16 a=9;
void InitTimer0(void)//1ms 
{
    TMOD = 0x01;
    TH0 = 0xFC;
    TL0 = 0x18;
    EA = 1;
    ET0 = 1;
    TR0 = 1;
}
void shumaguan()
{
	L1=0;
	L2=0;
	L3=0;
	P0 = num[a];
}
void main ()
{
	InitTimer0(); 
	while(1);
 } 
 
 void zhongduan () interrupt 1
 {
    static i=0;
 	TH0 = 0xFC;
    TL0 = 0x18;
    i++;
    if(i==1000){ 
    	i=0; 
		if(a==0){
		while(1);
	}
		a--; 
		shumaguan();
	}
 }

果真啊,男人怎么能不行呢,我看着我的杰作满满自得。但是。。。。。。。。
中断函数就一个他是怎么重复执行的呢???

n hours later:

void InitTimer0(void) 我认为这个玩意不能用c语言中简单的函数来处理,和要结合单片机中的硬件来理解,这个函数启动了单片机中的计数的硬件,就如一个机器人往一个缸里倒水,是什么时候水真的满了,然后就会启动中断,而在中断这呢他又把机器人辛辛苦苦装满的水又给他倒到了一开始的水平,可怜的机器人只能重新来过,然后我们就利用这一个过程不断的循环来计时。
然后呢我就想既然如此那么要while(1);这条语句有什么用呢,我就放心的把它删了,结果小灯不亮了,呵呵我又陷入沉思难不成机器人是在这个while中动的??

while(1);到底是干什么的啊啊啊啊。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

おもいね

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值