当前位置: 代码迷 >> 单片机 >> 单片机中断定时程序改错,
  详细解决方案

单片机中断定时程序改错,

热度:56   发布时间:2016-04-28 15:27:56.0
单片机中断定时程序改错,求助?
/*======================================================

使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的编号。
  相关解决方案