单片机定时器0中断 中断时间计算

#include<reg51.h>#include<intrins.h>#defineuintunsignedintinttt;voidmain(){P2=0XFE;TM... #include<reg51.h>
#include<intrins.h>
#define uint unsigned int
int tt;
void main()
{
P2=0XFE;
TMOD=0X01;//设置定时器0为工作方式1
TH0=(65536-50000)/256;//设置高八位
TL0=(65536-50000)%256;//设置低八位
EA=1;//开总中断
ET0=1;//开启定时器0中断
TR0=1;//启动定时器0
tt=0;
while(1)
{
if(tt==20)
{
tt=0;
P2=_crol_(P2,1);

}

}

}

void zhongduan() interrupt 1
{

tt++;

}
此程序中中断延时程序延时时间为1s(晶振为12MHZ,延时时间为20*50000*12*1/12MHz=1S),可是程序仿真得到的延时时间为1.2s左右。即移位一次的时间间隔为1.2S左右,求解释。是我对延时时间理解错误还是怎么的?
我的问题找到了,
在延时程序中没有对其重新赋值,即正确程序应该加上
TH0=(65536-50000)/256;//设置高八位
TL0=(65536-50000)%256;//设置低八位

完整的延时程序为:

void zhongduan() interrupt 1
{

tt++;
TH0=(65536-50000)/256;//设置高八位
TL0=(65536-50000)%256;//设置低八位

}
展开
 我来答
we...a@163.com
推荐于2016-07-16
知道答主
回答量:8
采纳率:0%
帮助的人:3.9万
展开全部
你的定时程序没有问题,你的程序中单片机的机器周期是1us,汇编中的有些命令是一个机器周期执行一次,有的是好几个机器周期执行一次,而c语言是高于汇编的,你的c语言指令并不是1us执行一次,所以延时后用仿真软件测得时间会比你的理论实践长。
瑞地测控
2024-08-12 广告
在苏州瑞地测控技术有限公司,我们深知频率同步与相位同步的重要性。频率同步确保两个或多个设备的时钟频率变化一致,但相位(即时间点)可保持相对固定差值。而相位同步,即时间同步,要求不仅频率一致,相位也必须完全一致,即时间差恒定为零。相位同步的精... 点击进入详情页
本回答由瑞地测控提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式