久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4093|回復: 18
打印 上一主題 下一主題
收起左側

51單片機與學校不一樣的編程方式

  [復制鏈接]
跳轉到指定樓層
樓主
ID:235332 發表于 2020-4-1 14:59 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
寫出此主題主要是因為本人之前被學校教的編程方式殘害,所以思量很久,還是想發出此貼,共和大家一起討論話不多少,直接進入正題。
拿一個最簡單得例子,在學校我們寫的最簡單得51單片機的程序肯定都是點亮一個LED了,那么讓LED閃爍可用用的都是亮一下LED,然后延時一下,然后在滅LED,然后再延時,循環往復,達到延時的功能。
程序如下:
void delay(uint m)        //延時程序
{
        uint i,j;
        for(i=110;i>0;i--)
                for(j=m;j>0;j--);        
}
void main()
{
        while(1);
        {
                LED = 0;
                delay(500);
                LED = 1;
                delay(500);
        }
}

這里對于單個模塊來說是沒有問題的,但是一旦幾個模塊組合在一起,時間就不對了,然后延時還會影響到其他程序的運行,所以,在主循環里。我們應當盡量去減少使用延時的情況。需要延時我們應當采用主循環計數的方式去實現,那么在這里,我們就應當設定一個基準,也就是主循環應當多久跑一次呢?有人會問:主循環的時間我們還能設定?在這里其實我們說的是,主循環在跑,但是真正我們執行的功能函數時間我們是可以設定的,話不多說先看程序:
void main()
{
        TMOD=0x01;//定時器工作在方式        
        TH0=(65536-50000)/256;//初值是15536,定時50ms
        TL0=(65536-50000)%256;
        TR0=1;//開始計數
        TF0 = 0;//溢出標志清零
        while(1)//主循環
        {
                        if(TF0)//50ms到了
                        {
                                TF0 = 0;//清零
                                TH0=(65536-50000)/256;//重新賦初值
                                TL0=(65536-50000)%256;
                                V_TempData++;//計數加加
                                if(V_TempData >= 10)//500ms到了
                                {
                                        V_TempData = 0;//清零
                                        P_LEDPort ^= 1; //異或取反
                                }
                        }
        }        
}

在這里,我們簡單的描述了一下,將功能函數設定為50ms跑一次,那么跑十次,就是500ms了,此時再將LED的狀態反轉一下,就可以達到閃爍的小伙了,這里只用到了一個功能,如果增加一個功能,比如讓蜂鳴器響1秒鐘然后滅一秒,就只需要增加一個計數就好了,然后和上面的LED一樣操作就好了,但是如果使用延時,這是不是就會麻煩很多呢?
整個工程和仿真就放在下面附件吧!
樓主初次寫此類文章,不到之處請諒解!!
還請大家有意見評論處指出來討論下!!哈哈哈

全部資料51hei下載地址:
2_定時器0查詢法使LED閃爍.zip (70.38 KB, 下載次數: 3)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂1 踩
回復

使用道具 舉報

沙發
ID:713580 發表于 2020-4-1 18:44 | 只看該作者
你又聰明完了!
怎么能說是殘害呢,第一個是用來入門,提高興趣的,也是對時間精確度要求不高的非精確延時,這個在實際中幾乎不會用到,只是用來講原理,教你如何調試程序,第二個用的是定時器。第一種情況的時間要自己去找斷點調試,勉強達到要求,第二個是現成的,用除法,取余等計算出結果。性質都不一樣。
回復

使用道具 舉報

板凳
ID:695749 發表于 2020-4-1 22:41 | 只看該作者
從入門到工程師的轉變,也是初學都經歷的,謝謝分享!
回復

使用道具 舉報

地板
ID:235200 發表于 2020-4-1 23:46 | 只看該作者
完全造成樓上的說法,學習是循序漸進的,沒有延時作為鋪墊,怎么會有后的定時計時?編程思路是千變萬化的,一個程序完成一個功能就可以了,要移植到另外的程序,肯定還需要統調
回復

使用道具 舉報

5#
ID:217720 發表于 2020-4-2 08:04 | 只看該作者
LZ貼出的內容,正常的高校《單片機原理與接口技術》課程中均會安排對應的教學課時,特別是定時器的使用,屬于萬年不變的期末考重點
回復

使用道具 舉報

6#
ID:424598 發表于 2020-4-2 08:55 來自觸屏版 | 只看該作者
不可能一上來就教定時器,會暈的
回復

使用道具 舉報

7#
ID:47286 發表于 2020-4-2 09:52 | 只看該作者
同6樓 沒教定時器之前都是用死循環 如果上來就講一大堆寄存器 當時就暈菜了
回復

使用道具 舉報

8#
ID:377210 發表于 2020-4-2 12:06 | 只看該作者
大部分都是這樣開始的吧?從簡單延時到定時器中斷延時,都是一步步來的。通過設置不同標志,一個定時器可以多次使用的
回復

使用道具 舉報

