当前位置: 首页 > news >正文

17:定时器编程实战

1、实验目的

(1)使用定时器来完成LED闪烁
(2)原来实现闪烁时中间的延迟是用delay函数实现的,在delay的过程中CPU要一直耗在这里不能去做别的事情。这是之前的缺点
(3)本节用定时器来定一个时间(譬如0.3s),在这个定时器定时时间内CPU还可以去做主任务,定时时间到产生中断,在中断处理程序isr中让LED闪烁即可。

如何编程:
(1)定时(timer初始化)
(2)主程序该干嘛干嘛
(3)中断处理程序

我们开发板的定时器最多能订多长时间?
内部时钟频率是1MHz,时钟周期是1us。最多能定65535(16位定时器),也就是说最大定时时间为65535*1us=65535us=65.535ms。
如果要定比较长的时间(譬如2s),定时器直接是不能满足的,解决办法是多次定时后加起来构成一个长时间。

我们使用定时器T0工作时
计算TL0和TH0:
(1)确定自己定时时间,定为50ms
(2)确定内部时钟周期,因为12T模式,外部晶振12MHz,所以为:1us
(3)定时个数就是:50ms/1us = 50000
(4)TL0 = 50000 % 256, TH0 = 50000 / 256

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

#include <REGX51.H>
#define  SMG P0
sbit LED = P1^0;unsigned char count;/****定时到时执行的中断程序****/
void DingShi() interrupt 1
{/*每一次定时到后都要重置脉冲个数,以便进行第二次定时*/TL0 = 0XB0;             //低8位为1011 0000TH0 = 0X3C;             //高8位为0011 1100if(count-- == 0)           //这里相当于50ms*20=1000ms(1s){count = 20;LED = !LED;}
}void delay(void)//延迟函数
{unsigned char a,b;for(a=200 ;a>0 ;a--)for(b=200 ;b>0 ;b--);
}void main(void)
{unsigned char i;TMOD = 0X01;            //0000 0001 使用的是T0定时器,工作模式是16位定时器/****设置脉冲个数位50000个,既为50ms****,65536-50000=15536*/TL0 = 0XB0;             //低8位为1011 0000TH0 = 0X3C;             //高8位为0011 1100TR0 = 1;                //计数器,开始计数ET0 = 1;			    //开启T0中断EA = 1;                 //开启中断总开关count = 20;while(1)//执行主任务{unsigned char val[16] = {0xc0, 0xf9, 0xa4, 0xb0,0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0x88, 0x83, 0xc6, 0xa1, 0x86, 0x8e};//0到F的数码表	for(i=0 ;i<=15 ;i++){SMG = val[i];delay();}}
}

上面程序结果是静态数码管不断的重复显示0到F,而LED1每隔1秒亮灭一次。

http://www.lryc.cn/news/296615.html

相关文章:

  • Fink CDC数据同步(五)Kafka数据同步Hive
  • ubuntu原始套接字多线程负载均衡
  • leetcode (算法)66.加一(python版)
  • DataX源码分析 TaskGroupContainer
  • 2024年华为OD机试真题-螺旋数字矩阵-Java-OD统一考试(C卷)
  • 红队打靶练习:PHOTOGRAPHER: 1
  • 【Linux】网络诊断 traceroute命令详解
  • c#cad 创建-圆(二)
  • 面试高频知识点:2线程 2.1.5如何自定义实现一个线程池
  • 【stm32】hal库学习笔记-ADC模数转换(超详细)
  • 蓝桥杯基础知识6 pair
  • 后端返回给前端的数据格式有哪些?
  • Transformer的PyTorch实现之若干问题探讨(一)
  • 系统参数SystemParameters.MinimumHorizontalDragDistance
  • 平屋顶安装光伏需要注意哪些事项?
  • 《Git 简易速速上手小册》第7章:处理大型项目(2024 最新版)
  • 从0开始学Docker ---Docker安装教程
  • 嵌入式学习之Linux入门篇笔记——15,Linux编写第一个自己的命令
  • 【C语言】SYSCALL_DEFINE3(socket, int, family, int, type, int, protocol)
  • C++实现鼠标点击和获取鼠标位置(编译环境visual studio 2022)
  • Matplotlib绘制炫酷散点图:从二维到三维,再到散点图矩阵的完整指南与实战【第58篇—python:Matplotlib绘制炫酷散点图】
  • Docker-Learn(一)使用Dockerfile创建Docker镜像
  • 问题:银行账号建立以后,一般需要维护哪些设置,不包括() #学习方法#经验分享
  • 教授LLM思考和行动:ReAct提示词工程
  • FPGA_工程_按键控制的基于Rom数码管显示
  • WordPress Plugin HTML5 Video Player SQL注入漏洞复现(CVE-2024-1061)
  • 【Kotlin】Kotlin基本数据类型
  • UDP端口探活的那些细节
  • 拦截器配置,FeignClient根据业务规则实现微服务动态路由
  • 预测模型:MATLAB线性回归