定时器能放在子程序中作延时时间调用不

[复制链接]
 楼主| pengf 发表于 2011-5-17 21:39 | 显示全部楼层 |阅读模式
如果这样用的话,什么时候开始计时?
栩栩如生 发表于 2011-5-17 21:49 | 显示全部楼层
你想在程序中调用中断程序?
zwll 发表于 2011-5-17 22:10 | 显示全部楼层
一般用法是在定时器中断中设置标志位,在主程序中判断标志位,这样来使用。
 楼主| pengf 发表于 2011-5-17 22:31 | 显示全部楼层
我想来回调用它,呵呵
 楼主| pengf 发表于 2011-5-17 22:38 | 显示全部楼层
如果按照你说的,在一个输出开始计时的话是不是还要打开定时器中断?
zwll 发表于 2011-5-17 23:23 | 显示全部楼层
是的
 楼主| pengf 发表于 2011-5-17 23:35 | 显示全部楼层
就是说打开了定时器中断时系统就开始计时了?
zwll 发表于 2011-5-17 23:51 | 显示全部楼层
完全正确
 楼主| pengf 发表于 2011-5-18 13:25 | 显示全部楼层
那些软仿真中,像PORT口的按键中断,在软仿真时如何模拟按键产生的中断呢??
zwll 发表于 2011-5-18 13:36 | 显示全部楼层
软仿真里有个虚拟设备,可以模拟。
 楼主| pengf 发表于 2011-5-18 13:44 | 显示全部楼层
我找了找没有找到
zwll 发表于 2011-5-18 13:57 | 显示全部楼层
211~213页
neyo.zhong 发表于 2011-5-18 14:08 | 显示全部楼层
11# pengf
四位机有软仿真功能,而8位好像没有。
具体方法见下图。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
dingy 发表于 2011-5-18 14:13 | 显示全部楼层
可不可以这样得到比较精确的定时?

void dleay(uint16 dly)
{
       TIM_CTR = 0;    // 假设递增计数
     TIMER_ON;
        while(TIM_CRT <= dly) ;
       TIMER_OFF;
}
neyo.zhong 发表于 2011-5-18 14:18 | 显示全部楼层
14# dingy
定时器来定时最精准了,我个人不推荐用循环的方式,一是计算麻烦,二是有隐患。
neyo.zhong 发表于 2011-5-18 14:22 | 显示全部楼层
如果你要用你那种方法可以这样做:

1.复位IO口为低电平,在循环延时前设置某个IO为高电平,当循环延时结束时,设置该IO口输出低电平。

2.示波器来测量延时时间是否正确,这样最精确了
zwll 发表于 2011-5-18 14:35 | 显示全部楼层
可不可以这样得到比较精确的定时?

void dleay(uint16 dly)
{
       TIM_CTR = 0;    // 假设递增计数
     TIMER_ON;
        while(TIM_CRT
dingy 发表于 2011-5-18 14:13
要多精准?一般延时也就做个大概。
llljh 发表于 2011-5-18 14:47 | 显示全部楼层
我觉得可以,在需要延时的地方才打开定时器,定时器时间到只在中断程序中修改一个标志变量。而主程序在需要延时的地方就while着等标志变量变化,标志位变了说明时间到,然后把定时器关闭。这样的延时是比较准的。
司徒老鹰 发表于 2011-5-18 15:13 | 显示全部楼层
是完全可行的,我经常这样用:
要搞清楚,定时器的允许中断位和判断标志位是两个不同的位,你在主程式的任何地方都可以判断定时器有没有计时(溢出)标志,而不一定要跑到中断中去判断的,前提是,你去判断的时间要小于定时器的计时时间!
renyaq 发表于 2011-5-18 15:26 | 显示全部楼层
可以把 看门狗放在 DELAY 中

在调用DELAY
您需要登录后才可以回帖 登录 | 注册

本版积分规则

718

主题

10129

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部