Kali ini saya akan share sedikit tentang register pada microprocessor ATMEGA 8535 yang terlibat ketika menjalankan USART. Materi ini saya pelajari di Matakuliah microprocessor dengan dosen Bapak Agus Virgono (AGV) di Telkom University.
USART (Universal Syschronous Asynchronous Received Transmitter) merupakan
salah satu mode komunikasi yang dimiliki oleh Mikrokontroler ATMega8535. USART
memiliki 2 pin (RxD dan TxD) untuk Asynchronous dan 3 bit TxD, RxD, xCK untuk
Synchronous. Untuk mengatur
komunikasi USART dilakukan melalui beberapa register yaitu :
UDR (USART Data Register) adalah register yang paling penting
dalam komunikasi serial ini. Sebab data yang dikirim keluar harus ditempatkan
pada register ini, sedang data yang diterima dari luar dapat dibaca pada
register ini pula. Pada intinya register UDR digunakan sebagai buffer untuk
menyimpan data, baik yang akan dikirim maupun yang akan diterima.
Seperti yang
dapat dilihat pada gambar, sejatinya UDR adalah terdiri dari 2 buah register
terpisah, dengan alamat dan nama yang sama, yakni UDR. Saat kita menulis data
pada UDR ini, maka sebenarnya kita menulis data pada UDR (Write) yang
kemudian USART mem-frame dengan bit-bit frame dan segera akan segera
mengirimkan data tersebut secara serial. Saat kita membaca UDR, sebenarnya
adalah membaca UDR (Read). Data yang diterima secara serial akan disimpan dalam
register tersebut, setelah hadirnya stop bit, maka USART akan membuang frame
dan menyiapkan data pada UDR (Read ) sehingga dapat segera di ambil. Kita dapat
menggunakan instruksi OUT dan IN untuk menulis dan membaca register UDR ini.
UCSRA (USART
Control dan Status Register A)
adalah
register yang penting. Sebegian besar adalah berisi status dari dari proses
transfer komunikasi serial itu sendiri. Adapun penjelasan dari bit-bit tersebut
adalah:
Keterangan
Per-bit:
Bit 7 – RxC:
USART Receive Complete
Bit ini
menjadi tinggi jika ada data yang masih belum diambil atau dibaca di dalam
buffer penerima ( UDR-read ). Bit ini akan otomatis rendah setelah buffer
penerima telah dibaca. Jika Unit Penerima tiba-tiba dimatikan setelah
diaktifkan, maka isi dalam buffer penerima akan langsung dibuang (flushed) dan
bit RxC ini akan langsung dibuat rendah. Bit ini juga bisa mengaktifkan instrupsi
“Receive Complete interrupt ”. Lihat penjelasan tentang bit RxCIE. Untuk
mengetahui penerimaan data jika high (1) ada data baru dan jika low
(0) tidak ada data baru.
Bit 6 – TxC: USART Transmit Complete
Bit ini akan
otomatis tinggi saat semua frame dalam shift-register pengiriman telah digeser
semuanya keluar dan jika tidak ada data baru yang berarada dalam buffer
pengiriman (UDR-write). Bit TxC ini akan otomatis rendah setelah “Transmit
Complete interrupt ” dijalankan, atau dengan meng-clearkan secara manual
dengan cara menulis bit ini dengan nilai 1’s (tinggi). Bit TxC ini pula dapat
membangkitan “Transmit Complete interrupt ”. Lihat penjelasan tentang
bit TxCIE. Untuk mengetahui pengiriman data, jika high (1) ada data baru
dan jika low (0) tidak ada data baru.
Bit 5 – UDRE: USART Data Register
Empty
Bit UDRE ini
adalah untuk menjadikan tanda jika buffer pengiriman (UDR-write) telah siap
untuk diberikan data baru. Bit ini akan bernilai 1 (tinggi) , berarti kita saat
itu boleh menulis UDR. Bit ini dapat membangkitkan UDRIE atau “Data Register
Empty interrupt ”. Lihat penjelasan tentang bit UDRIE. Bit ini setelah reset
langsung bernilai 1, yang berarti siap untuk melakukan pengiriman.
Bit 4 – FE: Frame Error
Bit ini
otomatis menjadi tinggi jika saat menerima data, ternyata ada kesalahan dari
frame yang diterima. Misalnya saat Unit penerima seharusnya menunggu sebuah bit
Stop, ternyata data yang ada adalah 0 (rendah). Bit ini valid setelah kita
membaca UDR. Harap selalu menulis bit ini dengan 0 (rendah ) saat kita sedang
menulis UCSRA.
Bit 3 – DOR: Data OverRun
Bit ini akan
menjadi tinggi saat kondisi overrun terjadi. Kondisi ini terjadi saat
buffer penerima sudah penuh dan berisi 2 data karakter, dimana data karakter
terakhir tidak bisa dipindahkan ke UDR-read, karena tidak kunjung dibaca oleh
user. Bit ini valid setelah kita membaca UDR. Harap selalu menulis bit ini
dengan 0 (rendah ) saat kita sedang menulis UCSRA.
Bit 2 – PE: Parity Error
Bit ini akan
menjadi tinggi saat karakter yang sedang diterima ternyata memiliki format
parity yang salah. Tentu saja hal ini terjadi jika bit parity checking
diaktifkan (UPM1 = 1). Bit ini valid setelah kita membaca UDR. Harap selalu
menulis bit ini dengan 0 (rendah ) saat kita sedang menulis UCSRA.
Bit 1 – U2X: Double the USART
Transmission Speed
Bit ini
hanya berlaku untuk operasi tak sinkron (asynchronous). Jika bit ini kita tulis
dengan 1’s (tinggi) maka baud rate akan menjadi lebih cepat 2 kali. Hal itu
terjadi karena pembagi baud rate yang biasanya membagi 16 kemudian menbagi
menjadi dengan 8 saja. Tulis bit ini dengan 0’s (rendah) untuk oprasi sinkron
(synchronous).
Bit 0 – MPCM: Multi-processor
Communication Mode Bit ini digunakan untuk mode
komunikasi Multi-Prosesor. Saat bit PMCM ini dibuat menjadi tinggi maka setiap
data yang diterima oleh unit penerima, namun tidak dilengkapi dengan informasi
alamat, data yang benar, maka akan diabaikan. Bit ini hanya berguna untuk
penerima, dan bukan untuk pengirim.
UCSRB (USART
Control dan Status Register B)
adalah
register yang penting. Sebagian besar adalah berisi status dari dari proses
transfer komunikasi serial itu sendiri. Adapun penjelasan dari bit-bit tersebut
adalah:
Keterangan
Per-bit:
Bit 7 – RxCIE: RX Complete Interrupt
Enable
Menulis bit
ini menjadi tinggi akan mengaktifkan instrupsi yang berkaitan dengan bit RxC.
"USART Receive Complete interrupt" akan terjadi hanya jika bit
RxCIE ini dan bit I (Global Inteurpt) milik register SREG adalah 1's (Tinggi),
dan ada tingginya bit RxC milik UCSRA.
Bit 6 – TxCIE: Tx Complete Interrupt
Enable
Menulis bit
ini menjadi tinggi maka akan mengaktifkan interupsi pada bit TxC, yakni "USART
Transmit Complete interrupt" yang akan menjalankan interupsi setiap
frame dari data pengiriman selasai dikirim atau dengan kata lain terjadi
interupsi setiap bit TxC menjadi tinggi. Interupsi hanya bisa terjadi jika
sebelumnya bit TxCIE ini di-set tinggi dan bit Global Interupt (I) milik
register UCSRA juga di-set tinggi.
Bit 5 – UDRIE: USART Data Register
Empty Interrupt Enable
Menulis bit
ini menjadi tinggi maka akan mengaktifkan interupsi pada bit UDRE, yakni "Data
Register Empty interrupt" yang akan menjalankan interupsi saat data
pada buffer pengiriman sudah kosong atau dengan kata lain setiap bit UDRE
menjadi tinggi. Interupsi hanya bisa terjadi jika sebelumnya bit UDRIE ini
di-set tinggi dan bit Global Interupt (I) milik register UCSRA juga di-set
tinggi.
Bit 4 – RxEN: Receiver Enable
Agar unit
penerima dari USART dapat bekerja, maka bit RxEN ini harus dibuat tinggi
sebelumnya. Begitu dibuat tinggi, pin RxD akan diputus sebagai standar I/O dan
dihubungkan dengan unit penerima USART ini. Namun jika tiba-tiba bit RxEN ini
dibuat rendah kembali setelah tadinya tinggi, maka unit penerima USART akan
segera menghentikan kerjanya dan membatalkan proses penerimaan data, serta
membersihkan buffer penerimaan, termasuk juga bit FE, DOR, dan PE.
Bit 3 – TxEN: Transmitter Enable
Agar unit
pengirim USART dapat bekerja, maka bit TxEN ini harus dibuat tinggi sebelumnya.
Begitu dibuat tinggi, pin TxD akan diputus dari standar I/O dan dihubungkan
dengan unit pengirim USART ini. Namun jika tiba-tiba bit TxEN ini dibuat rendah
kembali setelah tadinya tinggi, maka unit pengirim USART masih harus
menyelesaikan tugasnya yang terakhir, yakni mengirim data yang tersisa. Baru
kemudian iUnit pengiriman USART akan berhenti dan mengembalikan port TxD
menjadi standar I/O kembali.
Bit 2 – UCSZ2: Character Size
Bit ini
adalah pasangan dari Bit UCSZ1 dan bit UCSZ0 milik register UCSRC, untuk
menentukan jumlah data yang hendak ditransfer.
Bit 1 – RxB8: Receive Data Bit 8
Jika kita
menggunakan format penerimaan data 9-bit maka bit yang terakhir yang diterima
akan ditempatkan pada bit RxB8 ini. Pabrik menyarankan untuk membaca bit ini
terlebih dahulu sebelum membaca 8-bit data lainnya di UDR.
Bit 0 – TxB8: Transmit Data Bit 8
Jika kita menggunakan format pengiriman data 9-bit maka bit yang terakhir yang hendak dikirim ditempatkan pada bit TxB8 ini. Pabrik menyarankan untuk menulis bit ini terlebih dahulu sebelum menulis 8-bit data lainnya di UDR.
Bit 0 – TxB8: Transmit Data Bit 8
Jika kita menggunakan format pengiriman data 9-bit maka bit yang terakhir yang hendak dikirim ditempatkan pada bit TxB8 ini. Pabrik menyarankan untuk menulis bit ini terlebih dahulu sebelum menulis 8-bit data lainnya di UDR.
UCSRC (USART Control dan Status Register C)
regsiter ini adalah register penting, untuk melakukan kontrol pada peralatan USART. Namuin jika tidak menggunakan fungsi USART, maka boleh mengabaikan register ini seperti dalam keadaan resetnya. dengan nilai $96, yang berarti bahwa sedang meggunakannya sebagai UART, Parity-none, 1 stop bit, ukuran data 8-bit (UCSZ2 = 0).
regsiter ini adalah register penting, untuk melakukan kontrol pada peralatan USART. Namuin jika tidak menggunakan fungsi USART, maka boleh mengabaikan register ini seperti dalam keadaan resetnya. dengan nilai $96, yang berarti bahwa sedang meggunakannya sebagai UART, Parity-none, 1 stop bit, ukuran data 8-bit (UCSZ2 = 0).
Catatan
: Register UCSRC adalah berbagi alamat I/O yang sama dengan register
UBBRH. Lihat bagaimana mengakses UBBRH dan UCSRC pada “Accessing UBRRH/UCSRC
Registers” untuk mendapatkan penjelasan lebih lengkap.
Bit 7 – URSEL: Register Select
Saat akan
menulis port $20 maka ada dua register yang akan akan diakses, yang ditentukan
dari D7 dari data yang dituliskan. Jika D7 (MSB) adalah 1 atau datanya diatas
$80 maka sedang menuliskan data pada UCSRC. Sedang jika data yang hendak
dituliskan adalah dibawah $80, maka kita sedang menulis UBRRH. Bagaimana saat
membaca UCSRC, pastikan sebelumnya bit ini dalam keadaan tinggi sebelumnya
membaca lokasi $20 ini.
Bit 6 – UMSEL: USART Mode Select
Bit ini
untuk memilih USART dijadikan mode Taksinkron (Asynchronous) atau
Sinkron (Synchronous).
Bit 5:4 – UPM1:0: Parity Mode
Bit-bit ini adalah untuk menghidupkan pembangkit dan pemeriksa parity. Jika diaktifkan maka akan otomatis membangkitkan parity pada setiap data yang dikirimkan dan akan memeriksa validitas parity dari setiap data yang diterima. Pada Unit penerima kita akan mendapatkan parity yang diterima, kemudian parity tersebut akan dibandingkan dengan status dari UMP0. Jika ternyata tidak cocok, maka bendera bit PE (Parity Error) pada UCSRA akan diaktifkan.
Tabel Pengaturan Parity
Bit 3 – USBS: Stop Bit Select
Dengan membiarkan bit in menjadi 0 maka frame akan dilengkapi dengan Stop-bit selebar 1-bit. Sedang jika bit ini ditulis tinggi, maka bit stop menjadi 2-bit. Stop bit sepanjang 2-bit ini biasanya diperlukan bagi system lain yang terhubung dengan AVR akan memiliki waktu yang cukup untuk memproses data yang baru saja diterimanya, dan sudah berar-benar siap untuk menerima data berikutnya. Unit penerima USART tidak menggunakan bit ini.
Tabel Jumlah Bit Sebagai Bit Stop
Bit 2:1 – UCSZ1:0: Character Size
Menentukan karakter dari data yang hendak dikirimkan dan diterima haruslah merujuk pada bit-bit ini. Yakni bit UCSZ1 dan bit UCSZ0 milik register ini. Ditambah dengan bit UCSZ2 pada register UCSRB.
Tabel Jumlah Data Yang Di Transfer
Bit 0 – UCPOL: Clock Polarity
Bit ini hanya digunakan pada mode Synchronous. Dalam mode ini akan direlasikan antara daya yang diterima dan data yang dikirm dan disinkronkan dengan status dari XCX (synchronous clock). Perhatikan tabel 5 untuk mendalami bagaimana singkronikasi terjadi untuk ujung XCX (edge) yang berbeda dengan mengatur bit UCPOL ini.
Tabel
Pengaturan Polaritas Dalam Mode Synchronous
UBRR (USART Baud Rate Register)
akhirnya
kita mendapati register yang menentukan baud rate dari peralatan USART yang
kita gunakan. Sebagaimana biasanya, baud rate antara AVR (sumber) dan device
target haruslah sama. Hal ini menjadi sangat penting agar tidak ada transfer data
palsu yang isinya diluar kemauan.
Catatan:
Register UBRRH adalah berbagi alamat I/O yang sama dengan register UBBRH. Lihat bagaimana mengakses UBBRH dan UCSRC pada “Accessing UBRRH/UCSRC Registers” untuk mendapatkan penjelasan lebih lengkap.
Bit 15 –
URSEL: Register Select
Bit ini
untuk memilih dalam mengakses alamat port $20. Seperti yang kita tahu bahwa
alamat port ini dimiliki oleh 2 buah regsiter yang berbeda, yakni UBRRH dan
UCSRC. Saat kita hendak menulis UBBRH maka pastikan data bit MSB atau D7 harus
rendah.
Bit 14:12 – Reserved Bits
Bit ini
tidak digunakan saat ini. Mungkin akan digunakan pada produksi berikutnya. Oleh
karena itu kita disarankan untuk tidak menulisnya dengan nilai 1 pada bit-bit
yang tidak digunakan.
Bit 11:0 – UBRR11:0: USART Baud Rate Register
Ini adalah merupakan register 12-bit yang mana berisi dengan pengatur baud rate USART. Register ini adalah pasangan dari register UBBRH dan UBRRL, dimana UBBRL berisi 8-bit LSB (bit-bit terbawah) dan sisanya dimiliki oleh UBRRH. Mengubah nilai dari register ini saat transmisi berlangsung, akan menyebabkan kesalahan transmisi, karena baud rate akan langsung berubah seiring dengan berubahnya nilai dari register ini.
Bit 11:0 – UBRR11:0: USART Baud Rate Register
Ini adalah merupakan register 12-bit yang mana berisi dengan pengatur baud rate USART. Register ini adalah pasangan dari register UBBRH dan UBRRL, dimana UBBRL berisi 8-bit LSB (bit-bit terbawah) dan sisanya dimiliki oleh UBRRH. Mengubah nilai dari register ini saat transmisi berlangsung, akan menyebabkan kesalahan transmisi, karena baud rate akan langsung berubah seiring dengan berubahnya nilai dari register ini.
Tabel UBRRH (USART
Baud Rate Register High)
Keterangan:
Baud
= Baud Rate (bps)
fosc
= Frekuensi Kristal
UBRR
= Nilai UBRR
Jika ada kekeliruan pada materi ini tolong direvisi ya, terimakasih.
betmatik
ReplyDeletekralbet
betpark
tipobet
slot siteleri
kibris bahis siteleri
poker siteleri
bonus veren siteler
mobil ödeme bahis
YYS