Anda di halaman 1dari 11

UJIAN TENGAH SEMESTER – SISTEM WAKTU NYATA

Program Studi Teknik Fisika


Departemen Teknik Nuklir dan Teknik Fisika Universitas Gadjah Mada
Hari dan Tanggal : Rabu, 28 Maret 2018 (07:30 – 09:30 WIB)
Waktu : Satu minggu sejak Rabu, 21 Maret 2018
Nama Dosen : Ir. Agus Arif, MT
Sifat Ujian : Tugas perancangan
Isi lebih dahulu Nama Mahasiswa : Asgard Susanto Utomo
identitas anda! No. Induk Mhs. : 14/363451/TK/41569

PETUNJUK:
1. Bacalah secara cermat ke-empat soal di bawah ini, lalu kerjakan setiap soal secara seksama,
mandiri dan tidak curang.
2. Susunlah penyelesaian untuk setiap soal perancangan secara seksama dengan menguji hasil
rancangan anda pada simulator mikrokontroler 8051.
3. Tulislah setiap kode-sumber Bahasa C hasil rancangan anda dalam dokumen ini di bawah
setiap soal. Sertakan juga diagram perangkat-keras yang diperlukan rancangan anda.

1. [30 poin] Rancanglah suatu program Bahasa C yang dapat diunggah ke dalam mikro-
kontroler 8051 yang dapat menampilkan suatu penunjuk waktu (watch) digital dengan
menggunakan piranti output berupa 4 penampil seven-segment. Dua penampil menunjuk-
kan jam terkini sedangkan dua penampil lainnya menunjukkan menit terkini. Usahakan
tampilan seven-segment mengikuti penunjuk waktu yang sesungguhnya (real-time). Selain
kode-sumber, sertakan juga diagram perangkat-keras yang dipergunakan dalam rancangan
anda. Output perancangan ini mirip seperti gambar berikut:

Jawaban:
/* soal-uts-1.c:Program 8051 yang dapat menampilkan suatu penunjuk waktu (watch)
digital dengan menggunakan
* piranti output berupa 4 penampil seven-segment. Dua penampil
menunjuk-kan jam terkini sedangkan
* dua penampil lainnya menunjukkan menit terkini. Usahakan tampilan
seven-segment mengikuti penunjuk
* waktu yang sesungguhnya (real-time).
* Pada simulasi Edsim memiliki keterbatasan tidak dapat menampilkan
lebih dari satu seven segment
* secara bersamaan, maka pengukur waktu akan dinyalakan secara
berurutan.
* Jadi akan
* Menggunakan delay yang diperkirakan berdasarkan trial n error agar
mendekati waktu nyata
* Update Freq = 20(untuk mendekati waktu nyata)
UTS – Sistem Waktu Nyata DTNTF – UGM

* sevensegment dibuat nyala berganti untuk melihat masih waktunya


mulai dari menit,puluhan menit, jam puluhan jam
* Nama : Asgard Susanto Utomo
* NIM : 14/363451/TK/41569
*/

#include <8051.h>
#define A0 P3_3 /* Dua bit untuk memilih alamat dari */
#define A1 P3_4 /* keempat seven-segment yang tersedia */
#define SevSeg P1 /* seven-segment terhubung dengan P1 */
#define OFF 0xFF /*untuk mematikan sevensegment sesaat*/

void tunda(void);

void _main_(void) __naked


{
/* mendefinisikan array dari tampilan angka 0 pada seven segment
menuju angka 9 secara berurutan*/
unsigned int bentuk[] =
{0x0C0,0x0F9,0x0A4,0x0C0,0x0C0,0x0F9,0x0A4,0x0B0,0x099,0x92,0x082,0xF8,0x80,0x90,0
x0C0,0x0F9,0x0A4};
unsigned int bentuk1[] =
{0x0C0,0x0F9,0x0A4,0x0C0,0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x40,0x
79,0x24};
unsigned char a, b, c, d, e;

for( ; ; ) { /* kalangan tak hingga*/


for (d = 4; d <= 6; d = d + 1){
for (e = d; e <= 9 && e > 6; e = e + 1){
for (b = 4; b <= 13; b = b + 1){
for (c = 4; c <= 9; c = c + 1){
for (a = 4; a <= 13; a = a + 1) {
A1 = 0; A0 = 0; tunda(); //pilih seven segment pada display 0
SevSeg = bentuk[a]; tunda();
SevSeg = OFF;

A1 = 0; A0 = 1; tunda(); //pilih seven segment pada display 1


SevSeg = bentuk[c]; tunda();
SevSeg = OFF;

A1 = 1; A0 = 0; tunda(); //pilih seven segment pada display 2


SevSeg = bentuk1[b]; tunda();
SevSeg = OFF;

A1 = 1; A0 = 1; tunda(); //pilih seven segment pada display 3


SevSeg = 0x0A4; tunda();
SevSeg = OFF;
}
}
}
}

for (b = 4; b <= 13; b = b + 1){


for (c = 4; c <= 9; c = c + 1){
for (a = 4; a <= 13; a = a + 1) {
A1 = 0; A0 = 0; tunda(); //pilih seven segment pada display 0
SevSeg = bentuk[a]; tunda();
SevSeg = OFF;

Lembar ke-2 dari total 11 halaman


UTS – Sistem Waktu Nyata DTNTF – UGM

A1 = 0; A0 = 1; tunda(); //pilih seven segment pada display 0


SevSeg = bentuk[c]; tunda();
SevSeg = OFF;

A1 = 1; A0 = 0; tunda(); //pilih seven segment pada display 0


SevSeg = bentuk1[b]; tunda();
SevSeg = OFF;

A1 = 1; A0 = 1; tunda(); //pilih seven segment pada display 0


SevSeg = bentuk[d]; tunda();
SevSeg = OFF;
}
}
}
}
}
}

void tunda(void) // untuk pengaturan delay


{
unsigned char i;
for (i = 0; i < 15; i = i + 1){
for (i = 0; i < 255; i = i + 1) {
for (i = 0; i < 255; i = i + 1){
;
}
}
}
}

2. [35 poin] Rancanglah suatu program Bahasa C yang dapat dijalankan pada mikrokontroler
8051 yang dapat melakukan kerja suatu pengukur waktu (stopwatch) digital dengan meng-
gunakan piranti output berupa 4 penampil seven-segment. Dua penampil menunjukkan
menit terkini sedangkan dua penampil lainnya menunjukkan detik terkini. Rancangan ini
juga menggunakan piranti input berupa 2 saklar yang bekerja sebagai berikut:

Lembar ke-3 dari total 11 halaman


UTS – Sistem Waktu Nyata DTNTF – UGM

 Saklar pertama merupakan tombol START yang jika ditekan akan memulai kerja
pengukur waktu sejak menit ke-0 dan detik ke-0.
 Saklar kedua merupakan tombol STOP yang jika ditekan akan menghentikan kerja
pengukur waktu dan menampilkan waktu pada menit dan detik yang terakhir.
Usahakan tampilan seven-segment mengikuti pengukur waktu yang sesungguhnya (real-
time). Selain kode-sumber, sertakan juga diagram perangkat-keras yang dipergunakan
dalam rancangan anda.

Jawaban:

/* soal-uts-2.c:Program untuk pengukur waktu (stopwatch) digital dengan meng-


gunakan
* piranti output berupa 4 penampil seven-segment. Dua penampil
menunjukkan
* menit terkini sedangkan dua penampil lainnya menunjukkan detik
terkini
* Terdapat tombol start dan stop untuk memulai dan menghentikan
kerja pengukur waktu
* Pada simulasi Edsim memiliki keterbatasan tidak dapat menampilkan
lebih dari satu seven segment
* secara bersamaan, maka pengukur waktu akan dinyalakan secara
berurutan.
* batasan: tombol start(switch 0) harus ditahan dan stop
menggunakan(switch 1)
* Menggunakan delay yang diperkirakan berdasarkan trial and
error agar mendekati waktu nyata
* Update Freq = 100.
* Nama : Asgard Susanto Utomo
* NIM : 14/363451/TK/41569
*/

#include <8051.h>
#define start P2_0 /* Tombol start menggunakan switch 0 */
#define stop P2_1 /* Tombol stop menggunakan switch 1 */
#define A0 P3_3 /* Dua bit untuk memilih alamat dari */
#define A1 P3_4 /* keempat seven-segment yang tersedia */
#define SevSeg P1 /* seven-segment terhubung dengan P1 */

/* mendefinisikan array dari tampilan angka 0 pada seven segment


menuju angka 9 secara berurutan*/
static const unsigned char angka[] = {0x0C0, 0x0F9, 0x0A4, 0x0B0, 0x99, 0x92,
0x082, 0xF8, 0x80, 0x90};

int detik=0; /* variabel array untuk angka satuan detik*/


