微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 单片机定时器产生10微秒的中断出错了

单片机定时器产生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=,真心感谢

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top