
单片机定时器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;//设置低八位
} 展开
#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;//设置低八位
} 展开
1个回答
展开全部
你的定时程序没有问题,你的程序中单片机的机器周期是1us,汇编中的有些命令是一个机器周期执行一次,有的是好几个机器周期执行一次,而c语言是高于汇编的,你的c语言指令并不是1us执行一次,所以延时后用仿真软件测得时间会比你的理论实践长。

2024-08-12 广告
在苏州瑞地测控技术有限公司,我们深知频率同步与相位同步的重要性。频率同步确保两个或多个设备的时钟频率变化一致,但相位(即时间点)可保持相对固定差值。而相位同步,即时间同步,要求不仅频率一致,相位也必须完全一致,即时间差恒定为零。相位同步的精...
点击进入详情页
本回答由瑞地测控提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询