找回密码
 注册会员
img_loading
智能检测中
更新自动建库工具PCB Footprint Expert 2024.04 Pro / Library Expert 破解版

写了一个普通PWM波的程序,但是出了点问题,请大手们进来看看吧

[复制链接]
admin 发表于 2012-9-2 04:31:27 | 显示全部楼层 |阅读模式

本文包含原理图、PCB、源代码、封装库、中英文PDF等资源

您需要 登录 才可以下载或查看,没有账号?注册会员

×
是这样的,写了一个400HZ的PWM波,周期是2.5ms,占空比从1%到99%可调,25us中断一次,一个周期中断100次。方式2,12M晶振。
最初程序是这样的

#include "reg52.h"

#define H_time (80)

sbit Output=P1^2;

unsigned char Num;

void Init()
{
Output=1;

TMOD=0x02;
TH0=0xE7;
TL0=0xE7;
EA=1;
ET0=1;
TR0=1;
}

void T0_time() interrupt 1
{
Num++;
if(Num<H_time) Output=1;
else Output=0;
if(Num>=100) Num=0;
}


void main()
{
Init();

while(1);
}

但是这样输出的频率只有337.825,找了很久不知道是什么问题。然后把中断程序提到主函数中就好使了,如下:

#include "reg52.h"

#define H_time (80)

sbit Output=P1^2;

unsigned char Num;

void Init()
{
Output=1;

TMOD=0x02;
TH0=0xE7;
TL0=0xE7;
EA=1;
ET0=1;
TR0=1;
}

void T0_time() interrupt 1
{
Num++;

}


void main()
{
Init();

while(1)
{
if(Num<H_time) Output=1;
else Output=0;
if(Num>=100) Num=0;
}
}
这样的话就好使了,频率是400HZ。我就想知道为什么第一个为啥不好使。最初我以为是中断里面程序过多,还没执行完一次中断另一次中断又发生了,但是按理来说25us应该足够了呀。
您需要登录后才可以回帖 登录 | 注册会员

*滑块验证:
加载失败,请点击重试! (img)
本版积分规则

QQ|手机版|MCU资讯论坛 ( 京ICP备18035221号-2 )|网站地图

GMT+8, 2025-7-26 22:26 , Processed in 0.073335 second(s), 9 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表