8.19.2009

Address Lines dan Port

Data yang ada didalam sebuah komputer diakses melalui penghantar-penghantar logam yang disebut Address Lines. masing-masing membawa suatu bit dari informasi, sama seperti jalur data (data line). suatu kelompok adress line itu disebutnya Address Bus. seperti dengan data aja, suatu bit dapat on atau off, dan si alamat dapat direpresentasikan diatas kertas dengan 1 dan 0.

si alamat atau pengalamatan jarang direpresentasikan dalam bilangan biner. Mereka hampir selalu ditunjukkan dalam HEX dengan awalan ox. Pengecualian ada dalam diagram skematik. jalur individu (individual lines) dilabeli dengan singkatan menggunakan huruf kapital A, A0,A1,A2,...,dst.

kapan saja suatu variabel atau konstanta diakses dalam bahasa C, address lines yang sesuai diaktifkan. ini tidak jelas kelihatan karena variabel dan konstanta hampir selalu mengacu pada nama. yang jauh lebih mudah bekerja dengan words ketimbang memori si alamat yang tak dikenal. Ada cara yang secara langsung mengakses address dalam bahasa C. bisa dengan konsep yang sangat kuat tentang pointer. anda dapat mempelajarinya dalam tutorial yang disediakan oleh www.learn-c.com.

PC atau komputer sebenarnya memiliki 2 sistem memori. yang satu berhubungan dengan variabel dan konstanta seperti yang disebutkan diatas. nah yang satunya dengan apa yang disebut PORT. port-port menyediakan akses ke perangkat dunia-luar (outside-world devices). printer, serial communications, disk drives, sound cards, dan banyak lainnya, menggunakan port-port untuk monitoring dan control. suatu typical PC menggunakan A0 sampai A9 sebagai dasar pengalamatan port-port, dengan kondisi A9 selalu high. itu artinya bahwa range dari si alamat port itu dari 0x200 sampai 0x3FF

A9 A8   A7 A6 A5 A4   A3 A2 A1 A0

1  0    0  0  0  0    0  0  0  0 = 0X200 minimum port addres

A9 A8   A7 A6 A5 A4   A3 A2 A1 A0

1  1    1  1  1  1    1  1  1  1 = 0X3FF maximum port address

status port read/write tergantung pada keadaan dari jalur input/output Read and Write, dimana memang ditujukan untuk aktifitas port-port. jalur yang dimau harus low. kalau keduanya high, maka port I/O tidak akan bekerja. Jalur input/output Read disingkat IOR, dan jalur input/output Write disingkat IOW. tambahan, suatu jalur yang disebut Address Enable (AEN) harus low untuk akses port.

yang ini sampe sini dulu, gw juga masih baca-baca biar lebih faham,hahay..

next: How to Read a Schematic.

8.16.2009

Boolean Logic

ada pendahuluannya nih..

control dan embedded system kerapkali berhubungan dengan bit individu buat mengatur operasi program yang spesifik atau untuk menentukan kondisi pada bagian suatu sistem. contohnya, suatu bit on untuk lampu atau aktivasi relay atau mungkin bit off untuk mengindikasikan suatu switch/saklar dalam keadaan on.

Boolean Logic, dikembangkan oleh George Boole (1815-1864), sering digunakan untuk menyaring penetapan suatu status sistem atau untuk men-set bit atau meng-clear bit. Boolean logic itu salah satu cara sederhana membandingkan bit-bit individual. ini digunakan oleh yang namanya operators untuk menentukan bagaimana bit-bit itu dibandingkan. mereka mensimulasikan gerbang-gerbang yang akan anda lihat di bagian hardware nanti.(ga tau nantinya kapan :)).

contoh dibawah ini hanya akan menunjukkan 2 input dan 1 output untuk setiap gerbang, walaupun gerbang-gerbang bisa lebih dari itu. gerbang-gerbang logika juga sering dikombinasikan pada bentuk2 logic yang lebih kompleks. suatu mikroprosesor modern dapat mengandung angka-angka besar dengan banyak input dan banyak kombinasi-kombinasi yang bervariasi. untuk catatan, istilah on,high, dan 1 akan dianggap sebagai keadaan logika yang sama, serta off,low, dan 0 merupakan keadaan logika yang sama.

