在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統 > 設計應用 > 單片機的“語言”規(guī)范

            單片機的“語言”規(guī)范

            作者: 時間:2013-01-26 來源:網絡 收藏
            以上的程序,我們都是用的軟件定時,這對系統來說是不劃算的。因為這樣,CPU絕大部分時間都消耗在了計數上面。實際上CPU還有更重要的事情去處理,我們要把CPU從計數里解放出來。下面我們使用定時器計時來實現我們的電路功能,那么,程序應當怎樣來寫呢?從上面的編程思路框圖中,我們可以看到,LED燈的亮滅有6種狀態(tài),下面是一種編程方法,大家請看編程示例三:

              //程序功能:三個LED燈依次各亮滅1s,用定時器延時

              //第一部分:預定義

              led_light1 bit p0.0 //定義管腳

              led_ light2 bit p0.1

              led_ light3 bit p0.2

              counter equ 30h //定義計數寄存器

              org 0000h //程序開始

              ljmp main

              org 000bh

              ljmp int_t0 //定時器T0中斷入口地址

              org 0030h

              //第二部分:主程序

              main:

              acall init_t0

              ajmp $ //等待中斷

              //第三部分:子程序

              init_t0: ;初始化定時器T0子程序

              mov tmod,#01h

              mov tl0,#low(65536-50000) //50ms初值

              mov th0,#high(65536-50000)

              setb ea

              setb et0

              setb tr0

              mov counter,#0

              mov r2,#0

              ret

              int_t0;定時器T0中斷子程序

              mov tl0,#low(65536-50000)

              mov th0,#high(65536-50000)

              inc counter

              mov r0,counter

              cjne r0,#20,lp1

              mov counter,#00h //12MHz晶振,定時1s

              acall led_flash

              lp1: reti

              led_flash; LED燈閃子程序

              mov dptr,#table //散轉程序

              mov a,r2

              add a,r2

              jmp @a+dptr

              table: ajmp led1

              ajmp led2

              ajmp led3

              ajmp led4

              ajmp led5

              ajmp led6

              led1: clr led_ light1 //led狀態(tài)1

              mov r2,#1

              ajmp lp2

              led2: setb led_ light1 //led狀態(tài)2

              mov r2,#2

              ajmp lp2

              led3: clr led_ light2 //led狀態(tài)3

              mov r2,#3

              ajmp lp2

              led4: setb led_ light2 //led狀態(tài)4

              mov r2,#4

              ajmp lp2

              led5 clr led_ light3 //led狀態(tài)5

              mov r2,#5

              ajmp lp2

              led6: setb led_ light3 //led狀態(tài)6

              mov r2,#0

              clr tr0 //定時器停止計數

              lp2: ret

              end //程序結束

              在這個程序里,大家需要注意這樣幾個問題:

              1.在主程序部分main里,除了初始化T0之外,主程序什么也沒有做,這就對了。因為我們總是強調主程序還要有更重要的事情去處理,所以它要把一些小事情,具體的事情放手給子程序去處理。這就好像我們吃飯時用筷子夾菜,我們不要時時用腦子想"要把夾的菜放進嘴里",我們的手就會自動把菜放進我們的嘴里。因為這樣的小事情就不要再麻煩我們的大腦了,只有這樣把大腦解放出來,我們在吃飯時大腦才可以思考其他的事情,才可以跟其他人交談而又不耽誤吃飯。只有能處理許多復雜的事情,才能夠顯示出它的強大功能來,所以我們在編程時一定注意讓主程序部分少做具體的事,多做指揮的事。

              2.一個完整的程序絕對不是從第一行到最后一行這樣依次寫下來的。我們說的程序由三部分組成,有的語句是在寫程序的時候邊寫邊補充進去的。例如我們在寫定時器定時1s的部分時,需要一個計數存儲單元,于是我們便在"第一部分預定義"里加進了"counter equ 30h "這條語句。如果程序中要使用堆棧,我們還要先給堆棧指針SP賦值,以規(guī)定堆棧棧頂的位置。實際的程序編寫就是如此。

              3.在本程序中,我們使用了散轉語句,其實這樣真有點殺雞用牛刀了。還可以有更簡單的寫法。我們這樣寫,一方面是想讓大家試一試散轉語句的用法,而另一方面是想向大家表明我們只注重方法(程序的寫法)而不強調技巧。

              說到學習,使用C語言編程是大勢所趨。但是話又說回來,單片機的學習畢竟與硬件電路有很多的聯系,而學習匯編語言則會對單片機的硬件結構有更多的了解。所以學習匯編語言與學習C語言并不矛盾。使用C語言編程的,可以了解一下匯編語言,以便更深理解單片機的結構;使用匯編語言編程的,如果想盡快進入應用領域,則應該再學習C語言。而我們這種匯編程序的寫法是與C語言的編程思想完全一致的。

              也就是說有了這種規(guī)范寫法的訓練,再學習C語言,那真是易如反掌。就像你學習開車,學會了開手動檔的汽車,讓你開自動檔的汽車,你會有什么感覺?一定是不在話下吧。但是反過來會怎樣呢?所以從匯編語言學習單片機的朋友不會吃虧,如果再學會了C語言,那真是如虎添翼呢。

              希望我們這種程序的規(guī)范寫法能對正在學習匯編語言的朋友有所幫助。當然,看一兩篇文章并不能夠學會匯編語言,重要的還是多寫多練,才能真正進入單片機編程的殿堂。


            上一頁 1 2 3 下一頁

            評論


            相關推薦

            技術專區(qū)

            關閉