主题:ERR100定时问题 共有56510人关注过本帖 |
---|
ahtest |
1楼 |
![]() |
ERR100定时问题 ![]()
你好!请问:在ERR100中,要设置一个1秒间隔的定时器中断,该如何做?是用int SetTMR2( unsigned Divider )吗?Divider该设多少?又:tmr2的中断irq11和定时中断0x1c有何区别?各自该如何利用?
   最好请回复至我的邮zyb@ahagri.com。谢谢 |
单帖管理 | 引用 | 回复 ![]() |
x10 |
2楼 |
![]() |
![]()
在ETR100中,Timer2为16位计数器,输入时钟为1MHz,一般用于产生几ms至50ms的定时中断,对需要长的定时,一般采用加载int 1Ch的方法,系统定时中断将调用int 1Ch,所以其时间间隔约为55ms = 1/18.2,即每秒中断次数为18.2次。通常采用int 1Ch计数产生秒级或更长时间间隔的事件。
|
单帖管理 | 引用 | 回复 ![]() |
ahtest |
3楼 |
![]() |
![]()
谢谢!用int 1Ch无法产生1秒的定时?如何做,请提示。
|
单帖管理 | 引用 | 回复 ![]() |
zhl |
4楼 |
![]() |
![]()
可getvect(..)及setvect(..)来安装中断0x1c,设置中断0x1C的中断服务程序。每55ms中断一次,执行该中断服务程序,比如将存储器变量计数值++,通过管理其中存储器变量来达到定时的目的。
|
单帖管理 | 引用 | 回复 ![]() |
ahtest |
5楼 |
![]() |
![]()
因为是每55ms中断一次,无法通过“变量计数值++”到1000ms(1秒),有什么方法?谢谢!
|
单帖管理 | 引用 | 回复 ![]() |
x10 |
6楼 |
![]() |
![]()
如果要准确的1000ms,就使用Timer2,设置分频值N=50000对应50ms,然后在Timer2_ISR中计数得到1000ms的事件。
|
单帖管理 | 引用 | 回复 ![]() |
ahtest |
7楼 |
![]() |
![]()
谢谢!是否可以用Timer0,对系统有无影响。另外,能否提供汇编的级调用: int 0x15 的说明。
|
单帖管理 | 引用 | 回复 ![]() |
x10 |
8楼 |
![]() |
![]()
禁止对Timer0进行任何设置,Timer0是系统定时器,其定时中断将调用int 1Ch。在x86中,在任何C/C++代码中都可插入汇编。对int 0x15的调用已包括在ETR100.CPP中,其定义在手册中有说明。
|
单帖管理 | 引用 | 回复 ![]() |
ahtest |
9楼 |
![]() |
![]()
谢谢!也看到了,但是里面的内容不全,也不系统,所以想从你那得到一个全面的说明。
|
单帖管理 | 引用 | 回复 ![]() |
ahtest |
10楼 |
![]() |
![]()
还有一个关于定时的问题,接前天你说的问题,如果使用Timer2,而且设置分频值N=50000(50ms),这就限制我的Timer2_ISR程序最大只有50ms的处理时间。正好想顺便问一下,你能告诉我平均每秒大概能执行多少条指令(不同指令时间不同,我想平均估计你们知道)。
|
单帖管理 | 引用 | 回复 ![]() |
ahtest |
11楼 |
![]() |
![]()
还有一个关于定时的问题,接前天你说的问题,如果使用Timer2,而且设置分频值N=50000(50ms),这就限制我的Timer2_ISR程序最大只有50ms的处理时间。正好想顺便问一下,你能告诉我平均每秒大概能执行多少条指令(不同指令时间不同,我想平均估计你们知道)。
|
单帖管理 | 引用 | 回复 ![]() |
x10 |
12楼 |
![]() |
![]()
可以采用如下方法对你关心的代码进行运行时间测试:
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以保证足够的精度。 |
单帖管理 | 引用 | 回复 ![]() |