您好,欢迎来到步遥情感网。
搜索
您的当前位置:首页看看硬件工程师是如何写代码的(一),巧妙的程序!

看看硬件工程师是如何写代码的(一),巧妙的程序!

来源:步遥情感网

 更多电路设计,分享及分析,可关注本人微信公众号“核桃设计分享”!

连载系列文章,欢迎点赞收藏关注,不迷路!

目前本人已经不再写代码了,只是想把自己走过的弯路,踩过的坑分享出来,希望更多的小伙伴能看到,少走弯路,仅供参考哈

回想起来核桃已经很多年没有敲代码了,这么多年一直从事硬件工程师这个岗位,相比于软件的ABCD,我更倾向于原理图的设计与PCB,喜欢折腾

,喜欢松香的味道。

但是,刚毕业那会,要想得到更多的机会,只能硬着头皮学硬件和软件,大概有一年左右的时间吧,都是一个人兼顾软件和硬件,自己画板,自己调代码!

说实话,只有自己写代码调试自己的板子,才能更加清楚的认识到自己的板卡还有哪些可以优化地方,对于以后从事硬件工程师的岗位益处良多!

我们先来看一段51单片机的点灯程序,如下:

void main(void)

while(1)

  {

     LED=0;

     delayms(100);

     LED=1;

    delayms(100);

    }

}

程序是非常简单的,相信很多小伙伴刚开始学的时候都是这样写的,程序一样是可以正常运行的,那这段程序有什么问题呢?

可以看的出来,整个大循环里面除了LED=0和LED=1外,剩下的就是 delayms(100);这个延时函数,是一直让CPU处于等待的状态,啥事都干不了,一直空耗着CPU的资源。

思考问题:
如果只是为了点亮一颗LED,这样写是没问题的,但是实际的项目中不可能用一个CPU啥事都不干,就为了点灯,我相信没有哪个老板肯让你这么浪费

,所以我们首要做的就是:

把CPU释放出来,哪怕让它一遍一遍的扫描有什么任务可以执行,也不要让它一直在空等待!

那该如何实现?

具体思路:

从上面的程序可以知道,延时的时间是delayms(100),也就是100ms,那我们可以为系统加入一个1ms的基准时间,然后再对这个基准时间进行计数100次,达到100次后,清理该计数值,再对LED的状态进行转换即可!

大概程序如下:

#include<reg52.h>

sbit LED=P1^0;   //定义LED管脚

bit 1mscriterion=0;//1ms时间基准

unsigned int 1mscount=0;//1ms基准时间计数变量

unsigned char LEDsign=0;//LED状态变量,0为点亮,1为熄灭

void Time0int(void)

   TMOD &= 0xf0 ;

   TMOD |= 0x01 ; //定时器 0 工作方式 1

   TH0 = 0xfc ; //定时器初始值

   TL0 = 0x66 ;

   TR0 = 1 ;

   ET0 = 1 ;

}

void LEDcontrol()

{

    if(LEDsign==0)

       {

          LED=0;//LED点亮

       }

    else

      {

         LED=1;//LED熄灭

      }

}

void LEDStateful Switch(void)

{

   if(1mscriterion)  //1ms基准时间到

    {

        1mscriterion=0;先清零

        1mscount++;//LED计数器加1

        if(1mscount>=100) //计数达到100,证明100ms已经到了

         {

             1mscount=0;//一定要先清零

              LEDsign=!LEDsign;//LED状态取反

          }

     }

}

void main(void)

{

 Time0int();

  EA=1;

  while(1)

   {

      LEDcontrol();

      LEDStateful Switch();

    }

}

void Time01ms(void)interrupt 1

{

   TH0=0xfc;  //重新赋值

   TL0=0x66;

   1mscriterion=1; //1ms基准时间到

由于核桃很长时间没有写代码了,有不对的地方望小伙伴们能指出来!如果想系统的学习C语言的,可以到B站观看“小智学长”的开源教程,或者直接戳这里:

https://www.bilibili.com/video/BV1C4421U7c2/?spm_id_from=333.999.0.0&vd_source=5f8281657f114a37116180800654c4ec

还有核桃不是专业写代码的,以上仅供参考哈!

好了,这章就先写到这吧!我们下一章接着唠!

如果本文对你有所帮助,欢迎点赞关注

你们的支持就是我创作最大的动力

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- obuygou.com 版权所有 赣ICP备2024042798号-5

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务