單片機(jī)實(shí)驗(yàn)指導(dǎo)書(shū)_第1頁(yè)
單片機(jī)實(shí)驗(yàn)指導(dǎo)書(shū)_第2頁(yè)
單片機(jī)實(shí)驗(yàn)指導(dǎo)書(shū)_第3頁(yè)
單片機(jī)實(shí)驗(yàn)指導(dǎo)書(shū)_第4頁(yè)
單片機(jī)實(shí)驗(yàn)指導(dǎo)書(shū)_第5頁(yè)
已閱讀5頁(yè),還剩94頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、實(shí)驗(yàn)一 存儲(chǔ)器塊清零一、實(shí)驗(yàn)?zāi)康?. 掌握匯編程序設(shè)計(jì)及其調(diào)試程序方法2 掌握存儲(chǔ)器的讀寫(xiě)方法二、實(shí)驗(yàn)內(nèi)容1. 編寫(xiě)程序,將外部數(shù)據(jù)存儲(chǔ)器中0100h-01ffh單元的內(nèi)容全部清零。2. 修改程序,將存儲(chǔ)器中0100h-01ffh單元的內(nèi)容置成 0ffh,0feh,0fdh,01h,00h。三、程序框圖 圖1 數(shù)據(jù)塊清零程序框圖四、程序清單blockequ4000horg0000hmovdptr, #block ; dptr = _ movr0, #0 ; r0 = _ clra ; a = _loop: movxdptr, a ; dptr = _ incdptr ; dptr = _ dj

2、nzr0, loop ; r0 = _ , z = _ , pc = _ ljmp$ ; r0 = _ , pc = _ end五、實(shí)驗(yàn)步驟1. 新建匯編文件(文件名.asm),輸入源程序,另存于d: m51的目錄下。2. 匯編源程序。3. 分別用單步、斷點(diǎn)和連續(xù)執(zhí)行的方法調(diào)試程序,并觀察寄存器和存儲(chǔ)器的變化。實(shí)驗(yàn)二 數(shù)據(jù)塊移動(dòng)一、實(shí)驗(yàn)?zāi)康?. 掌握匯編程序設(shè)計(jì)及其調(diào)試程序方法。2 掌握數(shù)據(jù)塊的移動(dòng)方法。二、實(shí)驗(yàn)內(nèi)容 將指定源首地址和長(zhǎng)度的存儲(chǔ)塊移到指定目標(biāo)位置1編寫(xiě)程序,用地址加一的方法將0000h-00ffh單元的內(nèi)容復(fù)制到0100h-01ffh的存儲(chǔ)單元中。2編寫(xiě)程序,用地址減一的方法完

3、成上述功能。三、程序框圖圖2 程序框圖1 圖3 程序框圖2四、實(shí)驗(yàn)步驟1. 新建匯編文件(文件名.asm),輸入源程序,另存于d: m51的目錄下。2. 匯編源程序。3. 分別用單步、斷點(diǎn)和連續(xù)執(zhí)行的方法調(diào)試程序,并觀察寄存器和存儲(chǔ)器的變化。五、程序清單991 用地址加一的方法實(shí)現(xiàn)數(shù)據(jù)塊移動(dòng); 0000h -00ffh -> 0100h-01ffhdata1 equ 0000hdata2 equ 0100h org 0000h mov dptr,#data2 mov p2, dph mov r0, dpl mov dptr, #data1 mov r7,#00hloop1: movx a

4、, dptr movx r0, a inc dptr inc r0 cjne r0, #00h, goon1 inc p2goon1: djnz r7, loop1 ljmp $ end2 用地址減一的方法實(shí)現(xiàn)數(shù)據(jù)塊移動(dòng); 0000h -00ffh -> 0100h-01ffhdata1 equ 00ffhdata2 equ 01ffh org 0000h mov dptr,#data2 mov p2, dph mov r0, dpl mov dptr, #data1 mov r7,#00hloop1: movx a, dptr movx r0, a dec dpl mov a, dpl

