微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > LED=LED++,怎么不能用呢?

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;
};
}

一直全亮?中断没起做用?

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头就大啊!

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top