2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
अन्यैः CSDN ब्लोगर्-द्वारा लिखिताः ब्लॉग्-पोस्ट्-आदयः अत्यन्तं उत्तमाः सन्ति यदि भवान् 51 microcontroller UART serial port इत्यस्य विषये ज्ञातुम् इच्छति तर्हि भवान् क्लिक् कृत्वा अवलोकयितुं शक्नोति:
असमकालिक संचारसंचारे द्वयोः वर्णयोः (८ बिट्) मध्ये समयान्तरं न निश्चितं भवति, परन्तु एकस्य वर्णस्य अन्तः बिट् मध्ये समयान्तरं नियतं भवति इति तात्पर्यम्स्थावर。
UART क्रमिकसञ्चारः सूक्ष्मनियन्त्रकाणां कृते सर्वाधिकं प्रयुक्ता संचारप्रौद्योगिकी अस्ति ।
संचारस्य मूलप्रकारेषु विभक्तुं शक्यतेसमानान्तर संचारतथाधारावाहिक संचार, २. समानान्तरसञ्चारस्य प्रत्येकं बिट् एकत्रैव प्रसारितं भवति, संचारः बाइट्-मात्रायां साक्षात्कृतः भवति तथापि बहुविधसञ्चाररेखाः बहु संसाधनं गृह्णन्ति, महत् च भवति उदाहरणार्थं, P0 = 0xFF पूर्वं प्रयुक्तं P0 इत्यस्य 8 IO पोर्ट्-मध्ये एकस्मिन् समये मूल्यानि नियुक्तं कुर्वन्तु तथा च एकस्मिन् समये आउटपुट् सिग्नल्स्, यथा 8 लेन्स् ये एकस्मिन् समये 8 काराः पारयितुं शक्नुवन्ति इदं रूपं समानान्तरम् अस्ति ।
क्रमिकसञ्चारः लेन इव भवति, एकस्मिन् समये केवलं एकं वाहनम् एव गन्तुं शक्नोति।यदि 0xFF इत्यादीनां दत्तांशस्य बाइट् प्रसारणीयः भवति, तर्हि कश्चन कारः १-बिट् दत्तांशं आकर्षयति इति कल्पयित्वा, तर्हि तस्य कृते ८ कारानाम् आवश्यकता भविष्यति ।समानकालान्तरम्क्रमेण समानं मार्गं लङ्घयन्तु।
समकालिकसञ्चारस्य अतुल्यकालिकसञ्चारस्य च अन्तरम् : १.
1. समकालिकसञ्चारस्य आवश्यकता भवति यत् ग्राहकान्तस्य घड़ी आवृत्तिः प्रेषकान्तस्य घड़ी आवृत्तिः सह सङ्गता भवति, तथा च प्रेषकान्तः निरन्तरबिटधारा प्रेषयति अतुल्यकालिकसञ्चारस्य ग्राहकान्तघटिकायाः प्रेषकान्तघटिकायाः च समन्वयनस्य आवश्यकता नास्ति .
2. समकालिकसञ्चारस्य उच्चदक्षता भवति, यदा तु अतुल्यकालिकसञ्चारस्य न्यूनदक्षता भवति ।
3. समकालिकसञ्चारः अधिकं जटिलः भवति, तथा च उभयपक्षस्य घण्टानां अनुमतदोषः लघुः भवति, तथा च उभयपक्षस्य घण्टाः निश्चितदोषस्य अनुमतिं दातुं शक्नुवन्ति;
4. समकालिकसञ्चारः केवलं बिन्दुतः बहुबिन्दुपर्यन्तं उपयुक्तः भवति, अतुल्यकालिकसञ्चारस्य उपयोगः बिन्दुतः बिन्दुपर्यन्तं कर्तुं शक्यते ।
STC89C52 सूक्ष्मनियन्त्रके विशेषतया UART धारावाहिकसञ्चारार्थं प्रयुक्तौ पिनौ स्तः, एकः P3^0 अपरः P3^1 च तेषां अन्ये नामानि क्रमशः RXD (Receive Data) तथा TXD (Transmit Data) इति सन्ति तेषां क्रमिक-अन्तरफलकम् इति उच्यते । यथा चित्रे दर्शितम् : १.
सूक्ष्मनियन्त्रकस्य सूक्ष्मनियन्त्रकस्य च मध्ये संचारः : १.
चित्रे GND सूक्ष्मनियन्त्रकप्रणालीविद्युत्प्रदायस्य सन्दर्भभूमिं प्रतिनिधियति । TXD इति क्रमिकसंप्रेषणपिन् इति उच्यते, RXD च क्रमिकग्राहकपिन् इति कथ्यते ।
द्वयोः सूक्ष्मनियन्त्रकयोः मध्ये संवादं कर्तुं प्रथमं विद्युत्प्रदायसन्दर्भः समानः भवितुमर्हति, अतः सूक्ष्मनियन्त्रकद्वयस्य GNDs परस्परं सम्बद्धाः भवेयुःततः MCU 1 इत्यस्य TXD पिनः MCU 2 इत्यस्य RXD पिन इत्यनेन सह सम्बद्धः भवति ।कार्यं यत् MCU 1 MCU 2 इत्यस्मै सूचनां प्रेषयति ।(एषा प्रक्रिया द्वयोः भागयोः विभक्ता अस्ति । MCU 1’sसंकेतं प्रेषयन्तुसूक्ष्मनियन्त्रकेन सह प्रक्रिया 2संकेतं प्राप्नुवन्तिप्रक्रिया) तथैव सूक्ष्मनियन्त्रक 2 इत्यस्य TXD पिनः सूक्ष्मनियन्त्रकस्य 1 इत्यस्य RXD पिन इत्यनेन सह सम्बद्धः भवति ।
एतत् योजनाबद्धचित्रं द्वयोः सूक्ष्मनियन्त्रकयोः परस्परं सूचनां प्रेषयितुं प्राप्तुं च प्रक्रियां प्रतिबिम्बयति ।
यदा सूक्ष्मनियन्त्रकः १ सूक्ष्मनियन्त्रकं २ प्रति दत्तांशं प्रेषयितुम् इच्छति, उदाहरणार्थं, द्विचक्रीयरूपेण व्यक्तं १ 0xE4 दत्तांशं प्रेषयति:
0b1110 0100, सूक्ष्मनियन्त्रकः 1 संचरणस्य आरम्भात् पूर्वं अनेकसमस्यानां सामनां करोति:
मानातु अहं प्रथमं 0 इत्यस्य न्यूनतमं बिट् प्रसारयामि, ततः मया microcontroller 1 इत्यस्य TXD पोर्ट् निम्नस्तरं प्रति सेट् कर्तव्यम् ।
सूक्ष्मनियन्त्रकाः सामान्यतया TTL अथवा CMOS स्तरस्य भवन्ति TTL/CMOS स्तरस्य मानकानां कृते:
२.० वोल्ट् इत्यस्मात् अधिकं किमपि उच्चस्तरीयं भवति, ०.० वोल्ट् इत्यस्मात् न्यूनं किमपि निम्नस्तरं भवति, तदन्तरे यत्किमपि भवति तत् न उच्चस्तरं न च निम्नस्तरं भवति उच्चस्तरीयं, तस्य न्यायः निम्नस्तरः इति अपि भवितुं शक्यते । अतः अस्मिन् क्षेत्रे परिपथं न चालयितुं प्रयतध्वम् । अस्मिन् क्षेत्रे स्थित्वा भवतः उत्पादः हिट् वा मिस् वा कर्तुं शक्नोति। अतः उत्पादानाम् विकासे भवद्भिः यन्त्रस्य दत्तांशपत्रं तथा च परिपथस्य संचालनकाले वोल्टेजस्य जाँचः करणीयः यत् तत् उपयुक्ते वोल्टेजे अस्ति इति सुनिश्चितं भवति
1. टीटीएल स्तरः : १.
उत्पादन उच्चस्तर >2.4V, उत्पादन निम्न स्तर <0.4V। कक्षतापमाने सामान्यनिर्गमस्य उच्चस्तरः ३.५V, उत्पादननिम्नस्तरः ०.२V च भवति । न्यूनतमं इनपुट् उच्चस्तरं निम्नस्तरं च: इनपुट् उच्चस्तरः >=2.0V, इनपुट् निम्नस्तरः <=0.8V, शोरमार्जिनः 0.4V अस्ति ।
2. सीएमओएस स्तरः : १.
1तर्क स्तर वोल्टेजः आपूर्तिवोल्टेजस्य समीपे भवति, 0 तर्कस्तरः च 0V इत्यस्य समीपे भवति । तथा विस्तृतशब्दसहिष्णुता अस्ति।
अतः अत्र प्रश्नः आगच्छति- १.
यदा सूचना न प्रसारिता वा न प्राप्यते तदा सूक्ष्मनियन्त्रकस्य 1 संचरणद्वारं (TXD) उच्चस्तरस्य अथवा निम्नस्तरस्य भविष्यति, अथवा पोर्टस्य वोल्टेजः एतेषां मध्ये भवति MCU 2 इत्यस्य रिसीविंग पोर्ट् वोल्टेज् (RXD) MCU 1 इत्यस्य ट्रांसमिशन पोर्ट् इत्यस्य वोल्टेजस्य अनुसरणं करोति । MCU 1 सूचनां प्रसारयितुं आरभते इति संकेतं कथं सेट् कर्तव्यम् अर्थात् MCU 2 कथं जानाति यत् MCU 1 इत्यनेन तस्मै सूचना प्रसारिता इति? अतः संचारमानकानां मानकीकरणस्य आवश्यकता वर्तते।
चरण 1: निर्धारितं यत् यदा संचारः न भवति तदा सूक्ष्मनियन्त्रकस्य TXD तथा RXD पोर्ट् इत्यस्य वोल्टेजः अधिकः एव तिष्ठति।
Step 2: अधोलिखितरीत्या दत्तांशसञ्चारपद्धतिं मानकीकृत्य स्थापयन्तु
भवान् द्रष्टुं शक्नोति यत् एतत् १ स्टार्ट् बिट्, १ स्टॉप् बिट्, अपि च १ बाइट् प्रसारितव्यं दत्तांशं परिभाषयति, यत् कुलम् ८ बिट् अस्ति ।दश अङ्कीयदत्तांशः。
उपरि उल्लिखितं 0xE4 आँकडानां संचरणं वस्तुतः 0 1110 0100 1. MCU 1 तः MCU 2 यावत् 1 बाइट् आँकडानां संचरणं वस्तुतः 10-बिट् सम्पूर्णं सम्पूर्णं क्रमिकदत्तांशचक्रं कथ्यते
स्टार्ट बिट् तथा स्टॉप बिट् इत्यनेन सह माइक्रोकण्ट्रोलर 2 RXD पोर्ट् यदा निम्नस्तरं पश्यति तदा आँकडानां प्राप्त्यर्थं सज्जतां कर्तुं आरभते । तथैव यदि सूक्ष्मनियन्त्रकः १ १ बाइट् दत्तांशं प्रेषयितुम् इच्छति तर्हि प्रथमं प्रारम्भबिट् ० प्रेषयितुं आवश्यकं (सूक्ष्मनियन्त्रकं २ इत्यस्मै तत् प्राप्तुं सज्जीकर्तुं कथयतु), ततः एकं स्टॉपबिट् १ प्रेषयितुं (सूक्ष्मनियन्त्रकं २ a Bytes of इति वदतु दत्तांशस्थापनं सम्पन्नम्)।दत्तांशसञ्चारकाले च भवतिप्रथमं न्यूनं, ततः उच्चम्आदेशः
Step 3: भवद्भिः 1 बिट् आँकडानां प्रसारणार्थं आवश्यकं समयं एकरूपेण सेट् कर्तव्यम् अस्य समयस्य गतिः baud rate (baud) द्वारा व्यक्ता भवति । १ इत्यस्य बाउड् रेट् इत्यस्य अर्थः १ सेकेण्ड् मध्ये १ बिट् दत्तांशस्य प्रसारणं, ९६०० इत्यस्य बाउड् रेट् इत्यस्य अर्थः १ सेकेण्ड् मध्ये ९६०० बिट् दत्तांशस्य प्रसारणं भवति ।
ततः वयं 1 बिट् प्रसारणस्य परिणामं प्राप्नुमःअवधि=1/बौड., ततः १ सम्पूर्णं दत्तांशचक्रं प्रसारयितुं समयः इति ज्ञातुं शक्यते१०/बौड, २.दत्तांशचक्रयोः मध्ये समयान्तरं मनमाना भवति ।
यदा MCU 1 तथा MCU 2 संकेतान् प्रसारयन्ति तदा सम्यक् संचारं प्राप्तुं तेषां बॉड्-दराः सुसंगताः भवितुम् अर्हन्ति ।
डेस्कटॉप् सङ्गणकस्य आरम्भिकेषु वर्षेषु प्रायः ९-पिन् सीरियल इन्टरफेस् आसीत् एतत् सीरियल इन्टरफेस् RS-232 इन्टरफेस् इति उच्यते, यत् UART संचारणेन सह सम्बद्धम् अस्ति तथापि आधुनिक नोटबुकेषु इदं ९-पिन् सीरियल इन्टरफेस् नास्ति । अतः सूक्ष्मनियन्त्रकैः सह संचारः अधिकतया USB वर्चुअल् सीरियल पोर्ट् इत्यस्य उपयोगं कर्तुं प्रवृत्तः भवति ।
RS232 द्वारा प्रयुक्तः स्तरतर्कः नकारात्मकतर्कः अस्ति, यः TTL/CMOS तर्कस्तरात् भिन्नः अस्ति ।
अतः सङ्गणकस्य ९-पिन् RS232 सीरियल पोर्ट् प्रत्यक्षतया सूक्ष्मनियन्त्रकेन सह सम्बद्धं कर्तुं न शक्यते निम्नलिखितचित्रं पूर्णं कर्तुं स्तररूपान्तरणचिप् MAX232 आवश्यकम् अस्ति ।
RS232 पिन विवरण: 1।
1. वाहकपरिचयः DCD (Data Carrier detection) 2. आँकडा RXD प्राप्तुं 3. आँकडा TXD प्रेषयति
4. डाटा टर्मिनल् DTR (डाटा टर्मिनल् सज्जः अस्ति) 5. संकेतभूमिः 6. आँकडा सज्जः DSR( .Data Set सज्जम् अस्ति)
7. आरटीएस प्रेषयितुं अनुरोधः (प्रेषणार्थं अनुरोधः) 8. CTS( ) क्लियर कृत्वा प्रेषयन्तु।प्रेषयितुं स्पष्टम्) 9. रिंगिंग प्रॉम्प्ट RI ( .ध्वनितम्)
यथा उपरि चित्रे दर्शितं, RS232 इत्यस्य सीरियल पोर्ट् तारिंग् इत्यस्मिन् यावत् पिनः २, ३, ५ च तत्सम्बद्धैः MAX232 पिनैः सह सम्बद्धाः सन्ति तावत् संचारः सम्पन्नः भवितुम् अर्हति
प्रौद्योगिक्याः विकासेन सह उद्योगे RS-232 सीरियल पोर्ट् संचारस्य व्यापकरूपेण उपयोगः भवति तथापि वाणिज्यिकप्रौद्योगिक्याः अनुप्रयोगे USB to UART प्रौद्योगिक्याः शनैः शनैः RS232 सीरियल पोर्ट् इत्यस्य स्थानं गृहीतम् अस्ति
अतः चित्रे दर्शितवत् सूक्ष्मनियन्त्रकस्य सङ्गणकस्य च मध्ये संचारं कथं साक्षात्कर्तव्यम्
अस्मिन् सन्दर्भे एतत् विकासफलकं यत् एतत् कार्यं प्राप्तुं USB to serial port chip CH340T इत्यस्य उपयोगं करोति ।
माइक्रोकंट्रोलर पोर्ट् TXD USB-TX इत्यनेन सह सम्बद्धं कर्तुं जम्पर कैप् इत्यस्य उपयोगं करोति तथा च CH340 pin 4 RXD पोर्ट् इत्यनेन सह सम्बद्धः भवति
माइक्रोकंट्रोलर पोर्ट् RXD USB-RX इत्यनेन सह सम्बद्धं कर्तुं जम्पर कैप् इत्यस्य उपयोगं करोति तथा च CH340 इत्यस्य 3rd pin TXD इत्यनेन सह सम्बद्धं भवति ।
भवान् द्रष्टुं शक्नोति यत् USB-RX तथा CH340 इत्यस्य तृतीयपिन TXD इत्येतयोः मध्ये श्रृङ्खलायां 4148 डायोडः अस्ति, यतः STC89C52 सूक्ष्मनियन्त्रकस्य कार्यक्रमस्य डाउनलोड् करणसमये शीतलप्रारम्भस्य आवश्यकता भवति केवलं प्रथमं download इत्यत्र क्लिक् कृत्वा ततः power on इति क्लिक् कुर्वन्तु ।
तथाकथितशीतप्रारम्भः इदं सूक्ष्मनियन्त्रकस्य स्टार्टअप प्रक्रियां निर्दिशति, यदा तु हॉट् स्टार्ट् इत्यस्य अर्थः अस्ति यत् सूक्ष्मनियन्त्रकः सर्वदा पावर ऑन भवति; शीतप्रारम्भस्य उष्णप्रारम्भस्य च अन्तरं अस्ति यत् शीतप्रारम्भस्य समये सूक्ष्मनियन्त्रकस्य आन्तरिक-रैम्-मध्ये मूल्यानि यादृच्छिकमात्रा भवन्ति, यदा तु उष्ण-प्रारम्भे सूक्ष्मनियन्त्रकस्य आन्तरिक-रैम्-मध्ये मूल्यानि परिवर्तितानि न भविष्यन्ति तथा च प्रारम्भात् पूर्वं यथा भवति तथा एव तिष्ठन्तु।
पावर-ऑन-क्षणे सूक्ष्मनियन्त्रकः प्रथमं ज्ञास्यति यत् कार्यक्रमस्य डाउनलोड् करणं आवश्यकम् अस्ति वा यद्यपि सूक्ष्मनियन्त्रकस्य VCC स्विचेन नियन्त्रितं भवति, यतः CH340T इत्यस्य पिन 3 आउटपुट् पिनः अस्ति, यदि तादृशः नास्ति diode, switch's subsequent microcontroller will fail when the power is off , CH340T इत्यस्य Pin 3 सूक्ष्मनियन्त्रकस्य P3.0 (RXD) पिन इत्यनेन सह सम्बद्धः भवति Current अस्य पिनस्य माध्यमेन अनन्तरं स्टेज सर्किट् मध्ये प्रवहति तदनन्तरं चरणं भवति, यस्य परिणामेण अनन्तरं चरणे एकः निश्चितः वोल्टेजः भवति यद्यपि मूल्यं केवलं प्रायः 2~3V भवति तथापि सामान्यशीतप्रारम्भं प्रभावितं कर्तुं शक्नोति । डायोडं योजयित्वा एकतः संचारं न प्रभावितं करोति, अपरतः एतत् प्रतिकूलप्रभावं निवारयितुं शक्नोति ।
मया सूक्ष्मनियन्त्रकपुस्तिकातः ज्ञातं यत् P3.0 अर्ध-द्विदिशात्मकः IO पोर्ट् अस्ति ।
रक्तपेटीभागः अर्धद्विदिशात्मकः IO पोर्ट् अस्ति , यदा आन्तरिकनिर्गमबिट् निम्नस्तरीयः भवति, तदा NOT गेट् मार्गेण, ट्रांजिस्टरस्य आधारः उच्चस्तरस्य भवति, ट्रांजिस्टरः चालू भवति (CE इत्यस्य द्वयोः अन्तयोः वोल्टेजः संतृप्तचालने प्रायः समानः भवति), तथा च IO port of the microcontroller outputs low level, regardless of the external कुञ्जीस्विचः दबावः वा पॉप अप वा, IO पोर्ट् न्यूनः एव तिष्ठति । बाह्यसंकेतैः न नियन्त्रित इत्यर्थः ।
यदा आन्तरिकं उत्पादनं उच्चस्तरीयं भवति तदा NOT गेट् मार्गेण गमनानन्तरं ट्रांजिस्टरस्य आधारः अत्यन्तं न्यूनः भवति, तथा च ट्रांजिस्टरः चालकः न भवति (CE इत्यस्य उभयान्तेषु प्रतिरोधः अतीव विशालः भवति, तथा च प्रतिरोधः R इत्यस्य तुलने नगण्यः भवति it). यदा बटनं नुदति तदा IO पोर्ट् ग्राउण्ड् भवति, IO पोर्ट् च निम्नस्तरं निर्गच्छति ।
अस्मात् कदा एव इति द्रष्टुं शक्यतेIO पोर्ट् आउटपुट् उच्चस्तरीयं भवतिकदा,IO पोर्ट् इत्यस्य आउटपुट् बाह्यसर्किट् इत्यनेन नियन्त्रितं भवति。
अतः वयं जानीमः यत् P3.0 इत्यस्य आन्तरिकं उत्पादनं सर्वदा अधिकं भवति यदा तस्य उपयोगः RXD पोर्ट् इत्यस्य रूपेण भवति ।P3.1TXD पोर्ट् ट्रांसमीटर् इत्यस्य कार्यं करोति तथा च तस्य...आन्तरिकनिर्गमस्तरःआवश्यकतानुसारं उपरि अधः वा परिवर्तयितुं शक्यते।
तथा: TTL स्तरस्य कृते
आउटपुट टर्मिनल: उच्चस्तर > = 2.4V, निम्न स्तर < = 0.4V;
ग्राहकः अन्तः : उच्चस्तरः >=2.0V, निम्नस्तरः <=0.8V।
COMS स्तरस्य कृते
आउटपुट् टर्मिनल्: उच्चस्तरः = Vcc, निम्नस्तरः = GND (Vcc विद्युत् आपूर्तिवोल्टेजः अस्ति);
प्राप्तः अन्तः : उच्चस्तरः >=0.7Vcc, निम्नस्तरः <=0.2Vcc।
अद्यापि तेषां ग्राहक-अन्तस्य तर्क-स्तरस्य तथा निर्गम-अन्तस्य तर्क-स्तरस्य मध्ये किञ्चित् वोल्टेज-अन्तरम् अस्ति एतत् संकेत-संचरणस्य समये उत्पन्नस्य वोल्टेज-निपातस्य हस्तक्षेपस्य कारणेन अथवा रक्षण-परिपथस्य अस्तित्वस्य कारणेन भवितुम् अर्हति, अतः डायोडं योजयित्वा न भविष्यति cause it.सञ्चारितः वोल्टेजः भ्रान्ततार्किकक्षेत्रे अस्ति।
UART क्रमाङ्कसञ्चारस्य अनुकरणार्थं IO पोर्ट् इत्यस्य उपयोगं कुर्वन्तु
उपरितनकार्यक्रमः : १.
- # include<reg52.h>
-
- sbit PIN_RXD = P3^0; //接受引脚定义
- sbit PIN_TXD = P3^1; //发送引脚定义
-
- bit RxdorTxd = 0; //指示当前状态为接受还是发送
- bit RxdEnd = 0; //接受结束标志
- bit TxdEnd = 0; //发送结束标志
- unsigned char RxdBuf = 0; //接收缓冲区
- unsigned char TxdBuf = 0; //发送缓冲器
-
- void ConfigUART(unsigned int baud);
- void StartTXD(unsigned char dat);
- void StartRXD();
-
-
- void main()
- {
- EA = 1; //打开总中断
- ConfigUART(9600); //配置波特率为9600
-
- while(1)
- {
- while(PIN_RXD); //等待接收引脚出现低电平,即起始位
- StartRXD(); //启动接收
- while(!RxdEnd); //等待接受完成
- StartTXD(RxdBuf +1);//接受到的整数+1后,发送回去
- while(!TxdEnd); //等待发送结束
- }
- }
-
- /* 串口配置函数,baud-通信波特率 */
- void ConfigUART(unsigned int baud)
- {
- TMOD &= 0xF0; //清零T0的控制位
- TMOD |= 0x02; //配置T0为模式2
- TH0 = 256 - (11059200/12)/baud; //计数T0的重载值
- }
-
- /* 启动串行接受 */
- void StartRXD()
- {
- TL0 = 256 - ((256-TH0) >> 1);//接受启动时T0定时为半个波特率周期
- ET0 = 1; //使能T0中断
- TR0 = 1; //启动T0
- RxdEnd = 0; //清零接受结束标志
- RxdorTxd = 0; //设置当前状态为接受 1位发送
-
- }
-
- /* 启动串行发送,dat-待发送字节数据 */
- void StartTXD(unsigned char dat)
- {
- TxdBuf = dat; //待发送数据保存到发送缓冲器
- TL0 = TH0; //T0计算初值为重载值
- ET0 = 1; //使能T0中断
- TR0 = 1; //启动T0
- PIN_TXD = 0; //发送起始位
- TxdEnd = 0; //清零发送结束标志
- RxdorTxd = 1; //设置当前状态为发送
- }
-
- /*T0中断服务函数,处理串行发送和接收 */
- void interruptTimer0() interrupt 1
- {
- static unsigned char cnt = 0;
-
- if(RxdorTxd)
- {
- cnt++;
- if(cnt <= 8) //低位在先一次发送8bit数据位
- {
- PIN_TXD = TxdBuf & 0x01;
- TxdBuf >>= 1;
- }
- else if(cnt == 9) //发送停止位
- {
- PIN_TXD = 1;
- }
- else //发送结束
- {
- cnt = 0; //复位bit计数器
- TR0 = 0; //关闭T0
- TxdEnd = 1; //置发送结束标志
- }
- }
-
- else //串行接收处理
- {
- if(cnt == 0) // 处理起始位
- {
- if(!PIN_RXD) //起始位为0时,清零接收缓冲器,准备接受数据位
- {
- RxdBuf = 0;
- cnt++;
- }
- else //起始位为1(不为0)时,中止接收
- {
- TR0 = 0; //关闭T0
- }
- }
- else if(cnt <= 8) //处理8位数据位
- {
- RxdBuf >>= 1; //低位在先,所以将之前接收的位向右移
- if(PIN_RXD) //接收脚为1时,缓冲器最高位置1
- { //而为0时不处理即仍保持位移后的0
- RxdBuf |= 0x80;
- }
- cnt++;
- }
- else //停止位处理
- {
- cnt = 0; //复位bit计数器
- TR0 = 0; //关闭T0
- if(PIN_RXD) //停止位为1时,方认为数据有效
- {
- RxdEnd = 1; //置接收结束标志
- }
- }
- }
-
- }
कार्य तर्क मानचित्र
अयं कार्यक्रमः UART क्रमाङ्कसञ्चारस्य अनुकरणार्थं timer 0 इत्यस्य उपयोगं करोति ध्यानं कुर्वन्तु यत् एतत् केवलं aअनुकरण कार्यक्रम। एषः कार्यक्रमः सङ्गणकस्य सूक्ष्मनियन्त्रकस्य च मध्ये संचारं कार्यान्वयति । अस्य संचारपरिणामः सङ्गणकेन प्रसारितं दत्तांशं सूक्ष्मनियन्त्रकं प्रति प्रसारयति, सूक्ष्मनियन्त्रकः च दत्तांशं १ योजयित्वा पुनः सङ्गणकं प्रति प्रेषयति एतत् परिणामं प्रदर्शयितुं STC-ISP सह आगच्छति इति क्रमिक-पोर्ट् त्रुटिनिवारणसहायकस्य उपयोगं कुर्वन्तु ।
प्रथमं, पोर्ट् समानानि इति सुनिश्चितं कुर्वन्तु, उपर्युक्तानि चित्राणि सर्वाणि COM3, baud rate 9600, check bit NO, data bit 8, stop bit च 1. (अत्र यत् सेट् कृतम् अस्ति तत् सङ्गणकस्य अस्ति क्रमिक पोर्ट पैरामीटर्स) 1.1.
परिणामं पश्यन्तु : सामान्यसञ्चारः सम्भवःसमयनिर्धारकः 0 क्रमिकसञ्चारस्य अनुकरणं करोति_bilibili_bilibili
अस्य कार्यक्रमस्य कार्यतर्कं संक्षेपेण व्याख्यातव्यम्: forमॉड्यूल प्रेषयन्तुयथा, निम्नतमबिट् तः आरभ्य 0xAA =1010 1010 प्रेषयन्तु
तत् TxdBuf = 1010 1010प्रोग्रामं पश्यन्तु
- if(RxdorTxd)
- {
- cnt++;
- if(cnt <= 8) //低位在先一次发送8bit数据位
- {
- PIN_TXD = TxdBuf & 0x01;
- TxdBuf >>= 1;
- }
- else if(cnt == 9) //发送停止位
- {
- PIN_TXD = 1;
- }
- else //发送结束
- {
- cnt = 0; //复位bit计数器
- TR0 = 0; //关闭T0
- TxdEnd = 1; //置发送结束标志
- }
- }
प्रथमःव्यत्यय cnt = 1 प्रविष्ट करें
PIN_TXD = TxdBuf & 0x01, अर्थात् 1010 1010 0000 0001 इत्यस्य AND इत्यस्य परिणामः तत्सम्बद्धस्तरं सक्षमं कर्तुं प्रेषकपोर्ट् प्रति 0xAA इत्यस्य न्यूनतमं बिट् नियुक्तं कर्तुं भवति । प्रथमवारं व्यत्यय TXD पोर्ट् मध्ये प्रविष्टः वोल्टेजः न्यूनस्तरः इति द्रष्टुं शक्यते, द्वितीयः व्यत्ययः यावत् न भवति तावत् एषा प्रक्रिया निरन्तरं भविष्यति
ततः TxdBuff एकं बिट् दक्षिणतः स्थानान्तरितम् अस्ति, अर्थात् TxdBuf = 0101 0101
तदाद्वितीयवारंव्यवधान
cnt = 2
PIN_TXD = 1 अस्मिन् समये प्रेषकस्य पोर्ट् इत्यस्य स्तरः उच्चस्तरीयः अस्ति
TxdBuf = 0010 1010
अथ तृतीयचतुर्थवारं यावत्८ तम वार
cnt = 8
PIN_TXD = 1 द्वारा निर्धारितः स्तरः उच्चस्तरीयः अस्ति, यः प्रसारितदत्तांशस्य उच्चतमः बिट् 1 अस्ति ।
अस्मिन् समये TxdBuf = 0x00
तदनन्तरम्९ तमः समयःव्यत्ययस्य प्रवेशः ९ तमे व्यत्ययस्य प्रवेशस्य अर्थः अस्ति यत् दत्तांशबिट् इदानीं एव प्रेषिताः सन्ति तथा च स्टॉपबिट् प्रेषयितुं सज्जतायाः समयः अस्ति ।
अतः PIN_TXD = 1, प्रेषक-पोर्ट् प्रत्यक्षतया उच्चस्तरं प्रति नियुक्तः भवति ।
अन्तिमः दशमः व्यत्ययः दर्शयति यत् स्टॉप बिट् अपि प्रेषितः अस्ति ।अतः cnt reset इत्यस्य मूल्यं 0, TR0 इत्यस्य मूल्यं 0, timer 0 निष्क्रियं भवति, TXDEnd = 1, संचरणस्य अन्त्यध्वजः 1 इति सेट् भवति, तथा च सम्पूर्णस्य data frame इत्यस्य संचरणं सम्पन्नं भवति
तदनन्तरम्रिसीविंग मॉड्यूल: वयं पूर्वं 0xAA प्रेषितवन्तः अस्य कार्यस्य कृते तस्य मूल्यं प्राप्तदत्तांशस्य 1 योजनस्य परिणामः अस्ति, अतः प्राप्तदत्तांशः अस्ति: 0xA9 =1010 1001
- void StartRXD()
- {
- TL0 = 256 - ((256-TH0) >> 1);//接受启动时T0定时为半个波特率周期
- ET0 = 1; //使能T0中断
- TR0 = 1; //启动T0
- RxdEnd = 0; //清零接受结束标志
- RxdorTxd = 0; //设置当前状态为0接收 1为发送
-
- }
- else //串行接收处理
- {
- if(cnt == 0) // 处理起始位
- {
- if(!PIN_RXD) //起始位为0时,清零接收缓冲器,准备接受数据位
- {
- RxdBuf = 0;
- cnt++;
- }
- else //起始位为1(不为0)时,中止接收
- {
- TR0 = 0; //关闭T0
- }
- }
- else if(cnt <= 8) //处理8位数据位
- {
- RxdBuf >>= 1; //低位在先,所以将之前接收的位向右移
- if(PIN_RXD) //接收脚为1时,缓冲器最高位置1
- { //而为0时不处理即仍保持位移后的0
- RxdBuf |= 0x80;
- }
- cnt++;
- }
- else //停止位处理
- {
- cnt = 0; //复位bit计数器
- TR0 = 0; //关闭T0
- if(PIN_RXD) //停止位为1时,方认为数据有效
- {
- RxdEnd = 1; //置接收结束标志
- }
- }
- }
द्रष्टुं शक्यते यत् प्रेषण-प्राप्ति-प्रक्रिया वस्तुतः समाना अस्ति दत्तांश-प्राप्त्यर्थं मया प्रथमं व्यत्ययं 0-तम-समयात् आरभ्य मुख्यतया सुलभ-अवगमनाय cnt-सहकार्यं कर्तुं चिह्नितम् ।
यथा चित्रे दर्शितं, भवान् द्रष्टुं शक्नोति यत् 0तमसमयस्य कृते व्यत्ययस्य प्रवेशाय यः समयः भवति सः पूर्वनिर्धारितव्यत्ययसमयस्य अर्धभागः अस्ति यतोहि स्तरसंकेतः 0 वा 1 इति पुष्टिं कुर्वन्, यदि पूर्वतमे स्तरः नमूनाकरणस्य समयः भवितुं शक्नोति त्रुटिः वा हस्तक्षेपः वा, अतः नमूनाङ्कनबिन्दुः सामान्यतया संकेतसञ्चारसमयस्य मध्यबिन्दौ सेट् भवति, तत्रत्यः स्तरसंकेतः च अस्मिन् समये प्रसारितः संकेतः इति गण्यते अतः ग्राहकमॉड्यूलस्य केवलं प्रथमवारं प्रारम्भबिट् प्राप्ते एव स्वस्य व्यत्ययसमयं मूलस्य आर्धं सेट् कर्तुं आवश्यकं भवति, येन तदनन्तरं सर्वे संकेतसङ्ग्रहबिन्दवः केन्द्रबिन्दौ सन्ति इति सुनिश्चितं भवति
पश्यामः यत् प्रोग्राम् कथं सेट् भवति: TL0 = 256 - ((256-TH0) >> 1);
256-TH0 पूर्वनिर्धारित व्यत्ययसमयः यथा वयं पूर्वं उक्तवन्तः, वयं आशास्महे यत् व्यत्ययसमयः पूर्वस्य आधा भागः भविष्यति प्रोग्रामस्य संचालनं द्विचक्रिका 0000 1000 इत्यस्य उदाहरणं गृह्णामः of 8. 1 द्वारा दक्षिणतः स्थानान्तरणं 0000 भवति 0100 = 4. द्रष्टुं शक्यते यत् 1 बिट् द्वारा दक्षिणतः स्थानान्तरणस्य क्रिया मूलमूल्यस्य आर्धं संख्यां परिवर्तयितुं भवति तथैव 1 बिट् इत्यनेन वामभागे स्थानान्तरणस्य परिणामः 0001 0000 =16 भवति, यस्य अर्थः मूलसङ्ख्यायाः 2 इत्यनेन गुणनं भवति
कार्यक्रमप्रक्रियाविश्लेषणं आरभत
यदा RxdorTxd 0 भवति तदा else फंक्शन् प्रविशन्तु अर्थात्० तमः समयः व्यत्ययं प्रविश्य, समयक्षेत्रे ग्राहकमॉड्यूलस्य आरम्भबिन्दुः आरम्भबिट् इत्यस्य मध्यबिन्दुः भवति । प्रथमं निर्धारयन्तु यत् पोर्ट् वोल्टेजः वास्तवतः न्यूनः अस्ति वा, यदि न तर्हि व्यत्ययं निष्क्रियं कुर्वन्तु । किमर्थम् एतत् कुर्वन्ति ?
यतो हि एतत् ग्राहकमॉड्यूलम् अस्ति, अतः RXD इत्यस्य वोल्टेजः सूक्ष्मनियन्त्रकेन न नियन्त्रितः भवति अस्मिन् सन्दर्भे CH340T इत्यस्य TXD टर्मिनल् इत्यस्य वोल्टेजं नियन्त्रयन् सङ्गणकेन नियन्त्रितः भवति । सूक्ष्मनियन्त्रकस्य RXD इत्यस्य वोल्टेजः CH340TXD अन्तस्य अनुसरणं करोति ।
यदि हाँ, cnt++, तर्हि cnt=1। RxdBuf = 0 यावत् रिसीव बफरं स्वच्छं कुर्वन्तु
तदनन्तरम्प्रथमः(वास्तवतः द्वितीयवारं)द्वितीय-श्रेणी interrupt cnt = 1 प्रविष्टं कुर्वन्तु तथा च else if() फंक्शन् प्रविशन्तु यत् बफर मध्ये आँकडानां स्थानान्तरणार्थं चरणे चरणे । तदनन्तरं प्रक्रियायाः विस्तरेण वर्णनं न भविष्यति यदि इच्छुकाः पाठकाः कार्यक्रमतर्कस्य अनुसारं स्वयमेव तस्याः माध्यमेन गन्तुं शक्नुवन्ति। पश्यन्तु यत् प्रथमं न्यून-बिट्-रूपेण ततः उच्च-बिट्-प्रकारेण बफर-चर-मध्ये वास्तवतः दत्तांशः संग्रहीतुं शक्यते वा । यतः पूर्वस्मिन् ब्लॉग् पोस्ट् मध्ये प्रथमं दत्तांशस्य उच्चबिट्स् संग्रहीतुं फंक्शन् left shift मेथड् इत्यस्य उपयोगं करोति । एषः उपायः अन्यस्य कार्यपद्धतेः अत्यन्तं पूरकः अस्ति ।
अस्मिन् क्षणे, प्रोग्रामः UART क्रमाङ्कसञ्चारस्य अनुकरणार्थं टाइमर् 0 इत्यस्य उपयोगं करोति ।
संचारस्य त्रयः मूलप्रकाराः
सरलसञ्चारः - केवलं एकस्य पक्षस्य अन्यपक्षं प्रति सूचनां प्रसारयितुं अनुमतिः अस्ति, अपरः पक्षः सूचनां पुनः प्रेषयितुं न शक्नोति, यथा टीवी-दूरनियन्त्रणं, रेडियोप्रसारणम् इत्यादयः
अर्ध-द्वैध-सञ्चारः : द्वयोः पक्षयोः मध्ये आँकडानां प्रसारणं कर्तुं शक्यते, तथा च केवलम् एकः पक्षः एकस्मिन् समये अन्यपक्षाय प्रेषयितुं शक्नोति यथा, वाकी-टॉकी एकः विशिष्टः अर्ध-द्वैध-सञ्चारः अस्ति उपर्युक्तं क्रमिक-बन्दर-अनुकरण-कार्यक्रमं अर्ध-द्वैध-सञ्चारः इति अपि अवगन्तुं शक्यते
पूर्ण-द्वैध-सञ्चारः : दत्तांशं प्राप्य दत्तांशं प्रेषयितुं शक्यते, तथा च द्वयोः एकत्रैव क्रियते, यथा अस्माकं दूरभाषसञ्चारः ।
IO पोर्ट् अनुकरणं क्रमिकसञ्चारः मूलतः क्रमिकसञ्चारस्य सारं दर्शयति, परन्तु सूक्ष्मनियन्त्रकस्य कार्यक्रमस्य सूक्ष्मनियन्त्रकस्य IO पोर्ट् द्वारा प्राप्तस्य आँकडानां निरन्तरं अन्वेषणं स्कैनिङ्गं च आवश्यकं भवति, यत् सूक्ष्मनियन्त्रकस्य चालनसमयस्य बहुभागं गृह्णाति अतः 51 सूक्ष्मनियन्त्रकस्य अन्तः एकः UART मॉड्यूलः अस्ति, यः स्वयमेव आँकडान् प्राप्तुं शक्नोति केवलं तस्य सम्यक् उपयोगाय भवद्भिः विशेषकार्यपञ्जीकरणं सम्यक् विन्यस्तं कर्तव्यम् ।
SCON क्रमिक नियन्त्रण रजिस्टर
अयं प्रकरणः केवलं मोड् 1 परिचययति, अर्थात् SM1 = 1 तथा SM0 = 0 सेट् मोड् 1. एषः मोड् पूर्वसिमुलेटेड् सीरियल् संचारणे प्रयुक्तः डाटा फ्रेम प्रारूपः अस्ति: 1 स्टार्ट बिट्, 8 डाटा बिट्, 1 स्टॉप बिट् च
एनालॉग् सीरियल् संचारः बाउड् दरं व्यक्तुं टाइमर् 0 इत्यस्य उपयोगं करोति STC89C52 UART मॉड्यूल् बाउड् रेट् ट्रांसमीटर् केवलं टाइमर T1 अथवा टाइमर T2 द्वारा उत्पन्नं कर्तुं शक्यते, परन्तु एनालॉग् संचारात् सर्वथा भिन्नम् अस्ति
टाइमर T2 इत्यस्य उपयोगं कुर्वन् अतिरिक्तविन्यासपञ्जिकाः आवश्यकाः भवन्ति पूर्वनिर्धारितरूपेण, टाइमर् T1 इत्यस्य उपयोगः भवति ।
कार्यक्रमसङ्केतः : १.
- # include<reg52.h>
-
- void ConfigUART(unsigned int baud);
-
- void main()
- {
- EA = 1;
- ConfigUART(9600); //配置波特率为9600
- while(1);
-
- }
- /* 串口配置函数,baud-通信波特率 */
- void ConfigUART(unsigned int baud)
- {
- SCON = 0x50; //0x50= 0101 0000 配置串口为模式1
- TMOD &= 0x0F; //清零T1的控制位
- TMOD |= 0x20; //0x20 = 0010 0000 配置T1的为模式2自动重载模式
- TH1 = 256 - (11059200/12/32)/baud; //计算T1的重载值
- TL1 = TH1; //设置初值
- ET1 = 0; //禁止T1中断
- ES = 1; //启动串口中断
- TR1 = 1; //启动T1定时器
- }
-
- /*UART中断服务函数 */
- void interruptUART() interrupt 4
- {
- if(RI) //接收到字节
- {
- RI = 0; //软件清0接收中断标志
- SBUF = SBUF+1;//接收的数据+1,左边是发送SBUF,右边是接收SBUF
-
- }
- if(TI)
- {
- TI = 0; //软件清0发送中断标志位
- }
-
- }
परिणामानां विडियो अवलोकयन्तु :मॉड्यूल सीरियल communication_bilibili_bilibili सह आगच्छति
सामान्यसञ्चारः विना समस्यां प्राप्तुं शक्यते इति द्रष्टुं शक्यते, ततः कार्यक्रमे प्रासंगिकसामग्रीणां संक्षिप्तं व्याख्यानं दत्तं भवति-
टाइमर् T1 इत्यस्य पुनः लोड् मूल्यस्य गणनासूत्रं अस्ति :
TH1 = TL1 = 256 - स्फटिक दोलक मूल्य/12/2/16/बाउड दर ततः तस्य
व्यत्यय अंतराल समय = क्रिस्टल दोलक मान / 12 / 2 / 16 / baud दर = क्रिस्टल दोलक मूल्य / 12 * (1 / baud दर) * (1 / 32)
स्फटिकदोलकमूल्यं/12 इत्यस्य अर्थः 1 सेकेण्ड् मध्ये यन्त्रचक्रस्य संख्या, (1/baud rate) इत्यस्य अर्थः 1 बिट् आँकडानां प्रसारणार्थं आवश्यकः समयः
Crystal oscillator value/12* (1/baud rate) इत्यस्य अर्थः अस्ति यत् 1 बिट् आँकडानां प्रसारणार्थं कियन्तः मशीनप्रोसेसराः आवश्यकाः सन्ति
तथैव स्फटिकदोलकमूल्यं/12*(1/baud rate)*(1/32) अस्य व्यत्ययस्य समयः = 1 बिट् दत्तांशं प्रसारयितुं समयस्य 1/32
अर्थात् १ बिट् दत्तांशस्य स्थानान्तरणं ३२ समयान्तरेषु विभक्तं भवति ।
गणितं परिणामं ३ अर्थात् व्यत्ययान्तरं = ३ यन्त्रचक्रम् अयं समयः अतीव अल्पः अस्ति ।
यतः क्रमिक-पोर्ट्-मॉड्यूलस्य संकेत-नमूनाकरण-विधिः एकं संकेतं १६ वारं संग्रहीतुं, तथा च ७, ८, ९ वारं संकेतस्तरं बहिः निष्कासयितुं भवति यदि त्रयाणां समयानां मध्ये द्वौ उच्चस्तरौ स्तः तर्हि दत्तांशः इति विचार्यते be 1 .यदि स्तरः द्विवारं 0 भवति तर्हि एषः बिट् 0 इति गण्यते ।एवं प्रकारेण यदि अप्रत्याशितहस्तक्षेपस्य कारणेन दत्तांशः अशुद्धरूपेण पठितः भवति तर्हि अन्तिमदत्तांशस्य सम्यक्त्वस्य गारण्टी अद्यापि दातुं शक्यते
अधोलिखितं चित्रं मुख्यतया व्याख्यानस्य सुविधायै अनुशंसितस्य ब्लॉग् पोस्ट् इत्यस्मात् अस्ति।: बाउड दरस्य गणनासूत्रम्
SMOD इत्येतत् पावर रजिस्टर PCON द्वारा नियन्त्रितं भवति पूर्वनिर्धारितरूपेण SMOD 0. उपर्युक्तसूत्रे तस्य प्रतिस्थापनं पूर्वप्रारम्भिकमूल्यसमाधानसूत्रम् अस्ति ।
TH1 = TL1 = 256 - स्फटिक दोलक मूल्य / 12/2/16 / बाउड दर
यदा रजिस्टरस्य उच्चतमं मूल्यं 1 PCON |= 0x80 इति सेट् भवति अर्थात् SMOD 1 इति सेट् भवति तदा बाउड् दरं दुगुणं कर्तुं शक्यते, यथा उपरि सूत्रे दर्शितम् अस्ति ।
अस्मिन् समये T1 इत्यस्य प्रारम्भिकं मूल्यं भवति : TH1 = TL1 = 256 - स्फटिकदोलकमूल्यं/12/16/बॉडदरः
अत्र एकं वस्तु अवश्यं द्रष्टव्यं यत्: यदि भवान् तरङ्गदरं दुगुणं कर्तुं PCON रजिस्टरस्य उपयोगं कर्तुम् इच्छति तर्हि तस्य प्रारम्भिकमूल्यसूत्रं अद्यापि यथा लिखितव्यम्
TH1 = TL1 = 256 - स्फटिकदोलकमूल्यं/12/2/16/बॉडदरः न्याय्यः अस्ति
वर्तमानपुनर्भारमूल्यं TH1=256 - (11059200/12/32)/baud =256-(11059200/12/16)/(2*buad) baud*2=4800*2=9600, 9600 इत्यस्य मूल्यम् अस्ति वर्तमान कार्यक्रम बाउड दर
यदि भवतः प्रारम्भिकमूल्यं पुनः लोडिंगकम्पनी TH1 = TL1 = 256 - crystal oscillator value/12/16/baud rate इति लिखति, तर्हि तस्य वर्तमान baud rate अद्यापि 4800 अस्ति, 9600 न ।संचारस्य baud दरं 9600 इति सेट् कर्तुं भवन्तः क्रमिकसञ्चारसॉफ्टवेयरस्य उपयोगं कुर्वन्ति तथा च तत् प्रसारयतिपरिणामः गलतः अस्ति。
विडियो पश्यन्तु : १.बौड दर सम्बन्धित_बिलिबिली_बिलिबिली
वयं द्रष्टुं शक्नुमः यत् 9600 इत्यस्य baud rate इत्यस्य समयान्तरं केवलं 3 यन्त्रचक्रं भवति, 14400 इत्यस्य समयान्तरं 2 यन्त्रचक्रं भवति । द्रष्टुं शक्यते यत् यदि तस्य बाउड्-दरः अधिकः भवति तर्हि तस्य समयान्तरं १ यन्त्रचक्रात् न्यूनं भवितुम् अर्हति । अतः अन्यः कार्यविधिः अस्ति, अर्थात् PCON इत्यस्य सर्वोच्चबिट् 1 इति सेट् कृत्वा ConfigUART(9600) इत्यस्य वर्तमानं baud rate 19200 अस्ति, परन्तु तस्य समयान्तरं मूल 9600 baud rate इत्यस्य समयान्तरं भवति, यत् ३ यन्त्रचक्रम् ।
अवश्यं स्मर्तव्यं यत् टाइमर 0 अनुकरणीयक्रमाङ्कसञ्चारस्य तथा क्रमिकसञ्चारमॉड्यूलस्य कार्ये अद्यापि बहवः भेदाः सन्ति क्रमिकसञ्चारमॉड्यूल् एकं निवेशं निर्गमं च सम्पन्नं करोति, तथा च केवलं द्वौ क्रमिकसञ्चारव्यत्ययौ प्रविशति एकवारं RI 1 इति सेट् करणस्य प्रतिक्रियारूपेण, एकवारं TI 1 इति सेट् करणस्य प्रतिक्रियारूपेण, ततः सॉफ्टवेयरद्वारा स्वच्छं कृतम् । संचरणप्रक्रियायां ध्यानं न ददातु, केवलं संचरणं सम्पन्नं वा इति विषये ध्यानं ददातु, संचरणं समाप्तं जातं चेत् संकेतं प्रेषयन्तु ।
क्रमिकसञ्चारस्य प्रेषणग्राहकपरिपथस्य भौतिकरूपेण द्वौ समानौ SBUF रजिस्टरौ स्तः, तेषां पता अपि 0x99 भवति, परन्तु एकः बफरप्रेषणार्थं उपयुज्यते अपरः बफरग्राह्यार्थं च उपयुज्यते द्वौ कक्षौ स्तः, तेषु कक्षद्वयस्य गृहसङ्ख्याः समानाः इति अर्थः । एवं प्रकारेण UART इत्यस्य पूर्ण-द्वैध-सञ्चारः परस्परं हस्तक्षेपं विना प्राप्तुं शक्यते । परन्तु तार्किकरूपेण, प्रत्येकं समये केवलं SBUF संचालितं भवति, तथा च सूक्ष्मनियन्त्रकः स्वयमेव SBUF प्राप्तुं वा SBUF प्रेषयितुं वा चयनं करोति यत् सः तस्मिन् "पठन" अथवा "लेखन" कार्यं करोति वा इति आधारेण
क्रमिकसञ्चारकार्यक्रमस्य मूलभूतपदार्थाः : १.
1. सीरियल पोर्ट् मोड् 1 इत्यत्र विन्यस्यताम् ।
2. टाइमर् T1 इत्येतत् मोड् 2 इत्यत्र विन्यस्यताम्, यत् स्वचालितपुनर्स्थापनमोड् अस्ति ।
3. TH1 तथा TL1 इत्येतयोः प्रारम्भिकमूल्यानां गणनां baud rate इत्यस्य आधारेण कुर्वन्तु यदि आवश्यकं भवति तर्हि baud rate इत्यस्य दुगुणीकरणाय PCON इत्यस्य उपयोगं कर्तुं शक्नुवन्ति ।
4. टाइमर नियन्त्रण रजिस्टर TR1 उद्घाट्य टाइमर् चालयितुं ददातु।नोटः- क्रमाङ्क-पोर्ट्-अन्तरस्य उपयोगं कुर्वन्, टाइमर-1-इत्येतत् इतः परं सक्षमं कर्तुं न शक्यते, यावत् भवान् टाइमर-2-सीरियल-पोर्ट्-इण्टरप्ट्-इत्यस्य उपयोगं न करोति ।