Veriler LATCH'a yazıldığında ne olur?


9

PIC16F1947 veri sayfasında buldum:

PORTB kaydının okunması pimlerin durumunu okurken, ona yazmak PORT mandalına yazacaktır. Tüm yazma işlemleri okuma-değiştirme-yazma işlemleridir. Bu nedenle, bir bağlantı noktasına bir yazma işlemi bağlantı noktası pinlerinin okunduğunu, bu değerin değiştirildiğini ve daha sonra PORT veri mandalına (LATB) yazıldığını gösterir.

Ürün yazılımı geliştiricisiyim ve geçmişim Bilgisayar Bilimi. Hala donanım düzeyinde elektronik ve mantığı anlamakta zorlanıyorum. Sadece temel bilgiye sahibim.

Bu yüzden, donanım düzeyinde mandallamak için veri yazıldığında ne olduğunu anlamak istiyorum.

Teşekkür ederim.

Yanıtlar:


19

Mandal bir tür hafızadır.

Resmi kılavuzda kullanalım:

Genel G / Ç Bağlantı Noktası Çalışması

Bir G / Ç pinine biraz yazdığınızda, bu biti Veri Yolu'ndan Veri Kaydına ( D-FlipFlop ) kaydedersiniz . Bu bitin TRISx'i 0 ise, Veri Kaydının Q'sundan gelen veriler G / Ç pininde olacaktır. LATx veya PORTx ile yazmak aynıdır. Aşağıya kırmızı renkte bakın:

Genel G / Ç Bağlantı Noktası Çalışması Yazma

Öte yandan, LATx'ten okumak, PORTx'tan okumaktan farklıdır.

LATx'ten okurken Veri Kaydında ( D-FlipFlop ) ne olduğunu okuyorsunuz . Aşağıdaki resme yeşil renkle bakınız:

Genel G / Ç Bağlantı Noktası Çalışması LATx'i okuyun

PORTx'tan okurken gerçek I / O pin değerini okuyorsunuz. Mavi renkle aşağıya bakın:

Genel G / Ç Bağlantı Noktası Çalışması PORTx Oku

PIC yazma işlemleri için okuma-değiştirme-yazma kullanır ve bu bir sorun olabilir , bu nedenle önlemek için bu gölge yazmacını kullanırlar.


1
Bir yere bağlanmak için +1, (okuma-değiştirme-yazma) [ techref.massmind.org/techref/readmodwrite.htm] sorununu (ve çözümünü) açıkça tanımlar .
davidcary

1
Vay, harika bir açıklama.
abdullah kahraman

Okuma-yazma-yazma sorununun iki bağlantısı kopmuştur.
Randomblue

@ Randomblue, başka bir bağlantı koydum. Diğer bağlantıdaki problem sondaki ']' karakteridir. Tarayıcı adresinizden silin.
Daniel Grillo

6

Okuma-değiştirme-yazma sorunlarından kaçınmak için, bağlantı noktasında ayrı bitleri ayarlamak veya sıfırlamak yerine bağlantı noktasına bir bütün olarak yazmalısınız. RMW sorunu, özellikle çıkış pinleri çok fazla akım alıyorsa veya batıyorsa, biraz ayarlanmamasına veya başka bir çıkışın yüksek olmasına neden olabilir.

Tipik olarak bir "gölge sicili" kullanılır. RMW sorunlarını önlemek için buradaki bitleri ayarlayın veya sıfırlayın ve bağlantı noktasına çıkarın.

Ayrı bir mandal kullanılarak 18F PIC'lerde sorun önlenir, buradaki ayrı bitler cezasız olarak ayarlanabilir ve sıfırlanabilir.


ama sanırım mandal yazmacına yazmak zorunda değilim, çünkü orijinal port kaydına yazmak mandal yazacak, değil mi?
Donotalo

@Donotalo, haklısın. Port kaydına da yazabilirsiniz. Farketmez.
Daniel Grillo

@Donotalo: Bağlantı noktası kaydına yazmak mümkündür, ancak LATx kayıtlarına sahip olan işlemcilerde ve PORTx kayıtlarının salt okunur olarak yazılması alışkanlığı olarak tavsiye ederim. Bir PORTx kaydına "kör" bir mağaza (örneğin PORTB = 0x42;), birinden LATBx'e farklı bir şekilde davranmayacak ve bir PORTx kaydına bir okuma-değiştirme-yazma (örneğin, PORTB | = 0x02;) ya LATx ile aynı olabilir ya da başka bir olasılıkla istenmeyen bir şekilde farklı olabilir. BTW, daha sonraki Microchip öncesi PIC'lerden bazıları LATx teklif etti; Microchip'in bunu yapmak için neden yıllar (on yıllar?) Sürdüğünü bilmiyorum.
supercat

PIC18F çiplerinin (aka "16 bit talimat PIC'leri) LAT kaydına sahip olduğunu belirtmek için +1, PIC16F çiplerinin (aka" 14 bit talimat PIC'leri ") yazılımdaki LAT kaydını simüle etmesini gerektirir (" gölge kayıt ").
davidcary
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.