主题:ERR100定时问题

  共有22880人关注过本帖    
ahtest
1楼


ERR100定时问题  发帖心情 Post By:2004-12-3 18:23:00   [只看该作者]

你好!请问:在ERR100中,要设置一个1秒间隔的定时器中断,该如何做?是用int SetTMR2( unsigned Divider )吗?Divider该设多少?又:tmr2的中断irq11和定时中断0x1c有何区别?各自该如何利用?
   最好请回复至我的邮zyb@ahagri.com。谢谢

  单帖管理 | 引用 | 回复 回到顶部
x10
2楼


  发帖心情 Post By:2004-12-3 19:51:00   [只看该作者]

在ETR100中,Timer2为16位计数器,输入时钟为1MHz,一般用于产生几ms至50ms的定时中断,对需要长的定时,一般采用加载int 1Ch的方法,系统定时中断将调用int 1Ch,所以其时间间隔约为55ms = 1/18.2,即每秒中断次数为18.2次。通常采用int 1Ch计数产生秒级或更长时间间隔的事件。


  单帖管理 | 引用 | 回复 回到顶部
ahtest
3楼


  发帖心情 Post By:2004-12-4 12:39:00   [只看该作者]

谢谢!用int 1Ch无法产生1秒的定时?如何做,请提示。

  单帖管理 | 引用 | 回复 回到顶部
zhl
4楼


  发帖心情 Post By:2004-12-4 15:21:00   [只看该作者]

可getvect(..)及setvect(..)来安装中断0x1c,设置中断0x1C的中断服务程序。每55ms中断一次,执行该中断服务程序,比如将存储器变量计数值++,通过管理其中存储器变量来达到定时的目的。

  单帖管理 | 引用 | 回复 回到顶部
ahtest
5楼


  发帖心情 Post By:2004-12-4 17:48:00   [只看该作者]

因为是每55ms中断一次,无法通过“变量计数值++”到1000ms(1秒),有什么方法?谢谢!

  单帖管理 | 引用 | 回复 回到顶部
x10
6楼


  发帖心情 Post By:2004-12-5 15:17:00   [只看该作者]

如果要准确的1000ms,就使用Timer2,设置分频值N=50000对应50ms,然后在Timer2_ISR中计数得到1000ms的事件。

  单帖管理 | 引用 | 回复 回到顶部
ahtest
7楼


  发帖心情 Post By:2004-12-7 18:38:00   [只看该作者]

谢谢!是否可以用Timer0,对系统有无影响。另外,能否提供汇编的级调用: int 0x15 的说明。

  单帖管理 | 引用 | 回复 回到顶部
x10
8楼


  发帖心情 Post By:2004-12-7 21:55:00   [只看该作者]

禁止对Timer0进行任何设置,Timer0是系统定时器,其定时中断将调用int 1Ch。在x86中,在任何C/C++代码中都可插入汇编。对int 0x15的调用已包括在ETR100.CPP中,其定义在手册中有说明。

  单帖管理 | 引用 | 回复 回到顶部
ahtest
9楼


  发帖心情 Post By:2004-12-8 17:27:00   [只看该作者]

谢谢!也看到了,但是里面的内容不全,也不系统,所以想从你那得到一个全面的说明。

  单帖管理 | 引用 | 回复 回到顶部
ahtest
10楼


  发帖心情 Post By:2004-12-8 17:33:00   [只看该作者]

还有一个关于定时的问题,接前天你说的问题,如果使用Timer2,而且设置分频值N=50000(50ms),这就限制我的Timer2_ISR程序最大只有50ms的处理时间。正好想顺便问一下,你能告诉我平均每秒大概能执行多少条指令(不同指令时间不同,我想平均估计你们知道)。

  单帖管理 | 引用 | 回复 回到顶部
ahtest
11楼


  发帖心情 Post By:2004-12-9 15:52:00   [只看该作者]

还有一个关于定时的问题,接前天你说的问题,如果使用Timer2,而且设置分频值N=50000(50ms),这就限制我的Timer2_ISR程序最大只有50ms的处理时间。正好想顺便问一下,你能告诉我平均每秒大概能执行多少条指令(不同指令时间不同,我想平均估计你们知道)。

  单帖管理 | 引用 | 回复 回到顶部
x10
12楼


  发帖心情 Post By:2004-12-9 18:46:00   [只看该作者]

可以采用如下方法对你关心的代码进行运行时间测试:

long start = clock( );
for( i1=0; i1<N; i1++ )           // N=1000也可以是其它数字
{
   // 测试代码
}
long end = clock();

 float T = (end-start)/CLK_TCK/N;

选择N让(end-start)>20以保证足够的精度。

  单帖管理 | 引用 | 回复 回到顶部

返回首页

ERR100定时问题

用户名:
            验证码: 验证码,看不清楚?请点击刷新验证码
内容: