/*======================================================
使LED灯(P1.7口接LED灯)亮一下后灭一下的中断定时程序
======================================================*/
#include<reg52.h>
sbit P1_7=P1^7;
void delay(long y)
{ y--; }
timer0() interrupt 2 using 1
{
P1_7=!P1_7;delay(100000);
}
main()
{
P1_7=0;
TMOD=0x03;
TH0=TL0=0xff;
IP=0x00;
EA=1; //开总中断
ET0=1; //定时器中断允许位
TR0=1; //定时器0开始计数
while(1);
}
求助:程序可以编译,就是下载进去后P1.7口的灯一直亮着,怎么改啊
------解决方案--------------------
/*======================================================
使LED灯(P1.7口接LED灯)亮一下后灭一下的中断定时程序
======================================================*/
#include<reg52.h>
sbit P1_7=P1^7;
void delay(long y)
{ while(y--); }
static unsigned char delay_50ms = 50;
void timer0(void) interrupt 1
{
TH0=0xb8; //TH0=0xb8 TH0=0 22.1184MHz时钟下定时时间为10mS
TL0=0;
while(!(--delay_50ms))
{
delay_50ms = 50;
P1_7=!P1_7; //500ms一次
}
}
void main(void )
{
P1_7=0;
TMOD=0x01;
TH0=0xb8; //TH0=0xb8 TH0=0 22.1184MHz时钟下定时时间为10mS
TL0=0;
IP=0x00;
EA=1; //开总中断
ET0=1; //定时器中断允许位
TR0=1; //定时器0开始计数
while(1);
}
在程序基础上修改了一下,我这里仿真没问题了,楼主试试看。
你的问题是用了模式3,模式3在22.1184MHz时钟下,最大延时时间才0.138ms,人眼是跟不上的。
而且应该用interrupt 1,2是外部中断1的编号。