5、 cjne a, #00h, coon1 dec dphcoon1: dec r0 cjne r0, #00h, goon2 dec p2goon2: djnz r7, loop1 ljmp $ end五、思考題 當(dāng)源數(shù)據(jù)塊的地址與目標(biāo)數(shù)據(jù)塊的地址重疊時(shí),將會(huì)發(fā)生什么情況?應(yīng)采用哪種方法編寫(xiě)程序,才能保證所復(fù)制的數(shù)據(jù)與源數(shù)據(jù)完全一致。 先運(yùn)行實(shí)驗(yàn)一的第二段程序,將本次實(shí)驗(yàn)的目標(biāo)地址修改為0180h,觀察哪個(gè)程序運(yùn)行結(jié)果正確。再將本次實(shí)驗(yàn)的目標(biāo)地址分別修改為0080h,觀察哪個(gè)程序運(yùn)行結(jié)果正確。實(shí)驗(yàn)三 二進(jìn)制到bcd碼轉(zhuǎn)換一、 實(shí)驗(yàn)?zāi)康?掌握簡(jiǎn)單的數(shù)值轉(zhuǎn)換算法2基本了解數(shù)值的各種表達(dá)方法二、實(shí)驗(yàn)

6、內(nèi)容計(jì)算機(jī)中的數(shù)值有各種表達(dá)方式,掌握各種數(shù)制之間的轉(zhuǎn)換是單片機(jī)應(yīng)用的基礎(chǔ)。1. 編寫(xiě)一個(gè)雙字節(jié)二進(jìn)制數(shù)到壓縮bcd碼的轉(zhuǎn)換子程序,其:入口條件:待轉(zhuǎn)換的雙字節(jié)二進(jìn)制數(shù)在r6、r7中。出口信息:轉(zhuǎn)換后的三字節(jié)壓縮碼整數(shù)在r3、r4、r5中。2 編寫(xiě)一個(gè)雙字節(jié)二進(jìn)制數(shù)到分離bcd碼的轉(zhuǎn)換子程序,其:入口條件:待轉(zhuǎn)換的雙字節(jié)二進(jìn)制數(shù)在r6、r7中出口信息:轉(zhuǎn)換后的分離碼在5ah5fh的6個(gè)單元中。3. 編寫(xiě)程序,將20h、21h的雙字節(jié)二進(jìn)制數(shù)轉(zhuǎn)換為分離碼存放在5ah5fh的6個(gè)單元中。三、 程序框圖四、程序清單;主程序xsq equ 60h org 0000h mov r6, #0ffh mov

7、 r7,#0ffhlcall flbcd ;調(diào)分離bcd碼程序 sjmp $;二進(jìn)制數(shù)轉(zhuǎn)換分離bcd碼程序flbcd: lcall hb2 ;調(diào)bcd碼轉(zhuǎn)換程序 mov a, r3 anl a, #0f0h swap a mov xsq, a mov a, r3 anl a, #0fh mov xsq+1, a mov a, r4 anl a, #0f0h swap a mov xsq+2, a mov a, r4 anl a, #0fh mov xsq+3, a mov a, r5 anl a, #0f0h swap a mov xsq+4, a mov a, r5 anl a, #0fh

8、mov xsq+5, a ret;二進(jìn)制數(shù)轉(zhuǎn)換壓縮bcd碼子程序;入口條件:待轉(zhuǎn)換的十六進(jìn)制數(shù)在r6、r7中,;出口信息:轉(zhuǎn)換后的bcd碼在r3、r4、r5中hb2: clra; movr3, a ; movr4, a mov r5, a movr2, #10h;雙字節(jié)需循環(huán)16次hb20:mova, r7;高位移到cy中 rlca movr7, amova, r6rlcamovr6, amova, r5;bcd碼帶進(jìn)位自身相加addca, r5daa;十進(jìn)制調(diào)整movr5, amova, r4addca, r4daamovr4, amova, r3addca, r3movr3, a ;萬(wàn)位不