int i; /* variabel untuk melakukan delay */
int puldet=1; /* variabel array untuk angka puluhan detik*/
int menit=1; /* variabel array untuk angka satuan menit*/
int pulmen=1; /* variabel array untuk angka puluhan menit*/

void _main_(void) __naked {


for(;;) { /* kalangan tak hingga*/
A0 = 0; A1 = 0; //pilih seven segment pada display 0

/* Tampilan sebelum program dimulai */


if (start == 1){ /* saat start tidak ditekan */
SevSeg = 0x0C0; /* seven segment satuan menunjukan angka 0*/
}

Lembar ke-4 dari total 11 halaman


UTS – Sistem Waktu Nyata DTNTF – UGM

/* Memulai stopwatch */
/* Saat tombol start ditekan */
if (start == 0 && stop == 1){
//untuk pengaturan detik
for (detik = 0; detik< 10; detik++) {
A0 = 0; A1 = 0; //pilih seven segment pada display 0

if (stop == 0){
while(stop == 0){
SevSeg = angka[detik];
for(i=0;i<60;i++);
}

}else if(stop == 1){


SevSeg = angka[detik]; /* Menampilkan angka satuan */
for(i=0;i<60;i++);
}

//pengaturan puluhan detik


if (detik== 9 && puldet<7 ){
A0 =1; A1 =0; //pilih seven segment pada display 1
SevSeg = angka[puldet];
for(i=0;i<25;i++);
puldet++;
}
else if (puldet == 7) {
puldet=1;
}

//pengaturan untuk menit


if (puldet== 7 && menit<10 && detik == 9){
A0 =0; A1 =1; //pilih seven segment pada display 2
SevSeg = angka[menit];
for(i=0;i<25;i++);
menit++;
}
else if (menit == 10) {
menit=1;
}

//pengaturan puluhan menit


if (menit == 10 && pulmen<7 && puldet == 7 && detik == 9){
A0 =1; A1 =1; //pilih seven segment pada display 3
SevSeg = angka[pulmen];
for(i=0;i<25;i++);
pulmen++;
}
else if (pulmen == 7) {
pulmen=1;
}

}
}
}
}

Lembar ke-5 dari total 11 halaman


UTS – Sistem Waktu Nyata DTNTF – UGM

3. [25 poin] Rancanglah suatu program Bahasa C yang dapat mengendalikan kerja mikro-
kontroler 8051 yang terhubung dengan piranti output berupa 1 penampil seven-segment dan
piranti input berupa keypad (papan-tombol) dengan 4 baris dan 3 kolom. Jika suatu tombol
keypad ditekan maka karakter dari tombol tersebut akan tertayang pada penampil seven-
segment. Selain kode-sumber, sertakan juga diagram perangkat-keras yang dipergunakan
dalam rancangan anda. Perangkat-keras yang terlibat dalam perancangan ini mirip seperti
gambar berikut:

Jawaban:

/* soal-uts-3.c : program Bahasa C yang dapat mengendalikan kerja mikro-kontroler


8051
* yang terhubung dengan piranti output berupa 1 penampil seven-segment
dan piranti input
* berupa keypad (papan-tombol) dengan 4 baris dan 3 kolom. Jika suatu
tombol keypad ditekan
* maka karakter dari tombol tersebut akan tertayang pada penampil
seven-segment.
* Ketika keypad bintang dan pagar ditekan muncul angka nol dikarenakan
sevensegmen tidak bisa menampilkan.
*
* Simulator edsim51: Update Freq = 100.
* Asgard Susanto Utomo, 25-03-2018
* 14/363451/TK/41569
*/

Lembar ke-6 dari total 11 halaman


UTS – Sistem Waktu Nyata DTNTF – UGM

