查看: 2922|回復: 2
打印 上一主題 下一主題

初學(xué)51單片機幾個(gè)不宜掌握的概念

[復制鏈接]
跳轉到指定樓層
樓主
發(fā)表于 2016-6-17 15:00:20 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
【分享-信盈達】新手必看,初學(xué)51單片機幾個(gè)不易掌握的概念!

    隨著(zhù)電子技術(shù)的迅速發(fā)展,計算機已深入地滲透到我們的生活中,許多電子愛(ài)好者開(kāi)始學(xué)習單片機知識,但單片機的內容比較抽象,相對電子愛(ài)好者已熟悉的模擬電路、數字電路,單片機中有一些新的概念,這些概念非;疽灾劣谝话阕髡卟恍既フ,教材自然也不會(huì )很深入地講解這些概念,但這些內容又是學(xué)習中必須要理解的,下面就結合本人的學(xué)習、教學(xué)經(jīng)驗,對這些最基本概念作一說(shuō)明,希望對自學(xué)者有所幫助。
  一、總線(xiàn):我們知道,一個(gè)電路總是由元器件通過(guò)電線(xiàn)連接而成的,在模擬電路中,連線(xiàn)并不成為一個(gè)問(wèn)題,因為各器件間一般是串行關(guān)系,各器件之間的連線(xiàn)并不很多,但計算機電路卻不一樣,它是以微處理器為核心,各器件都要與微處理器相連,各器件之間的工作必須相互協(xié)調,所以就需要的連線(xiàn)就很多了,如果仍如同模擬電路一樣,在各微處理器和各器件間單獨連線(xiàn),則線(xiàn)的數量將多得驚人,所以在微處理機中引入了總線(xiàn)的概念,各個(gè)器件共同享用連線(xiàn),所有器件的8根數據線(xiàn)全部接到8根公用的線(xiàn)上,即相當于各個(gè)器件并聯(lián)起來(lái),但僅這樣還不行,如果有兩個(gè)器件同時(shí)送出數據,一個(gè)為0,一個(gè)為1,那么,接收方接收到的究竟是什么呢?這種情況是不允許的,所以要通過(guò)控制線(xiàn)進(jìn)行控制,使器件分時(shí)工作,任何時(shí)候只能有一個(gè)器件發(fā)送數據(可以有多個(gè)器件同時(shí)接收)。器件的數據線(xiàn)也就被稱(chēng)為數據總線(xiàn),器件所有的控制線(xiàn)被稱(chēng)為控制總線(xiàn)。在單片機內部或者外部存儲器及其它器件中有存儲單元,這些存儲單元要被分配地址,才能使用,分配地址當然也是以電信號的形式給出的,由于存儲單元比較多,所以,用于地址分配的線(xiàn)也較多,這些線(xiàn)被稱(chēng)為地址總線(xiàn)。

  二、數據、地址、指令:之所以將這三者放在一起,是因為這三者的本質(zhì)都是一樣的──數字,或者說(shuō)都是一串‘0’和‘1’ 組成的序列。換言之,地址、指令也都是數據。指令:由單片機芯片的設計者規定的一種數字,它與我們常用的指令助記符有著(zhù)嚴格的一一對應關(guān)系,不可以由單片機的開(kāi)發(fā)者更改。地址:是尋找單片機內部、外部的存儲單元、輸入輸出口的依據,內部單元的地址值已由芯片設計者規定好,不可更改,外部的單元可以由單片機開(kāi)發(fā)者自行決定,但有一些地址單元是一定要有的(詳見(jiàn)程序的執行過(guò)程)。數據:這是由微處理機處理的對象,在各種不同的應用電路中各不相同,一般而言,被處理的數據可能有這么幾種情況:

