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

单片机基础模块学习——定时器

1.利用stc-isp生成代码

选择定时器计算器,将频率改为12mhz,单位为毫秒,定时长度为1

复制下面代码

void Timer0Init(void)		//1毫秒@12.000MHz
{
	AUXR |= 0x80;		//定时器时钟1T模式
	TMOD &= 0xF0;		//设置定时器模式
	TL0 = 0x20;		//设置定时初值
	TH0 = 0xD1;		//设置定时初值
	TF0 = 0;		//清除TF0标志
	TR0 = 1;		//定时器0开始计时
}

2.在数据手册查找中断的查询次序

由下表,定时器0的查询次序为1

3.定时器代码

#include "tim.h"

void Timer0Init(void)		//1毫秒@12.000MHz
{
	AUXR |= 0x80;		//定时器时钟1T模式
	TMOD &= 0xF0;		//设置定时器模式
	TL0 = 0x20;		//设置定时初值
	TH0 = 0xD1;		//设置定时初值
	TF0 = 0;		//清除TF0标志
	TR0 = 1;		//定时器0开始计时
	ET0=1;			//定时器0中断开关
}

主函数对定时器的应用

#include "tim.h"
#include "init.h"
#include "led.h"
//每一个变量前都标注类型,方便根据名字判断变量类型
//timer
unsigned long ulms=0;
unsigned int uiLed_Dly=0;
//led
unsigned char ucLed=0x00;

void Led_Proc(void);

void main(void)
{
	Cls_Peripheral();
	Timer0Init();
	EA=1;//中断总开关
	while(1)
	{
		Led_Proc();
	}
}
void Led_Proc(void)
{
	if(uiLed_Dly<200)
		return;
	uiLed_Dly=0;
	ucLed ^=0X01;// 0000 0001异或:与零不变,与一取反
	Led_Disp(ucLed);
}

//中断服务函数
void Time_0(void) interrupt 1
{
	ulms++;
	uiLed_Dly++;
}


http://www.kler.cn/a/514932.html

相关文章:

  • ubuntu20.04有亮度调节条但是调节时亮度不变
  • CentOS 7乱码问题如何解决?
  • manim(manimgl)安装教学-win11(2024-08)
  • 媒体新闻发稿价格怎么算?移动端发稿价格低的原因有哪些?
  • pthread_exit函数
  • vue2 - Day05 - VueX
  • Java菜鸟养成计划(java基础)--java运算符
  • import.meta.globEager详解
  • k8s基础(7)—Kubernetes-Secret
  • YOLOv10改进 | YOLOv10引入AKConv(轻量)
  • YOLO 安装 并且命令行指定配置文件
  • 文件快递柜:匿名口令分享工具,轻松安全地存取文本与文件
  • Centos 修改历史读录( HISTSIZE)
  • 力扣-数组-414 第三大的数
  • 蓝桥杯备考:红黑树与map和set
  • 【Block总结】PConv风车卷积,更大的感受野,提高特征提取能力|即插即用
  • K8S中Service详解(一)
  • gesp(C++五级)(14)洛谷:B4071:[GESP202412 五级] 武器强化
  • docker安装elk6.7.1-搜集nginx-json日志
  • docker安装elk6.7.1-搜集java日志
  • SparkSQL函数综合实践
  • jinja2.exceptions.UndefinedError: ‘enumerate‘ is undefined
  • 汽车OEMs一般出于什么目的来自定义Autosar CP一些内容
  • 2501,进度控件
  • Unity3D项目开发中的资源加密详解
  • jenkins-pipeline 动态生成参数