LED=LED++,怎么不能用呢?
时间:10-02
整理:3721RD
点击:
#include<reg51.h>
#define LED P2
int th_0=(65536-50000)/256;
int tl_0=(65536-50000)%256;
int i;
main( )
{
LED=0x00; //全亮
IE=0x82;
TMOD=0x01;
TH0=th_0;
TL0=tl_0;
TR0=1;
while(1);
}
void MY() interrupt 1
{
TH0=th_0;
TL0=tl_0;
i++;
if(i==5)
{
i=0;
LED=LED++; //当LED++是LED全亮,当LED=LED+1时,开始闪烁,为什么呢?
if(LED==0xff)
LED=0;
};
}
#define LED P2
int th_0=(65536-50000)/256;
int tl_0=(65536-50000)%256;
int i;
main( )
{
LED=0x00; //全亮
IE=0x82;
TMOD=0x01;
TH0=th_0;
TL0=tl_0;
TR0=1;
while(1);
}
void MY() interrupt 1
{
TH0=th_0;
TL0=tl_0;
i++;
if(i==5)
{
i=0;
LED=LED++; //当LED++是LED全亮,当LED=LED+1时,开始闪烁,为什么呢?
if(LED==0xff)
LED=0;
};
}
一直全亮?中断没起做用?
LED是定义的P2口,怎么给++?修改下方法
呵呵,谢谢!
肯定要闪烁了,led直接对应的是P2端口;led = led ++,这条语句如果端口起始为0x00;led++先是全亮,然后就加1-->0000 0001,有一个灭掉;紧接着又加1-->0000 0010,第二个led灯灭,;依次循环,像流水灯一样,只不过那个跑动着的灯是灭的!
我们实际操作的是P2口寄存器,所以是可以使用++操作的。
LED=LED++; 在Keil的汇编代码如下:
MOV R7, P2 ; 把P2的值暂放在R7中
INC P2 ; P2自加一
MOV P2, R7 ; 把存储在R7中的值再赋给P2
从以上汇编代码可以看,你的自加操作并未实现。
实际上,你误用了++操作符。
实现某变量自加一操作,只需要这样
int x = 0;
x++;
嗯 楼上说的对 了解了底层的执行过程 你就明白了
遇c头就大啊!