91视频免费?看_蜜芽MY188精品TV在线观看_国产免费无遮挡在线观看视频_深夜国产_亚洲精品欧洲精品_欧美黑人粗暴多交

核桃設計分享
認證:優質創作者
所在專題目錄 查看專題
看看硬件工程師是如何寫代碼的(一),巧妙的程序!
看看硬件工程師是如何寫代碼的(二),榨干CPU的性能
作者動態 更多
6層板各種堆疊方案對比!
6天前
MIPI接口PCB布局走線注意事項!
1星期前
Altium designer原理圖轉PCB時報錯,出現Unknown Pin時該如何處理?
2星期前
郵票孔和V-CUT到底用哪個?該如何選擇?
2星期前
郵票孔設計規范——知識點積累
2星期前

看看硬件工程師是如何寫代碼的(一),巧妙的程序!

目前本人已經不再寫代碼了,只是想把自己走過的彎路,踩過的坑分享出來,希望更多的小伙伴能看到,少走彎路,僅供參考哈!

回想起來核桃已經很多年沒有敲代碼了,這么多年一直從事硬件工程師這個崗位,相比于軟件的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

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基準時間到

} 

由于核桃很長時間沒有寫代碼了,有不對的地方望小伙伴們能指出來!

還有核桃不是專業寫代碼的,以上僅供參考哈!

好了,這章就先寫到這吧!我們下一章接著嘮!

聲明:本內容為作者獨立觀點,不代表電子星球立場。未經允許不得轉載。授權事宜與稿件投訴,請聯系:editor@netbroad.com
覺得內容不錯的朋友,別忘了一鍵三連哦!
贊 6
收藏 7
關注 182
成為作者 賺取收益
全部留言
0/200
成為第一個和作者交流的人吧
主站蜘蛛池模板: 云阳县| 霍林郭勒市| 宣城市| 孝昌县| 墨脱县| 繁昌县| 哈密市| 剑阁县| 舟山市| 恩施市| 英吉沙县| 葫芦岛市| 肇源县| 莫力| 宾阳县| 南昌县| 象山县| 青海省| 洪江市| 穆棱市| 秭归县| 新竹市| 五台县| 宁德市| 长沙市| 思茅市| 喀喇| 潞西市| 北碚区| 青神县| 开平市| 宁武县| 威远县| 河北省| 乡城县| 那曲县| 湟中县| 遵义县| 湘乡市| 卢湾区| 迁西县|