詮解單片機鈴聲控制系統(tǒng)設(shè)計

時間:2022-07-21 06:08:00

導(dǎo)語:詮解單片機鈴聲控制系統(tǒng)設(shè)計一文來源于網(wǎng)友上傳,不代表本站觀點,若需要原創(chuàng)文章可咨詢客服老師,歡迎參考。

詮解單片機鈴聲控制系統(tǒng)設(shè)計

摘要:介紹一種以單片機為核心的鈴聲自動控制系統(tǒng)。該系統(tǒng)由單片機AT89C51和時鐘芯片PCF8583組成,通過RS-485串口通信連接主機和各響鈴從機,可完成時間的修改和定時響鈴等功能。

關(guān)鍵詞:單片機、時鐘、RS-485通信

1引言

當(dāng)今社會,計算機的應(yīng)用已經(jīng)滲透到人們生產(chǎn)、生活的各個領(lǐng)域。尤其是以單片機為代表的微型計算機的應(yīng)用最為廣泛,它們憑借其體積小、價格低、功能強、性價比高等優(yōu)點,占有了計算機應(yīng)用領(lǐng)域的半壁江山。本文筆者以單片微型計算機為核心,同時運用RS-485遠(yuǎn)程通信協(xié)議,設(shè)計出一款鈴聲控制系統(tǒng),克服了以往打鈴鐘定時不準(zhǔn)確,電路復(fù)雜,可靠性低,成本高等缺點,使用戶可以隨時對任意一點的鈴聲時刻進(jìn)行修改和設(shè)定,而不影響走時,并且可以方便可靠的實現(xiàn)分布式遠(yuǎn)程控制。該鈴聲控制系統(tǒng)可以廣泛的適用于學(xué)校、工廠、車站等不同場合的實時報時控制。

2系統(tǒng)簡介

鈴聲控制系統(tǒng)整體由兩部分組成:主控中心和終端電鈴。主控中心以單片機為核心,包括控制電路、顯示電路、監(jiān)控電路和遠(yuǎn)程通信部分電路。用戶可以通過控制電路操作主控中心,對遠(yuǎn)程電鈴進(jìn)行控制。終端電鈴為響應(yīng)控制設(shè)備,通過其自身的控制系統(tǒng)可以獲得清晰、響亮的聲響,另外還可以實現(xiàn)不同的時刻發(fā)出的鈴聲不同。同時主控中心和終端電鈴都具有掉電保護的功能,極大的提高了整個系統(tǒng)的穩(wěn)定性和可靠性,它們之間通過RS-485異步串行通信完成遠(yuǎn)程(1200米)數(shù)據(jù)交換。系統(tǒng)整體框圖如圖1所示。

3系統(tǒng)設(shè)計

主機硬件設(shè)計

主機作為整個系統(tǒng)的主控中心按系統(tǒng)要求需要完成的功能有:實時時鐘的產(chǎn)生、用戶控制輸入、各類信息的顯示、數(shù)據(jù)的存取以及遠(yuǎn)程通信。其主要包括:MCU,時鐘產(chǎn)生模塊,控制輸入模塊,數(shù)據(jù)存儲模塊及通信模塊的選用。

3.1.1MCU的選用

按系統(tǒng)要求及現(xiàn)實條件,該系統(tǒng)選用的MCU是ATMEL公司的89C51,在實際設(shè)計中89C51主要完成智能化的控制、顯示和通信等功能。

3.1.2時鐘的產(chǎn)生

本系統(tǒng)采用外接時鐘芯片(選用PCF8583時鐘芯片),這樣單片機對其控制就可以以獲得穩(wěn)定的時鐘輸出。

3.1.3鍵盤及顯示電路

針對功能要求,本系統(tǒng)采用的是矩陣式鍵盤和普通的數(shù)碼管顯示電路。矩陣式鍵盤共設(shè)置了16個按鍵,由4*4矩陣式自制鍵盤構(gòu)成,包括0到9十個數(shù)字鍵,以及6個功能鍵。

3.1.4數(shù)據(jù)存儲

