




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、附錄附錄A 一個單片機的應用項目一個單片機的應用項目 自動打鈴機的設計自動打鈴機的設計 A.1 項目任務項目任務A.2 硬件設計硬件設計A.3 軟件設計軟件設計A.4 項目實驗項目實驗A.5 項目仿真項目仿真A.1 項目任務項目任務A.1.0 設計要求設計要求A.1.1 基本要求基本要求A.1.2 強化要求強化要求A.1.0 設計要求設計要求 項目的任務是利用單片機作為核心控制電路,設計一項目的任務是利用單片機作為核心控制電路,設計一個自動打鈴機。基本要求如下:個自動打鈴機。基本要求如下:(1要求所設計的單片機自動打鈴機具有準確的計時功要求所設計的單片機自動打鈴機具有準確的計時功能,能夠像電子
2、鐘一樣按時、分、秒格式顯示實時時間。能,能夠像電子鐘一樣按時、分、秒格式顯示實時時間。(2能根據用戶要求的時間點自動按時打鈴,該項目以能根據用戶要求的時間點自動按時打鈴,該項目以大學的自動打鈴控制為例,除要求自動打鈴外,還要大學的自動打鈴控制為例,除要求自動打鈴外,還要求能自動播放音樂和早操、課間操節目。具體控制時間如求能自動播放音樂和早操、課間操節目。具體控制時間如作息時間表所示見表作息時間表所示見表A.1)。)。(3設置兩個時間調校校時和校分按鍵,分別用來設置兩個時間調校校時和校分按鍵,分別用來調校時和分,以保證自動打鈴機的時間與標準時間相符。調校時和分,以保證自動打鈴機的時間與標準時間相
3、符。 表表A.1A.1 大學作息時間表大學作息時間表 時 間 作 息 時 間 作 息 6:20 起 床 12:0014:15 午 休 6:256:40 播放音樂、早操 14:1614:20 播放音樂 6:407:20 洗漱、早餐 14:2514:30 預 備 7:207:40 早 讀 14:3015:15 上課:第五節 7:407:50 預 備 15:2516:10 第六節 7:508:35 上課:第一節 16:2017:05 第七節 8:459:30 第二節 17:1518:00 第八節 9:359:40 課間操 18:0018:30 晚 餐 9:459:50 預 備 19:2019:30
4、預 備 9:5010:35 上課:第三節 19:3021:30 晚自習 10:4511:30 第四節 23:00 熄 燈 11:3012:00 午 餐 A.1.1 基本要求基本要求 如果讀者只是把這個項目作為單如果讀者只是把這個項目作為單片機課程的綜合實訓的話,只要求能片機課程的綜合實訓的話,只要求能在單片機開發裝置或單片機實驗箱在單片機開發裝置或單片機實驗箱上按設計要求成功完成實驗則可。上按設計要求成功完成實驗則可。對于沒有單片機開發設備的讀者,只對于沒有單片機開發設備的讀者,只要求能利用仿真軟件要求能利用仿真軟件Proteus成成功完成仿真即可。功完成仿真即可。A.1.2 強化要求強化要求
5、 如果讀者有興趣把這個項目做成一個實際樣如果讀者有興趣把這個項目做成一個實際樣機的話,則要求讀者在能成功完成實訓或仿真調機的話,則要求讀者在能成功完成實訓或仿真調試的基礎上,再增加電源電路、實際的驅動電路試的基礎上,再增加電源電路、實際的驅動電路、機殼等,設計出印刷電路板、機殼等,設計出印刷電路板PCB,并完成,并完成PBC的制作和元器件安裝,用帶有的制作和元器件安裝,用帶有FPROM且與且與MCS-51系列兼容的單片機如系列兼容的單片機如AT89C52代替實驗用代替實驗用的單片機,并用編程器將源程序寫入單片機的的單片機,并用編程器將源程序寫入單片機的FPROM中,與其他元件一起安裝到電路板上
6、,中,與其他元件一起安裝到電路板上,配上機殼,構成獨立的自動打鈴機,達到可以投配上機殼,構成獨立的自動打鈴機,達到可以投入實際應用的目的。入實際應用的目的。A.2 硬件設計硬件設計A.2.1 總體設計總體設計A.2.2 實時時鐘電路設計實時時鐘電路設計A.2.3 顯示電路設計顯示電路設計A.2.4 控制電路設計控制電路設計A.2.1 總體設計總體設計 首先需要利用單片機設計一個實時時鐘,首先需要利用單片機設計一個實時時鐘,然后根據控制時間即作息時間建立一個然后根據控制時間即作息時間建立一個數據區作為控制字碼表,存放在數據區作為控制字碼表,存放在ROM中。在中。在此基礎上,設計控制程序,在時鐘每
7、計時此基礎上,設計控制程序,在時鐘每計時1秒秒鐘時查看一遍數據區,檢查數據區中所設置鐘時查看一遍數據區,檢查數據區中所設置的時間是否與需要控制打鈴或廣播的時間點的時間是否與需要控制打鈴或廣播的時間點相同,若相同,則通過單片機的相同,若相同,則通過單片機的I/O端口輸出端口輸出控制信號。控制信號。 A.2.2 實時時鐘電路設計實時時鐘電路設計 選擇通過選擇通過MCS-51內部定時器內部定時器T0 產生中斷來產生中斷來實現計時。設定定時器實現計時。設定定時器T0工作在定時工作方式工作在定時工作方式1,每,每100ms0.1s產生一次中斷,每產生一次產生一次中斷,每產生一次T0中斷,就利用軟件將基準
8、中斷,就利用軟件將基準0.1s時間計數單元進時間計數單元進行累加計數一次。當定時器行累加計數一次。當定時器T0產生產生10次中斷時,次中斷時,就獲得了就獲得了1s信號,這時秒計數單元加信號,這時秒計數單元加1,同理,同理,由軟件對分計數單元和時計數單元進行時間計數由軟件對分計數單元和時計數單元進行時間計數,從而得到秒、分、時的時間值,并通過,從而得到秒、分、時的時間值,并通過LED數數碼管顯示電路顯示出來。碼管顯示電路顯示出來。定時器初值的確定定時器初值的確定 選擇單片機的晶振頻率為選擇單片機的晶振頻率為fosc = 6MHz,則時鐘周期為,則時鐘周期為1/6s,機器周期為,機器周期為2s。所
9、以定時器。所以定時器T0工作在方式工作在方式1下產生下產生0.1s的定時,所需的定時器初值為的定時,所需的定時器初值為3CB0H,為,為了確保了確保T0能準確定時能準確定時0.1s,在,在T0中斷服務中斷服務程序中重裝定時器初值時,修正為程序中重裝定時器初值時,修正為3CBDH,在運行中可根據誤差情況進一步調整。,在運行中可根據誤差情況進一步調整。 A.2.3 顯示電路設計顯示電路設計 為了按時、分、秒的格式顯示實時時間為了按時、分、秒的格式顯示實時時間,需要使用,需要使用6只只LED數碼顯示管本項目采數碼顯示管本項目采用共陰極用共陰極LED數碼管)。為了減少硬件開數碼管)。為了減少硬件開銷,
10、提高系統可靠性和降低成本,選擇銷,提高系統可靠性和降低成本,選擇LED數碼管的顯示方式為動態掃描顯示。數碼管的顯示方式為動態掃描顯示。由于驅動由于驅動LED數碼管需要一個字形口和一數碼管需要一個字形口和一個字位口,為此,采用并行個字位口,為此,采用并行I/O接口芯片接口芯片8155對單片機進行對單片機進行I/O口擴展。口擴展。 選擇選擇8155的的B口作為字形口,將口作為字形口,將B口經口經74LS07和所有和所有LED的的a、b、c、d、e、f、g、h引線相連;引線相連;8155的的A口作為字位口,口作為字位口,其中的其中的6個引腳經個引腳經74LS07分別和分別和6個個LED的的控制端控制
11、端G相連。單片機工作時通過相連。單片機工作時通過8155的的B口輸出字形碼,再通過口輸出字形碼,再通過A口輸出字位碼以控口輸出字位碼以控制被選中的一個制被選中的一個LED點亮。當與時、分、點亮。當與時、分、秒對應的字形碼輪流輸出時,相應的字位秒對應的字形碼輪流輸出時,相應的字位碼從左到右輪流選中碼從左到右輪流選中LED,打鈴機的實時,打鈴機的實時時間就可以逐次在時間就可以逐次在LED上動態顯示。上動態顯示。 A.2.4 控制電路設計控制電路設計1 1時間調校電路時間調校電路2 2輸出控制電路輸出控制電路3 3自動打鈴機硬件接線圖自動打鈴機硬件接線圖4 4自動打鈴機硬件接線圖說明自動打鈴機硬件接
12、線圖說明5 5圖圖A.1A.1中中81558155的端口地址分析的端口地址分析1 1時間調校電路時間調校電路 選擇采用外部中斷請求來進行時間調校選擇采用外部中斷請求來進行時間調校。將。將“校時按鍵和校時按鍵和“校分按鍵分別接到校分按鍵分別接到單片機的單片機的P3.3和和P3.2引腳,每當用引腳,每當用戶按下一次時間調校按鍵,便會產生一次外戶按下一次時間調校按鍵,便會產生一次外部中斷請求,單片機響應中斷后,在中斷服部中斷請求,單片機響應中斷后,在中斷服務程序中對相應的計時單元進行加務程序中對相應的計時單元進行加1。若加。若加至超過計時基制,通過程序控制計時單元清至超過計時基制,通過程序控制計時單
13、元清0,這樣只用加,這樣只用加1控制就可以進行校時。控制就可以進行校時。 2輸出控制電路輸出控制電路 選取單片機的選取單片機的P1.0引腳用于連接電鈴驅動引腳用于連接電鈴驅動電路,電路,P1.4引腳用于連接廣播設備驅動電路。引腳用于連接廣播設備驅動電路。在項目實驗調試階段,電鈴和廣播設備用發光在項目實驗調試階段,電鈴和廣播設備用發光二極管代替,將發光二極管的負端與輸出引腳二極管代替,將發光二極管的負端與輸出引腳連接,使用低電平驅動。連接,使用低電平驅動。 連接連接P1.0的發光二極管綠色亮表示打的發光二極管綠色亮表示打鈴,滅則表示不打鈴。鈴,滅則表示不打鈴。 連接連接P1.4的發光二極管紅色亮
14、表示打的發光二極管紅色亮表示打開廣播設備,滅則表示停止廣播。開廣播設備,滅則表示停止廣播。 3 自動打鈴機硬件接線圖自動打鈴機硬件接線圖 圖圖A.1 A.1 自動打鈴機硬件接線圖自動打鈴機硬件接線圖 4 自動打鈴機硬件接線圖說明自動打鈴機硬件接線圖說明 在圖在圖A.1中,所用的單片機型號為中,所用的單片機型號為8031,因為采,因為采用單片機開發實驗裝置進行試驗時,所加載的源程序用單片機開發實驗裝置進行試驗時,所加載的源程序是存放在實驗裝置的是存放在實驗裝置的RAM存儲器中的,無需用到單存儲器中的,無需用到單片機的片內片機的片內ROM,所以在項目設計實驗階段只要使,所以在項目設計實驗階段只要使
15、用無用無ROM型的型的8031單片機即可。單片機即可。 實驗成功后,需要做成實用的打鈴機時,若仍采實驗成功后,需要做成實用的打鈴機時,若仍采用用8031,則需要給,則需要給8031擴展片外擴展片外ROM,現在由于具,現在由于具有片內有片內ROMEPROM、E2PROM或或FPEROM的的單片機價格不高,因而,實際應用時,通常直接選用單片機價格不高,因而,實際應用時,通常直接選用與與MCS-51兼容的具有片內兼容的具有片內FPROM的單片機如的單片機如AT89C51、AT89C52等)。等)。 5 圖圖A.1中中8155的端口地址分析的端口地址分析 當當IO/= 1時,單片機選擇時,單片機選擇8
16、155作為作為I/O口,口,8155的的端口地址為:端口地址為:8000H 命令命令/狀態口狀態口8001H A口字位口)口字位口)8002H B口字形口)口字形口)8003H C口未使用)口未使用)8004H 定時器定時器/計數器低字節未使用)計數器低字節未使用)8005H 定時器定時器/計數器高字節未使用)計數器高字節未使用)8008HFFFDH 8155重疊重疊I/O地址地址5 圖圖A.1中中8155的端口地址分析的端口地址分析 當當IO/= 0時,單片機選擇時,單片機選擇8155中的中的RAM存存儲器工作,儲器工作,RAM的地址為:的地址為:0000H00FFH 8155基本基本RAM
17、地址地址0100H7FFFH 8155重疊重疊RAM地址地址 在該應用項目中,只用到在該應用項目中,只用到8155其中的其中的命令命令/狀態口、狀態口、A口和口和B口。未使用口。未使用8155中中的的RAM存儲器。存儲器。A.3 軟件設計軟件設計A.3.1 程序的總體設計程序的總體設計A.3.2 程序流程圖設計程序流程圖設計A.3.3 源程序設計源程序設計A.3.1 程序的總體設計程序的總體設計 程序的總體設計主要是根據通過硬件設計所程序的總體設計主要是根據通過硬件設計所確定的硬件電路以及編程需要,進行單片機的確定的硬件電路以及編程需要,進行單片機的資源分配、引腳定義以及設計出控制字、控制資源
18、分配、引腳定義以及設計出控制字、控制碼等。包括如下內容:碼等。包括如下內容:1 1設計時間控制字設計時間控制字2 2ROMROM資源分配資源分配3 3RAMRAM資源分配資源分配1 1設計時間控制字設計時間控制字 為了能在控制程序中識別出應在何時進行何種控制為了能在控制程序中識別出應在何時進行何種控制,時間控制字可采用如圖,時間控制字可采用如圖A.2所示的格式。所示的格式。圖圖A.2 時間控制字的格式時間控制字的格式 每個控制字的字長為每個控制字的字長為4個字節,以每兩個控制字為一個字節,以每兩個控制字為一組,每組需要占用組,每組需要占用8個個ROM存儲單元。控制字中的時、分存儲單元。控制字中
19、的時、分、秒為需要做出控制啟動或關閉裝置的時間點,控、秒為需要做出控制啟動或關閉裝置的時間點,控制碼則用于指示該做何種控制。制碼則用于指示該做何種控制。 由于在硬件設計時,選取單片機的由于在硬件設計時,選取單片機的P1.0用作用作電鈴的開啟和關閉,電鈴的開啟和關閉,P1.4用作廣播的開啟和關閉用作廣播的開啟和關閉,電鈴和廣播用發光二極管代替,而且使用低電,電鈴和廣播用發光二極管代替,而且使用低電平驅動,所以只要從平驅動,所以只要從P1.0引腳輸出低電平引腳輸出低電平0,就可,就可以開啟電鈴;輸出高電平以開啟電鈴;輸出高電平1,就可以關閉電鈴。,就可以關閉電鈴。 于是啟動電鈴和關閉電鈴的控制碼可
20、以分別于是啟動電鈴和關閉電鈴的控制碼可以分別設計為設計為FEH1111 1110B和和FFH1111 1111B)。同理,啟動廣播設備和關閉廣播設備的控制)。同理,啟動廣播設備和關閉廣播設備的控制碼可以分別設計為碼可以分別設計為EFH1110 1111B和和FFH1111 1111B),如表),如表A.2所示。所示。 控制碼的設計控制碼的設計表表A.2A.2控制碼的定義及其功能控制碼的定義及其功能 控制碼 功能 對應的輸出引腳與狀態 FEH 啟動電鈴 P1.0 = 0 EFH 啟動廣播 P1.4 = 0 FFH 關閉裝置 P1.0 = 1,P1.4 = 1 00H 數據區結束 根據作息時間表見
21、表根據作息時間表見表A.1的具體控制時間的具體控制時間,按圖,按圖A.2的格式和表的格式和表A.2的定義,編出所有的控制的定義,編出所有的控制字,并依照控制時間的先后為順序依次存入字,并依照控制時間的先后為順序依次存入ROM的數據區中,構成由控制字組成的控制字碼表,控的數據區中,構成由控制字組成的控制字碼表,控制碼為制碼為00H時,表示數據區的結束。時,表示數據區的結束。時間控制字的設計時間控制字的設計例如:例如: “6:20 起起 床,啟動電鈴持續響鈴床,啟動電鈴持續響鈴15秒秒的時間控制字為:的時間控制字為:FE062000 FF062015 2 2ROMROM資源分配資源分配 由于單片機
22、初始或復位時,程序計數器由于單片機初始或復位時,程序計數器PC的內的內容為容為0000H,所以,所以ROM的的0000H應作為主程序的入應作為主程序的入口地址。又由于項目中需用到外部中斷口地址。又由于項目中需用到外部中斷0、外部中斷、外部中斷1和和T0中斷,因而,需要將中斷,因而,需要將ROM的的0003H、0013H和和000BH留作相應的中斷入口。留作相應的中斷入口。 為此,主程序安排跳轉到為此,主程序安排跳轉到ROM的的0050H以后的以后的單元。數據區的入口地址,可以在整個程序編寫完單元。數據區的入口地址,可以在整個程序編寫完成,并進行匯編后,再視已經占用多少成,并進行匯編后,再視已經
23、占用多少ROM單元而單元而定。對于本應用項目,估計不含數據區的程序空間定。對于本應用項目,估計不含數據區的程序空間小于小于1000H,因而,將數據區的起始地址設定為,因而,將數據區的起始地址設定為1010H。如若不然,再根據實際情況加以調整。如若不然,再根據實際情況加以調整。 2 2ROMROM資源分配資源分配 對于本應用項目,估計不含數據區對于本應用項目,估計不含數據區的程序空間小于的程序空間小于1000H,因而,將數據,因而,將數據區的起始地址設定為區的起始地址設定為1010H。如若不然。如若不然,再根據實際情況加以調整。按照表,再根據實際情況加以調整。按照表A.1及表及表A.2編寫出的數
24、據表以及數據區在編寫出的數據表以及數據區在ROM中所分配的地址如表中所分配的地址如表A.3所示。所示。 表表A.3A.3時間控制字數據區時間控制字數據區 地 址 數 據 ( 時 間 控 制 字 ) 1010H 1017H FE 062000 FF062015 1018H 101FH E F062500 FF064000 1020H 1027H FE 072000 FF072010 1028H 102FH FE 074000 FF074015 1030H 1037H FE 075000 FF075010 1038H 103FH FE 083500 FF083510 1040H 1047H FE
25、084500 FF084510 1048H 104FH FE 093000 FF093010 1050H 1057H E F093500 FF094000 1058H 105FH FE 094500 FF094515 1060H 1067H FE 095000 FF095010 1068H 106FH FE 103500 FF103510 1070H 1077H FE 104500 FF104510 1078H 107FH FE 113000 FF113010 1080H 1087H FE 141500 FF141515 表表A.3A.3時間控制字數據區續)時間控制字數據區續) 地 址 數 據
26、 ( 時 間 控 制 字 ) 1088H 108FH E F141600 FF142000 1090H 1097H FE 142500 FF142515 1098H 109FH FE 143000 FF143010 10A 0H 10A 7H FE 151500 FF151510 10A 8H 10A FH FE 152500 FF152510 10B 0H 10B 7H FE 161000 FF161010 10B 8H 10B FH FE 162000 FF162010 10C 0H 10C 7H FE 170500 FF170510 10C 8H 10C FH FE 171500 FF1
27、71510 10D 0H 10D 7H FE 180000 FF180010 10D 8H 10D FH FE 192000 FF192015 10E 0H 10E 7H FE 193000 FF193010 10E 8H 10E FH FE 213000 FF213010 10F0H 10F7H FE 230000 FF230015 10F8H 00( 數 據 區 結 束 ) 3 3RAMRAM資源分配資源分配 程序中所用到的單片機片內程序中所用到的單片機片內RAM數據存儲單數據存儲單元分配如下。元分配如下。26H: 0.1s計數單元計數單元 27H: 秒計數單元秒計數單元 28H: 分計數
28、單元分計數單元 29H: 時計數單元時計數單元2AH: 計時單元指針初值計時單元指針初值 2BH: 存放秒計數基制存放秒計數基制2CH: 存放分計數基制存放分計數基制 2DH: 存放時計數基制存放時計數基制2EH: 數據區地址暫存單元數據區地址暫存單元 3AH: 控制碼存儲單元控制碼存儲單元3BH、3CH: 數據暫存單元數據暫存單元 4AH4FH: 顯示緩沖區顯示緩沖區5AH: 堆棧棧底堆棧棧底A.3.2 程序流程圖設計程序流程圖設計1 1主程序流程圖主程序流程圖2 2中斷服務程序流程圖中斷服務程序流程圖3 3顯示子程序流程圖顯示子程序流程圖4 4T0T0中斷服務程序流程圖中斷服務程序流程圖5
29、 5控制子程序流程圖控制子程序流程圖1 1主程序流程圖主程序流程圖圖圖A.3 主程序流程圖主程序流程圖 主程序中主要完成的初始化工作主程序中主要完成的初始化工作(18155初始化:主要是向初始化:主要是向8155寫入命令字,寫入命令字,將將8155的的A口、口、B口的工作方式設置為基本口的工作方式設置為基本I/O口口,并將它們均設置為輸出,因而,需要寫入,并將它們均設置為輸出,因而,需要寫入8155的命令字為的命令字為03H。(2設置堆棧指針:單片機堆棧指針的初始值設置堆棧指針:單片機堆棧指針的初始值為為07H,如果不作改變,堆棧將占用第,如果不作改變,堆棧將占用第1組工作組工作寄存器的區域,
30、為了方便編程時使用該組工作寄寄存器的區域,為了方便編程時使用該組工作寄存器,并且避免與位尋址區和已經分配了的存器,并且避免與位尋址區和已經分配了的RAM單元沖突,決定將堆棧指針初始值設為單元沖突,決定將堆棧指針初始值設為5AH。(3設置定時器工作方式:在實時時鐘設計設置定時器工作方式:在實時時鐘設計時,已選定定時器時,已選定定時器T0為工作方式為工作方式1,所以應寫,所以應寫入定時器工作方式寄存器入定時器工作方式寄存器TMOD的控制字為的控制字為01H。(4設置定時器初值及啟動定時器:根據前設置定時器初值及啟動定時器:根據前面的分析,定時器初值為面的分析,定時器初值為3CB0H。在主程序。在主
31、程序中只要將中只要將3CH送入送入TH0,B0H送入送入TL0則可。則可。送完定時初值后,只要令定時器控制寄存器送完定時初值后,只要令定時器控制寄存器TCON中的中的TR0位為位為1,便可以啟動,便可以啟動T0工作。工作。主程序中主要完成的初始化工作主程序中主要完成的初始化工作(5設置中斷允許方式:在本項目中用到設置中斷允許方式:在本項目中用到T0中斷和中斷和 、 這兩個外部中斷,為了這兩個外部中斷,為了開放它們,應向中斷允許控制寄存器寫入的開放它們,應向中斷允許控制寄存器寫入的控制字為控制字為87H。 、 用于通過用于通過“校時按鍵和校時按鍵和“校分按鍵進行時間調校,因而,中斷方式校分按鍵進
32、行時間調校,因而,中斷方式應選擇為電平觸發方式。由于位于中斷標志應選擇為電平觸發方式。由于位于中斷標志寄存器寄存器TCON中的中斷觸發方式控制位的缺省中的中斷觸發方式控制位的缺省值為值為0,即已選擇為電平觸發方式,所以無需,即已選擇為電平觸發方式,所以無需改變改變TCON的內容。的內容。INT0INT1INT0INT1主程序中主要完成的初始化工作主程序中主要完成的初始化工作、圖圖A.4 A.4 、 中斷服務程序流程圖中斷服務程序流程圖INT0INT12 2 中斷服務程序流程圖中斷服務程序流程圖設計中斷服務程序的注意事項:設計中斷服務程序的注意事項:(1 1由于由于 、 的中斷入口地的中斷入口地
33、址分別為址分別為0003H0003H和和0013H0013H,它們之間的空,它們之間的空間無法放下相應的中斷服務程序,所以間無法放下相應的中斷服務程序,所以編程時需要在上述地址安排長轉移指令編程時需要在上述地址安排長轉移指令跳轉到各自的中斷服務程序實際存放地跳轉到各自的中斷服務程序實際存放地址。址。 INT0INT1(2進入中斷服務程序后,首先需要關中斷進入中斷服務程序后,首先需要關中斷,目的是保證用戶每按一次時間調校按鍵,相,目的是保證用戶每按一次時間調校按鍵,相應計時單元的計時值只遞增一次而不是多次。應計時單元的計時值只遞增一次而不是多次。這是因為這是因為 、 這兩個外部中斷的這兩個外部中
34、斷的中斷方式選擇為電平觸發方式,在此方式下,中斷方式選擇為電平觸發方式,在此方式下,CPU響應中斷后,如果外部中斷源不能及時響應中斷后,如果外部中斷源不能及時撤除它在撤除它在 或或 上的低電平,就會上的低電平,就會使相應中斷標志位使相應中斷標志位IE0或或IE1保持為保持為1,從而導,從而導致致CPU錯誤地重復響應中斷,因而,進入中錯誤地重復響應中斷,因而,進入中斷服務程序時,需要先暫時關閉中斷。斷服務程序時,需要先暫時關閉中斷。INT0INT0INT1INT1設計中斷服務程序的注意事項:設計中斷服務程序的注意事項:(3消除按鍵抖動的目的是為了準確識別消除按鍵抖動的目的是為了準確識別用戶的按鍵
35、動作,確認用戶按下并釋放按鍵用戶的按鍵動作,確認用戶按下并釋放按鍵后,才算是一次按鍵動作,如果用戶按住按后,才算是一次按鍵動作,如果用戶按住按鍵不放,就一直等待。由于鍵不放,就一直等待。由于“校時和校時和“校校分按鍵是與單片機的分按鍵是與單片機的P3.3和和P3.2引腳連接引腳連接的,所以編程時,可使用如下指令實現等待的,所以編程時,可使用如下指令實現等待按鍵釋放:按鍵釋放: JNB P3.3, $ 或或 JNB P3.2, $設計中斷服務程序的注意事項:設計中斷服務程序的注意事項:(4程序在完成對相應計時單元進行加程序在完成對相應計時單元進行加1或加或加至超過計時基制對相應的計時單元清至超過
36、計時基制對相應的計時單元清0的工作的工作后,及時調用顯示子程序的目的是使用戶能即后,及時調用顯示子程序的目的是使用戶能即時看到校時的結果。時看到校時的結果。(5程序在中斷返回前開中斷是為了把進入程序在中斷返回前開中斷是為了把進入中斷服務程序時,關中斷了的中斷服務程序時,關中斷了的 或或 中中斷重新打開,為響應用戶下一次的時間調校做斷重新打開,為響應用戶下一次的時間調校做準備。準備。INT0INT1設計中斷服務程序的注意事項:設計中斷服務程序的注意事項:3顯示子程序流程圖顯示子程序流程圖 圖圖A.5 顯示子程序流程圖顯示子程序流程圖 設計顯示子程序需要考慮的問題設計顯示子程序需要考慮的問題 (1
37、需要顯示的實時時間數值,存放需要顯示的實時時間數值,存放在在29H時計數單元)、時計數單元)、28H分計數單分計數單元和元和27H秒計數單元秒計數單元3個計時單元中個計時單元中,每個計時單元為兩個,每個計時單元為兩個BCD數。為了便于數。為了便于顯示時讀取這些數據,顯示子程序首先需顯示時讀取這些數據,顯示子程序首先需要將要將3個計時單元中的個計時單元中的BCD數逐一分開,數逐一分開,并按時、分、秒的順序分別存入并按時、分、秒的順序分別存入4AH4FH共共6個單元中的顯示緩沖區中。個單元中的顯示緩沖區中。 (2本項目使用共陰極本項目使用共陰極LED數數碼管,為了將待顯示的時間值轉換碼管,為了將待
38、顯示的時間值轉換為相應的字形碼,需要事先在為相應的字形碼,需要事先在ROM中建立好一個共陰中建立好一個共陰LED字形碼表。字形碼表。從顯示緩沖區讀出的待顯示數據通從顯示緩沖區讀出的待顯示數據通過查表指令轉換成字形碼。過查表指令轉換成字形碼。設計顯示子程序需要考慮的問題設計顯示子程序需要考慮的問題 (3采用動態顯示方式。顯示一遍時、分采用動態顯示方式。顯示一遍時、分、秒的過程是:按、秒的過程是:按4AH4FH的順序逐一讀出的順序逐一讀出顯示緩沖區中的數據,轉換成字形碼后,逐個顯示緩沖區中的數據,轉換成字形碼后,逐個從從8155的字形口的字形口B口送至口送至LED的字形碼輸的字形碼輸入腳,每送出一
39、個字形碼便從入腳,每送出一個字形碼便從8155的字位口的字位口A口送出相應的字位碼,于是被字位碼選口送出相應的字位碼,于是被字位碼選中的中的LED就會顯示出相應的字形。字位碼設計就會顯示出相應的字形。字位碼設計成從左到右輪流選中成從左到右輪流選中LED數碼管,這樣便可以數碼管,這樣便可以將時、分、秒從左到右顯示在將時、分、秒從左到右顯示在6個個LED數碼管數碼管上。每個的顯示控制過程相同,因而,在程序上。每個的顯示控制過程相同,因而,在程序中采用循環結構來編程。中采用循環結構來編程。設計顯示子程序需要考慮的問題設計顯示子程序需要考慮的問題 (4由于各個由于各個LED數碼管是逐位輪數碼管是逐位輪
40、流點亮的,如果輪流點亮的過程太快,流點亮的,如果輪流點亮的過程太快,人眼無法看清。所以每點亮一個人眼無法看清。所以每點亮一個LED數數碼管,都需要適當延時一小段時間才行碼管,都需要適當延時一小段時間才行,程序中選擇的延時時間為,程序中選擇的延時時間為1ms。 設計顯示子程序需要考慮的問題設計顯示子程序需要考慮的問題 (5考慮到考慮到6個個LED的字形碼輸入腳的字形碼輸入腳是一一對應并接在一起的,所以當第是一一對應并接在一起的,所以當第1個個LED顯示完后,在送第二個字形碼但尚顯示完后,在送第二個字形碼但尚未送出第二個字位碼時,會導致該字形未送出第二個字位碼時,會導致該字形碼在第碼在第1個個LE
41、D上顯示。為了避免發生這上顯示。為了避免發生這種現象,保證顯示的準確性,在每個種現象,保證顯示的準確性,在每個LED顯示之前都進行顯示之前都進行“關顯示操作。關顯示操作。設計顯示子程序需要考慮的問題設計顯示子程序需要考慮的問題4 4T0T0中斷服務程序流程圖中斷服務程序流程圖圖圖A.6 T0A.6 T0中斷服務程序流程圖中斷服務程序流程圖 設計設計T0中斷服務程序注意事項中斷服務程序注意事項 (1進入進入T0中斷服務程序時必須首先進行現場保護中斷服務程序時必須首先進行現場保護,對主程序中的累加器和有關的工作寄存器的內容加以,對主程序中的累加器和有關的工作寄存器的內容加以保護,在中斷返回時,再予
42、以恢復。保護,在中斷返回時,再予以恢復。 (2由于由于T0中斷服務程序是因為中斷服務程序是因為T0產生計數溢出才產生計數溢出才執行的,因而,為了保證執行的,因而,為了保證T0能不斷產生能不斷產生0.1S基準時間基準時間信號,每次進入信號,每次進入T0中斷服務程序時,都要重裝中斷服務程序時,都要重裝T0的定的定時初值,而且這時重裝的應是修正過的初值,如前所述時初值,而且這時重裝的應是修正過的初值,如前所述,在本項目中,此值為,在本項目中,此值為3CBDH。 (3每當計時每當計時1s,就要調用一次控制子程序,以實,就要調用一次控制子程序,以實現每隔現每隔1s就通過控制子程序查看一遍由時間控制字組就
43、通過控制子程序查看一遍由時間控制字組成的數據區,使打鈴控制誤差不會超過成的數據區,使打鈴控制誤差不會超過1s。5 5控制子程序流程圖控制子程序流程圖 圖圖A.7 A.7 控制子程序流程圖控制子程序流程圖 控制子程控制子程序的主要功能序的主要功能是每調用一次是每調用一次,就查看一遍,就查看一遍存放時間控制存放時間控制字的數據區,字的數據區,檢查每個控制檢查每個控制字所設置的時字所設置的時間是否與現行間是否與現行時間相同,若時間相同,若相同,則通過相同,則通過P1口輸出控制口輸出控制信號。信號。A.3.3 源程序設計源程序設計 起始程序起始程序 主程序主程序 中斷服務程序中斷服務程序 中斷服務程序
44、中斷服務程序 顯示子程序顯示子程序 T0中斷服務程序中斷服務程序 控制子程序控制子程序 字形碼表字形碼表 控制字碼碼表控制字碼碼表INT0INT1起始程序起始程序; 起始程序:起始程序:; 編號編號 指令指令 注釋注釋1ORG0000H2LJMPMAIN ; 轉主程序轉主程序3ORG 0003H4LJMP BREAK0; 轉轉 中斷中斷5 ORG 000BH6 LJMP CLOCK ; 轉定時器轉定時器T0中斷中斷7ORG 0013H8LJMP BREAK1; 轉轉 中斷中斷 注:其中的編號是為了便于書中引用說明而加,注:其中的編號是為了便于書中引用說明而加,編譯源程序時應把它們去掉。編譯源程
45、序時應把它們去掉。INT0INT1主程序主程序; 主程序:主程序:9ORG0050H10 MAIN: MOVA, #03H; 8155初始化命令字初始化命令字11MOV DPTR, #8000H; 8155命令口地址命令口地址12MOVX DPTR, A; 向向8155寫入命令字寫入命令字13MOV SP, #5AH; 棧底移至棧底移至5AH14MOV 2BH, #60H ; 秒計數基制秒計數基制15MOV 2CH, #60H ; 分計數基制分計數基制16MOV 2DH, #24H ; 時計數基制時計數基制17MOV TMOD, #01H ; 定時器工作方式定時器工作方式118MOV TH0,
46、 #3CH ; 置置T0初值初值19MOV TL0, #0B0H20MOV IE, #87H; 允許中斷允許中斷21 SETB TR0 ; 啟動定時器啟動定時器T022 LOOP: LCALL DISP; 調用顯示子程序調用顯示子程序23 LJMP LOOP ; 循環循環 中斷服務程序中斷服務程序; 中斷服務程序中斷服務程序: 24 BREAK0:CLR EX0; 關閉關閉 中斷中斷25 JNB P3.2, $ ; 消除按鍵抖動消除按鍵抖動, 等待按鍵釋放等待按鍵釋放26 INC 28H ; 分單元加分單元加127 MOV A, 28H ; 十進制調整十進制調整28 ADD A, #00H29
47、 DA A30 MOV 28H, A31 SUBB A, #60H; 不等于計數基制轉不等于計數基制轉NEXT132 JC NEXT133 MOV 28H, #00H ; 相等相等, 分單元清分單元清034 NEXT1: LCALL DISP ; 調用顯示子程序調用顯示子程序35 SETB EX0; 開放開放 中斷中斷36 RETI ; 中斷返回中斷返回INT0INT0INT0INT0 中斷服務程序中斷服務程序; 中斷服務程序中斷服務程序: 37 BREAKl: CLREXl ; 關閉關閉 中斷中斷38JNB P3.3, $ ; 消除按鍵抖動消除按鍵抖動, 等待按鍵釋放等待按鍵釋放39INC
48、29H ; 時單元加時單元加140MOV A, 29H ; 十進制調整十進制調整41ADD A, #00H42DA A43MOV 29H, A44SUBB A, #24H ; 不等于計數基制轉不等于計數基制轉NEXT245JC NEXT246MOV 29H, #00H ; 相等相等, 時單元清時單元清047 NEXT2: LCALL DISP ; 調用顯示子程序調用顯示子程序48SETB EXl; 開放開放 中斷中斷49RETI ; 中斷返回中斷返回INT1INT1INT1INT1顯示子程序顯示子程序; 顯示子程序顯示子程序: 50 DISP:MOV R0, #4FH; 準備向緩沖區放數準備向
49、緩沖區放數51MOV A, 27H; 取秒值取秒值52ACALL PUTT; 放秒值放秒值53MOV A, 28H; 取分值取分值54ACALL PUTT; 放分值放分值55MOV A, 29H ; 取小時值取小時值56ACALL PUTT; 放小時值放小時值57MOV R0, #4AH; 指向顯示緩沖區首地址指向顯示緩沖區首地址58MOV R2, #0DFH ; 從左邊第一位開始顯示從左邊第一位開始顯示59 DISP1: MOV DPTR, #8002H ; 字形口地址字形口地址60MOV A, #00H ; 熄滅碼熄滅碼61MOVX DPTR, A ; 關顯示關顯示顯示子程序顯示子程序60
50、MOV A, #00H ; 熄滅碼熄滅碼61MOVX DPTR, A ; 關顯示關顯示62MOV A, R0 ; 取顯示緩沖區中的數取顯示緩沖區中的數63MOV DPTR, #SEGTAB ; 指向字形碼表首指向字形碼表首64MOVC A, A+DPTR; 查表查表, 找字形碼找字形碼65MOV DPTR, #8002H; 字形口地址字形口地址66MOVX DPTR, A; 送出字形碼送出字形碼67MOV A, R2; 取字位碼取字位碼68MOV DPTR, #8001H; 字位口地址字位口地址69MOVXDPTR, A; 顯示一位數字顯示一位數字70MOV R3, #00H; 計數延時初值計
51、數延時初值71 DISP2: DJNZ R3, DISP2; 延時一段時間延時一段時間1ms)顯示子程序顯示子程序71 DISP2: DJNZ R3, DISP2; 延時一段時間延時一段時間1ms)72INCR0; 修改顯示緩沖區指針修改顯示緩沖區指針73RRA; 為顯示下一位做準備為顯示下一位做準備74MOV R2, A; 存字位碼存字位碼75JBACC.7, DISPl; 不到最后一位不到最后一位, 則繼續則繼續76RET; 顯示完顯示完6位位, 返回返回77 PUTT: MOV Rl, A; 暫存暫存78ACALL PUTTl; 低低4位先放入緩沖區位先放入緩沖區79MOV A, R1;
52、 取出原數取出原數80SWAP A; 高高4位放入低位放入低4位中位中81 PUTT1: ANL A, #0FH ; 屏蔽高屏蔽高4位位82MOV R0, A; 放進顯示緩沖區放進顯示緩沖區83DECR0 ; 緩沖區地址指針減緩沖區地址指針減184RET T0中斷服務程序中斷服務程序; T0中斷服務程序中斷服務程序: 85 CLOCK: PUSH PSW; 保護現場保護現場86PUSH ACC87SETB RS0; 選擇工作寄存器組選擇工作寄存器組188MOV TH0, #3CH ; 重裝定時器重裝定時器T0初值初值89MOV TL0, #0BDH90INC 26H; 0.1s單元加單元加19
53、1MOV A, 26H ; 取取0.1s單元內容單元內容92CJNE A, #0AH, DONE1 ; 不等于不等于10, 轉轉DONE193MOV 26H, #00H ; 等于等于10, 則清則清094MOV R0, #27H ; 指向秒計數單元指向秒計數單元95MOV R1, #2BH ; 指向秒計數基制單元指向秒計數基制單元96MOV R3, #03H; 循環循環3次次(秒、分、時秒、分、時)97 CLOCK1:MOV A, R0; 取計時單元的值取計時單元的值T0中斷服務程序中斷服務程序97 CLOCK1:MOV A, R0; 取計時單元的值取計時單元的值98ADD A, #01H;
54、計時單元加計時單元加199DA A; 十進制調整十進制調整100MOV R0, A; 送回計時單元送回計時單元101MOV 3BH, Rl; 取計時基制取計時基制102CJNE A, 3BH, NEXT3 ; 不等于計時基制不等于計時基制, 轉出轉出103MOV R0, #00H; 相等相等, 則計時單元清則計時單元清0104INC R0; 計時單元指針加計時單元指針加1105INC R1; 時間基制單元指針加時間基制單元指針加1106DJNZ R3, CLOCK1 ; 秒、分、時共秒、分、時共3次循環次循環107 NEXT3: ACALL CTRL; 調用控制子程序調用控制子程序108 DO
55、NE1: POPACC; 恢復現場恢復現場109POP PSW110RETI; 中斷返回中斷返回 控制子程序控制子程序; 控制子程序控制子程序111 CTRL: MOV DPTR, #100CH; 指向控制字碼表首址前指向控制字碼表首址前4單元單元112MOV 2EH, DPL; 暫存指針低暫存指針低8位地址位地址113 CTRL1: MOV DPL, 2EH; 取出指針低取出指針低8位地址位地址114MOV R3, #04H; 控制字碼表指針加控制字碼表指針加1次數次數115 CTRL2: INC DPTR; 控制字碼表指針加控制字碼表指針加1116DJNZ R3, CTRL2; 指針指向下
56、一個控制字指針指向下一個控制字117MOV 2EH, DPL; 暫存指針低暫存指針低8位位118MOV R3, #03H; 核對時、分、秒共核對時、分、秒共3次次119CLRA120MOVC A, A+DPTR ; 取控制碼取控制碼121JZ DONE2; 若若A0, 則數據區結束則數據區結束122MOV 3AH, A ; 保護控制碼保護控制碼123MOV R1, #2AH; 設置計時單元指針設置計時單元指針124 CTRL3: INC DPTR ; 修改控制字碼表指針修改控制字碼表指針控制子程序控制子程序124 CTRL3: INC DPTR ; 修改控制字碼表指針修改控制字碼表指針125D
57、EC R1 ; 修改計時單元指針修改計時單元指針126CLR A; 準備查表準備查表127MOVC A, A+DPTR ; 讀取控制字時間值讀取控制字時間值128MOV 3CH, A ; 暫存暫存129MOV A, R1; 讀取計時單元時間值讀取計時單元時間值130CJNE A, 3CH, CTRL1; 比較時間值是否相等比較時間值是否相等131DJNZ R3, CTRL3; 3次循環次循環132MOV A, 3AH ; 3次比較相等次比較相等, 恢復控制碼恢復控制碼133MOV P1, A ; 由由Pl口輸出口輸出, 執行控制執行控制134 DONE2: RET; 子程序返回子程序返回字形碼
58、表字形碼表; 字形碼表字形碼表: SEGTAB: DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH136 DB 07H, 7FH, 6FH控制字碼碼表控制字碼碼表; 控制字碼表控制字碼表: 137ORG 1010H138DB0FEH, 06H, 20H, 00H, 0FFH, 06H, 20H, 15H139DB0EFH, 06H, 25H, 00H, 0FFH, 06H, 40H, 00H140DB0FEH, 07H, 20H, 00H, 0FFH, 07H, 20H, 10H141DB0FEH, 07H, 40H, 00H, 0FFH, 07H, 40H, 15H1
59、42DB0FEH, 07H, 50H, 00H, 0FFH, 07H, 50H, 10H143DB0FEH, 08H, 35H, 00H, 0FFH, 08H, 35H, 10H144DB0FEH, 08H, 45H, 00H, 0FFH, 08H, 45H, 10H145DB0FEH, 09H, 30H, 00H, 0FFH, 09H, 30H, 10H146DB0EFH, 09H, 35H, 00H, 0FFH, 09H, 40H, 00H控制字碼碼表控制字碼碼表146DB0EFH, 09H, 35H, 00H, 0FFH, 09H, 40H, 00H147DB0FEH, 09H, 45H
60、, 00H, 0FFH, 09H, 45H, 15H148DB0FEH, 09H, 50H, 00H, 0FFH, 09H, 50H, 10H149DB0FEH, 10H, 35H, 00H, 0FFH, 10H, 35H, 10H150DB0FEH, 10H, 45H, 00H, 0FFH, 10H, 45H, 10H151DB0FEH, 11H, 30H, 00H, 0FFH, 11H, 30H, 10H152DB0FEH, 14H, 15H, 00H, 0FFH, 14H, 15H, 15H153DB0EFH, 14H, 16H, 00H, 0FFH, 14H, 20H, 00H154D
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 計算機二級Python模塊擴展使用試題及答案
- SQL編寫規范與最佳實踐試題及答案
- 計算機二級Python考試全方位應對策略試題及答案
- 2025年計算機二級MySQL高效復習試題及答案
- 學習漢語的常見誤區分析試題及答案
- 漢語學習者的心理需求分析試題及答案
- 財務管理實戰思維試題及答案
- Msoffice考試經典試題及答案復習法
- 財務技能提升方法試題及答案
- 法學概論課本重要章節的試題及答案
- 二人相聲小品搞笑臺詞二人最搞笑的相聲臺詞
- 家具維保服務投標方案
- 交通事故自救、互救基本常識(新版)
- 環保管家服務投標方案(技術標)
- 樁頂地系梁專項施工方案
- 電氣工程概論-肖登明
- 民間個人借款還清證明范本
- 膠粘劑制造業行業營銷方案
- 【江淮汽車公司財務現狀及其盈利能力問題分析(10000字論文)】
- Sibelius使用教程教材說明
- 柔力球-華中師范大學中國大學mooc課后章節答案期末考試題庫2023年
評論
0/150
提交評論