9#
ID:388929 發表于 2020-4-2 15:50 | 只看該作者
對初學者來說,第一種是很好理解的,對于程序來說,不涉及跳轉就很容易被理解的,所以并不是學校坑,是你已經入門了,對入門知識有一定既看法,實屬正常
回復

使用道具 舉報

10#
ID:235332 發表于 2020-4-2 18:03 | 只看該作者
716gogo 發表于 2020-4-1 18:44
你又聰明完了!
怎么能說是殘害呢,第一個是用來入門,提高興趣的,也是對時間精確度要求不高的非精確延時 ...

這里只是例舉了最簡單的程序!而且這里想提醒的是正在學習單片機的人,形成一個好的編程方式,而非學成之人!謝謝
回復

使用道具 舉報

11#
ID:235332 發表于 2020-4-2 18:04 | 只看該作者
ssk7793 發表于 2020-4-2 08:55
不可能一上來就教定時器,會暈的

其實我想說的是編程方式,
回復

使用道具 舉報

12#
ID:235332 發表于 2020-4-2 18:05 | 只看該作者
billaj 發表于 2020-4-2 15:50
對初學者來說,第一種是很好理解的,對于程序來說,不涉及跳轉就很容易被理解的,所以并不是學校坑,是你已 ...

是的,主題是想提醒正在學習單片機的人,注意編程方式,養成一個好的習慣
回復

使用道具 舉報

13#
ID:235332 發表于 2020-4-2 18:28 | 只看該作者
csmyldl 發表于 2020-4-1 23:46
完全造成樓上的說法,學習是循序漸進的,沒有延時作為鋪墊,怎么會有后的定時計時?編程思路是千變萬化的, ...

是的  這里只是先舉了個簡單的例子,單一的點燈功能當然使用延時很方便,但是多功能集合就會亂套了不是,只是想先提醒一個要注意編程方式思想
回復

使用道具 舉報

14#
ID:235332 發表于 2020-4-2 18:29 | 只看該作者
ssk7793 發表于 2020-4-2 08:55
不可能一上來就教定時器,會暈的

只是想提醒初學者注意一下,注重編程思想。
回復

使用道具 舉報

15#
ID:601478 發表于 2020-4-3 09:12 | 只看該作者
有多少人在學校學單片機師傅教的是匯編的舉個手
回復

使用道具 舉報

16#
ID:235332 發表于 2020-4-3 10:37 | 只看該作者
PDDDF 發表于 2020-4-3 09:12
有多少人在學校學單片機師傅教的是匯編的舉個手

匯編很高級,但是我沒學過,哈哈
回復

使用道具 舉報

17#
ID:478073 發表于 2020-4-3 12:46 | 只看該作者
billaj 發表于 2020-4-2 15:50
對初學者來說,第一種是很好理解的,對于程序來說,不涉及跳轉就很容易被理解的,所以并不是學校坑,是你已 ...

你說的很對,認識是要一個過程的
回復

使用道具 舉報

18#
ID:282850 發表于 2020-4-3 14:51 | 只看該作者
樓上好多人說的很對,從簡單到復雜是對的。
另外delay并不是一無是處,很多地方還是需要,那此地方一般不需要精度的延時。
  delayms、delayus就好象2個電阻,電阻在電路中是產生熱量的的、浪費電能,但電阻是電路中很重要、很基本的元件。哪怕一塊沒有電阻在上邊,只有IC的PCB板,實際上電阻有很多個在芯片內部。
回復

使用道具 舉報

19#
ID:510365 發表于 2020-4-3 16:16 | 只看該作者
PDDDF 發表于 2020-4-3 09:12
有多少人在學校學單片機師傅教的是匯編的舉個手

一開始學的就是匯編 到現在還是不會c
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 天天久久 | 亚洲国产成人精品久久久国产成人一区 | 性一交一乱一透一a级 | 天天综合干 | 欧美精品第一页 | 狠狠草视频 | 亚洲国产aⅴ精品 | 亚洲乱码一区二区三区在线观看 | 中文字幕在线视频网站 | 99精品视频一区二区三区 | japan25hdxxxx日本 做a的各种视频 | 亚洲精品久久视频 | 狠狠入ady亚洲精品经典电影 | 在线日韩福利 | 国产特黄一级 | 久久一热 | 日韩久久久久 | 日本午夜一区二区三区 | 久久久久久久久99 | 91精品在线播放 | 欧美日韩成人 | 国产一区二区在线播放 | 91精品国产91久久久久久 | 亚洲国产欧美日韩 | 日韩电影在线 | 国产精品久久久久久久久久久久久 | av午夜电影| 久久精品国内 | 日韩亚洲视频 | 国产高清区 | 成人免费视频 | 欧美簧片 | 国产成人精品一区二区三区网站观看 | 色吧色综合 | 午夜av电影 | 欧美激情久久久 | 国产999精品久久久影片官网 | 人人人人干 | 久久国 | 亚洲视频二区 | 久久久久久国产精品免费免费男同 |