考慮到節(jié)省口線、穩(wěn)定性等方面,本系統(tǒng)采用串行數(shù)據(jù)傳輸存儲器。其容量計算如下:若以打鈴次數(shù)較多的校園為例,每天按12節(jié)課計算,每節(jié)課打鈴2次,再加上起床和熄燈的次數(shù),打鈴大約在30次左右。每次打鈴的信息格式如圖2。這樣每個信息單元占8個字節(jié),存儲時均按照非壓縮型BCD碼存儲,則需要存儲空間大約在240個字節(jié)左右,選用256字節(jié)的存儲器就能夠滿足容量的要求,故采用了ATMEL公司的24C02。根據(jù)硬件電路的設(shè)計可得24C02的I2C硬件地址為:0A2H/0A3H。

3.1.5監(jiān)控電路

為保證系統(tǒng)的可靠性,本系統(tǒng)采用了看門狗芯片X5045,可直接與許多通用的微控制器的同步串行外設(shè)接口(SPI)連接。

3.1.6通信模塊

按中遠(yuǎn)距離(1200米)通信要求,本系統(tǒng)采用異步串行通信的方式。從距離及穩(wěn)定性方面考慮,本系統(tǒng)選用平衡傳輸方式的串行接口標(biāo)準(zhǔn)RS-485作為通信標(biāo)準(zhǔn),在具體設(shè)計中,采用的通信接口芯片是MAX485。

從機作為整個控制中心的響應(yīng)設(shè)備,主要完成的功能有:主機命令的接收、應(yīng)答和響鈴的控制。整個從機電路是以AT89C2051微處理器為核心,連接響鈴控制電路。其電路連接如圖所示。

3.3電源模塊

在設(shè)計中根據(jù)系統(tǒng)要求(當(dāng)突然斷電時,系統(tǒng)整體仍能持續(xù)運行)選用了一個較大的電解電容,斷電時其所放電量可以保證單片機及其外圍器件(PCF8583、X5045、24C02)正常工作。但在實際測試過程中,如果還需對顯示模塊供電,則單片機就會由于電力不足而復(fù)位。為了解決以上問題,可以在顯示供電部分的硬件電路中添加一個二極管,如圖4所示,通過它的單向?qū)щ娦詠肀WC單片機系統(tǒng)

在突然斷電時能夠持續(xù)的工作。

4軟件設(shè)計

該鈴聲控制系統(tǒng)的軟件設(shè)計分為主機軟件設(shè)計和從機軟件設(shè)計。對于整個軟件系統(tǒng)設(shè)計而言,系統(tǒng)監(jiān)控程序的設(shè)計是關(guān)鍵,是單片機系統(tǒng)程序的框架。因此本系統(tǒng)主、從機軟件設(shè)計都采用了一般結(jié)構(gòu)模式,并綜合考慮系統(tǒng)的結(jié)構(gòu)合理性及運行穩(wěn)定性,主機系統(tǒng)采用了狀態(tài)順序編碼、監(jiān)控模塊在中斷子程序中的設(shè)計風(fēng)格,但鑒于該系統(tǒng)狀態(tài)單一性,從機系統(tǒng)并未采用狀態(tài)編碼方式,而是由主程序和串口中斷子程序構(gòu)成。

4.1主機軟件設(shè)計

主機軟件設(shè)計主要由自檢和初始化主程序、定時/計數(shù)器T0中斷服務(wù)程序,以及鍵盤掃描、顯示、狀態(tài)獲得、串口中斷和延時等子程序構(gòu)成。它實現(xiàn)了對硬件設(shè)備的檢測、整個系統(tǒng)運行中的調(diào)度和實時監(jiān)控以及對硬件和軟件的初始化。

4.1.1主程序設(shè)計

系統(tǒng)通電復(fù)位后,程序隨即進(jìn)入主程序,完成對系統(tǒng)的自檢。接著對系統(tǒng)進(jìn)行正常的初始化,包括硬件和軟件初始化。初始化結(jié)束,主程序進(jìn)入等待方式。流程如圖5所示。

