[蓝桥杯单片机]模块学习—定时器

前一段时间的文章已经跟各位一起刷了一部分的客观题了

接下来将会跟大家一起从官方提供的原理图芯片手册出发

练习每个模块的程序编写

因为我学习采用的是模块化编程的思路,函数的定义分散在不同的文件中,所以一般不会放完整代码,只会放对应模块相关的程序并说明其使用方法

学习此部分内容需要有一定的单片机基础,类似软件配置这种不会讲述,不懂的建议先上B站刷一下视频


本人使用的开发板 国信长天CT107D单片机竞赛板(这是今年新版,可能与旧版略有不同,但是程序是通用的)

image-20221105142604208

参考资料:

官网能下载的 赛点资源数据包 里面的资料(比赛时会提供)

以及

《“蓝桥杯”全国软件和信息技术专业人才大赛(电子类)实训指导书》(点这里下载)(比赛时不会提供)


定时器程序设计


理论部分

定时器本质上其实是个计数装置,用于对单片机的机器周期或者外部输入的时钟信号进行计数

当对单片机的机器周期进行计数叫定时器,对外部输入时钟信号进行计数叫计数器

每计一个机器周期或者外部输入时钟信号,计数+1

当计数计到最大数值时就会进入中断去执行某些任务

查看芯片手册

image-20221112165329414

可以看到我们使用的板子的芯片有三个定时器,还能看到每个定时器的模式

其中

  • 16位自动重装载模式
    • 最大计数长度 0xFFFF(即16位二进制全部为1,10进制65535)
    • 计数溢出后会自动重新装载为初始值
    • 中断需手动开启
  • 16位不可重装载模式
    • 最大计数长度 0xFFFF(即16位二进制全部为1,10进制65535)
    • 计数溢出后若没有手动重新设置计数值则停止计数
    • 中断需手动开启
  • 8位自动重装载模式
    • 最大计数长度 0xFF(即8位二进制全部为1,10进制255)
    • 计数溢出后会自动重新装载为初始值
    • 中断需手动开启
  • 不可屏蔽中断的16位自动重装载模式
    • 最大计数长度 0xFFFF(即16位二进制全部为1,10进制65535)
    • 计数溢出后会自动重新装载为初始值
    • 中断需手动开启

一般来说都会使用16位自动重装载模式,因为可以定的时长更长而且不用手动重装载

查询手册还可以知道配置定时器需要的寄存器和作用的详细说明

image-20221112224551608

但是由于在STC的程序下载软件中提供了自动生成的功能,所以这部分可以选择先做到会用

(后面会再出一篇详细讲,这里先讲怎么用)

在STC-ISP中,可以翻到一个定时器计算器

image-20221112230345097

选择对应的时钟频率、定时器时长以及对应的模式,软件会自动生成

一般来说都是选择16位自动重载以及1T时钟(12T太快,定时时长很短,暂时用不上)


程序部分

STC的软件已经帮我们生成好部分了,但是这个只是定时器的初始化函数,我们还需要加上中断来使用

/********************************************************************************
* 函 数 名: Timer0Init
* 函数功能: 定时器0初始化
* 输入参数:无
* 返 回 值:无
* 其    他:定时时长1ms
********************************************************************************/
void Timer0Init(void)		//1毫秒@11.0592MHz
{
	AUXR |= 0x80;		//定时器时钟1T模式
	TMOD &= 0xF0;		//设置定时器模式(16位自动重载)
	TL0 = 0xCD;		//设置定时初始值
	TH0 = 0xD4;		//设置定时初始值
	TF0 = 0;		//清除TF0标志
	TR0 = 1;		//定时器0开始计时
    
    ET0 = 1;        //使能定时器0中断
    EA = 1;         //使能系统中断
}

只需要在初始化函数中加入中断的初始化即可

同时还要搭配上中断回调函数切记使用正确的中断号

/********************************************************************************
* 函 数 名: Timer0_Routine
* 函数功能: 定时器0中断回调函数(模板)
* 输入参数:无
* 返 回 值:无
* 其    他:无
********************************************************************************/
void Timer0_Routine() interrupt 1
{
    static unsigned int timer=0;
    timer++;
    if(timer>500)
    {
        P0 = ~P0;
        P2 = P2 & 0x1F | 0x80; // P27~P25 清零,再定位 Y4C
    	P2 &= 0x1F; // P27~P25 清零
        timer = 0;
    }
    
}

这里实现的是每隔500ms就翻转一次LED

由于定时器定不了500ms那么长,所以需要借助timer这个参数来计数


总结

定时器虽然也简单,但是使用得非常多,下一篇文章将会告诉大家怎么用定时器实现数码管的动态扫描

最最最重要的事,多看芯片手册和原理图


欢迎大家提出问题并指正

觉得有帮助的话,那就点赞、收藏、关注一下吧~~

随缘更新~~

  • 0
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
蓝桥杯单片机定时器小蜜蜂是一个用于学习和实践单片机编程的教学项目。根据引用,在这个项目中,按键等待是一个关键操作,需要将显示时间的模块放在循环中,并且通过定时器中断来控制操作的时间。同时,引用提到LED和数码管的P0口端口被复用,用来记录串口发送的数据和判断按键是否按下。关于蓝桥杯单片机定时器小蜜蜂的具体内容,引用提供了一份目录,其中包括了一些进阶的案例和底层驱动代码的移植与应用。 总结来说,蓝桥杯单片机定时器小蜜蜂是一个教学项目,通过学习它可以了解和练习单片机编程的一些基础和高级操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [蓝桥杯单片机-小蜜蜂老师-工厂灯光控制系统(P15代码)](https://blog.csdn.net/m0_61804419/article/details/129488234)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [备战蓝桥杯单片机倒数第四天 小蜜蜂老师公众号更新内容](https://blog.csdn.net/silver321/article/details/123969400)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NikkoLKR

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值