单片机学习7——定时器/计数器编程

cpp 复制代码
#include<reg52.h>
 
unsigned char a, num;
sbit LED1 = P1^0;
 
void main()
{
	num=0;
	EA=1;
	ET0=1;
	//IT0=0;

	//设置TMOD的工作模式
	TMOD=0x01;
	//给定时器装初值,50000,50ms中断20次,就得到1s
	TH0=(65536-50000)/256;
	TL0=(65536-50000)%256;
	
	TR0=1;	// 定时器/计数器启动

	while(1)
	{
		if(20==num)
		{
			num=0;
			LED1=~LED1;	 //取反,也就是闪烁
		}
	}
}
 
//中断服务程序
void ext0() interrupt 1	 // 1 表示的是定时器1
{
    //重新设置预装数值
	TH0=(65536-50000)/256;
	TL0=(65536-50000)%256;
	//循环次数加1
	num++;	
}

初始化程序完成如下工作:

1、对TMOD赋值,以确定T0和T1的工作方式:

我们使用的是定时器/计数器0,那么高4位是0,低4位中GATE=0,C/T位为0,M1和M2的值是01,我们正常采用的是16位定时/计数器。所以各位的值是00000001,十六进制是0x01。

那么:

TMOD=0x01

2、计算初值,将其写入TH0、TL0或TH1、TL1:

TH0=(65536-50000)/ 256;

TL0=(65536-50000)%256;

这个可以得到50ms。

我们在代码中再使用num进行计数循环20次,就得到1s。

3、使用TR0或者TR1置位,启动定时/计数器定时或者计数。

TR0=1

说明:在TCON中,TR0是运行控制位。TR0置1的时候,启动定时/计数器。

4、中断方式时,则对IE进行赋值,开放中断。

EA=1

ET0=1

两个值打开即可,跟IT0什么的没有关系,只要顺着红线看过去即可。

相关推荐
214实验室3 分钟前
STM32串口打印使用printf乱码问题
stm32·单片机·嵌入式硬件
沐欣工作室_lvyiyi21 分钟前
基于单片机的电厂烟道粉尘浓度检测系统(论文+源码)
单片机·嵌入式硬件·毕业设计
Groundwork Explorer1 小时前
异步框架+POLL混合方案应对ESP32 MPY多任务+TCP多连接
python·单片机
d111111111d3 小时前
什么是内存对齐?在STM32上面如何通过编辑器指令来实现内存对齐。
笔记·stm32·单片机·嵌入式硬件·学习·编辑器
bai5459363 小时前
STM32 CuberIDE 中断
stm32·单片机·嵌入式硬件
小叶子来了啊4 小时前
5Arduino 程序结构
单片机·嵌入式硬件
小叶子来了啊4 小时前
1Arduino 简介
单片机·嵌入式硬件
雾岛听风眠5 小时前
电路板维修
单片机·嵌入式硬件
少一倍的优雅5 小时前
hi3863(WS63) 智能小车 (一) 简单介绍
单片机·嵌入式硬件·harmonyos·hi3863
小幽余生不加糖6 小时前
步进电机、有刷直流电机以及无刷直流电机对比
笔记·单片机·嵌入式硬件·学习·能源