9、超過(guò)6不用調(diào)整djnzr2, hb20;16位沒(méi)有處理完轉(zhuǎn) ret五、實(shí)驗(yàn)步驟 分別用單步、斷點(diǎn)和連續(xù)執(zhí)行的方法調(diào)試程序,并觀察寄存器和存儲(chǔ)器的變化。六、思考題 如何將分立bcd碼和壓縮bcd碼轉(zhuǎn)換成二進(jìn)制碼。實(shí)驗(yàn)四 四位壓縮bcd碼加法實(shí)驗(yàn)一、 實(shí)驗(yàn)?zāi)康?了解設(shè)計(jì)壓縮bcd碼加法程序的方法2掌握加法指令、十進(jìn)制調(diào)整指令的使用方法。二、實(shí)驗(yàn)內(nèi)容把30h、31h單元中的四位十進(jìn)制數(shù)與32h、33h單元中的四位十進(jìn)制數(shù)相加,結(jié)果存放在30h、31h、32h單元。(數(shù)據(jù)存放格式為低位在前,高位在后)程序運(yùn)行前,應(yīng)先將30h-33h單元的加數(shù)和被加數(shù)賦值。執(zhí)行結(jié)果填在表1-1中。表1預(yù)置被加數(shù)預(yù)置被加

10、數(shù)程序運(yùn)行結(jié)果(30h)(31h)(32h)(33h)(30h)(31h)(32h)十進(jìn)制34127856三、 程序框圖 四、 程序清單 data1 equ 30h ; 加數(shù)地址data2 equ 32h ; 被加數(shù)地址 org 0000h mov r0, #data1 mov r1, #data2 mov a, r0 add a, r1 da a mov r0, a inc r0 inc r1 mov a, r0 addc a, r1 da a mov r0, a inc r0 clr a addc a, #0 mov r0, a sjmp $ end實(shí)驗(yàn)五 布爾操作實(shí)驗(yàn)一、 實(shí)驗(yàn)?zāi)康?掌握

11、位操作指令的使用方法2了解用程序?qū)崿F(xiàn)組合邏輯電路的功能二、實(shí)驗(yàn)內(nèi)容用程序?qū)崿F(xiàn)圖6所示組合邏輯電路的功能位地址: 07h 06h 05h 04h 03h 02h 01h 00hvwuxyzq字節(jié)地址: 20h 三、 程序清單qbit00h zbit02hybit03hxbit04hubit05hwbit06hvbit07h 表2執(zhí)行前執(zhí)行后(20h)f0(20h)f4(20h)(20h)org0000hmovc, vorlc, wmovpsw.4, cmovc, xorlc, /yanlc, psw.4anlc, /zmovq, csjmp$end 程序執(zhí)行前,將表2中值填入20h單元,執(zhí)行結(jié)果

12、填入表中,并對(duì)執(zhí)行結(jié)果加以說(shuō)明。實(shí)驗(yàn)六 排序?qū)嶒?yàn)一、實(shí)驗(yàn)?zāi)康牧私鈹?shù)據(jù)排序的簡(jiǎn)單算法。二、實(shí)驗(yàn)內(nèi)容寄存器50h5fh單元中存放16個(gè)數(shù)據(jù),編寫(xiě)一個(gè)程序?qū)?shù)據(jù)按照從小到大的次序排列。“冒泡排序”算法是:從第一個(gè)數(shù)據(jù)開(kāi)始相鄰的數(shù)據(jù)比較,若次序不對(duì),兩數(shù)據(jù)交換位置,第一遍比較(n-1)次后,最大的數(shù)據(jù)已排到數(shù)組的尾部,第二遍僅需比較(n-2)就夠了,共比較(n-1)遍就完成排序,這樣共有兩重循環(huán)。帶標(biāo)志位的“冒泡排序”算法:設(shè)置一個(gè)標(biāo)志位,進(jìn)入外循環(huán)時(shí)標(biāo)志位清0,在內(nèi)循環(huán)中相鄰兩數(shù)交換位置時(shí),標(biāo)志位置1,內(nèi)循環(huán)結(jié)束后測(cè)試標(biāo)志位,若為0表示內(nèi)循環(huán)沒(méi)有進(jìn)行數(shù)據(jù)交換,數(shù)據(jù)排序已經(jīng)完成,可以結(jié)束外循環(huán),不必循

13、環(huán)(n-1)遍,從而節(jié)省了操作時(shí)間。三、程序框圖 四、程序清單size equ 10h ; 數(shù)據(jù)個(gè)數(shù)array equ 50h ; 數(shù)據(jù)起始地址change equ 0 ; 交換標(biāo)志 org 0000h mov r6, #size-1sort: mov a, r6 mov r7, a mov r0, #array clr changesort1: mov a, r0 mov r2, a inc r0 mov b, r0 cjne a, b, sort2 sjmp sort3sort2: jc sort3 ; 前小后大, 不交換 setb change ; 前大后小, 置交換標(biāo)志 xch a,

14、r0 ; 交換 dec r0 xch a, r0 inc r0sort3: djnz r7, sort1 jnb change, sort4 djnz r6, sortsort4: ljmp $ end實(shí)驗(yàn)七 i/o接口實(shí)驗(yàn)一一、實(shí)驗(yàn)?zāi)康?、 掌握單片機(jī)i/o接口的使用方法。2、 熟悉延時(shí)子程序的編寫(xiě)和使用。二、實(shí)驗(yàn)內(nèi)容用p1口設(shè)計(jì)一個(gè)交通信號(hào)控制器,分別用紅、黃、綠兩組發(fā)光二極管作為交通指示信號(hào)。程序使兩組發(fā)光二極管同時(shí)按紅、黃、綠和綠、黃、紅循環(huán)點(diǎn)亮。 修改程序, 使紅、綠燈點(diǎn)亮?xí)r間比黃燈點(diǎn)亮?xí)r間長(zhǎng)一倍。三、實(shí)驗(yàn)電路及連線(xiàn)連線(xiàn)連接孔1連接孔21p1.7l02p1.6l13p1.5l24p1

15、.3l65p1.2l56p1.1l4四、程序框圖 四、程序清單 org 0000hloop: mov a, #88h mov r2, #3outp1: mov p1, a rl a ;右移一位 call delay djnz r2, outp1 ljmp loopdelay: ;延時(shí)程序 mov r6, #0 mov r7, #0delay1: djnz r7, $ djnz r6, delay1 ret查指令表可知:執(zhí)行djnz指令需兩個(gè)機(jī)器周期時(shí)間,當(dāng)晶振為 6mhz 時(shí),一個(gè)機(jī)器周期為12/6mhz(s),執(zhí)行延時(shí)程序所需時(shí)間為:(256+1)×256×2×

16、12/6 = 263168 (s) 實(shí)驗(yàn)八 i/o接口實(shí)驗(yàn)二一、實(shí)驗(yàn)?zāi)康?、 了解單片機(jī)與外設(shè)傳送信息的方式。2、 掌握查詢(xún)方式的原理、特點(diǎn)及編程方法。二、實(shí)驗(yàn)內(nèi)容假設(shè)在工業(yè)過(guò)程控制中,有一臺(tái)機(jī)器當(dāng)k1=0時(shí) 正常工作,l0(綠燈)亮,一旦出現(xiàn)故障(k2=0),則綠燈滅,停止工作,同l2(紅燈)閃爍報(bào)警,待故障排除(k2=1)時(shí),解除報(bào)警,繼續(xù)工作(紅燈滅。綠燈亮)。完成硬件連接,并編寫(xiě)程序,編寫(xiě)程序,用單片機(jī)實(shí)現(xiàn)這樣的過(guò)程。三、實(shí)驗(yàn)電路及連線(xiàn)連線(xiàn)連接孔1連接孔21p1.7l02p1.6l13p1.3s04p1.2s1四、程序框圖 五、程序清單通過(guò)查詢(xún)開(kāi)關(guān)k1、k2的輸入狀態(tài),org0000h

17、決定輸出控制狀態(tài):是綠燈亮(正常工main:movp1,#0fh作),還是紅燈閃爍(故障報(bào)警)。l1:jbp1.3, l1 l2:cplp1.7acalldlyjbp1.2, l2clrp1.7setbp1.6l3:lcalldlyjnbp1.2, l3sjmpmaindly:movr6, #80hmovr7, #00hdly1:djnzr7, $djnzr6, dly1ret 六、思考題 修改程序,實(shí)現(xiàn)在任何時(shí)候斷開(kāi)k1時(shí), 均能使綠燈熄滅。 實(shí)驗(yàn)九 外部中斷實(shí)驗(yàn)一、實(shí)驗(yàn)?zāi)康?、 了解單片機(jī)與外設(shè)傳送信息的方式。2、 掌握中斷方式的原理、特點(diǎn)及編程方法。二、實(shí)驗(yàn)內(nèi)容 當(dāng)int0中斷時(shí),讀取開(kāi)

18、關(guān)k1、k2的狀態(tài),并用led0、led1指示出k1、k2的狀態(tài)。完成硬件連接,并編寫(xiě)程序,實(shí)現(xiàn)上述功能。 三、實(shí)驗(yàn)電路及連線(xiàn)連線(xiàn)連接孔1連接孔21p1.7l02p1.6l13p1.3s04p1.2s15int0單脈沖輸出四、程序框圖 四、程序清單org0000hljmpmainorg0013hljmpwbint main:movp1, #0fhsetbit0setbex0setbeasjmp$wbint:movp1, #0fhmovc, p1.3cplcmovp1.7, cmovc, p1.2cplc movp1.6, c movr7, #80hmovr6, #00hwbint1: djnz

19、r6, $ djnz r7, wbint1 reti實(shí)驗(yàn)十 數(shù)碼管顯示實(shí)驗(yàn)一、實(shí)驗(yàn)?zāi)康?、 掌握數(shù)碼管動(dòng)態(tài)顯示的編程方法。2、 了解輸出端口的擴(kuò)展方法。二、實(shí)驗(yàn)內(nèi)容1. 用兩片8d鎖存器74hc374擴(kuò)展兩個(gè)8位輸出口,實(shí)現(xiàn)對(duì)數(shù)碼管的顯示控制。2. 設(shè)計(jì)一個(gè)數(shù)碼管的動(dòng)態(tài)顯示程序,將顯示緩沖區(qū)5ah-5fh中的內(nèi)容在數(shù)碼管上顯示出來(lái)。三、 實(shí)驗(yàn)電路及連線(xiàn)連線(xiàn):key_cs 連接cs0 字形代碼表字形dpgfedcba字形碼0001111113fh10000011006h2010110115bh3010011114fh40110011066h5011011016dh6011111017dh7000

20、0011107h8011111117fh9011011116fha0111011177hb011111007chc0011100139hd010111105ehe0111100179hf0111000171h暗0000000000h段碼輸出地址:8004h;位碼輸出地址:8002h四、實(shí)驗(yàn)說(shuō)明1 六個(gè)數(shù)碼管的8 位段碼、6位位碼是由兩片74ls374輸出控制,實(shí)現(xiàn)動(dòng)態(tài)方式顯示。位碼經(jīng)uln2003倒相驅(qū)動(dòng)后,選擇相應(yīng)的顯示位。將key/led cs 接到cs0 上,則段碼地址為8004h,位碼地址為8002h。2. 調(diào)用顯示程序前,應(yīng)先在顯示緩沖區(qū)5ah5fh存入六個(gè)字節(jié)00h0fh的顯示數(shù)據(jù)

21、。五、程序框圖程序框圖如圖所示。六、程序框圖outbit equ 8002h ; 位控制口outseg equ 8004h ; 段控制口xsq equ 5ah ; 顯示緩沖 org 0000h ljmp main main: mov sp, #60h mov xsq, #01h mov xsq+1, #02h mov xsq+2, #03h mov xsq+3, #04h mov xsq+4, #05h mov xsq+5, #06hmain1: lcall disp ljmp maindisp: mov r2, #00100000b ; 從左邊開(kāi)始顯示 mov r1, #6 ; 共6個(gè)數(shù)碼管

22、 mov r0, #xsqdisp1: mov dptr, #outbit mov a,#0 movx dptr, a ;關(guān)所有數(shù)碼管 mov a, r0 mov dptr, #ledmap movc a, a+dptr ;查表取段碼 mov dptr, #outseg movx dptr, a ;輸出段碼 mov a, r2 mov dptr, #outbit movx dptr, a ;輸出位碼 rr a ;為顯示下一位作準(zhǔn)備 mov r2, a inc r0 mov r7, #00h djnz r7, $ ;延時(shí) djnz r1, disp1 retledmap: ; 數(shù)碼管段碼表 db

23、 3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07h db 7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71h db 00h end七、思考題延時(shí)時(shí)間延長(zhǎng)至1秒以上,觀察程序執(zhí)行結(jié)果有何變化。實(shí)驗(yàn)十一 鍵盤(pán)掃描、顯示實(shí)驗(yàn)一、實(shí)驗(yàn)?zāi)康?、 掌握鍵盤(pán)掃描原理及編程方法。2、 掌握輸入、輸出端口的擴(kuò)展方法及鍵盤(pán)、顯示電路的設(shè)計(jì)方法。二、實(shí)驗(yàn)內(nèi)容在數(shù)碼管顯示實(shí)驗(yàn)電路的基礎(chǔ)上,用8路雙向驅(qū)動(dòng)器74ls245擴(kuò)展4路輸入端口,與位碼輸出端口組成鍵盤(pán)掃描電路,并編寫(xiě)一個(gè)鍵盤(pán)掃描和數(shù)碼顯示程序,把按鍵輸入的鍵碼在數(shù)碼管上顯示出來(lái)。實(shí)驗(yàn)程序可分為三個(gè)模塊1.

24、主程序:循環(huán)調(diào)用顯示模塊和鍵盤(pán)掃描模塊,如果有鍵按下,則將所按下的鍵碼送顯示緩沖區(qū)。2. 顯示模塊:將顯示緩沖區(qū)的內(nèi)容在數(shù)碼管上動(dòng)態(tài)顯示。3. 鍵盤(pán)掃描模塊:掃描鍵盤(pán),并獲取按鍵的鍵碼。三、 實(shí)驗(yàn)電路及連線(xiàn)連線(xiàn):key_cs 連接cs0段碼輸出地址:8004h;列掃描地址:8002h行碼地址:8001h四、實(shí)驗(yàn)說(shuō)明實(shí)驗(yàn)箱提供了一個(gè)6×4的小鍵盤(pán),向列掃描地址(8002h)逐列輸出低電平,然后從行碼地址(8001h)讀回。如果有鍵按下,則相應(yīng)行的值應(yīng)為低,如果無(wú)鍵按下,由于上拉的作用,行碼為高。這樣就可以通過(guò)輸出的列碼和讀取的行碼來(lái)判斷按下的是什么鍵。在判斷有鍵按下后,要有一定的延時(shí),

25、防止鍵盤(pán)抖動(dòng)。地址中的x 是由key/led cs 決定,參見(jiàn)地址譯碼。做鍵盤(pán)和led實(shí)驗(yàn)時(shí),需將key/led cs 接到相應(yīng)的地址譯碼上。以便用相應(yīng)的地址來(lái)訪問(wèn)。例如將key/led cs信號(hào)接cs0 上,則列掃描地址為8002h,行碼地址為8001h。列掃描碼還可以分時(shí)用作led的位選通信號(hào)。五、程序框圖五、程序清單outbit equ 8002h ; 位控制口outseg equ 8004h ; 段控制口jpin equ 8001h ; 鍵盤(pán)讀入口xsw equ 20h ; 按鍵顯示位置xsq equ 5ah ; 顯示緩沖 org 0000h ljmp mainmain: mov sp

26、, #60h mov xsq, #20h ;清顯示 mov xsq+1, #20h mov xsq+2, #20h mov xsq+3, #20h mov xsq+4, #20h mov xsq+5, #20h mov xsw, #xsq ;main1: lcall disp ;調(diào)顯示程序 lcall jpsm ;調(diào)鍵盤(pán)掃描 cjne a, #10h, main2main2: jnc main1 ;非數(shù)字鍵轉(zhuǎn) mov r0,xsw cjne r0, #xsq+6, main3main3: jc main4 ;非第六位轉(zhuǎn) mov xsq, #10h ; mov xsq+1, #10h mov x

27、sq+2, #10h mov xsq+3, #10h mov xsq+4, #10h mov xsq+5, #10h mov r0, #xsq ;從最高位顯示main4: mov r0, a inc r0 mov xsw, r0 ;保存顯示指針 ljmp main1jpsm: mov dptr, #outbit mov p2, dph mov r0, #low(jpin) mov r1, #11011111b mov r2, #6 ;掃描列數(shù)jpsm1: mov a, r1 movx dptr, a ;輸出列碼 rr a mov r1, a movx a, r0 ;讀行碼 cpl a anl