Operator-operator yang sering kali digunakan adalah AND dan OR.
Operasi AND itu dimana jika hanya semua inputnya on, maka oiutputnya akan on. jika salah satu inputnya off, maka outputnya akan off. akan mudah melihat semua kombinasi input2 dengan menggunakan tabel kebenaran seperti dibawah ini.
(disetiap bagian bawah tabel terdapat simbol gerbang logikanya)

AND (all high = high, else low)
Input 1 Input 2 Output
0 0 0
0 1 0
1 0 0
1 1 1
Control And Embedded Systems

sedangkan operasi OR itu kalo salah satu inputnya on, maka outputnya akan on. berikut tabel kebenarannya

OR (any high = high, else low)
Input 1 Input 2 Output
0 0 0
0 1 1
1 0 1
1 1 1
Control And Embedded Systems

ada 2 operasi logika yang sama seperti diatas, tapi dengan output yang di-NOT-kan (inverted output), yaitu NAND dan NOR.

NAND(Not AND) itu jika dan hanya jika semua inputnya on, maka outputnya akan off , dan jika salah satu inputnya off, maka outputnya akan on (kebalikannya dari operasi AND). dan inilah tabel kebenarannya :

NAND (all high = low, else high)
Input 1 Input 2 Output
0 0 1
0 1 1
1 0 1
1 1 0
Control And Embedded Systems

Sedangkan operasi NOR itu jika salah satu inputnya on, maka outputnya akan off (kebalikannya dari OR). Lihat tabel kebenaran :

NOR (any high = low, else high)
Input 1 Input 2 Output
0 0 1
0 1 0
1 0 0
1 1 0
Control And Embedded Systems

untuk operasi OR, ada variasi operasi yang disebut Exclusive OR atau XOR. operasi ini akan mempunyai output on jika input-inputnya berbeda. lihat aja tabel kebenarannya dibawah ini :

XOR (different = high, same = low)
Input 1 Input 2 Output
0 0 0
0 1 1
1 0 1
1 1 0
Control And Embedded Systems

ada satu lagi, operasi INVERTER atau NOT, yang hanya mempunyai satu input, dimana outputnya merupakan kebalikan dari inputnya. contohnya jika inputnya berlogik 1, maka outputnya akan berlogik 0. lihatlah tabel kebenarannya :
NOT (inverter)
Input = 1 Output = 0
Input = 0 Output = 1
Control And Embedded Systems

dalam bahasa C, digunakan simbol-simbol untuk menandakan operasi dari boolean. mereka adalah :

Logical Operation Abbreviation Symbol
And AND &
Or OR |
Exclusive OR XOR ^
Inversion NOT ~

sudah hal biasa dalam bahasa C untuk melakukan operasi logika dalam byte atau word. Kombinasi dari kondisi-kondisi on dan off adalah faktor penting yang menentukan kondisi tersebut, dan penggunaan kombinasi logika sebagai output-output bisa digunakan untuk menyertakan tindakan yang kompleks. untuk menentukan hasil saat operasi logika diterapkan untuk tipe variabel yang lebih besar, sederhanya bekerja dengan satu bit pada waktu yang sama. lihat beberapa contoh dibawah. angka-angkanya dalam hexadesimal dan binari. pada bagian atas contoh dibawah ini menunjukkan ilustrasi hasil operasi dalam notasi heksadesimal dan simbol yang digunakan dalam bahasa C. itu bukanlah pernyataan dalam bahasa C, tapi hanyalah ilustrasi. Contoh pertama menunjukkan bagaimana hasil ditentukan 1 bit pada waktu yang sama.

0xC1 & 0xEA = 0xC0 (maksudnya 0xC1 AND 0xEA = 0xC0)

0xC1 11000001 (kedua nibble itu adalah 1100 = 12 = 0xC dan 0001 = 1 = 0x1)

0xEA 11101010

0xC0 11000000

||||||||_ 1 AND 0 = 0

|||||||__ 0 AND 1 = 0

||||||___ 0 AND 0 = 0

