完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
☺定时器中断是单片机最重要的一个功能,一开始学的时候遇到了不少的问题,通过不断地学习解决了不少问题,其实学会之后也没有什么。在这里我整理了一下定时器的使用,就用51单片机来举例。像别的STC15等系列的单片机其实原理上差不多的,分享给大家希望能帮助大家。
定时器相关寄存器
1.EA:cpu总中断允许控制位。EA=1,cpu开放中断。
TF1:定时器/计数器T1溢出标志。T1被允许计数以后,从初值开始加1计数。当最高位产生溢出时由硬件置‘1’,此时向CPU请求中断,一直保持到CPU响应中断时,才由硬件清‘0’。(TF1也可以由程序查询清“0”) TR1:定时器T1的运行控制位,该位是由软件置位和清零。当GATE=0,TR1=1时就允许T1开始计数,TR1=0时禁止T1计数。当GATE=1,TR1=1且外部中断1输入位高电平时,才允许T1计数。 TF0:定时器/计数器T0溢出标志。T0被允许计数以后,从初值开始加1计数。当最高位产生溢出时由硬件置‘1’,此时向CPU请求中断,一直保持到CPU响应中断时,才由硬件清‘0’。(TF0也可以由程序查询清“0”) TR0:定时器T0的运行控制位,该位是由软件置位和清零。当GATE=0,TR0=0时就允许T0开始计数,TR0=0时禁止T0计数。当GATE=1,TR0=1且外部中断0输入位高电平时,才允许T0计数。
其中低四位定义定时器/计数器T0,高四位定义定时器/计数器T1。 M0、M1——方式选择功能定时器工作方式介绍 方式0:M1=0,M0=0 ,13位定时器/计数器 方式1:M1=0,M0=1 ,16位定时器/计数器 方式2:M1=1,M0=0 ,8位自动重载定时器 方式3:M1=0,M0=0 ,双8位定时器/计数器 定时器的初始值的计算 首先要明白单片机的机器周期,关于机器周期的介绍如下。 我们以单片机的晶振是12MHz为例,假设你要定时1ms,采用定时器0,方式1时,此时为16位定时,16位最大值为2的16次方,也就是65536。 由于12MHz的单片机其机器周期为1us。由于1ms=1000us。所以初始值的大小x=65536-1000=64536.然后把64536转换成16进制. 该定时器的初始化代码则为: void Time0Init() { TMOD=0X01;//设置定时器0方式为1. TL0 = 0x18; //设置定时初值低四位 TH0 = 0xFC; //设置定时初值高四位 TF0 = 0; TR0 = 1; } 在这里给大家分享一款定时器计算的的小工具。 链接: 百度网盘. 提取码:gtgm 定时器中断的使用。 功能:使用定时器0计数,使led灯每隔一秒反转一次。 原理图: #include"reg51.h" ***it led=P1^0; void Time0Init(); unsigned int tt; int main() { Time0Init(); while(1); } void Time0Init() { TMOD=0X01; TL0 = 0x18; //设置定时初值 TH0 = 0xFC; TF0 = 0; TR0 = 1; ET0=1;//打开定时器中断 EA=1;//打开总中断 } void Time0() interrupt 1 { TL0 = 0x18; //由于定时器工作方式选择的时16位。没有自动重载功能,所以每次溢出之后要手动进行一次初始化。 TH0 = 0xFC; tt++; if(tt==1000) { tt=0; led=~led; } } |
|
|
|
只有小组成员才能发言,加入小组>>
2497 浏览 0 评论
1062浏览 2评论
681浏览 1评论
443浏览 0评论
177浏览 0评论
296浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-11 05:29 , Processed in 0.979116 second(s), Total 48, Slave 40 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号