首页 > 鉴赏 > 问答 > iw500705计时怎么用,如何实现51单片机触发定时功能

iw500705计时怎么用,如何实现51单片机触发定时功能

来源:整理 时间:2024-02-02 05:15:18 编辑:手表大全 手机版

本文目录一览

1,如何实现51单片机触发定时功能

就是有脉冲信号来的时候,触发定时器工作,开始倒计时,倒计时完后不循环,仅仅是重置定时器,等待下一个脉冲触发。定时器的编写有行命令是SETBTR0,意思是启动定时器0,现在不需要这样启动,直接用电信号脉冲启动。
方法有很多种: 1.用外部中断,当外部中断检测到脉冲信号时打开定时器中断并配置初值,计时,定时器中断触发后,关闭计时。这种方法占用了两个中断源,浪费。 2.仅用计时器中断,首先配置一个脉冲信号扫描时间间隔,开启中断、计时,每当计时器中断触发时,抽样脉冲信号,抽样值非倒计时信号则重新配置扫描时间间隔,若抽样值是倒计时信号,配置倒计时时间间隔,当倒计时完毕后,触发中断,重新配置为扫描时间间隔。

如何实现51单片机触发定时功能

2,51单片机的定时器计时怎样计算

51但单片机的定时,要先计算,然后根据要求编写程序,计算会用到公式: t=Tc×(2L-TC)=12/f×(2L-TC) t是定时时间 Tc是机器周期 fs是晶振频率 L是计数器的长度 对于T0,T1有下面三种方式: 方式0:L=13 方式1:L=16 方式2:L=8 对于T2:L=16 然后剩下的就是按照算出的常数编写程序了,就靠你自己了。。。。
给你个软件,
TMOD=0x01; TH0=(65536-50000)/256;//定时50毫秒 TL0=(65536-50000)%256;//定时50毫秒 TR0=1;

51单片机的定时器计时怎样计算

3,如何利用51单片机实现一个计时器

方法一:用定时器中断计时模式循环计时。方法二:用CPU消耗时钟周期指令计时(浪费资源)。思路:用定时器中断计时,溢出时形成中断信号,标识为一个基本周期t,所定时间T/t=n为周期循环数,到时形成定时触发信号。
用定时器,跟据振荡器设定好初值,知道每一次中断的时间,然后用一个寄存器计数,相乘后得到1S的定时,如果要用到分,时的话就再加寄存器计数即可。
定时,然后找个变量,让它定时达到后自加一就可以了啊
以前做飞思卡尔的比赛时,做过一个计时器,但是现在只有hex文件了。好像用的stc89c2051单片机,也是激光对管,可以连续测量时间。呵呵!四位数码管是用595驱动的。
定时中断.dhd_Specter 说的对。具体电路和程序很多的,你在百度里随便搜下51定时中断应用,特别多。51现在是很成熟应用啦,资料特特特别的多。要自己学会学习和找资料。加油!

如何利用51单片机实现一个计时器

4,51单片机怎么实现计时

