51单片机两个定时器中断写了个呼吸灯程序,怎么调试出来是小灯闪烁程序,新手求指教。

51单片机两个定时器中断写了个呼吸灯程序,怎么调试出来是小灯闪烁程序,新手求指教。,第1张

程序太乱,只用一个定时器就可以

如定时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

}

希望对你有所帮助!!!!


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12025715.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存