单片机定时器产生10微秒的中断出错了
时间:10-02
整理:3721RD
点击:
昨天在高手的指点下把定时器产生PWM波周期不对的程序改了,在这里谢谢帮我的高手们,谢谢你们指点。现在我把定时器的中断时间改成10微秒,那么产生的PWM波周期应该是0.4毫秒,占空比还是50%,可是仿真出来却是0.9毫秒左右,这是什么原因呢?若是改为N>=3000,N<=1000,那么周期应该是30毫秒,占空比是1/3,可是仿真出来周期却是60毫秒,大了两倍,占空比对了,小弟感谢指点。#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit pwm=P2^2;
uint N;
void main()
{
TMOD=0X10;
TH1=(65536-10)/256;
TL1=(65536-10)%256;
EA=1;
ET1=1;
TR1=1;
while(1)
{
if(N>=40)
N=0;
if(N<=20)
pwm=1;
else
pwm=0;
}
}
void T1_time() interrupt 3
{
TH1=(65536-10)/256;
TL1=(65536-10)%256;
N++;
}
单片机中断是有执行时间的 ,10us的中断太短了,赋个初值就用了2us,用定时器的自动重载模式会好点
哦哦,那没有办法实现10微秒中断吗?
精确的10us很难,用定时器自动重载模式,这样中断里就不用赋初值了,延时会准确点
哦哦,谢谢指点。你能帮我看看我这个问题吗http://bbs.elecfans.com/forum.ph ... d=459924&extra=,真心感谢