STC单片机:程序目的就是产生一个1ms的中断,然后经过1000*300次=5min,将P1.5的状态改变一下,中断就进不去

我写了这个程序以后感觉很简单,但是就是不行,我写程序也能写进去,单片机型号为STC11F01E,用内部晶振,我单片机就接了三根线,VCC,GND,和P1.5, 烧程序的时候,需要用ISP,打开hex文件,显示说超出部分已被去除,其他的没什么情况

#include"reg51.h"
#include"intrins.h"

typedef unsigned char BYTE;
typedef unsigned int WORD;

#define FOSC 6000000L

#define T1MS (65536-FOSC/1000)

sfr AUXR=0x8e;
sfr CLK_DIV=0x97;
sbit TEST_LED = P1^5;

WORD count=1000;
WORD innercount=300;

void T0_isr() interrupt 1 using 1
{
TL0= T1MS;
TH0=T1MS>>8;
if(count--==0)
{
count=1000;
if(innercount--==0)
{
TEST_LED=!TEST_LED;
innercount=300;
}
}
}
void main()
{
AUXR=0x80;
CLK_DIV=0x00;
TMOD=0x01;
TL0=T1MS;
TH0=T1MS>>8;
TR0=1;
ET0=1;
EA=1;
while(1);
}

第1个回答  2012-02-20
(1)程序不会超限,但是你要注意。在新建项目的时候不要把A51这个默认的带进来。这样就不会超限了。
(2)你while(1);最好写成这样while(1){;;};让程序进行空操作。
单片机有时候 就是有这样的爱好,非要来点空操作才比较爽。
(3)你时钟要注意,我现在把时间 改得比较短,反正是能运行的。你自己再试试我的程序。

#include"reg51.h"
#include"intrins.h"

#define FOSC 6000

#define T1MS (65536-6000)

sfr AUXR=0x8e;
sfr CLK_DIV=0x97;
sbit TEST_LED = P1^5;

int count=2;
int innercount=2;

void main(void)
{
AUXR=0x80;
CLK_DIV=0x00;
TMOD=0x01;
TL0= T1MS%256;
TH0=T1MS/8;
TR0=1;
ET0=1;
EA=1;
TEST_LED=0;
while(1);
{
;;
}
}

void T0_isr(void) interrupt 1
{
TL0= T1MS%256;
TH0=T1MS/8;
if(count--==0)
{
count=2;
if(innercount--==0)
{
TEST_LED=!TEST_LED;
innercount=2;
}
}
}追问

我的设计思想如下,单片机的P15口通过一个1K的电阻(外部没上拉)连接到一个NPN三极管,通过控制三极管的通断,来控制继电器的吸合与关断,即P15为1继电器线圈吸合,P15为0继电器断开,程序设置P15为推挽输出,每3000次进入定时器中断,即5分钟(300s),改变下P15的状态,如果原来为1变为0,如果为0则为1,但是程序运行后,问题出现了:每隔三百秒,继电器可以瞬间吸合一下,然后又瞬间断开,P15不能维持高电平,麻烦帮忙看看了

追答

可以Q我 402619389

第2个回答  2012-02-09
打开hex文件,显示说超出部分已被去除,那就是程序没有 全部下载进去,这样运行结果 肯定会出差。STC11F01E 为 1K 闪存,以上功能 用 汇编 就不会 有问题。
第3个回答  2012-02-09
这个芯片不太了接!有的芯片有个口是外接存储器的!不使用外接存储器的话要给个高电平的!你的这个你看看有没有这个!!
第4个回答  2012-02-08
复位电路呢?