第一篇:單片機實驗期末小結
上海大學
電氣工程及其自動化
宋 凱 11121676
單片機實踐課程小結
姓 名: 宋 凱
學 號: 11121676
專 業: 電氣工程及其自動化
任課老師:
高守瑋
上海大學
電氣工程及其自動化
宋 凱 11121676
單片機實踐課程總結
轉眼之間,六次的單片機實驗課程已經結束了,在此期間,我遇到了很多難題,不過也收獲了許多,真的十分慶幸這學期選修了《單片機原理及應用》這門課程。單片機課程的學習只是書本理論肯定是遠遠不夠的,想要學好單片機,必須要多動手實踐。本學期這六次試驗,從淺入深,由易到難,循序漸進地讓我對單片機的內部結構,應用原理,編程方法有了一個更為清晰透徹的理解。下面我就談一下我這學期的心得和一些收獲。
首先是仿真器及實驗平臺的使用這一課,可以說是入門課,目的就是為了讓我們了解仿真系統的基本構成和使用方法。本節課重點之一就是用keil軟件進行程序編寫和手動調試,只有學會調試,才可以找到自己程序的不足或者是錯誤之處,才可以不斷改進。重點之二就是老師詳細向我們講解了MCS51內部寄存器的分布以及使用方法。
通過接下來的很多實驗,我收獲了很多關于單片機的知識,并且這些知識和日常的生活息息相關。了解了一些簡單程序的錄入,LED數碼管、鍵盤掃描、定時器,數模轉換等等。
總的來說這學期的實驗,我認為最重要的就是做好程序調試,認真的研究老師給的題目。其次,老師對實驗的講解要一絲不茍的去聽去想,因為只有都明白了,做起實驗就會事半功倍,如果沒弄明白,就迷迷糊糊的去做,到頭來一點收獲也沒有。最后,要重視程序的模塊化,修改的方便,也要注重程序的調試,掌握其方法。
雖然每次的實驗只在實驗室呆半天,不過因為我有自己的實驗板,所以自己在宿舍也沒事就拿出來擺弄擺弄。當看到自己經過努力把一個程序調試成功的時候,會有一種成就感油然而生的,這也是我喜歡單片機的原因。
當然,這其中也有很多問題,第一、不夠細心比如由于粗心大意編寫格式錯誤,由于對課本理論的不熟悉導致編程出現錯誤。第二,是在學習態度上,這次實驗是對我的學習態度的一次檢驗。對于這次單片機實驗,我的第一大心得體會就是作為一名工科生,以后可能要走向技術崗位,要求具備的首要素質絕對應該是嚴謹。我們這次實習所遇到的多半問題多數都是由于我們不夠嚴謹。第三,在做人上,我認識到,無論做什么事情,只要你足夠堅強,有足夠的毅力與決心,有足夠的挑戰困難的勇氣,就沒有什么辦不到的。
通過這次單片機實驗,我不僅加深了對單片機理論的理解,將理論很好地應用到實際當
上海大學
電氣工程及其自動化
宋 凱 11121676 中去,而且我還學會了如何去培養我們的創新精神,從而不斷地戰勝自己,超越自己。創新可以是在原有的基礎上進行改進,使之功能不斷完善,成為真己的東西。
記得在數字量和模擬量轉換的試驗中,老師提出了新的要求,就是要在電機轉動過程中能夠循環轉換0809的通道,并且能夠實時顯示出來,這個設計過程中,我們通過在原有的程序上進行了改進,增添了一個循環結構,經過反復調試,使程序符合了要求,我們不只在乎這一結果,更加在乎的,是這個過程。這個過程中,我們花費了大量的時間和精力,更重要的是,我們在學會創新的基礎上,同時還懂得合作精神的重要性,學會了與他人合作。作為一名自動化專業的大三學生,我覺得做單片機實驗是十分必要的。在已度過的大學時間里,我們大多數接觸的是專業課。我們在課堂上掌握的僅僅是專業課的理論知識,如何去鍛煉我們的實踐能力?如何把我們所學的專業基礎課理論知識運用到實踐中去呢?我想做類似實踐課程就為我們提供了良好的實踐平臺。
最后,在實習之前,我們要對所用單片機的內部結構有一個系統的了解,知道該單片機內有哪些資源;要有一個清晰的思路和一個完整的的軟件流程圖;在設計程序時,不能妄想一次就將整個程序設計好,反復修改、不斷改進是程序設計的必經之路;要養成注釋程序的好習慣,一個程序的完美與否不僅僅是實現功能,而應該讓人一看就能明白你的思路,這樣也為資料的保存和交流提供了方便;在實習過程中遇到問題是很正常的,但我們應該將每次遇到的問題記錄下來,并分析清楚,以免下次再碰到同樣的問題。只有這樣我們才能不斷提高和進步。
第二篇:單片機實驗小結
單片機實驗小結
這學期的單片機實驗課程已經結束了,雖然做的實驗是比較簡答的,但麻雀雖小五臟俱全,因此自己也通過實驗課學到了很多知識。
單片機實驗課是為了更好的學習單片機使用單片機而開設的一門課程。單片機在實際生活中的應用非常廣泛,尤其是在工業控制、網絡通信、模塊化系統和汽車電子等領域。因此,單片機課程是電子信息類專業學生的必修課之一。由此,可以看出單片機課程對于這類專業學生的重要性。
單片機課是一門實踐性很強的課程,僅有課堂上理論知識的學習,對運用好單片機是完全不夠的,必須親自做實驗,從實驗中吸取教訓,總結經驗,增加實戰經驗,加深對單片機的理解,更好的運用單片機。單片機實驗課的目的就是為學生提供做實驗的機會,讓學生能夠從幾個簡單的實驗中學會單片機開發的過程和單片機的實際運用。
單片機實驗課讓我將課堂上學到的理論知識運用到實驗當中去,在實驗中發現問題,解決問題,強化理論知識的運用。下面是自己做實驗當中遇到的一些問題和體會。
首先,自己在實驗課上對老師講解的東西沒有很好的領會。自己覺得老師講的電路和原理自己都懂,就沒有認真聽老師的講解,但是當自己去理解程序和修改程序就發現自己對電路的工作原理和過程并不是很了解,使得自己在改編程序實現不同功能時遇到較多的問題。
其次,自己對匯編語言的運用不是很熟練。自己之前接觸和使用的編程語言都是諸如C語言等的高級語言,對匯編語言基本上是空白狀態。雖然每個實驗老師都給出了參考程序,但是自己理解整個程序的運行過程和程序的功能依然遇到了比較大的困難。這就說明基礎薄弱是實驗中最大的問題。
最后,也是最突出的一個問題。自己邏輯思維和分析問題的能力比較欠缺。對程序的分析能力不足,不能夠很好的理解程序段之間的邏輯關系。同時,自己對實驗中遇到的問題不能及時分析并找出解決的辦法,知識一味的依賴老師的指導和同學的幫助。這也提醒自己,只有多加強鍛煉,才能不斷提高這方面的能力。
單片機實驗課學生人數眾多,課程資源有限,只有一個老師指導,老師是非常辛苦的。同時,因為資源的限制,并不是每個人都可以親自操作的,這也就限制了同學們的積極性,出現了有些學生出工不出力的現象。因此,我建議可以限制選課的人數或者是調整時間段,避開大家的專業課時間,使每個時間段的學生人數比較合理,以達到最好的教學效果。
最后,還是要感謝一下老師的辛勤指導。這么多的學生,眾口難調,老師只能滿足大多數學生的需求,老師在這個過程中付出的辛勤勞動我們大家是有目共睹的,在這里,要向老師表示敬意。
第三篇:單片機實驗
實驗
一、MCS51單片機基本開發環境
1. 實驗目的:
1)熟悉軟件的集成開發環境 2)掌握單片機軟件設計流程
3)掌握單片機存貯器結構及各窗口之間的聯系 2. 實驗內容:
1)用三種方法實現將累加器A內容改為20H
方法1--MOV A,#20H 方法2—MOV R0,#20H MOV A,R0 方法3—MOV R0,#20H XCH A,R0 心得:越往下做實驗時就越感覺這題根本不能說是題目,但不得不說在沒接觸過編程軟件,剛開始學的匯編,第一次做的實驗就光這道題都覺得不知道做什么.所以凡是總有開始,不了解情況的多簡單的都會覺得難.2)將58H位單元置為1,觀察內部RAM中2BH內容的變化 代碼:
SETB 2BH.0 JMP $ END 心得:這是關于內部存儲中對單元和字節了解,不理解很容易做錯.比如開始寫的指令為
MOV R0,#58H;MOV @R0,#1
這是錯誤的指令。這就需要認真去了解單片機中的字節地址與位地址的關系。80C51中有位尋址區和字節尋址區。題目中58H為位地址,2BH為字節地址,且58H為2B字節的最低位。由于58H屬于位尋址區,可用位操作指令 SETB 進行置位,SETB 2BH.0 執行后,2BH中內容變為01
3)如果當前狀態為有進位、工作寄存器使用區2,請用3種方法設置這種狀態
代碼:
ANL PSW,#01H MOV A,PSW
CJNE A,#01,LAB2 LAB1:JMP LAB1
LAB2: SETB PSW.4 MOV P0,#01H MOV R0,#18H CLR PSW.3 MOV C,P0.0 MOV PSW,R0 MOV PSW.4,C CPL C MOV PSW.3,C END
心得:以上LAB2寫了三段代碼,可分別完成題目要求。不過實驗時只是對代碼進行了錯誤調試,沒有對結果進行檢驗。其中值得注意的是對于布爾(位)操作指令的用法,比如傳送指令必須經累加器C,如第二段中MOV P0,#01H;MOV C,P0.0,以及對于位尋址的方式(如需用到“.”隔開)的應用。4)編一個小程序將內部RAM中的20H單元的內容送到21H單元并調試
代碼:
MOV R0,#20H MOV @R0,#10H MOV R1,#21H MOV @R1,20H JMP $ END
5)用程序將堆棧指針指向60H,然后在堆棧中依次壓入01,02,03,04,05五個數,觀察哪些單元內容發生了變化,各變為多少?從哪些窗口可以發現這些變化?順序將堆棧中的五個數放入30H~34H五個單元中,編程實現之。
代碼:
MOV R1,#60H MOV SP,R1 MOV DPL,#1H LAB1:PUSH DPL INC DPL MOV A,DPL CJNE A,#6,LAB1 POP 34H POP 33H POP 32H POP 31H POP 30H JMP $ END
6)將外部數據存貯器1000H~100FH 16個單元中存放00H~0FH 代碼:
MOV DPTR,#1000H MOV R1,#10H LOOP:MOVX @DPTR,#1234H MOVX A,@DPTR MOV @R1,A INC DPTR INC R1 CJNE R1,#40H,LOOP JMP $ END
心得:此處需要訪問片外存儲空間,需要借助寄存器DPTR,需注意其為16位的寄存器,在使用時若與八位寄存器進行數據交換時需分為高八位DPH與低八位DPL來用。7)若要求程序從0010H單元開始運行,可用兩種方法實現?
方法一 ORG 0010H 方法二 AJMP 0010H
3. 選做實驗內容:數據傳送 目的:
1)掌握8051單片機內部數據存貯器、外部數據存貯器的數據傳送特點和應用 2)掌握MOV,MOVX和MOVC類指令的用法及區別 內容:
1)將片內RAM數據區20H為首地址的十六個字節傳送到30H為首地址的數據區,即:20H~2FH送30H~3FH
代碼: ORG 0000H JMP MAIN ORG 0030H MAIN:MOV R0,#20H MOV R1,#30H LOOP:MOV @R0,#1234H MOVA,@R0 MOV @R1,A INC R0 INC R1 CJNE R1,#30H,LOOP JMP $ END
2)將外部數據存儲器2000H~200FH單元的十六個數傳送至內部數據存儲器的30H~3FH 代碼: ORG 0000H JMP MAIN ORG 0030H MAIN: MOV DPTR,#2000H MOV R1,#30H LOOP:MOVX @DPTR,#12H MOVX A,@DPTR MOV @R1,A INC DPTR INC R1 CJNE R1,#40H,LOOP JMP $ END
總體心得體會:
第一次做實驗主要是熟悉了解了下單片機編程軟件的使用,開始接觸時在對其軟件不是太了解的情況下實驗編程做的確實很亂,不清楚該怎樣進行,比如不知如何進行對指令的調試,也不清楚該如何觀察結果,沒有一個整體的概念,所以在了解其開發環境上花了不少時間。經過一段時間的摸索后也終于了解了其具體的使用,也能夠順利的對指令的編程運用。運行指令時遇到的一些問題需要注意的也在上面各題中做了說明。還有需要注意的是:進入軟件仿真時需要對存儲空間進行查看的方法是在Address窗口中輸入:d:00h 顯示內部數據存儲器從00h開始的單元; x:1000h 顯示外部數據存儲器從1000h開始的單元; c:0000H 顯示程序存儲器內容。還有由于偽指令 END 定義的原因,在程序末需加一條死循環調轉指令(如 JMP $)使程序不會進入其他未知空間執行其他指令。實驗
二、加、減法實驗
1. 實驗目的
1)正確使用單片機的加減運算指令
2)掌握不同指令對于程序狀態字的影響及程序狀態字的意義、用處 3)掌握ADD,ADDC,SUBB和DA A等指令的用法 4)學習模塊化程序設計方法 2. 實驗內容
1)編寫3字節二進制加法子程序,并用主程序調用不同的加數和被加數來檢測該子程序的正確性。需考慮有進位和無進位情況。程序入口為: 加數:22H,21H,20H三字節,22H為最高位
被加數:32H,31H,30H三字節,32H為最高位
程序出口為: 23H,22H,21H,20H四字節,23H為最高位 例如:地址:23 22 21 20 32 31 30 執行前數據: 01 23 45 FF 01 01 執行后數據:01 00 24 46
代碼:
ORG 0000H AJMP MAIN ORG 30H MAIN: MOV 22H,#01H MOV 21H,#23H MOV 20H,#45H MOV 32H,#0FFH MOV 1H,#01H MOV 30H,#01H ACALL ADDI HERE:JMP HERE ORG 100H ADDI: PUSH PSW MOV R0, #20H;加數1地址、和的地址 MOV R1, #30H;加數2地址 CLR C MOV R2, #3;循環3次 LOOP: MOV A, @R0;取 ADDC A, @R1;加 MOV @R0, A;存 INC R0 INC R1 DJNZ R2, LOOP CLR A ADDC A, #0;得到進位 MOV 23H, A;保存 POP PSW RET END
2)編寫三字節二進制減法子程序 入口:被減數: 52H,51H,50H, 50H為最低位
減數: 42H,41H,40H, 40H為最低位
出口:差:外部數據存貯器2003H~2000H(2000H為最低位)用主程序調用多組數據來調試,需考慮無借位和有借位兩種情況。例如:
執行前:地址: 52 51 50 42 41 40
數據: 90 80 70 10 10 10
執行后:地址: 2003 2002 2001 2000
數據: 00 80 70 60 代碼:
ORG 0000H AJMP MAIN ORG 30H MAIN: MOV 52H,#90H MOV 51H,#80H MOV 50H,#70H MOV 42H,#10H MOV 41H,#10H MOV 40H,#10H ACALL SUB1 HERE:JMP HERE SUB1: PUSH PSW MOV R0, #50H;被減數地址 MOV R1, #40H;減數地址 MOV DPTR, #2000H;差的地址 CLR C MOV R2, #3;循環3次 LOOP: MOV A, @R0;取 SUBB A, @R1;減 MOVX @DPTR, A;存 INC R0 INC R1 INC DPTR DJNZ R2, LOOP CLR A SUBB A, #0;得到借位 MOVX @DPTR, A;存 POP PSW RET END
3)編寫10位十進制加法子程序(十進制數采用壓縮BCD碼存放)入口: 加數:24H—20H,低地址放低字節
被加數:29H—25H,低地址放低字節
出口 和:4005H—4000H,低地址放低字節
要求調用多組數據調試,注意觀察PSW的變化,理解DA A指令的含義。例如:
執行前地址:24 23 22 21 20 29 28 27 26 25
數據:12 34 56 78 90 88 99 33 12 74
執行后地址:4005 4004 4003 4002 4001 4000
數據: 01 01 33 89 91 64
代碼:
ORG 0000H AJMP MAIN ORG 30H MAIN: MOV 24H,#12H MOV 23H,#34H MOV 22H,#56H MOV 21H,#78H MOV 20H,#90H MOV 29H,#88H MOV 28H,#99H MOV 27H,#33H MOV 26H,#12H MOV 5H,#74H ACALL ADD2 HERE:JMP HERE ADD2: PUSH PSW MOV R0, #20H;加數1地址 MOV R1, #25H;加數2地址 MOV DPTR,#4000H CLR C MOV R2, #5;循環5次 LOOP: MOV A, @R0;取 ADDC A, @R1;加
DA A;調整為BCD碼 MOVX @DPTR, A;存 INC R0 INC R1 INC DPTR DJNZ R2, LOOP POP PSW RET END
第四篇:單片機實驗
實驗一清0、移數
將片內20H~2FH及片外0010H~001FH單元清0;
然后將片內30H~3FH的數據移到片外0000H~000FH中;判斷:
若(30H)≤10,則求其平方存到31H中,并將位00H置1(其它位清0)若(30H)=10,則將AA存到31H中,并位01H置1(其它位清0)若(30H)≥10,則減10存到31H中,并位02H置1(其它位清0)
實驗二加法、排序
有兩個長度為10的無符號數分別放在片內20H和30H為首的存儲單元中(低位),求其對應項之和(帶進位位),結果放在40H為首的單元中(若最高位有進位則存在后續單元中),然后按升序排列放在50H為首的單元中
實驗三查表、散轉
設有一表格,表中數為:00H、11H、22H、33H、44H、55H、66H、77H、88H、99H、AAH、BBH、CCH、DDH、EEH、FFH。根據片外0001H單元的低4位的數,取出表中相應的值存到片內30H中;根據片外0001H單元的高4位的數,將片內RAM區中可位尋址的相應的位置1(從位00H~位0FH,只可有一個位地址為1)
實驗四外中斷
P1.0~P1.7接8個發光二極管,管腳INT0、INT1接兩個按鍵,分別定義為“L”和“R”。
要求:上電全滅,按 “L”(或R)鍵,最右(左)側燈亮,每按一次“L” ”(或R)鍵,則亮的燈向左(右)移一位,當移到最左(右)端時,燈全滅
實驗五定時器
P1.0、P1.1分別接兩個發光二極管,INT0腳接
一按鍵做開關,按一次開關,則啟動,兩個發
光管一亮一滅,亮滅時間均為1秒;再按一次
開關,則關閉,即兩個發光管都滅。
實驗六定時器、計數器
P3.2口輸出周期為2S的方波,T1口為脈沖輸入端,記錄輸入的脈沖個數,脈沖個數由P1口所接的8個數碼管顯示(二進制),設一按鍵作為開關控制系統運行,關閉時數碼管全滅,P3.2無輸出。
第五篇:2013單片機實驗教案
單片機技術實驗
教
案
馮
杰 實驗一(1)順序結構程序設計
一、實驗目的
掌握匯編語言設計和調試方法。
二、實驗內容
把外部RAM中2000h單元的內容拆開,高位送2001h單元,低位送2002h單元,2001h、2002h高位清零,一般本程序用于把數據送顯示緩沖區時用。
三、程序流程
四、實驗步驟
1、LED環境
⑴在“P.”狀態下按“0→EV/UN”,裝載實驗所需的代碼程序。
⑵在“P.”狀態下鍵入0000,然后按“STEP”或“EXEC”進入實驗項目的調試與運行。
2、PC環境
在與PC聯機狀態下,編譯、連接、下載PH51se02.asm,用連續或單步方式運行程序。
3、運行結果檢查
⑴在單步運行時每走一步可觀察其運行結果。
⑵在連續運行狀態下,應按“暫停圖標”或實驗箱上的“暫停按鈕”,使系統無條件退出用戶運行狀態返回監控,然后再用相應的命令鍵觀察與檢查2000~2002h中內容變化情況。
五、思考
如何用斷點方式調試本程序。
ORG 0000H LJMP START
ORG 0030H START: MOV DPTR,#2000H
MOVX A,@DPTR ANL A,#0F0H SWAP A MOV DPTR,#2001H MOVX @DPTR,A
MOV DPTR ,#2000H MOVX A,@DPTR ANL A,0FH MOV DPTR,#2002H MOVX @DPTR,A SJMP $ END 實驗一(2)循環結構程序設計
一、實驗目的
熟悉MCS-51指令系統,掌握程序設計方法。
二、實驗內容
編寫并調試一個排序子程序,其功能為用冒泡法將內容RAM中幾個單元字節無符號的正整數,按從小到大的次序重新排列。
三、程序框圖
四、實驗步驟
1、LED環境
⑴在“P.”狀態下按“0→EV/UN”,裝載實驗所需的代碼程序。
⑵對片內RAM地址50h~5AH進行不規則置數。
⑶在“P.”狀態下鍵入0000,然后按“STEP”或“EXEC”進入實驗項目的調試與運行。
2、PC環境
在與PC聯機狀態下,編譯、連接、下載PH51se05.asm,用連續或單步方式運行程序。
3、運行結果檢查
⑴在單步運行時每走一步可觀察其運行結果。
⑵在連續運行狀態下,應按“暫停圖標”或實驗箱上的“暫停按鈕”,使系統無條件退出用戶運行狀態返回監控,然后再用相應的命令鍵觀察與檢查片內50~5Ah中內容是否按從 小到大排列。
五、思考:修改程序把50~5Ah中內容按從小到大排列。
ORG 0000H LJMP START ORG 0030H MOV R7,#09H MOV R6,#00H;清除標志 CLR C MOV A,@R0 INC R0 SUBB A,@R0 JC LOOP1 MOV R6,#01H DEC R0 MOV A,@R0 INC R0 XCH A,@R0 MOV @R0,A DJNZ R7,START1 CJNE R6,#00H,START SJMP $ END START:
MOV R0,#50H START1:
DEC R0
INC R0 LOOP1:
實驗一(3)選擇結構程序設計
一、實驗目的
掌握匯編語言的編程。
二、實驗內容
編寫程序,根據送入的數據轉移運行。
三、程序框圖
四、實驗步驟
1、LED環境
⑴在“P.”狀態下按“0→EV/UN”,裝載實驗所需的代碼程序。⑵在20H中分次送入00、01、02、03。
⑶在“P.”狀態下鍵入0A10,然后按“STEP”或“EXEC”進入實驗項目的調試與運行。
2、PC環境
在與PC聯機狀態下,編譯、連接、下載PH51se08.asm,用連續或單步方式運行程序。
3、運行結果檢查
(1)在單步運行時每走一步可觀察其運行結果。
(2)在連續運行狀態下,應按“暫停圖標”或實驗箱上的“暫停按鈕”,使系統無條件退出用戶運行狀態返回監控,然后觀察每次運行程序后,數碼管上數字循環情況。
ORG 0000H
LJMP START
ORG 0030H START: MOV 20H,#00H MOV A,20H MOV B,#03H
MUL AB
MOV DPTR,#TAB
JMP @A+DPTR
SJMP $ ORG 3000H TAB:
LJMP LOOPA
LJMP LOOPB
LJMP LOOPC
LOOPA: MOV A,#01H LOOPA1: MOV P1,A
LCALL DELAY1S
RL A
LJMP LOOPA1
LOOPB: MOV A,#03H LOOPB1: MOV P1,A
LCALL DELAY1S
RL A
LJMP LOOPB1
LOOPC: MOV A,#05H LOOPC1: MOV P1,A
LCALL DELAY1S
RL A
LJMP LOOPC1
DELAY1S: DELAY1S3: DELAY1S2: DELAY1S1:
MOV R7,#10 MOV R6,#200 MOV R5,#250 DJNZ R5,DELAY1S1 DJNZ R6,DELAY1S2 DJNZ R7,DELAY1S3 RET END
實驗二 中斷實驗
一、實驗目的
熟悉單片機中斷概念及中斷編程方法。
二、實驗內容
編寫程序,從P3.3輸入脈沖,記錄輸入脈沖個數,并用P1口外部鏈接的發光二極管顯示技術結果。
二、參考程序
ORG 0000H
LJMP START
ORG 0013H
LJMP INT1_COUNT
ORG 0030H START:
MOV SP,#60H
MOV A,#00H
SETB IT1;下降邊沿觸發方式
SETB EX1;開啟INT1中斷
SETB EA
SJMP $ INT1_COUNT:
INC A
MOV P1,A
RETI
END
實驗三 LED顯示實驗
一、實驗要求
利用實驗系統提供的顯示設備,動態顯示一行數據。
二、實驗目的
⑴了解數碼管動態顯示的原理; ⑵了解用總線方式控制數碼管顯示。
三、實驗說明
本實驗系統提供了8位七段碼LED顯示電路,學生只要按地址輸出相應數據,就可以實現對顯示器的控制。
四、程序框圖
ORG 0000H LJMP START ORG 0030H START: MOV SP,#60H MOV 50H,#8CH;顯示字符P.MOV 51H,#40H MOV 52H,#79H MOV 53H,#24H MOV 54H,#30H MOV 55H,#19H MOV 56H,#12H MOV 57H,#02H
LOOP1: LCALL DISPLAY
LJMP LOOP1
DISPLAY: MOV P2,#0FH MOV P0,50H LCALL DELAY20MS
MOV P2,#1FH MOV P0,51H LCALL DELAY20MS
MOV P2,#2FH MOV P0,52H LCALL DELAY20MS MOV P2,#3FH MOV P0,53H LCALL DELAY20MS
MOV P2,#4FH MOV P0,54H LCALL DELAY20MS
MOV P2,#5FH MOV P0,55H LCALL DELAY20MS
MOV P2,#6FH MOV P0,56H LCALL DELAY20MS
MOV P2,#7FH MOV P0,57H LCALL DELAY20MS
LJMP DISPLAY
DELAY20MS: MOV R7,#20 DELAY1: MOV R6,#100 DELAY2: DJNZ R6,DELAY2 DJNZ R7,DELAY1 RET
TAB: DB 40H,79H,24H,30H,19H,12H,02H;0 1 2 3 4 5 6 DB 78H,00H,10H,08H,03H,46H,21H,06H,0EH;7 8 9 A B C D E F的字符碼
TAB1: DB 8CH;P.TAB2: DB 7FH;END 的字符碼的字符碼
空,不顯示的字符
鍵盤電路實驗
電路圖:
程序:
;用int1中斷實現按鍵功能,鍵值存放在4fh單元中;通過P1口輸出按鍵值,用發光二極管顯示按鍵值;通過P2.4--P2.6和三八譯碼器輸出八列按鍵掃描碼;通過P2.0---P2.3讀入按鍵的行值;行列值組合,就是按鍵的鍵值 ORG 0000H LJMP START ORG 0013H LJMP key_value ORG 0030H START: MOV 4fH,#00h;存放按鍵鍵值單元 MOV P1,#00H MOV P2,#0FFH setb ex1 setb it1 setb ea KEY_SCAN: MOV P2,#0FH LCALL DELAY5MS
MOV P2,#1FH LCALL DELAY5MS
MOV P2,#2FH LCALL DELAY5MS
MOV P2,#3FH LCALL DELAY5MS
MOV P2,#4FH LCALL DELAY5MS
MOV P2,#5FH LCALL DELAY5MS
MOV P2,#6FH LCALL DELAY5MS
MOV P2,#7FH LCALL DELAY5MS
LJMP KEY_SCAN
DELAY5MS: MOV R7,#40 DELAY1: MOV R6,#100 DELAY2: DJNZ R6,DELAY2 DJNZ R7,DELAY1 RET
KEY_VALUE: PUSH ACC PUSH PSW MOV A,P2 MOV 4FH,A MOV P1,A POP PSW POP ACC RETI END
LED和鍵盤綜合實驗
電路圖:
參考程序:
ORG 0000H LJMP START ORG 0013H LJMP KEY_VALUE ORG 0030H START: MOV SP,#60H
MOV 4fH,#00h;存放按鍵鍵值單元 MOV P2,#0FFH setb ex1 setb it1 setb ea
MOV 50H,#0CH;顯示字符P.MOV 51H,#0CH MOV 52H,#7FH MOV 53H,#7FH MOV 54H,#7FH MOV 55H,#7FH MOV 56H,#7FH MOV 57H,#0CH
LOOP1: LCALL DISPLAY
LJMP LOOP1
DISPLAY: MOV P2,#0FH MOV P0,50H LCALL DELAY20MS
MOV P2,#1FH MOV P0,51H LCALL DELAY20MS
MOV P2,#2FH MOV P0,52H LCALL DELAY20MS
MOV P2,#3FH MOV P0,53H LCALL DELAY20MS
MOV P2,#4FH MOV P0,54H LCALL DELAY20MS
MOV P2,#5FH MOV P0,55H LCALL DELAY20MS
MOV P2,#6FH MOV P0,56H LCALL DELAY20MS
MOV P2,#7FH MOV P0,57H LCALL DELAY20MS
LJMP DISPLAY
DELAY20MS: MOV R7,#20 DELAY1: MOV R6,#100 DELAY2: DJNZ R6,DELAY2 DJNZ R7,DELAY1 RET
KEY_VALUE: PUSH ACC PUSH PSW MOV 4FH,P2 LCALL KEY_VALUE_DISP POP PSW POP ACC RETI
KEY_VALUE_DISP: MOV A,4FH ANL A,#0F0H SWAP A MOV DPTR,#TAB MOVC A,@A+DPTR MOV 56H,A MOV A,4FH ANL A,#0FH MOVC A,@A+DPTR MOV 57H,A RET
TAB: DB 40H,79H,24H,30H,19H,12H,02H;0 1 2 3 4 5 6的字符碼 DB 78H,00H,10H,08H,03H,46H,21H,06H,0EH;7 8 9 A B C D E F的字符碼
TAB1: DB 8CH;P.的字符碼
TAB2: DB 7FH;空,不顯示的字符 END
實驗四 A/D轉換實驗
一、實驗目的
(1)掌握A/D轉換與單片機接口的方法;(2)了解A/D芯片0809轉換性能及編程方法;(3)通過實驗了解單片機如何進行數據采集。
二、實驗內容
利用實驗系統上的0809做A/D轉換器,實驗系統上的電位器提供模擬量輸入,編制程序,將模擬量轉換成數字,通過數碼管顯示出來。
三、程序框圖
四、實驗電路
五、實驗步驟
把0809的零通道INT0用插針接至AINl孔,0809CS位FFE0孔,運行程序,數碼管顯示0809.XX,后二位顯示當前采集的電壓轉換的數字量,調節W1,該二位將隨著電壓變化而相應變化。
六、思考
修改程序,用其它通道輪流采樣顯示。
實驗五 電腦時鐘(定時器、中斷綜合實驗)
一、實驗目的
熟悉MCS-51定時器,串行口和中斷初始化編程方法,了解定時器的應用實時程序的設計與調試技巧。
二、實驗內容
編寫程序,從本實驗系統鍵盤上輸入時間初值,用定時器產生0.1S定時中斷,對時鐘計數器計數,并將數值實時地送數碼管顯示。
三、程序框圖
四、實驗步驟
連續運行程序,在鍵盤上輸入時間初值,按執行鍵EXEC執行,數碼管上實時顯示時間值。
五、思考
(1)電子鐘走時精度和程序中那些常數有關?
(2)修改程序使定時器工作方式改變,調節有關參數,進一步提高精度。
六、參考程序
ORG 0000H LJMP START ORG 000BH LJMP T0_INT ORG 0030H START: MOV 50H,#00H;時的低位字符碼 MOV 51H,#00H;時的高位字符碼 MOV 52H,#00H;“-”的字符碼 MOV 53H,#00H;分的低位字符碼 MOV 54H,#00H;分的高位字符碼 MOV 55H,#00H;“-”的字符碼 MOV 56H,#00H;秒的低位字符碼 MOV 57H,#00H;秒的高位字符碼 MOV 5FH,#00H;存放小時的單元 MOV 5EH,#00H;存放分鐘的單元 MOV 5DH,#00H;存放秒的單元 MOV 5CH,#00H;存放T0中斷次數,50次為1秒
MOV SP,#60H;設置堆棧棧頂 MOV TH0,#???;設置T0定時器初值 MOV TL0,#??? MOV TMOD,#00000001H;T0工作在定時方式,工作方式0
SETB ET0;開放T0中斷 SETB EA;開放總中斷 SETB TR0;啟動定時器T0 LOOP: mov P2,#11111110H MOV R0,#50H loop1: MOV R7,#08H LOOP2: MOV A,@R0 MOV P1,A LCALL DELAY INC R0 MOV A,P2 RL A
MOV P2,A DJNZ R7, LOOP2 LJMP LOOP SJMP $
DELAY: MOV R6,#2;延時程序 DELAY1: MOV R5,#10 DELAY2: MOV R4,#100 DELAY3: DJNZ R4,DELAY3 DJNZ R5,DELAY2 DJNZ R6,DELAY1 RET 16 T0_INT: CLR TR0 PUSH ACC MOV A,5CH CJNE A,#50H,T0_INT1 MOV 5CH,#00H MOV A,5DH CJNE A,#59H,T0_INT2 MOV 5DH,#00H MOV A,5EH CJNE A,#59H,T0_INT3 MOV 5EH,#00H MOV A,5FH CJNE A,#23H,T0_INT4 MOV 5FH,#00H LJMP T0_END T0_INT1: INC 5CH LJMP T0_END T0_INT2: INC 5DH LJMP T0_END T0_INT3: INC 5EH LJMP T0_END T0_INT4: INC 5FH T0_END: MOV A,5FH
MOV B,#10 DIV AB MOV 51H,A MOV A,B MOV 50H,A MOV A,5EH MOV B,#10 DIV AB MOV 54H,A MOV A,B MOV 53H,A MOV A,5DH MOV B,#10 DIV AB MOV 57H,A MOV A,B MOV 56H,A POP ACC
MOV TH0,#??? MOV TL0,#??? SETB TR0 RETI
實驗六 LCD液晶顯示屏實驗
一、實驗目的
⑴掌握單片機擴展液晶顯示接口的設計與編程。⑵利用字符式液晶顯示器顯示字符。
二、實驗內容
編制程序,在液晶顯示器上顯示:
學生所在的院系的漢語拼音字母和學生的名字。分兩行顯示。
三、實驗電路
四、參考程序
DAT1 DAT2 EQU EQU 30H;第一參數單元 31H;第二參數單元 32H;指令代碼單元 0100H;指令通道地址 0000H;數據通道地址 COM EQU C_ADD EQU D_ADD EQU
org 0000h ljmp main org 0030h;主程序
MAIN: MOV SP,#60H;
lcall delay;上電延時
LCALL INT;初始化
LCALL CLEAR;清緩沖區 TEST: LCALL hgnu_disp;顯示“WELCOM TO HGNU” LCALL PL_XW_ZKB;顯示 “P_L :”
“X_W :”
“ZKB:” sjmp test
;上電延時子程序 delay: MOV R6,#50H;MOV R7,#00H;DELY1: NOP DJNZ R7,DELY1;上電延時
DJNZ R6,DELY1;ret;讀狀態字子程序
R_ST: MOV DPTR,#C_ADD;設置指令通道 MOVX A,@DPTR;RET;判斷狀態位STA1,STA0子程序(讀寫指令和數據),在指令的讀,寫
;數據之前這兩個標志必須同時為“1” ST01: LCALL R_ST;JNB ACC.0,ST01;JNB ACC.1,ST01;RET;判斷狀位STA2子程序(數據自動讀狀態),該位
;在數據自動操作過程中取代STA0和STA1有效。在連續讀過程中每讀一次;之前都要確認STA2=1 ST2: LCALL R_ST;JNB ACC.2,ST2;RET;判斷STA3子程序(數據自動寫狀態)ST3: LCALL R_ST;JNB ACC.3,ST3;RET;判斷狀態位STA6子程序(屏讀/屏拷貝狀態)ST6: LCALL R_ST;JB ACC.6,ERR;RET ERR: LJMP ST6;;出錯處理
;寫指令和寫數據子程序..;雙字節參數指令寫入入口
PR1: LCALL ST01;判斷狀態位STA1,STA0 MOV A,DAT1;取第一參數單元數據
LCALL PR13;寫入參數;單字節參數指令寫入入口
PR11: LCALL ST01;判斷狀態位STA1,STA0 MOV A,DAT2;取第二參數單元數據 LCALL PR13;寫入參數
;無參數指令寫入入口
PR12: LCALL ST01;無參數指令寫入入口
MOV A,COM;取指令代碼單元數據
MOV DPTR,#c_ADD;設置指令通道地址/數據寫入入口
LJMP PR14;寫入指令代碼
PR13: MOV DPTR,#D_ADD;設置數據通道地址/數據寫入入口 PR14: MOVX @DPTR,A;寫入操作 RET;讀數據子程序 PR2: LCALL ST01;判斷狀態位
MOV DPTR,#D_ADD;設置數據通道地址
MOVX A,@DPTR;讀數據操作 MOV DAT2,A;數據存入第二參數/數據單元
RET;初始化子程序
INT:
;顯示區域設置
MOV DAT1,#00H;設置文本顯示區首地址
MOV DAT2,#00h;MOV COM,#40H;LCALL PR1;雙字節參數指令寫入入口
MOV DAT1,#16;設置文本顯示區域寬度
MOV DAT2,#00H;即一行顯示所占字節數
MOV COM,#41H;LCALL PR1;雙字節參數指令寫入入口
MOV DAT1,#00H;設置顯示區域首地址
MOV DAT2,#00H;或文本屬性區域首地址
MOV COM,#42H;LCALL PR1;雙字節參數指令寫入入口
MOV DAT1,#10H;設置圖形顯示區域寬度
MOV DAT2,#00H;或為文本屬性區域狂寬度
MOV COM,#43H;即一行顯示所占字節數
LCALL PR1;雙字節參數指令寫入入口
;顯示光標設置
MOV COM,#0A1H;光標形狀設置
LCALL PR12;
;設置光標初始位置,是字符行和字符列,第0行第15列
MOV DAT1,#0;光標行位置
MOV DAT2,#0;光標列位置
MOV COM,#21H;LCALL PR1;雙字節參數指令寫入入口
;顯示方式設置,使用內部字符發生器
MOV COM,#80H;顯示方式設置,邏輯“或”合成 LCALL PR12;無參數指令寫入入口+
MOV COM,#97H;僅用文本顯示
LCALL PR12;無參數指令寫入入口
;顯示開關方式
RET
;寫數據子程序,8*8點陣
;R6中裝入顯示位置的列數(字符的個數),每行16個字符,R7中裝入顯示位置距左上角的字符行數
;5FH單元中裝入待顯示的字符碼 DISP: mov b,r7
mov a,#16 mul ab mov r7,a CLR C mov a,R6
ADD A,R7 MOV R6,A;R7*16+R6
MOV DAT1,R6;設置顯示RAM首地址,水平方向字符數
MOV DAT2,#00H;固定送00H MOV COM,#24H;地址指針指令
LCALL PR1;MOV
dat2,5fH;取要顯示的字符
MOV COM,#0c4H;數據寫,地址不變 LCALL PR11;寫入數據
RET;清顯示緩沖區(16*8單元)clear: MOV 5FH,#00H
MOV R5,#0 CLEAR0: MOV R4,#0 CLEAR1: MOV A,R5
MOV R7,A MOV A,R4 MOV R6,A CLEAR2: LCALL DISP
INC R4 CJNE R4,#16,CLEAR1
mov r4,#00h
INC R5
CJNE R5,#8,CLEAR0 CLEAR9: RET;顯示頻率、相位、占空比、相位差等字符。(P_L :;PL_XW_ZKB:MOV R7,#3 MOV R6,#0 MOV
5fh,#30H;“P” LCALL DISP MOV R7,#3 MOV R6,#1 MOV
5fh,#3FH;“_” LCALL DISP MOV R7,#3 MOV R6,#2 MOV
5fh,#2CH;“L”
X_W :
ZKB:)
LCALL DISP MOV R7,#3 MOV R6,#3 MOV
5fh,#1AH;“: ” LCALL DISP MOV R6,#0 MOV
5fh,#38H;“X” LCALL DISP MOV R7,#5 MOV R6,#1 MOV
5fh,#3FH;“_” LCALL DISP MOV R7,#5 MOV R6,#2 MOV
5fh,#37H;“W” LCALL DISP MOV R7,#5 MOV R6,#3 MOV
5fh,#1AH;“: ” LCALL DISP
MOV R7,#5
MOV R7,#7 MOV R6,#0 MOV
5fh,#3AH;“Z” LCALL DISP
MOV R7,#7 MOV R6,#1 MOV
5fh,#2BH;“K” LCALL DISP MOV R7,#7 MOV R6,#2 MOV
5fh,#22H;“B ” LCALL DISP MOV R7,#7 MOV R6,#3 MOV
5fh,#1AH;“: ” LCALL DISP RET;頂行顯示“黃岡師院物科院“的英文名稱。;”welcome to hgnu!“ hgnu_DISP:
MOV R7,#0;顯示位置的行列數
MOV R6,#0 MOV
5fh,#37H;”W“ LCALL DISP MOV R7,#0 MOV R6,#1 MOV
5fh,#25H;”E“ LCALL DISP MOV R7,#0 MOV R6,#2 MOV
5fh,#2CH;”L“ LCALL DISP MOV R7,#0 MOV R6,#3 MOV
5fh,#23H;”C“ LCALL DISP MOV R7,#0 MOV R6,#4 MOV
5fh,#2FH;”0“ LCALL DISP MOV R7,#0 MOV R6,#5 MOV
5fh,#2DH;”M“ LCALL DISP MOV R7,#0 MOV R6,#6 MOV
5fh,#25H;”E“ LCALL DISP MOV R7,#0 MOV R6,#7 MOV
5fh,#00H;” “ LCALL DISP MOV R7,#0 MOV R6,#8 MOV
5fh,#34H;”T“ LCALL DISP MOV R7,#0 MOV R6,#9 MOV
5fh,#2FH;”O“ LCALL DISP MOV R7,#0 MOV R6,#10 MOV
5fh,#00H;” “ LCALL DISP MOV R7,#0 MOV R6,#11 MOV
5fh,#28H;”H“ LCALL DISP
MOV R7,#0 MOV R6,#12 MOV
5fh,#27H;”G“ LCALL DISP MOV R7,#0 MOV R6,#13 MOV
5fh,#2EH;”N“ LCALL DISP MOV R7,#0 MOV R6,#14 MOV
5fh,#35H;”U“ LCALL DISP RET tab: db 10h,11h,12h,13h,14h,15h,16h,17h,18h,19h;”0-----9“
db 21h,22h,23h,24h,25h,26h;”A-----F" end
實驗七 直流電機轉速測量與控制實驗
一、實驗目的
1.掌握直流電機的驅動原理。2.了解直流電機調速的方法。
二、實驗內容
1.用0832 D/A轉換電路后的輸出經放大后驅動直流電機。
2.編制程序改變0832輸出經放大后的方波信號的占空比來控制電機轉速。本實驗中 D/A輸出為雙極性輸出,因此電機可以正反向旋轉。
三、程序流程
三、實驗電路
五、參考程序
DATA_TH0 EQU 00H DATA_TL0 EQU 00H;信號周期為130ms DATA_TH1 EQU 20H DATA_TL1 EQU 00H;高電平時間65ms ORG 0000H LJMP MAIN ORG 0003H LJMP INT_0;啟動電機按鍵
ORG 000BH LJMP T_0;T0確定輸出信號的周期(或者頻率)ORG 0013H LJMP INT_1;電機轉動方向控制按鍵 ORG 001BH LJMP T_1;T1確定輸出信號高電平的時間期
ORG 0030H MAIN: MOV SP,#60H
CLR P1.0 CLR P1.1;關閉電機
setb 20h.0;初始化電機正轉
clr 20h.1;初始狀態時,電機停止轉動 MOV TMOD,#11H SETB IT0 SETB EX0 SETB IT1 SETB EX1 SETB ET0 SETB ET1 SETB EA
SJMP $
T_0: JNB 20H.1,T_01;
MOV TH1,#DATA_TH1
MOV TL1,#DATA_TL1 SETB TR1
MOV TH0,#DATA_TH0 MOV TL0,#DATA_TL0 SETB TR0 JNB 20H.0,T_02 setb P1.0 clr P1.1 LJMP T_05 T_02: clr P1.0 setb P1.1 LJMP T_05 T_01: CLR P1.0
CLR P1.1 CLR TR0 CLR TR1 RETI CLR TR1 T_05: T_1: clr p1.0 clr p1.1 RETI int_1: CPL 20H.1;電機啟動標志求反,開啟電機或者關閉電機
JNB 20H.1,INT_11;啟動標志不為1,則停止電機,關閉定時器
MOV TH1,#DATA_TH1;啟動標志為1,則開啟定時器1和定時器2,輸出PWM波
MOV TL1,#DATA_TL1 SETB TR1
MOV TH0,#DATA_TH0
MOV TL0,#DATA_TL0 SETB TR0 JNB 20H.0,INT_12;轉動方向標志不為1,則反轉,否則正轉 setb P1.0 clr P1.1 LJMP INT_19 setb P1.1 LJMP INT_19 INT_12: clr P1.0 INT_11: CLR P1.0 CLR P1.1 CLR TR0 CLR TR1 INT_19: RETI 26
INT_0: CPL 20H.0 RETI END
實驗八 步進電機控制實驗
一、實驗目的
1.了解步進電機控制的基本原理。2.掌握步進電機轉動編程方法。
二、實驗內容
從鍵盤上輸入正、反轉命令,轉速參數和轉動步數顯示在顯示器上,CPU再讀取顯示器上顯示的正、反轉命令,轉速級數(16級)和轉動步數后執行。轉動步數減為零時停止轉動。
三、實驗電路圖
四、參考程序
ORG 0000H
ljmp main ORG 000BH LJMP COUNT0 ORG 001BH LJMP COUNT1 ORG 0100H MAIN: MOV P0,#0FFH;輸送脈沖口,SETB P1.2;MOV R0,#1;延時變化變量 LOOP1: MOV P0,#0FCH LCALL DELAY MOV P0,#0F6H LCALL DELAY MOV P0,#0F3H LCALL DELAY MOV P0,#0F9H LCALL DELAY JNB P1.2,LOOP2 MOV TMOD,#01010101B MOV TH0,#0FFH MOV TL0,#0FFH MOV TH1,#0FFH MOV TL1,#0FFH SETB TR0 SETB TR1 SETB ET0 SETB ET1 SETB EA MOV DPTR,#TABLE MOV A,R0 MOVC A,@A+DPTR MOV P2,A JMP LOOP1 LOOP2: MOV P0,#0FCH LCALL DELAY MOV P0,#0F9H LCALL DELAY MOV P0,#0F3H LCALL DELAY MOV P0,#0F6H LCALL DELAY JB P1.2,LOOP1 MOV TMOD,#01010101B MOV TH0,#0FFH MOV TL0,#0FFH MOV TH1,#0FFH MOV TL1,#0FFH 28 SETB TR0 SETB TR1 SETB ET0 SETB ET1 SETB EA MOV DPTR,#TABLE MOV A,R0 MOVC A,@A+DPTR MOV P2,A JMP LOOP2 SJMP $ COUNT0: MOV TH0,#0FFH;減速中斷 MOV TL0,#0FFH CJNE R0,#9,L4 JMP L5 L4: INC R0
L5: setb TR0 RETI COUNT1: MOV TH1,#0FFH;加速中斷 MOV TL1,#0FFH CJNE R0,#1,L6 JMP L7 L6: DEC R0 L7: setb TR1 RETI DELAY: MOV A,R0;延時 MOV R1,A L1: MOV R2,#50 L2: MOV R3,#250 L3: DJNZ R3,L3 DJNZ R2,L2 DJNZ R1,L1 RET TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH;顯示程序查表,共陰 END