嘿嘿 还是让俺来帮你解决吧1 关于定时器定时时间的计算问题: 如果使用的是12M晶振计算,指令周期1uS,定时器是加1计数器,即是对内部时钟即指令周期脉冲计数 每当1uS到时,计数器加1。 假设 定时器的初始值=X,则每到1uS 计数器的值就加1 ,则计数器值=X+1+1+...+1 值越来越大,最后达到FFFFH+1 就会产生溢出 结果计数器值回0(FFFFH+1=65536) 可以推出 定时时间=计数的1的个数×1uS=(65536—X )1 uS 结论: 定时时间跟初始值即时间常数X有关。 如果要定时0.5毫秒=500uS 根据定时时间公式 500=(65536—X ) 即X=(65536-500) 一般把高8位送TH0 即 (65536-500)/256把 (65536-500)%256即除上256后的余数 即低8位数送给TL0 每当定时时间到 计数器值都回0 必须重新送时间常数X2每条指令的时间怎么算? 答复: 可以查指令表 每一条指令的执行时间的周期数 都是固定的 如 NOP 为一个机器周期 MOV R6,#200; 为2个机器周期 机器周期=12/晶振频率 如果晶振频率=12MHZ 则机器周期=1 uS 就可以知道 ; 执行NOP指令的执行时间为 1 uS 执行MOV R6,#200指令的执行时间为 2 uS 因此 是可以精确计算出指令的延时时间的 呵呵 就介绍这些吧 满意就 给加分吧
定时器的初值问题:定时器一旦启动,就会在原来的数值上开始加1计数,若在程序开始时我们没有设置TH0和TL0,他们的默认值都是0,假设时钟频率为12MHZ,12个时钟周期为一个机器周期,那么此时机器周期就是1us,计满TH0和TL0就需要2的16次方-1个数,即65535,再来一个脉冲就会溢出,即向CPU申请中断。因此溢出一次需要65536us,大约65.5ms,如果我们要定时50ms的话,那么就需要先给TH0和TL0装初值,在初值的基础上计数50000个后,定时器溢出,此时刚好是50ms中断一次,当需要定时1s时,产生20次的50ms的定时器中断后便认为是1s,这样就能精确控制时间。计算方法:当用定时器的方式1时,设机器周期为Tcy,定时器产生一次中断的时间为t,那么需要计数的个数为N=t/Tcy,装入THX、TLX的数分别为 THX=(65536-N)/256 TLX=(65536-N)%256
#include#define uchar unsigned char #define uint unsigned int uchar count,second; void main(void) { tmod=0x01; th0=(65536-50000)/256; tl0=(65536-50000)%256; tr0=1; et0=1; ea=1; while(1); } void timet0(void) interrupt 1 using 0 { th0=(65536-50000)/256; tl0=(65536-50000)%256; count++; if(count==20) { count=0; second--; if(second==300) second=0; } }
如果使用的是12M晶振计算,指令周期1uS,定时器是加1计数器,即是对内部时钟即指令周期脉冲计数 每当1uS到时,计数器加1。 假设 定时器的初始值=X,则每到1uS 计数器的值就加1 ,则计数器值=X+1+1+...+1 值越来越大,最后达到FFFFH+1 就会产生溢出 结果计数器值回0(FFFFH+1=65536)可以推出 定时时间=计数的1的个数×1uS=(65536—X )1 uS 结论: 定时时间跟初始值即时间常数X有关。 如果要定时0.5毫秒=500uS 根据定时时间公式 500=(65536—X )即X=(65536-500) 一般把高8位送TH0 , 即 (65536-500)/256把 (65536-500)%256即除上256后的余数, 即低8位数送给TL0 ,每当定时时间到 计数器值都回0 必须重新送时间常数X。 51单片机是对所有兼容Intel 8031指令系统的单片机的统称。该系列单片机的始祖是Intel的8031单片机,后来随着Flash rom技术的发展,8031单片机取得了长足的进展,成为应用最广泛的8位单片机之一,其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。很多公司都有51系列的兼容机型推出,今后很长的一段时间内将占有大量市场。51单片机是基础入门的一个单片机,还是应用最广泛的一种。需要注意的是52系列的单片机一般不具备自编程能力。

5,怎样使用51单片机的定时器

