单片机学习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什么的没有关系,只要顺着红线看过去即可。

相关推荐
奋斗的牛马1 小时前
FPGA—ZYNQ学习spi(六)
单片机·嵌入式硬件·学习·fpga开发·信息与通信
清风6666662 小时前
基于单片机的智能高温消毒与烘干系统设计
数据库·单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
Jerry丶Li2 小时前
二十四、STM32的DMA
stm32·单片机·嵌入式硬件
辛河5 小时前
单片机.RS485
单片机·嵌入式硬件
SKYDROID云卓小助手5 小时前
无人设备遥控器之数字图传技术
运维·服务器·单片机·嵌入式硬件·fpga开发
Brianna Home5 小时前
边缘智能革命:TinyML赋能微控制器
单片机·嵌入式硬件·物联网·嵌入式实时数据库
芯联智造5 小时前
【stm32协议外设篇】- SU03T 智能语音模块
c语言·开发语言·stm32·单片机·嵌入式硬件
申克Lab6 小时前
STM32 串口线A-B
stm32·单片机·嵌入式硬件
芯联智造7 小时前
【stm32简单外设篇】- HC-SR501 / 人体红外被动红外传感器
c语言·stm32·单片机·嵌入式硬件
_infinite_7 小时前
STM32串口配置
stm32·单片机·嵌入式硬件