系統(tǒng)自檢包括按鍵、顯示檢測、時鐘芯片PCF8583檢測和E2PROM芯片24C02數(shù)據(jù)區(qū)檢測。(1)按鍵、顯示檢測:檢測前數(shù)碼管處于全滅狀態(tài),隨即顯示提示輸入按鍵(P)。若按下任意鍵,數(shù)碼管顯示該按鍵值,一秒后數(shù)碼管全滅退出檢測。按鍵功能與鍵值定義如下:數(shù)字鍵0-9,功能鍵A-F(A-修改時鐘,B-修改時間表,C-通信檢測,D-確定,E-取消,F(xiàn)-移位)。(2)時鐘芯片PCF8583檢測:首先初始化始終芯片為2003年12月31日,24時59分55秒。啟動時鐘并顯示,直至?xí)r間顯示為2004年1月1日,0時0分5秒。隨后數(shù)碼管全滅,檢測退出。(3)E2PROM芯片24C02數(shù)據(jù)區(qū)檢測:顯示DATATEST,檢測開始。24C02有256個字節(jié)的E2PROM,程序依次對每個字節(jié)讀出保存數(shù)據(jù)。寫入0,讀出核對,如正確再寫入0FFH,讀出核對。核對無誤把原數(shù)據(jù)恢復(fù)。若在檢測過程中發(fā)現(xiàn)數(shù)據(jù)核對有誤則顯示出錯(ERROR),并把該出錯數(shù)據(jù)區(qū)地址顯示出來。至此系統(tǒng)自檢結(jié)束。

系統(tǒng)初始化包括定時/計數(shù)器T0,時鐘時間表,串口相關(guān)硬件以及看門狗X5045初始化。(1)定時/計數(shù)器T0初始化:定時/計數(shù)器T0在該系統(tǒng)中作為監(jiān)控程序的載體,其初始值須多方面考慮。設(shè)定為定時器,定時50ms,采用方式1(16位定時/計數(shù)器)。因單片機所用晶振為12MHz,故初值X可用如下公式計算:

50ms=(65536-X)結(jié)果X=15536

定時器T0的初始化程序如下:

MOVTMOD,#21H;設(shè)置定時器T0方式1

MOVTH0,#HIGH(15536);填定時器初值高字節(jié)

MOVTL0,#LOW(15536);填定時器初值低字節(jié)

SETBTR0;開定時器T0

SETBET0;允許T0中斷

SETBEA;總中斷允許

(2)時鐘時間表的初始化:時鐘芯片PCF8583的設(shè)置在本系統(tǒng)中需要對其內(nèi)部9個寄存器進(jìn)行初始化:控制狀態(tài)寄存器(00H),計數(shù)寄存器百分之一秒單元(01H),秒單元(02H),分單元(03H),時單元(04H),年/日期單元(05H),星期和月份單元(06H),時鐘起鬧控制寄存器(08H),起鬧定時器(0FH)。其中控制狀態(tài)寄存器設(shè)置為32.768K計數(shù)方式。(3)串口初始化:包括波特率設(shè)置、串口方式設(shè)置和硬件MAX485設(shè)置。為了通信的穩(wěn)定性與正確性,串口方式設(shè)置為方式3(9位通用異步接收器/發(fā)送器),即對串口控制寄存器SCON設(shè)值為0D0H。波特率設(shè)置方式為方式2(具有自動重裝初值的8位定時/計數(shù)器),用定時/計數(shù)器T1作為波特率發(fā)生器。設(shè)置波特率為2400。其計算公式如下:

波特率=得定時器初值X=230(即0E6H)

MAX485設(shè)置:因MAX485為半雙工方式,所以它的發(fā)送/接收需要對引腳/RE、DE按要求進(jìn)行置位/復(fù)位設(shè)置。

(3)看門狗初始化:本系統(tǒng)使用了硬件看門狗X5045,考慮程序的運行時間選擇了600ms的復(fù)位時間。

程序為:MOVA,#10H;X5045方式,看門狗600mLCALLWRSR寫入

系統(tǒng)初始化結(jié)束后,主程序進(jìn)入節(jié)電等待方式。該方式下,送往CPU的時鐘信號被封鎖,CPU進(jìn)入等待狀態(tài),此時堆棧指針SP、程序計數(shù)器PC、程序狀態(tài)字PSW、累加器A的狀態(tài)均保持不變,I/O引腳保持以前的狀態(tài)。等待方式可由中斷或復(fù)位來退出。在本系統(tǒng)中主要是由定時中斷T0來喚醒,之后進(jìn)入監(jiān)控循環(huán)。

3.1.2定時中斷監(jiān)控程序設(shè)計

定時中斷服務(wù)程序是本系統(tǒng)程序的核心,由填定時器初值、喂狗模塊,時間標(biāo)志位、出錯狀態(tài)判斷模塊,鍵盤處理模塊,顯示閃爍判斷及顯示等模塊構(gòu)成。流程圖如圖6所示。狀態(tài)0——初始狀態(tài),正常顯示時鐘;狀態(tài)1——修改時鐘狀態(tài);狀態(tài)2——修改時間表狀態(tài);狀態(tài)3——通信檢測狀態(tài)

(1)填定時器初值喂狗模塊:主要為監(jiān)控循環(huán)正常運行而設(shè)置,看門狗定時器復(fù)位使其繼續(xù)監(jiān)控系統(tǒng)運行。

(2)時間標(biāo)志位、出錯狀態(tài)判斷模塊:為以下程序運行中的一些時間要求而設(shè)置。包含1/2秒標(biāo)志和1秒標(biāo)志;出錯狀態(tài)判斷模塊是為顯示定時間(1s)的出錯信息而設(shè)置,包含時鐘輸入出錯和時間表改動出錯兩種出錯狀態(tài)。

(3)鍵盤處理模塊:它是監(jiān)控程序的主要組成部分,負(fù)責(zé)掃描鍵盤,解釋按鍵和調(diào)度執(zhí)行模塊。

(4)閃爍判斷及顯示模塊:按照硬件設(shè)計,本系統(tǒng)的顯示為靜態(tài)模擬串口顯示。顯示不需要定時刷新,所以在鍵盤處理后對是否顯示及是否閃爍要進(jìn)行判斷,以便進(jìn)入正確的顯示模塊。設(shè)置了兩個標(biāo)志位:顯示標(biāo)志DISPF和閃爍標(biāo)志FLAHF。顯示判斷模塊流程可參照圖7。若有閃爍位則該位由顯示1/4秒,滅1/4秒來造成閃爍效果。

3.1.3其他應(yīng)用子程序設(shè)計

本系統(tǒng)中的應(yīng)用子程序包括鍵盤掃描子程序、顯示子程序、狀態(tài)獲得子程序、串口中斷子程序、延時子程序以及I2C總線和SPI總線的兩個通用軟件包。部分子程序在上面已做過介紹了,下面只對串口中斷子程序、延時子程序和兩種總線的通用軟件包做說明。

(1)串口中斷子程序:在本系統(tǒng)的通信中應(yīng)用的是RS485串口通信,對于硬件可參照硬件設(shè)計的通信部分。因為該通信簡單不存在大量數(shù)據(jù)的通信,所以通信協(xié)議是自行定義的。格式有兩種:通常狀態(tài)下,通信為兩個字節(jié),首字節(jié)為地址(廣播地址0),尾字節(jié)為響鈴類型,該通信不需要從機回應(yīng)。檢測狀態(tài)下,通信為一個字節(jié),包括廣播檢測和單機檢測。廣播檢測地址為0FFH,單機地址為某從機號(01-99)。當(dāng)從機接收到0FFH或本機號時響鈴(類型0),否則不做任何響應(yīng)。接收到本機號時要向主機發(fā)送回應(yīng),主機接到回應(yīng)表示該從機運行正常。串口中斷子程序只是通常狀態(tài)下調(diào)用的,主要是為了發(fā)送響鈴類型而設(shè)置的。

(2)延時子程序:本系統(tǒng)中設(shè)置了一個比較精確的1ms延時程序,其他延時程序都是在此基礎(chǔ)上調(diào)用多次實現(xiàn)的:

經(jīng)計算可知該程序執(zhí)行用993個機器周期,當(dāng)采用12MHz的晶振,1個機器周期=1μs,則執(zhí)行該程序要993μs,與1ms比較存在7μs誤差。

(3)I2C總線和SPI總線通用軟件包:本系統(tǒng)硬件設(shè)計中使用了兩個I2C總線器件:時鐘芯片PCF8583和E2PROM24C02,地址分配為PCF8583—0A0H/0A1H,24C02—0A2H/0A3H。本系統(tǒng)I2C模擬通用軟件包由信號模擬子程序STA、STOP、MACK、MNACK和通用子程序CACK、WRBYT、RDBYT、WRNBYT、RDNBYT共九個子程序組成。可以設(shè)置在程序存儲器的任何空間,占用的資源有R0(18H)、R1(19H)、F0、C。通用軟件包中的符號單元有:MTD—發(fā)送緩沖區(qū)首址,MRD—接收緩沖區(qū)首址,SLA—尋址字節(jié)(SLAW/R)存放單元,NUMBYT—傳送字節(jié)數(shù)n存放單元。本系統(tǒng)通用軟件包適用于以80C51系列為主控器的I2C總線應(yīng)用系統(tǒng),主控時鐘頻率為12MHz。如果時鐘頻率改變則應(yīng)適當(dāng)修改信號模擬子程序中的定時要求。通用軟件包中直接與應(yīng)用程序編寫有關(guān)的子程序為WRNBYT和RDNBYT。相應(yīng)的I2C總線讀寫指令為:

