Tacking

  • 2024-05-31
  • 回复了主题帖: 定时器实现流水灯设计时,运用循环左移函数遇到一个很奇葩的问题

    damiaa 发表于 2024-5-31 14:09 你如果实在很在意这个问题,你可以看看它产生的汇编语言。也许可以得到答案。   好的,非常感谢!

  • 回复了主题帖: 定时器实现流水灯设计时,运用循环左移函数遇到一个很奇葩的问题

    damiaa 发表于 2024-5-31 12:15 你这是直接访问啊。不是做形参。   那这个里面P2是不是也属于形参?但是这个代码运行正常,所以我都懵了

  • 回复了主题帖: 定时器实现流水灯设计时,运用循环左移函数遇到一个很奇葩的问题

    damiaa 发表于 2024-5-31 12:15 你这是直接访问啊。不是做形参。 理解了,这个写在了main主函数里。非常感谢!

  • 回复了主题帖: 定时器实现流水灯设计时,运用循环左移函数遇到一个很奇葩的问题

    dcexpert 发表于 2024-5-30 21:03 了解一下 51 单片机的端口读-修改-写 非常感谢回复,我这边仔细看了下,但是还是有些迷糊。是不是直接操作P2口读取的是端口而不是寄存器,P2口的状态一直在变化。而另外一直增加temp变量的方式,是通过寄存器来作为中间值,寄存器的状态可以锁存住? 但是我在网上看教程时,下面图片里也是直接对P2口操作的,视频又可以实现循环左右移,所以我很困惑  

  • 回复了主题帖: 定时器实现流水灯设计时,运用循环左移函数遇到一个很奇葩的问题

    damiaa 发表于 2024-5-31 09:18 据说51单片机IO口不能做形参。   那这里直接对P2口的某一位取反,它又可以实现亮灭,这是为啥呀?

  • 2024-05-30
  • 回复了主题帖: 定时器实现流水灯设计时,运用循环左移函数遇到一个很奇葩的问题

    A视频是增加了变量的,B视频是直接用P2口的。让我很是迷惑,这有什么区别吗?难道不能直接对P2口操作?

  • 发表了主题帖: 定时器实现流水灯设计时,运用循环左移函数遇到一个很奇葩的问题

    我今天在用keil写定时器0配合循环左移函数_crol_实现流水灯操作时,直接对P2口操作还不行,得增加一个变量才可以!但是我单步调试时通过watch窗口看到P2的值确实是在左移,但是Proteaus里的LED灯就只是第一个闪烁下,后面就都不亮了。但是增加一个变量temp后,再赋值给P2,Proteaus里的LED就能实现流水灯模式。不知道问题出在哪里?代码如下:  

  • 回复了主题帖: 单片机Proteaus仿真时,复位电路不工作原因分析

    非常感谢各位大佬的解惑,终于明白啦!

  • 2024-05-24
  • 发表了主题帖: 单片机Proteaus仿真时,复位电路不工作原因分析

    我在进行Proteaus仿真单片机时,最小工作系统里的复位电路不工作,电路图如下所示:   这里发现电压不对,RST无法进行复位操作。   当我把电阻由10K改为100Ω时,复位电路工作正常了,电压也正常了,如下图:     请了解的大帅们告知下,为啥改为100Ω就正常了。是不是因为Proteaus仿真时,那个时间是按照晶振的12MHz去计算的,所以10K电阻算下来的充放电时间是0.1s,现实生活中很短,但是实际Proteaus仿真时,这个时间特别长,电容一直处于充电状态。

  • 回复了主题帖: 学习C51 LED流水灯时,自己写了一段代码,其中有一句软件不执行,直接跳过了。

    suiyue9528 发表于 2024-5-23 09:51 P3_0的状态为1时,会执行P2_0=P2_0,这里改为P2_0=~P2_0,就可以反转电平了 我那段代码的想法就是,P3_0状态为1时,P2_0状态保持不变,当P3_0状态为0时,P2_0状态翻转。执行结果发现else那句加上后,状态不能翻转了,P2_0一直保持状态不变。去掉else语句后,就可以正常翻转了。

  • 回复了主题帖: 学习C51 LED流水灯时,自己写了一段代码,其中有一句软件不执行,直接跳过了。

    damiaa 发表于 2024-5-22 13:01 LEDNum<<=1; LEDNum=LEDNum<<1;应该一样吧。你试试。 LEDNum<<=1跟LED=LEDNum<<1确实是一样的,我之前写成了LEDNum<<1,没有加“=”,编译时这句老是被程序优化掉不执行,改为LEDNum<<=1,确实就可以了。学习啦,非常感谢,原来是我语法错误。

  • 2024-05-22
  • 回复了主题帖: 学习C51 LED流水灯时,自己写了一段代码,其中有一句软件不执行,直接跳过了。

    Tacking 发表于 2024-5-21 17:59 我今天在学习按键控制LED亮灭代码时,用的if...else...语句,代码如下: void main() {    ... 这个问题还请了解的告知下,非常感谢

  • 2024-05-21
  • 回复了主题帖: 学习C51 LED流水灯时,自己写了一段代码,其中有一句软件不执行,直接跳过了。

    suiyue9528 发表于 2024-5-21 10:30 无符号LEDNum=0x01一直左移,最大值为0x80,怎么可能大于等于0x81?问题就出在这里。当达到了0x80,再左移 ... 我今天在学习按键控制LED亮灭代码时,用的if...else...语句,代码如下: void main() {     while(1)     {         if(P3_0==0)         {             Delay(20);             while(P3_0==0);             Delay(20);             P2_0=~P2_0;         } //        else //            P2_0=P2_0;     } } 在执行时发现加上最后else语句时,按键按下去控制不了LED亮灭,P2_0的状态一直不变,反倒是去掉else语句,反而就正常了!还请指导下,这是为啥?if后面难道不接else语句吗?

  • 回复了主题帖: 学习C51 LED流水灯时,自己写了一段代码,其中有一句软件不执行,直接跳过了。

    suiyue9528 发表于 2024-5-21 10:30 无符号LEDNum=0x01一直左移,最大值为0x80,怎么可能大于等于0x81?问题就出在这里。当达到了0x80,再左移 ... 非常感谢您,醍醐灌顶!后面改过来就好了。

  • 回复了主题帖: 学习C51 LED流水灯时,自己写了一段代码,其中有一句软件不执行,直接跳过了。

    谢谢各位,问题找到了,应该写成:LEDNum=LEDNum<<1;LEDNum只是左移了一位,左移之后不重新对LEDNum赋值的话,LEDNum这个值一直保持不变,所以就被优化了,改成赋值语句后,就没问题了,可以执行了。非常感谢

  • 2024-05-20
  • 发表了主题帖: 学习C51 LED流水灯时,自己写了一段代码,其中有一句软件不执行,直接跳过了。

    #include <REGX52.H> unsigned char LEDNum;    //定义一个无符号字符型变量LEDNum /*定义一个无符号整型n,可以设置任意延时时常,基于1ms延时的倍数*/ void Delay(unsigned int n)        //@12.000MHz {     unsigned char i, j;     while(n--)     {         i = 2;         j = 239;         do         {             while (--j);         } while (--i);     } } /*主函数*/ void main() {     LEDNum=0x01;     while(1)     {         if(LEDNum>=0x81)             LEDNum=0x01;             else         {                 LEDNum<<1;             P2=~LEDNum;             Delay(500);         }         } }   本意是:定义了一个无符号型字符LEDNum,初始赋值0000 0001,然后条件语句判断,如果LEDNum大于1000 0001时,就重新赋值0000 0001,如果没到1000 0001时,执行LEDNum<<1,左移一位,但是这句我在单步执行时发现被忽略了,没被执行,所以最终结果也不对,还请高手帮忙指出问题原因,本人新手,万分感激

  • 2024-03-25
  • 发表了主题帖: AD5522芯片应用

    寻找有使用过AD5522来设计SMU的小伙伴!公司有项目可以进行合作!

最近访客

现在还没有访客

< 1/0 >

统计信息

已有--人来访过

  • 芯积分:37
  • 好友:--
  • 主题:4
  • 回复:13

留言

你需要登录后才可以留言 登录 | 注册


现在还没有留言