如定时100us 中断一次 20次是2 ms 即周期是2 ms
中断一次计数变量a加一,并且与另一变量b(1到20)比较,如果a>b,则输出高电平,反之则输出低电平 a=20时清0
主程序中可不断改变b的值,先由大到 小 再由小到大,就是呼吸灯了
如延时200ms改变一次b的值 则呼吸周期大约是8秒
c51现在很少用了,多用s51和52你要的是外部中断还是定时中断?
不管是什么中断,都要先设置好中断,比如外中断,那么你要设置成是上升沿还是下降沿中断,然后开中断,开总中断
如果你是定时中断要设置cpu频率,还要开定时中断,还要开总中断,然后后在进入中断后对led等的io口取反 *** 作实现每次中断闪烁,在中断中要置一个标志,在主程序里边检测到这个标志就对一个寄存器加1,然后把这个寄存器送去显示就可以了,当然超过10的时候要做一个变换,超过100了也要变换。
请你参考:
电路
代码
#include<reg51.h>#define LED P2
unsigned char step
void Delayms(unsigned int x)
{
unsigned char t
while(x--)
for(t=0t<120t++)
}
void main()
{
unsigned char i,j
TCON|=0x01
IE|=0x81
i=0
j=0xFF
step=0
while(1)
{
switch(step)
{
case 1: LED=~(1<<i)break
case 2: j=j^0xFFLED=jbreak
case 3: LED=0x00break
}
i=++i%8
Delayms(200)
}
}
void EX0_INT() interrupt 0
{
EX0=0
Delayms(10)
if(++step==4)
step=1
EX0=1
}
希望对你有所帮助!!!!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)