<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 單片機(jī)的“語(yǔ)言”規(guī)范

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

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

            //程序功能:三個(gè)LED燈依次各亮滅1s,用定時(shí)器延時(shí)

            //第一部分:預(yù)定義

            led_light1 bit p0.0 //定義管腳

            led_ light2 bit p0.1

            led_ light3 bit p0.2

            counter equ 30h //定義計(jì)數(shù)寄存器

            org 0000h //程序開(kāi)始

            ljmp main

            org 000bh

            ljmp int_t0 //定時(shí)器T0中斷入口地址

            org 0030h

            //第二部分:主程序

            main:

            acall init_t0

            ajmp $ //等待中斷

            //第三部分:子程序

            init_t0: ;初始化定時(shí)器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;定時(shí)器T0中斷子程序

            mov tl0,#low(65536-50000)

            mov th0,#high(65536-50000)

            inc counter

            mov r0,counter

            cjne r0,#20,lp1

            mov counter,#00h //12MHz晶振,定時(shí)1s

            acall led_flash

            lp1: reti

            led_flash; LED燈閃子程序

            mov dptr,#table //散轉(zhuǎn)程序

            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 //定時(shí)器停止計(jì)數(shù)

            lp2: ret

            end //程序結(jié)束

            在這個(gè)程序里,大家需要注意這樣幾個(gè)問(wèn)題:

            1.在主程序部分main里,除了初始化T0之外,主程序什么也沒(méi)有做,這就對(duì)了。因?yàn)槲覀兛偸菑?qiáng)調(diào)主程序還要有更重要的事情去處理,所以它要把一些小事情,具體的事情放手給子程序去處理。這就好像我們吃飯時(shí)用筷子夾菜,我們不要時(shí)時(shí)用腦子想"要把夾的菜放進(jìn)嘴里",我們的手就會(huì)自動(dòng)把菜放進(jìn)我們的嘴里。因?yàn)檫@樣的小事情就不要再麻煩我們的大腦了,只有這樣把大腦解放出來(lái),我們?cè)诔燥垥r(shí)大腦才可以思考其他的事情,才可以跟其他人交談而又不耽誤吃飯。只有能處理許多復(fù)雜的事情,才能夠顯示出它的強(qiáng)大功能來(lái),所以我們?cè)诰幊虝r(shí)一定注意讓主程序部分少做具體的事,多做指揮的事。

            2.一個(gè)完整的程序絕對(duì)不是從第一行到最后一行這樣依次寫(xiě)下來(lái)的。我們說(shuō)的程序由三部分組成,有的語(yǔ)句是在寫(xiě)程序的時(shí)候邊寫(xiě)邊補(bǔ)充進(jìn)去的。例如我們?cè)趯?xiě)定時(shí)器定時(shí)1s的部分時(shí),需要一個(gè)計(jì)數(shù)存儲(chǔ)單元,于是我們便在"第一部分預(yù)定義"里加進(jìn)了"counter equ 30h "這條語(yǔ)句。如果程序中要使用堆棧,我們還要先給堆棧指針SP賦值,以規(guī)定堆棧棧頂?shù)奈恢谩?shí)際的程序編寫(xiě)就是如此。

            3.在本程序中,我們使用了散轉(zhuǎn)語(yǔ)句,其實(shí)這樣真有點(diǎn)殺雞用牛刀了。還可以有更簡(jiǎn)單的寫(xiě)法。我們這樣寫(xiě),一方面是想讓大家試一試散轉(zhuǎn)語(yǔ)句的用法,而另一方面是想向大家表明我們只注重方法(程序的寫(xiě)法)而不強(qiáng)調(diào)技巧。

            說(shuō)到學(xué)習(xí),使用C語(yǔ)言編程是大勢(shì)所趨。但是話又說(shuō)回來(lái),單片機(jī)的學(xué)習(xí)畢竟與硬件電路有很多的聯(lián)系,而學(xué)習(xí)匯編語(yǔ)言則會(huì)對(duì)單片機(jī)的硬件結(jié)構(gòu)有更多的了解。所以學(xué)習(xí)匯編語(yǔ)言與學(xué)習(xí)C語(yǔ)言并不矛盾。使用C語(yǔ)言編程的,可以了解一下匯編語(yǔ)言,以便更深理解單片機(jī)的結(jié)構(gòu);使用匯編語(yǔ)言編程的,如果想盡快進(jìn)入應(yīng)用領(lǐng)域,則應(yīng)該再學(xué)習(xí)C語(yǔ)言。而我們這種匯編程序的寫(xiě)法是與C語(yǔ)言的編程思想完全一致的。

            也就是說(shuō)有了這種規(guī)范寫(xiě)法的訓(xùn)練,再學(xué)習(xí)C語(yǔ)言,那真是易如反掌。就像你學(xué)習(xí)開(kāi)車(chē),學(xué)會(huì)了開(kāi)手動(dòng)檔的汽車(chē),讓你開(kāi)自動(dòng)檔的汽車(chē),你會(huì)有什么感覺(jué)?一定是不在話下吧。但是反過(guò)來(lái)會(huì)怎樣呢?所以從匯編語(yǔ)言學(xué)習(xí)單片機(jī)的朋友不會(huì)吃虧,如果再學(xué)會(huì)了C語(yǔ)言,那真是如虎添翼呢。

            希望我們這種程序的規(guī)范寫(xiě)法能對(duì)正在學(xué)習(xí)匯編語(yǔ)言的朋友有所幫助。當(dāng)然,看一兩篇文章并不能夠?qū)W會(huì)匯編語(yǔ)言,重要的還是多寫(xiě)多練,才能真正進(jìn)入單片機(jī)編程的殿堂。


          上一頁(yè) 1 2 3 下一頁(yè)

          評(píng)論


          相關(guān)推薦

          技術(shù)專(zhuān)區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();