y看了郭天祥老师的视频点亮LED后,感慨颇多,于是在今年完成了多函数编写方法的教程。
在高中阶段我是个追求极度完美的人,再解答任何问题我都要追寻最简单的方法,或者是掌握问题本质,直接猜出答案,对,所以y的数理化并不差,但是临场发挥确实限制住了y。无奈与梦想大学失之交臂!
y的心气很高,不服输。于是独身一人去了杭州,进过三年的打拼进入了某大型企业类似于HK。即使是三本院校也无法阻止我前进的脚步!
我今天要写的就是精确控制85c51单片机输出一个方波,波形周期是1s。如果使用延时函数delay的化是非常的模糊,可能延时的是1.056s或者0.989s,这种事是作为一个技术人员所无法容许的。我要做出改变,我要精确控制引脚输出。
首先理解什么是中断。既然是理解那就举个栗子吧。
我要去上班但是在上班途中我买了早点,买早点的这个事就是中断。当然,昨晚我打游戏出了神话装备导致我多玩了一会,导致今天我起晚了,所以没时间买早点必须要尽快赶往公司打卡。这就是说中断是随机的。
中断里面必须含有以下三个条件。
- 中断源中断请求。及
INT0=0(低电平触发)
INT0=1(下降沿触发) - 中断标记位。及
EX0=1 - 中断打开位。及
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
标签:以梦为,定时器,LED,函数,所以,中断,1s,我要 来源: https://blog.csdn.net/qq_43161960/article/details/122760363
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。