单片机定时器产生10微秒的中断出错了

2019-07-15 18:06发布

本帖最后由 ly2 于 2014-11-26 20:35 编辑

昨天在高手的指点下把定时器产生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++;
}
7P5H(A`}FDPJ1WLCD{5DBN8.png


)W`477B9D7DPJ(E2ASY0.jpg



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
伍恒兴
1楼-- · 2019-07-15 20:46
单片机中断是有执行时间的 ,10us的中断太短了,赋个初值就用了2us,用定时器的自动重载模式会好点
ly2
2楼-- · 2019-07-15 23:37
 精彩回答 2  元偷偷看……
伍恒兴
3楼-- · 2019-07-16 03:47
精确的10us很难,用定时器自动重载模式,这样中断里就不用赋初值了,延时会准确点
ly2
4楼-- · 2019-07-16 05:56
伍恒兴 发表于 2014-11-27 20:39
精确的10us很难,用定时器自动重载模式,这样中断里就不用赋初值了,延时会准确点 ...

哦哦,谢谢指点。。你能帮我看看我这个问题吗http://bbs.elecfans.com/forum.ph ... d=459924&extra=,真心感谢

一周热门 更多>