新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 51單片機教程:單片機邏輯與或異或指令詳解

        51單片機教程:單片機邏輯與或異或指令詳解

        作者: 時間:2012-07-10 來源:網絡 收藏

        8.gif
        圖3

        應用背景介紹:在開發中,經常要用到鍵盤,見上面的9個按鍵的鍵盤。我們的要求是:當按下功能鍵A………..G時去完成不同的功能。這用程序設計的語言來表達的話,就是:按下不同的鍵去執行不同的程序段,以完成不同的功能。怎么樣來實現呢?

        看圖2,前面的程序讀入的是按鍵的值,如按下'A'鍵后獲得的鍵值是0,按下'B'鍵后獲得的值是'1'等等,然后根據不同的值進行跳轉,如鍵值為0就轉到S1執行,為1就轉到S2執行。。。。如何來實現這一功能呢?

        先從程序的下面看起,是若干個AJMP語句,這若干個AJMP語句最后在存儲器中是這樣存放的(見圖3),也就是每個AJMP語句都占用了兩個存儲器的空間,并且是連續存放的。而AJMP S1存放的地址是TAB,到底TAB等于多少,我們不需要知道,把它留給匯編程序來算好了。

        下面我們來看這段程序的執行過程:第一句MOV DPTR,#TAB執行完了之后,DPTR中的值就是TAB,第二句是MOV A,R0,我們假設R0是由按鍵處理程序獲得的鍵值,比如按下A鍵,R0中的值是0,按下B鍵,R0中的值是1,以此類推,現在我們假設按下的是B鍵,則執行完第二條后,A中的值就是1。并且按我們的分析,按下B后應當執行S2這段程序,讓我們來看一看是否是這樣呢?第三條、第四條是將A中的值乘2,即執行完第4條后A中的值是2。下面就執行JMP@A+DPTR了,現在DPTR中的值是TAB,而A+DPTR后就是TAB+2,因此,執行此句程序后,將會跳到TAB+2這個地址繼續執行。看一看在TAB+2這個地址里面放的是什么?就是AJMP S2這條指令。因此,馬上又執行AJMP S2指令,程序將跳到S2處往下執行,這與我們的要求相符合。

        請大家自行分析按下鍵“A”、“C”、“D”……之后的情況。

        這樣我們用JMP @A+DPTR就實現了按下一鍵跳到相應的程序段去執行的這樣一個要求。再問大家一個問題,為什么取得鍵值后要乘2?如果例程下面的所有指令換成LJMP,即:

        LJMP S1,LJMP S2……這段程序還能正確地執行嗎?如果不能,應該怎么改?

        51單片機相關文章:51單片機教程


        單片機相關文章:單片機教程


        單片機相關文章:單片機視頻教程


        單片機相關文章:單片機工作原理



        上一頁 1 2 3 4 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 安国市| 那曲县| 家居| 定陶县| 珲春市| 库伦旗| 平遥县| 鱼台县| 阜康市| 晋城| 云浮市| 麻栗坡县| 乌拉特前旗| 陇川县| 麻阳| 育儿| 岗巴县| 习水县| 天祝| 汕头市| 泸州市| 商河县| 如皋市| 宕昌县| 黑水县| 松阳县| 玉山县| 新巴尔虎左旗| 昭苏县| 桑日县| 乐昌市| 卢湾区| 喜德县| 仪征市| 禄丰县| 贵南县| 鞍山市| 烟台市| 宿松县| 黎川县| 西峡县|