[问答] 老司机解答下,为什么只移动一次,其他的下发的数据都是对的,就流水灯不对?

[复制链接]
发表于 6 天前   175 查看 6 回复 显示全部楼层 倒序浏览
分享

void LedCommunicate()                                                                                       此函数一直在主函数中循环调用

{

    static unsigned char tmp=0xFE;                                                                     

    static unsigned char tmep=0x7F;                                                                  

    switch(RxdByte)                                                                                       RxdByte为串口调试助手下发的数据,一个字节的全局变量

    {

        case 0:LedBuff[6]=0xFF;break;

        case 1:LedBuff[6]=0x00;break;                            //下发1,点亮所有小灯

                case 2:LedBuff[6]=0xF0;break;                   //下发2,3点亮一半小灯

                case 3:LedBuff[6]=0x0F;break;

                case 4:                                                                                             //下发4进行左移流水灯

               {

              if(cnt>=1000)

             {

                                    cnt=0;                                                                                                  cnt为计数器,定时器T0中断服务函数中增加

                                   LedBuff[6]=_crol_(tmp,1);                                                                    小灯1s循环左移一次,但是只移动了一次,逻辑哪里错误了,老司机请求解答 啊?      

                             }            

                            break;

             }

           case 5:                                                     //下发5进行流水灯右移动

           {

                          if(cnt>=1000)

         {

                                   cnt=0;

                                   LedBuff[6]=_cror_(tmep,1);

          }

                          break;

           }

           case 6:BUZZ=0;break;

           case 7:BUZZ=1;break;

           default:break;

    }   

}


//串口中断服务函数                    

void InterruptUART() interrupt 4

{

    if(RI==1)                //接收数据完毕

    {

           RI=0;

           RxdByte=SBUF;      //将接收到的数据送进缓冲区

           SBUF=RxdByte;      //再将缓冲区的数据发送出去

    }

    if(TI==1)

    {

        TI=0;

    }

}

老司机解答下,为什么只移动一次,其他的下发的数据都是对的,就流水灯不对



标签:单片机

试用达人

发表于 5 天前  
你的这个函数是不是放在了主循环里了
回复

点赞 举报

发表于 5 天前    楼主|
对啊。。。。。。。。。。。。。。
回复

点赞 举报

发表于 5 天前    楼主|
jinyi7016 发表于 2018-7-13 13:45
你的这个函数是不是放在了主循环里了

对。。。。。。。
回复

点赞 举报

高级工程师

发表于 5 天前  
对于你现在的程序是当RxdByte=4且cnt>=1000时,LED才会移位一次,如果时想当RxdByte=4时,LED开始自动进行循环移位,那应该时当RxdByte=4时,设置一个标志,LED的循环移位部分放在定时器里,当这个标志有效时,在定时器里进行循环移位
回复

点赞 举报

发表于 4 天前    楼主|
人中狼 发表于 2018-7-13 19:14
对于你现在的程序是当RxdByte=4且cnt>=1000时,LED才会移位一次,如果时想当RxdByte=4时,LED开始自动进行循环移位,那应该时当RxdByte=4时,设置一个标志,LED的循环移位部分放在定时器里,当这个标志有效时,在定时器里进行循环移位 ...

额,感谢感谢。。。。。。。。。。。。
回复

点赞 举报

发表于 4 天前    楼主|
浅笑无花须有时 发表于 2018-7-14 16:40
额,感谢感谢。。。。。。。。。。。。

请问下写入E2PROM中的数据是以什么类型存贮的?010101010101?这种么?
回复

点赞 举报

高级模式
您需要登录后才可以回帖 登录 | 注册

关闭

站长推荐 上一条 /9 下一条

快速回复 返回顶部 返回列表
-

推荐专区

技术干货集中营

专家问答

用户帮助┃咨询与建议┃版主议事

工程师杂谈

项目|工程师创意

招聘|求职}工程师职场

论坛电子赛事

社区活动专版

发烧友活动

-

嵌入式论坛

ARM技术论坛

Android论坛

Linux论坛

单片机/MCU论坛

MSP430技术论坛

FPGA|CPLD|ASIC论坛

STM32/STM8技术论坛

NXP MCU 技术论坛

PIC单片机论坛

DSP论坛

瑞萨单片机论坛

嵌入式系统论坛

-

电源技术论坛

电源技术论坛

无线充电技术

-

硬件设计论坛

PCB设计论坛

电路设计论坛

电子元器件论坛

控制|传感

总线技术|接口技术

-

测试测量论坛

LabVIEW论坛

Matlab论坛

测试测量技术专区

仪器仪表技术专区

-

EDA设计论坛

multisim论坛

PADS技术论坛

Protel|AD|DXP论坛

Allegro论坛

proteus论坛|仿真论坛

EasyEDA-中国人自已的EDA工具

Orcad论坛

-

综合技术与应用

电机控制

智能电网

光电及显示

工程资源中心

汽车电子技术论坛

医疗电子论坛

-

开源硬件

-

无线通信论坛

无线通信技术专区

天线|RF射频|微波|雷达技术

-

IC设计论坛

芯片测试与失效分析

Mixed Signal/SOC[数模混合芯片设计]

Analog/RF IC设计

设计与制造封装测试

-

厂商专区

TI论坛

TI Deyisupport社区

-

检测技术与质量

电磁兼容(EMC)设计与整改

安规知识论坛

检测与认证

-

消费电子论坛

手机技术论坛

平板电脑/mid论坛

音视/视频/机顶盒论坛

-

电子论坛综合区

聚丰众筹官方社区

新人报道区

聚丰供应链

-

论坛服务区

-

供求信息发布

供需广告

电子展览展会专区

芯片求购|供应发布区