#include <8051.h>
#define B0 P0_0 /* baris-0 keypad yang terhubung P0.0 */
#define B1 P0_1 /* baris-1 keypad yang terhubung P0.1 */
#define B2 P0_2 /* baris-2 keypad yang terhubung P0.2 */
#define B3 P0_3 /* baris-3 keypad yang terhubung P0.3 */
#define K0 P0_4 /* kolom-0 keypad yang terhubung P0.4 */
#define K1 P0_5 /* kolom-1 keypad yang terhubung P0.5 */
#define K2 P0_6 /* kolom-2 keypad yang terhubung P0.6 */
#define nilai P1 /* seven-segment terhubung dengan P1 */
#define A0 P3_3 /* Dua bit untuk memilih alamat dari */
#define A1 P3_4 /* keempat seven-segment yang tersedia */
#define satu 0xF9 //pendefinisian angka satu untuk seven segment
#define dua 0xA4 //pendefinisian angka dua untuk seven segment
#define tiga 0xB0 //pendefinisian angka tiga untuk seven segment
#define empat 0x99 //pendefinisian angka empat untuk seven segment
#define lima 0x92 //pendefinisian angka lima untuk seven segment
#define enam 0x82 //pendefinisian angka enam untuk seven segment
#define tujuh 0xF8 //pendefinisian angka tujuh untuk seven segment
#define delapan 0x80 //pendefinisian angka delapan untuk seven segment
#define sembilan 0x90 //pendefinisian angka sembilan untuk seven segment
#define enol 0xC0 //pendefinisian angka nol untuk seven segment

void _main_(void) __naked


