初學單片機幾個不易掌握的概念
作者: admin 文章來源: 伍陸電子 點擊:18103 更新時間:2015-01-25
隨著電子技術的迅速發展,計算機已深入地滲透到我們的生活中,許多電子愛好者開始學習單片機知識,但單片機的內容比較抽象,相對電子愛好者已熟悉的模擬電路、數字電路,單片機中有一些新的概念,這些概念非?;疽灾劣谝话阕髡卟恍既フ?,教材自然也不會很深入地講解這些概念,但這些內容又是學習中必須要理解的,下面就結合本人的學習、教學經驗,對這些最基本概念作一說明,希望對自學者有所幫助。
一、總線:我們知道,一個電路總是由元器件通過電線連接而成的,在模擬電路中,連線并不成為一個問題,因為各器件間一般是串行關系,各器件之間的連線并不很多,但計算機電路卻不一樣,它是以微處理器為核心,各器件都要與微處理器相連,各器件之間的工作必須相互協調,所以就需要的連線就很多了,如果仍如同模擬電路一樣,在各微處理器和各器件間單獨連線,則線的數量將多得驚人,所以在微處理機中引入了總線的概念,各個器件共同享用連線,所有器件的8根數據線全部接到8根公用的線上,即相當于各個器件并聯起來,但僅這樣還不行,如果有兩個器件同時送出數據,一個為0,一個為1,那么,接收方接收到的究竟是什么呢?這種情況是
二、數據、地址、指令:之所以將這三者放在一起,是因為這三者的本質都是一樣的──數字,或者說都是一串‘0’和‘1’組成的序列。換言之,地址、指令也都是數據。指令:由單片機芯片的設計者規定的一種數字,它與我們常用的指令助記符有著嚴格的一一對應關系,不可以由單片機的開發者更改。地址:是尋找單片機內部、外部的存儲單元、輸入輸出口的依據,內部單元的地址值已由芯片設計者規定好,不可更改,外部的單元可以由單片機開發者自行決定,但有一些地址單元是一定要有的(詳見程序的執行過程)。數據:這是由微處理機處理的對象,在各種不同的應用電路中各不相同,一般而言,被處理的數據可能有這么幾種情況:
1·地址(如MOV DPTR,#1000H),即地址1000H送入DPTR。
2·方式字或控制字(如MOV TMOD,#3),3即是控制字。
3·常數(如MOV TH0,#10H)10H即定時常數。
4·實際輸出值(如P1口接彩燈,要燈全亮,則執行指令:MOVP1,#0FFH,要燈全暗,則執行指令:MOV P1,#00H)這里0FFH和00H都是實際輸出值。又如用于LED的字形碼,也是實際輸出的值。
理解了地址、指令的本質,就不難理解程序運行過程中為什么會跑飛,會把數據當成指令來執行了。
三、P0口、P2口和P3的第二功能用法 初學時往往對P0口、P2口和P3口的第二功能用法迷惑不解,認為第二功能和原功能之間要有一個切換的過程,或者說要有一條指令,事實上,各端口的第二功能完全是自動的,不需要用指令來轉換。如P3.6、P3.7分別是WR、RD信號,當微片理機外接RAM或有外部I/O口時,它們被用作第二功能,不能作為通用I/O口使用,只要一微處理機一執行到MOVX指令,就會有相應的信號從P3.6或P3.7送出,不需要事先用指令說明。事實上‘不能作為通用I/O口使用’也并不是‘不能’而是(使用者)‘不會’將其作為通用I/O
四、程序的執行過程 單片機在通電復位后8051內的程序計數器(PC)中的值為‘0000’,所以程序總是從‘0000’單元開始執行,也就是說:在系統的ROM中一定要存在‘0000’這個單元,并且在‘0000’單元中存放的一定是一條指令。
五、堆棧 堆棧是一個區域,是用來存放數據的,這個區域本身沒有任何特殊之處,就是內部RAM的一部份,特殊的是它存放和取用數據的方式,即所謂的‘先進后出,后進先出’,并且堆棧有特殊的數據傳輸指令,即‘PUSH’和‘POP’,有一個特殊的專為其服務的單元,即堆棧指針SP,每當執一次PUSH指令時,SP就(在原來值的基礎上)自動加1,每當執行一次POP指令,SP就(在原來值的基礎上)自動減1。由于
六、單片機的開發過程 這里所說的開發過程并不是一般書中所說的從任務分析開始,我們假設已設計并制作好硬件,下面就是編寫軟件的工作。在編寫軟件之前,首先要確定一些常數、地址,事實上這些常數、地址在設計階段已被直接或間接地確定下來了。如當某器件的連線設計好后,其地址也就被確定了,當器件的功能被確定下來后,其控制字也就被確定了。然后用文本編緝器(如EDIT、CCED等)編寫軟件,編寫好后,用編譯器對源程序文件編譯,查錯,直到沒有語法錯誤,除了極簡單的程序外,一般應用仿真機對軟件進行調試,直到程序運行正確為止。運行正確后,就可以寫片(將程序固化在EPROM中)。在源程序被編譯后,生成了擴展名為HEX的目標文件,一般編程器能夠識別這種格式的文件,只要將此文件調入即可寫片。在此,為使大家對整個過程有個認識,舉一例說明:
ORG 0000H
LJMP START
ORG 040H
START:
MOV SP,#5FH ;設堆棧
LOOP:
NOP
LJMP LOOP ;循環
END ;結束
表1
:03000000020040BB
:0700400075815F000200431F
表2
02 00 40 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
表3
表1為源程序,表2是匯編后得到的HEX文件,表3是由HEX文件轉換成的目標文件,也就是最終寫入EPROM的文件,它由編程器轉換得到,也可以由HEXBIN一類的程序轉換得到。學過手工匯編者應當不難找出表3與表1
七、仿真、仿真機 仿真是單片機開發過程中非常重要的一個環節,除了一些極簡單的任務,一般產品開發過程中都要進行仿真,仿真的主要目的是進行軟件調試,當然借助仿真機,也能進行一些硬件排錯。一塊單片機應用電路板包括單片機部份及為達到使用目的而設計的應用電路,仿真就是利用仿真機來代替應用電路板(稱目標機)的單片機部份,對應用電路部份進行測試、調試。仿真有CPU仿真和ROM仿真兩種,所謂CPU仿真是指用仿真機代替目標機的CPU,由仿真機向目標機的應用電路部份提供各種信號、數據,進行調試的方法。這種仿真可以通過單步運行、連續運行等多種方法來運行程序,并能觀察到單片機內部的變化,便于改正程序中的錯誤。所謂 ROM仿真,就是用仿真機代替目標機的ROM,目標機的CPU工作時,從仿真機中讀取程序,并執行。這種仿真其實就是將仿真機當成一片EPROM,只是省去了擦片、寫片的麻煩,并沒有多少調試手段可言。通常這是二種不同類型的仿真機,也就是說,一臺仿真機不能既做CPU仿真,又做ROM仿真??赡艿那闆r下,當然以CPU仿真好。