28、a, #0fh jnz jpsm2 ;該列有鍵入 djnz r2, jpsm1 mov a, #0ffh ;沒(méi)有鍵按下轉(zhuǎn) ljmp jpsm7jpsm2: mov r1, a ;鍵值 = 列 x 4 + 行 mov a, r2 dec a rl a rl a mov r2, a ;r2= (r-1)*4 mov a, r1 ;r1 為讀入的行值 mov r1, #4jpsm3: rrc a ;移位找出所在行 jc jpsm4 inc r2 ;r2 = r2+ 行值 djnz r1, jpsm3jpsm4: mov a,r2 ;取出鍵碼 mov dptr, #jmbiao movc a, a+d

29、ptr mov r2, ajpsm5: mov dptr, #outbit ; 等鍵釋放 clr a movx dptr, a mov r7, #0 mov r6, #0jpsm6: djnz r6, $; djnz r7, jpsm6 movx a, r0 cpl a anl a, #0fh jnz jpsm5 mov a,r2jpsm7: retjmbiao: ; 鍵碼定義 db 16h, 15h, 14h, 0ffh db 13h, 12h, 11h, 10h db 0dh, 0ch, 0bh, 0ah db 0eh, 03h, 06h, 09h db 0fh, 02h, 05h, 08

30、h db 00h, 01h, 04h, 07hdisp: mov r2, #00100000b ;先顯示高位 mov r1, #6 ;共6個(gè)數(shù)碼管 mov r0, #xsqdisp1: mov dptr, #outbit mov a,#0 movx dptr, a ;關(guān)顯示 mov a, r0 mov dptr, #ledmap movc a, a+dptr ;查表取段碼 mov dptr, #outseg movx dptr, a ;輸出段碼 mov a, r2 mov dptr, #outbit movx dptr, a ;輸出位碼 rr a ;準(zhǔn)備顯示下一位 mov r2, a inc

31、r0 mov r7, #00h djnz r7, $ ;延時(shí) djnz r1, disp1 retledmap: ;數(shù)碼管段碼表 db 3fh,06h,5bh,4fh;不帶小數(shù)點(diǎn) db 66h,6dh,7dh,07h db 7fh,6fh,77h,7ch db 39h,5eh,79h,71h db 0bfh,86h,0dbh,0cfh ;帶小數(shù)點(diǎn) db 0e6h,0edh,0fdh,87h db 0ffh,0efh,0f7h,0fch db 0b9h,0deh,0f9h,0f1h db 00h end實(shí)驗(yàn)十二 計(jì)數(shù)器實(shí)驗(yàn)一、實(shí)驗(yàn)?zāi)康恼莆?031內(nèi)部定時(shí)器/計(jì)數(shù)器的使用方法。二、實(shí)驗(yàn)內(nèi)容內(nèi)部定時(shí)

32、器t0工作于計(jì)數(shù)器模式和方式1,對(duì)p3.4(t0)引腳的輸入脈沖進(jìn)行計(jì)數(shù)。并將計(jì)數(shù)值在數(shù)碼管顯示出來(lái)。三、實(shí)驗(yàn)電路及連線(xiàn) 顯示電路見(jiàn)實(shí)驗(yàn)十。連線(xiàn)連接孔1連接孔21cs0key/led_cs 2t0單脈沖輸出 cs0 - - - - - key/led_cs t0 - - - - - 單脈沖輸出四、實(shí)驗(yàn)說(shuō)明當(dāng)定時(shí)器t0工作在計(jì)數(shù)器方式時(shí),可對(duì)t0(p3.4)引腳上的外部脈沖進(jìn)行計(jì)數(shù),外部脈沖每出現(xiàn)一個(gè)下降沿,由th0、tl0組成的計(jì)數(shù)器就加一。由于單片機(jī)識(shí)別一個(gè)從1到0的跳變需兩個(gè)機(jī)器周期,(24個(gè)振蕩周期),則輸入脈沖的最高頻率為fosc/24。 實(shí)驗(yàn)系統(tǒng)的fosc=6mhz,則輸入脈沖的最高

