C/C++教程

以梦为马之89c51单片机精确1s时间LED灯闪烁(中断技术+定时/计数器技术)

本文主要是介绍以梦为马之89c51单片机精确1s时间LED灯闪烁(中断技术+定时/计数器技术),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

y看了郭天祥老师的视频点亮LED后,感慨颇多,于是在今年完成了多函数编写方法的教程。
在高中阶段我是个追求极度完美的人,再解答任何问题我都要追寻最简单的方法,或者是掌握问题本质,直接猜出答案,对,所以y的数理化并不差,但是临场发挥确实限制住了y。无奈与梦想大学失之交臂!
y的心气很高,不服输。于是独身一人去了杭州,进过三年的打拼进入了某大型企业类似于HK。即使是三本院校也无法阻止我前进的脚步!
我今天要写的就是精确控制85c51单片机输出一个方波,波形周期是1s。如果使用延时函数delay的化是非常的模糊,可能延时的是1.056s或者0.989s,这种事是作为一个技术人员所无法容许的。我要做出改变,我要精确控制引脚输出。
首先理解什么是中断。既然是理解那就举个栗子吧。
我要去上班但是在上班途中我买了早点,买早点的这个事就是中断。当然,昨晚我打游戏出了神话装备导致我多玩了一会,导致今天我起晚了,所以没时间买早点必须要尽快赶往公司打卡。这就是说中断是随机的。
中断里面必须含有以下三个条件。

  1. 中断源中断请求。及
    INT0=0(低电平触发)
    INT0=1(下降沿触发)
  2. 中断标记位。及
    EX0=1
  3. 中断打开位。及
    EA=1
    那么我们从实际出发吧。先写个中断函数。
    在这里插入图片描述

中断函数的写法是void 函数名() interrupt 中断编号。
其中中断编号是0、1、2、3、4。
外部中断(INT0)0是0。
定时器中断0(T0)是1。
外部中断1(INT1)是2。
定时器中断(T1)1是3。
串口中断(TX/RX)是4
此时我们使用的是定时器触发所以选择1或者3,依据优先级选择1。
创建时间配置函数,这个函数主要的目的是用来初始化定时器的。

在这里插入图片描述
先理解参数首先是定时器的工作方式
因为我要延迟1s所以我要准备两个定时器。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

因为要选择16位定时器计数器所以选择方式1,而且只用一个定时器所以
TMOD=0x01 // 00000001

设备的定时器和晶振频率有关,因为我的机器使用的晶振不是11.0592MHZ而是12MHZ所以
使用公式:
定时时间(T)
在这里插入图片描述
应为要延迟1s,又因为1s=50ms*20次,所以完成if函数
在这里插入图片描述
在定时器中实现i++;
在这里插入图片描述

那么50ms如何设置TH0和TL0的初始值呢?,当然要用我们的ISP软件啦!
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

依据上图所以
EA=1
ET0=1
TR0=1

在这里插入图片描述
在这里插入图片描述
确确实实是1s一闪烁,什么for循环还要在那不停的调试真的很麻烦!
函数截图
在这里插入图片描述
在这里插入图片描述
程序下载地址

https://download.csdn.net/download/qq_43161960/79140301
这篇关于以梦为马之89c51单片机精确1s时间LED灯闪烁(中断技术+定时/计数器技术)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!