C8051f020之定时器实验

相信大家经过点灯实验和中断实验,对c8051系列单片机有了一定的了解,目前我们用到的延时函数还不够准确,那么怎么样才能自己手动配置一个准确时间的延时延时函数呢?

我们来看一下定时器的几种工作方式,本次实验我们用的是定时器0

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBATk1hcnNoYWw=,size_20,color_FFFFFF,t_70,g_se,x_16

那么这几种工作方式如何设置呢,下面我们来看一下TMOD寄存器第0-1位

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBATk1hcnNoYWw=,size_20,color_FFFFFF,t_70,g_se,x_16

下面我们来仔细看一下T0的方式0的原理图,方式0与方式1的原理框图一样,那么这张图我们可以看出SYSCLK(系统时钟)可以选择不分频,和可以12分频,通过第一个二选一多路选择器(红色下标1)来选择分频不分频,然后通过第二个多路选择器(红色下标2)来选择采用计数工作模式和定时工作模式,通过控制TMOD寄存器来选择TR0作为允许T0计数的允许位。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBATk1hcnNoYWw=,size_20,color_FFFFFF,t_70,g_se,x_16

然后我们在通过配置TL0和TH0来配置初始值,例如采用16定时器当达到0xffff 时TF0置1,这时候我们可以根据计算,来算出我们初始值的大小,来实现精准定时。

我们用的晶振频率是2MHZ,经过12分频,则计一个数需要的时间T=12/2MHZ,那样我们需要计数多久的话,直接T*计数个数=定时时间,

计数个数=最大值(65535)-初值(装入TH0和TL0的值)

定时最长时间=T*65535

下面我们来看一下配置过程

1.配置分频方式T0M

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBATk1hcnNoYWw=,size_20,color_FFFFFF,t_70,g_se,x_16

 2.配置计数方式

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBATk1hcnNoYWw=,size_20,color_FFFFFF,t_70,g_se,x_16

 3.给定时器装初值

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBATk1hcnNoYWw=,size_20,color_FFFFFF,t_70,g_se,x_16

 4.开启定时器控制TR0

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBATk1hcnNoYWw=,size_20,color_FFFFFF,t_70,g_se,x_16

 下面看一下代码

 

 现在大家肯定有疑问为什么我延时20ms,TH0和TL0设置成        TH0=0xF2; TL0=0xFB;

下面我来带大家一起计算一下,

 下面大家肯定还有疑问为什么我要用

        while(!TF0);
        TF0=0;
        TR0=0;

如果我不加这条while等待语句你可能看到,不管怎么设定初值都会看不到定时20ms的效果,我这个作用就是一直等待计数到达0(65536在来一个时钟)然后TF被置1,然后跳出循环。清除TF0,清楚TR0的目的是为了下次不设定完初值就立马跑,导致出现错误。

这次随堂练习自己写一个定时器中断,每隔30ms触发一次,然后中断服务函数中实现点亮一次led灯

定时器2实验

      1.选择定时器计数方式  

 

 

 2.选择时钟分频

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBATk1hcnNoYWw=,size_20,color_FFFFFF,t_70,g_se,x_16

3.装入初值 

 

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C8051F410定时器程序 //----------------------------------------------------------------------------- // F41x_Timer0_16bitTimer.c //----------------------------------------------------------------------------- // Copyright 2006 Silicon Laboratories, Inc. // http://www.silabs.com // // Program Description: // // This program presents an example of use of the Timer0 of the C8051F41x's in // 16-bit counter/timer mode. It uses the 'F410DK as HW platform. // In this example the LED is toggled at a rate defined by the // LED_TOGGLE_RATE constant.(in milliseconds) // // The timer is set with this values and counts until an overflow when it // generates an interrupt. This interrupt reloads the timer values and toggles // the LED. // // Pinout: // // P2.1 -> LED // // all other port pins unused // // How To Test: // // 1) Open the F41x_Timer0_16bitTimer.c file in the Silicon Labs IDE. // 2) If another rate is required change LED_TOGGLE_RATE (in msec) // 3) Compile the project and download to the device. // 4) Verify the LED pins of J5 are populated on the 'F41x TB. // 5) Run the code. // 6) Check that the LED is blinking at a constant rate . // // // FID: 41X000046 // Target: C8051F41x // Tool chain: KEIL C51 7.20 / KEIL EVAL C51 // Command Line: None // // Release 1.0 // -Initial Revision (CG) // -08 Mar 2006 // //----------------------------------------------------------------------------- // Includes //----------------------------------------------------------------------------- #include // SFR declarations //----------------------------------------------------------------------------- // Global Constants //----------------------------------------------------------------------------- #define SYSCLK 24500000/8 // SYSCLK in Hz (24.5 MHz internal // oscillator / 8) // the internal oscillator has a
C8051F是一款单片机芯片,可以使用中断来进行配置和处理。根据给出的引用内容,可以看出引用给出了一个使用定时器0的中断配置的例子,引用给出了一个使用定时器2的中断配置的例子,并且引用给出了一个中断程序的示例。根据这些信息,可以给出C8051F中断配置的一般步骤: 1. 设置定时器的初值:根据需求设置定时器的初值,可以使用TMRxL和TMRxH寄存器设置定时器的初值,***可以使用ETx寄存器进行配置,例如:ET2=1;。 4. 允许总中断:根据需要允许总中断,可以使用EA寄存器进行配置,例如:EA=1;。 5. 编写中断程序:根据需要编写中断程序,可以参考引用中给出的中断程序示例。 需要注意的是,具体的中断配置步骤可能会因芯片型号和具体需求而有所不同,以上是一个一般的中断配置步骤。另外,还需要根据具体的应用场景和需求进行相应的修改和调整。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [C8051f020定时器实验](https://blog.csdn.net/NMarshal/article/details/123795951)[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^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [c8051f340定时器2中断以及初值设置](https://blog.csdn.net/tcx_123321/article/details/126178367)[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^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值