1·地址(如MOV DPTR,#1000H),即地址1000H送入DPTR。

2·方式字或控制字(如MOV TMOD,#3),3即是控制字。

3·常數(如MOV TH0,#10H)10H即定時(shí)常數。

4·實(shí)際輸出值(如P1口接彩燈,要燈全亮,則執行指令:MOV P1,#0FFH,要燈全暗,則執行指令:MOV P1,#00H)這里0FFH和00H都是實(shí)際輸出值。又如用于LED的字形碼,也是實(shí)際輸出的值。

理解了地址、指令的本質(zhì),就不難理解程序運行過(guò)程中為什么會(huì )跑飛,會(huì )把數據當成指令來(lái)執行了。

  三、P0口、P2口和P3的第二功能用法初學(xué)時(shí)往往對P0口、P2口和P3口的第二功能用法迷惑不解,認為第二功能和原功能之間要有一個(gè)切換的過(guò)程,或者說(shuō)要有一條指令,事實(shí)上,各端口的第二功能完全是自動(dòng)的,不需要用指令來(lái)轉換。如P3.6、P3.7分別是WR、RD信號,當微片理機外接RAM或有外部I/O口時(shí),它們被用作第二功能,不能作為通用I/O口使用,只要一微處理機一執行到MOVX指令,就會(huì )有相應的信號從P3.6或P3.7送出,不需要事先用指令說(shuō)明。事實(shí)上‘不能作為通用I/O口使用’也并不是‘不能’而是(使用者)‘不會(huì )’將其作為通用I/O口使用。你完全可以在指令中按排一條SETB P3.7的指令,并且當單片機執行到這條指令時(shí),也會(huì )使P3.7變?yōu)楦唠娖,但使用者不?huì )這么去做,因為這通常這會(huì )導致系統的崩潰(即死機)。

  四、程序的執行過(guò)程單片機在通電復位后8051內的程序計數器(PC)中的值為‘0000’,所以程序總是從‘0000’單元開(kāi)始執行,也就是說(shuō):在系統的ROM中一定要存在‘0000’這個(gè)單元,并且在‘0000’單元中存放的一定是一條指令。

  五、堆棧堆棧是一個(gè)區域,是用來(lái)存放數據的,這個(gè)區域本身沒(méi)有任何特殊之處,就是內部RAM的一部份,特殊的是它存放和取用數據的方式,即所謂的‘先進(jìn)后出,后進(jìn)先出’,并且堆棧有特殊的數據傳輸指令,即‘PUSH’和‘POP’,有一個(gè)特殊的專(zhuān)為其服務(wù)的單元,即堆棧指針SP,每當執一次PUSH指令時(shí),SP就(在原來(lái)值的基礎上)自動(dòng)加1,每當執行一次POP指令,SP就(在原來(lái)值的基礎上)自動(dòng)減1。由于SP中的值可以用指令加以改變,所以只要在程序開(kāi)始階段更改了SP的值,就可以把堆棧設置在規定的內存單元中,如在程序開(kāi)始時(shí),用一條MOV SP,#5FH指令,就時(shí)把堆棧設置在從內存單元60H開(kāi)始的單元中。一般程序的開(kāi)頭總有這么一條設置堆棧指針的指令,因為開(kāi)機時(shí),SP的初始值為07H,這樣就使堆棧從08H單元開(kāi)始往后,而08H到1FH這個(gè)區域正是8031的第二、三、四工作寄存器區,經(jīng)常要被使用,這會(huì )造成數據的渾亂。不同作者編寫(xiě)程序時(shí),初始化堆棧指令也不完全相同,這是作者的習慣問(wèn)題。當設置好堆棧區后,并不意味著(zhù)該區域成為一種專(zhuān)用內存,它還是可以象普通內存區域一樣使用,只是一般情況下編程者不會(huì )把它當成普通內存用了。

  六、單片機的開(kāi)發(fā)過(guò)程這里所說(shuō)的開(kāi)發(fā)過(guò)程并不是一般書(shū)中所說(shuō)的從任務(wù)分析開(kāi)始,我們假設已設計并制作好硬件,下面就是編寫(xiě)軟件的工作。在編寫(xiě)軟件之前,首先要確定一些常數、地址,事實(shí)上這些常數、地址在設計階段已被直接或間接地確定下來(lái)了。如當某器件的連線(xiàn)設計好后,其地址也就被確定了,當器件的功能被確定下來(lái)后,其控制字也就被確定了。然后用文本編緝器(如EDIT、CCED等)編寫(xiě)軟件,編寫(xiě)好后,用編譯器對源程序文件編譯,查錯,直到?jīng)]有語(yǔ)法錯誤,除了極簡(jiǎn)單的程序外,一般應用仿真機對軟件進(jìn)行調試,直到程序運行正確為止。運行正確后,就可以寫(xiě)片(將程序固化在EPROM中)。在源程序被編譯后,生成了擴展名為HEX的目標文件,一般編程器能夠識別這種格式的文件,只要將此文件調入即可寫(xiě)片。在此,為使大家對整個(gè)過(guò)程有個(gè)認識,舉一例說(shuō)明:

ORG 0000H

LJMP START

ORG 040H

START:

MOV SP,#5FH ;設堆棧

LOOP:

NOP

LJMP LOOP ;循環(huán)

END ;結束

表1

:03000000020040BB

:0700400075815F000200431F

表2

02 00 40 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 75 81 5F 00 02 00 43

表3

表1為源程序,表2是匯編后得到的HEX文件,表3是由HEX文件轉換成的目標文件,也就是最終寫(xiě)入EPROM的文件,它由編程器轉換得到,也可以由HEXBIN一類(lèi)的程序轉換得到。學(xué)過(guò)手工匯編者應當不難找出表3與表1的一一對應關(guān)系,值得注意的是從02 00 40后開(kāi)始的一長(cháng)串‘FF’,直到75 81,這是由于偽指令:ORG 040H造成的結果。

  七、仿真、仿真機仿真是單片機開(kāi)發(fā)過(guò)程中非常重要的一個(gè)環(huán)節,除了一些極簡(jiǎn)單的任務(wù),一般產(chǎn)品開(kāi)發(fā)過(guò)程中都要進(jìn)行仿真,仿真的主要目的是進(jìn)行軟件調試,當然借助仿真機,也能進(jìn)行一些硬件排錯。一塊單片機應用電路板包括單片機部份及為達到使用目的而設計的應用電路,仿真就是利用仿真機來(lái)代替應用電路板(稱(chēng)目標機)的單片機部份,對應用電路部份進(jìn)行測試、調試。仿真有CPU仿真和ROM仿真兩種,所謂CPU仿真是指用仿真機代替目標機的CPU,由仿真機向目標機的應用電路部份提供各種信號、數據,進(jìn)行調試的方法。這種仿真可以通過(guò)單步運行、連續運行等多種方法來(lái)運行程序,并能觀(guān)察到單片機內部的變化,便于改正程序中的錯誤。所謂ROM仿真,就是用仿真機代替目標機的ROM,目標機的CPU工作時(shí),從仿真機中讀取程序,并執行。這種仿真其實(shí)就是將仿真機當成一片EPROM,只是省去了擦片、寫(xiě)片的麻煩,并沒(méi)有多少調試手段可言。通常這是二種不同類(lèi)型的仿真機,也就是說(shuō),一臺仿真機不能既做CPU仿真,又做ROM仿真?赡艿那闆r下,當然以CPU仿真好。

學(xué)習單片機看到的一篇文章,供大家學(xué)習參考。

更多內容歡迎交流:羅老師QQ2116084661

沙發(fā)
 樓主| 發(fā)表于 2016-7-5 14:56:08 | 只看該作者
xiooozzz 發(fā)表于 2016-7-5 01:15
建議找本微機原理的書(shū)看看,不是很難

嗯 只是相對而言
板凳
發(fā)表于 2016-7-5 01:15:20 | 只看該作者
建議找本微機原理的書(shū)看看,不是很難
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復 返回頂部 返回列表
午夜高清国产拍精品福利|亚洲色精品88色婷婷七月丁香|91久久精品无码一区|99久久国语露脸精品|动漫卡通亚洲综合专区48页