版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、附錄附錄A 一個(gè)單片機(jī)的應(yīng)用項(xiàng)目一個(gè)單片機(jī)的應(yīng)用項(xiàng)目 自動(dòng)打鈴機(jī)的設(shè)計(jì)自動(dòng)打鈴機(jī)的設(shè)計(jì) A.1 項(xiàng)目任務(wù)項(xiàng)目任務(wù)A.2 硬件設(shè)計(jì)硬件設(shè)計(jì)A.3 軟件設(shè)計(jì)軟件設(shè)計(jì)A.4 項(xiàng)目實(shí)驗(yàn)項(xiàng)目實(shí)驗(yàn)A.5 項(xiàng)目仿真項(xiàng)目仿真A.1 項(xiàng)目任務(wù)項(xiàng)目任務(wù)A.1.0 設(shè)計(jì)要求設(shè)計(jì)要求A.1.1 基本要求基本要求A.1.2 強(qiáng)化要求強(qiáng)化要求A.1.0 設(shè)計(jì)要求設(shè)計(jì)要求 項(xiàng)目的任務(wù)是利用單片機(jī)作為核心控制電路,設(shè)計(jì)一項(xiàng)目的任務(wù)是利用單片機(jī)作為核心控制電路,設(shè)計(jì)一個(gè)自動(dòng)打鈴機(jī)?;疽笕缦拢簜€(gè)自動(dòng)打鈴機(jī)?;疽笕缦拢海?要求所設(shè)計(jì)的單片機(jī)自動(dòng)打鈴機(jī)具有準(zhǔn)確的計(jì)時(shí)功要求所設(shè)計(jì)的單片機(jī)自動(dòng)打鈴機(jī)具有準(zhǔn)確的計(jì)時(shí)功能,能夠像電子
2、鐘一樣按時(shí)、分、秒格式顯示實(shí)時(shí)時(shí)間。能,能夠像電子鐘一樣按時(shí)、分、秒格式顯示實(shí)時(shí)時(shí)間。(2能根據(jù)用戶要求的時(shí)間點(diǎn)自動(dòng)按時(shí)打鈴,該項(xiàng)目以能根據(jù)用戶要求的時(shí)間點(diǎn)自動(dòng)按時(shí)打鈴,該項(xiàng)目以大學(xué)的自動(dòng)打鈴控制為例,除要求自動(dòng)打鈴?fù)猓€要大學(xué)的自動(dòng)打鈴控制為例,除要求自動(dòng)打鈴?fù)?,還要求能自動(dòng)播放音樂和早操、課間操節(jié)目。具體控制時(shí)間如求能自動(dòng)播放音樂和早操、課間操節(jié)目。具體控制時(shí)間如作息時(shí)間表所示見表作息時(shí)間表所示見表A.1)。)。(3設(shè)置兩個(gè)時(shí)間調(diào)校校時(shí)和校分按鍵,分別用來設(shè)置兩個(gè)時(shí)間調(diào)校校時(shí)和校分按鍵,分別用來調(diào)校時(shí)和分,以保證自動(dòng)打鈴機(jī)的時(shí)間與標(biāo)準(zhǔn)時(shí)間相符。調(diào)校時(shí)和分,以保證自動(dòng)打鈴機(jī)的時(shí)間與標(biāo)準(zhǔn)時(shí)間相
3、符。 表表A.1A.1 大學(xué)作息時(shí)間表大學(xué)作息時(shí)間表 時(shí) 間 作 息 時(shí) 間 作 息 6:20 起 床 12:0014:15 午 休 6:256:40 播放音樂、早操 14:1614:20 播放音樂 6:407:20 洗漱、早餐 14:2514:30 預(yù) 備 7:207:40 早 讀 14:3015:15 上課:第五節(jié) 7:407:50 預(yù) 備 15:2516:10 第六節(jié) 7:508:35 上課:第一節(jié) 16:2017:05 第七節(jié) 8:459:30 第二節(jié) 17:1518:00 第八節(jié) 9:359:40 課間操 18:0018:30 晚 餐 9:459:50 預(yù) 備 19:2019:30
4、預(yù) 備 9:5010:35 上課:第三節(jié) 19:3021:30 晚自習(xí) 10:4511:30 第四節(jié) 23:00 熄 燈 11:3012:00 午 餐 A.1.1 基本要求基本要求 如果讀者只是把這個(gè)項(xiàng)目作為單如果讀者只是把這個(gè)項(xiàng)目作為單片機(jī)課程的綜合實(shí)訓(xùn)的話,只要求能片機(jī)課程的綜合實(shí)訓(xùn)的話,只要求能在單片機(jī)開發(fā)裝置或單片機(jī)實(shí)驗(yàn)箱在單片機(jī)開發(fā)裝置或單片機(jī)實(shí)驗(yàn)箱上按設(shè)計(jì)要求成功完成實(shí)驗(yàn)則可。上按設(shè)計(jì)要求成功完成實(shí)驗(yàn)則可。對于沒有單片機(jī)開發(fā)設(shè)備的讀者,只對于沒有單片機(jī)開發(fā)設(shè)備的讀者,只要求能利用仿真軟件要求能利用仿真軟件Proteus成成功完成仿真即可。功完成仿真即可。A.1.2 強(qiáng)化要求強(qiáng)化要求
5、 如果讀者有興趣把這個(gè)項(xiàng)目做成一個(gè)實(shí)際樣如果讀者有興趣把這個(gè)項(xiàng)目做成一個(gè)實(shí)際樣機(jī)的話,則要求讀者在能成功完成實(shí)訓(xùn)或仿真調(diào)機(jī)的話,則要求讀者在能成功完成實(shí)訓(xùn)或仿真調(diào)試的基礎(chǔ)上,再增加電源電路、實(shí)際的驅(qū)動(dòng)電路試的基礎(chǔ)上,再增加電源電路、實(shí)際的驅(qū)動(dòng)電路、機(jī)殼等,設(shè)計(jì)出印刷電路板、機(jī)殼等,設(shè)計(jì)出印刷電路板PCB,并完成,并完成PBC的制作和元器件安裝,用帶有的制作和元器件安裝,用帶有FPROM且與且與MCS-51系列兼容的單片機(jī)如系列兼容的單片機(jī)如AT89C52代替實(shí)驗(yàn)用代替實(shí)驗(yàn)用的單片機(jī),并用編程器將源程序?qū)懭雴纹瑱C(jī)的的單片機(jī),并用編程器將源程序?qū)懭雴纹瑱C(jī)的FPROM中,與其他元件一起安裝到電路板上
6、,中,與其他元件一起安裝到電路板上,配上機(jī)殼,構(gòu)成獨(dú)立的自動(dòng)打鈴機(jī),達(dá)到可以投配上機(jī)殼,構(gòu)成獨(dú)立的自動(dòng)打鈴機(jī),達(dá)到可以投入實(shí)際應(yīng)用的目的。入實(shí)際應(yīng)用的目的。A.2 硬件設(shè)計(jì)硬件設(shè)計(jì)A.2.1 總體設(shè)計(jì)總體設(shè)計(jì)A.2.2 實(shí)時(shí)時(shí)鐘電路設(shè)計(jì)實(shí)時(shí)時(shí)鐘電路設(shè)計(jì)A.2.3 顯示電路設(shè)計(jì)顯示電路設(shè)計(jì)A.2.4 控制電路設(shè)計(jì)控制電路設(shè)計(jì)A.2.1 總體設(shè)計(jì)總體設(shè)計(jì) 首先需要利用單片機(jī)設(shè)計(jì)一個(gè)實(shí)時(shí)時(shí)鐘,首先需要利用單片機(jī)設(shè)計(jì)一個(gè)實(shí)時(shí)時(shí)鐘,然后根據(jù)控制時(shí)間即作息時(shí)間建立一個(gè)然后根據(jù)控制時(shí)間即作息時(shí)間建立一個(gè)數(shù)據(jù)區(qū)作為控制字碼表,存放在數(shù)據(jù)區(qū)作為控制字碼表,存放在ROM中。在中。在此基礎(chǔ)上,設(shè)計(jì)控制程序,在時(shí)鐘每
7、計(jì)時(shí)此基礎(chǔ)上,設(shè)計(jì)控制程序,在時(shí)鐘每計(jì)時(shí)1秒秒鐘時(shí)查看一遍數(shù)據(jù)區(qū),檢查數(shù)據(jù)區(qū)中所設(shè)置鐘時(shí)查看一遍數(shù)據(jù)區(qū),檢查數(shù)據(jù)區(qū)中所設(shè)置的時(shí)間是否與需要控制打鈴或廣播的時(shí)間點(diǎn)的時(shí)間是否與需要控制打鈴或廣播的時(shí)間點(diǎn)相同,若相同,則通過單片機(jī)的相同,若相同,則通過單片機(jī)的I/O端口輸出端口輸出控制信號??刂菩盘?。 A.2.2 實(shí)時(shí)時(shí)鐘電路設(shè)計(jì)實(shí)時(shí)時(shí)鐘電路設(shè)計(jì) 選擇通過選擇通過MCS-51內(nèi)部定時(shí)器內(nèi)部定時(shí)器T0 產(chǎn)生中斷來產(chǎn)生中斷來實(shí)現(xiàn)計(jì)時(shí)。設(shè)定定時(shí)器實(shí)現(xiàn)計(jì)時(shí)。設(shè)定定時(shí)器T0工作在定時(shí)工作方式工作在定時(shí)工作方式1,每,每100ms0.1s產(chǎn)生一次中斷,每產(chǎn)生一次產(chǎn)生一次中斷,每產(chǎn)生一次T0中斷,就利用軟件將基準(zhǔn)
8、中斷,就利用軟件將基準(zhǔn)0.1s時(shí)間計(jì)數(shù)單元進(jìn)時(shí)間計(jì)數(shù)單元進(jìn)行累加計(jì)數(shù)一次。當(dāng)定時(shí)器行累加計(jì)數(shù)一次。當(dāng)定時(shí)器T0產(chǎn)生產(chǎn)生10次中斷時(shí),次中斷時(shí),就獲得了就獲得了1s信號,這時(shí)秒計(jì)數(shù)單元加信號,這時(shí)秒計(jì)數(shù)單元加1,同理,同理,由軟件對分計(jì)數(shù)單元和時(shí)計(jì)數(shù)單元進(jìn)行時(shí)間計(jì)數(shù)由軟件對分計(jì)數(shù)單元和時(shí)計(jì)數(shù)單元進(jìn)行時(shí)間計(jì)數(shù),從而得到秒、分、時(shí)的時(shí)間值,并通過,從而得到秒、分、時(shí)的時(shí)間值,并通過LED數(shù)數(shù)碼管顯示電路顯示出來。碼管顯示電路顯示出來。定時(shí)器初值的確定定時(shí)器初值的確定 選擇單片機(jī)的晶振頻率為選擇單片機(jī)的晶振頻率為fosc = 6MHz,則時(shí)鐘周期為,則時(shí)鐘周期為1/6s,機(jī)器周期為,機(jī)器周期為2s。所
9、以定時(shí)器。所以定時(shí)器T0工作在方式工作在方式1下產(chǎn)生下產(chǎn)生0.1s的定時(shí),所需的定時(shí)器初值為的定時(shí),所需的定時(shí)器初值為3CB0H,為,為了確保了確保T0能準(zhǔn)確定時(shí)能準(zhǔn)確定時(shí)0.1s,在,在T0中斷服務(wù)中斷服務(wù)程序中重裝定時(shí)器初值時(shí),修正為程序中重裝定時(shí)器初值時(shí),修正為3CBDH,在運(yùn)行中可根據(jù)誤差情況進(jìn)一步調(diào)整。,在運(yùn)行中可根據(jù)誤差情況進(jìn)一步調(diào)整。 A.2.3 顯示電路設(shè)計(jì)顯示電路設(shè)計(jì) 為了按時(shí)、分、秒的格式顯示實(shí)時(shí)時(shí)間為了按時(shí)、分、秒的格式顯示實(shí)時(shí)時(shí)間,需要使用,需要使用6只只LED數(shù)碼顯示管本項(xiàng)目采數(shù)碼顯示管本項(xiàng)目采用共陰極用共陰極LED數(shù)碼管)。為了減少硬件開數(shù)碼管)。為了減少硬件開銷,
10、提高系統(tǒng)可靠性和降低成本,選擇銷,提高系統(tǒng)可靠性和降低成本,選擇LED數(shù)碼管的顯示方式為動(dòng)態(tài)掃描顯示。數(shù)碼管的顯示方式為動(dòng)態(tài)掃描顯示。由于驅(qū)動(dòng)由于驅(qū)動(dòng)LED數(shù)碼管需要一個(gè)字形口和一數(shù)碼管需要一個(gè)字形口和一個(gè)字位口,為此,采用并行個(gè)字位口,為此,采用并行I/O接口芯片接口芯片8155對單片機(jī)進(jìn)行對單片機(jī)進(jìn)行I/O口擴(kuò)展??跀U(kuò)展。 選擇選擇8155的的B口作為字形口,將口作為字形口,將B口經(jīng)口經(jīng)74LS07和所有和所有LED的的a、b、c、d、e、f、g、h引線相連;引線相連;8155的的A口作為字位口,口作為字位口,其中的其中的6個(gè)引腳經(jīng)個(gè)引腳經(jīng)74LS07分別和分別和6個(gè)個(gè)LED的的控制端控制
11、端G相連。單片機(jī)工作時(shí)通過相連。單片機(jī)工作時(shí)通過8155的的B口輸出字形碼,再通過口輸出字形碼,再通過A口輸出字位碼以控口輸出字位碼以控制被選中的一個(gè)制被選中的一個(gè)LED點(diǎn)亮。當(dāng)與時(shí)、分、點(diǎn)亮。當(dāng)與時(shí)、分、秒對應(yīng)的字形碼輪流輸出時(shí),相應(yīng)的字位秒對應(yīng)的字形碼輪流輸出時(shí),相應(yīng)的字位碼從左到右輪流選中碼從左到右輪流選中LED,打鈴機(jī)的實(shí)時(shí),打鈴機(jī)的實(shí)時(shí)時(shí)間就可以逐次在時(shí)間就可以逐次在LED上動(dòng)態(tài)顯示。上動(dòng)態(tài)顯示。 A.2.4 控制電路設(shè)計(jì)控制電路設(shè)計(jì)1 1時(shí)間調(diào)校電路時(shí)間調(diào)校電路2 2輸出控制電路輸出控制電路3 3自動(dòng)打鈴機(jī)硬件接線圖自動(dòng)打鈴機(jī)硬件接線圖4 4自動(dòng)打鈴機(jī)硬件接線圖說明自動(dòng)打鈴機(jī)硬件接
12、線圖說明5 5圖圖A.1A.1中中81558155的端口地址分析的端口地址分析1 1時(shí)間調(diào)校電路時(shí)間調(diào)校電路 選擇采用外部中斷請求來進(jìn)行時(shí)間調(diào)校選擇采用外部中斷請求來進(jìn)行時(shí)間調(diào)校。將。將“校時(shí)按鍵和校時(shí)按鍵和“校分按鍵分別接到校分按鍵分別接到單片機(jī)的單片機(jī)的P3.3和和P3.2引腳,每當(dāng)用引腳,每當(dāng)用戶按下一次時(shí)間調(diào)校按鍵,便會(huì)產(chǎn)生一次外戶按下一次時(shí)間調(diào)校按鍵,便會(huì)產(chǎn)生一次外部中斷請求,單片機(jī)響應(yīng)中斷后,在中斷服部中斷請求,單片機(jī)響應(yīng)中斷后,在中斷服務(wù)程序中對相應(yīng)的計(jì)時(shí)單元進(jìn)行加務(wù)程序中對相應(yīng)的計(jì)時(shí)單元進(jìn)行加1。若加。若加至超過計(jì)時(shí)基制,通過程序控制計(jì)時(shí)單元清至超過計(jì)時(shí)基制,通過程序控制計(jì)時(shí)單
13、元清0,這樣只用加,這樣只用加1控制就可以進(jìn)行校時(shí)??刂凭涂梢赃M(jìn)行校時(shí)。 2輸出控制電路輸出控制電路 選取單片機(jī)的選取單片機(jī)的P1.0引腳用于連接電鈴驅(qū)動(dòng)引腳用于連接電鈴驅(qū)動(dòng)電路,電路,P1.4引腳用于連接廣播設(shè)備驅(qū)動(dòng)電路。引腳用于連接廣播設(shè)備驅(qū)動(dòng)電路。在項(xiàng)目實(shí)驗(yàn)調(diào)試階段,電鈴和廣播設(shè)備用發(fā)光在項(xiàng)目實(shí)驗(yàn)調(diào)試階段,電鈴和廣播設(shè)備用發(fā)光二極管代替,將發(fā)光二極管的負(fù)端與輸出引腳二極管代替,將發(fā)光二極管的負(fù)端與輸出引腳連接,使用低電平驅(qū)動(dòng)。連接,使用低電平驅(qū)動(dòng)。 連接連接P1.0的發(fā)光二極管綠色亮表示打的發(fā)光二極管綠色亮表示打鈴,滅則表示不打鈴。鈴,滅則表示不打鈴。 連接連接P1.4的發(fā)光二極管紅色亮
14、表示打的發(fā)光二極管紅色亮表示打開廣播設(shè)備,滅則表示停止廣播。開廣播設(shè)備,滅則表示停止廣播。 3 自動(dòng)打鈴機(jī)硬件接線圖自動(dòng)打鈴機(jī)硬件接線圖 圖圖A.1 A.1 自動(dòng)打鈴機(jī)硬件接線圖自動(dòng)打鈴機(jī)硬件接線圖 4 自動(dòng)打鈴機(jī)硬件接線圖說明自動(dòng)打鈴機(jī)硬件接線圖說明 在圖在圖A.1中,所用的單片機(jī)型號為中,所用的單片機(jī)型號為8031,因?yàn)椴桑驗(yàn)椴捎脝纹瑱C(jī)開發(fā)實(shí)驗(yàn)裝置進(jìn)行試驗(yàn)時(shí),所加載的源程序用單片機(jī)開發(fā)實(shí)驗(yàn)裝置進(jìn)行試驗(yàn)時(shí),所加載的源程序是存放在實(shí)驗(yàn)裝置的是存放在實(shí)驗(yàn)裝置的RAM存儲器中的,無需用到單存儲器中的,無需用到單片機(jī)的片內(nèi)片機(jī)的片內(nèi)ROM,所以在項(xiàng)目設(shè)計(jì)實(shí)驗(yàn)階段只要使,所以在項(xiàng)目設(shè)計(jì)實(shí)驗(yàn)階段只要使
15、用無用無ROM型的型的8031單片機(jī)即可。單片機(jī)即可。 實(shí)驗(yàn)成功后,需要做成實(shí)用的打鈴機(jī)時(shí),若仍采實(shí)驗(yàn)成功后,需要做成實(shí)用的打鈴機(jī)時(shí),若仍采用用8031,則需要給,則需要給8031擴(kuò)展片外擴(kuò)展片外ROM,現(xiàn)在由于具,現(xiàn)在由于具有片內(nèi)有片內(nèi)ROMEPROM、E2PROM或或FPEROM的的單片機(jī)價(jià)格不高,因而,實(shí)際應(yīng)用時(shí),通常直接選用單片機(jī)價(jià)格不高,因而,實(shí)際應(yīng)用時(shí),通常直接選用與與MCS-51兼容的具有片內(nèi)兼容的具有片內(nèi)FPROM的單片機(jī)如的單片機(jī)如AT89C51、AT89C52等)。等)。 5 圖圖A.1中中8155的端口地址分析的端口地址分析 當(dāng)當(dāng)IO/= 1時(shí),單片機(jī)選擇時(shí),單片機(jī)選擇8
16、155作為作為I/O口,口,8155的的端口地址為:端口地址為:8000H 命令命令/狀態(tài)口狀態(tài)口8001H A口字位口)口字位口)8002H B口字形口)口字形口)8003H C口未使用)口未使用)8004H 定時(shí)器定時(shí)器/計(jì)數(shù)器低字節(jié)未使用)計(jì)數(shù)器低字節(jié)未使用)8005H 定時(shí)器定時(shí)器/計(jì)數(shù)器高字節(jié)未使用)計(jì)數(shù)器高字節(jié)未使用)8008HFFFDH 8155重疊重疊I/O地址地址5 圖圖A.1中中8155的端口地址分析的端口地址分析 當(dāng)當(dāng)IO/= 0時(shí),單片機(jī)選擇時(shí),單片機(jī)選擇8155中的中的RAM存存儲器工作,儲器工作,RAM的地址為:的地址為:0000H00FFH 8155基本基本RAM
17、地址地址0100H7FFFH 8155重疊重疊RAM地址地址 在該應(yīng)用項(xiàng)目中,只用到在該應(yīng)用項(xiàng)目中,只用到8155其中的其中的命令命令/狀態(tài)口、狀態(tài)口、A口和口和B口。未使用口。未使用8155中中的的RAM存儲器。存儲器。A.3 軟件設(shè)計(jì)軟件設(shè)計(jì)A.3.1 程序的總體設(shè)計(jì)程序的總體設(shè)計(jì)A.3.2 程序流程圖設(shè)計(jì)程序流程圖設(shè)計(jì)A.3.3 源程序設(shè)計(jì)源程序設(shè)計(jì)A.3.1 程序的總體設(shè)計(jì)程序的總體設(shè)計(jì) 程序的總體設(shè)計(jì)主要是根據(jù)通過硬件設(shè)計(jì)所程序的總體設(shè)計(jì)主要是根據(jù)通過硬件設(shè)計(jì)所確定的硬件電路以及編程需要,進(jìn)行單片機(jī)的確定的硬件電路以及編程需要,進(jìn)行單片機(jī)的資源分配、引腳定義以及設(shè)計(jì)出控制字、控制資源
18、分配、引腳定義以及設(shè)計(jì)出控制字、控制碼等。包括如下內(nèi)容:碼等。包括如下內(nèi)容:1 1設(shè)計(jì)時(shí)間控制字設(shè)計(jì)時(shí)間控制字2 2ROMROM資源分配資源分配3 3RAMRAM資源分配資源分配1 1設(shè)計(jì)時(shí)間控制字設(shè)計(jì)時(shí)間控制字 為了能在控制程序中識別出應(yīng)在何時(shí)進(jìn)行何種控制為了能在控制程序中識別出應(yīng)在何時(shí)進(jìn)行何種控制,時(shí)間控制字可采用如圖,時(shí)間控制字可采用如圖A.2所示的格式。所示的格式。圖圖A.2 時(shí)間控制字的格式時(shí)間控制字的格式 每個(gè)控制字的字長為每個(gè)控制字的字長為4個(gè)字節(jié),以每兩個(gè)控制字為一個(gè)字節(jié),以每兩個(gè)控制字為一組,每組需要占用組,每組需要占用8個(gè)個(gè)ROM存儲單元??刂谱种械臅r(shí)、分存儲單元??刂谱种?/p>
19、的時(shí)、分、秒為需要做出控制啟動(dòng)或關(guān)閉裝置的時(shí)間點(diǎn),控、秒為需要做出控制啟動(dòng)或關(guān)閉裝置的時(shí)間點(diǎn),控制碼則用于指示該做何種控制。制碼則用于指示該做何種控制。 由于在硬件設(shè)計(jì)時(shí),選取單片機(jī)的由于在硬件設(shè)計(jì)時(shí),選取單片機(jī)的P1.0用作用作電鈴的開啟和關(guān)閉,電鈴的開啟和關(guān)閉,P1.4用作廣播的開啟和關(guān)閉用作廣播的開啟和關(guān)閉,電鈴和廣播用發(fā)光二極管代替,而且使用低電,電鈴和廣播用發(fā)光二極管代替,而且使用低電平驅(qū)動(dòng),所以只要從平驅(qū)動(dòng),所以只要從P1.0引腳輸出低電平引腳輸出低電平0,就可,就可以開啟電鈴;輸出高電平以開啟電鈴;輸出高電平1,就可以關(guān)閉電鈴。,就可以關(guān)閉電鈴。 于是啟動(dòng)電鈴和關(guān)閉電鈴的控制碼可
20、以分別于是啟動(dòng)電鈴和關(guān)閉電鈴的控制碼可以分別設(shè)計(jì)為設(shè)計(jì)為FEH1111 1110B和和FFH1111 1111B)。同理,啟動(dòng)廣播設(shè)備和關(guān)閉廣播設(shè)備的控制)。同理,啟動(dòng)廣播設(shè)備和關(guān)閉廣播設(shè)備的控制碼可以分別設(shè)計(jì)為碼可以分別設(shè)計(jì)為EFH1110 1111B和和FFH1111 1111B),如表),如表A.2所示。所示。 控制碼的設(shè)計(jì)控制碼的設(shè)計(jì)表表A.2A.2控制碼的定義及其功能控制碼的定義及其功能 控制碼 功能 對應(yīng)的輸出引腳與狀態(tài) FEH 啟動(dòng)電鈴 P1.0 = 0 EFH 啟動(dòng)廣播 P1.4 = 0 FFH 關(guān)閉裝置 P1.0 = 1,P1.4 = 1 00H 數(shù)據(jù)區(qū)結(jié)束 根據(jù)作息時(shí)間表見
21、表根據(jù)作息時(shí)間表見表A.1的具體控制時(shí)間的具體控制時(shí)間,按圖,按圖A.2的格式和表的格式和表A.2的定義,編出所有的控制的定義,編出所有的控制字,并依照控制時(shí)間的先后為順序依次存入字,并依照控制時(shí)間的先后為順序依次存入ROM的數(shù)據(jù)區(qū)中,構(gòu)成由控制字組成的控制字碼表,控的數(shù)據(jù)區(qū)中,構(gòu)成由控制字組成的控制字碼表,控制碼為制碼為00H時(shí),表示數(shù)據(jù)區(qū)的結(jié)束。時(shí),表示數(shù)據(jù)區(qū)的結(jié)束。時(shí)間控制字的設(shè)計(jì)時(shí)間控制字的設(shè)計(jì)例如:例如: “6:20 起起 床,啟動(dòng)電鈴持續(xù)響鈴床,啟動(dòng)電鈴持續(xù)響鈴15秒秒的時(shí)間控制字為:的時(shí)間控制字為:FE062000 FF062015 2 2ROMROM資源分配資源分配 由于單片機(jī)
22、初始或復(fù)位時(shí),程序計(jì)數(shù)器由于單片機(jī)初始或復(fù)位時(shí),程序計(jì)數(shù)器PC的內(nèi)的內(nèi)容為容為0000H,所以,所以ROM的的0000H應(yīng)作為主程序的入應(yīng)作為主程序的入口地址。又由于項(xiàng)目中需用到外部中斷口地址。又由于項(xiàng)目中需用到外部中斷0、外部中斷、外部中斷1和和T0中斷,因而,需要將中斷,因而,需要將ROM的的0003H、0013H和和000BH留作相應(yīng)的中斷入口。留作相應(yīng)的中斷入口。 為此,主程序安排跳轉(zhuǎn)到為此,主程序安排跳轉(zhuǎn)到ROM的的0050H以后的以后的單元。數(shù)據(jù)區(qū)的入口地址,可以在整個(gè)程序編寫完單元。數(shù)據(jù)區(qū)的入口地址,可以在整個(gè)程序編寫完成,并進(jìn)行匯編后,再視已經(jīng)占用多少成,并進(jìn)行匯編后,再視已經(jīng)
23、占用多少ROM單元而單元而定。對于本應(yīng)用項(xiàng)目,估計(jì)不含數(shù)據(jù)區(qū)的程序空間定。對于本應(yīng)用項(xiàng)目,估計(jì)不含數(shù)據(jù)區(qū)的程序空間小于小于1000H,因而,將數(shù)據(jù)區(qū)的起始地址設(shè)定為,因而,將數(shù)據(jù)區(qū)的起始地址設(shè)定為1010H。如若不然,再根據(jù)實(shí)際情況加以調(diào)整。如若不然,再根據(jù)實(shí)際情況加以調(diào)整。 2 2ROMROM資源分配資源分配 對于本應(yīng)用項(xiàng)目,估計(jì)不含數(shù)據(jù)區(qū)對于本應(yīng)用項(xiàng)目,估計(jì)不含數(shù)據(jù)區(qū)的程序空間小于的程序空間小于1000H,因而,將數(shù)據(jù),因而,將數(shù)據(jù)區(qū)的起始地址設(shè)定為區(qū)的起始地址設(shè)定為1010H。如若不然。如若不然,再根據(jù)實(shí)際情況加以調(diào)整。按照表,再根據(jù)實(shí)際情況加以調(diào)整。按照表A.1及表及表A.2編寫出的數(shù)
24、據(jù)表以及數(shù)據(jù)區(qū)在編寫出的數(shù)據(jù)表以及數(shù)據(jù)區(qū)在ROM中所分配的地址如表中所分配的地址如表A.3所示。所示。 表表A.3A.3時(shí)間控制字?jǐn)?shù)據(jù)區(qū)時(shí)間控制字?jǐn)?shù)據(jù)區(qū) 地 址 數(shù) 據(jù) ( 時(shí) 間 控 制 字 ) 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時(shí)間控制字?jǐn)?shù)據(jù)區(qū)續(xù))時(shí)間控制字?jǐn)?shù)據(jù)區(qū)續(xù)) 地 址 數(shù) 據(jù)
26、 ( 時(shí) 間 控 制 字 ) 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( 數(shù) 據(jù) 區(qū) 結(jié) 束 ) 3 3RAMRAM資源分配資源分配 程序中所用到的單片機(jī)片內(nèi)程序中所用到的單片機(jī)片內(nèi)RAM數(shù)據(jù)存儲單數(shù)據(jù)存儲單元分配如下。元分配如下。26H: 0.1s計(jì)數(shù)單元計(jì)數(shù)單元 27H: 秒計(jì)數(shù)單元秒計(jì)數(shù)單元 28H: 分計(jì)數(shù)
28、單元分計(jì)數(shù)單元 29H: 時(shí)計(jì)數(shù)單元時(shí)計(jì)數(shù)單元2AH: 計(jì)時(shí)單元指針初值計(jì)時(shí)單元指針初值 2BH: 存放秒計(jì)數(shù)基制存放秒計(jì)數(shù)基制2CH: 存放分計(jì)數(shù)基制存放分計(jì)數(shù)基制 2DH: 存放時(shí)計(jì)數(shù)基制存放時(shí)計(jì)數(shù)基制2EH: 數(shù)據(jù)區(qū)地址暫存單元數(shù)據(jù)區(qū)地址暫存單元 3AH: 控制碼存儲單元控制碼存儲單元3BH、3CH: 數(shù)據(jù)暫存單元數(shù)據(jù)暫存單元 4AH4FH: 顯示緩沖區(qū)顯示緩沖區(qū)5AH: 堆棧棧底堆棧棧底A.3.2 程序流程圖設(shè)計(jì)程序流程圖設(shè)計(jì)1 1主程序流程圖主程序流程圖2 2中斷服務(wù)程序流程圖中斷服務(wù)程序流程圖3 3顯示子程序流程圖顯示子程序流程圖4 4T0T0中斷服務(wù)程序流程圖中斷服務(wù)程序流程圖5
29、 5控制子程序流程圖控制子程序流程圖1 1主程序流程圖主程序流程圖圖圖A.3 主程序流程圖主程序流程圖 主程序中主要完成的初始化工作主程序中主要完成的初始化工作(18155初始化:主要是向初始化:主要是向8155寫入命令字,寫入命令字,將將8155的的A口、口、B口的工作方式設(shè)置為基本口的工作方式設(shè)置為基本I/O口口,并將它們均設(shè)置為輸出,因而,需要寫入,并將它們均設(shè)置為輸出,因而,需要寫入8155的命令字為的命令字為03H。(2設(shè)置堆棧指針:單片機(jī)堆棧指針的初始值設(shè)置堆棧指針:單片機(jī)堆棧指針的初始值為為07H,如果不作改變,堆棧將占用第,如果不作改變,堆棧將占用第1組工作組工作寄存器的區(qū)域,
30、為了方便編程時(shí)使用該組工作寄寄存器的區(qū)域,為了方便編程時(shí)使用該組工作寄存器,并且避免與位尋址區(qū)和已經(jīng)分配了的存器,并且避免與位尋址區(qū)和已經(jīng)分配了的RAM單元沖突,決定將堆棧指針初始值設(shè)為單元沖突,決定將堆棧指針初始值設(shè)為5AH。(3設(shè)置定時(shí)器工作方式:在實(shí)時(shí)時(shí)鐘設(shè)計(jì)設(shè)置定時(shí)器工作方式:在實(shí)時(shí)時(shí)鐘設(shè)計(jì)時(shí),已選定定時(shí)器時(shí),已選定定時(shí)器T0為工作方式為工作方式1,所以應(yīng)寫,所以應(yīng)寫入定時(shí)器工作方式寄存器入定時(shí)器工作方式寄存器TMOD的控制字為的控制字為01H。(4設(shè)置定時(shí)器初值及啟動(dòng)定時(shí)器:根據(jù)前設(shè)置定時(shí)器初值及啟動(dòng)定時(shí)器:根據(jù)前面的分析,定時(shí)器初值為面的分析,定時(shí)器初值為3CB0H。在主程序。在主
31、程序中只要將中只要將3CH送入送入TH0,B0H送入送入TL0則可。則可。送完定時(shí)初值后,只要令定時(shí)器控制寄存器送完定時(shí)初值后,只要令定時(shí)器控制寄存器TCON中的中的TR0位為位為1,便可以啟動(dòng),便可以啟動(dòng)T0工作。工作。主程序中主要完成的初始化工作主程序中主要完成的初始化工作(5設(shè)置中斷允許方式:在本項(xiàng)目中用到設(shè)置中斷允許方式:在本項(xiàng)目中用到T0中斷和中斷和 、 這兩個(gè)外部中斷,為了這兩個(gè)外部中斷,為了開放它們,應(yīng)向中斷允許控制寄存器寫入的開放它們,應(yīng)向中斷允許控制寄存器寫入的控制字為控制字為87H。 、 用于通過用于通過“校時(shí)按鍵和校時(shí)按鍵和“校分按鍵進(jìn)行時(shí)間調(diào)校,因而,中斷方式校分按鍵進(jìn)
32、行時(shí)間調(diào)校,因而,中斷方式應(yīng)選擇為電平觸發(fā)方式。由于位于中斷標(biāo)志應(yīng)選擇為電平觸發(fā)方式。由于位于中斷標(biāo)志寄存器寄存器TCON中的中斷觸發(fā)方式控制位的缺省中的中斷觸發(fā)方式控制位的缺省值為值為0,即已選擇為電平觸發(fā)方式,所以無需,即已選擇為電平觸發(fā)方式,所以無需改變改變TCON的內(nèi)容。的內(nèi)容。INT0INT1INT0INT1主程序中主要完成的初始化工作主程序中主要完成的初始化工作、圖圖A.4 A.4 、 中斷服務(wù)程序流程圖中斷服務(wù)程序流程圖INT0INT12 2 中斷服務(wù)程序流程圖中斷服務(wù)程序流程圖設(shè)計(jì)中斷服務(wù)程序的注意事項(xiàng):設(shè)計(jì)中斷服務(wù)程序的注意事項(xiàng):(1 1由于由于 、 的中斷入口地的中斷入口地
33、址分別為址分別為0003H0003H和和0013H0013H,它們之間的空,它們之間的空間無法放下相應(yīng)的中斷服務(wù)程序,所以間無法放下相應(yīng)的中斷服務(wù)程序,所以編程時(shí)需要在上述地址安排長轉(zhuǎn)移指令編程時(shí)需要在上述地址安排長轉(zhuǎn)移指令跳轉(zhuǎn)到各自的中斷服務(wù)程序?qū)嶋H存放地跳轉(zhuǎn)到各自的中斷服務(wù)程序?qū)嶋H存放地址。址。 INT0INT1(2進(jìn)入中斷服務(wù)程序后,首先需要關(guān)中斷進(jìn)入中斷服務(wù)程序后,首先需要關(guān)中斷,目的是保證用戶每按一次時(shí)間調(diào)校按鍵,相,目的是保證用戶每按一次時(shí)間調(diào)校按鍵,相應(yīng)計(jì)時(shí)單元的計(jì)時(shí)值只遞增一次而不是多次。應(yīng)計(jì)時(shí)單元的計(jì)時(shí)值只遞增一次而不是多次。這是因?yàn)檫@是因?yàn)?、 這兩個(gè)外部中斷的這兩個(gè)外部中
34、斷的中斷方式選擇為電平觸發(fā)方式,在此方式下,中斷方式選擇為電平觸發(fā)方式,在此方式下,CPU響應(yīng)中斷后,如果外部中斷源不能及時(shí)響應(yīng)中斷后,如果外部中斷源不能及時(shí)撤除它在撤除它在 或或 上的低電平,就會(huì)上的低電平,就會(huì)使相應(yīng)中斷標(biāo)志位使相應(yīng)中斷標(biāo)志位IE0或或IE1保持為保持為1,從而導(dǎo),從而導(dǎo)致致CPU錯(cuò)誤地重復(fù)響應(yīng)中斷,因而,進(jìn)入中錯(cuò)誤地重復(fù)響應(yīng)中斷,因而,進(jìn)入中斷服務(wù)程序時(shí),需要先暫時(shí)關(guān)閉中斷。斷服務(wù)程序時(shí),需要先暫時(shí)關(guān)閉中斷。INT0INT0INT1INT1設(shè)計(jì)中斷服務(wù)程序的注意事項(xiàng):設(shè)計(jì)中斷服務(wù)程序的注意事項(xiàng):(3消除按鍵抖動(dòng)的目的是為了準(zhǔn)確識別消除按鍵抖動(dòng)的目的是為了準(zhǔn)確識別用戶的按鍵
35、動(dòng)作,確認(rèn)用戶按下并釋放按鍵用戶的按鍵動(dòng)作,確認(rèn)用戶按下并釋放按鍵后,才算是一次按鍵動(dòng)作,如果用戶按住按后,才算是一次按鍵動(dòng)作,如果用戶按住按鍵不放,就一直等待。由于鍵不放,就一直等待。由于“校時(shí)和校時(shí)和“校校分按鍵是與單片機(jī)的分按鍵是與單片機(jī)的P3.3和和P3.2引腳連接引腳連接的,所以編程時(shí),可使用如下指令實(shí)現(xiàn)等待的,所以編程時(shí),可使用如下指令實(shí)現(xiàn)等待按鍵釋放:按鍵釋放: JNB P3.3, $ 或或 JNB P3.2, $設(shè)計(jì)中斷服務(wù)程序的注意事項(xiàng):設(shè)計(jì)中斷服務(wù)程序的注意事項(xiàng):(4程序在完成對相應(yīng)計(jì)時(shí)單元進(jìn)行加程序在完成對相應(yīng)計(jì)時(shí)單元進(jìn)行加1或加或加至超過計(jì)時(shí)基制對相應(yīng)的計(jì)時(shí)單元清至超過
36、計(jì)時(shí)基制對相應(yīng)的計(jì)時(shí)單元清0的工作的工作后,及時(shí)調(diào)用顯示子程序的目的是使用戶能即后,及時(shí)調(diào)用顯示子程序的目的是使用戶能即時(shí)看到校時(shí)的結(jié)果。時(shí)看到校時(shí)的結(jié)果。(5程序在中斷返回前開中斷是為了把進(jìn)入程序在中斷返回前開中斷是為了把進(jìn)入中斷服務(wù)程序時(shí),關(guān)中斷了的中斷服務(wù)程序時(shí),關(guān)中斷了的 或或 中中斷重新打開,為響應(yīng)用戶下一次的時(shí)間調(diào)校做斷重新打開,為響應(yīng)用戶下一次的時(shí)間調(diào)校做準(zhǔn)備。準(zhǔn)備。INT0INT1設(shè)計(jì)中斷服務(wù)程序的注意事項(xiàng):設(shè)計(jì)中斷服務(wù)程序的注意事項(xiàng):3顯示子程序流程圖顯示子程序流程圖 圖圖A.5 顯示子程序流程圖顯示子程序流程圖 設(shè)計(jì)顯示子程序需要考慮的問題設(shè)計(jì)顯示子程序需要考慮的問題 (1
37、需要顯示的實(shí)時(shí)時(shí)間數(shù)值,存放需要顯示的實(shí)時(shí)時(shí)間數(shù)值,存放在在29H時(shí)計(jì)數(shù)單元)、時(shí)計(jì)數(shù)單元)、28H分計(jì)數(shù)單分計(jì)數(shù)單元和元和27H秒計(jì)數(shù)單元秒計(jì)數(shù)單元3個(gè)計(jì)時(shí)單元中個(gè)計(jì)時(shí)單元中,每個(gè)計(jì)時(shí)單元為兩個(gè),每個(gè)計(jì)時(shí)單元為兩個(gè)BCD數(shù)。為了便于數(shù)。為了便于顯示時(shí)讀取這些數(shù)據(jù),顯示子程序首先需顯示時(shí)讀取這些數(shù)據(jù),顯示子程序首先需要將要將3個(gè)計(jì)時(shí)單元中的個(gè)計(jì)時(shí)單元中的BCD數(shù)逐一分開,數(shù)逐一分開,并按時(shí)、分、秒的順序分別存入并按時(shí)、分、秒的順序分別存入4AH4FH共共6個(gè)單元中的顯示緩沖區(qū)中。個(gè)單元中的顯示緩沖區(qū)中。 (2本項(xiàng)目使用共陰極本項(xiàng)目使用共陰極LED數(shù)數(shù)碼管,為了將待顯示的時(shí)間值轉(zhuǎn)換碼管,為了將待
38、顯示的時(shí)間值轉(zhuǎn)換為相應(yīng)的字形碼,需要事先在為相應(yīng)的字形碼,需要事先在ROM中建立好一個(gè)共陰中建立好一個(gè)共陰LED字形碼表。字形碼表。從顯示緩沖區(qū)讀出的待顯示數(shù)據(jù)通從顯示緩沖區(qū)讀出的待顯示數(shù)據(jù)通過查表指令轉(zhuǎn)換成字形碼。過查表指令轉(zhuǎn)換成字形碼。設(shè)計(jì)顯示子程序需要考慮的問題設(shè)計(jì)顯示子程序需要考慮的問題 (3采用動(dòng)態(tài)顯示方式。顯示一遍時(shí)、分采用動(dòng)態(tài)顯示方式。顯示一遍時(shí)、分、秒的過程是:按、秒的過程是:按4AH4FH的順序逐一讀出的順序逐一讀出顯示緩沖區(qū)中的數(shù)據(jù),轉(zhuǎn)換成字形碼后,逐個(gè)顯示緩沖區(qū)中的數(shù)據(jù),轉(zhuǎn)換成字形碼后,逐個(gè)從從8155的字形口的字形口B口送至口送至LED的字形碼輸?shù)淖中未a輸入腳,每送出一
39、個(gè)字形碼便從入腳,每送出一個(gè)字形碼便從8155的字位口的字位口A口送出相應(yīng)的字位碼,于是被字位碼選口送出相應(yīng)的字位碼,于是被字位碼選中的中的LED就會(huì)顯示出相應(yīng)的字形。字位碼設(shè)計(jì)就會(huì)顯示出相應(yīng)的字形。字位碼設(shè)計(jì)成從左到右輪流選中成從左到右輪流選中LED數(shù)碼管,這樣便可以數(shù)碼管,這樣便可以將時(shí)、分、秒從左到右顯示在將時(shí)、分、秒從左到右顯示在6個(gè)個(gè)LED數(shù)碼管數(shù)碼管上。每個(gè)的顯示控制過程相同,因而,在程序上。每個(gè)的顯示控制過程相同,因而,在程序中采用循環(huán)結(jié)構(gòu)來編程。中采用循環(huán)結(jié)構(gòu)來編程。設(shè)計(jì)顯示子程序需要考慮的問題設(shè)計(jì)顯示子程序需要考慮的問題 (4由于各個(gè)由于各個(gè)LED數(shù)碼管是逐位輪數(shù)碼管是逐位輪
40、流點(diǎn)亮的,如果輪流點(diǎn)亮的過程太快,流點(diǎn)亮的,如果輪流點(diǎn)亮的過程太快,人眼無法看清。所以每點(diǎn)亮一個(gè)人眼無法看清。所以每點(diǎn)亮一個(gè)LED數(shù)數(shù)碼管,都需要適當(dāng)延時(shí)一小段時(shí)間才行碼管,都需要適當(dāng)延時(shí)一小段時(shí)間才行,程序中選擇的延時(shí)時(shí)間為,程序中選擇的延時(shí)時(shí)間為1ms。 設(shè)計(jì)顯示子程序需要考慮的問題設(shè)計(jì)顯示子程序需要考慮的問題 (5考慮到考慮到6個(gè)個(gè)LED的字形碼輸入腳的字形碼輸入腳是一一對應(yīng)并接在一起的,所以當(dāng)?shù)谑且灰粚?yīng)并接在一起的,所以當(dāng)?shù)?個(gè)個(gè)LED顯示完后,在送第二個(gè)字形碼但尚顯示完后,在送第二個(gè)字形碼但尚未送出第二個(gè)字位碼時(shí),會(huì)導(dǎo)致該字形未送出第二個(gè)字位碼時(shí),會(huì)導(dǎo)致該字形碼在第碼在第1個(gè)個(gè)LE
41、D上顯示。為了避免發(fā)生這上顯示。為了避免發(fā)生這種現(xiàn)象,保證顯示的準(zhǔn)確性,在每個(gè)種現(xiàn)象,保證顯示的準(zhǔn)確性,在每個(gè)LED顯示之前都進(jìn)行顯示之前都進(jìn)行“關(guān)顯示操作。關(guān)顯示操作。設(shè)計(jì)顯示子程序需要考慮的問題設(shè)計(jì)顯示子程序需要考慮的問題4 4T0T0中斷服務(wù)程序流程圖中斷服務(wù)程序流程圖圖圖A.6 T0A.6 T0中斷服務(wù)程序流程圖中斷服務(wù)程序流程圖 設(shè)計(jì)設(shè)計(jì)T0中斷服務(wù)程序注意事項(xiàng)中斷服務(wù)程序注意事項(xiàng) (1進(jìn)入進(jìn)入T0中斷服務(wù)程序時(shí)必須首先進(jìn)行現(xiàn)場保護(hù)中斷服務(wù)程序時(shí)必須首先進(jìn)行現(xiàn)場保護(hù),對主程序中的累加器和有關(guān)的工作寄存器的內(nèi)容加以,對主程序中的累加器和有關(guān)的工作寄存器的內(nèi)容加以保護(hù),在中斷返回時(shí),再予
42、以恢復(fù)。保護(hù),在中斷返回時(shí),再予以恢復(fù)。 (2由于由于T0中斷服務(wù)程序是因?yàn)橹袛喾?wù)程序是因?yàn)門0產(chǎn)生計(jì)數(shù)溢出才產(chǎn)生計(jì)數(shù)溢出才執(zhí)行的,因而,為了保證執(zhí)行的,因而,為了保證T0能不斷產(chǎn)生能不斷產(chǎn)生0.1S基準(zhǔn)時(shí)間基準(zhǔn)時(shí)間信號,每次進(jìn)入信號,每次進(jìn)入T0中斷服務(wù)程序時(shí),都要重裝中斷服務(wù)程序時(shí),都要重裝T0的定的定時(shí)初值,而且這時(shí)重裝的應(yīng)是修正過的初值,如前所述時(shí)初值,而且這時(shí)重裝的應(yīng)是修正過的初值,如前所述,在本項(xiàng)目中,此值為,在本項(xiàng)目中,此值為3CBDH。 (3每當(dāng)計(jì)時(shí)每當(dāng)計(jì)時(shí)1s,就要調(diào)用一次控制子程序,以實(shí),就要調(diào)用一次控制子程序,以實(shí)現(xiàn)每隔現(xiàn)每隔1s就通過控制子程序查看一遍由時(shí)間控制字組就
43、通過控制子程序查看一遍由時(shí)間控制字組成的數(shù)據(jù)區(qū),使打鈴控制誤差不會(huì)超過成的數(shù)據(jù)區(qū),使打鈴控制誤差不會(huì)超過1s。5 5控制子程序流程圖控制子程序流程圖 圖圖A.7 A.7 控制子程序流程圖控制子程序流程圖 控制子程控制子程序的主要功能序的主要功能是每調(diào)用一次是每調(diào)用一次,就查看一遍,就查看一遍存放時(shí)間控制存放時(shí)間控制字的數(shù)據(jù)區(qū),字的數(shù)據(jù)區(qū),檢查每個(gè)控制檢查每個(gè)控制字所設(shè)置的時(shí)字所設(shè)置的時(shí)間是否與現(xiàn)行間是否與現(xiàn)行時(shí)間相同,若時(shí)間相同,若相同,則通過相同,則通過P1口輸出控制口輸出控制信號。信號。A.3.3 源程序設(shè)計(jì)源程序設(shè)計(jì) 起始程序起始程序 主程序主程序 中斷服務(wù)程序中斷服務(wù)程序 中斷服務(wù)程序
44、中斷服務(wù)程序 顯示子程序顯示子程序 T0中斷服務(wù)程序中斷服務(wù)程序 控制子程序控制子程序 字形碼表字形碼表 控制字碼碼表控制字碼碼表INT0INT1起始程序起始程序; 起始程序:起始程序:; 編號編號 指令指令 注釋注釋1ORG0000H2LJMPMAIN ; 轉(zhuǎn)主程序轉(zhuǎn)主程序3ORG 0003H4LJMP BREAK0; 轉(zhuǎn)轉(zhuǎn) 中斷中斷5 ORG 000BH6 LJMP CLOCK ; 轉(zhuǎn)定時(shí)器轉(zhuǎn)定時(shí)器T0中斷中斷7ORG 0013H8LJMP BREAK1; 轉(zhuǎn)轉(zhuǎn) 中斷中斷 注:其中的編號是為了便于書中引用說明而加,注:其中的編號是為了便于書中引用說明而加,編譯源程序時(shí)應(yīng)把它們?nèi)サ?。編譯源程
45、序時(shí)應(yīng)把它們?nèi)サ?。INT0INT1主程序主程序; 主程序:主程序:9ORG0050H10 MAIN: MOVA, #03H; 8155初始化命令字初始化命令字11MOV DPTR, #8000H; 8155命令口地址命令口地址12MOVX DPTR, A; 向向8155寫入命令字寫入命令字13MOV SP, #5AH; 棧底移至棧底移至5AH14MOV 2BH, #60H ; 秒計(jì)數(shù)基制秒計(jì)數(shù)基制15MOV 2CH, #60H ; 分計(jì)數(shù)基制分計(jì)數(shù)基制16MOV 2DH, #24H ; 時(shí)計(jì)數(shù)基制時(shí)計(jì)數(shù)基制17MOV TMOD, #01H ; 定時(shí)器工作方式定時(shí)器工作方式118MOV TH0,
46、 #3CH ; 置置T0初值初值19MOV TL0, #0B0H20MOV IE, #87H; 允許中斷允許中斷21 SETB TR0 ; 啟動(dòng)定時(shí)器啟動(dòng)定時(shí)器T022 LOOP: LCALL DISP; 調(diào)用顯示子程序調(diào)用顯示子程序23 LJMP LOOP ; 循環(huán)循環(huán) 中斷服務(wù)程序中斷服務(wù)程序; 中斷服務(wù)程序中斷服務(wù)程序: 24 BREAK0:CLR EX0; 關(guān)閉關(guān)閉 中斷中斷25 JNB P3.2, $ ; 消除按鍵抖動(dòng)消除按鍵抖動(dòng), 等待按鍵釋放等待按鍵釋放26 INC 28H ; 分單元加分單元加127 MOV A, 28H ; 十進(jìn)制調(diào)整十進(jìn)制調(diào)整28 ADD A, #00H29
47、 DA A30 MOV 28H, A31 SUBB A, #60H; 不等于計(jì)數(shù)基制轉(zhuǎn)不等于計(jì)數(shù)基制轉(zhuǎn)NEXT132 JC NEXT133 MOV 28H, #00H ; 相等相等, 分單元清分單元清034 NEXT1: LCALL DISP ; 調(diào)用顯示子程序調(diào)用顯示子程序35 SETB EX0; 開放開放 中斷中斷36 RETI ; 中斷返回中斷返回INT0INT0INT0INT0 中斷服務(wù)程序中斷服務(wù)程序; 中斷服務(wù)程序中斷服務(wù)程序: 37 BREAKl: CLREXl ; 關(guān)閉關(guān)閉 中斷中斷38JNB P3.3, $ ; 消除按鍵抖動(dòng)消除按鍵抖動(dòng), 等待按鍵釋放等待按鍵釋放39INC
48、29H ; 時(shí)單元加時(shí)單元加140MOV A, 29H ; 十進(jìn)制調(diào)整十進(jìn)制調(diào)整41ADD A, #00H42DA A43MOV 29H, A44SUBB A, #24H ; 不等于計(jì)數(shù)基制轉(zhuǎn)不等于計(jì)數(shù)基制轉(zhuǎn)NEXT245JC NEXT246MOV 29H, #00H ; 相等相等, 時(shí)單元清時(shí)單元清047 NEXT2: LCALL DISP ; 調(diào)用顯示子程序調(diào)用顯示子程序48SETB EXl; 開放開放 中斷中斷49RETI ; 中斷返回中斷返回INT1INT1INT1INT1顯示子程序顯示子程序; 顯示子程序顯示子程序: 50 DISP:MOV R0, #4FH; 準(zhǔn)備向緩沖區(qū)放數(shù)準(zhǔn)備向
49、緩沖區(qū)放數(shù)51MOV A, 27H; 取秒值取秒值52ACALL PUTT; 放秒值放秒值53MOV A, 28H; 取分值取分值54ACALL PUTT; 放分值放分值55MOV A, 29H ; 取小時(shí)值取小時(shí)值56ACALL PUTT; 放小時(shí)值放小時(shí)值57MOV R0, #4AH; 指向顯示緩沖區(qū)首地址指向顯示緩沖區(qū)首地址58MOV R2, #0DFH ; 從左邊第一位開始顯示從左邊第一位開始顯示59 DISP1: MOV DPTR, #8002H ; 字形口地址字形口地址60MOV A, #00H ; 熄滅碼熄滅碼61MOVX DPTR, A ; 關(guān)顯示關(guān)顯示顯示子程序顯示子程序60
50、MOV A, #00H ; 熄滅碼熄滅碼61MOVX DPTR, A ; 關(guān)顯示關(guān)顯示62MOV A, R0 ; 取顯示緩沖區(qū)中的數(shù)取顯示緩沖區(qū)中的數(shù)63MOV DPTR, #SEGTAB ; 指向字形碼表首指向字形碼表首64MOVC A, A+DPTR; 查表查表, 找字形碼找字形碼65MOV DPTR, #8002H; 字形口地址字形口地址66MOVX DPTR, A; 送出字形碼送出字形碼67MOV A, R2; 取字位碼取字位碼68MOV DPTR, #8001H; 字位口地址字位口地址69MOVXDPTR, A; 顯示一位數(shù)字顯示一位數(shù)字70MOV R3, #00H; 計(jì)數(shù)延時(shí)初值計(jì)
51、數(shù)延時(shí)初值71 DISP2: DJNZ R3, DISP2; 延時(shí)一段時(shí)間延時(shí)一段時(shí)間1ms)顯示子程序顯示子程序71 DISP2: DJNZ R3, DISP2; 延時(shí)一段時(shí)間延時(shí)一段時(shí)間1ms)72INCR0; 修改顯示緩沖區(qū)指針修改顯示緩沖區(qū)指針73RRA; 為顯示下一位做準(zhǔn)備為顯示下一位做準(zhǔn)備74MOV R2, A; 存字位碼存字位碼75JBACC.7, DISPl; 不到最后一位不到最后一位, 則繼續(xù)則繼續(xù)76RET; 顯示完顯示完6位位, 返回返回77 PUTT: MOV Rl, A; 暫存暫存78ACALL PUTTl; 低低4位先放入緩沖區(qū)位先放入緩沖區(qū)79MOV A, R1;
52、 取出原數(shù)取出原數(shù)80SWAP A; 高高4位放入低位放入低4位中位中81 PUTT1: ANL A, #0FH ; 屏蔽高屏蔽高4位位82MOV R0, A; 放進(jìn)顯示緩沖區(qū)放進(jìn)顯示緩沖區(qū)83DECR0 ; 緩沖區(qū)地址指針減緩沖區(qū)地址指針減184RET T0中斷服務(wù)程序中斷服務(wù)程序; T0中斷服務(wù)程序中斷服務(wù)程序: 85 CLOCK: PUSH PSW; 保護(hù)現(xiàn)場保護(hù)現(xiàn)場86PUSH ACC87SETB RS0; 選擇工作寄存器組選擇工作寄存器組188MOV TH0, #3CH ; 重裝定時(shí)器重裝定時(shí)器T0初值初值89MOV TL0, #0BDH90INC 26H; 0.1s單元加單元加19
53、1MOV A, 26H ; 取取0.1s單元內(nèi)容單元內(nèi)容92CJNE A, #0AH, DONE1 ; 不等于不等于10, 轉(zhuǎn)轉(zhuǎn)DONE193MOV 26H, #00H ; 等于等于10, 則清則清094MOV R0, #27H ; 指向秒計(jì)數(shù)單元指向秒計(jì)數(shù)單元95MOV R1, #2BH ; 指向秒計(jì)數(shù)基制單元指向秒計(jì)數(shù)基制單元96MOV R3, #03H; 循環(huán)循環(huán)3次次(秒、分、時(shí)秒、分、時(shí))97 CLOCK1:MOV A, R0; 取計(jì)時(shí)單元的值取計(jì)時(shí)單元的值T0中斷服務(wù)程序中斷服務(wù)程序97 CLOCK1:MOV A, R0; 取計(jì)時(shí)單元的值取計(jì)時(shí)單元的值98ADD A, #01H;
54、計(jì)時(shí)單元加計(jì)時(shí)單元加199DA A; 十進(jìn)制調(diào)整十進(jìn)制調(diào)整100MOV R0, A; 送回計(jì)時(shí)單元送回計(jì)時(shí)單元101MOV 3BH, Rl; 取計(jì)時(shí)基制取計(jì)時(shí)基制102CJNE A, 3BH, NEXT3 ; 不等于計(jì)時(shí)基制不等于計(jì)時(shí)基制, 轉(zhuǎn)出轉(zhuǎn)出103MOV R0, #00H; 相等相等, 則計(jì)時(shí)單元清則計(jì)時(shí)單元清0104INC R0; 計(jì)時(shí)單元指針加計(jì)時(shí)單元指針加1105INC R1; 時(shí)間基制單元指針加時(shí)間基制單元指針加1106DJNZ R3, CLOCK1 ; 秒、分、時(shí)共秒、分、時(shí)共3次循環(huán)次循環(huán)107 NEXT3: ACALL CTRL; 調(diào)用控制子程序調(diào)用控制子程序108 DO
55、NE1: POPACC; 恢復(fù)現(xiàn)場恢復(fù)現(xiàn)場109POP PSW110RETI; 中斷返回中斷返回 控制子程序控制子程序; 控制子程序控制子程序111 CTRL: MOV DPTR, #100CH; 指向控制字碼表首址前指向控制字碼表首址前4單元單元112MOV 2EH, DPL; 暫存指針低暫存指針低8位地址位地址113 CTRL1: MOV DPL, 2EH; 取出指針低取出指針低8位地址位地址114MOV R3, #04H; 控制字碼表指針加控制字碼表指針加1次數(shù)次數(shù)115 CTRL2: INC DPTR; 控制字碼表指針加控制字碼表指針加1116DJNZ R3, CTRL2; 指針指向下
56、一個(gè)控制字指針指向下一個(gè)控制字117MOV 2EH, DPL; 暫存指針低暫存指針低8位位118MOV R3, #03H; 核對時(shí)、分、秒共核對時(shí)、分、秒共3次次119CLRA120MOVC A, A+DPTR ; 取控制碼取控制碼121JZ DONE2; 若若A0, 則數(shù)據(jù)區(qū)結(jié)束則數(shù)據(jù)區(qū)結(jié)束122MOV 3AH, A ; 保護(hù)控制碼保護(hù)控制碼123MOV R1, #2AH; 設(shè)置計(jì)時(shí)單元指針設(shè)置計(jì)時(shí)單元指針124 CTRL3: INC DPTR ; 修改控制字碼表指針修改控制字碼表指針控制子程序控制子程序124 CTRL3: INC DPTR ; 修改控制字碼表指針修改控制字碼表指針125D
57、EC R1 ; 修改計(jì)時(shí)單元指針修改計(jì)時(shí)單元指針126CLR A; 準(zhǔn)備查表準(zhǔn)備查表127MOVC A, A+DPTR ; 讀取控制字時(shí)間值讀取控制字時(shí)間值128MOV 3CH, A ; 暫存暫存129MOV A, R1; 讀取計(jì)時(shí)單元時(shí)間值讀取計(jì)時(shí)單元時(shí)間值130CJNE A, 3CH, CTRL1; 比較時(shí)間值是否相等比較時(shí)間值是否相等131DJNZ R3, CTRL3; 3次循環(huán)次循環(huán)132MOV A, 3AH ; 3次比較相等次比較相等, 恢復(fù)控制碼恢復(fù)控制碼133MOV P1, A ; 由由Pl口輸出口輸出, 執(zhí)行控制執(zhí)行控制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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 化妝品前臺工作總結(jié)
- 家電行業(yè)助理的崗位職責(zé)
- 藥房職位工作總結(jié)
- 安徽省阜陽市2023~2024學(xué)年九年級上學(xué)期期末質(zhì)量檢測化學(xué)試題
- 鐵路行業(yè)安全管理工作總結(jié)
- 工藝制造行業(yè)行政后勤工作總結(jié)
- 廣東省深圳市羅湖區(qū)2023-2024學(xué)年六年級上學(xué)期英語期末試卷
- 《如何提升招聘效能》課件
- 《汽車銷售整套資料》課件
- 《暴發(fā)性肝衰竭》課件
- 腫瘤科危急重癥護(hù)理
- 江蘇省蘇州市2024-2025學(xué)年第一學(xué)期八年級英語期末模擬試卷(一)(含答案)
- 2024-2030年中國加速器行業(yè)發(fā)展趨勢及運(yùn)營模式分析報(bào)告版
- 護(hù)理查房深靜脈置管
- 運(yùn)動(dòng)障礙護(hù)理查房
- 計(jì)算與人工智能概論知到智慧樹章節(jié)測試課后答案2024年秋湖南大學(xué)
- 2024年度油漆涂料生產(chǎn)線租賃合同3篇
- Python數(shù)據(jù)分析與應(yīng)用 課件 第12章 Seaborn
- 慶祝澳門回歸25周年主題班會(huì) 課件 (共22張)
- 《藥事管理與法規(guī)》期末考試復(fù)習(xí)題及答案
- 血液病染色體
評論
0/150
提交評論