如何计算时间

ƻ

ƻ

Guest
您好,我这样做PIC16F877的.....倒计时计时器可我知道我该如何计算需要多少时间
, 需要.....指令
, 如“movwf说明”我使用的20MHz的知情同意....
感谢您的帮助..

 
嗨,

你可以使用一个计时器软件中断每隔1ms。然后
, 使用简单的柜台
, 发现了第二个,分钟,小时等。因此
, 您的程序可以运行frely而您无需担心多久somehting happans。
祝您好运。

 
这里是链接:
http://ww1.microchip.com/downloads/en/DeviceDoc/31029a.pdf
从第8页。注意在每个指令周期数。
机器周期=系统时钟/ 4
例如:
系统时钟= 4MHz的=“机器周期= 1微秒
希望这有助于。14分钟后添加:这里有一个更好的:
http://ww1.microchip.com/downloads/en/DeviceDoc/33023a.pdf
从530页

 
嗨,
从乌拉圭回合峰的数据表,他们其实是表明多久是一个指令周期。通常用于石化16系列将是200ns内..
因此
, 如果说u是让使用定时器1有溢出时中断。
定时器1有16位这样将有多达65535计数
然后
, 下面将每个中断的时间。
“200ns内人数计算的X成本中断x prescalar ..”
通常一开始,可以测试的和1:1 prescalar
然后..将阿德13.1ms
有1秒中断,美需要1秒,美需要有这种中断中断的原因76。
一切顺利。
btw,这是为20MHz晶体

 
嗨...所有给定的....建议
, 感谢
, 但我可以尝试使用而不是使用中断循环的倒数呢??因为我的一些朋友告诉我thatinterrupt可能会引起一些问题。是否有任何警告
, 必须小心使用中断??

 
是的,美有必要确保乌拉圭回合中断服务程序必须尽可能短..嗯..是好的做倒计时循环
, 而不是打断我的感觉。
其实我现在工作也..我想首先ü仍然必须作为反n的计时器
, 然后让它溢出。当溢出,溢出标志将被logic1。你还是你可以利用这个
, 有一个循环倒数..等等,每当溢出标志是一个,然后减回合计数循环..
高性能引擎有帮助。

 
嗨,

Idont链接使用循环,因为微控制器停止做其他事情。您可以比较到一个非多任务处理的多任务微控制器。如果你只是建立一个时钟,然后确定这个鲁坦会。但是
, 如果你都不会建立somehitng是比较当时,那么你将有一个问题。
下面是我为我的应用程序最常用的代码。你可以看到
, 中断时间很短,所有其它即时通讯程序本身做什么。
能让启动:
1。你必须确定的全球veribales。我使用globael,因为我与一些功能和i dont希望我的时钟运行得到所有worng ...
2。你会发现中断车辙。你可以看到
, 这是很短
, 简单。你很快就会得到溢出标志的计时器,清除国旗和重置计时器。
3。你必须implament的定时器溢出的设置。正如scdoro explaind,你写0xFFFF的-的时候
, 你需要。
例如。10ms的在4MHz:
4MHz的/ 4 = 1MHz的= 0.000001秒
10毫秒= 0.01Sec。
10ms/1MHz = 0.01/0.000001 = 10,000 = 0x2710
的TMR1 = 0xFFFF的- 0X2710 = 0xD8EF
4。使用while循环,请输入正确的时间在每个功能时
, 国旗的变化。
代码:位Flag_10mS = 0,Flag_100mS = 0,Flag_1Sec = 0; / /定时器标志

无符号= 0,Count1Sec = 0,Count1Min = 0; / /时间计数器字符Count100mS/************************************************* **

*中断服务程序*

************************************************** * /无效中断ISR的(无效)

(如果(TMR1IF&TMR1IE)/ /定时器1溢出事件发生后,设置为1mSec?



Flag_10mS = 1;

TMR1L = 0xEF; / /初始化定时器1低字节

TMR1H = 0xD8; / /初始化定时器1高字节1mSec

TMR1IF = 0; / /清除TMR1中断标志

Count100mS ; / /计数器100毫秒

如果(Count100mS“= 10)/ /计数器100毫秒



Flag_100mS = 1;

Count100mS = 0; / /重置计数器

Count1Sec ;



如果(Count1Sec“= 10)/ /计数器1秒



Flag_1Sec = 1;

Count1Sec = 0; / /重置计数器







/******************************

*定时器1初始化代码*

******************************/无效Init_Timer1(无效)



T1CON = 0x00; / / T1CON寄存器设置

TMR1L = 0xEF; / /初始化定时器1低字节

TMR1H = 0xD8; / /初始化定时器1高字节10mSec

TMR1IF = 0; / /复位定时器1溢出的H / W标志

TMR1IE = 1; / /允许定时器1溢出中断

TMR1ON = 1; / /启动定时器1计数器

)/***********************************************

*初始化系统*

***********************************************/无效的主要(无效)



Init_Timer1(); / /初始化定时器1

PEIE = 1; / /允许外设中断

耶= 1; / /允许全局中断而(1)



/ / ************** 10mSec功能*****************

如果(Flag_10mS)/ /功能来运行10mSec



Flag_10mS = 0;

....

)/ /结束10mSec/ / ************** 100mSec功能*****************

如果(Flag_100mS)/ /功能来运行10mSec



Flag_100mS = 0;

....

)/ / ************** 1秒函数*****************

如果(Flag_1Sec)/ /功能运行在1秒



Count1Min ;

Flag_1Sec = 0;

...

)/ /结束1秒/ / ************** 1分钟功能*****************

如果(Count1Min“= 60)/ / 1分钟通过)



Count1Min = 0;

...

)/ /结束1分钟

)/ /结束时

)/ /结束主
 
嗨,

我有这样的程序(我不知道我在哪里得到这个,我从来没有试过),但它计算延迟,下载和试用。
很抱歉,您还没有登录查看此附件

 

Welcome to EDABoard.com

Sponsor

Back
Top