




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
PAGE2課程設計報告課程名稱單片機原理與應用課題名稱倒計時器設計專業(yè)電子信息工程技術班級學號姓名指導教師2011-12-22設計內容及要求(1)設計一個倒計時器,由單片機接收小鍵盤陣列設定倒計時時間,倒計時范圍最大為60分鐘,由LED顯示模塊顯示剩余時間,顯示格式為XX(分):XX(秒).X,精確到0.1s的整數倍。倒計時時間到,由蜂鳴器發(fā)出報警。(2)繪制系統硬件接線圖,并進行系統仿真。(3)畫出程序流程圖并編寫程序實現上述功能2、設計方案(1)單片機定時系統工作原理我們知道單片機的外接石英體振蕩器能提供穩(wěn)定、準確的頻率,并經12分頻后向內部定時器提供實時基準頻率信號,我們設定定時工作在中斷方式下,連續(xù)對此頻率信號進行分頻計數,便可得到秒信號,在對秒信號進行計數便可得到分、時、實時時鐘信息。石英晶體振蕩頻率為6MHz,設定定時器工作在方式1下,定時常數為3CB0H,則定時器每100ms產生1次中斷,在定時器的中斷定時處理中,每10次中斷,則向秒計數器減1,秒計數器計數到00時則向分計數器退位(并建立退位標志),分計數器計數到00時則向時計數器退位,計數器退位······如此周而復始地連續(xù)計數,便可獲得時、分、秒的信號,建立一個實時時鐘,接下來便可以進行報警輸出,當主程序檢測到有分退位標志時,便開始比較當前時間(小時與分,存放在RAM中)與規(guī)定時間(小時與分及秒,存放在ROM中)是否有相同者,則進行蜂鳴器報警,如無相同者則返回主程序,如此便實現了定時控制的要求。要準確到秒,則時、分、秒三者均需參與比較,并且建立秒進位標志位,即每秒鐘的偶也要對定時設定值比較一遍。(2)電路原理定時電路的核心是AT89C51單片機,其內部帶有4KB的FLASHROM,無須外擴程序存儲器。電腦時鐘沒有大量的運算和短暫緩存數據,現有的128B片內RAM亦能滿足要求,也不必外擴片外RAM。系統配備5位LED顯示和3*4鍵盤,用P3口作為減排接口電路,P2口作為5位LED顯示的位選通口,P0口則作為字形碼輸出口。采用共陽極LED數碼管,PO口、P2口和數碼管之間傳接了驅動芯片74LS245,因此P2口輸出高電平選中相應的位,而對P0口輸出低電平點亮相應的段。(3)系統工作流程進入主程序。設置各中斷的入口地址。把相關的寄存器清零。設置數碼管顯示的初始狀態(tài)。對鍵盤進行掃描。顯示下一個數字。進行倒計時。判斷計時是否到了。到了清零處理。沒到繼續(xù)倒計時知道清零為止。3、程序設計根據上述工作流程,軟件設計可分為以下幾個功能模塊:主程序:初始化與鍵盤監(jiān)控。計時:未定時器0中斷服務子程序,完成刷新計時緩沖區(qū)的功能。顯示:完成5位LED動態(tài)顯示。鍵盤掃描:判斷是否有鍵按下,并求取鍵號。其他輔助功能程序,如鍵盤設置、拆字、合字、等。下面分模塊進行軟件設計:計時程序模塊。如前所述,系統定時采用定時器與軟件循環(huán)相結合的方法。定時器0每隔100ms溢出中斷一次,則循環(huán)中斷10次延時時間為1秒,上述過程重復60次為1分鐘,分計時60次為1小時。設系統使用6MHz的晶振,定時器0工作方式1,則100ms定時對應的定時器初值可以下計算得到定時時間=(216-定時器0初值)*(12/fosc)如果定時器0初值為3CB0H,則TH0=3CH,TL0=0B0H。當系統使用其他頻率的晶振時,可以由上式計算相應的定時器0初值,也可以改變定時時間。例如當系統晶振為12MHz時,同樣的初值對應的設定時間為50ms,則循環(huán)中斷次數為20次時,延時為1秒。這里有兩個問題要特別重視。Ⅰ.定時器溢出產生中斷請求,CPU并不一定立即響應中斷,而可能需要延遲一定的中斷響應時間之后才能響應中斷,中斷響應時間大約為3~8個機器周期。顯然,這將在定時時間中加入額外的延時時間,導致即計時誤差。為了保證計時精度,必須采取措施進行補償。我們采用增大重裝的定時器0初值的方法來減少定時器0的定時時間。具體應調整為多大,一般需要通過調試來確定。經測試,定時器0重裝初值設為3CB7H~3CBFH可以滿足精度要求。Ⅱ.時間是按十進制遞增,而MCS-51系列單片機只有二進制加法指令,因此用加法指令計時必須進行二——十進制轉換。,時間校時對設置程序和定時報時程序模塊。將鍵盤輸入的5位時間值合并為3位壓縮BCD碼(時、分、秒)送入即使緩沖區(qū),作為當前倒計時起始時間。該模塊的入口為即使緩沖區(qū)或報時值寄存區(qū)的首地址。程序調用一個鍵盤設置子程序將鍵入的5位時間值送入鍵盤緩沖區(qū),然后程序將鍵盤設置緩沖區(qū)中的5位LED碼合并為5位BCD碼,送入即使緩沖區(qū)或計時值寄存區(qū)。二,鍵盤掃描程序模塊。此模塊的功能是判斷是否有鍵按下,無鍵按下則循環(huán)等待,有鍵按下則求取鍵號并將鍵號送累加器A返回。程序中的去抖延時和循環(huán)等待延時都用顯示子程序來代替,從而保證隨時刷新顯示。鍵盤掃描程序在前面已有詳細敘述,在此不再累述。三,顯示程序模塊。將顯示緩沖區(qū)中的5位BCD碼用動態(tài)掃描方式掃描顯示,為此必須首先將3字節(jié)計時緩沖區(qū)中的分、秒、毫秒,壓縮BCD碼拆分為5字節(jié)。四,拆字程序與合字程序,如前所述,拆字程序的功能是將3字節(jié)計時緩沖中的分、秒、毫秒壓縮BCD碼拆分為5字節(jié),BCD碼并刷新顯示緩沖區(qū),合字程序的功能是將鍵盤設置緩沖區(qū)中的5位BCD碼合并為3位壓縮BCD碼,送入計時緩沖區(qū)或計時值寄存區(qū)。下面分別對各程序模塊進行介紹。主程序。主程序流程圖如圖9-2所示。LED數碼管掃描顯示程序模塊(流程圖略)。鍵盤掃描程序模塊鍵值處理程序模塊倒計時程序模塊流程圖見圖9-3。主程序:主程序的設計一般包括:主程序的起始地址,中斷服務程序的起始地址,有關內存單元及相關部件的初始化和一些子程序調用等等。程序的起始地址MCS-51系列單片機復位后,(PC)=0000H,而0003H~002BH分別為個中斷源的入口地址。所以,編程池應在0000H處寫一跳轉指令。當CPU接受到中斷請求信號并予以響應后,CPU把當前的PC內容壓入棧中進行保護,然后轉入響應的中斷服務程序入口處執(zhí)行。一般在響應的中斷服務程序入口處寫一條跳轉指令,并以跳轉指令的目標地址作為中斷服務程序的其始地址進行編程。主程序的初始化內容所謂初始化,是對用到的單片機內部部件或拓展芯片進行初始工作狀態(tài)設定。本次設計中,使用了兩個中斷,即T0、T1。其中:1.T0中斷:采用T0定時中斷工作方式,完成倒計時。2.T1中斷:采用T1定時中斷工作方式,完成蜂鳴器報警。對于時鐘而言,顯示顯然是另一個重要環(huán)節(jié)。如前所述,通常有兩種顯示方式:動態(tài)顯示和靜態(tài)顯示。方案一:串口擴展,LED靜態(tài)顯示。該方案占用資源少,采用串口傳輸實現靜態(tài)顯示,顯示亮度有保證,但硬件開銷大、電路復雜、信息刷新速度慢,比較適用于并行口資源較少的場合。方案二:直接利用AT89C51單片機的P0和P2口,LED動態(tài)顯示。該方案硬件連接簡單,但動態(tài)掃描的顯示方式需占用CPU較多時間,在單片機沒有太多實時測控任務的情況下可以采用,本次系統選擇動態(tài)顯示方式。4.單片機倒計時控制系統硬件原理圖5.流程圖(1)主程序流程圖:主程序主程序設置各中斷服務程序的入口地址相關寄存器清零設置數碼管顯示初始狀態(tài)按鍵掃描顯示按下的數字進行倒計時時間到零否報警YN(2)倒計時器設計框圖:主程序主程序數碼管動態(tài)掃描模塊當前時間倒計時模塊輸入倒計時時間模塊蜂鳴器報警模塊(3)倒計時器設計流程圖:開始倒計時開始倒計時寄存器清零設置定時器0工作方式判斷按鍵次數N啟動定時器0關閉定時器01次2次3次等待中斷T1中斷發(fā)聲提示達到最大值(4)按鍵消抖框圖:開始開始有鍵閉合?調用延時字程序Y有鍵閉合?確定閉合的YNN6、調試問題與解決方法完成了硬件的設計、制作和軟件編程后,要使系統能夠按設計意圖正常運作,必須進行系統調試。系統調試包括軟件調試和硬件調試。不過,作為一個小計算機系統,其運行是軟硬件相結合的,因此,軟硬件的調試也是不可能絕對分開的,硬件的調試常常需要利用調試軟件,軟件的調試也可能需要對硬件的測試和控制來進行。(1)硬件調試。硬件調試的主要任務是排除硬件故障,其中包括設計錯誤和工藝性故障。1)脫機檢查。用萬用表逐步按照電路原理圖檢查印制電路中所有器件的各引腳,尤其是電源的連接是否正確:檢查數據總線、地址總線和控制總線是否有短路等故障,順序是否正確;檢查各開關按鍵是否能正常開關,是否連接正常;各限流電阻是否短路等內容。為了保護芯片,應先對各IC電位進行檢查,確定其無誤后再插入芯片檢查。2)聯機調試。暫時拔掉89C51芯片,將仿真器的40仿真插入89C51的芯片插座進行調試,檢驗鍵盤/顯示接口電路是否滿足要求設計??梢酝ㄟ^一些簡單的測軟件來查看接口工作是否正常。例如,我們可以設計一個軟件,使89C51的P1、P2口輸出55H或AAH,同時讀P3口,運行后用萬用表檢查相應端口電平是否一高一低,在仿真器中檢查讀入的P3口8位是否為1,如果正常則說明89C51正常工作。還可以設計一個使所有LED全顯示“8.”的靜態(tài)顯示程序來檢驗LED的好壞。如果運行測試結果與預期不符,很容易根據故障現象判斷故障原因并采取針對性措施排除故障。(2)軟件調試。軟件調試的任務是利用開發(fā)工具進行在線仿真調試,發(fā)現和糾正程序錯誤,同時也能發(fā)現硬件故障。程序的調試應一個模塊一個模塊地進行,首先單獨調試各功能子程序,檢驗程序是否能夠實現預期的功能,接口電路的控制是否正常等;最后逐步將各子程序連接起來進行聯調。聯調需要注意的是,各程序模塊間能否正常傳遞參數,特別要注意各子程序的現場保護與恢復。調試的基本步驟如下:1)用仿真器修改顯示緩沖區(qū)內容,屏蔽拆字程序,調試動態(tài)掃描顯示功能。例如將DISP0~DISP4單元置為“01234”,應能在LED上從左到右顯示“01234”。若顯示不正確,可在顯示子程序相應設置斷點調試檢查,然后用仿真器修改計時緩沖區(qū)內容,調試顯示模塊,例如,將HOUR、MIN、SEC單元置為“01235”檢查是否能正確顯示“01.23.5”,若顯示不正確,應在顯示子程序相應位置設置斷點,反復調試檢驗直至完全正確。2)運行主程序調試時模塊,不按下任何鍵,檢查是否從由60.00.0開始正確計時,若不能正確計時則應在定時器中斷服務子程序中設置斷點,檢查HOUR、MIN、SEC、MSEC單元是否隨斷點運動而變化。然后屏蔽緩沖區(qū)初始化部分,用仿真器修改計時緩沖區(qū)內容為40:33.5,運行主程序,檢驗能否正確進位。3)調試鍵盤模塊掃描,先用延時10ms子程序代替顯示子程序延時消抖,在求取鍵號后設置斷點,中斷后觀察A累加器中的鍵號是否正確,然后恢復用顯示子程序延時消抖,檢驗與顯示模塊能否正常連接。4)調試時間設置/鬧鐘定時模塊TIMSEF。首先屏蔽中斷子程序,單獨調試鍵盤設置模塊CKECKEY,觀察顯示緩沖區(qū)DISP0~DISP4單元的內容是否隨鍵入的鍵號改變,以及鍵號能否在LED上顯示。然后屏蔽CKECKEY子程序,分別將R1設置為時間緩沖區(qū)和鬧鐘值寄存區(qū)的首地址,修改顯示緩沖區(qū)內容,程序運行后查看時間設置緩沖區(qū)HOUR、MIN、SEC單元和鬧鐘值寄存區(qū)AHOUR、AMIN、ASEC單元內容是否正確。最后聯調TIMSET模塊。5)運行主程序聯調,檢查能否用鍵盤修改當前時間以及設置鬧鐘,能否正確計時、啟閉、停鬧。(3)脫機運行。軟、硬件調試成功之后,可以將程序固化到89C51的FLASHROM中,插入89C51芯片,接上電源脫機運行。既然軟硬件讀都可以調試成功,脫機運行似乎肯定成功,然而事實往往并非如此,仍有可能出現以下故障;1)系統不工作。其原因主要有晶振不起振,或是EA腳沒有接高電平(接地或懸空)等。2)系統工作時好時壞。這主要是由于干擾引起的。由于本系統沒有傳感輸入通道和控制輸出通道,干擾源相對較少且簡單,因此,在電源、總線處對地接濾波電容一般可以解決問題。對本節(jié)介紹的單片機報時控制系統,需要做以下幾點說明:(1)軟件陷阱。為是跳飛的程序重新返回主程序區(qū),恢復程序的正常運行,在EPROM的未編程區(qū)加入若干個如下的程序段:NOPNOPLJMPNEXTTNOP輸出驅動加光電隔離元件,如果是驅動高壓大電流,繼電器選用過零觸發(fā)的固態(tài)繼電器,繼電器安裝部位應盡量遠離單片機并加裝良好的電磁屏蔽,減少對單片機干擾。7、仿真圖8、程序模塊;以下8個存儲單元分別存放8位數碼管的段碼LED_BIT_1EQU 30HLED_BIT_2EQU 31HLED_BIT_3EQU 32HLED_BIT_4EQU 33HLED_BIT_5EQU 34HLED_BIT_6EQU 35HLED_BIT_7EQU 36HT_COUNTEQU 38HKEY_CNTEQU 39HLINE EQU 3AHROW EQU 3BHVAL EQU 3CHTCOUNT EQU 40HKCOUNT EQU 41HKEY BIT P3.3;************************************** ORG 00H SJMP START ORG 0BH LJMP INT_T0 ORG1BH LJMPINT_T1START: MOV T_COUNT,#00H ;初始化 MOV KEY_CNT,#00H MOV LINE,#00H MOV ROW,#00H MOV VAL,#00H MOV LED_BIT_1,#3FH MOV LED_BIT_2,#3FH MOV LED_BIT_3,#40H MOV LED_BIT_4,#3FH MOV LED_BIT_5,#3FH MOV LED_BIT_6,#80H MOV LED_BIT_7,#3FH MOV DPTR,#TABLEA0: LCALL DISP;**************************************;按鍵掃描LSCAN: MOV P3,#0F0H ;行碼掃描 L1: JNB P3.0,L2 LCALL DELAY JNB P3.0,L2 MOV LINE,#00H LJMP RSCAN L2: JNB P3.1,L3 LCALL DELAY JNB P3.1,L3 MOV LINE,#01H LJMP RSCAN L3: JNB P3.2,L4 LCALL DELAY JNB P3.2,L4 MOV LINE,#02HRSCAN: MOV P3,#0FH ;列碼掃描 C1: JNB P3.4,C2 MOV ROW,#00H LJMP CALCU C2: JNB P3.5,C3 MOV ROW,#01H LJMP CALCU C3: JNB P3.6,C4 MOV ROW,#02H LJMP CALCU C4: JNB P3.7,C1 MOV ROW,#03H ;***********************************************CALCU: INC KEY_CNT ;統計按鍵次數 MOV A,KEY_CNT CJNE A,#9,K1 ;如果按鍵3次,發(fā)聲提示 MOV TMOD,#01H MOV TH1,#(65536-700)/256 MOV TL1,#(65536-700)MOD 256 MOV IE,#82H SETB TR1 W10:MOV A,P3 ;等待按鍵抬起 CJNE A,#0FH,W11 MOV P0,#00H CLR TR0 LJMP START W11:MOV A,P3 CJNE A,#0F0H,W12 MOV P0,#00H CLR TR0 LJMP START W12:SJMP W10;**************************************************;第1次按鍵,清除已顯示的0,顯示按下的數字 K1: CJNE A,#1,K2 MOV A,LINE MOV B,#04H MUL AB ADD A,ROW MOV VAL,A MOVC A,@A+DPTR MOV LED_BIT_1,ACJNEP3.3,#1,AA1DISP1: LCALL DISP W20:MOV A,P3 ;等待按鍵抬起 CJNE A,#0FH,W21 LJMP A0 W21:MOV A,P3 CJNE A,#0F0H,W22 LJMP A0 W22:SJMP DISP1 ;***************************************************;第2次按鍵,顯示按下的數字 K2: MOV A,LINE MOV B,#04H MUL AB ADD A,ROW MOV VAL,A MOVC A,@A+DPTR MOV LED_BIT_2,A LCALLAA1 DISP2: LCALL DISP W30:MOV A,P3 ;等待按鍵抬起 CJNE A,#0FH,W31 LJMP A0 W31:MOV A,P3 CJNE A,#0F0H,W32 LJMP A0 W32:SJMP DISP2 ;**************************************************;開始倒計數AA1:MOV TCOUNT,#00H MOV KCOUNT,#00H MOV TMOD,#01H ;定時器0工作在方式1 MOV TL0,#(65536-50000)/256 MOV TH0,#(65536-50000)MOD 256 K1: JB KEY,$ ;等待按鍵 LCALL DELAY JB KEY,$ MOV A,KCOUNT CJNE A,#00H,K2 ;判斷按鍵次數 SETB TR0 ;第1次按鍵,啟動定時器 MOV IE,#82H JNB KEY,$ INC KCOUNT ;按鍵抬起,按鍵次數值加1 LJMP K1 K2: CJNE A,#01H,K3 CLR TR0 ;第2次按鍵,關閉定時器 MOV IE,#00H JNB KEY,$ INC KCOUNT ;按鍵抬起,按鍵次數值加1 LJMP K1 K3: CJNE A,#02H,K1 ;第3次按鍵,返回初始狀態(tài) JNB KEY,$ LJMP AA1INT_T0:MOV TH0,#(65536-50000)/256 MOV TL0,#(65536-50000)MOD256 INC TCOUNT MOV A,TCOUNT CJNE A,#2,A1 ;是否計夠0.1秒 MOV A,LED_BIT_7 INC A MOVLED_BIT_7,A CJNEA,#9,DISP MOVLED_BIT_7,#00H MOVA,LED_BIT_5 DECA MOVLED_BIT_5,A CJNEA,#0,DISP MOVLED_BIT_5,#00H MOVA,LED_BIT_4 DECA MOVLED_BIT_4,A CJNEA,#0,DISP MOVLED_BIT_4,#00H MOVA,LED_BIT_2 DECA MOVLED_BIT_2,A CJNEA,#0,DISP MOVLED_BIT_2,#00H MOVA,LED_BIT_1 DECA MOVLED_BIT_1,A CJNEA,#0,DISP MOV TMOD,#01H A1:RETI;****************************************;定時器1中斷服務程序,驅動揚聲器發(fā)聲INT_T1:MOV TH1,#(65536-700)/256 MOV TL1,#(65536-700)MOD 256 CPL P1.0 RETI;****************************************DISP: CLR P2.6 MOV P0,LED_BIT_7 LCALL DELAY SETB P2.6 CLR P2.5 MOV P0,LED_BIT_6 LCALL DELAY SETB P2.5 CLR P2.4 MOV P0,LED_BIT_5 LCALL DELAY SETB P2.4 CLR P2.3 MOV P0,LED_BIT_4 LCALL DELAY SETB P2.3 CLR P2
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 工會年度工作總結
- 北師大版三年級下冊數學第一次月考(1-2單元)檢測卷(含答案)
- 教育學?;顒又黝}班會
- 幼兒園教育保育評估指南
- 天然氣灶具知識培訓課件
- 教育扶貧控輟保學政策
- 公司車輛停放培訓
- 中秋立體美術課件
- 教育的未來:探索新時代的教學模式
- 《GBT 40339-2021金屬和合金的腐蝕 服役中檢出的應力腐蝕裂紋的重要性評估導則》全新解讀
- 走進中國傳統節(jié)日 詳細版課件
- Q∕SY 02098-2018 施工作業(yè)用野營房
- 浙教版勞動五年級下冊 項目三 任務三 環(huán)保小車我來造 教案
- 隔離開關培訓課件
- 圖像融合技術中英文對照外文翻譯文獻
- 35kV高壓電纜敷設專項施工方案(完整版)
- 鍋爐空氣預熱器拆除安裝方案
- 風電齒輪箱結構原理及維護知識
- 加油站安全生產考核獎懲臺賬
- 出國簽證戶口本翻譯模板(共4頁)
- 農村渡口改造及小型碼頭
評論
0/150
提交評論