首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

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

2013-04-02 
单片机中断定时程序改错,求助?/*使LED灯(P1.7口

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

/*======================================================

使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的编号。

热点排行