2. STC15控制LED--延时闪烁&定时闪烁

1. 延时函数控制

1.1 查看原理图

在这里插入图片描述
查看原理图发现,led灯(D1)需要给高电平才会亮,其引脚是P3.4

1.2 软件编程

1.2.1 方法1 --位操作取反

因为#include <stc15.h>头文件已将所有寄存器全部封装好,可通过右击头文件进行寄存器封装查看
在这里插入图片描述在这里插入图片描述

/* 
		* @name Delay_ms
		* @brief 毫秒延时函数
		* @param ms -> ÑÓʱµÄʱ¼ä
		* @retval None
*/
static void Delay_ms(unsigned int ms)
{
	unsigned int i, j;
	for(i = 0; i < ms; i++)
		for(j = 0; j < 990; j++);
}
int main()
{
// .....
	while(1)
	{
		Delay_ms(1000); 
		P34 = ~ P34; //取反指示灯
	}
}

1.2.2 方法2 – 位操作 赋值
while(1)
{
	Delay_ms(1000);
	P35 = 1;  //亮
	Delay_ms(1000);
	P35 = 0; //灭
}
1.2.3 方法3-- 位与或赋值
while(1)
{
		Delay_ms(1000);
		P3 |= 0x10; //0001 0000 第4位为置1
		Delay_ms(1000);
		P3 &= 0xef; //1110 1111 第4位清0
}
1.2.4 方法4-- 移位 位与或赋值
while(1)
{
	Delay_ms(1000);
	P3 |= (0x1 << 4 );  //和方法3类似
	Delay_ms(1000);
	P3 &= ( ~ ( 0x1 << 4 ));
}

2. 定时器延时控制

2.1 定时器工作原理

定时器/计数器原理详见各芯片手册,本章针对STC15的16位自动重装模式进行讲解
在这里插入图片描述

  1. SYSclk顾名思义表示系统时钟
  2. 序号2表示对系统时钟的分频选择,可以不分频,或者进行12分频,由T0x12进行控制
  3. 序号3是定时器和计数器的选择,C(count 计数器),T(timer 定时器),由C/T位进行控制
  4. 序号4,可进行定时值得设置。寄存器RL_TH0/1是隐藏寄存器,和TH0/1地址相同,对TH0/1写入的内容可以同事写进RL_TH0/1
  5. TF0看图可知表示中断触发。
  6. 自动重装,当TH0/1减至0后,触发中断,RL_TH0/1自动重新将定时值写入TH0/1寄存器。
    ** 工作流程**: 通过寄存器配置定时器的工作模式设定定时值。定时器启动后,定时器在时钟源的驱动下累加计数,当计数值溢出时,中断标志位TF0置位,触发定时器中断,此时可以重新设定时值或自动重装定时值,重新计数,周而复始。 如果定时器中断开启了,CPU会停下手头的工作,转而去运行定时器中断函数,中断函数运行完之后,CPU继续干手头的工作。

2.2 什么是中断

主循环 -> 码农A撸代码
手机铃声 -> 中断标志位
接听电话 -> 中断处理
中断返回 - >码农A继续撸代码

2.3 定时器初始化代码

可通过STC-ISP烧录软件直接生成定时器初始化代码
在这里插入图片描述
在这里插入图片描述

void Timer0Init(void)		//10毫秒@11.0592MHz
{
	AUXR &= 0x7F;		//定时器时钟12T模式
	//由上定时器时序图可知,12分频需要AUXR 的bit7=0 
	TMOD &= 0xF0;		//设置定时器模式
	//由时序图+TMOD功能描述可知,[3:0] = 0x0
	TL0 = 0x00;		//设置定时初值
	TH0 = 0xDC;		//设置定时初值
	//初始值是0xDC00 
	//(f/12) / (65535 - 0xDC00 ) = 定时时长
	TF0 = 0;		//清除TF0标志
	//中断标志初始为0 有中断置1
	TR0 = 1;		//定时器0开始计时
	//由时序图可知,TR0 = 1才有可能是control闭合,定时才能打开
}

2.4 中断初始化

在这里插入图片描述
由中断结构图可知,定时中断0工作需要闭合ET0 和总中断EA

static void IE_Init()
{
	ET0 = 1; //定时器0中断
	EA = 1; //总中断
}
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值