一、定时器的介绍
51单片机的定时器是51单片机内部自带的,不同型号的51单片机定时器的种类和数量不一致。定时器主要作用就是用来计时或计数,可以通过定时器使CPU同时执行多个事件。
二、51单片机的定时器资源
传统的51单片机有T1和T0两个定时器,但随着发展,单片机的定时器增多,但是新一代的单片机都兼容老一代单片机的定时器。
三、定时器的主要框图
定时器的作用是很大的,他不占用CPU的时间,我们之前用的Delay就是让CPU在那一直等。比如你在写作业,你老妈让你在10点钟解冻肉,这时候你就需要定个闹钟,闹钟到了时间后你就知道立刻得去解冻肉了,解完冻肉后你还是回来写作业,这就是定时器的功能。而Delay是你从你妈让你记得10点解冻肉开始,你就一直在那坐那,主线作业也不做,死等到10点动了去解冻肉。
四、定时器的工作模式
今天我们主要是来使用定时器T0的模式1,16位定时器/计数器。定时器可以用来计时也可以用来计数,我们今天是使用他的计时模块。
五、中断系统
在执行主程序中遇到中断源,直接先解决中断源中的问题,再回到主程序中。中断源也有优先等级之分,高优先级先执行,低优先级后执行。
六、中断资源
我们今天用的传统单片机有的中断,只有5个中断源且只有两个优先级。要注意的是不同的单片机型号中断源的个数也不同。
接下来我们会通过配置与定时器和中断有关的寄存器来完成对电路的控制。
单片机通过配置寄存器来控制内部线路的连接,通过内部线路的连接来完成不同电路,通过不同电路来完成不同功能。
七、完成独立按键控制流水灯流向以及制作LCD时钟
1、独立按键控制流水灯流向
因为我们使用16位定时器,所以我们要配置下面红线经过的寄存器即可。
而我们的中断是从T0中断源开始,我们只需要配置下面红线经过的寄存器即可。
在写代码前我把定时器的TCON寄存器(Timer control)和TMOD寄存器(Timer model)还有中断源寄存器的资源图放在下面,这些在买的单片机手册里面都有。
在了解完关于定时器及中断寄存器后我们就可以来写代码了。为了方便,我直接以模块来说,我们自己写的时候最好是在主程序中写好,测试好再模块化,方便使用。
下面就是配置寄存器的模块化代码。因为我的晶振是11.0592MHZ,所以和UP主的12MHZ配置不一样,但使用还是一样的。
下面我再以UP主的12MHZ晶振再详细的理清一遍思路
配置定时器的代码也可以直接在STC-ISP上复制过来,但是他没有中断寄存器的配置哦
要记得将定时器模式和定时器时钟选对
接着来完成独立按键的模块化,这里提一句,我只截图了.C文件,头文件记得写。
好了,接下来我们完成独立按键控制流水灯的流向即可,我再插一句,作者是现在主函数中写然后模块化,边写边测试,这样能方便你很快知道什么地方错了(如果有错误的话)
2、定时器时钟
有了上面的经验,我们只需要将模块化好的代码粘贴复制即可,当然还需要复制LCD1602模块。
函数别忘了初始化了,下期见。