第一篇:單片機(jī)實(shí)驗(yàn)總結(jié)
單片機(jī)原理及接口技術(shù)實(shí)驗(yàn)總結(jié)
本學(xué)期的單片機(jī)實(shí)驗(yàn)轉(zhuǎn)眼已到尾聲,共做了六項(xiàng)實(shí)驗(yàn),分別是KEIL4、ISP下載軟件的安裝于使用、P1口輸出循環(huán)燈實(shí)驗(yàn)、P1口轉(zhuǎn)彎燈實(shí)驗(yàn)、P3.3口輸入P1口輸出實(shí)驗(yàn)和中斷實(shí)驗(yàn)。在王承林老師的帶領(lǐng)與指導(dǎo)下,我們認(rèn)真完成每次的實(shí)驗(yàn)任務(wù),并在實(shí)驗(yàn)中拓展,去發(fā)現(xiàn)一些新的問題。
在這六項(xiàng)實(shí)驗(yàn)中讓我刻骨銘心的是中斷實(shí)驗(yàn)。中斷可以說是我的一個弱點(diǎn),首先從概念上我理解比較含糊,理解能力差;其次,6個中斷源比較難記清,經(jīng)常記混,加之它們分配的寄存器存在太多的異同,工作方式更是讓人頭疼;再次,中斷的使用。中斷的精髓是在于使用,在電路設(shè)計(jì)中使用中斷來控制單片機(jī)的工作,使之更好的達(dá)到所需目的。我剛開始學(xué)習(xí)的時候連怎么使用中斷還是一無所知,后來我到圖書館里查找資料,慢慢的琢磨。至今學(xué)會了中斷源的4種工作方式,能簡單設(shè)計(jì)出中斷電路。雖然起步晚,但我相信能厚積薄發(fā),未來一定能熟練使用它們。
經(jīng)過學(xué)習(xí)單片機(jī)的中斷控制,我發(fā)現(xiàn)自己存在許多不足,但這些都困難無法阻擋我對單片機(jī)的追求。許多同學(xué)在做實(shí)驗(yàn)時都抱著不良的心態(tài),他們只想照著實(shí)驗(yàn)本的步驟原原本本把實(shí)驗(yàn)完成就算大功告成,很少更深層次挖掘里面的奧秘,更有甚者是打醬油的,我不得不為他們?nèi)绱死速M(fèi)那么好的學(xué)習(xí)機(jī)會感到可惜。我能為他們做的就是幫助他們講解一些單片機(jī)知識,有時教他們編寫程序。實(shí)驗(yàn)室是培養(yǎng)高層次人才和開展科學(xué)研究的重要基地。邢臺學(xué)院對培養(yǎng)學(xué)生的動手能力是十分重視的,為了提高學(xué)生的動手能力,讓學(xué)生做相關(guān)實(shí)訓(xùn)并完成單片機(jī)實(shí)驗(yàn),在實(shí)驗(yàn)的形式上注重培養(yǎng)學(xué)生的實(shí)驗(yàn)技能和動手能力。從單片機(jī)實(shí)驗(yàn)中學(xué)生就可以總結(jié)出大量的經(jīng)驗(yàn)以適應(yīng)當(dāng)代社會的發(fā)展。
學(xué)習(xí)單片機(jī)這門課程,要掌握單片機(jī)指令系統(tǒng)中匯編語言各種基本語句的意義及匯編語言程序設(shè)計(jì)的基本知識和方法,以及單片機(jī)與其他設(shè)備相連接的輸入輸出中斷等接口技術(shù)。使我從硬件軟件的結(jié)合上理論聯(lián)系實(shí)際,提高動手能力,從而全面掌握單片機(jī)的應(yīng)用。
單片機(jī)課是一門實(shí)踐性很強(qiáng)的課程,僅有課堂上理論知識的學(xué)習(xí),對運(yùn)用好單片機(jī)是完全不夠的,必須親自做實(shí)驗(yàn),從實(shí)驗(yàn)中吸取教訓(xùn),總結(jié)經(jīng)驗(yàn),增加實(shí)戰(zhàn)經(jīng)驗(yàn),加深對單片機(jī)的理解,更好的運(yùn)用單片機(jī)。單片機(jī)實(shí)驗(yàn)課的目的就是為學(xué)生提供做實(shí)驗(yàn)的機(jī)會,讓學(xué)生能夠從幾個簡單的實(shí)驗(yàn)中學(xué)會單片機(jī)開發(fā)的過程和單片機(jī)的實(shí)際運(yùn)用。單片機(jī)實(shí)驗(yàn)課讓我將課堂上學(xué)到的理論知識運(yùn)用到實(shí)驗(yàn)當(dāng)中去,在實(shí)驗(yàn)中發(fā)現(xiàn)問題,解決問題,強(qiáng)化理論知識的運(yùn)用。下面是自己做實(shí)驗(yàn)當(dāng)中遇到的一些問題和體會。
首先,自己在實(shí)驗(yàn)課上對老師講解的東西沒有很好的領(lǐng)會。自己覺得老師講的電路和原理自己都懂,就沒有認(rèn)真聽老師的講解,但是當(dāng)自己去理解程序和修改程序就發(fā)現(xiàn)自己對電路的工作原理和過程并不是很了解,使得自己在改編程序?qū)崿F(xiàn)不同功能時遇到較多的問題。
其次,自己對匯編語言的運(yùn)用不是很熟練。自己之前接觸和使用的編程語言都是諸如C語言等的高級語言,對匯編語言基本上是空白狀態(tài)。雖然每個實(shí)驗(yàn)老師都給出了參考程序,但是自己理解整個程序的運(yùn)行過程和程序的功能依然遇到了比較大的困難。這就說明基礎(chǔ)薄弱是實(shí)驗(yàn)中最大的問題。
最后,也是最突出的一個問題。自己邏輯思維和分析問題的能力比較欠缺。對程序的分析能力不足,不能夠很好的理解程序段之間的邏輯關(guān)系。同時,自己對實(shí)驗(yàn)中遇到的問題不能及時分析并找出解決的辦法,知識一味的依賴?yán)蠋煹闹笇?dǎo)和同學(xué)的幫助。這也提醒自己,只有多加強(qiáng)鍛煉,才能不斷提高這方面的能力。
六周的時間說短不短,說長不長,因?yàn)樵谶@個不同尋常的六周時間里,我除了做實(shí)驗(yàn),還到圖書管理查閱了許多與單片機(jī)相關(guān)的書籍,學(xué)習(xí)用C語言編寫程序,艱苦奮斗,使我在單片機(jī)學(xué)習(xí)上有了質(zhì)的飛躍?,F(xiàn)在的我雖然不是學(xué)習(xí)最好的,可是我已經(jīng)改變過去一事無成的我,如今站在大家面前是個全新的我。我始終夢想著以后自己能在單片機(jī)行業(yè)上有所建樹,經(jīng)過自己的雙手創(chuàng)造無價(jià)的財(cái)富,成就感伴隨終生。
身存在的不足之處。而且這也激發(fā)了我今后努力學(xué)習(xí)的興趣。
發(fā)現(xiàn)問題、提出問題、分析問題、解決問題和實(shí)踐能力的提高都會受益于我在以后的學(xué)習(xí)、工作和生活中。
1、不管做什么事,計(jì)劃是很重要的。沒有一個完好的計(jì)劃,做事情就會沒有一個好的順序,做事情會比較亂,很難成功。而有一個好的計(jì)劃,不管做什么事都會事半功倍,做事心中有數(shù),明確重點(diǎn)和緩急,不會有疏漏。這樣才能提高成功率。
2、做事要多動腦,選出最好的方法。一件事往往有多種解決方法,一個好的方法,不僅能使事情事半功倍,而且往往決定最后的成與敗,所以做事時一定要多動一下腦筋,想出最好的方法。
3、要注意細(xì)節(jié)。細(xì)節(jié)決定成敗,這句話在這次課題中不僅一次得到了印證,特別是在軟件的編程過程中,一點(diǎn)點(diǎn)的錯誤就會使你整個程序不能運(yùn)行。因此我們不僅僅要有整體意識,也要注意細(xì)節(jié),不要因一個關(guān)鍵地方的一個細(xì)節(jié)而導(dǎo)致滿盤皆輸。
4、最后,也是最重要的一點(diǎn),通過這次課題,我們學(xué)到了很多有關(guān)單片機(jī)方面的知識,也對單片機(jī)有了更深入的了解。使我們受益匪淺。
總之,親自動手是課堂學(xué)習(xí)的延續(xù),電子領(lǐng)域隨時隨地都在發(fā)生著翻天覆地的變化,現(xiàn)有的知識儲備總是落后于科技的發(fā)展腳步,我們只有不斷學(xué)習(xí)新知識,才能做到面對新課題時游刃有余。
感謝王承林老師的教育指導(dǎo)!
教會我單片機(jī)應(yīng)用技術(shù),使我受益終生。
第二篇:單片機(jī)實(shí)驗(yàn)代碼總結(jié)
編者:方園
單片機(jī)實(shí)驗(yàn)代碼集合(by fangyuan)
1.多字節(jié)累加程序:
ORG 0000H LJMP MAIN ORG 0030H;將加數(shù)和被加數(shù)送到指定地址 MAIN: MOV 20H,#45H
MOV 21H,#74H
MOV 30H,#67H
MOV 31H,#28H
;低位相加
MOV A,21H
ADD A,31H
DA A
MOV 42H,A
;高位相加
MOV A,20H
ADDC A,30H
DA A
MOV 41H,A
CLR A
ADDC A,#0
MOV 40H,A
SJMP $ END
2.數(shù)據(jù)交換實(shí)驗(yàn)
編寫程序,實(shí)現(xiàn)以下操作:
【功能1】產(chǎn)生數(shù)組Hex1:0H、1H、2H、? 0FH,存儲到片內(nèi)RAM區(qū)中,數(shù)組Hex1的首地址為30H。
【功能2】產(chǎn)生數(shù)組Hex2:0FH、0EH、0DH、? 0H,存儲到片外RAM區(qū)中,數(shù)組Hex2的首地址為3000H。
【功能3】將片內(nèi)RAM數(shù)組Hex1與片外RAM數(shù)組Hex2交換內(nèi)容。
代碼:
ORG 0000H
Hex1 EQU 30H
;定義內(nèi)部RAM數(shù)組首地址
Hex2 EQU 3000H;定義外部RAM數(shù)組首地址
編者:方園
LJMP MAIN
ORG 0030H MAIN:
MOV SP,#4FH
;定義棧頂?shù)刂?/p>
MOV R7,#16
MOV R0,#Hex1
MOV DPTR,#Hex2
LCALL HEX1DE
;調(diào)用內(nèi)部送數(shù)據(jù)函數(shù)
LCALL HEX2DE;調(diào)用外部送數(shù)據(jù)函數(shù)
LCALL XCHDE;調(diào)用交換函數(shù)
SJMP $
ORG 0100H
;內(nèi)部送數(shù)據(jù)
HEX1DE: PUSH 00H
PUSH 07H
MOV A,#0 LOOP1: MOV @R0,A
INC A
INC R0
DJNZ R7,LOOP1
POP 07H
POP 00H
RET
;外部送數(shù)據(jù)
HEX2DE: PUSH 07H
PUSH DPL
PUSH DPH
MOV A,#0FH LOOP2: MOVX @DPTR,A
DEC A
INC DPTR
DJNZ R7,LOOP2
POP DPH
POP DPL
POP 07H
RET
;交換子程序 XCHDE:
LOOP3: MOVX A,@DPTR
XCH A,@R0
編者:方園
END
MOVX @DPTR,A INC R0 INC DPTR DJNZ R7,LOOP3 RET
3.查表實(shí)驗(yàn)
1、《單片機(jī)原理及應(yīng)用實(shí)驗(yàn)教程》(第2版)“第2章 實(shí)驗(yàn)3”(P49)。要求: 16進(jìn)制數(shù)(00H~0FH)ASCⅡ碼表定義在內(nèi)部ROM中(用偽指令定義);R0為片內(nèi)RAM區(qū)Hex數(shù)組指針;R1為片內(nèi)RAM區(qū)Asc數(shù)組指針;數(shù)據(jù)塊長度放在寄存器R2中。
代碼如下:
ORG 0000H
Hex EQU 40H
Asc EQU 50H
LJMP MAIN
ORG 0030H MAIN:
MOV R2,#16
MOV DPTR,#TABLE
MOV R0,#Hex
MOV R1,#Asc
MOV SP,#2FH
LCALL FUZHI
LCALL ZHUANHUAN
SJMP $
TABLE:
DB '0123456789'
;查表子程序 ORG 1000H ZHUANHUAN:
PUSH 00H
PUSH 01H
PUSH 02H LOOP1:
MOV A,@R0
編者:方園
MOVC A,@A+DPTR
MOV @R1,A
INC R0
INC R1
DJNZ R2,LOOP1
POP 02H
POP 01H
POP 00H
RET
;R0送值子程序 FUZHI:
PUSH 00H
PUSH 01H
PUSH 02H
MOV A,#0 LOOP2:
MOV @R0,A
INC R0
INC A
DJNZ R2,LOOP2
POP 02H
POP 01H
POP 00H
RET END
2、編寫用@A+PC指令的查表程序,實(shí)現(xiàn)用查表方式將片內(nèi)RAM中16進(jìn)制數(shù)組Hex(00H~0FH)轉(zhuǎn)換為ASCⅡ碼并存入片內(nèi)RAM數(shù)組Asc中。要求:
16進(jìn)制數(shù)(00H~0FH)ASCⅡ碼表在內(nèi)部ROM中; R0為片內(nèi)RAM區(qū)Hex數(shù)組指針; R1為片內(nèi)RAM區(qū)Asc數(shù)組指針; 數(shù)據(jù)塊長度放在寄存器R2中。代碼如下:
ORG 0000H
Hex EQU 40H
;內(nèi)部Hex送數(shù)據(jù)地址定義
Asc EQU 50H;查表后數(shù)據(jù)儲存地址定義
LJMP MAIN
ORG 0030H MAIN:
MOV R2,#16
MOV DPTR,#TABLE
MOV R0,#Hex
編者:方園
MOV R1,#Asc
MOV SP,#2FH
LCALL FUZHI;送值函數(shù)
LCALL CHABIAO;查表函數(shù)
SJMP $
ORG 1000H;查表子程序 CHABIAO:
PUSH 00H
PUSH 01H
PUSH 02H LOOP1:
MOV A,@R0
ADD A,#20H
MOVC A,@A+PC
MOV @R1,A
INC R0
INC R1
DJNZ R2,LOOP1
POP 02H
POP 01H
POP 00H
RET
;R0送值子程序 FUZHI:
PUSH 00H
PUSH 01H
PUSH 02H
MOV A,#0 LOOP2:
MOV @R0,A
INC R0
INC A
DJNZ R2,LOOP2
POP 02H
POP 01H
POP 00H
RET
編者:方園
TABLE:
DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H,41H,42H,43H,44H,45H,46H
END
4.十進(jìn)制數(shù)1-100累加運(yùn)算
《單片機(jī)原理及應(yīng)用實(shí)驗(yàn)教程》(第2版)“第2章 實(shí)驗(yàn)5”(P30)。編寫程序,實(shí)現(xiàn)以下功能:
【功能1】產(chǎn)生十進(jìn)制數(shù)1~100,并存放在片外RAM中以1000H為首地址的Deci數(shù)組中?!竟δ?】對Deci數(shù)組元素進(jìn)行累加運(yùn)算,并將累加和存入內(nèi)部RAM中60H(存累加和低位)和61H(存累加和高位)單元。代碼如下: 方法一:
ORG 0000H
LJMP MAIN
ORG 0030H MAIN:
MOV R7,#100
MOV DPTR,#1000H
MOV SP,#20H
LCALL STEP1
LCALL STEP2
SJMP $
ORG 2000H
STEP1: PUSH 07H
PUSH DPH
PUSH DPL
MOV A,#0
MOV R3,#0 LOOP1: INC A
DA A
XCH A,R3
ADDC A,#0
MOVX @DPTR,A
INC DPTR
XCH A,R3
MOVX @DPTR,A
INC DPTR
DJNZ R7,LOOP1
POP DPL
編者:方園
POP DPH
POP 07H
RET
STEP2: PUSH 07H
PUSH DPH
PUSH DPL
MOV 60H,#0
MOV 61H,#0
MOV R3,#0
LOOP2: INC DPTR
MOVX A,@DPTR
ADD A,60H
DA A
MOV 60H,A
CLR A
ADDC A,61H
DA A
MOV 61H,A
INC DPTR
DJNZ R7,LOOP2
MOV A,#1
ADD A,61H
DA A
MOV 61H,A
POP DPL
POP DPH
POP 07H
RET
END
方法二:
ORG 0000H
LJMP MAIN
ORG 0030H MAIN:
MOV R7,#100
MOV DPTR,#1000H
MOV SP,#20H
編者:方園
LCALL STEP1
LCALL STEP2
SJMP $
ORG 2000H
;送值子函數(shù)
STEP1: PUSH 07H
PUSH DPH
PUSH DPL
MOV A,#0 LOOP1: INC A
DA A
MOVX @DPTR,A
INC DPTR
DJNZ R7,LOOP1
CLR A
ADDC A,#0
MOVX @DPTR,A
POP DPL
POP DPH
POP 07H
RET
;累加子函數(shù)
STEP2: PUSH 07H
PUSH DPH
PUSH DPL
MOV 60H,#0
MOV 61H,#0
LOOP2:
MOVX A,@DPTR
ADD A,60H
DA A
MOV 60H,A
CLR A
ADDC A,61H
DA A
MOV 61H,A
INC DPTR
DJNZ R7,LOOP2
MOVX A,@DPTR
ADD A,61H
DA A
編者:方園
MOV 61H,A POP DPL POP DPH POP 07H RET
END
5.DPTR指針應(yīng)用
《單片機(jī)原理及應(yīng)用實(shí)驗(yàn)教程》(第2版)“第2章 實(shí)驗(yàn)6”(P31)。編寫程序,實(shí)現(xiàn)以下功能:
【功能1】產(chǎn)生十進(jìn)制數(shù)組Deci(1~99),并存放在片內(nèi)RAM中,Deci數(shù)組首地址為08H?!竟δ?】將Deci數(shù)組中的偶數(shù)元素全部送入外部RAM偶數(shù)區(qū),首地址為2000H;將Deci數(shù)組中的奇數(shù)元素全部送入外部RAM奇數(shù)區(qū),首地址為3000H;分別統(tǒng)計(jì)外部RAM偶數(shù)區(qū)和奇數(shù)區(qū)元素個數(shù)。代碼如下:
ORG 0000H
LJMP MAIN
ORG 0030H MAIN:
MOV SP,#70H
MOV R7,#99
MOV R0,#08H
MOV R5,#0
MOV R6,#0
LCALL STEP1
LCALL STEP2
SJMP $
STEP1: PUSH 00H
PUSH 07H
MOV A,#1 LOOP1: DA A
MOV @R0,A
INC R0
INC A
DJNZ R7,LOOP1
POP 07H
POP 00H
RET
編者:方園
STEP2: MOV DPTR,#2000H
PUSH DPL
PUSH DPH
MOV DPTR,#3000H
MOV R3,DPH
MOV R4,DPL LP1: MOV A,@R0
MOV R2,A
JNB ACC.0,LOOP2
SJMP LOOP3
LOOP2: POP DPH
POP DPL
MOVX @DPTR,A
MOV A,R5
ADD A,#1
DA A
MOV R5,A
INC DPTR
PUSH DPL
PUSH DPH
SJMP NEXT
LOOP3: MOV DPH,R3
MOV DPL,R4
MOVX @DPTR,A
MOV A,R6
ADD A,#1
DA A
MOV R6,A
INC DPTR
MOV R3,DPH
MOV R4,DPL
SJMP NEXT
NEXT:
INC R0
DJNZ R7,LP1
POP DPH
POP DPL
RET
END
編者:方園
6.定時器應(yīng)用實(shí)驗(yàn)
DBUF EQU 30H ORG 0000H STRT: LJMP MAIN ORG 000BH LJMP PTF00 ORG 0030H MAIN: MOV DPTR,#5FFFH MOV A,#0DCH MOVX @DPTR,A MOV R5,#20 LP: MOVX A,@DPTR JNB ACC.7,LP MOV A,#00H MOVX @DPTR,A MOV A,#34H MOVX @DPTR,A MOV SP,#60H MOV R0,#39H MOV R7,#06H ML1: MOV @R0,#00H INC R0 DJNZ R7,ML1 MOV TMOD,#01H MOV TL0,#0B0H MOV TH0,#3CH SETB TR0 MOV IE,#82H MOV 40H,#10H ML0: LCALL DIR LJMP ML0 PTF00: PUSH PSW PUSH ACC SETB PSW.3 MOV TL0,#0B0H MOV TH0,#3CH
編者:方園
DJNZ R5,PTFY MOV R5,#20
MOV A,40H DEC A MOV 40H,A JNZ PTFY MOV 40H,#10H MOV R0,#39H MOV R7,#6 PTFX: MOV A,@R0 ADD A,#1 DA A MOV @R0,A CJNE A,#0AH,$+3 JC PTFY MOV @R0,#0 INC R0 DJNZ R7,PTFX PTFY: POP ACC POP PSW RETI DIR:
MOV R3,#06H MOV A,#92H MOV DPTR,#5FFFH MOVX @DPTR,A MOV R1,#39H TY11: MOV A,@R1 MOV DPTR,#CODE1 MOVC A,@A+DPTR MOV DPTR,#5FFFH MOVX @DPTR,A
INC R1 DJNZ R3,TY11 RET
CODE1: DB 0C0H,0F9H,0A4H,0B0H,99H DB 92H,82H,0F8H,80H,90H,88H
編者:方園
DB 83H,0C6H,0A1H,86H,8EH,8CH DB 0C1H,89H,0C7H,0BFH,91H DB 00H,0FFH END
7.廣告燈實(shí)驗(yàn)
ORG 0000H LJMP MAIN ORG 000BH LJMP DELAY ORG 0030H MAIN: MOV DPTR,#TAB MOV R5,#71H MOV R2,#00H MOV R6,#20 MOV TMOD,#01H MOV TL0,#0B0H MOV TH0,#3CH SETB TR0 MOV IE,#82H SJMP $ DELAY: MOV TL0,#0B0H MOV TH0,#2CH
DJNZ R6,LP ACALL STEP MOV R6,#20 DJNZ R5,LP MOV R5,#71H
LP: RETI
STEP: LOOP: MOV A,R2 MOVC A,@A+DPTR MOV P1,A INC R2 DEC R5
編者:方園
RET
TAB:DB 0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,7FH
DB 0FFH,7FH,0BFH,0DFH,0EFH,0F7H,0FBH,0FDH
DB 0FEH,0FFH,0FEH,0FCH,0F8H,0F0H,0E0H,0C0H
DB 80H,00H,80H,0C0H,0E0H,0F0H,0F8H,0FCH
DB 0FEH,0FFH,7FH,3FH,1FH,0FH,07H,03H
DB 01H,00H,01H,03H,07H,0FH,1FH,3FH
DB 7FH,0FFH,7EH,3CH,18H,00H,18H,3CH
DB 7EH,0FFH,0FEH,0FCH,0FCH,0F9H,0F3H,0E7H
DB 0CFH,9FH,3FH,7FH,0FFH,7FH,3FH,9FH
DB 0CFH,0E7H,0F3H,0F9H,0FCH,0FEH,0FFH
DB 0FEH,0FCH,0F8H,0F0H,0E0H,0C0H,80H,00H
DB 80H,40H,20H,10H,08H,04H,02H,01H,00H
DB 01H,02H,04H,08H,10H,20H,40H,80H,00H
DB 80H,0C0H,0E0H,0F0H,0F8H,0FCH,0FEH,0FFH END
第三篇:單片機(jī)實(shí)驗(yàn)
實(shí)驗(yàn)
一、MCS51單片機(jī)基本開發(fā)環(huán)境
1. 實(shí)驗(yàn)?zāi)康模?/p>
1)熟悉軟件的集成開發(fā)環(huán)境 2)掌握單片機(jī)軟件設(shè)計(jì)流程
3)掌握單片機(jī)存貯器結(jié)構(gòu)及各窗口之間的聯(lián)系 2. 實(shí)驗(yàn)內(nèi)容:
1)用三種方法實(shí)現(xiàn)將累加器A內(nèi)容改為20H
方法1--MOV A,#20H 方法2—MOV R0,#20H MOV A,R0 方法3—MOV R0,#20H XCH A,R0 心得:越往下做實(shí)驗(yàn)時就越感覺這題根本不能說是題目,但不得不說在沒接觸過編程軟件,剛開始學(xué)的匯編,第一次做的實(shí)驗(yàn)就光這道題都覺得不知道做什么.所以凡是總有開始,不了解情況的多簡單的都會覺得難.2)將58H位單元置為1,觀察內(nèi)部RAM中2BH內(nèi)容的變化 代碼:
SETB 2BH.0 JMP $ END 心得:這是關(guān)于內(nèi)部存儲中對單元和字節(jié)了解,不理解很容易做錯.比如開始寫的指令為
MOV R0,#58H;MOV @R0,#1
這是錯誤的指令。這就需要認(rèn)真去了解單片機(jī)中的字節(jié)地址與位地址的關(guān)系。80C51中有位尋址區(qū)和字節(jié)尋址區(qū)。題目中58H為位地址,2BH為字節(jié)地址,且58H為2B字節(jié)的最低位。由于58H屬于位尋址區(qū),可用位操作指令 SETB 進(jìn)行置位,SETB 2BH.0 執(zhí)行后,2BH中內(nèi)容變?yōu)椋埃?/p>
3)如果當(dāng)前狀態(tài)為有進(jìn)位、工作寄存器使用區(qū)2,請用3種方法設(shè)置這種狀態(tài)
代碼:
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寫了三段代碼,可分別完成題目要求。不過實(shí)驗(yàn)時只是對代碼進(jìn)行了錯誤調(diào)試,沒有對結(jié)果進(jìn)行檢驗(yàn)。其中值得注意的是對于布爾(位)操作指令的用法,比如傳送指令必須經(jīng)累加器C,如第二段中MOV P0,#01H;MOV C,P0.0,以及對于位尋址的方式(如需用到“.”隔開)的應(yīng)用。4)編一個小程序?qū)?nèi)部RAM中的20H單元的內(nèi)容送到21H單元并調(diào)試
代碼:
MOV R0,#20H MOV @R0,#10H MOV R1,#21H MOV @R1,20H JMP $ END
5)用程序?qū)⒍褩V羔樦赶?0H,然后在堆棧中依次壓入01,02,03,04,05五個數(shù),觀察哪些單元內(nèi)容發(fā)生了變化,各變?yōu)槎嗌??從哪些窗口可以發(fā)現(xiàn)這些變化?順序?qū)⒍褩V械奈鍌€數(shù)放入30H~34H五個單元中,編程實(shí)現(xiàn)之。
代碼:
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)將外部數(shù)據(jù)存貯器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位的寄存器,在使用時若與八位寄存器進(jìn)行數(shù)據(jù)交換時需分為高八位DPH與低八位DPL來用。7)若要求程序從0010H單元開始運(yùn)行,可用兩種方法實(shí)現(xiàn)?
方法一 ORG 0010H 方法二 AJMP 0010H
3. 選做實(shí)驗(yàn)內(nèi)容:數(shù)據(jù)傳送 目的:
1)掌握8051單片機(jī)內(nèi)部數(shù)據(jù)存貯器、外部數(shù)據(jù)存貯器的數(shù)據(jù)傳送特點(diǎn)和應(yīng)用 2)掌握MOV,MOVX和MOVC類指令的用法及區(qū)別 內(nèi)容:
1)將片內(nèi)RAM數(shù)據(jù)區(qū)20H為首地址的十六個字節(jié)傳送到30H為首地址的數(shù)據(jù)區(qū),即: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)將外部數(shù)據(jù)存儲器2000H~200FH單元的十六個數(shù)傳送至內(nèi)部數(shù)據(jù)存儲器的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
總體心得體會:
第一次做實(shí)驗(yàn)主要是熟悉了解了下單片機(jī)編程軟件的使用,開始接觸時在對其軟件不是太了解的情況下實(shí)驗(yàn)編程做的確實(shí)很亂,不清楚該怎樣進(jìn)行,比如不知如何進(jìn)行對指令的調(diào)試,也不清楚該如何觀察結(jié)果,沒有一個整體的概念,所以在了解其開發(fā)環(huán)境上花了不少時間。經(jīng)過一段時間的摸索后也終于了解了其具體的使用,也能夠順利的對指令的編程運(yùn)用。運(yùn)行指令時遇到的一些問題需要注意的也在上面各題中做了說明。還有需要注意的是:進(jìn)入軟件仿真時需要對存儲空間進(jìn)行查看的方法是在Address窗口中輸入:d:00h 顯示內(nèi)部數(shù)據(jù)存儲器從00h開始的單元; x:1000h 顯示外部數(shù)據(jù)存儲器從1000h開始的單元; c:0000H 顯示程序存儲器內(nèi)容。還有由于偽指令 END 定義的原因,在程序末需加一條死循環(huán)調(diào)轉(zhuǎn)指令(如 JMP $)使程序不會進(jìn)入其他未知空間執(zhí)行其他指令。實(shí)驗(yàn)
二、加、減法實(shí)驗(yàn)
1. 實(shí)驗(yàn)?zāi)康?/p>
1)正確使用單片機(jī)的加減運(yùn)算指令
2)掌握不同指令對于程序狀態(tài)字的影響及程序狀態(tài)字的意義、用處 3)掌握ADD,ADDC,SUBB和DA A等指令的用法 4)學(xué)習(xí)模塊化程序設(shè)計(jì)方法 2. 實(shí)驗(yàn)內(nèi)容
1)編寫3字節(jié)二進(jìn)制加法子程序,并用主程序調(diào)用不同的加數(shù)和被加數(shù)來檢測該子程序的正確性。需考慮有進(jìn)位和無進(jìn)位情況。程序入口為: 加數(shù):22H,21H,20H三字節(jié),22H為最高位
被加數(shù):32H,31H,30H三字節(jié),32H為最高位
程序出口為: 23H,22H,21H,20H四字節(jié),23H為最高位 例如:地址:23 22 21 20 32 31 30 執(zhí)行前數(shù)據(jù): 01 23 45 FF 01 01 執(zhí)行后數(shù)據(jù):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;加數(shù)1地址、和的地址 MOV R1, #30H;加數(shù)2地址 CLR C MOV R2, #3;循環(huán)3次 LOOP: MOV A, @R0;取 ADDC A, @R1;加 MOV @R0, A;存 INC R0 INC R1 DJNZ R2, LOOP CLR A ADDC A, #0;得到進(jìn)位 MOV 23H, A;保存 POP PSW RET END
2)編寫三字節(jié)二進(jìn)制減法子程序 入口:被減數(shù): 52H,51H,50H, 50H為最低位
減數(shù): 42H,41H,40H, 40H為最低位
出口:差:外部數(shù)據(jù)存貯器2003H~2000H(2000H為最低位)用主程序調(diào)用多組數(shù)據(jù)來調(diào)試,需考慮無借位和有借位兩種情況。例如:
執(zhí)行前:地址: 52 51 50 42 41 40
數(shù)據(jù): 90 80 70 10 10 10
執(zhí)行后:地址: 2003 2002 2001 2000
數(shù)據(jù): 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;被減數(shù)地址 MOV R1, #40H;減數(shù)地址 MOV DPTR, #2000H;差的地址 CLR C MOV R2, #3;循環(huán)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位十進(jìn)制加法子程序(十進(jìn)制數(shù)采用壓縮BCD碼存放)入口: 加數(shù):24H—20H,低地址放低字節(jié)
被加數(shù):29H—25H,低地址放低字節(jié)
出口 和:4005H—4000H,低地址放低字節(jié)
要求調(diào)用多組數(shù)據(jù)調(diào)試,注意觀察PSW的變化,理解DA A指令的含義。例如:
執(zhí)行前地址:24 23 22 21 20 29 28 27 26 25
數(shù)據(jù):12 34 56 78 90 88 99 33 12 74
執(zhí)行后地址:4005 4004 4003 4002 4001 4000
數(shù)據(jù): 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;加數(shù)1地址 MOV R1, #25H;加數(shù)2地址 MOV DPTR,#4000H CLR C MOV R2, #5;循環(huán)5次 LOOP: MOV A, @R0;取 ADDC A, @R1;加
DA A;調(diào)整為BCD碼 MOVX @DPTR, A;存 INC R0 INC R1 INC DPTR DJNZ R2, LOOP POP PSW RET END
第四篇:單片機(jī)實(shí)驗(yàn)
實(shí)驗(yàn)一清0、移數(shù)
將片內(nèi)20H~2FH及片外0010H~001FH單元清0;
然后將片內(nèi)30H~3FH的數(shù)據(jù)移到片外0000H~000FH中;判斷:
若(30H)≤10,則求其平方存到31H中,并將位00H置1(其它位清0)若(30H)=10,則將AA存到31H中,并位01H置1(其它位清0)若(30H)≥10,則減10存到31H中,并位02H置1(其它位清0)
實(shí)驗(yàn)二加法、排序
有兩個長度為10的無符號數(shù)分別放在片內(nèi)20H和30H為首的存儲單元中(低位),求其對應(yīng)項(xiàng)之和(帶進(jìn)位位),結(jié)果放在40H為首的單元中(若最高位有進(jìn)位則存在后續(xù)單元中),然后按升序排列放在50H為首的單元中
實(shí)驗(yàn)三查表、散轉(zhuǎn)
設(shè)有一表格,表中數(shù)為:00H、11H、22H、33H、44H、55H、66H、77H、88H、99H、AAH、BBH、CCH、DDH、EEH、FFH。根據(jù)片外0001H單元的低4位的數(shù),取出表中相應(yīng)的值存到片內(nèi)30H中;根據(jù)片外0001H單元的高4位的數(shù),將片內(nèi)RAM區(qū)中可位尋址的相應(yīng)的位置1(從位00H~位0FH,只可有一個位地址為1)
實(shí)驗(yàn)四外中斷
P1.0~P1.7接8個發(fā)光二極管,管腳INT0、INT1接兩個按鍵,分別定義為“L”和“R”。
要求:上電全滅,按 “L”(或R)鍵,最右(左)側(cè)燈亮,每按一次“L” ”(或R)鍵,則亮的燈向左(右)移一位,當(dāng)移到最左(右)端時,燈全滅
實(shí)驗(yàn)五定時器
P1.0、P1.1分別接兩個發(fā)光二極管,INT0腳接
一按鍵做開關(guān),按一次開關(guān),則啟動,兩個發(fā)
光管一亮一滅,亮滅時間均為1秒;再按一次
開關(guān),則關(guān)閉,即兩個發(fā)光管都滅。
實(shí)驗(yàn)六定時器、計(jì)數(shù)器
P3.2口輸出周期為2S的方波,T1口為脈沖輸入端,記錄輸入的脈沖個數(shù),脈沖個數(shù)由P1口所接的8個數(shù)碼管顯示(二進(jìn)制),設(shè)一按鍵作為開關(guān)控制系統(tǒng)運(yùn)行,關(guān)閉時數(shù)碼管全滅,P3.2無輸出。
第五篇:單片機(jī)最小系統(tǒng)實(shí)驗(yàn)總結(jié)
STC89C51單片機(jī)最小系統(tǒng)板開發(fā)實(shí)驗(yàn)總結(jié) 實(shí)驗(yàn)小組成員:陸敘旺 張愛華 溫小靜
總的要求:設(shè)計(jì)并制作STC89C51單片機(jī)最小系統(tǒng)板。提供單片機(jī)最基本的運(yùn)行環(huán)境并具備ISP下載程序的功能。由于該板將來擬用作參賽設(shè)計(jì)的核心板,所以要求該板的設(shè)計(jì)具備使用靈活、方便,并采用模塊化設(shè)計(jì)使該板能與將來的整個系統(tǒng)很好的連接。同時應(yīng)具備很好的可維修與可維護(hù)性。具體要求:
[1] [2] [3] [4] [5] [6] 提供合適的電源接口并具備電源指示燈 應(yīng)具有上電復(fù)位和手動復(fù)位功能 支持最大40MHz的運(yùn)行頻率
具有RS232接口,可連接電腦下載程序
八位流水燈,用于測試最小系統(tǒng)板是否工作正常 應(yīng)引出單片機(jī)的所有輸入輸出引腳
考慮的問題:
[1] [2] [3] [4] [5] [6] [7] 如何做到模塊化? 是否需要復(fù)位按鍵? 是否要編程座?
系統(tǒng)晶振插座:可更換升級晶振。是否需要EA跳線?
考慮是否需要電源開關(guān),以及采用哪種開關(guān)最好? 其它
實(shí)驗(yàn)設(shè)計(jì)過程: 原理圖設(shè)計(jì):
(1)單片機(jī)CPU部分:采用STC89C51芯片,封裝DIP-40。40個引腳,用40個排針引出,40腳接VCC,20腳接GND,VCC與GND之間用一小電容(可以用104)耦合。(去耦電容的主要功能就是提供一個局部的直流電源給有源器件,以減少開關(guān)噪聲在板上的傳播和將噪聲引導(dǎo)到地。)P0,P1,P2,P3做IO接口。9腳接RST(復(fù)位電路)。18,19腳接晶振,(這次實(shí)驗(yàn)用晶振為40M)。31腳接EA。
(2)電源供電部分:直接用排針引入電源給單片機(jī)供電,另外一種電源輸入就是加一個穩(wěn)壓塊7805,正電源端接一個二極管,保護(hù)電路,防止上電時正負(fù)反接。經(jīng)過穩(wěn)壓后串一個電阻(幾百歐)引出一個發(fā)光二極管。做為電源指示燈。問題出現(xiàn)在,如果是5V供電,經(jīng)過7805
穩(wěn)壓后,得到的電源并不夠5V了,只有3V多,所以,如果是選用經(jīng)過穩(wěn)壓后的電源供電,那么輸入就要有7V。(3)晶振部分:采用40M晶振,電容可以采用30P(可以用更小點(diǎn)的電容,小點(diǎn)的電容理論上效果會好點(diǎn))。在封裝電路的時候,晶振部分加了一個晶振插座,這樣,可以更換升級晶振。
(4)復(fù)位電路部分:電復(fù)位和手動復(fù)位,電復(fù)位就是接一個1U的電容,手動復(fù)位就是接一個開關(guān),這個開關(guān)選用點(diǎn)觸開關(guān)比較方便。
(5)EA電位選擇部分:單片機(jī)的9腳(EA)。采用了排針引出,與電源的正負(fù)兩端一起用三列排針引出,實(shí)驗(yàn)用到時,用兩個孔的插帽做EA跳線。
(6)RS232接口,電腦下載程序部分:下載程序接口用DB9,電平轉(zhuǎn)換采用MAX232芯片。DB9的2,3腳接到MAX232的7(T2OUT),8(R2IN)腳,5腳接地。MAX232的9(R2OUT),10(T2IN)分別接到單片機(jī)上的P3^0(RXD)和P3^1(TXD)腳。MAX232的1,3腳,4,5腳,6,15腳,2,16腳,都串接一個電容,這些電容的大小最好都是1U,當(dāng)然,也可以采用其他的小電容,例如:104。15接地,16接VCC,加一個去耦電容104。(7)LED試驗(yàn)燈部分:8個發(fā)光二極管,正端接到P2端,負(fù)端接330歐的排阻,當(dāng)P2口輸出高電位時,發(fā)光二極管亮,地電位時,發(fā)光二極管熄滅。(8)總電路圖如下:
PCB圖設(shè)計(jì):電源線,地線,做得相對大點(diǎn),排線時,考慮到信號干擾,線與線之間的距離要適當(dāng)。特別是電源與地線不要靠太近,輸入輸出排版盡量合理。輸入輸出接口放到板子比較好接,好調(diào)的地方。盡量避免跳線,主干部分(CPU)最好排在板子中間。調(diào)試過程:
焊接好板子,做出來的實(shí)物圖,接上電源,燒寫一個流水等程序進(jìn)去,可以看到8個發(fā)光二極管閃亮。
實(shí)際做板遇到的問題;在做板中,出現(xiàn)的問題主要集中在RS232接口,電腦下載程序部分和電源部分。剛開始用RS232的13腳和14腳接DB9的2,3腳。11腳和12腳接到單片機(jī)的P3^0腳和P3^1腳,調(diào)試過程中,程序下載不進(jìn)去,進(jìn)過檢查,其它部分電路都沒有錯。后來又用跳線按照上述講的接。結(jié)果程序可以下載進(jìn)去了。電源部分:采用7805穩(wěn)壓,效果不是很好,帶來了不少麻煩。所以,后面干脆把7805也去掉,如果是用我們自己做的電源供電,穩(wěn)定性已經(jīng)很好了,沒必要i再次穩(wěn)壓。現(xiàn)在我們基本都是用自己做的直流穩(wěn)壓電源。所以,這里可以去掉穩(wěn)壓塊電路。
想做一塊好的板子,封裝一定要對口,不對口的話就接不上去,或者接上去了也不好看。原理圖盡量要做得清晰好看,PCB圖盡量用手工布線,布線的時候不要布得太繞了。線是追求最短。做板的時候最好買一些好的材料做,效果會更好,比如說,銅板,電容。
想做一塊好的板子,就以我們現(xiàn)在的水平。不要追求速度。能按時完成就好。以后再慢慢提高。遇到不懂的,希望大家一起討論。
******2***101112******9101112***819201
19876543212019******42526272829303******6543212019******2121212121212***89