
可能是定时器溢出次数的计数器没有清零。例如:
假设定时器50毫秒溢出一次,cnt记录溢出次数,cnt为unsigned char型
if(cnt == 20)
{
到达1S,此时如果cnt没有清零,那么cnt会冲21记录到255,再加1,cnt = 0,然后再加到20,IF的条件才会成立,这个过程正好就是12秒多
}
解决办法:
1、在 Microsoft Windows 2003 或 Windows XP 桌面上,依次单击“开始”、“运行”,然后在“打开”中键入
regeditexe,再单击“确定”。在 Windows 2000 中,使用 regedt32exe 启动注册表编辑器。
2、定位到以下注册表项:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib]
找到里面的Last Counter和LastHelp,注意Last Counter和Last Help值是由 Windows 动态分配的;这两个值会因计算机的不同而不同。我的分别是6760和6761。
3、上一步的“Last Counter”值 (6760)
必须与以下注册表项中“Perflib\004”的“Counter”项的最大值匹配,并且上一步的“Last Help”值 (6761)
必须与以下注册表项中“Perflib\004”的“Help”项的最大值匹配。
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib\004]
注意 004 是简体中文中的一个示例,如果你安装的是英文版,对应的应该是:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib\009]
4、比如说:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib\004中的Help,双击后打开编辑框,里面是:
3
System performance object 包含应用于计算机上不止一个组件处理器范例的计数器。
5
Memory performance object
中间的都省略掉了
6785
写入所有数据源中的 BLOB 字节总数。
6787
在整个管道中使用的 BLOB 假脱机文件数。
这个最后一个数值6787就应该对应Perflib中Last Help的十进制数值。当然修改的时候别忘了选择十进制。
5、关闭注册表编辑器
6、再次运行 SQL Server 安装程序就应该没问题了。
程序计数器PC(program Counter)
程序计数器在物理上是独立的,它不属于特殊内部数据存储器块中。PC是一个16位的计数器,
用于存放一条要执行的指令地址,寻址范围为64kB,PC有自动加1功能,即完成了一条指令的执行后,其内容自动加1。PC本身并没有地址,因而不可寻址,用户无法对它进行读写,但是可以通过转移、调用、返回等指令改变其内容,以控制程序按我们的要求去执行。
复位后为0000H(16位)
数据指针(DPTR)
数据指针为16位寄存器,编程时,既可以按16位寄存器来使用,也可以按两个8位寄存器来使用,即高位字节寄存器DPH和低位字节DPL。
DPTR主要是用来保存16位地址,当对64kB外部数据存储器寻址时,可作为间址寄存器使用,此时,使用如下两条指令:
MOVX A, @DPTR
MOVX @DPTR, A
在访问程序存储器时,DPTR可用来作基址寄存器,采用基址+变址寻址方式访问程序存储器,这条指令常用于读取程序存储器内的表格数据。
MOVC A, @A+@DPTR
复位后为0000H(16位)
以上就是关于用51单片机做时钟 用到T0定时器 当程序中TR0=0后秒表停止,再次将TR0=1后秒表过十多秒后才能继续跑数全部的内容,包括:用51单片机做时钟 用到T0定时器 当程序中TR0=0后秒表停止,再次将TR0=1后秒表过十多秒后才能继续跑数、如何在 sql server 2005 中为安装程序增加计数器注册表项值、51单片机中程序指针PC和数据指针DPTR各自有什么用途电路复位后,二者的值各是多 少等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)