各位大侠:
你们好!
有AT89C52单片机可调输出PWM波的相关程序吗?要求可调,单片机的晶振是12MHZ,输出周期为1s,分20等级。有两个开关控制占空比的增加和减少。有完整的吗?我的邮箱是[email protected].万分感谢。
//很容易的,程序如下:
#include<reg52.h>
unsigned int a, b;
//------------------------------------------
void main()
{
TMOD = 0x01; //T0定时方式1
TH0 = (65536-50000) / 256; //50ms@12MHz
TL0 = (65536-50000) % 256;
TR0 = 1;
ET0 = 1;
EX0 = 1; EX1 = 1;
IT0 = 1; IT1 = 1;
EA = 1;
a = 0;
b = 10;
while(1);
}
//------------------------------------------
void time0() interrupt 1
{
TL0 = (65536-50000) % 256;
TH0 = (65536-50000) / 256; //50ms@12MHz
a++;
if(a == 20) a = 0; //在这里调整周期.
if(a < b) P2 = 0xff; //在这里调整占空比.
else P2 = 0x00;
P0 = ((b / 10) << 4) + b % 10; //显示占空比
}
//------------------------------------------
void X0_INT() interrupt 0
{
b++;
if(b > 19) b = 19; //占空比最大为19
}
//------------------------------------------
void X1_INT() interrupt 2
{
b--;
if(b < 1) b = 1; //占空比最小为1.
}
//------------------------------------------
可见:
http://hi.baidu.com/%D7%F6%B6%F8%C2%DB%B5%C0/blog/item/f2005aed1643a12a63d09f24.html
//电路以及仿真效果如下图: