單片機(jī)課程設(shè)計(jì)論文馬拉松比賽計(jì)時(shí)器設(shè)計(jì)_第1頁
單片機(jī)課程設(shè)計(jì)論文馬拉松比賽計(jì)時(shí)器設(shè)計(jì)_第2頁
單片機(jī)課程設(shè)計(jì)論文馬拉松比賽計(jì)時(shí)器設(shè)計(jì)_第3頁
單片機(jī)課程設(shè)計(jì)論文馬拉松比賽計(jì)時(shí)器設(shè)計(jì)_第4頁
單片機(jī)課程設(shè)計(jì)論文馬拉松比賽計(jì)時(shí)器設(shè)計(jì)_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、馬拉松比賽計(jì)時(shí)器設(shè)計(jì)一. 設(shè)計(jì)目的 掌握單片機(jī)定時(shí)器/計(jì)數(shù)器的使用方法 掌握單片機(jī)中斷服務(wù)程序的應(yīng)用 熟悉單片機(jī)外圍數(shù)碼管顯示電路的設(shè)計(jì)方法二. 相關(guān)知識(shí)1. 定時(shí)器/計(jì)數(shù)器定時(shí)器/計(jì)數(shù)器簡稱定時(shí)器,其作用主要用于產(chǎn)生各種時(shí)間間隔,記錄外部脈沖與事件的數(shù)量等,是微機(jī)中最常用的部件之一。89c51單片機(jī)有2個(gè)16位的定時(shí)器/計(jì)數(shù)器o(to)和定時(shí)器1(t1)。to由2個(gè)定時(shí)寄存器tho和tlo構(gòu)成,t1則由th1和tl1構(gòu)成,他們都分別映射在特殊功能計(jì)數(shù)器中,從而可以通過對特殊功能寄存器的讀/寫來實(shí)現(xiàn)對這兩個(gè)定時(shí)器的操作。作為定時(shí)器。每個(gè)機(jī)器周期定時(shí)寄存器自動(dòng)加1.,所以定時(shí)器也可看成是計(jì)量機(jī)器

2、周期的計(jì)數(shù)器。由于每個(gè)機(jī)器周幃12個(gè)時(shí)鐘振蕩周期,所以定時(shí)的分辨率是時(shí)鐘振蕩頻率的1/12。作為計(jì)數(shù)器,只要在單片機(jī)外部引腳to(ti)有從1到0電平的負(fù)跳變,計(jì)數(shù)器就自動(dòng)加1。計(jì)數(shù)的最高頻率一般為振蕩頻率的1/24,例如,選用12mhz晶振,則最高技術(shù)頻率為0.5mhz。2. 中端系統(tǒng) 當(dāng)中央處理器cpu正在執(zhí)行某程序時(shí),由于某種原因,外界向cpu發(fā)出暫停目前工作去處理更重要事情的請求,程序被打斷;cpu響應(yīng)改請求并轉(zhuǎn)入響應(yīng)的處理程序,處理程序完成以后,再返回原來程序被打斷的位置,繼續(xù)原來的工作,這一過程成為中斷。實(shí)現(xiàn)中斷功能的部件稱為中斷系統(tǒng),或者稱為中斷控制邏輯系統(tǒng)。 89c52單片機(jī)的

3、中斷系統(tǒng)簡單實(shí)用。其基本特點(diǎn)是:有6個(gè)固定的可屏蔽中斷源,4個(gè)在片內(nèi),2個(gè)在片外,他們在程序存儲(chǔ)器中各有固定的中斷入口地址,由此進(jìn)入中斷服務(wù)程序;6個(gè)中斷源有兩個(gè)優(yōu)先級,可形成中斷嵌套;2個(gè)特殊功能寄存器用于中斷控制和條件設(shè)置的編程。 若某個(gè)中斷源通過編程設(shè)置,處于被打開的狀態(tài),并滿足中斷響應(yīng)的條件,而且滿足如下3個(gè)條件時(shí),單片機(jī)響應(yīng)此中斷: 當(dāng)前正在執(zhí)行的那條指令已被執(zhí)行完。 不在操作ie,ip中斷控制寄存器或執(zhí)行reti中斷指令在正常的情況下,從中斷請求信號有效開始,到中斷得到響應(yīng),通常需要3個(gè)機(jī)器周期到8個(gè)機(jī)器中期終端的到響應(yīng)后,自動(dòng)清除中斷請求標(biāo)志(對串行i/o端口的中斷標(biāo)志,要用軟件

4、清除),將斷點(diǎn)即計(jì)數(shù)器之值(pc)壓入堆棧(已被灰復(fù)用);然后把相應(yīng)的中斷入口地址裝入pc,使程序轉(zhuǎn)入相應(yīng)的中斷服務(wù)程序中去執(zhí)行。各個(gè)中斷源在程序存儲(chǔ)器中的中斷入口地址如表1-1所示 表1-1 89c52單片機(jī)中斷入口地址表中斷源入口地址into(外部中斷0)0003htfo(to中斷)000bhint1(外部中斷1)0013htf1(t1中斷)001bhri/ti(串行口中斷)0023htf2(t2中斷)002bh各個(gè)中斷入口地址相隔很近,不便于存放各個(gè)較長的中斷服務(wù)程序,故通常將中斷服務(wù)程序存放在另外方便存放的地方,而在中斷入口地址開始的二三個(gè)單元中,安排一條轉(zhuǎn)移類指令,以轉(zhuǎn)入中方端服務(wù)程

5、序。由于6個(gè)中斷源各有其中斷請求標(biāo)志ieo,tfo,ie1,ri/ti以及tf2,在中斷源滿足中斷請求的條件下,個(gè)標(biāo)志自動(dòng)加1,向cpu請求中斷。如果某個(gè)中斷源提出中斷請求后,cpu不能立即響應(yīng),只要該中斷請求標(biāo)志不被軟件人為清除,中斷請求的狀態(tài)就將一直保持,直到cpu響應(yīng)此中斷為止。對串行口中斷而言,這一過程與其他五個(gè)中斷的不同之處在于,及時(shí)cpu響應(yīng)了中斷,其中斷標(biāo)志ri/ti也不會(huì)自動(dòng)清零,必須在中斷服務(wù)程序中設(shè)置清除ri/ti的指令后,才有可能再一次提出中斷請求。cpu的現(xiàn)場保護(hù)和恢復(fù)必須有由被響應(yīng)的中斷服務(wù)程序去執(zhí)行,當(dāng)執(zhí)行ri/ti中斷返回指令后,斷點(diǎn)值自動(dòng)從棧頂2字節(jié)彈出并裝入p

6、c寄存器,使cpu繼續(xù)執(zhí)行被打斷的程序。三. 設(shè)計(jì)任務(wù)利用單片機(jī)內(nèi)部定時(shí)器to實(shí)現(xiàn)時(shí)、分、秒計(jì)時(shí)且在6個(gè)數(shù)碼管上同時(shí)顯示時(shí)、分、秒計(jì)時(shí)時(shí)間,并能通過按鍵對時(shí)間進(jìn)行重新設(shè)置四. 設(shè)計(jì)方案 1,.系統(tǒng)硬件電路設(shè)計(jì)系統(tǒng)硬件電路設(shè)計(jì)原理圖1-1所示 圖1-1 計(jì)時(shí)電路結(jié)構(gòu)框圖圖1-12系統(tǒng)軟件設(shè)計(jì)(1) 主程序(start) 在主程序中只完成系統(tǒng)的初始化,同時(shí)進(jìn)行時(shí)分秒按鍵的掃描。如果有按鍵按下,則做相應(yīng)時(shí)分秒計(jì)數(shù)數(shù)據(jù)的加1處理。主程序執(zhí)行流程圖按圖1-2所示(2)定時(shí)器中端服務(wù)程序(timero) 定時(shí)器to用于時(shí)間計(jì)時(shí)。定時(shí)計(jì)數(shù)個(gè)數(shù)為5000,由于采用12mhz晶體振蕩器,所以定時(shí)溢出中斷周期為5

7、000微秒=5毫秒。為了保證計(jì)時(shí)的準(zhǔn)確性,進(jìn)入中斷服務(wù)程序時(shí)應(yīng)立即重設(shè)計(jì)數(shù)初始值。在中斷程序中還要判斷是否計(jì)時(shí)1s,若是,還應(yīng)通過調(diào)用其他子程序作時(shí)分秒值的相應(yīng)處理。(3) 顯示子程序(disp) 該子程序通過在中斷服務(wù)程序中被調(diào)用而執(zhí)行。每一次中斷程序調(diào)用一次,其作用是根據(jù)掃描指針循環(huán)驅(qū)動(dòng)各個(gè)數(shù)碼管。(4) 時(shí)鐘調(diào)整子程序(clk_change) 當(dāng)中斷程序中判斷出計(jì)時(shí)1s時(shí),該程序即被調(diào)用執(zhí)行。其作用為將秒的計(jì)數(shù)初值加1,同時(shí)判斷是否應(yīng)對十分作相應(yīng)的修改。(5) 數(shù)據(jù)轉(zhuǎn)換子程序(covert) 當(dāng)中斷程序中判斷出計(jì)時(shí)1s時(shí),該程序及被調(diào)用執(zhí)行。由于時(shí)分秒的計(jì)數(shù)值分別保存在一個(gè)字節(jié)里,而每一

8、個(gè)計(jì)數(shù)值實(shí)際是一個(gè)2位的十進(jìn)制數(shù)。在驅(qū)動(dòng)顯示時(shí)必須將這個(gè)2位數(shù)拆開以分別去掃描個(gè)位和十位,該子程序就是完成這個(gè)的,并把拆分結(jié)果存儲(chǔ)在從20h開始的顯示寄存器單元里。(6) 延時(shí)子程序(delay) 用于鍵盤的延時(shí)去斗五. 程序清單 org 0000h ;復(fù)位起始地址 ajmp start ;跳轉(zhuǎn)至主程序 org 000bh ;timero中斷矢量地址 ajmp timero ;跳轉(zhuǎn)至to中斷子程序timerostart: mov so,#6fh ;設(shè)置堆棧從6fh開始 mov 30h,#00h ;顯示位碼寄存器處置為00 mov 2ah,#00h ;“時(shí)” 寄存器初值為00h mov 2bh,

9、#00h ;“分” 寄存器初值為00h mov 2ch,#00h ;“秒” 寄存器初值為000h mov tmod,#01h ;設(shè)to為工作方式1,即16位定時(shí) ;器 mov tho,#oech ;計(jì)時(shí)器計(jì)時(shí)中斷時(shí)間為5000微秒 mov tlo,78h mov ie,#82h ;to中斷使能總的中斷使能 mov r4,#200 ;5000微秒中斷200次,實(shí)現(xiàn)計(jì)時(shí) ;1s功能 setb tro ;啟動(dòng)定時(shí)器to;loop段為主程序中用于循環(huán)地掃描按鍵以檢測外界輸入對時(shí)分秒的設(shè)置和修改loop: jb p0.0,next2 ;p0.0(秒值修改鍵)是否被按下? ;不是,則跳至next2檢查po

10、.1 acall delay ;去抖動(dòng) jb po.o,next2;po.o ;po.o(秒值修改鍵)不是真正被 ;按下則跳轉(zhuǎn)至next2檢查po.1 main: jnb po.o,next1 ;po.0(秒值修改鍵)是否放開? mov a,2ch ;將秒寄存器的值放入a add a#01 ;a的內(nèi)容加1 da a ;十進(jìn)制調(diào)整 mov 2ch,a ;將a的值放回秒寄存器 cjne a,#60h,next2 ;是否等于60秒?不是,則跳至 ;next2 mov 2ch,#00 ;是則重新設(shè)置秒寄存器的值為 ;00next2: jb po.1,next4 ;po.1(分值修改鍵)是否被按下? ;

11、不是則跳至next4檢查po.2 acall delay ;去抖動(dòng) jb po.1,next4 ;po.1(分值修改鍵)不是真正被 ;按下,則跳轉(zhuǎn)至next4檢查 ;po.2next3: jnb po.1,next3 ;(分值修改鍵)是否已放開? mov a,2bh ;將分寄存器的值修改,類同秒 ;的處理 add a,#01 ; da a mov 2bh,a cjne a,#60h,next4 ;是否等于60分?不是,則跳 ;轉(zhuǎn)至;next4 mov 2bh,#00 ;是,則重新設(shè)置分寄存器的 ;值為00next4: jb po.2,loop ;po.2(時(shí)值修改鍵)是否被按 ;下?不是,;則

12、跳轉(zhuǎn)至loop acall delay ;去抖動(dòng) jb po.2,loop ;po.2(時(shí)值修改鍵)不是真正 ;被按下,則跳轉(zhuǎn)至loop重 ;復(fù)檢查 next5: jnb po.2,next5 ;po.2(時(shí)值修改鍵)是否已放 ;開? mov a,2ah ;將時(shí)寄存器的值修改,類同分 ;秒的處理 add a,#01h da a mov 2ah,a cjne ,#24h,loop ;是否等于24時(shí)?不是,則跳 ;至loop mov 2ah,#00 ;是,則重新設(shè)置時(shí)寄存器的 ;值為00 ajmp loop;to中斷子程序。每5000微秒中斷一次,在該子程序 中判斷是否1秒計(jì)時(shí)到,并做相應(yīng)調(diào);整和

13、處理(clk_change子程序和convert子程序),同時(shí)實(shí)現(xiàn)每5000微秒的顯示;更新timero: mov tho,#oech ;重設(shè)定時(shí)器中斷計(jì)時(shí)5000 ;微秒 mov tlo,#78h push acc ;保留現(xiàn)場的值 push psw djnz r4,timlp1 ;計(jì)時(shí)1s到否?不到1s,則 ;跳轉(zhuǎn)至;timlp1 mov r4,#200 acall clk_change ;調(diào)用計(jì)時(shí)子程序clk_change acall convert ;調(diào)用數(shù)碼轉(zhuǎn)換及存儲(chǔ)convert ;子程序timlp1: acall disp ;調(diào)用顯示子程序disp pop psw ;恢復(fù)現(xiàn)場的值

14、pop acc reti;disp子程序?qū)崿F(xiàn)時(shí)分秒計(jì)時(shí)值在數(shù)碼管上的輸出驅(qū)動(dòng)顯示。每一次調(diào)用(相隔5000微秒);只驅(qū)動(dòng)顯示6個(gè)數(shù)碼管中的一個(gè)disp mov a,30h ;掃描顯示位碼載入a add a,#20h ;掃描顯示位碼作為偏移量, ;再加上顯示緩沖區(qū)首地址 ;20h,得待顯示數(shù)據(jù)的實(shí)際 mov r1,a ;存入掃描顯示位指針r1 mov a,30h ;掃描顯示位碼載入a swap a ;a中低四位交換到高四位(p1 ;高四位顯示位碼,低四位顯 ;示數(shù)據(jù)值) orl a,r1 ;得“顯示位碼-顯示段碼“ mov p1,a ;輸出至p1顯示 inc 30h ;掃面偏移量指針加1 mov

15、 a,30h cjne a,#6,dspend ;掃描顯示完否?不是,則跳 ;至dspend mov 30h,#0 ;是,則掃描顯示位偏移量置 ;為0dspend:ret ;clk_change子程序?yàn)橛?jì)時(shí)1s到各時(shí)分秒數(shù)據(jù)的處理程序clk_change: mov a,2ch ;2ch單元為秒寄存器 add a,#1 ;加1秒 da a ;十進(jìn)制調(diào)整 mov 2ch,a ;存入秒寄存器 cjne a,#60,clkend ;是否超過60秒?不是, ;則跳至clkend mov 2ch,#00 ;是,則重設(shè)為00 mov a,2bh ;2bh單元為分寄存器, ;其處理類同秒處理 add a,#1

16、 da a mov bh,a cjne a,#60,clkend ;是否超過60分?不是, ;則跳至clkendmov 2bh,#00 ;是,則重設(shè)為00 mov a,2ah ;2ah單元為時(shí)寄存器,其 ;處理類同秒分處理 add a,#1 da a mov 2ah,a cjne a,#24,clkend ;是否超過24時(shí)?不是, ;則跳至clkend mov 2ah,#00 ;是,則重設(shè)為00clkend:ret;convert子程序?qū)崿F(xiàn)時(shí)分秒計(jì)時(shí)值轉(zhuǎn)換為bcd碼并存儲(chǔ)在以20h為起始地址的顯示;輸出數(shù)據(jù)存儲(chǔ)在單元里,即顯示緩沖區(qū)20h至25h單元convert: mov r1,#20 ;送

17、顯示緩沖區(qū)首地址值 ;到r1指針 mov a,2ch ;將秒寄存器的內(nèi)容存入 ;a anl a,#ofh ;取秒值的個(gè)位,并存入 ;20h單元 mov r1,a inc r1 ;目標(biāo)地址指針修改 mov a,2ch ;將秒寄存器的內(nèi)容存入a anl a,#0f0h ;取秒值的十位,并存入 ;21h單元 swap a mov r1,a inc r1 ;目標(biāo)地址指針修 ;改 mov a,2bh ;分值的處理,類似 ;于秒的處理 anl a,#0fh mov r1,a inc r1 mov a,2bh anl a,#0f0h swap a mov r1。a inc r1 mov a,2ah ;時(shí)值的

18、處理,類似 ;于分秒的處理 anl a,#0fh mov r1,a inc r1 mov a,2ah anl a,#0f0h swap a mov r1,a retdelay: mov r6,#10 ; 延時(shí)約5ms(以 ;晶振為12mhz計(jì)) d1: mov r7,#250 djnz r7,$ djnz r6,d1 ret end 六心得體會(huì):通過本次單片機(jī)課程設(shè)計(jì)的鍛煉,讓我深刻的了解到了單片機(jī)技術(shù)在日常生活中所扮演的角色以及其在高科技領(lǐng)域所占有的地位,其次是單片機(jī)作為我們生活中比較常見的東西他給我們帶來了很多方便,學(xué)好單片機(jī)不僅僅是對自己科學(xué)文化知識(shí)的提高,更是對這個(gè)世界上更多深?yuàn)W的東西的愛好,激發(fā)了我對一些事物的好奇之心,更是提高了我的積極動(dòng)手能力和實(shí)踐能力,充實(shí)了我的生活,開闊了我的世界,讓我領(lǐng)略了科技的無窮。雖然本次課程設(shè)計(jì)都是從網(wǎng)上和圖書館的一些資料上積累的,但是我還是非常開心,因?yàn)檫@是我自己從前輩們的身上學(xué)到的知識(shí),感謝我身邊在這次設(shè)計(jì)中給我提供幫助的老師和同學(xué),也感謝提供這些設(shè)計(jì)材料的人士!我會(huì)在此基礎(chǔ)上更加努力學(xué)習(xí),為將來的道路造一盞指明燈!七參考文獻(xiàn) 片機(jī)系

溫馨提示

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

評論

0/150

提交評論