Kompetisi menulis Bebaskan Pengetahuan 2010 memasuki putaran kedua. Selamat kepada para peserta yang lolos ke babak selanjutnya. Anda dapat memantau penilaian para peserta untuk putaran pertama di situs Wikimedia Indonesia.
Netiquette
Dari Wikipedia bahasa Indonesia, ensiklopedia bebas
Langsung ke: navigasi, cari
Broom icon.svg
Artikel bertopik teknologi informasi ini perlu dirapikan agar memenuhi standar Wikipedia
Merapikan artikel bisa berupa membagi artikel ke dalam paragraf atau wikifikasi artikel. Setelah dirapikan, tolong hapus pesan ini.
Netiquette merupakan Etika dalam menggunakan Internet. Internet sebagai sebuah kumpulan komunitas, diperlukan aturan yang akan menjadi acuan orang-orang sebagai pengguna Internet, dimana aturan ini menyangkut batasan dan cara yang terbaik dalam memanfaatkan fasilitas Internet.
Sebenarnya Nettiquette in adalah hal yang umum dan biasa, sama hal nya dengan aturan-aturan biasa ketika kita memasuki komunitas umum dimana informasi sangat banyak dan terbuka.
Beberapa aturan yang ada pada Nettiquete ini adalah:
1. Amankan dulu diri anda, maksudnya adalah amankan semua properti anda, mungkin dapat dimulai dari mengamankan komputer anda, dengan memasang anti virus atau personal firewall
2. Jangan terlalu mudah percaya dengan Internet, sehingga anda dengan mudah mengupload data pribadi anda. ada baiknya anda harus betul-betul yakin bahwa alamat URL yang anda tuju adalah dijamin keamanannya.
3. dan yang paling utama adalah, hargai pengguna lain di internet, caranya sederhana yaitu,:
a. jangan biasakan menggunakan informasi secara sembarangan, misalnya plagiat.
b. jangan berusaha untuk mengambil keuntungan secara ilegal dari Internet, misalnya melakukan kejahatan pencurian no kartu kredit
c. jangan berusaha mengganggu privasi orang lain, dengan mencoba mencuri informasi yang sebenarnya terbatas.
d. jangan menggunakan huruf kapital terlalu banyak, karena menyerupai kegiatan teriak-teriak pada komunitas sesungguhnya.
== Pranala luar: ==
* [http://www.pasadon.com/2009/04/netiket-ber-emailnetiket-ber-email/ Netiket E-mail]
{{internet-stub}}
[[Kategori:Budaya Internet]]
[[Kategori:Etika]]
[[ar:أخلاقيات الإنترنت]]
[[bg:Нетикет]]
[[ca:Netiquette]]
[[cs:Netiketa]]
[[da:Netetikette]]
[[de:Netiquette]]
[[en:Netiquette]]
[[eo:Retiketo]]
[[es:Netiquette]]
[[eu:Netiketa]]
[[fi:Netiketti]]
[[fr:Nétiquette]]
[[gl:Netiqueta]]
[[he:נטיקה]]
[[hr:Netiketa]]
[[hu:Netikett]]
[[it:Netiquette]]
[[ja:ネチケット]]
[[ko:네티켓]]
Dari Wikipedia bahasa Indonesia, ensiklopedia bebas
Minggu, 16 Mei 2010
8.051 Tutorial: Instruction Set, Waktu, dan Low-Level Info
8.051 Tutorial: Addressing Modes
An "addressing mode" refers to how you are addressing a given memory location. Sebuah "mode pengalamatan" mengacu pada bagaimana Anda menangani lokasi memori yang diberikan. In summary, the addressing modes are as follows, with an example of each: Singkatnya, mode pengalamatan adalah sebagai berikut, dengan contoh masing-masing:
Immediate Addressing Segera Mengatasi MOV A,#20h MOV A, # 20h
Direct Addressing Direct Addressing MOV A,30h MOV A, 30h
Indirect Addressing Pengalamatan tidak langsung MOV A,@R0 MOV A, @ R0
External Direct Eksternal langsung MOVX A,@DPTR MOVX A, @ DPTR
Code Indirect Kode Langsung MOVC A,@A+DPTR MOVC A, @ A + DPTR
Each of these addressing modes provides important flexibility. Masing-masing mode pengalamatan memberikan fleksibilitas penting.
Immediate Addressing Segera Mengatasi
Immediate addressing is so-named because the value to be stored in memory immediately follows the operation code in memory. Segera menangani begitu-bernama karena nilai yang akan disimpan dalam memori langsung mengikuti kode operasi dalam memori. That is to say, the instruction itself dictates what value will be stored in memory. Artinya, instruksi itu sendiri menentukan nilai apa yang akan disimpan dalam memori.
For example, the instruction: Sebagai contoh, instruksi:
MOV A,#20h MOV A, # 20h
This instruction uses Immediate Addressing because the Accumulator will be loaded with the value that immediately follows; in this case 20 (hexidecimal). Instruksi ini menggunakan Segera Mengatasi karena Akumulator akan dimuat dengan nilai yang segera berikut; dalam hal ini 20 (hexidecimal).
Immediate addressing is very fast since the value to be loaded is included in the instruction. Segera mengatasi sangat cepat karena nilai yang akan diambil termasuk dalam instruksi. However, since the value to be loaded is fixed at compile-time it is not very flexible. Namun, karena nilai yang akan diambil adalah tetap pada saat kompilasi tidak sangat fleksibel.
Direct Addressing Direct Addressing
Direct addressing is so-named because the value to be stored in memory is obtained by directly retrieving it from another memory location. Pengalamatan langsung sangat bernama karena nilai yang akan disimpan dalam memori diperoleh secara langsung mengambilnya dari lokasi memori lain. For example: Sebagai contoh:
MOV A,30h MOV A, 30h
This instruction will read the data out of Internal RAM address 30 (hexidecimal) and store it in the Accumulator. Instruksi ini akan membaca data dari alamat RAM Internal 30 (hexidecimal) dan menyimpannya dalam Akumulator.
Direct addressing is generally fast since, although the value to be loaded isnt included in the instruction, it is quickly accessable since it is stored in the 8051s Internal RAM. Pengalamatan langsung umumnya cepat karena, meskipun nilai yang akan isnt dimuat termasuk dalam instruksi tersebut, maka dengan cepat diakses karena disimpan di RAM Internal 8051s. It is also much more flexible than Immediate Addressing since the value to be loaded is whatever is found at the given address--which may be variable. Hal ini juga jauh lebih fleksibel daripada Segera Mengatasi karena nilai yang akan diambil adalah apa saja yang ditemukan di alamat yang diberikan - yang mungkin variabel.
Also, it is important to note that when using direct addressing any instruction which refers to an address between 00h and 7Fh is referring to Internal Memory. Juga, penting untuk dicatat bahwa bila menggunakan pengalamatan langsung suatu instruksi yang merujuk ke alamat antara 00h dan 7Fh mengacu pada memori internal. Any instruction which refers to an address between 80h and FFh is referring to the SFR control registers that control the 8051 microcontroller itself. Setiap instruksi yang merujuk ke alamat antara 80h dan FFh merujuk ke register kontrol SFR yang mengendalikan mikrokontroler 8051 itu sendiri.
The obvious question that may arise is, "If direct addressing an address from 80h through FFh refers to SFRs, how can I access the upper 128 bytes of Internal RAM that are available on the 8052?" Pertanyaan jelas yang mungkin timbul adalah, "Jika langsung menangani alamat dari 80h sampai FFh mengacu pada SFRs, bagaimana saya bisa mengakses bagian atas 128 byte Internal RAM yang tersedia pada 8052?" The answer is: You cant access them using direct addressing. Jawabannya adalah: Anda tidak bisa mengaksesnya menggunakan pengalamatan langsung. As stated, if you directly refer to an address of 80h through FFh you will be referring to an SFR. Sebagaimana dinyatakan, jika Anda langsung merujuk pada alamat 80h melalui FFh Anda akan mengacu pada suatu SFR. However, you may access the 8052s upper 128 bytes of RAM by using the next addressing mode, "indirect addressing." Namun, Anda dapat mengakses 8052s atas 128 byte RAM dengan menggunakan mode pengalamatan berikutnya, "tidak langsung berbicara."
Indirect Addressing Pengalamatan tidak langsung
Indirect addressing is a very powerful addressing mode which in many cases provides an exceptional level of flexibility. Tidak langsung berbicara adalah mode pengalamatan yang sangat kuat yang dalam banyak kasus memberikan tingkat fleksibilitas yang luar biasa. Indirect addressing is also the only way to access the extra 128 bytes of Internal RAM found on an 8052. Pengalamatan tidak langsung juga satu-satunya cara untuk mengakses 128 byte ekstra dari internal RAM yang ditemukan pada 8052.
Indirect addressing appears as follows: Pengalamatan tidak langsung muncul sebagai berikut:
MOV A,@R0 MOV A, @ R0
This instruction causes the 8051 to analyze the value of the R0 register. Instruksi ini menyebabkan 8051 menganalisa nilai dari register R0. The 8051 will then load the accumulator with the value from Internal RAM which is found at the address indicated by R0. 8051 kemudian akan memuat akumulator dengan nilai dari RAM Internal yang ditemukan di alamat yang ditunjukkan oleh R0.
For example, lets say R0 holds the value 40h and Internal RAM address 40h holds the value 67h. Sebagai contoh, katakanlah 40h R0 memegang nilai dan Internal RAM alamat 40h 67h memegang nilai. When the above instruction is executed the 8051 will check the value of R0. Since R0 holds 40h the 8051 will get the value out of Internal RAM address 40h (which holds 67h) and store it in the Accumulator. Ketika instruksi diatas dieksekusi 8051 akan memeriksa nilai dari R0. Sejak R0 memegang 40h 8051 akan mendapatkan nilai dari Internal RAM alamat 40h (yang memegang 67h) dan menyimpannya dalam Akumulator. Thus, the Accumulator ends up holding 67h. Jadi, Akumulator akhirnya memegang 67h.
Indirect addressing always refers to Internal RAM; it never refers to an SFR. Pengalamatan tidak langsung selalu mengacu pada Internal RAM; itu tidak pernah merujuk pada SFR sebuah. Thus, in a prior example we mentioned that SFR 99h can be used to write a value to the serial port. Jadi, dalam contoh sebelumnya telah disebutkan bahwa SFR 99h dapat digunakan untuk menulis nilai ke port serial. Thus one may think that the following would be a valid solution to write the value 1 to the serial port: Jadi satu mungkin berpikir bahwa berikut akan menjadi solusi yang valid untuk menulis nilai 1 ke port serial:
MOV R0,#99h ;Load the address of the serial port MOV R0, # 99h; Isikan alamat port serial
MOV @R0,#01h ;Send 01 to the serial port -- WRONG!! MOV @ R0, # 01h; Kirim 01 ke port serial - SALAH!
This is not valid. Ini tidak berlaku. Since indirect addressing always refers to Internal RAM these two instructions would write the value 01h to Internal RAM address 99h on an 8052. Karena tidak langsung berbicara selalu mengacu pada RAM Internal ini dua instruksi akan menulis nilai ke alamat 01h 99h RAM Internal pada 8052. On an 8051 these two instructions would produce an undefined result since the 8051 only has 128 bytes of Internal RAM. Pada 8051 ini dua instruksi yang akan menghasilkan hasil yang tidak terdefinisi sejak 8051 hanya memiliki 128 byte RAM Internal.
External Direct Eksternal langsung
External Memory is accessed using a suite of instructions which use what I call "External Direct" addressing. Memori Eksternal diakses menggunakan seperangkat instruksi yang menggunakan apa yang saya sebut "Eksternal langsung" berbicara. I call it this because it appears to be direct addressing, but it is used to access external memory rather than internal memory. Aku menyebutnya ini karena tampaknya langsung menangani, tetapi digunakan untuk mengakses memori eksternal daripada memori internal.
There are only two commands that use External Direct addressing mode: Hanya ada dua perintah yang menggunakan mode pengalamatan langsung Eksternal:
MOVX A,@DPTR MOVX A, @ DPTR
MOVX @DPTR,A MOVX @ DPTR, A
As you can see, both commands utilize DPTR. Seperti yang Anda lihat, baik perintah menggunakan DPTR. In these instructions, DPTR must first be loaded with the address of external memory that you wish to read or write. Dalam petunjuk ini, DPTR pertama harus diisi dengan alamat dari memori eksternal yang ingin Anda membaca atau menulis. Once DPTR holds the correct external memory address, the first command will move the contents of that external memory address into the Accumulator. Setelah DPTR menyimpan alamat memori eksternal benar, perintah pertama akan memindahkan isi dari alamat memori eksternal ke Akumulator. The second command will do the opposite: it will allow you to write the value of the Accumulator to the external memory address pointed to by DPTR. Perintah kedua akan melakukan hal yang sebaliknya: akan memungkinkan Anda untuk menulis nilai Akumulator ke alamat memori eksternal yang ditunjuk oleh DPTR.
External Indirect Eksternal tidak langsung
External memory can also be accessed using a form of indirect addressing which I call External Indirect addressing. Eksternal memori juga dapat diakses dengan menggunakan bentuk tidak langsung berbicara yang saya sebut Eksternal pengalamatan tidak langsung. This form of addressing is usually only used in relatively small projects that have a very small amount of external RAM. Bentuk pengalamatan biasanya hanya digunakan dalam proyek-proyek yang relatif kecil yang mempunyai jumlah yang sangat kecil dari RAM eksternal. An example of this addressing mode is: Contoh mode pengalamatan ini adalah:
MOVX @R0,A MOVX @ R0, A
Once again, the value of R0 is first read and the value of the Accumulator is written to that address in External RAM. Sekali lagi, nilai R0 pertama kali membaca dan nilai Akumulator ditulis ke alamat di Eksternal RAM. Since the value of @R0 can only be 00h through FFh the project would effectively be limited to 256 bytes of External RAM. Karena nilai @ R0 hanya dapat 00h melalui FFh proyek secara efektif akan terbatas pada 256 byte RAM Eksternal. There are relatively simple hardware/software tricks that can be implemented to access more than 256 bytes of memory using External Indirect addressing; however, it is usually easier to use External Direct addressing if your project has more than 256 bytes of External RAM. Ada trik sederhana relatif hardware software / yang dapat diimplementasikan untuk mengakses lebih dari 256 byte memori menggunakan pengalamatan eksternal tidak langsung, namun biasanya lebih mudah untuk menggunakan pengalamatan langsung Eksternal jika proyek Anda memiliki lebih dari 256 byte RAM Eksternal.
Ketika pertama kali diinisialisasi 8051, itu ulang PC untuk 0000h. The 8051 then begins to execute instructions sequentially in memory unless a program instruction causes the PC to be otherwise altered. 8051 kemudian mulai melaksanakan instruksi secara berurutan dalam memori kecuali sebuah instruksi program yang menyebabkan PC yang akan dinyatakan diubah. There are various instructions that can modify the value of the PC; specifically, conditional branching instructions, direct jumps and calls, and "returns" from subroutines. Ada berbagai petunjuk yang dapat mengubah nilai PC; khusus, instruksi bercabang bersyarat, melompat langsung dan panggilan, dan "kembali" dari subrutin. Additionally, interrupts, when enabled, can cause the program flow to deviate from its otherwise sequential scheme. Selain itu, sela, ketika diaktifkan, dapat menyebabkan aliran program untuk menyimpang dari skema yang dinyatakan sekuensial.
Conditional Branching Branching Bersyarat
The 8051 contains a suite of instructions which, as a group, are referred to as "conditional branching" instructions. 8051 suite berisi instruksi yang, sebagai kelompok, yang disebut sebagai "percabangan kondisional" instruksi. These instructions cause program execution to follow a non-sequential path if a certain condition is true. Instruksi ini menyebabkan eksekusi program untuk mengikuti jalan non-sekuensial jika kondisi tertentu adalah benar.
Take, for example, the JB instruction. Ambil, misalnya, instruksi JB. This instruction means "Jump if Bit Set." Instruksi ini berarti "Langsung jika Bit Set." An example of the JB instruction might be: Contoh dari instruksi JB mungkin:
JB 45h,HELLO JB 45h, HELLO
NOP PDN
HELLO: HELLO: .... ....
In this case, the 8051 will analyze the contents of bit 45h. Dalam hal ini, 8051 akan menganalisa isi 45h bit. If the bit is set program execution will jump immediately to the label HELLO, skipping the NOP instruction. Jika bit diatur eksekusi program akan melompat langsung HELLO label, melompat-lompat instruksi NOP. If the bit is not set the conditional branch fails and program execution continues, as usual, with the NOP instruction which follows. Jika bit tidak mengatur cabang bersyarat dan pelaksanaan program gagal terus, seperti biasa, dengan instruksi NOP yang berikut.
Conditional branching is really the fundamental building block of program logic since all "decisions" are accomplished by using conditional branching. Percabangan bersyarat sebenarnya adalah blok bangunan fundamental dari logika program karena semua "keputusan" yang dilakukan dengan menggunakan percabangan bersyarat. Conditional branching can be thought of as the "IF...THEN" structure in 8051 assembly language. Percabangan bersyarat dapat dianggap sebagai JIKA ... MAKA "struktur" dalam bahasa assembly 8051.
An important note worth mentioning about conditional branching is that the program may only branch to instructions located withim 128 bytes prior to or 127 bytes following the address which follows the conditional branch instruction. Catatan penting yang layak disebut tentang percabangan kondisional adalah bahwa program ini hanya dapat belokan ke instruksi 128 byte yang terletak withim sebelum atau 127 byte berikut alamat yang mengikuti instruksi cabang bersyarat. This means that in the above example the label HELLO must be within +/- 128 bytes of the memory address which contains the conditional branching instruction. Ini berarti bahwa dalam contoh di atas label HELLO harus berada dalam + / - 128 byte dari alamat memori yang berisi instruksi percabangan bersyarat.
Direct Jumps Langsung Jumps
While conditional branching is extremely important, it is often necessary to make a direct branch to a given memory location without basing it on a given logical decision. This is equivalent to saying "Goto" in BASIC. Sementara percabangan kondisional sangat penting, seringkali diperlukan untuk cabang langsung ke lokasi memori diberikan tanpa mendasarkan pada keputusan logis tertentu. Hal ini setara dengan mengatakan "Goto" pada BASIC. In this case you want the program flow to continue at a given memory address without considering any conditions. Dalam hal ini Anda ingin aliran program untuk melanjutkan pada alamat memori diberikan tanpa mempertimbangkan kondisi.
This is accomplished in the 8051 using "Direct Jump and Call" instructions. Hal ini dilakukan dalam 8.051 menggunakan "Langsung Langsung dan Call" instruksi. As illustrated in the last paragraph, this suite of instructions causes program flow to change unconditionally. Seperti digambarkan dalam paragraf terakhir, suite ini menyebabkan aliran instruksi program untuk perubahan tanpa syarat.
Consider the example: Perhatikan contoh:
LJMP NEW_ADDRESS LJMP NEW_ADDRESS
. .
. .
. .
NEW_ADDRESS: NEW_ADDRESS: .... ....
The LJMP instruction in this example means "Long Jump." Instruksi LJMP dalam contoh ini berarti "Long Langsung." When the 8051 executes this instruction the PC is loaded with the address of NEW_ADDRESS and program execution continues sequentially from there. Ketika 8051 mengeksekusi instruksi ini PC tersebut dimuat dengan alamat NEW_ADDRESS dan pelaksanaan program terus secara berurutan dari sana.
The obvious difference between the Direct Jump and Call instructions and the conditional branching is that with Direct Jumps and Calls program flow always changes. Perbedaan yang jelas antara langsung dan instruksi Langsung Panggil dan percabangan kondisional adalah bahwa dengan Direct Jumps dan Panggilan aliran program selalu berubah. With conditional branching program flow only changes if a certain condition is true. Dengan aliran program percabangan bersyarat hanya perubahan jika kondisi tertentu adalah benar.
It is worth mentioning that, aside from LJMP, there are two other instructions which cause a direct jump to occur: the SJMP and AJMP commands. Perlu disebutkan bahwa, selain dari LJMP, ada dua instruksi lain yang menyebabkan melompat langsung terjadi: di SJMP dan perintah AJMP. Functionally, these two commands perform the exact same function as the LJMP command--that is to say, they always cause program flow to continue at the address indicated by the command. Secara fungsional, kedua perintah menjalankan fungsi yang sama persis seperti perintah LJMP - artinya, mereka selalu menyebabkan aliran program untuk melanjutkan di alamat yang ditunjukkan oleh perintah. However, SJMP and AJMP differ in the following ways: Namun, SJMP dan AJMP berbeda dalam cara berikut:
* The SJMP command, like the conditional branching instructions, can only jump to an address within +/- 128 bytes of the SJMP command. Perintah SJMP, seperti instruksi percabangan bersyarat, hanya dapat melompat ke alamat dalam + / - 128 byte dari perintah SJMP.
* The AJMP command can only jump to an address that is in the same 2k block of memory as the AJMP command. Perintah AJMP hanya dapat melompat ke alamat yang di blok 2k sama memori perintah AJMP. That is to say, if the AJMP command is at code memory location 650h, it can only do a jump to addresses 0000h through 07FFh (0 through 2047, decimal). Artinya, jika perintah AJMP berada pada lokasi memori 650h kode, hanya dapat melakukan melompat ke alamat 0000h melalui 07FFh (0 melalui 2047, desimal).
You may be asking yourself, "Why would I want to use the SJMP or AJMP command which have restrictions as to how far they can jump if they do the same thing as the LJMP command which can jump anywhere in memory?" Anda mungkin bertanya pada diri sendiri, "Mengapa saya ingin menggunakan perintah SJMP atau AJMP yang memiliki batasan-batasan sejauh mana mereka bisa melompat jika mereka melakukan hal yang sama dengan perintah LJMP yang dapat melompat di mana saja di memori?" The answer is simple: The LJMP command requires three bytes of code memory whereas both the SJMP and AJMP commands require only two. Jawabannya sederhana: Perintah LJMP membutuhkan tiga byte memori kode sedangkan baik dan perintah SJMP AJMP hanya memerlukan dua. Thus, if you are developing an application that has memory restrictions you can often save quite a bit of memory using the 2-byte AJMP/SJMP instructions instead of the 3-byte instruction. Jadi, jika Anda sedang mengembangkan aplikasi yang memiliki pembatasan memori Anda sering dapat menyimpan cukup sedikit memori menggunakan byte AJMP 2 / instruksi SJMP bukan-byte instruksi 3.
Recently, I wrote a program that required 2100 bytes of memory but I had a memory restriction of 2k (2048 bytes). Baru-baru ini, aku menulis sebuah program yang membutuhkan 2100 byte memori, tetapi saya punya kenangan 2k pembatasan (2048 bytes). I did a search/replace changing all LJMPs to AJMPs and the program shrunk downto 1950 bytes. Aku pencarian / mengganti semua perubahan LJMPs untuk AJMPs dan program menyusut downto 1950 byte. Thus, without changing any logic whatsoever in my program I saved 150 bytes and was able to meet my 2048 byte memory restriction. Jadi, tanpa mengubah logika apapun dalam program saya, saya disimpan 150 byte dan mampu memenuhi pembatasan saya 2048 byte memori.
NOTE: Some quality assemblers will actually do the above conversion for you automatically. CATATAN: Beberapa perakit kualitas benar-benar akan melakukan konversi di atas untuk Anda secara otomatis. That is, they'll automatically change your LJMPs to SJMPs whenever possible. Artinya, mereka secara otomatis akan mengubah LJMPs Anda untuk SJMPs bila memungkinkan. This is a nifty and very powerful capability that you may want to look for in an assembler if you plan to develop many projects that have relatively tight memory restrictions. Ini adalah bagus dan sangat kuat kemampuan yang Anda mungkin ingin mencari di assembler jika Anda berencana untuk mengembangkan proyek-proyek banyak yang memiliki memori pembatasan ketat yang relatif.
Direct Calls Panggilan langsung
Another operation that will be familiar to seasoned programmers is the LCALL instruction. This is similar to a "Gosub" command in Basic. Operasi lain yang akan dikenal oleh programmer berpengalaman adalah instruksi LCALL. Hal ini mirip dengan Gosub perintah "" dalam Basic.
When the 8051 executes an LCALL instruction it immediately pushes the current Program Counter onto the stack and then continues executing code at the address indicated by the LCALL instruction. Ketika 8.051 melaksanakan instruksi LCALL segera mendorong Program Counter saat ini ke stack dan kemudian terus melaksanakan kode di alamat yang ditunjukkan oleh instruksi LCALL.
Returns from Routines Pengembalian dari Rutinitas
Another structure that can cause program flow to change is the "Return from Subroutine" instruction, known as RET in 8051 Assembly Language. Struktur lain yang dapat menyebabkan aliran program untuk perubahan adalah Kembali "dari subroutine" instruksi, yang dikenal sebagai Pur dalam Majelis Bahasa 8051.
The RET instruction, when executed, returns to the address following the instruction that called the given subroutine. Instruksi Pur, saat dieksekusi, kembali ke alamat berikut instruksi yang disebut subroutine diberikan. More accurately, it returns to the address that is stored on the stack. Lebih tepatnya, ia mengembalikan ke alamat yang disimpan pada stack.
The RET command is direct in the sense that it always changes program flow without basing it on a condition, but is variable in the sense that where program flow continues can be different each time the RET instruction is executed depending on from where the subroutine was called originally. Perintah Pur langsung dalam arti bahwa hal itu selalu berubah aliran program tanpa mendasarkan pada kondisi, tetapi variabel dalam arti bahwa dimana program terus mengalir bisa berbeda setiap kali instruksi ret dijalankan tergantung dari mana subroutine ini disebut awalnya.
Interrupts Interupsi
An interrupt is a special feature which allows the 8051 to provide the illusion of "multi-tasking," although in reality the 8051 is only doing one thing at a time. Interrupt adalah fitur khusus yang memungkinkan 8.051 untuk memberikan ilusi "multi-tasking," meskipun pada kenyataannya 8051 hanya melakukan satu hal pada suatu waktu. The word "interrupt" can often be subsituted with the word "event." Kata "interupsi" sering bisa subsituted dengan kata "event."
An interrupt is triggered whenever a corresponding event occurs. Interrupt dipicu setiap kali terjadi event terkait. When the event occurs, the 8051 temporarily puts "on hold" the normal execution of the program and executes a special section of code referred to as an interrupt handler. Ketika peristiwa terjadi, sementara 8051 puts "ditahan" eksekusi normal program dan mengeksekusi bagian kode khusus disebut sebagai interrupt handler. The interrupt handler performs whatever special functions are required to handle the event and then returns control to the 8051 at which point program execution continues as if it had never been interrupted. Petugas melakukan apa pun yang mengganggu fungsi-fungsi khusus diperlukan untuk menangani peristiwa itu dan kemudian kembali kontrol ke 8051 di mana titik eksekusi program berlanjut seakan tidak pernah terputus.
The topic of interrupts is somewhat tricky and very important. Topik potong agak rumit dan sangat penting. For that reason, an entire chapter will be dedicated to the topic. Oleh karena itu, satu bab akan didedikasikan untuk topik. For now, suffice it to say that Interrupts can cause program flow to change. Untuk saat ini, cukup dikatakan bahwa interupsi dapat menyebabkan aliran program untuk mengubah.
Ketika pertama kali diinisialisasi 8051, itu ulang PC untuk 0000h. The 8051 then begins to execute instructions sequentially in memory unless a program instruction causes the PC to be otherwise altered. 8051 kemudian mulai melaksanakan instruksi secara berurutan dalam memori kecuali sebuah instruksi program yang menyebabkan PC yang akan dinyatakan diubah. There are various instructions that can modify the value of the PC; specifically, conditional branching instructions, direct jumps and calls, and "returns" from subroutines. Ada berbagai petunjuk yang dapat mengubah nilai PC; khusus, instruksi bercabang bersyarat, melompat langsung dan panggilan, dan "kembali" dari subrutin. Additionally, interrupts, when enabled, can cause the program flow to deviate from its otherwise sequential scheme. Selain itu, sela, ketika diaktifkan, dapat menyebabkan aliran program untuk menyimpang dari skema yang dinyatakan sekuensial.
Conditional Branching Branching Bersyarat
The 8051 contains a suite of instructions which, as a group, are referred to as "conditional branching" instructions. 8051 suite berisi instruksi yang, sebagai kelompok, yang disebut sebagai "percabangan kondisional" instruksi. These instructions cause program execution to follow a non-sequential path if a certain condition is true. Instruksi ini menyebabkan eksekusi program untuk mengikuti jalan non-sekuensial jika kondisi tertentu adalah benar.
Take, for example, the JB instruction. Ambil, misalnya, instruksi JB. This instruction means "Jump if Bit Set." Instruksi ini berarti "Langsung jika Bit Set." An example of the JB instruction might be: Contoh dari instruksi JB mungkin:
JB 45h,HELLO JB 45h, HELLO
NOP PDN
HELLO: HELLO: .... ....
In this case, the 8051 will analyze the contents of bit 45h. Dalam hal ini, 8051 akan menganalisa isi 45h bit. If the bit is set program execution will jump immediately to the label HELLO, skipping the NOP instruction. Jika bit diatur eksekusi program akan melompat langsung HELLO label, melompat-lompat instruksi NOP. If the bit is not set the conditional branch fails and program execution continues, as usual, with the NOP instruction which follows. Jika bit tidak mengatur cabang bersyarat dan pelaksanaan program gagal terus, seperti biasa, dengan instruksi NOP yang berikut.
Conditional branching is really the fundamental building block of program logic since all "decisions" are accomplished by using conditional branching. Percabangan bersyarat sebenarnya adalah blok bangunan fundamental dari logika program karena semua "keputusan" yang dilakukan dengan menggunakan percabangan bersyarat. Conditional branching can be thought of as the "IF...THEN" structure in 8051 assembly language. Percabangan bersyarat dapat dianggap sebagai JIKA ... MAKA "struktur" dalam bahasa assembly 8051.
An important note worth mentioning about conditional branching is that the program may only branch to instructions located withim 128 bytes prior to or 127 bytes following the address which follows the conditional branch instruction. Catatan penting yang layak disebut tentang percabangan kondisional adalah bahwa program ini hanya dapat belokan ke instruksi 128 byte yang terletak withim sebelum atau 127 byte berikut alamat yang mengikuti instruksi cabang bersyarat. This means that in the above example the label HELLO must be within +/- 128 bytes of the memory address which contains the conditional branching instruction. Ini berarti bahwa dalam contoh di atas label HELLO harus berada dalam + / - 128 byte dari alamat memori yang berisi instruksi percabangan bersyarat.
Direct Jumps Langsung Jumps
While conditional branching is extremely important, it is often necessary to make a direct branch to a given memory location without basing it on a given logical decision. This is equivalent to saying "Goto" in BASIC. Sementara percabangan kondisional sangat penting, seringkali diperlukan untuk cabang langsung ke lokasi memori diberikan tanpa mendasarkan pada keputusan logis tertentu. Hal ini setara dengan mengatakan "Goto" pada BASIC. In this case you want the program flow to continue at a given memory address without considering any conditions. Dalam hal ini Anda ingin aliran program untuk melanjutkan pada alamat memori diberikan tanpa mempertimbangkan kondisi.
This is accomplished in the 8051 using "Direct Jump and Call" instructions. Hal ini dilakukan dalam 8.051 menggunakan "Langsung Langsung dan Call" instruksi. As illustrated in the last paragraph, this suite of instructions causes program flow to change unconditionally. Seperti digambarkan dalam paragraf terakhir, suite ini menyebabkan aliran instruksi program untuk perubahan tanpa syarat.
Consider the example: Perhatikan contoh:
LJMP NEW_ADDRESS LJMP NEW_ADDRESS
. .
. .
. .
NEW_ADDRESS: NEW_ADDRESS: .... ....
The LJMP instruction in this example means "Long Jump." Instruksi LJMP dalam contoh ini berarti "Long Langsung." When the 8051 executes this instruction the PC is loaded with the address of NEW_ADDRESS and program execution continues sequentially from there. Ketika 8051 mengeksekusi instruksi ini PC tersebut dimuat dengan alamat NEW_ADDRESS dan pelaksanaan program terus secara berurutan dari sana.
The obvious difference between the Direct Jump and Call instructions and the conditional branching is that with Direct Jumps and Calls program flow always changes. Perbedaan yang jelas antara langsung dan instruksi Langsung Panggil dan percabangan kondisional adalah bahwa dengan Direct Jumps dan Panggilan aliran program selalu berubah. With conditional branching program flow only changes if a certain condition is true. Dengan aliran program percabangan bersyarat hanya perubahan jika kondisi tertentu adalah benar.
It is worth mentioning that, aside from LJMP, there are two other instructions which cause a direct jump to occur: the SJMP and AJMP commands. Perlu disebutkan bahwa, selain dari LJMP, ada dua instruksi lain yang menyebabkan melompat langsung terjadi: di SJMP dan perintah AJMP. Functionally, these two commands perform the exact same function as the LJMP command--that is to say, they always cause program flow to continue at the address indicated by the command. Secara fungsional, kedua perintah menjalankan fungsi yang sama persis seperti perintah LJMP - artinya, mereka selalu menyebabkan aliran program untuk melanjutkan di alamat yang ditunjukkan oleh perintah. However, SJMP and AJMP differ in the following ways: Namun, SJMP dan AJMP berbeda dalam cara berikut:
* The SJMP command, like the conditional branching instructions, can only jump to an address within +/- 128 bytes of the SJMP command. Perintah SJMP, seperti instruksi percabangan bersyarat, hanya dapat melompat ke alamat dalam + / - 128 byte dari perintah SJMP.
* The AJMP command can only jump to an address that is in the same 2k block of memory as the AJMP command. Perintah AJMP hanya dapat melompat ke alamat yang di blok 2k sama memori perintah AJMP. That is to say, if the AJMP command is at code memory location 650h, it can only do a jump to addresses 0000h through 07FFh (0 through 2047, decimal). Artinya, jika perintah AJMP berada pada lokasi memori 650h kode, hanya dapat melakukan melompat ke alamat 0000h melalui 07FFh (0 melalui 2047, desimal).
You may be asking yourself, "Why would I want to use the SJMP or AJMP command which have restrictions as to how far they can jump if they do the same thing as the LJMP command which can jump anywhere in memory?" Anda mungkin bertanya pada diri sendiri, "Mengapa saya ingin menggunakan perintah SJMP atau AJMP yang memiliki batasan-batasan sejauh mana mereka bisa melompat jika mereka melakukan hal yang sama dengan perintah LJMP yang dapat melompat di mana saja di memori?" The answer is simple: The LJMP command requires three bytes of code memory whereas both the SJMP and AJMP commands require only two. Jawabannya sederhana: Perintah LJMP membutuhkan tiga byte memori kode sedangkan baik dan perintah SJMP AJMP hanya memerlukan dua. Thus, if you are developing an application that has memory restrictions you can often save quite a bit of memory using the 2-byte AJMP/SJMP instructions instead of the 3-byte instruction. Jadi, jika Anda sedang mengembangkan aplikasi yang memiliki pembatasan memori Anda sering dapat menyimpan cukup sedikit memori menggunakan byte AJMP 2 / instruksi SJMP bukan-byte instruksi 3.
Recently, I wrote a program that required 2100 bytes of memory but I had a memory restriction of 2k (2048 bytes). Baru-baru ini, aku menulis sebuah program yang membutuhkan 2100 byte memori, tetapi saya punya kenangan 2k pembatasan (2048 bytes). I did a search/replace changing all LJMPs to AJMPs and the program shrunk downto 1950 bytes. Aku pencarian / mengganti semua perubahan LJMPs untuk AJMPs dan program menyusut downto 1950 byte. Thus, without changing any logic whatsoever in my program I saved 150 bytes and was able to meet my 2048 byte memory restriction. Jadi, tanpa mengubah logika apapun dalam program saya, saya disimpan 150 byte dan mampu memenuhi pembatasan saya 2048 byte memori.
NOTE: Some quality assemblers will actually do the above conversion for you automatically. CATATAN: Beberapa perakit kualitas benar-benar akan melakukan konversi di atas untuk Anda secara otomatis. That is, they'll automatically change your LJMPs to SJMPs whenever possible. Artinya, mereka secara otomatis akan mengubah LJMPs Anda untuk SJMPs bila memungkinkan. This is a nifty and very powerful capability that you may want to look for in an assembler if you plan to develop many projects that have relatively tight memory restrictions. Ini adalah bagus dan sangat kuat kemampuan yang Anda mungkin ingin mencari di assembler jika Anda berencana untuk mengembangkan proyek-proyek banyak yang memiliki memori pembatasan ketat yang relatif.
Direct Calls Panggilan langsung
Another operation that will be familiar to seasoned programmers is the LCALL instruction. This is similar to a "Gosub" command in Basic. Operasi lain yang akan dikenal oleh programmer berpengalaman adalah instruksi LCALL. Hal ini mirip dengan Gosub perintah "" dalam Basic.
When the 8051 executes an LCALL instruction it immediately pushes the current Program Counter onto the stack and then continues executing code at the address indicated by the LCALL instruction. Ketika 8.051 melaksanakan instruksi LCALL segera mendorong Program Counter saat ini ke stack dan kemudian terus melaksanakan kode di alamat yang ditunjukkan oleh instruksi LCALL.
Returns from Routines Pengembalian dari Rutinitas
Another structure that can cause program flow to change is the "Return from Subroutine" instruction, known as RET in 8051 Assembly Language. Struktur lain yang dapat menyebabkan aliran program untuk perubahan adalah Kembali "dari subroutine" instruksi, yang dikenal sebagai Pur dalam Majelis Bahasa 8051.
The RET instruction, when executed, returns to the address following the instruction that called the given subroutine. Instruksi Pur, saat dieksekusi, kembali ke alamat berikut instruksi yang disebut subroutine diberikan. More accurately, it returns to the address that is stored on the stack. Lebih tepatnya, ia mengembalikan ke alamat yang disimpan pada stack.
The RET command is direct in the sense that it always changes program flow without basing it on a condition, but is variable in the sense that where program flow continues can be different each time the RET instruction is executed depending on from where the subroutine was called originally. Perintah Pur langsung dalam arti bahwa hal itu selalu berubah aliran program tanpa mendasarkan pada kondisi, tetapi variabel dalam arti bahwa dimana program terus mengalir bisa berbeda setiap kali instruksi ret dijalankan tergantung dari mana subroutine ini disebut awalnya.
Interrupts Interupsi
An interrupt is a special feature which allows the 8051 to provide the illusion of "multi-tasking," although in reality the 8051 is only doing one thing at a time. Interrupt adalah fitur khusus yang memungkinkan 8.051 untuk memberikan ilusi "multi-tasking," meskipun pada kenyataannya 8051 hanya melakukan satu hal pada suatu waktu. The word "interrupt" can often be subsituted with the word "event." Kata "interupsi" sering bisa subsituted dengan kata "event."
An interrupt is triggered whenever a corresponding event occurs. Interrupt dipicu setiap kali terjadi event terkait. When the event occurs, the 8051 temporarily puts "on hold" the normal execution of the program and executes a special section of code referred to as an interrupt handler. Ketika peristiwa terjadi, sementara 8051 puts "ditahan" eksekusi normal program dan mengeksekusi bagian kode khusus disebut sebagai interrupt handler. The interrupt handler performs whatever special functions are required to handle the event and then returns control to the 8051 at which point program execution continues as if it had never been interrupted. Petugas melakukan apa pun yang mengganggu fungsi-fungsi khusus diperlukan untuk menangani peristiwa itu dan kemudian kembali kontrol ke 8051 di mana titik eksekusi program berlanjut seakan tidak pernah terputus.
The topic of interrupts is somewhat tricky and very important. Topik potong agak rumit dan sangat penting. For that reason, an entire chapter will be dedicated to the topic. Oleh karena itu, satu bab akan didedikasikan untuk topik. For now, suffice it to say that Interrupts can cause program flow to change. Untuk saat ini, cukup dikatakan bahwa interupsi dapat menyebabkan aliran program untuk mengubah.
http://www.8052.com/tutaddr.phtml
An "addressing mode" refers to how you are addressing a given memory location. Sebuah "mode pengalamatan" mengacu pada bagaimana Anda menangani lokasi memori yang diberikan. In summary, the addressing modes are as follows, with an example of each: Singkatnya, mode pengalamatan adalah sebagai berikut, dengan contoh masing-masing:
Immediate Addressing Segera Mengatasi MOV A,#20h MOV A, # 20h
Direct Addressing Direct Addressing MOV A,30h MOV A, 30h
Indirect Addressing Pengalamatan tidak langsung MOV A,@R0 MOV A, @ R0
External Direct Eksternal langsung MOVX A,@DPTR MOVX A, @ DPTR
Code Indirect Kode Langsung MOVC A,@A+DPTR MOVC A, @ A + DPTR
Each of these addressing modes provides important flexibility. Masing-masing mode pengalamatan memberikan fleksibilitas penting.
Immediate Addressing Segera Mengatasi
Immediate addressing is so-named because the value to be stored in memory immediately follows the operation code in memory. Segera menangani begitu-bernama karena nilai yang akan disimpan dalam memori langsung mengikuti kode operasi dalam memori. That is to say, the instruction itself dictates what value will be stored in memory. Artinya, instruksi itu sendiri menentukan nilai apa yang akan disimpan dalam memori.
For example, the instruction: Sebagai contoh, instruksi:
MOV A,#20h MOV A, # 20h
This instruction uses Immediate Addressing because the Accumulator will be loaded with the value that immediately follows; in this case 20 (hexidecimal). Instruksi ini menggunakan Segera Mengatasi karena Akumulator akan dimuat dengan nilai yang segera berikut; dalam hal ini 20 (hexidecimal).
Immediate addressing is very fast since the value to be loaded is included in the instruction. Segera mengatasi sangat cepat karena nilai yang akan diambil termasuk dalam instruksi. However, since the value to be loaded is fixed at compile-time it is not very flexible. Namun, karena nilai yang akan diambil adalah tetap pada saat kompilasi tidak sangat fleksibel.
Direct Addressing Direct Addressing
Direct addressing is so-named because the value to be stored in memory is obtained by directly retrieving it from another memory location. Pengalamatan langsung sangat bernama karena nilai yang akan disimpan dalam memori diperoleh secara langsung mengambilnya dari lokasi memori lain. For example: Sebagai contoh:
MOV A,30h MOV A, 30h
This instruction will read the data out of Internal RAM address 30 (hexidecimal) and store it in the Accumulator. Instruksi ini akan membaca data dari alamat RAM Internal 30 (hexidecimal) dan menyimpannya dalam Akumulator.
Direct addressing is generally fast since, although the value to be loaded isnt included in the instruction, it is quickly accessable since it is stored in the 8051s Internal RAM. Pengalamatan langsung umumnya cepat karena, meskipun nilai yang akan isnt dimuat termasuk dalam instruksi tersebut, maka dengan cepat diakses karena disimpan di RAM Internal 8051s. It is also much more flexible than Immediate Addressing since the value to be loaded is whatever is found at the given address--which may be variable. Hal ini juga jauh lebih fleksibel daripada Segera Mengatasi karena nilai yang akan diambil adalah apa saja yang ditemukan di alamat yang diberikan - yang mungkin variabel.
Also, it is important to note that when using direct addressing any instruction which refers to an address between 00h and 7Fh is referring to Internal Memory. Juga, penting untuk dicatat bahwa bila menggunakan pengalamatan langsung suatu instruksi yang merujuk ke alamat antara 00h dan 7Fh mengacu pada memori internal. Any instruction which refers to an address between 80h and FFh is referring to the SFR control registers that control the 8051 microcontroller itself. Setiap instruksi yang merujuk ke alamat antara 80h dan FFh merujuk ke register kontrol SFR yang mengendalikan mikrokontroler 8051 itu sendiri.
The obvious question that may arise is, "If direct addressing an address from 80h through FFh refers to SFRs, how can I access the upper 128 bytes of Internal RAM that are available on the 8052?" Pertanyaan jelas yang mungkin timbul adalah, "Jika langsung menangani alamat dari 80h sampai FFh mengacu pada SFRs, bagaimana saya bisa mengakses bagian atas 128 byte Internal RAM yang tersedia pada 8052?" The answer is: You cant access them using direct addressing. Jawabannya adalah: Anda tidak bisa mengaksesnya menggunakan pengalamatan langsung. As stated, if you directly refer to an address of 80h through FFh you will be referring to an SFR. Sebagaimana dinyatakan, jika Anda langsung merujuk pada alamat 80h melalui FFh Anda akan mengacu pada suatu SFR. However, you may access the 8052s upper 128 bytes of RAM by using the next addressing mode, "indirect addressing." Namun, Anda dapat mengakses 8052s atas 128 byte RAM dengan menggunakan mode pengalamatan berikutnya, "tidak langsung berbicara."
Indirect Addressing Pengalamatan tidak langsung
Indirect addressing is a very powerful addressing mode which in many cases provides an exceptional level of flexibility. Tidak langsung berbicara adalah mode pengalamatan yang sangat kuat yang dalam banyak kasus memberikan tingkat fleksibilitas yang luar biasa. Indirect addressing is also the only way to access the extra 128 bytes of Internal RAM found on an 8052. Pengalamatan tidak langsung juga satu-satunya cara untuk mengakses 128 byte ekstra dari internal RAM yang ditemukan pada 8052.
Indirect addressing appears as follows: Pengalamatan tidak langsung muncul sebagai berikut:
MOV A,@R0 MOV A, @ R0
This instruction causes the 8051 to analyze the value of the R0 register. Instruksi ini menyebabkan 8051 menganalisa nilai dari register R0. The 8051 will then load the accumulator with the value from Internal RAM which is found at the address indicated by R0. 8051 kemudian akan memuat akumulator dengan nilai dari RAM Internal yang ditemukan di alamat yang ditunjukkan oleh R0.
For example, lets say R0 holds the value 40h and Internal RAM address 40h holds the value 67h. Sebagai contoh, katakanlah 40h R0 memegang nilai dan Internal RAM alamat 40h 67h memegang nilai. When the above instruction is executed the 8051 will check the value of R0. Since R0 holds 40h the 8051 will get the value out of Internal RAM address 40h (which holds 67h) and store it in the Accumulator. Ketika instruksi diatas dieksekusi 8051 akan memeriksa nilai dari R0. Sejak R0 memegang 40h 8051 akan mendapatkan nilai dari Internal RAM alamat 40h (yang memegang 67h) dan menyimpannya dalam Akumulator. Thus, the Accumulator ends up holding 67h. Jadi, Akumulator akhirnya memegang 67h.
Indirect addressing always refers to Internal RAM; it never refers to an SFR. Pengalamatan tidak langsung selalu mengacu pada Internal RAM; itu tidak pernah merujuk pada SFR sebuah. Thus, in a prior example we mentioned that SFR 99h can be used to write a value to the serial port. Jadi, dalam contoh sebelumnya telah disebutkan bahwa SFR 99h dapat digunakan untuk menulis nilai ke port serial. Thus one may think that the following would be a valid solution to write the value 1 to the serial port: Jadi satu mungkin berpikir bahwa berikut akan menjadi solusi yang valid untuk menulis nilai 1 ke port serial:
MOV R0,#99h ;Load the address of the serial port MOV R0, # 99h; Isikan alamat port serial
MOV @R0,#01h ;Send 01 to the serial port -- WRONG!! MOV @ R0, # 01h; Kirim 01 ke port serial - SALAH!
This is not valid. Ini tidak berlaku. Since indirect addressing always refers to Internal RAM these two instructions would write the value 01h to Internal RAM address 99h on an 8052. Karena tidak langsung berbicara selalu mengacu pada RAM Internal ini dua instruksi akan menulis nilai ke alamat 01h 99h RAM Internal pada 8052. On an 8051 these two instructions would produce an undefined result since the 8051 only has 128 bytes of Internal RAM. Pada 8051 ini dua instruksi yang akan menghasilkan hasil yang tidak terdefinisi sejak 8051 hanya memiliki 128 byte RAM Internal.
External Direct Eksternal langsung
External Memory is accessed using a suite of instructions which use what I call "External Direct" addressing. Memori Eksternal diakses menggunakan seperangkat instruksi yang menggunakan apa yang saya sebut "Eksternal langsung" berbicara. I call it this because it appears to be direct addressing, but it is used to access external memory rather than internal memory. Aku menyebutnya ini karena tampaknya langsung menangani, tetapi digunakan untuk mengakses memori eksternal daripada memori internal.
There are only two commands that use External Direct addressing mode: Hanya ada dua perintah yang menggunakan mode pengalamatan langsung Eksternal:
MOVX A,@DPTR MOVX A, @ DPTR
MOVX @DPTR,A MOVX @ DPTR, A
As you can see, both commands utilize DPTR. Seperti yang Anda lihat, baik perintah menggunakan DPTR. In these instructions, DPTR must first be loaded with the address of external memory that you wish to read or write. Dalam petunjuk ini, DPTR pertama harus diisi dengan alamat dari memori eksternal yang ingin Anda membaca atau menulis. Once DPTR holds the correct external memory address, the first command will move the contents of that external memory address into the Accumulator. Setelah DPTR menyimpan alamat memori eksternal benar, perintah pertama akan memindahkan isi dari alamat memori eksternal ke Akumulator. The second command will do the opposite: it will allow you to write the value of the Accumulator to the external memory address pointed to by DPTR. Perintah kedua akan melakukan hal yang sebaliknya: akan memungkinkan Anda untuk menulis nilai Akumulator ke alamat memori eksternal yang ditunjuk oleh DPTR.
External Indirect Eksternal tidak langsung
External memory can also be accessed using a form of indirect addressing which I call External Indirect addressing. Eksternal memori juga dapat diakses dengan menggunakan bentuk tidak langsung berbicara yang saya sebut Eksternal pengalamatan tidak langsung. This form of addressing is usually only used in relatively small projects that have a very small amount of external RAM. Bentuk pengalamatan biasanya hanya digunakan dalam proyek-proyek yang relatif kecil yang mempunyai jumlah yang sangat kecil dari RAM eksternal. An example of this addressing mode is: Contoh mode pengalamatan ini adalah:
MOVX @R0,A MOVX @ R0, A
Once again, the value of R0 is first read and the value of the Accumulator is written to that address in External RAM. Sekali lagi, nilai R0 pertama kali membaca dan nilai Akumulator ditulis ke alamat di Eksternal RAM. Since the value of @R0 can only be 00h through FFh the project would effectively be limited to 256 bytes of External RAM. Karena nilai @ R0 hanya dapat 00h melalui FFh proyek secara efektif akan terbatas pada 256 byte RAM Eksternal. There are relatively simple hardware/software tricks that can be implemented to access more than 256 bytes of memory using External Indirect addressing; however, it is usually easier to use External Direct addressing if your project has more than 256 bytes of External RAM. Ada trik sederhana relatif hardware software / yang dapat diimplementasikan untuk mengakses lebih dari 256 byte memori menggunakan pengalamatan eksternal tidak langsung, namun biasanya lebih mudah untuk menggunakan pengalamatan langsung Eksternal jika proyek Anda memiliki lebih dari 256 byte RAM Eksternal.
Ketika pertama kali diinisialisasi 8051, itu ulang PC untuk 0000h. The 8051 then begins to execute instructions sequentially in memory unless a program instruction causes the PC to be otherwise altered. 8051 kemudian mulai melaksanakan instruksi secara berurutan dalam memori kecuali sebuah instruksi program yang menyebabkan PC yang akan dinyatakan diubah. There are various instructions that can modify the value of the PC; specifically, conditional branching instructions, direct jumps and calls, and "returns" from subroutines. Ada berbagai petunjuk yang dapat mengubah nilai PC; khusus, instruksi bercabang bersyarat, melompat langsung dan panggilan, dan "kembali" dari subrutin. Additionally, interrupts, when enabled, can cause the program flow to deviate from its otherwise sequential scheme. Selain itu, sela, ketika diaktifkan, dapat menyebabkan aliran program untuk menyimpang dari skema yang dinyatakan sekuensial.
Conditional Branching Branching Bersyarat
The 8051 contains a suite of instructions which, as a group, are referred to as "conditional branching" instructions. 8051 suite berisi instruksi yang, sebagai kelompok, yang disebut sebagai "percabangan kondisional" instruksi. These instructions cause program execution to follow a non-sequential path if a certain condition is true. Instruksi ini menyebabkan eksekusi program untuk mengikuti jalan non-sekuensial jika kondisi tertentu adalah benar.
Take, for example, the JB instruction. Ambil, misalnya, instruksi JB. This instruction means "Jump if Bit Set." Instruksi ini berarti "Langsung jika Bit Set." An example of the JB instruction might be: Contoh dari instruksi JB mungkin:
JB 45h,HELLO JB 45h, HELLO
NOP PDN
HELLO: HELLO: .... ....
In this case, the 8051 will analyze the contents of bit 45h. Dalam hal ini, 8051 akan menganalisa isi 45h bit. If the bit is set program execution will jump immediately to the label HELLO, skipping the NOP instruction. Jika bit diatur eksekusi program akan melompat langsung HELLO label, melompat-lompat instruksi NOP. If the bit is not set the conditional branch fails and program execution continues, as usual, with the NOP instruction which follows. Jika bit tidak mengatur cabang bersyarat dan pelaksanaan program gagal terus, seperti biasa, dengan instruksi NOP yang berikut.
Conditional branching is really the fundamental building block of program logic since all "decisions" are accomplished by using conditional branching. Percabangan bersyarat sebenarnya adalah blok bangunan fundamental dari logika program karena semua "keputusan" yang dilakukan dengan menggunakan percabangan bersyarat. Conditional branching can be thought of as the "IF...THEN" structure in 8051 assembly language. Percabangan bersyarat dapat dianggap sebagai JIKA ... MAKA "struktur" dalam bahasa assembly 8051.
An important note worth mentioning about conditional branching is that the program may only branch to instructions located withim 128 bytes prior to or 127 bytes following the address which follows the conditional branch instruction. Catatan penting yang layak disebut tentang percabangan kondisional adalah bahwa program ini hanya dapat belokan ke instruksi 128 byte yang terletak withim sebelum atau 127 byte berikut alamat yang mengikuti instruksi cabang bersyarat. This means that in the above example the label HELLO must be within +/- 128 bytes of the memory address which contains the conditional branching instruction. Ini berarti bahwa dalam contoh di atas label HELLO harus berada dalam + / - 128 byte dari alamat memori yang berisi instruksi percabangan bersyarat.
Direct Jumps Langsung Jumps
While conditional branching is extremely important, it is often necessary to make a direct branch to a given memory location without basing it on a given logical decision. This is equivalent to saying "Goto" in BASIC. Sementara percabangan kondisional sangat penting, seringkali diperlukan untuk cabang langsung ke lokasi memori diberikan tanpa mendasarkan pada keputusan logis tertentu. Hal ini setara dengan mengatakan "Goto" pada BASIC. In this case you want the program flow to continue at a given memory address without considering any conditions. Dalam hal ini Anda ingin aliran program untuk melanjutkan pada alamat memori diberikan tanpa mempertimbangkan kondisi.
This is accomplished in the 8051 using "Direct Jump and Call" instructions. Hal ini dilakukan dalam 8.051 menggunakan "Langsung Langsung dan Call" instruksi. As illustrated in the last paragraph, this suite of instructions causes program flow to change unconditionally. Seperti digambarkan dalam paragraf terakhir, suite ini menyebabkan aliran instruksi program untuk perubahan tanpa syarat.
Consider the example: Perhatikan contoh:
LJMP NEW_ADDRESS LJMP NEW_ADDRESS
. .
. .
. .
NEW_ADDRESS: NEW_ADDRESS: .... ....
The LJMP instruction in this example means "Long Jump." Instruksi LJMP dalam contoh ini berarti "Long Langsung." When the 8051 executes this instruction the PC is loaded with the address of NEW_ADDRESS and program execution continues sequentially from there. Ketika 8051 mengeksekusi instruksi ini PC tersebut dimuat dengan alamat NEW_ADDRESS dan pelaksanaan program terus secara berurutan dari sana.
The obvious difference between the Direct Jump and Call instructions and the conditional branching is that with Direct Jumps and Calls program flow always changes. Perbedaan yang jelas antara langsung dan instruksi Langsung Panggil dan percabangan kondisional adalah bahwa dengan Direct Jumps dan Panggilan aliran program selalu berubah. With conditional branching program flow only changes if a certain condition is true. Dengan aliran program percabangan bersyarat hanya perubahan jika kondisi tertentu adalah benar.
It is worth mentioning that, aside from LJMP, there are two other instructions which cause a direct jump to occur: the SJMP and AJMP commands. Perlu disebutkan bahwa, selain dari LJMP, ada dua instruksi lain yang menyebabkan melompat langsung terjadi: di SJMP dan perintah AJMP. Functionally, these two commands perform the exact same function as the LJMP command--that is to say, they always cause program flow to continue at the address indicated by the command. Secara fungsional, kedua perintah menjalankan fungsi yang sama persis seperti perintah LJMP - artinya, mereka selalu menyebabkan aliran program untuk melanjutkan di alamat yang ditunjukkan oleh perintah. However, SJMP and AJMP differ in the following ways: Namun, SJMP dan AJMP berbeda dalam cara berikut:
* The SJMP command, like the conditional branching instructions, can only jump to an address within +/- 128 bytes of the SJMP command. Perintah SJMP, seperti instruksi percabangan bersyarat, hanya dapat melompat ke alamat dalam + / - 128 byte dari perintah SJMP.
* The AJMP command can only jump to an address that is in the same 2k block of memory as the AJMP command. Perintah AJMP hanya dapat melompat ke alamat yang di blok 2k sama memori perintah AJMP. That is to say, if the AJMP command is at code memory location 650h, it can only do a jump to addresses 0000h through 07FFh (0 through 2047, decimal). Artinya, jika perintah AJMP berada pada lokasi memori 650h kode, hanya dapat melakukan melompat ke alamat 0000h melalui 07FFh (0 melalui 2047, desimal).
You may be asking yourself, "Why would I want to use the SJMP or AJMP command which have restrictions as to how far they can jump if they do the same thing as the LJMP command which can jump anywhere in memory?" Anda mungkin bertanya pada diri sendiri, "Mengapa saya ingin menggunakan perintah SJMP atau AJMP yang memiliki batasan-batasan sejauh mana mereka bisa melompat jika mereka melakukan hal yang sama dengan perintah LJMP yang dapat melompat di mana saja di memori?" The answer is simple: The LJMP command requires three bytes of code memory whereas both the SJMP and AJMP commands require only two. Jawabannya sederhana: Perintah LJMP membutuhkan tiga byte memori kode sedangkan baik dan perintah SJMP AJMP hanya memerlukan dua. Thus, if you are developing an application that has memory restrictions you can often save quite a bit of memory using the 2-byte AJMP/SJMP instructions instead of the 3-byte instruction. Jadi, jika Anda sedang mengembangkan aplikasi yang memiliki pembatasan memori Anda sering dapat menyimpan cukup sedikit memori menggunakan byte AJMP 2 / instruksi SJMP bukan-byte instruksi 3.
Recently, I wrote a program that required 2100 bytes of memory but I had a memory restriction of 2k (2048 bytes). Baru-baru ini, aku menulis sebuah program yang membutuhkan 2100 byte memori, tetapi saya punya kenangan 2k pembatasan (2048 bytes). I did a search/replace changing all LJMPs to AJMPs and the program shrunk downto 1950 bytes. Aku pencarian / mengganti semua perubahan LJMPs untuk AJMPs dan program menyusut downto 1950 byte. Thus, without changing any logic whatsoever in my program I saved 150 bytes and was able to meet my 2048 byte memory restriction. Jadi, tanpa mengubah logika apapun dalam program saya, saya disimpan 150 byte dan mampu memenuhi pembatasan saya 2048 byte memori.
NOTE: Some quality assemblers will actually do the above conversion for you automatically. CATATAN: Beberapa perakit kualitas benar-benar akan melakukan konversi di atas untuk Anda secara otomatis. That is, they'll automatically change your LJMPs to SJMPs whenever possible. Artinya, mereka secara otomatis akan mengubah LJMPs Anda untuk SJMPs bila memungkinkan. This is a nifty and very powerful capability that you may want to look for in an assembler if you plan to develop many projects that have relatively tight memory restrictions. Ini adalah bagus dan sangat kuat kemampuan yang Anda mungkin ingin mencari di assembler jika Anda berencana untuk mengembangkan proyek-proyek banyak yang memiliki memori pembatasan ketat yang relatif.
Direct Calls Panggilan langsung
Another operation that will be familiar to seasoned programmers is the LCALL instruction. This is similar to a "Gosub" command in Basic. Operasi lain yang akan dikenal oleh programmer berpengalaman adalah instruksi LCALL. Hal ini mirip dengan Gosub perintah "" dalam Basic.
When the 8051 executes an LCALL instruction it immediately pushes the current Program Counter onto the stack and then continues executing code at the address indicated by the LCALL instruction. Ketika 8.051 melaksanakan instruksi LCALL segera mendorong Program Counter saat ini ke stack dan kemudian terus melaksanakan kode di alamat yang ditunjukkan oleh instruksi LCALL.
Returns from Routines Pengembalian dari Rutinitas
Another structure that can cause program flow to change is the "Return from Subroutine" instruction, known as RET in 8051 Assembly Language. Struktur lain yang dapat menyebabkan aliran program untuk perubahan adalah Kembali "dari subroutine" instruksi, yang dikenal sebagai Pur dalam Majelis Bahasa 8051.
The RET instruction, when executed, returns to the address following the instruction that called the given subroutine. Instruksi Pur, saat dieksekusi, kembali ke alamat berikut instruksi yang disebut subroutine diberikan. More accurately, it returns to the address that is stored on the stack. Lebih tepatnya, ia mengembalikan ke alamat yang disimpan pada stack.
The RET command is direct in the sense that it always changes program flow without basing it on a condition, but is variable in the sense that where program flow continues can be different each time the RET instruction is executed depending on from where the subroutine was called originally. Perintah Pur langsung dalam arti bahwa hal itu selalu berubah aliran program tanpa mendasarkan pada kondisi, tetapi variabel dalam arti bahwa dimana program terus mengalir bisa berbeda setiap kali instruksi ret dijalankan tergantung dari mana subroutine ini disebut awalnya.
Interrupts Interupsi
An interrupt is a special feature which allows the 8051 to provide the illusion of "multi-tasking," although in reality the 8051 is only doing one thing at a time. Interrupt adalah fitur khusus yang memungkinkan 8.051 untuk memberikan ilusi "multi-tasking," meskipun pada kenyataannya 8051 hanya melakukan satu hal pada suatu waktu. The word "interrupt" can often be subsituted with the word "event." Kata "interupsi" sering bisa subsituted dengan kata "event."
An interrupt is triggered whenever a corresponding event occurs. Interrupt dipicu setiap kali terjadi event terkait. When the event occurs, the 8051 temporarily puts "on hold" the normal execution of the program and executes a special section of code referred to as an interrupt handler. Ketika peristiwa terjadi, sementara 8051 puts "ditahan" eksekusi normal program dan mengeksekusi bagian kode khusus disebut sebagai interrupt handler. The interrupt handler performs whatever special functions are required to handle the event and then returns control to the 8051 at which point program execution continues as if it had never been interrupted. Petugas melakukan apa pun yang mengganggu fungsi-fungsi khusus diperlukan untuk menangani peristiwa itu dan kemudian kembali kontrol ke 8051 di mana titik eksekusi program berlanjut seakan tidak pernah terputus.
The topic of interrupts is somewhat tricky and very important. Topik potong agak rumit dan sangat penting. For that reason, an entire chapter will be dedicated to the topic. Oleh karena itu, satu bab akan didedikasikan untuk topik. For now, suffice it to say that Interrupts can cause program flow to change. Untuk saat ini, cukup dikatakan bahwa interupsi dapat menyebabkan aliran program untuk mengubah.
Ketika pertama kali diinisialisasi 8051, itu ulang PC untuk 0000h. The 8051 then begins to execute instructions sequentially in memory unless a program instruction causes the PC to be otherwise altered. 8051 kemudian mulai melaksanakan instruksi secara berurutan dalam memori kecuali sebuah instruksi program yang menyebabkan PC yang akan dinyatakan diubah. There are various instructions that can modify the value of the PC; specifically, conditional branching instructions, direct jumps and calls, and "returns" from subroutines. Ada berbagai petunjuk yang dapat mengubah nilai PC; khusus, instruksi bercabang bersyarat, melompat langsung dan panggilan, dan "kembali" dari subrutin. Additionally, interrupts, when enabled, can cause the program flow to deviate from its otherwise sequential scheme. Selain itu, sela, ketika diaktifkan, dapat menyebabkan aliran program untuk menyimpang dari skema yang dinyatakan sekuensial.
Conditional Branching Branching Bersyarat
The 8051 contains a suite of instructions which, as a group, are referred to as "conditional branching" instructions. 8051 suite berisi instruksi yang, sebagai kelompok, yang disebut sebagai "percabangan kondisional" instruksi. These instructions cause program execution to follow a non-sequential path if a certain condition is true. Instruksi ini menyebabkan eksekusi program untuk mengikuti jalan non-sekuensial jika kondisi tertentu adalah benar.
Take, for example, the JB instruction. Ambil, misalnya, instruksi JB. This instruction means "Jump if Bit Set." Instruksi ini berarti "Langsung jika Bit Set." An example of the JB instruction might be: Contoh dari instruksi JB mungkin:
JB 45h,HELLO JB 45h, HELLO
NOP PDN
HELLO: HELLO: .... ....
In this case, the 8051 will analyze the contents of bit 45h. Dalam hal ini, 8051 akan menganalisa isi 45h bit. If the bit is set program execution will jump immediately to the label HELLO, skipping the NOP instruction. Jika bit diatur eksekusi program akan melompat langsung HELLO label, melompat-lompat instruksi NOP. If the bit is not set the conditional branch fails and program execution continues, as usual, with the NOP instruction which follows. Jika bit tidak mengatur cabang bersyarat dan pelaksanaan program gagal terus, seperti biasa, dengan instruksi NOP yang berikut.
Conditional branching is really the fundamental building block of program logic since all "decisions" are accomplished by using conditional branching. Percabangan bersyarat sebenarnya adalah blok bangunan fundamental dari logika program karena semua "keputusan" yang dilakukan dengan menggunakan percabangan bersyarat. Conditional branching can be thought of as the "IF...THEN" structure in 8051 assembly language. Percabangan bersyarat dapat dianggap sebagai JIKA ... MAKA "struktur" dalam bahasa assembly 8051.
An important note worth mentioning about conditional branching is that the program may only branch to instructions located withim 128 bytes prior to or 127 bytes following the address which follows the conditional branch instruction. Catatan penting yang layak disebut tentang percabangan kondisional adalah bahwa program ini hanya dapat belokan ke instruksi 128 byte yang terletak withim sebelum atau 127 byte berikut alamat yang mengikuti instruksi cabang bersyarat. This means that in the above example the label HELLO must be within +/- 128 bytes of the memory address which contains the conditional branching instruction. Ini berarti bahwa dalam contoh di atas label HELLO harus berada dalam + / - 128 byte dari alamat memori yang berisi instruksi percabangan bersyarat.
Direct Jumps Langsung Jumps
While conditional branching is extremely important, it is often necessary to make a direct branch to a given memory location without basing it on a given logical decision. This is equivalent to saying "Goto" in BASIC. Sementara percabangan kondisional sangat penting, seringkali diperlukan untuk cabang langsung ke lokasi memori diberikan tanpa mendasarkan pada keputusan logis tertentu. Hal ini setara dengan mengatakan "Goto" pada BASIC. In this case you want the program flow to continue at a given memory address without considering any conditions. Dalam hal ini Anda ingin aliran program untuk melanjutkan pada alamat memori diberikan tanpa mempertimbangkan kondisi.
This is accomplished in the 8051 using "Direct Jump and Call" instructions. Hal ini dilakukan dalam 8.051 menggunakan "Langsung Langsung dan Call" instruksi. As illustrated in the last paragraph, this suite of instructions causes program flow to change unconditionally. Seperti digambarkan dalam paragraf terakhir, suite ini menyebabkan aliran instruksi program untuk perubahan tanpa syarat.
Consider the example: Perhatikan contoh:
LJMP NEW_ADDRESS LJMP NEW_ADDRESS
. .
. .
. .
NEW_ADDRESS: NEW_ADDRESS: .... ....
The LJMP instruction in this example means "Long Jump." Instruksi LJMP dalam contoh ini berarti "Long Langsung." When the 8051 executes this instruction the PC is loaded with the address of NEW_ADDRESS and program execution continues sequentially from there. Ketika 8051 mengeksekusi instruksi ini PC tersebut dimuat dengan alamat NEW_ADDRESS dan pelaksanaan program terus secara berurutan dari sana.
The obvious difference between the Direct Jump and Call instructions and the conditional branching is that with Direct Jumps and Calls program flow always changes. Perbedaan yang jelas antara langsung dan instruksi Langsung Panggil dan percabangan kondisional adalah bahwa dengan Direct Jumps dan Panggilan aliran program selalu berubah. With conditional branching program flow only changes if a certain condition is true. Dengan aliran program percabangan bersyarat hanya perubahan jika kondisi tertentu adalah benar.
It is worth mentioning that, aside from LJMP, there are two other instructions which cause a direct jump to occur: the SJMP and AJMP commands. Perlu disebutkan bahwa, selain dari LJMP, ada dua instruksi lain yang menyebabkan melompat langsung terjadi: di SJMP dan perintah AJMP. Functionally, these two commands perform the exact same function as the LJMP command--that is to say, they always cause program flow to continue at the address indicated by the command. Secara fungsional, kedua perintah menjalankan fungsi yang sama persis seperti perintah LJMP - artinya, mereka selalu menyebabkan aliran program untuk melanjutkan di alamat yang ditunjukkan oleh perintah. However, SJMP and AJMP differ in the following ways: Namun, SJMP dan AJMP berbeda dalam cara berikut:
* The SJMP command, like the conditional branching instructions, can only jump to an address within +/- 128 bytes of the SJMP command. Perintah SJMP, seperti instruksi percabangan bersyarat, hanya dapat melompat ke alamat dalam + / - 128 byte dari perintah SJMP.
* The AJMP command can only jump to an address that is in the same 2k block of memory as the AJMP command. Perintah AJMP hanya dapat melompat ke alamat yang di blok 2k sama memori perintah AJMP. That is to say, if the AJMP command is at code memory location 650h, it can only do a jump to addresses 0000h through 07FFh (0 through 2047, decimal). Artinya, jika perintah AJMP berada pada lokasi memori 650h kode, hanya dapat melakukan melompat ke alamat 0000h melalui 07FFh (0 melalui 2047, desimal).
You may be asking yourself, "Why would I want to use the SJMP or AJMP command which have restrictions as to how far they can jump if they do the same thing as the LJMP command which can jump anywhere in memory?" Anda mungkin bertanya pada diri sendiri, "Mengapa saya ingin menggunakan perintah SJMP atau AJMP yang memiliki batasan-batasan sejauh mana mereka bisa melompat jika mereka melakukan hal yang sama dengan perintah LJMP yang dapat melompat di mana saja di memori?" The answer is simple: The LJMP command requires three bytes of code memory whereas both the SJMP and AJMP commands require only two. Jawabannya sederhana: Perintah LJMP membutuhkan tiga byte memori kode sedangkan baik dan perintah SJMP AJMP hanya memerlukan dua. Thus, if you are developing an application that has memory restrictions you can often save quite a bit of memory using the 2-byte AJMP/SJMP instructions instead of the 3-byte instruction. Jadi, jika Anda sedang mengembangkan aplikasi yang memiliki pembatasan memori Anda sering dapat menyimpan cukup sedikit memori menggunakan byte AJMP 2 / instruksi SJMP bukan-byte instruksi 3.
Recently, I wrote a program that required 2100 bytes of memory but I had a memory restriction of 2k (2048 bytes). Baru-baru ini, aku menulis sebuah program yang membutuhkan 2100 byte memori, tetapi saya punya kenangan 2k pembatasan (2048 bytes). I did a search/replace changing all LJMPs to AJMPs and the program shrunk downto 1950 bytes. Aku pencarian / mengganti semua perubahan LJMPs untuk AJMPs dan program menyusut downto 1950 byte. Thus, without changing any logic whatsoever in my program I saved 150 bytes and was able to meet my 2048 byte memory restriction. Jadi, tanpa mengubah logika apapun dalam program saya, saya disimpan 150 byte dan mampu memenuhi pembatasan saya 2048 byte memori.
NOTE: Some quality assemblers will actually do the above conversion for you automatically. CATATAN: Beberapa perakit kualitas benar-benar akan melakukan konversi di atas untuk Anda secara otomatis. That is, they'll automatically change your LJMPs to SJMPs whenever possible. Artinya, mereka secara otomatis akan mengubah LJMPs Anda untuk SJMPs bila memungkinkan. This is a nifty and very powerful capability that you may want to look for in an assembler if you plan to develop many projects that have relatively tight memory restrictions. Ini adalah bagus dan sangat kuat kemampuan yang Anda mungkin ingin mencari di assembler jika Anda berencana untuk mengembangkan proyek-proyek banyak yang memiliki memori pembatasan ketat yang relatif.
Direct Calls Panggilan langsung
Another operation that will be familiar to seasoned programmers is the LCALL instruction. This is similar to a "Gosub" command in Basic. Operasi lain yang akan dikenal oleh programmer berpengalaman adalah instruksi LCALL. Hal ini mirip dengan Gosub perintah "" dalam Basic.
When the 8051 executes an LCALL instruction it immediately pushes the current Program Counter onto the stack and then continues executing code at the address indicated by the LCALL instruction. Ketika 8.051 melaksanakan instruksi LCALL segera mendorong Program Counter saat ini ke stack dan kemudian terus melaksanakan kode di alamat yang ditunjukkan oleh instruksi LCALL.
Returns from Routines Pengembalian dari Rutinitas
Another structure that can cause program flow to change is the "Return from Subroutine" instruction, known as RET in 8051 Assembly Language. Struktur lain yang dapat menyebabkan aliran program untuk perubahan adalah Kembali "dari subroutine" instruksi, yang dikenal sebagai Pur dalam Majelis Bahasa 8051.
The RET instruction, when executed, returns to the address following the instruction that called the given subroutine. Instruksi Pur, saat dieksekusi, kembali ke alamat berikut instruksi yang disebut subroutine diberikan. More accurately, it returns to the address that is stored on the stack. Lebih tepatnya, ia mengembalikan ke alamat yang disimpan pada stack.
The RET command is direct in the sense that it always changes program flow without basing it on a condition, but is variable in the sense that where program flow continues can be different each time the RET instruction is executed depending on from where the subroutine was called originally. Perintah Pur langsung dalam arti bahwa hal itu selalu berubah aliran program tanpa mendasarkan pada kondisi, tetapi variabel dalam arti bahwa dimana program terus mengalir bisa berbeda setiap kali instruksi ret dijalankan tergantung dari mana subroutine ini disebut awalnya.
Interrupts Interupsi
An interrupt is a special feature which allows the 8051 to provide the illusion of "multi-tasking," although in reality the 8051 is only doing one thing at a time. Interrupt adalah fitur khusus yang memungkinkan 8.051 untuk memberikan ilusi "multi-tasking," meskipun pada kenyataannya 8051 hanya melakukan satu hal pada suatu waktu. The word "interrupt" can often be subsituted with the word "event." Kata "interupsi" sering bisa subsituted dengan kata "event."
An interrupt is triggered whenever a corresponding event occurs. Interrupt dipicu setiap kali terjadi event terkait. When the event occurs, the 8051 temporarily puts "on hold" the normal execution of the program and executes a special section of code referred to as an interrupt handler. Ketika peristiwa terjadi, sementara 8051 puts "ditahan" eksekusi normal program dan mengeksekusi bagian kode khusus disebut sebagai interrupt handler. The interrupt handler performs whatever special functions are required to handle the event and then returns control to the 8051 at which point program execution continues as if it had never been interrupted. Petugas melakukan apa pun yang mengganggu fungsi-fungsi khusus diperlukan untuk menangani peristiwa itu dan kemudian kembali kontrol ke 8051 di mana titik eksekusi program berlanjut seakan tidak pernah terputus.
The topic of interrupts is somewhat tricky and very important. Topik potong agak rumit dan sangat penting. For that reason, an entire chapter will be dedicated to the topic. Oleh karena itu, satu bab akan didedikasikan untuk topik. For now, suffice it to say that Interrupts can cause program flow to change. Untuk saat ini, cukup dikatakan bahwa interupsi dapat menyebabkan aliran program untuk mengubah.
http://www.8052.com/tutaddr.phtml
Minggu, 09 Mei 2010
Jaringan Komunikasi Serat Optik PT ICON+
Detail TA PA
Analisis Performansi Backbone Link Ungaran - Krian Pada Jaringan Komunikasi Serat Optik PT ICON+
111020054
Maharani Kusuma Dewi
Periode II
2009
Hit : 363
Abstrak
Jaringan backbone link Ungaran – Krian merupakan jaringan sistem komunikasi serat optik (SKSO) yang memanfaatkan teknologi multiplexing Synchronous Digital Hierarchy (SDH) dengan kecepatan transmisi 2,5 Gbps. Jenis kabel yang digunakan adalah Optical Ground Wire (OPGW) yang terbentang di sepanjang transmisi listrik 500 kV milik PT PLN (Perusahaan Listrik Negara). Faktor-faktor dalam sistem transmisi optik seperti redaman dan dispersi yang mempengaruhi kualitas informasi yang dikirim, menjadikan hal tersebut cukup penting dalam penilaian kinerjanya.
Pada Tugas Akhir ini dilihat pengaruh teknologi SDH dan media serat optik yang digunakan, dengan rekomendasi G.652, terhadap kinerja Sistem Komunikasi Serat Optik yang diimplementasikan. Teknik yang digunakan adalah dengan menganalisis redaman, dispersi, link power budget, rise time budget, maintainability, availability, reliability dan proteksi yang digunakan.
Hasil analisis menunjukkan bahwa secara umum performansi backbone link Ungaran – Krian baik, kecuali untuk parameter-parameter seperti redaman dan availability, nilainya tidak sesuai dengan standar yang telah ditetapkan oleh PT ICON+ sendiri maupun standar ITU-T.
Kata Kunci : Analisis Performansi Backbone, Komunikasi Serat Optik.
Abstract
Ungaran – Krian backbone link network is an optical fiber communication that using Synchronous Digital Hierarchy (SDH) multiplexing with 2.5 Gbps of bit streams. The optical cable that used is optical ground wire (OPGW) type which deployed along 500 kV electrical transmission that belong to PT PLN (Perusahaan Listrik Negara). Optical transmission systems factors such as losses and fiber dispersion that influence quality of transmitted information, are very important to evaluate the whole performance.
This final project will evaluate SDH technologies and optical fiber that used, refers to G652 recommendation, to deployed optical fiber communication performance. Some methods that used such as loss analysis, dispersion, power budget, rise time budget, maintainability, availability, reliability and protection scheme.
As result shows that generally Ungaran – Krian backbone link performance is good, except for some parameters such losses and availability values, are not accord with ICON+ and ITU-T standard.
Keywords : Backbone performance analysis, Optical fiber communication
Library IT Telkom 2008, Gedung G Kampus IT Telkom
Telp. 022-7565929, email:library@ittelkom.ac.id
Jl. Telekomunikasi No.1 Ts Buah Batu
Valid XHTML and CSS.
Analisis Performansi Backbone Link Ungaran - Krian Pada Jaringan Komunikasi Serat Optik PT ICON+
111020054
Maharani Kusuma Dewi
Periode II
2009
Hit : 363
Abstrak
Jaringan backbone link Ungaran – Krian merupakan jaringan sistem komunikasi serat optik (SKSO) yang memanfaatkan teknologi multiplexing Synchronous Digital Hierarchy (SDH) dengan kecepatan transmisi 2,5 Gbps. Jenis kabel yang digunakan adalah Optical Ground Wire (OPGW) yang terbentang di sepanjang transmisi listrik 500 kV milik PT PLN (Perusahaan Listrik Negara). Faktor-faktor dalam sistem transmisi optik seperti redaman dan dispersi yang mempengaruhi kualitas informasi yang dikirim, menjadikan hal tersebut cukup penting dalam penilaian kinerjanya.
Pada Tugas Akhir ini dilihat pengaruh teknologi SDH dan media serat optik yang digunakan, dengan rekomendasi G.652, terhadap kinerja Sistem Komunikasi Serat Optik yang diimplementasikan. Teknik yang digunakan adalah dengan menganalisis redaman, dispersi, link power budget, rise time budget, maintainability, availability, reliability dan proteksi yang digunakan.
Hasil analisis menunjukkan bahwa secara umum performansi backbone link Ungaran – Krian baik, kecuali untuk parameter-parameter seperti redaman dan availability, nilainya tidak sesuai dengan standar yang telah ditetapkan oleh PT ICON+ sendiri maupun standar ITU-T.
Kata Kunci : Analisis Performansi Backbone, Komunikasi Serat Optik.
Abstract
Ungaran – Krian backbone link network is an optical fiber communication that using Synchronous Digital Hierarchy (SDH) multiplexing with 2.5 Gbps of bit streams. The optical cable that used is optical ground wire (OPGW) type which deployed along 500 kV electrical transmission that belong to PT PLN (Perusahaan Listrik Negara). Optical transmission systems factors such as losses and fiber dispersion that influence quality of transmitted information, are very important to evaluate the whole performance.
This final project will evaluate SDH technologies and optical fiber that used, refers to G652 recommendation, to deployed optical fiber communication performance. Some methods that used such as loss analysis, dispersion, power budget, rise time budget, maintainability, availability, reliability and protection scheme.
As result shows that generally Ungaran – Krian backbone link performance is good, except for some parameters such losses and availability values, are not accord with ICON+ and ITU-T standard.
Keywords : Backbone performance analysis, Optical fiber communication
Library IT Telkom 2008, Gedung G Kampus IT Telkom
Telp. 022-7565929, email:library@ittelkom.ac.id
Jl. Telekomunikasi No.1 Ts Buah Batu
Valid XHTML and CSS.
Langganan:
Komentar (Atom)