第一篇:實(shí)驗(yàn)1:?jiǎn)纹瑱C(jī)語(yǔ)言程序設(shè)計(jì)仿真實(shí)驗(yàn)(共)
實(shí)驗(yàn)一:?jiǎn)纹瑱C(jī)匯編語(yǔ)言程序設(shè)計(jì)仿真實(shí)驗(yàn)
目的: 1.掌握單片機(jī)仿真軟件的使用。
2.掌握單片機(jī)匯編語(yǔ)言程序設(shè)計(jì)的基本方法。
3.掌握單片機(jī)編程、調(diào)試方法。
設(shè)計(jì)題目:
1、試編寫程序。統(tǒng)計(jì)內(nèi)RAM 30H一50H單元中FFH的個(gè)數(shù),并將統(tǒng)計(jì)結(jié)果存51H。
2、從內(nèi)RAM 30H單元開(kāi)始存放著一組無(wú)符號(hào)數(shù),其個(gè)數(shù)存在21H單元中。試編寫程序,找出其中最小的數(shù),并將其存入20H單元中。
3、設(shè)外RAM 2000H單元中有一個(gè)8位二進(jìn)制數(shù),試編程將該數(shù)的低四位屏蔽掉,并送回原存儲(chǔ)單元。
4、試編寫程序,求出內(nèi)RAM20H單元中“1”的個(gè)數(shù),并將結(jié)果存入21H單元。
5、試編一程序,分別統(tǒng)計(jì)在內(nèi)部RAM的30H~50H單元的數(shù)據(jù)區(qū)中奇數(shù)和偶數(shù)的個(gè)數(shù),并將奇數(shù)和偶數(shù)的個(gè)數(shù)分別存放在51H和52H單元中。
6、在2000H~2004H單元中,存有5個(gè)壓縮的BCD碼,試編程將它們轉(zhuǎn)換成ASCII碼,并存入2005H開(kāi)始的連續(xù)單元中。
實(shí)驗(yàn)報(bào)告格式:
一.設(shè)計(jì)題目:
二.編程實(shí)現(xiàn):(左邊為實(shí)驗(yàn)前的程序,右邊為實(shí)驗(yàn)后調(diào)試正確的程序)
三.實(shí)驗(yàn)小結(jié):
軟件實(shí)驗(yàn)小結(jié):
可以從以下幾個(gè)方面總結(jié)
1. 進(jìn)一步掌握并理解單片機(jī)指令系統(tǒng)的功能及應(yīng)用(熟悉MCS—51單片機(jī)指令
系統(tǒng))。
2. 加深對(duì)尋址方式的理解。
3. 了解程序設(shè)計(jì)過(guò)程,掌握單片機(jī)程序設(shè)計(jì)的基本方法。
4. 掌握編程、調(diào)試方法(包括排除程序錯(cuò)誤、決解問(wèn)題的方法)。
5. 掌握單片機(jī)仿真軟件的使用(包括對(duì)以后項(xiàng)目開(kāi)發(fā)的好處)
6. 通過(guò)編程設(shè)計(jì)、軟件調(diào)試,進(jìn)一步了解和掌握單片機(jī)軟、硬件的工作原理,為
下一步硬件實(shí)驗(yàn)、課程設(shè)計(jì)、工程訓(xùn)練打下良好的基礎(chǔ)。
第二篇:C語(yǔ)言程序設(shè)計(jì)實(shí)驗(yàn)
第一次試驗(yàn)
1.編寫一個(gè)程序,求出給定半徑r的圓的面積和周長(zhǎng),并且輸出計(jì)算結(jié)果。其中: r的值由用戶輸入,用浮點(diǎn)型數(shù)據(jù)處理。
2.給一百分制成績(jī),要求輸出成績(jī)等級(jí)’A’、’B’、’C’、’D’、’E’。90分以上
為’A’,80~89分為’B’,70~79分為’C’,60~69分為’D’,60分以下為’E’。
3.輸入兩個(gè)正整數(shù)m和n,求其最大公約數(shù)和最小公倍數(shù)。
4.輸入一行字符,分別統(tǒng)計(jì)出其中英文字母、空格、數(shù)字和其他字符的個(gè)數(shù)。
5.求sn=a+aa+aaa+…+aa...a(n個(gè)a)之值,其中a是一個(gè)數(shù)字。例如:2+22+222+2222+22222
(此時(shí)n=5),n由鍵盤輸入。
第二次試驗(yàn)
1.有一分?jǐn)?shù)序列:,,23581321,...求出這個(gè)數(shù)列的前20項(xiàng)之和。1235813
2.求一個(gè)3?3矩陣對(duì)角線元素之和。
3.將一個(gè)數(shù)組中的值按逆序重新存放,例如原來(lái)的順序?yàn)?8,6,5,4,1。要求改
為:1,4,5,6,8。
4.有一篇文章,共有3行文字,每行有80個(gè)字符。要求分別統(tǒng)計(jì)出其中英文大寫字母、小寫字母、數(shù)字、空格、以及其他字符的個(gè)數(shù)。
第三次實(shí)驗(yàn)
1.將字符串computer賦給一個(gè)字符數(shù)組,然后從第一個(gè)字母開(kāi)始輸出該串。請(qǐng)用指針實(shí)
現(xiàn)。
2.將無(wú)符號(hào)八進(jìn)制數(shù)字字符串轉(zhuǎn)換為十進(jìn)制整數(shù)。例如,輸入的字符串為556,則輸出十
進(jìn)制整數(shù)366。用指針實(shí)現(xiàn)。
3.編程輸入一行文字,找出其中的大寫字母,小寫字母,空格,數(shù)字,及其他字符的個(gè)數(shù),用指針實(shí)現(xiàn)。
第四次實(shí)驗(yàn)
1.寫一個(gè)判斷素?cái)?shù)的函數(shù),在主函數(shù)輸入一個(gè)整數(shù),輸出是否是素?cái)?shù)的信息。
2.寫一函數(shù),使輸入的一個(gè)字符串按反序存放,在主函數(shù)中輸入和輸出字符串。
3.寫一函數(shù),由實(shí)參傳來(lái)一個(gè)字符串,統(tǒng)計(jì)此字符串中字母、數(shù)字、空格和其他字符的個(gè)
數(shù),在主函數(shù)中輸入字符串及輸出上述的結(jié)果。
4.寫一函數(shù),使給定的一個(gè)二維數(shù)組(3×3)轉(zhuǎn)置,即行列互換。
第三篇:?jiǎn)纹瑱C(jī)實(shí)驗(yàn)9 多分支程序設(shè)計(jì)
實(shí)驗(yàn)9 多分支程序設(shè)計(jì)
1、實(shí)驗(yàn)內(nèi)容
用P1.0、P1.1控制流水燈的變化
P1.0、P1.1=00燈全滅
P1.0、P1.1=01單燈亮左循環(huán)
P1.0、P1.1=10單燈亮右循環(huán)
P1.0、P1.1=11雙燈亮左循環(huán)
燈亮的時(shí)時(shí)為1秒。用軟件延時(shí)實(shí)現(xiàn)。*用T0定時(shí)選作。
2、實(shí)驗(yàn)步驟
1)打開(kāi)PV32編程序。匯編正確進(jìn)入調(diào)試界面。否則修改程序重新匯編直到通過(guò)。
2)打開(kāi)P0、P1窗口給
3)調(diào)試燈全滅、單燈亮左循環(huán)、單燈亮右循環(huán)、雙燈亮左循環(huán)程序觀察并記祿寄存器、內(nèi)存的變化。判斷程序是否正確。若發(fā)現(xiàn)問(wèn)題重返編輯界面,修改、存盤、匯編。返回調(diào)試界面調(diào)試通過(guò)。
4)設(shè)斷點(diǎn)調(diào)試主程序觀察并記祿寄存器、內(nèi)存的變化。判斷程序是否正確。若發(fā)現(xiàn)問(wèn)題重返編輯界面,修改、存盤、匯編。返回調(diào)試界面調(diào)試通過(guò)。
首先將P1.0、P1.1置00觀察P2窗口燈是否全滅,然后改變P1.0、1.1的設(shè)置觀察流水燈運(yùn)行是否正確。
5)流水燈運(yùn)行中改變P1.0、1.1看流燈能否隨之變化。若執(zhí)行正確程序通過(guò)。否則在每個(gè)流水子程序中加入讀P1口散轉(zhuǎn)子程序。
3.實(shí)驗(yàn)報(bào)告
1.寫出主程序流程圖、子程序流程圖、程序清單
2.根據(jù)記淥數(shù)據(jù)給程序加注解
3.調(diào)試心得
第四篇:?jiǎn)纹瑱C(jī)實(shí)驗(yàn)
實(shí)驗(yàn)
一、MCS51單片機(jī)基本開(kāi)發(fā)環(huán)境
1. 實(shí)驗(yàn)?zāi)康模?/p>
1)熟悉軟件的集成開(kāi)發(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)時(shí)就越感覺(jué)這題根本不能說(shuō)是題目,但不得不說(shuō)在沒(méi)接觸過(guò)編程軟件,剛開(kāi)始學(xué)的匯編,第一次做的實(shí)驗(yàn)就光這道題都覺(jué)得不知道做什么.所以凡是總有開(kāi)始,不了解情況的多簡(jiǎn)單的都會(huì)覺(jué)得難.2)將58H位單元置為1,觀察內(nèi)部RAM中2BH內(nèi)容的變化 代碼:
SETB 2BH.0 JMP $ END 心得:這是關(guān)于內(nèi)部存儲(chǔ)中對(duì)單元和字節(jié)了解,不理解很容易做錯(cuò).比如開(kāi)始寫的指令為
MOV R0,#58H;MOV @R0,#1
這是錯(cuò)誤的指令。這就需要認(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,請(qǐng)用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寫了三段代碼,可分別完成題目要求。不過(guò)實(shí)驗(yàn)時(shí)只是對(duì)代碼進(jìn)行了錯(cuò)誤調(diào)試,沒(méi)有對(duì)結(jié)果進(jìn)行檢驗(yàn)。其中值得注意的是對(duì)于布爾(位)操作指令的用法,比如傳送指令必須經(jīng)累加器C,如第二段中MOV P0,#01H;MOV C,P0.0,以及對(duì)于位尋址的方式(如需用到“.”隔開(kāi))的應(yīng)用。4)編一個(gè)小程序?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五個(gè)數(shù),觀察哪些單元內(nèi)容發(fā)生了變化,各變?yōu)槎嗌??從哪些窗口可以發(fā)現(xiàn)這些變化?順序?qū)⒍褩V械奈鍌€(gè)數(shù)放入30H~34H五個(gè)單元中,編程實(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個(gè)單元中存放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
心得:此處需要訪問(wèn)片外存儲(chǔ)空間,需要借助寄存器DPTR,需注意其為16位的寄存器,在使用時(shí)若與八位寄存器進(jìn)行數(shù)據(jù)交換時(shí)需分為高八位DPH與低八位DPL來(lái)用。7)若要求程序從0010H單元開(kāi)始運(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為首地址的十六個(gè)字節(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ù)存儲(chǔ)器2000H~200FH單元的十六個(gè)數(shù)傳送至內(nèi)部數(shù)據(jù)存儲(chǔ)器的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
總體心得體會(huì):
第一次做實(shí)驗(yàn)主要是熟悉了解了下單片機(jī)編程軟件的使用,開(kāi)始接觸時(shí)在對(duì)其軟件不是太了解的情況下實(shí)驗(yàn)編程做的確實(shí)很亂,不清楚該怎樣進(jìn)行,比如不知如何進(jìn)行對(duì)指令的調(diào)試,也不清楚該如何觀察結(jié)果,沒(méi)有一個(gè)整體的概念,所以在了解其開(kāi)發(fā)環(huán)境上花了不少時(shí)間。經(jīng)過(guò)一段時(shí)間的摸索后也終于了解了其具體的使用,也能夠順利的對(duì)指令的編程運(yùn)用。運(yùn)行指令時(shí)遇到的一些問(wèn)題需要注意的也在上面各題中做了說(shuō)明。還有需要注意的是:進(jìn)入軟件仿真時(shí)需要對(duì)存儲(chǔ)空間進(jìn)行查看的方法是在Address窗口中輸入:d:00h 顯示內(nèi)部數(shù)據(jù)存儲(chǔ)器從00h開(kāi)始的單元; x:1000h 顯示外部數(shù)據(jù)存儲(chǔ)器從1000h開(kāi)始的單元; c:0000H 顯示程序存儲(chǔ)器內(nèi)容。還有由于偽指令 END 定義的原因,在程序末需加一條死循環(huán)調(diào)轉(zhuǎn)指令(如 JMP $)使程序不會(huì)進(jìn)入其他未知空間執(zhí)行其他指令。實(shí)驗(yàn)
二、加、減法實(shí)驗(yàn)
1. 實(shí)驗(yàn)?zāi)康?/p>
1)正確使用單片機(jī)的加減運(yùn)算指令
2)掌握不同指令對(duì)于程序狀態(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ù)來(lái)檢測(cè)該子程序的正確性。需考慮有進(jìn)位和無(wú)進(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ù)來(lái)調(diào)試,需考慮無(wú)借位和有借位兩種情況。例如:
執(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
第五篇:?jiǎn)纹瑱C(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)二加法、排序
有兩個(gè)長(zhǎng)度為10的無(wú)符號(hào)數(shù)分別放在片內(nèi)20H和30H為首的存儲(chǔ)單元中(低位),求其對(duì)應(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,只可有一個(gè)位地址為1)
實(shí)驗(yàn)四外中斷
P1.0~P1.7接8個(gè)發(fā)光二極管,管腳INT0、INT1接兩個(gè)按鍵,分別定義為“L”和“R”。
要求:上電全滅,按 “L”(或R)鍵,最右(左)側(cè)燈亮,每按一次“L” ”(或R)鍵,則亮的燈向左(右)移一位,當(dāng)移到最左(右)端時(shí),燈全滅
實(shí)驗(yàn)五定時(shí)器
P1.0、P1.1分別接兩個(gè)發(fā)光二極管,INT0腳接
一按鍵做開(kāi)關(guān),按一次開(kāi)關(guān),則啟動(dòng),兩個(gè)發(fā)
光管一亮一滅,亮滅時(shí)間均為1秒;再按一次
開(kāi)關(guān),則關(guān)閉,即兩個(gè)發(fā)光管都滅。
實(shí)驗(yàn)六定時(shí)器、計(jì)數(shù)器
P3.2口輸出周期為2S的方波,T1口為脈沖輸入端,記錄輸入的脈沖個(gè)數(shù),脈沖個(gè)數(shù)由P1口所接的8個(gè)數(shù)碼管顯示(二進(jìn)制),設(shè)一按鍵作為開(kāi)關(guān)控制系統(tǒng)運(yùn)行,關(guān)閉時(shí)數(shù)碼管全滅,P3.2無(wú)輸出。