4.2.1主程序設(shè)計

本鈴聲控制系統(tǒng)的從機軟件設(shè)計,主要包含有主程序(自檢程序和初始化程序)、定時中斷服務(wù)程序及若干子程序設(shè)計。由于從機外圍硬件電路很少,故上電復(fù)位后,省去對外圍器件的檢測,立即進(jìn)入正常的初始化。從機完成的主要功能是對主機發(fā)送命令能夠及時準(zhǔn)確的接收并響應(yīng),所以初始化主要是串行口的設(shè)置。具體流程見圖8。串口通信要求通信雙方必須有相同的波特率,系統(tǒng)中設(shè)置波特率為2400,為了保證通信的穩(wěn)定性與正確性,設(shè)置為方式3(9位通用異步接收器/發(fā)送器),即對串口控制寄存器SCON設(shè)值為0D0H。初始化結(jié)束后,主程序即刻進(jìn)入空閑模式:

AT89C2051進(jìn)入等待模式,直到接收到主機命令。

4.2.2串口中斷子程序

為了讓通信更加穩(wěn)定,我們制定了自己的通信協(xié)議:把通信狀態(tài)分為兩種:正常通信狀態(tài)和檢測通信狀態(tài)。正常通信狀態(tài)主要完成定時通信打鈴的功能,命令格式為兩個字節(jié),第一字節(jié)為廣播地址:0;另一字節(jié)為響鈴類型。檢測通信狀態(tài)主要完成對從機的通信檢測,分為廣播檢測和單機檢測。命令格式是一個字節(jié)為地址字節(jié),其中廣播檢測地址為0,單機檢測地址為該從機號01-99。串行口中斷請求由接收所引起。串行接口接收到了一幀信息,便由硬件置RI=1,在CPU允許中斷請求的情況下,向CPU申請中斷,中斷響應(yīng)后,必須由軟件清楚RI。故在串行口中斷子程序開始,首先清除RI,然后由特殊功能寄存器SBUF讀取數(shù)據(jù)。如上流程圖示。讀取數(shù)據(jù)后,首先進(jìn)行數(shù)據(jù)的校驗,由于采用的是串行口工作方式3,所以將SCON中的位RB8作為一次校驗,同時也取PSW中的奇偶校驗位P進(jìn)行二次校驗,最大可能的保證接收數(shù)據(jù)的正確性。校驗程序段如下:

當(dāng)數(shù)據(jù)校驗正確時,進(jìn)入正常響應(yīng)階段。按照通信協(xié)議的約定,串口中斷子程序?qū)γ钸M(jìn)行解釋并按命令執(zhí)行相應(yīng)的操作。詳細(xì)命令解釋判斷見圖9。各標(biāo)志判斷結(jié)束后,系統(tǒng)進(jìn)入響鈴控制流程。按照要求,響鈴時間為10秒,系統(tǒng)中取定時器T0,配合一個記數(shù)單元構(gòu)成10秒的延時。不同時刻要求響鈴類型不同,在實際設(shè)計過程中,利用T0的中斷速率來控制產(chǎn)生聲音的脈沖頻率,通過一個音頻放大器做簡單的功率放大后產(chǎn)生不同的聲音(見從機硬件部分)。

程序中T0的初值TH、TL0用于頻率的控制,利用兩個中間單元DPH、DPL,不同的響鈴類型只需把需要的初值提前放置到DPH、DPL中,調(diào)用設(shè)置T0的以上子程序即可。

5結(jié)束語

在整個設(shè)計過程中,無論硬件還是軟件,始終以模塊化設(shè)計為指導(dǎo)思想,對整個系統(tǒng)細(xì)化,分成多個小模塊,保證每部分都能夠獨立、可靠的工作,然后把精力集中放在對各模塊之間的無縫接口上。最終采用TKS-58仿真器來完成了整個系統(tǒng)的調(diào)試。