33、頻率為250 khz。五、程序框圖五、程序清單outbit equ 8002h ; 位控制口outseg equ 8004h ; 段控制口xsq equ 5ah ; 顯示緩沖 org 0000h ljmp mainmain: mov sp, #60h mov xsq, #20h ;清顯示 mov xsq+1, #20h mov xsq+2, #20h mov xsq+3, #20h mov xsq+4, #20h mov xsq+5, #20h mov tmod, #05h ;t0:方式1,記數(shù)器 mov th0, #0 mov tl0, #0 setb tr0 ; 開(kāi)始記數(shù)main1: lc

34、all disp ;調(diào)顯示程序 mov a, th0 ;顯示記數(shù)值高位 swap a anl a, #0fh mov xsq, a mov a, th0 anl a, #0fh mov xsq+1, a mov a, tl0 ;顯示記數(shù)值低位 swap a anl a, #0fh mov xsq+2, a mov a, tl0 anl a, #0fh mov xsq+3, a ljmp main1disp: mov r2, #00100000b ;從左邊開(kāi)始顯示 mov r1, #4 ; 共6個(gè)數(shù)碼管 mov r0, #xsqdisp1: mov dptr, #outbit mov a,#0

35、movx dptr, a ; 關(guān)所有數(shù)碼管 mov a, r0 mov dptr, #ledmap movc a, a+dptr ;查表取段碼 mov dptr, #outseg movx dptr, a ;輸出段碼 mov a, r2 mov dptr, #outbit movx dptr, a ;輸出位碼 rr a ;為顯示下一位作準(zhǔn)備 mov r2, a inc r0 mov r7, #00h djnz r7, $ ;延時(shí) djnz r1, disp1 retledmap: ; 數(shù)碼管段碼表 db 3fh, 06h, 5bh, 4fh ;不帶小數(shù)點(diǎn) db 66h, 6dh, 7dh, 0

36、7h db 7fh, 6fh, 77h, 7ch db 39h, 5eh, 79h, 71h db 0bfh, 86h, 0dbh, 0cfh ;帶小數(shù)點(diǎn) db 0e6h, 0edh, 0fdh, 87h db 0ffh, 0efh, 0f7h, 0fch db 0b9h, 0deh, 0f9h, 0f1h db 00h end六、思考題修改程序,將計(jì)數(shù)值用十進(jìn)制顯示。實(shí)驗(yàn)十三 定時(shí)器實(shí)驗(yàn)電子時(shí)鐘一、實(shí)驗(yàn)?zāi)康?. 掌握8031內(nèi)部定時(shí)器/計(jì)數(shù)器的使用和編程方法。2. 進(jìn)一步掌握中斷處理程序的編程方法。3. 進(jìn)一步掌握數(shù)碼管的動(dòng)態(tài)顯示方法。二、實(shí)驗(yàn)內(nèi)容利用定時(shí)器t0和數(shù)碼管顯示電路,設(shè)計(jì)一個(gè)電子時(shí)鐘,顯示格式:xx xx xx ,由左至右分別為:時(shí)、分、秒。定時(shí)器每100s中斷一次,在中斷服務(wù)程序中,對(duì)中斷次數(shù)進(jìn)行計(jì)數(shù),計(jì)數(shù)10000次就是1秒。然后再對(duì)秒計(jì)數(shù)得到分和小時(shí)值,并送入顯示緩沖區(qū)。顯示子程序模塊可參照實(shí)驗(yàn)十?dāng)?shù)碼管顯示實(shí)驗(yàn)。三、實(shí)驗(yàn)電路及連線(xiàn) 顯示電路見(jiàn)實(shí)驗(yàn)十。連接孔1連接孔2cs0key/led_cs 四、實(shí)驗(yàn)說(shuō)明定時(shí)工作方式,其實(shí)質(zhì)也是一種計(jì)數(shù)方式,只不過(guò)計(jì)數(shù)脈沖由內(nèi)部提供,每個(gè)機(jī)器周期計(jì)數(shù)器加一,因此計(jì)數(shù)速率固定為fosc

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論