जब डेटा LATCH को लिखा जाता है तो क्या होता है?


9

यह वही है जो मैंने PIC16F1947 डेटा शीट में पाया है:

PORTB रजिस्टर पढ़ने से पिन की स्थिति पढ़ी जाती है, जबकि इसे लिखने से PORT लैच लिखा जाएगा। सभी लिखने के संचालन को पढ़ने-संशोधित-लिखने के संचालन हैं। इसलिए, पोर्ट को लिखने का तात्पर्य है कि पोर्ट पिन पढ़े जाते हैं, यह मान संशोधित होता है और फिर PORT डेटा लैच (LATB) को लिखा जाता है।

मैं फर्मवेयर डेवलपर हूं और मेरी पृष्ठभूमि कंप्यूटर साइंस है। मैं अभी भी हार्डवेयर स्तर में इलेक्ट्रॉनिक्स और तर्क को समझने के लिए संघर्ष करता हूं। मुझे केवल बुनियादी ज्ञान है।

इसलिए, मैं यह समझना चाहता हूं कि जब हार्डवेयर स्तर में डेटा को लिखा जाता है तो क्या होता है।

धन्यवाद।

जवाबों:


19

कुंडी एक बिट की एक तरह की मेमोरी है।

आइए चित्र का उपयोग मैनुअल में करें:

जेनेरिक I / O पोर्ट ऑपरेशन

जब आप I / O पिन में थोड़ा लिखते हैं, तो आप डेटा बस से डेटा रजिस्टर ( D-FlipFlop ) तक इस बिट को संग्रहीत कर रहे हैं । यदि इस बिट का TRISx 0 है, तो डेटा रजिस्टर के Q से डेटा I / O पिन में होगा। LATx या PORTx में लिखें समान है। नीचे लाल रंग में देखें:

जेनेरिक I / O पोर्ट ऑपरेशन लिखें

दूसरी ओर, LATx से पढ़ा गया PORTx से पढ़ने का तरीका अलग है।

जब आप LATx से पढ़ रहे हैं, तो आप पढ़ रहे हैं कि डेटा रजिस्टर ( D-FlipFlop ) में क्या है । नीचे देखें हरे रंग की तस्वीर:

जेनेरिक I / O पोर्ट ऑपरेशन LATx पढ़ें

और जब आप PORTx से पढ़ते हैं, तो आप वास्तविक I / O पिन मान पढ़ रहे होते हैं। नीचे नीले रंग में देखें:

जेनेरिक I / O पोर्ट ऑपरेशन PORTx पढ़ें

PIC ऑपरेशन लिखने के लिए रीड-मॉडिफाई-राइट का उपयोग करता है और यह एक समस्या हो सकती है , इसलिए वे इससे बचने के लिए इस शैडो रजिस्टर का उपयोग करते हैं।


1
+1 को एक जगह से जोड़ने के लिए स्पष्ट रूप से (पढ़ें-संशोधित-लिखें) [ techref.massmind.org/techref/readmodwrite.htm] समस्या (और समाधान) का वर्णन करता है ।
दाविदिक

1
वाह, बहुत बढ़िया व्याख्या।
अब्दुल्लाह कहरामन

रीड-मॉड-राइट समस्या के दो लिंक टूट गए हैं।
Randomblue

@ Randomblue, मैंने एक और लिंक डाला है। अन्य लिंक के साथ समस्या अंत में '] चरित्र है। बस इसे अपने ब्राउज़र पते में हटा दें।
डैनियल ग्रिलो

6

पढ़ने-संशोधित-लिखने की समस्याओं से बचने के लिए आपको पोर्ट में व्यक्तिगत बिट्स को सेट करने या रीसेट करने के बजाय पोर्ट के रूप में संपूर्ण लिखना चाहिए। आरएमडब्ल्यू समस्या का परिणाम थोड़ा सा सेट नहीं हो सकता है, या एक और आउटपुट उच्च हो सकता है, खासकर अगर आउटपुट पिन बहुत अधिक वर्तमान हो रहा है या डूब रहा है।

एक "शैडो रजिस्टर" आमतौर पर उपयोग किया जाता है। उस में बिट्स सेट या रीसेट करें, और इसे आरएमडब्ल्यू समस्याओं से बचने के लिए पोर्ट पर आउटपुट करें।

एक अलग कुंडी के उपयोग से 18F PIC के साथ समस्या से बचा जाता है, व्यक्तिगत बिट्स को सेट किया जा सकता है और उन्हें अशुद्धता के साथ रीसेट किया जा सकता है।


लेकिन मुझे लगता है कि मैं कुंडी रजिस्टर को लिखने की जरूरत नहीं है, मूल बंदरगाह रजिस्टर करने के लिए लिखने के बाद कुंडी के लिए लिखेंगे?
डोनोटलो

@ डोनोटलो, आप सही कह रहे हैं। आप पोर्ट रजिस्टर में भी लिख सकते हैं। यह मायने नहीं रखता।
डैनियल ग्रिलो

@ डोनटालो: पोर्ट रजिस्टर पर लिखना संभव है, लेकिन मैं उन प्रोसेसर पर एलएटीएक्स रजिस्टरों को लिखने की आदत के मामले के रूप में सुझाऊंगा जो उनके पास हैं, और पर्टेक्स रजिस्टरों को केवल पढ़ने के लिए। PORTx रजिस्टर में एक "ब्लाइंड" स्टोर (जैसे PORTB = 0x42;) एक से LATBx के लिए कोई अलग व्यवहार नहीं करेगा, और एक PORTx रजिस्टर (जैसे PORTB | = xx02) के लिए एक रीड-मॉडिफाई-राइट का प्रभाव पड़ेगा; या तो LATx के समान हो या फिर सबसे अधिक संभावना-अवांछनीय तरीके से भिन्न हो। BTW, कुछ बाद के प्री-माइक्रोचिप PICs ने LATx की पेशकश की; मुझे नहीं पता कि ऐसा करने में माइक्रोचिप को सालों (दशकों?) क्यों लगे।
सुपरकैट

+1 यह उल्लेख करने के लिए कि PIC18F चिप्स (उर्फ "16-बिट इंस्ट्रक्शन PICs) में LAT रजिस्टर है, जबकि PIC16F चिप्स (aka" 14-bit अनुदेश
PIC
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.