1. 设定工作方式TMOD=..... 2. 装入初值 TH0=...TL0=....TH1=....TL1=..... 3.开启定时器中断和总中断ET0=1或ET1=1 EA=1 4.启动时器 TR0=1 TR1=1 5.写中断服务程序 其中 3和5可以没有
51单片机定时器的使用51单片机定时器/计时器的使用步骤:1、 打开中断允许位:对IE寄存器进行控制,IE寄存器各位的信息如下图所示:EA: 为0时关所有中断;为1时开所有中断ET2:为0时关T2中断;为1时开T2中断,只有8032、8052、8752才有此中断 ES: 为0时关串口中断;为1时开串口中断 ET1:为0时关T1中断;为1时开T1中断 EX1:为0时关1时开 ET0:为0时关T0中断;为1时开T0中断 EX0:为0时关1时开2、 选择定时器/计时器的工作方式:定时器TMOD格式CPU在每个机器周期内对T0/T1检测一次,但只有在前一次检测为1和后一次检测为0时才会使计数器加1。因此,计数器不是由外部时钟负边沿触发,而是在两次检测到负跳变存在时才进行计数的。由于两次检测需要24个时钟脉冲,故T0/T1线上输入的0或1的持续时间不能少于一个机器周期。通常,T0或T1输入线上的计数脉冲频率总小于100kHz。方式0:定时器/计时器按13位加1计数,这13位由TH中的高8位和TL中的低5位组成,其中TL中的高3位弃之不用(与MCS-48兼容)。13位计数器按加1计数器计数,计满为0时能自动向CPU发出溢出中断请求,但要它再次计数,CPU必须在其中断服务程序中为它重装初值。方式1:16位加1计数器,由TH和TL组成,在方式1的工作情况和方式0的相同,只是计数器值是方式0的8倍。11/3方式2:计数器被拆成一个8位寄存器TH和一个8位计数器TL,CPU对它们初始化时必须送相同的定时初值。当计数器启动后,TL按8位加1计数,当它计满回零时,一方面向CPU发送溢出中断请求,另一方面从TH中重新获得初值并启动计数。方式3:T0和T1工作方式不同,TH0和TL0按两个独立的8位计数器工作,T1只能按不需要中断的方式2工作。 在方式3下的TH0和TL0是有区别的:TL0可以设定为定时器/计时器或计数器模式工作,仍由TR0控制,并采用TF0作为溢出中断标志;TH0只能按定时器/计时器模式工作,它借用TR1和TF1来控制并存放溢出中断标志。因此,T1就没有控制位可以用了,故TL1在计满回零时不会产生溢出中断请求的。 显然,T0和T1设定为方式3实际上就相当于设定了3个8位计数器同时工作,其中TH0和TL0为两个由软件重装的8位计数器,TH1和TL1为自动重装的8位计数器,但无溢出中断请求产生。由于TL1工作于无中断请求状态,故用它来作为串口可变波特3、 为计数器赋值计数器初值计算TC=M?CTC:计数器初值,M:计数器模值(2k),C:把计数器计满的计数值 定时器初值计算T=(M?TC)T计数或TC=M?T/??计数M:模值,T计数:单片机时钟周期TCLK(ΦCLK的倒数)的12倍;TC为定时器的定时初值,T为欲定时的时间。TC=M?T×????????/12M:模值,ΦCLK:单片机时钟周期ΦCLK;TC为定时器的定时初值,T为欲定时的时间。 例如:单片机主脉冲频率ΦCLK为12MHz,最大定时时间为: 方式0时 TMAX = 213×1us = 8.192ms 方式1时 TMAX = 216×1us = 65.536ms 方式2和方式3 TMAX = 28×1us = 0.256ms4TR0:为0时,停T0计数;为1时,启T0计数22/3TF0:为0时,无T0中断(硬件复位);为1时,有T0溢出中断 TR1:为0时,停T1计数;为1时,启T1计数 TF1:为0时,无T1中断(硬件复位);为1时,有T1溢出中断 IE1:为0时,硬件复位;为1时 IT1:为0时,INT1电平触发(软件复位);为1时,INT1负边沿触发 IE0:为0时,硬件复位;为1时 IT0:为0时,INT0电平触发(软件复位);INT0负边沿触发5在C51的C语言中使用interrupt x来指定中断入口地址,x为中断号,例T0中断: void Time0_Int() interrupt 1 //定时器T0的中断入口程序
51单片机定时器的gate=1时,用外部int0启动定时器,当int0=0时, 定时器t1会停止计数,这个时候读取t1的值是可以计算出高电平的宽度的。
给你一个例子#include <reg51.h>void InitTimer0(void) TMOD = 0x01; TH0 = 0x0FC; TL0 = 0x18; EA = 1; ET0 = 1; TR0 = 1;}void main(void) InitTimer0(); while(1);}void Timer0Interrupt(void) interrupt 1 TH0 = 0x0FC; TL0 = 0x18; //把你的定时中断代码放在这里}

文章TAG:计时怎么如何实现iw500705计时怎么用

最近更新

鉴赏排行榜推荐