{
A1 = 0; A0 = 0; //pilih seven segment pada display 0
K0 = 1; K1 = 1; K2 = 1; /* awali dgn semua kolom = HI */
while (1) {

//keypad pagar
B0 = 0; B1 = 1; B2 = 1; B3 = 1; /* uji baris-0 */
if (K0 == 0) { /* tombol keypad (B0,K0) ditekan */
while (K0 == 0) ; /* tunggu sampai tombol dilepas */
nilai = enol; /* tampilkan sevensegment */
K0 = 1; /* awali semua kolom = HI */
}

//keypad enol
B0 = 0; B1 = 1; B2 = 1; B3 = 1; /* uji baris-0 */
if (K1 == 0) { /* tombol keypad (B0,K1) ditekan */
while (K1 == 0) ;
nilai = enol;
K1 = 1;
}

//keypad bintang
B0 = 0; B1 = 1; B2 = 1; B3 = 1; /* uji baris-0 */
if (K2 == 0) { /* tombol keypad (B0,K2) ditekan */
while (K2 == 0) ;
nilai = enol;
K2 = 1;
}

// keypad 9
B0 = 1; B1 = 0; B2 = 1; B3 = 1; /* uji baris-1 */
if (K0 == 0) { /* tombol keypad (B1,K0) ditekan */
while (K0 == 0) ;
nilai = sembilan;
K0 = 1;

Lembar ke-7 dari total 11 halaman


UTS – Sistem Waktu Nyata DTNTF – UGM

//keypad 8
B0 = 1; B1 = 0; B2 = 1; B3 = 1; /* uji baris-1 */
if (K1 == 0) { /* tombol keypad (B1,K1) ditekan */
while (K1 == 0) ;
nilai = delapan;
K1 = 1;
}

//keypad 7
B0 = 1; B1 = 0; B2 = 1; B3 = 1; /* uji baris-1 */
if (K2 == 0) { /* tombol keypad (B1,K2) ditekan */
while (K2 == 0) ;
nilai = tujuh;
K2 = 1;
}

//keypad 6
B0 = 1; B1 = 1; B2 = 0; B3 = 1; /* uji baris-2 */
if (K0 == 0) { /* tombol keypad (B2,K0) ditekan */
while (K0 == 0) ;
nilai = enam;
K0 = 1;
}

//keypad 5
B0 = 1; B1 = 1; B2 = 0; B3 = 1; /* uji baris-2 */
if (K1 == 0) { /* tombol keypad (B2,K1) ditekan */
while (K1 == 0) ;
nilai = lima;
K1 = 1;
}

//keypad 4
B0 = 1; B1 = 1; B2 = 0; B3 = 1; /* uji baris-2 */
if (K2 == 0) { /* tombol keypad (B2,K2) ditekan */
while (K2 == 0) ;
nilai = empat;
K2 = 1;
}

//keypad 3
B0 = 1; B1 = 1; B2 = 1; B3 = 0; /* uji baris-3 */
if (K0 == 0) { /* tombol keypad (B3,K0) ditekan */
while (K0 == 0) ;
nilai = tiga;
K0 = 1;
}

//keypad 2
B0 = 1; B1 = 1; B2 = 1; B3 = 0; /* uji baris-3 */
if (K1 == 0) { /* tombol keypad (B3,K1) ditekan */
while (K1 == 0) ;
nilai = dua;
K1 = 1;
}

//keypad 1
B0 = 1; B1 = 1; B2 = 1; B3 = 0; /* uji baris-3 */

Lembar ke-8 dari total 11 halaman


UTS – Sistem Waktu Nyata DTNTF – UGM

if (K2 == 0) { /* tombol keypad (B3,K2) ditekan */


while (K2 == 0) ;
nilai = satu;
K2 = 1;
}
}
}

4. [10 poin] Radar atau radio detection and ranging adalah suatu sistem waktu-nyata yang
berfungsi untuk melacak suatu obyek dengan memanfaatkan gelombang radio untuk
menentukan jarak, sudut dan kecepatan obyek yang dilacak. Ketika radar dipergunakan
untuk melacak peluru kendali maka sistem waktu-nyata ini bersifat ketat (hard real-time
system), namun ketika radar dipergunakan untuk mengikuti perubahan cuaca maka sistem
ini bersifat longgar (soft real-time system). Pilihlah suatu sistem waktu-nyata yang (mirip
radar) pada penerapan tertentu bersifat ketat namun pada penerapan lainnya bersifat
longgar. Jelaskan cara kerja sistem yang anda pilih ketika bersifat ketat dan ketika bersifat
longgar.

Jawaban:

Robot pada saat dioperasikan untuk pembangkit listrik reaktor nuklir harus bersifat ketat agar
tidak terjadi kesalahan fatal yang terjadi. Untuk robot yang memainkan suatu alat musik lebih
bersifat longgar.

Processor yang ternaman pada pacemaker(pemacu jantung) harus selalu bersifat ketat agar
tidak menyebabkan hal-hal yang tidak dinginkan penggunanya., untuk sebuah otomasi mesin
cuci bisa bersifat longgar.

Lembar ke-9 dari total 11 halaman


UTS – Sistem Waktu Nyata DTNTF – UGM

1.Tiga baris instruksi assembly di bawah ini dapat melakukan pengubahan menjadi HI
(setting) pada suatu alamat memori RAM yang dapat diakses secara bit:

MOV A,24h
ORL A,#00100000
MOV 24h,A

Hasil dari ketiga baris instruksi tersebut juga dapat diperoleh dengan melakukan satu instruksi
assembly saja, yaitu ...

MOV 25h,#01h SETB 24h SETB 25h MOV 24h,#10h ADD 25h,#01

2.Singkatan dari nama register di dalam CPU yang berfungsi menyimpan alamat instruksi
yang berikutnya akan dijalankan CPU adalah ...

IR ALU PSW PC ACC

3.Istilah komputer “16-bit” berarti ...

lebar bus alamatnya adalah 16 saluran. panjang alamat dari komputer tersebut adalah
16 bit. lebar bus kontrolnya adalah 16 saluran. panjang dari setiap lokasi memorinya
adalah 16 bit. lebar bus datanya adalah 16 saluran.

4.Bit C atau CY (Carry flag), yang menandai telah terjadinya bawaan pada bit-7 dari suatu
operasi penambahan, berada di dalam register ...

IR PC ACC R7 PSW

5.Mode pengalamatan dari instruksi di bawah ini adalah ...

MOV A,0Ah

pengalamatan direct pengalamatan immediate pengalamatan register


pengalamatan relative pengalamatan indirect

6.Sistem radar (radio detection and ranging) dapat dipergunakan untuk mengendalikan lalu-
lintas pesawat terbang di bandara, namun dapat pula dipergunakan untuk memantau kondisi
cuaca. Pada penerapan yang kedua tersebut, sistem radar dapat digolongkan sebagai ...

Lembar ke-10 dari total 11 halaman


UTS – Sistem Waktu Nyata DTNTF – UGM

embedded system. firm real-time system. embedded real-time system. hard


real-time system. soft real-time system.

7.Lokasi memori di dalam RAM dapat dinamakan dengan istilah di bawah ini KECUALI ...

interrupt service routines. bit addressable locations. special function registers.


general purpose RAM. register banks.

8.Sistem tertanam (embedded system) dapat ditemukan di dalam berbagai piranti berikut ini
KECUALI ...

mikroskop optik yang bersifat analog. pemanggang gelombang mikro. pembaca


kartu memori berupa USB. mesin cuci. pengendali jarak-jauh untuk televisi.

9.Bagian dari mikrokontroler 8051 yang membangkitkan detak kerja yang disebut sebagai
siklus mesin adalah ...

catu daya. kaki RST. pentanahan. osilator. kaki-kaki I/O.

10.Fungsi alternatif dari kaki port 3 pada mikrokontroler 8051 yang dapat menerima data
secara serial dinamakan ...

WR T0 RXD INT1 TXD

Lembar ke-11 dari total 11 halaman

Anda mungkin juga menyukai