功能是两个定时器,T0控制P10,T1控制P17,分别亮灭。下面的程序在仿真器上看到效果,但烧到AT89S52上就根本不亮。
sbit p1 = P1 ^ 0; sbit p2 = P1 ^ 7;
void action_0();
void action_1();
unsigned long round0 = 5000, round1 = 900;
char code urcllr[3] _at_ 0x003b;
void main()
{
TMOD |= 2;
TL0 = TH0 = TF0 = 0;
TR0 = ET0 = 1;
TMOD |= 32;
TL1 = TH1 = TF1 = 0;
TR1 = ET1 = 1;
EA = 1;
while(1) ;
}
void action_0() interrupt 1
{
if(--round0 == 0)
{
round0 = 5000;
p1 = ~p1;
}
}
void action_1() interrupt 3
{
if(--round1 == 0)
{
round1 = 900;
p2 = ~p2;
}
}
此帖出自
小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
其实我上面提问的程序是精简化了的。我要用的程序的功能不是这么简单的,data区占了180多B,超出S52的128B,一开始就是在默认的variables in data模式编译不过,切换成pdata才编译通过。想不到仿真和真机的这个区别导致我以为是定时器这部分出问题。现在看来我要把一些函数里的变量变成公共变量才能在S52上运行了。
不过都是多谢大家的回答咯。
一周热门 更多>