SS8051高級單片機實驗手冊 機械學(xué)院_第1頁
SS8051高級單片機實驗手冊 機械學(xué)院_第2頁
SS8051高級單片機實驗手冊 機械學(xué)院_第3頁
SS8051高級單片機實驗手冊 機械學(xué)院_第4頁
SS8051高級單片機實驗手冊 機械學(xué)院_第5頁
已閱讀5頁,還剩83頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、ss-8051高級單片機實驗手冊北京海天創(chuàng)新電子有限公司http:/email:2005年10月目 錄一 概要3二 ss-8051高級單片機實驗儀可直接使用的電路單元3三 ss-8051高級單片機實驗儀系統(tǒng)配備3附錄一:ss-8051高級單片機實驗指導(dǎo)書 4附錄二:51單片機硬件開發(fā)支持 66附錄三:微型打印機及其與單片機接口 73附錄四:isd4004系列單片語音錄放ic資料 78附錄五:hd61202液晶顯示控制驅(qū)動器的應(yīng)用資料82附錄六:ss-8051高級單片機實驗儀原理圖 86一概要:一般的單片機實驗儀通常為固定線路,再有配合該實驗線路的

2、教材,學(xué)習(xí)者只能依照該實驗儀做實驗,無法自行創(chuàng)作線路,甚至無法改變外圍器件的地址,實驗者知其然而不知其所以然。另一種沒有實驗儀,初學(xué)者就按電路圖自行在面包板上或在萬用板上焊接電路,花費很多時間在接線及硬件排錯上,軟件練習(xí)往往不夠。有鑒如此,北京海天創(chuàng)新電子有限公司特開發(fā)一種開放式組合電路的單片機ss-8051高級單片機實驗儀,其特性如下:1 可做mcs51系列單片機的實驗或其它mcu的的實驗;2 可配任何廠家的仿真器,也可以自仿真;3 系統(tǒng)采用cpu獨立和組合均可的方式;4 提供20多種單元電路;5 全部電路可由使用者以線連接,彈性組合;6 無需焊接,節(jié)省時間,如同面包板或萬用板實驗;7 配備

3、開關(guān)電源;8 可配合各種單片機書籍。二ss-8051高級單片機實驗儀可直接使用的電路單元1 微型打印機接口電路;2 8031/51/2051高級接口電路;3 8255電路;4 sram電路;5 74ls138譯碼器電路;6 接點延伸區(qū);7 撥碼開關(guān)電路;8 8x8點陣顯示電路;9 動態(tài)七段數(shù)碼管電路;10 8個led輸出(二組電路);11 鍵盤電路;12 rs232串行通信電路;13 d/a電路;14 a/d電路;15 步進電機實驗電路;16 直流電機實驗電路;17 點陣圖形液晶實驗電路;18 isd4004語音芯片實驗電路;19 7279鍵盤與數(shù)碼管顯示芯片電路;20 模擬量輸入單元電路。三

4、、ss-8051高級單片機實驗儀系統(tǒng)配備1實驗機箱一臺2使用說明書一份3連接線 若干4程序光盤 一張 5仿真器一臺附錄一:ss-8051高級單片機實驗指導(dǎo)書目 錄第一部分軟件練習(xí)實驗一:從外部數(shù)據(jù)存儲器傳送到內(nèi)部存儲器 5實驗二:從外部數(shù)據(jù)存儲器傳送到內(nèi)部ram中 6實驗三:求16個學(xué)生的年齡之和 6實驗四:求兩省人口之和 7實驗五:求八個無符號數(shù)的最大值 7實驗六:求y=sign x的 8實驗七:求兩個16位無符號數(shù)之積 8實驗八:將一個字節(jié)bcd碼轉(zhuǎn)換成二進制數(shù) 9實驗九:將一個字節(jié)二進制數(shù)轉(zhuǎn)換成十進制數(shù) 9實驗十:自編實驗 9第二部分硬件與接口實驗一:p1口實驗一(輸入輸出實驗、最小系統(tǒng)

5、)10實驗二:p1口實驗二13實驗三:外中斷實驗 15實驗四:定時/計數(shù)器實驗17實驗五:點陣顯示屏實驗 21實驗六:8255鍵盤、數(shù)碼顯示實驗23實驗七:數(shù)/模轉(zhuǎn)換實驗27實驗八:模/數(shù)轉(zhuǎn)換實驗29實驗九:微型打印機實驗 32實驗十:hd7279a鍵盤顯示控制實驗 34實驗十一:直流電動機的控制實驗40實驗十二:步進電動機的控制實驗42實驗十三:點陣圖形液晶顯示器的控制實驗 45實驗十四:isd系列語音芯片的單片機控制實驗53實驗十五:單片機與pc機串行通信實驗63第一部分 軟件練習(xí)實驗一 實驗系統(tǒng)簡介:1 ss-8051高級仿真實驗系統(tǒng)的主要特點:ss-8051高級仿真實驗系統(tǒng)的主要特點在

6、于它是一個幾乎完全真實的項目開發(fā)環(huán)境。它的所有電路單元均是獨立的(除了電源和地線之外),復(fù)雜的電路可以用排線搭建起來,整個系統(tǒng)給學(xué)習(xí)者一個真實的開發(fā)環(huán)境,對于小型的實驗和大型的課程設(shè)計均可應(yīng)用,此外還可以作為開發(fā)新產(chǎn)品的實驗系統(tǒng)。2 調(diào)試軟件的啟動、操作與退出:萬利調(diào)試軟件的啟動很簡單,在windows操作系統(tǒng)下,只要用鼠標單擊“開始|程序|medwin|medwin.exe”程序即可啟動。退出調(diào)試環(huán)境象所有的windows程序一樣,用鼠標單擊“文件|退出”菜單或單擊右上角的“x”均可退出程序。萬利調(diào)試軟件的操作與編程器的操作以及硬件開發(fā)的整個過程概述可以參考“附錄二:51單片機的硬件開發(fā)支持

7、”。二 操作練習(xí)與程序執(zhí)行:實驗一:練習(xí)從外部數(shù)據(jù)存儲器傳送到內(nèi)部寄存器中第一部分“軟件練習(xí)”實驗均可以在脫機模擬狀態(tài)下調(diào)試運行,也可以連上仿真器與實驗儀在線仿真調(diào)試運行。1 模擬調(diào)試狀態(tài)下:(以萬利仿真器為例)啟動“medwin.exe”萬利仿真器調(diào)試軟件,進入“模擬調(diào)試”狀態(tài)。建立一個項目,在項目中添加一個新的文件(以.asm作為后綴名),將后面的程序清單輸入,按ctrl+f8編譯并裝載,排除所有的錯誤直到編譯通過。打開外部數(shù)據(jù)區(qū)窗口(xdata)、寄存器窗口和特殊功能寄存器窗口,將外部數(shù)據(jù)區(qū)的00h,01h單元的內(nèi)容改為54h,55h,單步或全速運行調(diào)試程序,觀察寄存器a,b,dptr,

8、r1,r2,r3的值是不是如程序所希望的那樣變化,最后看r3的值是不是54h+55h=a9h。2 連機狀態(tài)下:本實驗要連機運行調(diào)試,需在實驗儀上進行相應(yīng)的連線。先用數(shù)據(jù)線將仿真器和仿真頭連起來,把仿真頭缺口朝上插入2單元的51單片機插座(千萬注意不要插反)。然后連接4單元存儲電路與2單元單片機電路。它們之間具體的連線如下表所示(將對應(yīng)的網(wǎng)絡(luò)標號用排線連接起來):2單元4單元p00-p07db0-db6p20 -p20a8-a15p36webp37oebalealeceb連gnd3 線連好以后,打開仿真器和實驗儀的電源,其余操作和模擬調(diào)試狀態(tài)下相同。實驗的源程序如下所示:org 00h;程序從0

9、0h處開始運行ajmp start;跳轉(zhuǎn)到start的位置org 30h;start從30h開始start:mova,#56h;在a寄存器中放置56h,這句程序執(zhí)行完畢后可以看看a寄存;器中的值是否為78hmov b,#78h;在b寄存器中放置78h,這句程序執(zhí)行完畢后可以看看b寄存;器中的值是否為78hmov dptr,#00h;給dptr賦值00h,表示是數(shù)據(jù)寄存在00h的地址movx a,dptr;將外部數(shù)據(jù)區(qū)00h的數(shù)據(jù)放進寄存器amovr1,a;將a中的數(shù)據(jù)放入r1寄存器incdptr;將dptr增1,變?yōu)?1hmovxa,dptr;將外部數(shù)據(jù)區(qū)01h的數(shù)據(jù)放進寄存器amovr2,a

10、;將a中的數(shù)據(jù)放入r2寄存器adda,r1;將a中的數(shù)據(jù)與r2中的數(shù)據(jù)相加,和在a中movr3,a;將結(jié)果保存在r3中here:ajmphere;死循環(huán)end;程序結(jié)束標志實驗二:練習(xí)從外部數(shù)據(jù)存儲器傳送到內(nèi)部ram中本實驗也可以在模擬調(diào)試和連機狀態(tài)下兩種方式下進行實驗。在連機實驗時的連線與“實驗一”完全相同。程序運行之前,將外部數(shù)據(jù)存儲器(xdata)和內(nèi)部數(shù)據(jù)存儲器(data)窗口打開,并在xdata窗口從00h單元開始連續(xù)鍵入30h,31h,32h,33h,34h,35h,36h,37h,38h,39h,40h,41h,42h,43h,44h,45h,然后程序單步或全速運行,停下來后觀察

11、內(nèi)部數(shù)據(jù)區(qū)窗口(data)從30h開始的數(shù)據(jù)是否跟上述數(shù)據(jù)相同。實驗的源程序如下:org00h;程序從00h處開始運行start:movdptr,#00h;給dptr賦值00h,表示是數(shù)據(jù)存放在00h的地址movsp,#80h;給sp賦值80h,程序運行過程中我們可以看看sp的變化movr0,#30hmovr7,#10hloop:movxa,dptrmovr0,aincr0incdptrdjnzr7,loophere:sjmp$;死循環(huán)end;程序結(jié)束標志實驗三:求16個學(xué)生的年齡之和,數(shù)據(jù)放在20h單元程序運行之前,先將16個學(xué)生的年齡放在內(nèi)部數(shù)據(jù)區(qū)20h單元開始的地方,碼制為bcd碼,程序

12、運行結(jié)束時,16個學(xué)生的年齡和放在寄存器a和b中(b為高位,a為低位)。程序清單如下所示:org00h;程序從00h處開始運行sjmpstart;跳轉(zhuǎn)到start的位置org30h;start從30h開始start:movr0,#20hmovr7,#16mova,#00hmovb,aloop:adda,r0daajncnextincbnext::incr0djnzr7,loophere:sjmphere;死循環(huán)end;程序結(jié)束標志實驗四:求兩省人口之和以四個字節(jié)長度存放兩省人口數(shù),該程序涉及到多字節(jié)的加減法。程序運行前將兩省的人口數(shù)放入外部數(shù)據(jù)區(qū)(xdata)從00h和10h開始的單元。如從0

13、0h開始依次放入32h,54h,76h,98h,從10h開始依次放入34h,12h,32h,54h(從低字節(jié)往高字節(jié)排列),程序運行完畢,觀察程序運行結(jié)果是不是等于98765432+54321234=0153086666。程序清單如下:org00h;程序從00h處開始運行sjmpstart;跳轉(zhuǎn)到start的位置org30h;start從30h開始start:movr7,#4movr0,#30hmovdptr,#0000hlp1:movxa,dptrmovr0,aincr0incdptrdjnzr7,lp1movr1,#40hmovdptr,#0010hmovr7,#4lp2:movxa,dp

14、trmovr1,aincr1incdptrdjnzr7,lp2movr6,#4movdptr,#0020hmovr0,#30hmovr1,#40hclrclp3:mova,r0addca,r1daamovxdptr,aincr0incr1incdptrdjnzr6,lp3mov20h,chere:sjmphere;死循環(huán)end;程序結(jié)束標志實驗五:求8個無符號數(shù)的最大值給定8個無符號數(shù),將其放入內(nèi)部數(shù)據(jù)區(qū)(data)中,地址從20h開始,運行下列程序,看看是否將8個數(shù)的最大值存儲在a寄存器和內(nèi)部數(shù)據(jù)區(qū)41h單元中。程序清單如下:org00h;程序從00h處開始運行sjmpstart;跳轉(zhuǎn)到st

15、art的位置org30h;start從30h開始start:movr0,#20hmovr6,#08hmova,r0decr6loop:incr0mov40h,r0cjnea,40h,chkchk:jncloop1mov41h,ahere:sjmphere;死循環(huán)end;程序結(jié)束標志實驗六:給定8位有符號數(shù)x,求y=sign x之值給定8個有符號數(shù),放至內(nèi)部數(shù)據(jù)區(qū)(data)30h單元開始的地方,求其符號,并將結(jié)果送入寄存器r1,程序適合單步執(zhí)行,每執(zhí)行一句觀察一下r1是否真實反映有符號數(shù)的符號。程序清單如下:org00h;程序從00h處開始運行sjmpstart;跳轉(zhuǎn)到start的位置org3

16、0h;start從30h開始start:movr0,#30hmova,r0anla,r0jzzerojnbacc.7,nextminus:movr1,#0ffhsjmpexitzero:movr1,#0sjmpexitnextmovr1,#1exit:sjmpexit;死循環(huán)end;程序結(jié)束標志實驗七:求兩個16位無符號數(shù)之積程序清單如下:org00h;程序從00h處開始運行ajmpstart;跳轉(zhuǎn)到start的位置org30hstart:movr5,#11h;乘數(shù)高字節(jié)movr4,#78h;乘數(shù)低字節(jié)movr3,#11h;被乘數(shù)高字節(jié)movr2,#11h;被乘數(shù)低字節(jié)movr1,#30hdu

17、mul:mova,r1movr6,amovr7,#04clear:movr1,#0hincr1djnzr7,clearmova,r6movr1,amm:mova,r2movb,r4mulabacalladdmmova,r2movb,r5acalladdmmova,r3movb,r4mulabdecr1acalladdmmova,r3movb,r5mulabacalladdmmova,r6movr1,ahere:sjmphere;死循環(huán)addm:adda,r1;子程序movr1,amova,bincr1addca,r1movr1,aincr1mova,r1addca,#0movr1,adecr1

18、ret;子程序返回end;程序結(jié)束標志實驗八:將一個字節(jié)bcd碼轉(zhuǎn)換成二進制數(shù)org00h;程序從00h處開始運行ajmpstart;跳轉(zhuǎn)到start的位置org30h;start從30h開始start:movr2,#99hacalldtobhere:sjmphere;死循環(huán)dtob:mova,r2anla,#0f0hswapamovb,#10mulabmovr3,amova,r2anla,#0fhadda,r3movr3,amov20h,aretend;程序結(jié)束標志實驗九:將一個字節(jié)二進制數(shù)轉(zhuǎn)換成十進制數(shù)org00h;程序從00h處開始運行sjmpstart;跳轉(zhuǎn)到start的位置org30

19、h;start從30h開始start:movr2,0ffhacallbtodhere:sjmphere;死循環(huán)org100h;將二進制數(shù)轉(zhuǎn)換成十進制數(shù)的子程序放在100h的位置btod:mova,r2;二進制數(shù)轉(zhuǎn)換成十進制數(shù)的子程序movb,#100divabmovr6,amova,#10xcha,bdivabswapaadda,bmovr5,aret;二進制數(shù)轉(zhuǎn)換成十進制數(shù)的子程序返回end;程序結(jié)束標志實驗十:自編實驗,上機調(diào)試通過第二部分 硬件及接口實驗實驗一:p1口實驗一一 實驗題目:p1口做輸出口,接八只發(fā)光二極管,編寫程序,使發(fā)光二極管循環(huán)點亮。二 實驗?zāi)康模? 學(xué)習(xí)p1口作為輸出

20、口的使用方法。2 學(xué)習(xí)延時子程序的編寫和使用。三 有關(guān)說明:p1口為準雙向口,p1口的每一位都能獨立的定義為輸出線或輸入線。作為輸入的口線,必須向鎖存器相應(yīng)位寫入“1”,該位才能作為輸入。再來看一下延時程序的實現(xiàn),現(xiàn)常用的有兩種方法:一是用定時器中斷來實現(xiàn),二是用指令循環(huán)來實現(xiàn)。在系統(tǒng)時間允許的情況下,可以采用后一種方法。以12m晶振為例,一個機器周期為12/12=1us,現(xiàn)要寫一個延時0.1s的程序,可大致寫出如下:movr7,#200de1:movr6,#xde2:djnzr6,de2djnzr7,de1上面mov、djnz指令均需兩個機器周期,所以每執(zhí)行一條指令需2us,現(xiàn)求出x值:(x

21、*2+2+2)*200+2=100,000求出x=248,代入上式可知約延時(248*2+2+2)*200+2=100,002us,已經(jīng)很精確了。四 實驗電路: l1 vcc p1.0 p1.1 p1.2 p1.3 p1.4 p1.5 p1.6 p1.78051 l8 vcc五 連線方法:電路單元第2單元第11單元連接1p1.0-p1.7l1-l8六 程序框圖:開始初始化,a=0a p1a左循環(huán)一位延時1s結(jié)束七 程序清單:(匯編)org00h;程序從00h開始ajmpstart;跳轉(zhuǎn)到start位置org30h;開始程序從30h開始,將00h到30h之間的start:movsp,#60h;將

22、堆棧指針設(shè)為60hmova,#0feh;將a賦值為0fehloop:movp1,a;點亮1個燈acalldelay;調(diào)用延時程序rla;將a循環(huán)移動一位ljmploop;跳轉(zhuǎn)到loop,程序循環(huán)執(zhí)行。delay:movr1,#10;延時子程序,10個100ms,一共1sdel1:movr2,#200del2:movr3,#248del3:djnzr3,del3djnzr2,del2djnzr1,del1ret;延時程序返回end;程序結(jié)束程序清單:(c51):#include #include void delayms(unsigned char ms)/*延時子程序*/unsigned ch

23、ar i;while(ms-)for(i = 0; i 250; i+);unsigned char led;void main(void)led = 0xfe;p1 = led;while(1)delayms(250);led = _crol_(led,1);/*循環(huán)右移1位,點亮下一個led*/p1 = led;實驗二:p1口實驗二一 實驗題目:p1口做輸入口,接八個撥碼開關(guān),以p0口做輸出口,編寫程序讀取開關(guān)狀態(tài),在二極管上顯示出來。二 實驗?zāi)康模簩W(xué)習(xí)p1口作為輸入口的使用方法。三 有關(guān)說明:p1口為準雙向口,p1口的每一位都能獨立的定義為輸出線或輸入線。作為輸入的口線,必須向鎖存器相應(yīng)

24、位寫入“1”,該位才能作為輸入。四 實驗電路:p1.0 p0.0p1.1 p0.0p1.2 p0.0p1.3 p0.08051p1.4 p0.0p1.5 p0.0p1.6 p0.0p1.7 p0.7 gnd l1 vcc s1 l8 vcc s8五 連線方法:電路單元第2單元第11單元第1單元連接1p0.0-p0.7l1-l8連接2p1.0-p1.7s0-s7六程序框圖:開始初始化將p1口置0ffh從p1口讀開關(guān)量將開關(guān)量送p0口結(jié)束七程序清單(匯編):org00h;程序從00h開始ajmpstart;跳轉(zhuǎn)到startstart:movsp,#60h;將堆棧指針設(shè)置為60hmovp1,#0ff

25、h;先將p1設(shè)置為0ffhloop:mova,p1;將開關(guān)量輸入到變量a中movp0,a;將變量a中的數(shù)據(jù)送到p0口輸出ljmploop;跳轉(zhuǎn)到loop循環(huán)執(zhí)行程序end;程序結(jié)束程序清單(c51):#include #include void delayms(unsigned char ms)/*延時子程序*/unsigned char i;while(ms-)for(i = 0; i 250; i+);unsigned char led;void main(void)led = 0xfe;p1 = led;while(1)delayms(250);led = _crol_(led,1);/

26、*循環(huán)右移1位,點亮下一個led*/p1 = led;實驗三:外中斷實驗一 實驗題目使用單脈沖作中斷源,每按一次按鈕,點亮的發(fā)光二極管向右移動一位二 實驗?zāi)康? 學(xué)習(xí)外中斷的使用;2 學(xué)習(xí)中斷處理程序的編程方法。三 實驗電路 p1.0int1 p1.1 p1.2 p1.3 p1.4 p1.5p1.6p1.78051 l1 vcc 單脈沖源 l8 vcc四 連線方法電路單元第2單元第11單元第1單元連接1p10-p17l1-l8連接2p33/int1s0五 程序清單(匯編):org00h;程序開始地址從00h開始ajmpstart;跳轉(zhuǎn)到startorg13h;外部中斷1的中斷入口地址ajmpi

27、nti;int1入口地址org30h;主程序從30h開始,將00h與30h中間的中斷向量地址留出來start:movsp,#60h;將堆棧地址sp置成60hmova,#0feh;點亮第一個燈泡setbit1;開外部中斷1movie,#10000100b;開int1中斷和總中斷movp1,a;在p1口顯示一個一個燈here:nop;空操作指令sjmphere;死循環(huán)inti:movp1,a;外部中斷服務(wù)程序rla;a循環(huán)移動一位clrie1;清中斷標志位reti;外部中斷1中斷程序返回end;程序結(jié)束程序清單(c51):#include #include unsigned char led;vo

28、id delayms(unsigned char ms)/*延時子程序*/unsigned char i;while(ms-)for(i = 0; i 250; i+);void int1main1(void) /*non-bounce*/ ie=0; /*屏蔽所有中斷*/ it1=1; /*設(shè)置中斷:下降沿*/ ex1=1; /*開int1中斷*/ ea=1; /*開所有中斷*/*中斷1*/void one_int1isr (void) interrupt 2 using 3 ex1=0;/*屏蔽int1*/ led = _crol_(led,1);/*循環(huán)右移1位,點亮下一個led*/ d

29、elayms(250); ex1=1;/*打開int1*/ ie1=0;void main(void)int1main1();led=0xfe;while(1)p1 = led; 實驗四:定時器實驗一 實驗題目連線并編制程序,使用定時器1中斷,按方式1工作,將單排led燈循環(huán)點亮。二 實驗?zāi)康? 定時器中斷的使用;2學(xué)習(xí)定時器中斷間隔時間的計算;3進一步學(xué)習(xí)中斷處理程序的編程方法。三 原理簡述1定時器/計數(shù)器的輸入脈沖周期與機器周期一樣,為振蕩器頻率的1/12。本實驗中時鐘頻率為12m,現(xiàn)要采用中斷方法來實現(xiàn)1秒延時,要在定時器1中設(shè)置一個時間常數(shù),使其每隔0.05秒產(chǎn)生一次中斷,cpu響應(yīng)中

30、斷后r0中計數(shù)值減一,令(r0)=14h,即可實現(xiàn)1秒的延時,時間常數(shù)可按下法確定:機器周期=12/晶振頻率=12/12=1us定時器需設(shè)初值為x,則(216x)*1=50000us求出x=15536化為十六進制:x=3cb0h,故初始值為:th1=3ch,tl1=b0h。2 初始化程序包括定時器初始化和中斷系統(tǒng)初始化,主要對ip,ie,tcon,tmod的相應(yīng)位進行正確的設(shè)置,并將時間常數(shù)送入定時器中。由于只有定時器中斷,ip不必設(shè)置。注意一點:定時器1初始化時建議用如下的指令:anltmod,#0fhorltmod,#10h3 設(shè)計中斷服務(wù)程序和主程序中斷服務(wù)程序除了要完成記述減一工作外,

31、還要將時間常數(shù)重新送入定時器中,為下一次中斷做準備。主程序則用來控制發(fā)光二極管按要求順序亮滅。四 實驗電路本實驗電路與實驗一完全相同,不同的是編程序時延時采用定時器中斷而非軟件延時。 l1 vcc p1.0 p1.1 p1.2 p1.3 p1.4 p1.5 p1.6 p1.78051 l8 vcc五 連線方法:電路單元第2單元第11單元連接1p1.0-p1.7l1-l8入口置首顯示代碼(a),初始化地址偏移量(r1),計數(shù)器初值(r0)定時器1初始化設(shè)計數(shù)初值開放ea,et1及tr1r1為0?裝計數(shù)初值于r1將顯示的數(shù)據(jù)(r0)送入(a)帶進位左移(a)將(a)再送入顯示數(shù)據(jù)(r0)中將顯示數(shù)

32、據(jù)送入p1顯示六 程序框圖主程序框圖: n y中斷入口關(guān)閉計數(shù)器控制位計數(shù)值減一裝入時間常數(shù)開放計數(shù)控制位reti中斷子程序框圖:七 程序清單(匯編)org00h;程序從00h開始ajmpstart;跳轉(zhuǎn)到start的位置org1bh;定時中斷的起始地址ajmpti;中斷子程序名字org30h;主程序的開始地址從30h開始start:movie,#00h;屏蔽所有的中斷movsp,#60h;將堆棧指針sp設(shè)置為60hmovp1,#0feh;將p1設(shè)置為0feh,點亮一個燈movr0,#0feh;r0用來保存點亮燈的狀態(tài)movr1,#14h;將變量r1設(shè)置為14h,表示14h次進定時中斷后燈循環(huán)

33、一位anltmod,#0fh;設(shè)置tmod高四位為0,低四位不變orltmod,#10h;設(shè)置tmod最高位為1movth1,#3ch;設(shè)置定時中斷的初始值(高位)movtl1,#0b0h;設(shè)置定時中斷的初始值(低位)orlie,#88h;將定時中斷和總中斷打開setbtr1;啟動定時loop:cjner1,#00,disp;當變量r1不為0時,不移位,直接轉(zhuǎn)去dispmovr1,#14h;當進14h次定時中斷之后,將記錄中斷次數(shù)清成14hmova,r0;將r0里面的數(shù)據(jù)循環(huán)移位一次rlamovr0,adisp:movp1,r0;將循環(huán)或沒有循環(huán)的數(shù)據(jù)在p1口顯示出來ajmploop;程序循環(huán)

34、ti: clrtr1;定時中斷子程序decr1;在定時子程序中將變量r1減小1,當減為0時循環(huán)一位顯示movth1,#3ch;設(shè)置定時中斷的初始值(高位)movtl1,#0b0h;設(shè)置定時中斷的初始值(低位)setbtr1;啟動定時器reti;中斷程序返回 end;程序結(jié)束程序清單(c51):#include #include unsigned char led,value1;void timer1main1(void) /*non-bounce*/ ie=0x0; /*屏蔽所有中斷*/ value1=0x0; /*設(shè)置r1初始值*/ tmod=tmod & 0xf; tmod=tmod |

35、0x80; th1=0x3c; /*定時器1高8位初始值*/ tl1=0xb0; /*定時器1低8位初始值*/ ie=0x88; /*設(shè)置ie初始值*/ tr1=1; /*啟動記數(shù)*/void time1(void) interrupt 3 using 2tr1=0;ea=0;th1=0x3c; /*定時器1高8位初始值*/ tl1=0xb0; /*定時器1低8位初始值*/ value1-; /*value1變量減1*/ tr1=1; ea=1;void main(void) timer1main1();value1=0x14;led=0xfe;while(1)if(value1=0)valu

36、e1=0x14;led = _crol_(led,1);/*循環(huán)右移1位,點亮下一個led*/p1 = led;實驗五:顯示屏實驗一 實驗題目連線并編制程序,在顯示屏上顯示漢字二 實驗?zāi)康? 了解動態(tài)顯示的基本原理;2 了解漢字顯示的基本原理;3 了解查表程序的使用。三 原理簡述實驗儀上的漢字顯示屏為8x8的點陣顯示屏,單片機的i/o口最多只有8x4=32個,在實際的系統(tǒng)中,不可能每個i/o口均用到點陣顯示中,所以點陣顯示屏不可能靜態(tài)顯示,必須動態(tài)顯示。動態(tài)顯示的基本原理是利用人的視覺暫留效用,間歇的顯示每個該點亮的led燈,因為間歇的時間小于人眼的分辨能力,所以看起來就象是靜態(tài)顯示的一樣。漢

37、字的顯示首先必須開發(fā)漢字的點陣字庫,本程序為簡單起見,在點陣顯示屏中顯示一個漢字“工”,若想顯示其它的漢字,比如每個人的學(xué)號,則需自己開發(fā)字庫或查詢國標字庫。本程序的漢字字庫放在程序中,調(diào)用時使用查表的方法。查表程序是一個子程序,首先將表中的偏移量放入累加器acc中,然后調(diào)用查表子程序,將偏移量與當前pc的和作為地址處的數(shù)據(jù)送入acc中,然后子程序返回,以acc為偏移量的數(shù)據(jù)就放入了acc中,可以利用。四 連線方法電路單元第2單元第10單元連接1(網(wǎng)絡(luò)標號)p1.0-p1.7a0-a7連接2(網(wǎng)絡(luò)標號)p2.0-p2.7pa10-pa17五 程序清單(匯編): org 00h;程序從00h開始

38、ajmp start;跳轉(zhuǎn)到start org 30h;主程序從30h開始start:mov sp,#60h;設(shè)置堆棧指針為60h地址mov p1,#00h;將p1和p2都設(shè)置為0 mov p2,#00h mov ie,#00h;ie初始化,屏蔽所有的中斷movr0,#01h;將r0和r1設(shè)置為01hmovr1,#01hmovr2,#08h;r2設(shè)置為08h,表示要動態(tài)顯示8列again:mova,r0;查表求每列的字型數(shù)據(jù)acalltabblemovp2,#00h;將p2清0movp1,a;將p1輸出查表的數(shù)據(jù)movp2,r1;輸出對應(yīng)的列號acalldelay;調(diào)用延時子程序incr0;r

39、0增加1mova,r1;將r1循環(huán)1位rlamovr1,adjnzr2,again;循環(huán)8次ajmpstart;跳轉(zhuǎn)到起始位置delay: nop;延時子程序del1:movr3,#100del2:movr4,#10del3:djnzr4,del3djnzr3,del2ret;延時子程序返回tabble:movc a,a+pc;字型數(shù)據(jù)表 retdb 40h,42h,42h,7eh,42h,4ah,5eh,40h;“衛(wèi)”字的字型數(shù)據(jù)表 end;程序結(jié)束程序清單(c51):#include #include unsigned char table_data8=0x40,0x42,0x42,0x7e,0x42,0x4a,0x5e,0x40;/*字型數(shù)據(jù)*/unsigned char i,value;void delayxms(int count) small /*延時程序*/ int i,j; for(i=0; icount; i+)

溫馨提示

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

最新文檔

評論

0/150

提交評論