这是我做的一个用I/O口去模拟PWM去控制LED灯亮度缓缓变亮的程序
但是调试过程中我发现外部中断可以打开,但是定时器的中断却没有打开
请大神帮忙看看,程序如下
#include"reg52.h"
typedef unsigned int u16;
typedef unsigned char u8;
sbit k1=P3^3; //这是外部中断的那个口
sbit PWM=P2^1; //这就是那个LED
u16 count,time0,value;
void delay100us(void) //误差 0us
{
unsigned char a,b;
for(b=1;b>0;b--)
for(a=47;a>0;a--);
}
void Int1Init() //外部中断1的初始
{
EA=1;
EX1=1;
IT1=1;
}
void Timer0Init() //定时器中断0的初始
{
TMOD|=0X01;
TH0 = 0xFF;
TL0 = 0xff; //期望定时为1us,晶振为12MHZ
ET0=1;
EA=1;
TR0=1;
}
void Int1() interrupt 2
{
if(k1==0) //用于消抖
{
delay100us();
if(k1==0)
{
count=0;
value=1;
time0=0;
}
while(!k1);
}
Timer0Init();
while(1) //此处为我模拟PWM时序的地方
{
if(count>1000)
{
count=0;
value++;
}
if(time0>1000)
{
time0=0;
}
if(time0<value)
{
PWM=1;
}
else
{
PWM=0;
}
}
}
void main()
{
PWM=0;
Int1Init();
while(1);
}
void Timer0() interrupt 1 //定时器中断函数
{
TH0 = 0xFF;
TL0 = 0xff;
time0++;
count++;
}
|