|||||____ 0 AND 1 = 0

||||_____ 0 AND 0 = 0

|||______ 0 AND 1 = 0

||_______ 1 AND 1 = 1

|________ 1 AND 1 = 1

0x00 & 0x86 = 0x00 (maksudnya 0x00 AND 0x86 = 0x00)
0x00 00000000
0x86 10000110
0x00 00000000 (pikirkan, "bit-bit ini akan on hanya jika kedua bit diatasnya

(yang di-AND-kan) on.")

0x88 & 0xE0 = 0x80 (maksudnya 0x88 AND 0xE0 = 0x80)
0x88 10001000
0xE0 11100000
0x80 10000000




0xC0 | 0xAD = 0xED (maksudnya 0xC0 OR 0xAD = 0xED)
0xC0 11000000
0xAD 10101101
0xED 11101101 (ingat, "bit ini akan on jika salah satu
dari bit-bit yang diatasnya on.")

0xAD | 0xEF = 0xEF (maksudnya 0xAD OR 0xEF = 0xEF)
0xAD 10101101
0xEF 11101111
0xEF 11101111

0xC4 | 0x84 = 0xC4 (maksudnya 0xC4 OR 0x84 = 0xC4)
0xC4 11000100
0x84 10000100
0xC4 11000100




0xD4 ^ 0x8D = 0x59 (maksudnya 0xD4 XOR 0x8D = 0x59)
0xD4 11010100
0x8D 10001101
0x59 01011001 (ingat, "bit ini akan on hanya jika kedua bit diatasnya berbeda")

0xDA ^ 0x87 = 0x5D (maksudnya 0xDA XOR 0x87 = 0x5D)
0xDA 11011010
0x87 10000111
0x5D 01011101

0xAB ^ 0xFC = 0x57 (maksudnya 0xAB XOR 0xFC = 0x57)
0xAB 10101011
0xFC 11111100
0x57 01010111




~0x86 = 0x79 (maksudnya 0x86 inverted = 0x79)
0x86 10000110
0x79 01111001 (inget, "bit-bit ini merupakan kebalikan dari bit yang ada diatasnya.")

~0xC1 = 0x3E (maksudnya 0xC1 inverted = 0x3E)
0xC1 11000001
0x3E 00111110

~0xEA = 0x15 (maksudunya 0xEA inverted = 0x15)
0xEA 11101010
0x15 00010101

masih banyak lagi contohnya, coba bikin sendiri :D

sampai sini dulu ah, lanjutin nanti....

next : Adress lines dan port.

8.10.2009

jalur data, bit, nibble, byte, word, binary dan HEX

Jalur yang berfungsi untuk menyalurkan data dari suatu bagian ke bagian lainnya. Berisi 8, 16, 32 jalur sinyal paralel atau lebih yang mempunyai dua arah (bidirectional) dimana CPU dapat membaca dan mengirim data dari/ke memori atau port disebut jalur data. pengelompokan dari jalur data disebut data bus.

setiap jalur data membawa suatu unit data yang disebut bit. satu bit jika dianalogikan sinyal logika berarti on/off. dimana on berarti dianggap ada tegangan 5volt, sedangkan off dianggap bertegangan 0volt.

data dapat direpresentasikan sebagai suatu seri dari satu (1) dan nol (0), dimana 1 berarti bit on dan 0 menandakan bit off. 8 bit yang dikelompokkan menjadi satu disebut byte. suatu byte yang mempunyai nilai=0 direpresentasikan dalam bit menjadi 00000000.. jika byte tidak bernilai 0, maka jika dilihat dalam bentuk bit, akan terdapat kombinasi antara logic 1 dan 0.. dalam bahasa C, suatu byte dianggap suatu character yang disingkat/dikodekan menjadi char.

saat data direpresentasikan sebagai seri dari 1 dan 0, maka bisa dikatakan sebagai suatu sistem bilangan biner (binary), karena cuma pake 2 digit, kalo manusia kan biasanya pake 10 digit, mungkin karena jarinya ada 10 (sotoy mode on)

oh ya, bit paling kiri dari suatu byte disebut most significant bit (msb) , kalo bit paling kanan disebutnya least significan bit (lsb), contoh : suatu byte berisi 01110001, maka msb-nya bernilai "o" dan lsb-nya bernilai "1".

*sebagai catatan, bit itu singkatan dari binary digit.

Bit D7 D6 D5 D4 D3 D2 D1 D0
Baseexponent 27 26 25 24 23 22 21 20
Weights 128 64 32 16 8 4 2 1

dari tabel diatas, ada D0,D1,D2....D7 dimana itu semua adalah urutan dari bit-bit yang jumlahnya merupakan 1 byte (karena ada 8bit), lalu dibawahnya ada Base exponent, yang merupakan pangkat dari setiap bit dimana setiap bit selanjutnya maka pangkatpun bertambah. pangkat-pangkat itu biasanya merupakan suatu bit dalam suatu bilangan biner, bit 0 dibagian paling kanan jadi lsb dan bit 7 dibagian paling kiri jadi msb. sedangkan weight itu nilai desimal dari bit itu sendiri sesuai dengan kenaikan bit.

contohnya, jika ada byte dengan urutan bit 10001110, jadi untuk nilai desimalnya itu tinggal tambahin nilai (weight) yang bitnya logik 1, So, bit ke 7,3,2,1 logik 1 =128+8+4+2=142

CAra menunjukkan angka pada bahasa C itu pake notasi hexadesimal, atau HEX, dimana hex itiu base 16, kalo biner itu kan base 2. kalo 8 bit digabung kan jadinya 1 byte atau octet, sedanngkan 4 bit yang digabung namanya nibble. dalam hex, 0000 itu nilaiya sama kaya biner yaitu 0, tapi kalo 1111 itu dalam hex nilainya "F". lihat tabel

BinaryDecimalHexadecimal BinaryDecimalHexadecimal
0000000 1000088
0001011 1001099
0010022 101010A
0011033 101111B
0100044 110012C
0101055 110113D
0110066 111014E
0111077 111115F

notasi hexadesimal itu sederhana, kan ada 16 digit, jadi pake digit 0 sampai 9, selanjutnya A sampai F untuk 10 sampai 15, sederhana, kan...? wkwkwkwk

kan sebelumnya udah dibahas, 1 byte itu 8 bit, 1 nibble itu 4 bit, jadi bisa dikatakan 1 byte itu ada 2 nibble, bener ga? dan katanya sama dengan bit yang punya lsb dan msb, nibble juga punya, di dalam byte, nibble sebelah kanan dalam byte ( 4 bit pertama) dinamakan least significant nibble. disebut gitu karena itu sama aja 160 . untuk mendapatkan nilai desimal hexa yang dilihat dari nibblenya, ambil nilai nibble, kalikan sesuai pangkatnya dan tambahkan, contoh 9B=(9*16)+(11*1)=155,,

Untuk menunjukkan nilai HEX dalam bahasa C, maka harus diawali "0x"(tanpa tanda kutip), misalkan untuk 9B, maka dalam program bahasa C harus dituliskan 0x9B atau 0x9b, untuk yang ini, notasi besar kecil tidak berpengaruh, walaupun banyak hal sensitiv dalam bahasa C,,(katanyaaa)

niiy ada tabel lagi, tapi yang ini pake bobot dalam notasi HEX (yang sering terlihat dalam operasi C)


Bit D7 D6 D5 D4 D3 D2 D1 D0
Baseexponent 27 26 25 24 23 22 21 20
Weights 128 64 32 16 8 4 2 1
HEX Weights 0x80 0x40 0x20 0x10 0x08 0x04 0x02 0x01

selanjutnya, words , suatu word biasanya 16 bit, D0 sampai D15, dibawah ada tabel pake nama bit dan hubungannya dengan bilangan biner base of 2

Bit
D15
D14
D13
D12
D11
D10
D9
D8
D7
D6
D5
D4
D3
D2
D1
D0
Baseexponent
215
214
213
212
211
210
29
28
27
26
25
24
23
22
21
20

tabel berikutnya menunjukkan bit-bit dengan bobot HEXnya

Bit
D15
D14
D13
D12
D11
D10
D9
D8
HEX Weights
0x8000
0x4000
0x2000
0x1000
0x0800
0x0400
0x0200
0x0100
Bit
D7
D6
D5
D4
D3
D2
D1
D0
HEX Weights
0x0080
0x0040
0x0020
0x0010
0x0008
0x0004
0x0002
0x0001

suatu word dapat dipecah menjadi 4 nibble, yang dapat ditunjukkan dengan memperlihatkan 4 nibble sebagai 4-tempat angka heksadesimal.contohnya, angka desimal 19070 dapat diperlihatkan sebagai angka heksadesimal 0x4A7E.
0x4A7E = (4 * 163) + (10 * 162) + (7 * 161) + (14 * 160)
= ( 4 * 4096) + (10 * 256) + (7 * 16) + (14 * 1)
= 19070.

Dalam bahasa C, word lebih sering disebut integer. suatu integer dapat direpresentasikan dengan angka yang punya range dari nilai negatif atau positif, atau angka yang hanya bernilai positif saja. Dengan kata lain, integer dapat menjadi sign atau unsigned. sign integer dapat bernilai positif atau negatif, sedangkan unsigned integer hanya dapat bernilai positif saja. suatu unsigned integer 16-bit dapat bernilai 0 sampai 65535. biasa disingkat unsigned.

bit 15 digunakan sebagai sign bit pada signed integer. jika bitnya on, maka nilainya negatif. kalo off, nilainya positif. nilai positif punya range dari 0 sampai 32767, sedangkan nilai negatif punya range dari -1 sampai -32767. beberapa contoh apat dilihat dibawah
*catat bahwa nilai signed sama dengan -1*(65536- nilai unsigned). contoh, untuk mendapatkan nilai signed dari unsigned 49151, maka -1*(65536-49151) = -16835

HEX
8000
BFFF
FFFE
FFFF
0000
3FFF
7FFE
7FFF
Signed
-32768
-16385
-0002
-0001
00000
16383
32766
32767
Unsigned
32768
49151
65534
65535
00000
16383
32766
32767

suatu long word umumnya dianggap sebagai 4 byte atau 32 bit. digunakan kalo mau pake angka yang besar. juga ada signed dan unsigned. untuk signed punya range -2,147,483,648 sampai 2,147,483,647. dan untuk yang unsigned punya range dari 0 sampai 4,294,967,295...

sampe sini dulu, udah kebanyakan, tulisannya,,,, nanti dilanjutin lagi..

next : "Boolean Logic"

STARTING..........

tolong baca kalimat ini :
"jika ada pengunjung kurang beruntung melihat blog gw dan menemukan kata atau frase atau kalimat yang kurang nyaman di mata dan atau hati anda serta matahati anda, segeralah tutup blog ini dan periksakan diri anda ke kaca anda"
(kebanyakan kayanya niy kalimat, yaa pokonya begitu dah, dan terima kasih)

sebenernya gw males tulis menulis di blog, tapi gw teringat pembicaraan gw dengan pacar gw yang tersayang untuk posting di blog gw, dan benar, mungkin akan berguna,,thanks honey :-*

jadi gini, karena adanya suatu hal dan lainnya, maka dari sekarang dan seterusnya blog ini hanya akan menampilkan tulisan-tulisan terjemahan yang gw buat tentang pembelajaran pemrograman, yang mana sumbernya bukan pake bahasa indonesia yang baik dan benar, maka dari itu gw coba translate dan gw posting ke blog biar gw mudah mempelajari untuk nantinya, apalagi untuk gw yang masih sangat awam,hehehehe,uhuy....

jika ingin mengetahui sumbernya, kunjungi aja www.learn-c.com,.

oia, jika anda ga sengaja mengunjungi situs diatas, lalu membandingkan terjemahan gw, trus ada salah-salah terjemahan, maap ya, karena gw bukanlah manusia apalagi dewa, gw hanya makhluk Tuhan yang diberi akal dan pikiran serta kesempatan untuk menjalani hidup ini, yang nantinya juga akan kembali pada-Nya. (kata lainnya gw cuma manusia biasa gitu dah) *ceramah mode on*..

lets pray, wish us luck........