8051微控制器的定时器中断来实现计时功能
  QtpjMRSUUfXb 2023年12月07日 22 0

/*------------------------------------------------------------------------------ TIME.C: Time Function for DHRYSTONE and WHEATSTONE Benchmarks Copyright 1995-2005 Keil Software, Inc. ------------------------------------------------------------------------------*/ #include <reg51.h> long timeval; timerint () interrupt 1 { TH0 = -250; /* 125 Hz at 12 MHz 8051 */ timeval++; } long time (long *t) { long tval; t = (long *) 0; EA = 0; tval = timeval; IE = 0x82; TR0 = 1; return (tval); } initserial () { SCON = 0x52; /* SCON */ TMOD = 0x20; /* TMOD */ TCON = 0x69; /* TCON */ TH1 = 0xf3; /* TH1 */ }

这段代码是用于实现DHRYSTONE和WHEATSTONE基准测试的计时功能。它使用了8051微控制器的定时器中断来实现计时。


首先,定义了一个全局变量`timeval`,用于存储计时值。


然后,定义了一个名为`timerint`的中断服务例程,该例程在定时器0中断发生时被调用。在中断服务例程中,将TH0寄存器的值设置为-250,以设置定时器0的频率为125 Hz(即每毫秒触发一次中断)。同时,将`timeval`的值递增1,表示计时值增加1。


接下来,定义了一个名为`time`的函数,该函数接受一个指向长整型变量的指针作为参数。在函数内部,首先将传入的指针赋值为NULL,然后将全局变量`EA`设置为0,禁用总中断。接着,将`timeval`的值赋给局部变量`tval`,并将中断允许位`IE`设置为0x82,启用定时器0中断。最后,将定时器0使能位`TR0`设置为1,启动定时器0。函数返回`tval`的值,即计时值。


最后,定义了一个名为`initserial`的函数,用于初始化串口通信。在该函数中,设置了SCON、TMOD和TCON寄存器的值,以及TH1寄存器的值,以配置串口通信的相关参数。

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年12月07日 0

暂无评论

推荐阅读
QtpjMRSUUfXb