版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
摘要圖4-3SJAI000的初始化流程圖圖4-4報文發(fā)送子程序流程圖圖4-5報文接收子程序流程圖4.6時鐘子程序?qū)懕Wo操作寄存器:當(dāng)寫保護寄存器的最高位為0時,允許數(shù)據(jù)寫入寄存器。寫保護寄存器可以通過命令字節(jié)8E,8F來規(guī)定禁止寫入/讀出,寫保護不能在多字節(jié)傳送模式下寫入。單字節(jié)傳送方式:通過字節(jié)傳送,可以向DS1302寫入秒,分,小時等字節(jié)以及從DS1302中讀取秒,分,小時等字節(jié)數(shù)據(jù),只是命令字不同。多字節(jié)傳送方式:當(dāng)命令字節(jié)為BE或BF時,DS1302工作在多字節(jié)傳送模式,8個時鐘/日歷寄存器從寄存器0地址開始連續(xù)讀寫從0位開始的數(shù)據(jù)。DS1302子程序流程圖如圖4-6所示。圖4-6DS1302子程序流程圖
5抗干擾技術(shù)為了增強CAN總線節(jié)點的抗干擾能力,SJA1000的TX0和RX0并不是直接與82C250的TXD和RXD相連,而是通過高速光耦6N137后和82C250相連,這樣就很好實現(xiàn)了總線上各CAN節(jié)點間的電氣隔離。不過應(yīng)該特別說明的一點是光耦部分電路所采用的兩個電源VCC和VDD必須完全隔離,負(fù)責(zé)采取光耦也就失去了意義。電源的完全隔離可采用小功率電源隔離模塊或帶多5V隔離輸出的開關(guān)電源模塊實現(xiàn)。這一部分雖然增加了節(jié)點的復(fù)雜性,但卻提高了節(jié)點的穩(wěn)定性和安全性。82C250與CAN總線的接口部分也采取了一定的安全和抗干擾措施。82C250與CANH和CANL引腳各自通過一個5Ω的電阻與CAN總線相連。電阻可起到一定的限流作用,保護82C250免受過流的沖擊。CANH和CANL與地之間并聯(lián)了兩個30pF的小電容,可以起到濾除總線上的高頻干擾和一定的防電磁輻射的作用。另外,在兩根CAN總線接入端與地之間分別反接了一個保護二極管,當(dāng)CAN總線有較高的負(fù)電壓時,通過二極管的短路可起到一定的過壓保護作用。
6經(jīng)濟技術(shù)指標(biāo)分析本設(shè)計用到的芯片中都是一些常見且經(jīng)常用到的芯片,單片機采用的的是AT89S52,它基本上和80C51單片機的功能一樣,只是在一些功能上又有擴展,它的經(jīng)濟性是很合理的。CAN總線中用到的SJA1000和82C250也是CAN總線系統(tǒng)中經(jīng)常用到的芯片,價格也很合理。SJA1000是PHILIPS公司的PCA82C200獨立CAN控制器的替代品,有一系列先進的功能,適合于多種應(yīng)用,特別在系統(tǒng)優(yōu)化、診斷和維護方面非常重要。82C250是協(xié)議控制器和物理傳輸線路之間的接口。此器件對總線提供差動發(fā)送能力,對CAN控制器提供差動接收能力性能和價格值得選擇。光電隔離芯片選用的是6NI37高速光耦,CAN總線系統(tǒng)中首選器件。采集時間用到的時鐘芯片DS1302是一種集成芯片,用它可以簡化電路,是整個電路圖看起來簡單明了。顯示電路選用的是數(shù)碼管,比較常見,價格液比較便宜。電源采用橋式整流電路,因為半導(dǎo)體器件飛速發(fā)展的今天二極管的價格很低,可以降低整個設(shè)計的成本。
結(jié)論本論文研究了可燃?xì)怏w報警控制系統(tǒng)的的原理及國內(nèi)外發(fā)展?fàn)顩r,簡單介紹了在設(shè)計中用到的各種芯片的功能及應(yīng)用,并給出了設(shè)計的總體框圖,原理圖,程序流程圖和程序。設(shè)計了基于CAN總線的可燃?xì)怏w控制器,它能夠檢測可燃?xì)怏w的濃度和地址,具有報警指示和輸出功能,具有故障指示和輸出功能,具有濃度顯示和查看功能,具有電源工作狀態(tài)指示功,具有同可燃?xì)怏w探測器通訊功能,巡檢探測器、接收探測器信息并向探測器傳送命令功能。當(dāng)可燃?xì)怏w濃度超限時,控制器發(fā)出聲光指示,并同時啟動報警輸出設(shè)備。本設(shè)計由于時間原因還有許多功能沒有完成,還有許多地方需要完善,這是對本設(shè)計的一個擴展,希望以后能有機會繼續(xù)完成。本論文所作的工作如下:⑴系統(tǒng)全面地闡述了國內(nèi)外火災(zāi)報警系統(tǒng)發(fā)展的歷史、現(xiàn)狀、趨勢以及火災(zāi)自動報警系統(tǒng)的分類,簡要說明了研究火災(zāi)報警系統(tǒng)的意義,闡明了CAN總線的獨特之處及其優(yōu)勢。⑵分別介紹主控制器AT89S52單片機、故障及報警聲光報警控制電路、鍵盤及顯示部分,電源電路以及擴展芯片8155,CAN通訊總線及總線控制器SJA1000的工作原理及特點,PAC82C250,高速光電藕合器6N137。⑶介紹了CAN現(xiàn)場總線在基于CAN總線的可燃?xì)怏w報警控制系統(tǒng)中的應(yīng)用,給出了整體的設(shè)計方法,從各個基本電路出發(fā),初步完成了系統(tǒng)的設(shè)計。重點介紹對工作狀態(tài)的檢測及對數(shù)據(jù)的處理。致謝
致謝本次的設(shè)計及論文的撰寫工作都是在崔春艷老師的精心指導(dǎo)下完成的,在設(shè)計進行期間,崔老師為我悉心解答,她開闊的視野、淵博的知識和敏銳的思維、扎實的專業(yè)基礎(chǔ)以及不厭其煩的解答令我受益匪淺。崔老師在多年來的研究過程積累了豐富的經(jīng)驗,她在傳授知識的過程中所表現(xiàn)出來的嚴(yán)謹(jǐn)?shù)膶W(xué)術(shù)態(tài)度、一絲不茍的工作作風(fēng)給了我極其深刻的印象。在此對崔春艷老師致以崇高的敬意和衷心的感謝。感謝崔老師在設(shè)計上對我的教導(dǎo),崔老師豐富的知識拓寬了我的視野,讓我能更順利的完成這次設(shè)計;感謝我的同學(xué)們,你們不僅讓我感受到友情的力量,也讓我感覺到了生活的愉悅;還要感謝大學(xué)期間我的所有老師,謝謝你們教給我的知識,沒有你們的幫助,這個設(shè)計是無法完成的。感謝自動化教研室及信電學(xué)院的全體老師在本科階段的學(xué)習(xí)中給予的無私指導(dǎo)。他們對待科學(xué)的嚴(yán)謹(jǐn)態(tài)度都令人欽佩,是我以后的榜樣。再次感謝在設(shè)計過程當(dāng)中所有幫助過我的老師和同學(xué)。參考文獻
參考文獻趙亮等.單片機C語言編程與實例北京:人民郵電出版社,2003.7田立等.51單片機程序設(shè)計快速入門北京:人民郵電出版社,2007.6鄔寬明.CAN總線原理和應(yīng)用系統(tǒng)設(shè)計[M].(北京)北京航空航天大學(xué)出版社2004孫育才等.ATMEL新型AT89S52系列單片機及其應(yīng)用北京:清華大學(xué)出版社2005.1杜尚豐等.CAN總線測控技術(shù)及應(yīng)用北京:電子工業(yè)出版社2007.1舒志兵等.現(xiàn)場總線運動控制系統(tǒng)北京:電子工業(yè)出版社2005.8李正軍.現(xiàn)場總線及其應(yīng)用技術(shù)[M].北京:機械工業(yè)出版社,2005(1)鄔寬明.現(xiàn)場總線技術(shù)應(yīng)用選編[M].北京:北京航天航空大學(xué)出版社,2003(1)謝大權(quán).基于CAN現(xiàn)場總線技術(shù)的電力參數(shù)遠(yuǎn)程監(jiān)測系統(tǒng)的研究[D].2005(3)劉澤祥.現(xiàn)場總線技術(shù)[M].北京:機械工業(yè)出版社,2005(9)MC9S12DP256AdvanceInformation.Revision1.1.December1,2000
KopetzhAComparisonofCANandTIP[J].AnnualReviewsinControl,2000(24)
科技文摘譯科技文章摘譯1FAULTCONFINEMENTOFCANWithrespecttofaultconfinementaunitmaybeinoneofthreestates:?“erroractive”?“errorpassive”?“busoff”An“erroractive”unitcannormallytakepartinbuscommunicationandsendsanACTIVEERRORFLAGwhenanerrorhasbeendetected.An“errorpassive”unitmustnotsendanACTIVEERRORFLAG.Ittakespartinbuscommunication,butwhenanerrorhasbeendetectedonlyaPASSIVEERRORFLAGissent.Alsoafteratransmission,an“errorpassive”unitwillwaitbeforeinitiatingafurthertransmission.A“busoff”unitisnotallowedtohaveanyinfluenceonthebus.(E.g.outputdriversswitchedoff).Forfaultconfinementtwocountsareimplementedineverybusunit:TRANSMITERRORCOUNTRECEIVEERRORCOUNTThesecountsaremodifiedaccordingtothefollowingrules(notethatmorethanonerulemayapplyduringagivenmessagetransfer):WhenaRECEIVERdetectsanerror,theRECEIVEERRORCOUNTwillbeincreasedby1,exceptwhenthedetectederrorwasaBITERRORduringthesendingofanACTIVEERRORFLAGoranOVERLOADFLAG.WhenaRECEIVERdetectsa“dominant”bitasthefirstbitaftersendinganERRORFLAGtheRECEIVEERRORCOUNTwillbeincreasedby8.WhenaTRANSMITTERsendsanERRORFLAGtheTRANSMITERRORCOUNTisincreasedby8.Exception1:IftheTRANSMITTERis“erroractive”anddetectsanACKNOWLEDG-MENTERRORbecauseofnotdetectinga“dominant”ACKanddoesnotdetecta“dominant”bitwhilesendingitsPASSIVEERRORFLAG.Exception2:IftheTRANSMITTERsendsanERRORFLAGbecauseSTUFFERRORoccurredduringARBITRATION,andshouldhavebeen“recessive”,andhasbeensentas“recessive”butmonitoredas“dominant”.Inexceptions1and2theTRANSMITERRORCOUNTisnotchanged.⑷IfanTRANSMITTERdetectsaBITERRORwhilesendinganACTIVEERRORFLAGoranOVERLOADFLAGtheTRANSMITERRORCOUNTisincreasedby8.⑸IfanRECEIVERdetectsaBITERRORwhilesendinganACTIVEERRORFLAGoranOVERLOADFLAGtheRECEIVEERRORCOUNTisincreasedby8.⑹Anynodetoleratesupto7consecutive“dominant”bitsaftersendinganACTIVEERRORFLAG,PASSIVEERRORFLAGorOVERLOADFLAG.Afterdetectingthe14thconsecutive“dominant”bit(incaseofanACTIVEERRORFLAGoranOVERLOADFLAG)orafterdetectingthe8thconsecutive“dominant”bitfollowingaPASSIVEERRORFLAG,andaftereachsequenceofadditionaleightconsecutive“dominant”bitseveryTRANSMITTERincreasesitsTRANSMITERRORCOUNTby8andeveryRECEIVERincreasesitsRECEIVEERRORCOUNTby8.⑺Afterthesuccessfultransmissionofamessage(gettingACKandnoerroruntilENDOFFRAMEisfinished)theTRANSMITERRORCOUNTisdecreasedby1unlessitwasalready0.⑻Afterthesuccessfulreceptionofamessage(receptionwithouterroruptotheACKSLOTandthesuccessfulsendingoftheACKbit),theRECEIVEERRORCOUNTisdecreasedby1,ifitwasbetween1and127.IftheRECEIVEERRORCOUNTwas0,itstays0,andifitwasgreaterthan127,thenitwillbesettoavaluebetween119and127.⑼Anodeis“errorpassive”whentheTRANSMITERRORCOUNTequalsorexceeds128,orwhentheRECEIVEERRORCOUNTequalsorexceeds128.Anerrorconditionlettinganodebecome“errorpassive”causesthenodetosendanACTIVEERRORFLAG.⑽Anodeis“busoff”whentheTRANSMITERRORCOUNTisgreaterthanorequalto256.⑾An“errorpassive”nodebecomes“erroractive”againwhenboththeTRANSMITERRORCOUNTandtheRECEIVEERRORCOUNTarelessthanorequalto127.Annodewhichis“busoff”ispermittedtobecome“erroractive”(nolonger“busoff”)withitserrorcountersbothsetto0after128occurrenceof11consecutive“recessive”bitshavebeenmonitoredonthebus.Note:Anerrorcountvaluegreaterthanabout96indicatesaheavilydisturbedbus.Itmaybeofadvantagetoprovidemeanstotestforthiscondition.Note:Start-up/Wake-up:Ifduringstart-uponly1nodeisonline,andifthisnodetransmitssomemessage,itwillgetnoacknowledgment,detectanerrorandrepeatthemessage.Itcanbecome“errorpassive”butnot“busoff”duetothisreason.2ERRORHANDLING2.1ErrorDetectionThereare5differenterrortypes(whicharenotmutuallyexclusive):BITERRORAunitthatissendingabitonthebusalsomonitorsthebus.ABITERRORhastobedetectedatthatbittime,whenthebitvaluethatismonitoredisdifferentfromthebitvaluethatissent.Anexceptionisthesendingofa“recessive”bitduringthestuffedbitstreamoftheARBITRATIONFIELDorduringtheACKSLOT.ThennoBITERRORoccurswhena“dominant”bitismonitored.ATRANSMITTERsendingaPASSIVEERRORFLAGanddetectinga“dominant”bitdoesnotinterpretthisasaBITERROR.STUFFERRORASTUFFERRORhastobedetectedatthebittimeofthe6thconsecutiveequalbitlevelinamessagefieldthatshouldbecodedbythemethodofbitstuffing.CRCERRORTheCRCsequenceconsistsoftheresultoftheCRCcalculationbythetransmitter.ThereceiverscalculatetheCRCinthesamewayasthetransmitter.ACRCERRORhastobedetected,ifthecalculatedresultisnotthesameasthatreceivedintheCRCsequence.FORMERRORAFORMERRORhastobedetectedwhenafixed-formbitfieldcontainsoneormoreillegalbits.(Note,thatforaReceiveradominantbitduringthelastbitofENDORFRAMEisnottreatedasFORMERROR).ACKNOWLEDGMENTERRORAnACKNOWLEDGMENTERRORhastobedetectedbyatransmitterwheneveritdoesnotmonitora“dominant”bitduringtheACKSLOT.2.2ErrorSignalingAstationdetectinganerrorconditionsignalsthisbytransmittinganERRORFLAG.Foran“erroractive”nodeitisanACTIVEERRORFLAG,foran“errorpassive”nodeitisaPASSIVEERRORFLAG.WheneveraBITERROR,aSTUFFERROR,aFORMERRORoranACKNOWLEDGMENTERRORisdetectedbyanystation,transmissionofanERRORFLAGisstartedattherespectivestationatthenextbit.WheneveraCRCERRORisdetected,transmissionofanERRORFLAGstartsatthebitfollowingtheACKDELIMITER,unlessanERRORFLAGforanotherconditionhasalreadybeenstarted.
中文翻譯1CAN的故障界定至于故障界定,單元的狀態(tài)可能為以下三種之一:?“錯誤主動”?“錯誤被動”?“總線關(guān)閉”“錯誤主動”的單元可以正常地參與總線通訊并在錯誤被檢測到時發(fā)出主動錯誤標(biāo)志?!板e誤被動”的單元不允許發(fā)送主動錯誤標(biāo)志?!板e誤被動”的單元參與總線通訊,在錯誤被檢測到時只發(fā)出被動錯誤標(biāo)志。而且,發(fā)送以后,“錯誤被動”單元將在初始化下一個發(fā)送之前處于等待狀態(tài)。“總線關(guān)閉”的單元不允許在總線上有任何的影響(比如,關(guān)閉輸出驅(qū)動器)。在每一總線單元里使用兩種計數(shù)以便故障界定:發(fā)送錯誤計數(shù)接收錯誤計數(shù)這些計數(shù)按以下規(guī)則改變(注意,在給定的報文發(fā)送期間,可能要用到的規(guī)則不只一個):當(dāng)接收器檢測到一個錯誤,接收錯誤計數(shù)就加1。在發(fā)送主動錯誤標(biāo)志或過載標(biāo)志期間所檢測到的錯誤為位錯誤時,接收錯誤計數(shù)器值不加1。當(dāng)錯誤標(biāo)志發(fā)送以后,接收器檢測到的第一個位為“顯性”時,接收錯誤計數(shù)值加8。當(dāng)發(fā)送器發(fā)送一錯誤標(biāo)志時,發(fā)送錯誤計數(shù)器值加8例外情況1:發(fā)送器為“錯誤被動”,并檢測到一應(yīng)答錯誤,此應(yīng)答錯誤由檢測不到一“顯性”ACK以及當(dāng)發(fā)送被動錯誤標(biāo)志時檢測不到一“顯性”位而引起。例外情況2:發(fā)送器因為填充錯誤而發(fā)送錯誤標(biāo)志。此填充錯誤發(fā)生于仲裁期間,引起填充錯誤是由于:填充位位于RTR位之前,并已作為“隱性”發(fā)送,但是卻被監(jiān)視為“顯性”。例外情況1和例外情況2時,發(fā)送錯誤計數(shù)器值不改變。發(fā)送主動錯誤標(biāo)志或過載標(biāo)志時,如果發(fā)送器檢測到位錯誤,則發(fā)送錯誤計數(shù)器值加8。當(dāng)發(fā)送主動錯誤標(biāo)志或過載標(biāo)志時,如果接受器檢測到位錯誤(位錯誤),則接收錯誤計數(shù)器值加8。在發(fā)送主動錯誤標(biāo)志、被動錯誤標(biāo)志或過載標(biāo)志以后,任何節(jié)點最多容許7個連續(xù)的“顯性”位。以下的情況,每一發(fā)送器將它們的發(fā)送錯誤計數(shù)值加8,及每一接收器的接收錯誤計數(shù)值加8:當(dāng)檢測到第14個連續(xù)的“顯性”位后;在檢測到第8個跟隨著被動錯誤標(biāo)志的連續(xù)的“顯性”位以后;在每一附加的8個連續(xù)“顯性”位順序之后。報文成功傳送后(得到ACK及直到幀末尾結(jié)束沒有錯誤),發(fā)送錯誤計數(shù)器值減1,除非已經(jīng)是0。如果接收錯誤計數(shù)值介于1和127之間,在成功地接收到報文后(直到應(yīng)答間隙接收沒有錯誤,及成功地發(fā)送了ACK位),接收錯誤計數(shù)器值減1。如果接收錯誤計數(shù)器值是0,則它保持0,如果大于127,則它會設(shè)置一個介于119到127之間值。當(dāng)發(fā)送錯誤計數(shù)器值等于或超過128時,或當(dāng)接收錯誤計數(shù)器值等于或超過128時,節(jié)點為“錯誤被動”。讓節(jié)點成為“錯誤被動”的錯誤條件致使節(jié)點發(fā)出主動錯誤標(biāo)志。當(dāng)發(fā)送錯誤計數(shù)器值大于或等于256時,節(jié)點為“總線關(guān)閉”。當(dāng)發(fā)送錯誤計數(shù)器值和接收錯誤計數(shù)器值都小于或等于127時,“錯誤被動”的節(jié)點重新變?yōu)椤板e誤主動”。在總線監(jiān)視到128次出現(xiàn)11個連續(xù)“隱性”位之后,“總線關(guān)閉”的節(jié)點可以變成“錯誤主動”(不再是“總線關(guān)閉”),它的錯誤計數(shù)值也被設(shè)置為0。備注:一個大約大于96的錯誤計數(shù)值顯示總線被嚴(yán)重干擾。最好能夠預(yù)先采取措施測試這個條件。備注:起動/睡眠:如果起動期間內(nèi)只有1個節(jié)點在線,以及如果這個節(jié)點發(fā)送一些報文,則將不會有應(yīng)答,并檢測到錯誤和重復(fù)報文。由此,節(jié)點會變?yōu)椤板e誤被動”,而不是“總線關(guān)閉”。2錯誤處理2.1錯誤檢測有以下5種不同的錯誤類型(這5種錯誤不會相互排斥)位錯誤(BitError)單元在發(fā)送位的同時也對總線進行監(jiān)視。如果所發(fā)送的位值與所監(jiān)視的位值不相符合,則在此位時間里檢測到一個位錯誤。但是在仲裁場(ARBITRATIONFIELD)的填充位流期間或應(yīng)答間隙(ACKSLOT)發(fā)送一“隱性”位的情況是例外的。此時,當(dāng)監(jiān)視到一“顯性”位時,不會發(fā)出位錯誤。當(dāng)發(fā)送器發(fā)送一個被動錯誤標(biāo)志但檢測到“顯性”位時,也不視為位錯誤。填充錯誤(StuffError)如果在使用位填充法進行編碼的信息中,出現(xiàn)了第6個連續(xù)相同的位電平時,將檢測到一個填充錯誤。CRC錯誤(CRCError)CRC序列包括發(fā)送器的CRC計算結(jié)果。接收器計算CRC的方法與發(fā)送器相同。如果計算結(jié)果與接收到CRC序列的結(jié)果不相符,則檢測到一個CRC錯誤。形式錯誤(FormError)當(dāng)一個固定形式的位場含有1個或多個非法位,則檢測到一個形式錯誤。(備注:接收器的幀末尾最后一位期間的顯性位不被當(dāng)作幀錯誤)應(yīng)答錯誤(AcknowledgmentError)只要在應(yīng)答間隙(ACKSLOT)期間所監(jiān)視的位不為“顯性”,則發(fā)送器會檢測到一個應(yīng)答錯誤。2.2錯誤標(biāo)定檢測到錯誤條件的站通過發(fā)送錯誤標(biāo)志指示錯誤。對于“錯誤主動”的節(jié)點,錯誤信息為“主動錯誤標(biāo)志”,對于“錯誤被動”的節(jié)點,錯誤信息為“被動錯誤標(biāo)志”。站檢測到無論是位錯誤、填充錯誤、形式錯誤,還是應(yīng)答錯誤,這個站會在下一位時發(fā)出錯誤標(biāo)志信息。只要檢測到的錯誤的條件是CRC錯誤,錯誤標(biāo)志的發(fā)送開始于ACK界定符之后的位(其他的錯誤條件除外)。附錄
附錄一程序主程序(zhu.c):#include<string.h>#include<reg52.h>#include<stdlib.h>#include<stdio.h>#include<intrins.h>#include<can.c>#include<ds1302.c>ENTER_CRITCAL();EXIT_CRITCAL();uart_init();voidjieshou();voidxianshi();voidxianshi();#defineDELAY_TIME60#defineTRUE1#defineFALSE0#pragmasmall#defineucharunsignedchar#defineunintunsignedint#defineCOM8155XBYTE[0XFFF0]#definePA8155XBYTE[0XFFF1]#definePB8155XBYTE[0XFFF2]#definepc8155XBYTE[0XFFF3]intab[100][6];intk=0,l=0;charhuozai;charchaxun;charchaxun1;charchaxun2;charxiaoyin;voidshijian()voidInit_CAN();voidcan();voidinit(void){SCON=Ox58;TMOD=0x20;TCON=0x69;TH1=0xF3;count=0;P1=0xFF;P0=0xFF;P2=0xFF;P3=0xFF;COM8155=0X8E;Init_CAN();uchardisbuffer[8]={0,1,2,3,4,5,6,7};ucharcodetable[10]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F};} voidmain(void){ inti();shijian(); for(;;) { shijian(); jieshou(); xianshi(); jiance(); }}voidjieshou(){ can();inti,addr,nongdu; if(P2^0==0) { i=P0;count++; if(count%2) { switch(i&0x03) { case1:huozai=1;P2^2=1;P2^1=0;P2^4=1;break; case2:P2^1=1;P2^2=0;P2^4=1;nongdu=i&0xFC;ab[k][l]=nongdu>>2;l=1;huozai=2;break; default:xiaoyin=0; } } else { addr=i; ab[k][l]=addr;l++; ab[k][l]=month;l++; ab[k][l]=day;l++; ab[k][l]=hour;l++; ab[k][l]=minute;k++;l=0; } }} voidxianshi(){ inti,j,m; if(huozai==0) { j=month/10;i=month%10; P0=j;PA8155=10000000;DELAY(10); P0=i;PA8155=01000000;DELAY(10); j=day/10;i=day%10; P0=j;PA8155=00100000;DELAY(10); P0=i;PA8155=00010000;DELAY(10); j=hour/10;i=hour%10; P0=j;PA8155=00001000;DELAY(10); P0=i;PA8155=00000100;DELAY(10); j=minute/10;i=minute%10; P0=j;PA8155=00000010;DELAY(10); P0=i;PA8155=00000001;DELAY(10);} elseif(huozai==1) { j=addr/10;i=addr%10;m=j/10;j%=10; P0=m;PA8155=00000100;DELAY(10); P0=j;PA8155=00000010;DELAY(10); P0=i;PA8155=00000001;DELAY(10); }elseif(huozai=2){ if(xiaoyin==1)P1^4=0; elseP1^4=1; if(P1^5==1)chaxun2++;chaxun2%=2; if(chaxun2!=1) { j=addr/10;i=addr%10;m=j/10;j%=10; P0=m;PA8155=00000100;DELAY(10); P0=j;PA8155=00000010;DELAY(10); P0=i;PA8155=00000001;DELAY(10); } else { j=nongdu/10;i=nongdu%10;m=j/10;j%=10; P0=m;PA8155=00000100;DELAY(10); P0=j;PA8155=00000010;DELAY(10); P0=i;PA8155=00000001;DELAY(10); } }} voidjiance(){ intmonth_1,day_1,hour_1,min_1,addr_1,nongdu_1; if(P1^6==0)xiaoyin=1; if(P1^7==0) { l=5;k--; min_1=ab[k][l];l--; hour_1=ab[k][l];l--; day_1=ab[k][l];l--; month_1=ab[k][l];l--; addr_1=ab[k][l];l--; nongdu_1=ab[k][l]; if(P3^1==0||chaxun==1) { chaxun++;chaxun%=2; j=month/10;i=month%10; P0=j;PA8155=10000000;DELAY(10); P0=i;PA8155=01000000;DELAY(10); j=day/10;i=day%10; P0=j;PA8155=00100000;DELAY(10); P0=i;PA8155=00010000;DELAY(10); j=hour/10;i=hour%10; P0=j;PA8155=00001000;DELAY(10); P0=i;PA8155=00000100;DELAY(10); j=minute/10;i=minute%10; P0=j;PA8155=00000010;DELAY(10); P0=i;PA8155=00000001;DELAY(10);}else{ if(P1^5==1||chaxun2==1) { chaxun2++;chaxun2%=2; j=addr/10;i=addr%10;m=j/10;j%=10; P0=m;PA8155=00000100;DELAY(10); P0=j;PA8155=00000010;DELAY(10); P0=i;PA8155=00000001;DELAY(10); } else { j=nongdu/10;i=nongdu%10;m=j/10;j%=10; P0=m;PA8155=00000100;DELAY(10); P0=j;PA8155=00000010;DELAY(10); P0=i;PA8155=00000001;DELAY(10); } } if(P2^5==0) { k++;l=0; nongdu_1=ab[k][l];l++; addr_1=ab[k][l];l++; month_1=ab[k][l];l++; day_1=ab[k][l];l++; hour_1=ab[k][l];l++; min_1=ab[k][l]; if(P3^1==0||chaxun==1) { chaxun++;chaxun%=2; j=month/10;i=month%10; P0=j;PA8155=10000000;DELAY(10); P0=i;PA8155=01000000;DELAY(10); j=day/10;i=day%10; P0=j;PA8155=00100000;DELAY(10); P0=i;PA8155A=00010000;DELAY(10); j=hour/10;i=hour%10; P0=j;PA8155=00001000;DELAY(10); P0=i;PA8155=00000100;DELAY(10); j=minute/10;i=minute%10;, P0=j;PA8155=00000010;DELAY(10); P0=i;PA8155=00000001;DELAY(10);}else{ if(P1^5==1||chaxun2==1) { chaxun2++;chaxun2%=2; j=addr/10;i=addr%10;m=j/10;j%=10; P0=m;PA8155=00000100;DELAY(10); P0=j;PA8155=00000010;DELAY(10); P0=i;PA8155=00000001;DELAY(10); } else { j=nongdu/10;i=nongdu%10;m=j/10;j%=10; P0=m;PA8155=00000100;DELAY(10); P0=j;PA8155=00000010;DELAY(10); P0=i;PA8155=00000001;DELAY(10); } } if(P1^6==0||chaxun1==1) { chaxun1++;chaxun1%=2; P1^4=0; }}voiddelay(intx){ inti=0; for(;i<x;i++) }子程序(ds1302.c):#pragmasmall#include<reg52.h>#defineucharunsignedcharsbitds1302_clk=P1^0;sbitds1302_dat=P1^1;sbitds1302_rst=P1^2;sbitACC_1=ACC^1;sbitACC_2=ACC^2;sbitACC_3=ACC^3;sbitACC_4=ACC^4;voidRead(void);voidWrite(void);ucharReadRam_B(ucharaddress);ucharReadRTC_B(ucharaddress);ucharWriteRam_B(ucharaddress,ucharnumber);ucharWriteRTC_B(ucharaddress,ucharnumber);voidReadRam(uchardata*buffer,ucharsize);voidReadRTC(uchardata*buffer,ucharsize);voidWriteRam(uchardata*buffer,ucharsize);voidWriteRTC(uchardata*buffer,ucharsize);ucharReadnin(void);ucharRaedHr(void);ucharReadDay(void);ucharReadMonth(void);voidWriteMin(ucharnumber);voidWriteHr(ucharnumber);voidWriteDay(ucharnumber);voidWriteMonth(ucharnumber);voidWriteContrl(ucharnumber);voidEnableWp(void);voidDisableWp(void);voidWrite(void);{ ACC=address; ACC<<=1; ACC|=82; ds1302_dat=ACC_1; ds1302_clk=1;ds1302_clk=0; ds1302_dat=ACC_2; ds1302_clk=1;ds1302_clk=0; ds1302_dat=ACC_3; ds1302_clk=1;ds1302_clk=0; ds1302_dat=ACC_4; ds1302_clk=1;ds1302_clk=0;}voidRead(void){ ACC_1=ds1302_dat; ds1302_clk=1;ds1302_clk=0; ACC_2=ds1302_dat; ds1302_clk=1;ds1302_clk=0; ACC_3=ds1302_dat; ds1302_clk=1;ds1302_clk=0; ACC_4=ds1302_dat; ds1302_clk=1;ds1302_clk=0;}ucharReadRam_B(ucharaddress){ ds1302_rst=0; ds1302_clk=0; ds1302_rst=1; ACC=address; Write(); ds1302_dat=1; Read(); returnACC;}ucharReadRTC_B(ucharaddress){ ds1302_rst=0; ds1302_clk=0; ds1302_rst=1; ACC=address; Write(); ds1302_dat=1; Read(); returnACC;}ucharWriteRam_B(ucharaddress,usharnumber){ ds1302_clk=0;ds1302_rst=0;ds1302_rst=1; ACC=address; Write(); ACC=number; Write(); ds1302_rst=0; ds1302_rst=1;}ucharWriteRTC_B(ucharaddress,usharnumber){ ds1302_clk=0; ds1302_rst=0;ds1302_rst=1; ACC=address; Write(); ACC=number; Write(); ds1302_rst=0;ds1302_rst=1;}voidReadRam(uchardata*buffer,ucharsize){ registeruchara,b; ds1302_clk=0; ds1302_rst=0; ds1302_rst=1; ACC=0xff; Write(); ds1302_dat=1; for(a=0;a<size;a++) { ACC_1=ds1302_dat; ds1302_clk=1;ds1302_clk=0;ACC_2=ds1302_dat; ds1302_clk=1;ds1302_clk=0;ACC_3=ds1302_dat; ds1302_clk=1;ds1302_clk=0;ACC_4=ds1302_dat; b=ACC; *(buffer+a)=b; ds1302_clk=1;ds1302_clk=0; } ds1302_rst=0;ds1302_clk=1;}voidReadRTC(uchardata*buffer,ucharsize){ registeruchara,b; ds1302_clk=0; ds1302_rst=0; ds1302_rst=1; ACC=0xbf; Write(); ds1302_dat=1; for(a=0;a<size;a++) { ACC_1=ds1302_dat; ds1302_clk=1;ds1302_clk=0;ACC_2=ds1302_dat; ds1302_clk=1;ds1302_clk=0;ACC_3=ds1302_dat; ds1302_clk=1;ds1302_clk=0;ACC_4=ds1302_dat; b=ACC; *(buffer+a)=b; ds1302_clk=1;ds1302_clk=0; } ds1302_rst=0; ds1302_clk=1;}voidWriteRam(uchardata*buffer,ucharsize) { registeruchara; ds1302_clk=0; ds1302_rst=0; ds1302_rst=1; ACC=0xfe; Write(); for(a=0;a<size;a++) { ACC=*(buffer+a) Write(); } ds1302_rst=0; ds1302_clk=1;}voidWriteRTC(uchardata*buffer,ucharsize){ registeruchara; ds1302_clk=0; ds1302_rst=0; ds1302_rst=1; ACC=0xbe; Write(); for(a=0;a<size;a++) { ACC=*(buffer+a) Write(); } ds1302_rst=0; ds1302_clk=1;}ucharReadMin(void){ returnReadRTC_B(0x83);} ucharReadHr(void){ returnReadRTC_B(0x85);} ucharReadDay(void){ returnReadRTC_B(0x87);} ucharReadMonth(void){ returnReadRTC_B(0x89);} voidWriteMin(ucharnumber){ WriteRTC_B(0x82,number);} voidWriteHr(ucharnumber){ WriteRTC_B(0x84,number);} voidWriteDay(ucharnumber){ WriteRTC_B(0x86,number);} voidWriteMin(ucharnumber){ WriteRTC_B(0x82,number);} voidWriteControl(ucharnumber){ WriteRTC_B(0x90,number);} voidDisableWP(void){ WriteRTC_B(0x8E,0);}voidEnableWP(void){ WriteRTC_B(0x8E,0x80);}voidmain(void){ ucharmin,hr,day,month; uchardatabuffer1[32]={32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63}; uchardatabuffer2[8]={45,45,15,13,3,2,01,0}; ReadRTC(buffer2,8); DisableWP() WriteControl(0xaa); WriteRam(buffer1,31); WriteRTC(buffer2,8); min=ReadMin(); hr=ReadHr(); day=ReadDay(); month=ReadMonth(); ACC=0;}子程序(can.c):#defineCRXBYTE[0x8000]//控制寄存器地址#defineCMRXBYTE[0x8001]//命令寄存器地址#defineSRXBYTE[0x8002]//狀態(tài)寄存器地址#defineIRXBYTE[0x8003]//中斷寄存器地址#defineACRXBYTE[0x8004]//驗收碼寄存器地址#defineAMRXBYTE[0x8005]//驗收屏蔽寄存器地址#defineBTR0XBYTE[0x8006]//總線定時寄存器0地址#defineBTR1XBYTE[0x8007]//總線定時寄存器1地址#defineOCRXBYTE[0x8008]//輸出控制寄存器地址#defineTRXBYTE[0x8009]//測試寄存器地址#defineTransBuffer1XBYTE[0x800a]//發(fā)送緩沖器#defineTransBuffer2XBYTE[0x800b]#defineTransBuffer3XBYTE[0x800c]#defineTransBuffer4XBYTE[0x800d]#defineTransBuffer5XBYTE[0x800e]#defineTransBuffer6XBYTE[0x800f]#defineTransBuffer7XBYTE[0x8010]#defineTransBuffer8XBYTE[0x8011]#defineTransBuffer9XBYTE[0x8012]#defineTransBuffer10XBYTE[0x8013]#defineRxBuffer1XBYTE[0x8014]//接收緩沖器#defineRxBuffer2XBYTE[0x8015]#defineRxBuffer3XBYTE[0x8016]#defineRxBuffer4XBYTE[0x8017]#defineRxBuffer5XBYTE[0x8018]#defineRxBuffer6XBYTE[0x8019]#defineRxBuffer7XBYTE[0x801a]#defineRxBuffer8XBYTE[0x801b]#defineRxBuffer9XBYTE[0x801c]#defineRxBuffer10XBYTE[0x801d]#defineCDRXBYTE[0X801f]//時鐘頻分寄存器#include<math.h>#include<ctype.h>#include<MyLib.h>#include<absacc.h>#include<string.h>#include<reg52.h>#include<stdlib.h>#include<stdio.h>#include<intrins.h>voidsend(void);voidreceive(void);voidtemp(void);unsignedinti;unsignedintj;voidInit_CAN(void)//初始化SJA1000主控制器子函數(shù){CR=0x01;
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 專業(yè)加盟合作協(xié)議(2024版)細(xì)則版
- 2025年茶園租賃合同示范文本8篇
- 2024版轎車租借合同:全面保障合同條款版
- 2025年度柴油發(fā)電機及配件全球采購合同范本4篇
- 2024年04月陜西西安銀行金融市場及資產(chǎn)管理業(yè)務(wù)人才招考筆試歷年參考題庫附帶答案詳解
- 專業(yè)空氣能熱泵熱水器安裝工程協(xié)議規(guī)范文本版B版
- 專業(yè)設(shè)備采購銷售協(xié)議:2024版細(xì)則版A版
- 2025年度綠色建筑場調(diào)研與投資評估服務(wù)合同4篇
- 二零二五年度瓷磚行業(yè)供應(yīng)鏈管理合同3篇
- 2025年環(huán)保設(shè)備產(chǎn)品區(qū)域代理合同4篇
- GA 1551.5-2019石油石化系統(tǒng)治安反恐防范要求第5部分:運輸企業(yè)
- 拘留所教育課件02
- 沖壓生產(chǎn)的品質(zhì)保障
- 《腎臟的結(jié)構(gòu)和功能》課件
- 2023年湖南聯(lián)通校園招聘筆試題庫及答案解析
- 上海市徐匯區(qū)、金山區(qū)、松江區(qū)2023屆高一上數(shù)學(xué)期末統(tǒng)考試題含解析
- 護士事業(yè)單位工作人員年度考核登記表
- 天津市新版就業(yè)、勞動合同登記名冊
- 產(chǎn)科操作技術(shù)規(guī)范范本
- 人教版八年級上冊地理全冊單元測試卷(含期中期末試卷及答案)
- 各種焊工證件比較和釋義
評論
0/150
提交評論