KENDALI MOTOR DC 12V
Makalah : Welly B - 198102241
Editor : Susanto Wibisono K
Dalam makalah ini dibahas rangkaian dan cara kerja dari 12V dc motor controller
berdasarkan PWM (Pulse Width Modulation.) Motor dikontrol kecepatannya secara
remote, menggunakan LCD Epson SED1200 sebagai sistem tampilan kecepatan.
Kecepatan yang ditampilkan pada LCD dinyatakan dengan satuan RPS (rotation per
second). Dipakai remote control buatan Sony yang biasa dipakai untuk TV, tombol
volume plus pada remote control Sony digunakan untuk menaikkan kecepatan dari
motor dc sedangkan tombol volume minus untuk menurunkan kecepatan.
BLOK
DIAGRAM

Gambar 1Blok Diagram Komponen Penyusun Motor DC
Makalah ini dibagi menjadi 4 bagian yaitu bagian remote control, memutar kipas,
menghitung kecepatan serta menampilkan ke LCD.
Remote Control
Pada remote control terdapat dua bagian yang utama
yaitu : bagian transmiter dan bagian receiver. Bagian transmitter dalam
hal ini menggunakan remote yang sudah jadi, yaitu remote untuk TV.
Sedangkan bagian penerimanya dibangun dari dioda infra merah, filter, dan
penguat sinyal/amplifier.
Rangakaian Receiver
Untuk dapat mengambil data yang dipancarkan oleh remote maka harus dibuat
rangkaian penerima yang terdiri dari op-amp, IC 74LS04 (inverter), multiturn
variable resistor, IR diode (receiver) dan beberapa komponen penunjang.
Rangkaian receivernya dapat dilihat pada gambar 2. Penggunaan dari op-amp
ini untuk mengatur penguatan dari sinyal yang diterima oleh IR diode. Sinyal
yang diterima oleh IR diode ini akan dimasukkan rangkaian high pass filter (C
dan R). Kombinasi nilai dari C dan R ini diperoleh dengan menggunkanan rumus :
f = 
f =

f = 159,23Hz
Sinyal yang keluar dari rangkaian high pass filter dikuatkan dua kali. Rangkaian
penguat 1 adalah non-inverting amplifier dengan menggunakan op-amp LM358.
Kemudian output dari rangkaian penguat 1 dikuatkan sekali lagi dengan penguatan
non inverting amplifier juga dengan op-amp LM358. Sinyal yang keluar dari
rangkaian penguat 2 ini masih mengandung sinyal carrier. Untuk itu sinyal
carriernya perlu dihilangkan dengan cara menambahkan rangkaian low pass filter
(R dan C).
f =

f =

f = 7.24kHz
Penggunaan rangkaian high pass filter dan low pass filter ini untuk membatasi
frekuensi yang diterima, sinyal yang berada di bawah 159.23 Hz dan di atas 7.24
kHz tidak dilewatkan. Dengan rangkaian low pass filter tersebut maka sinyal
carrier dari remote TV Sony tidak akan dilewatkan Kemudian sinyal itu
disempurnakan dengan menambahkan rangkaian comparator dengan mengunakan op-amp
tipe LM339. Komparator ini berfungsi jika tegangan yang masuk kurang dari
tegangan referensinya maka outputnya akan low sebaliknya jika tegangan yang
masuk melebihi tegangan referensi maka outputnya akan high. Output dari
LM339 ini akan dimasukkan IC 74LS04 sebagai inverter.

Gambar 2 Rangkaian Receiver Remote
Remote Control TV Sony
Remote Control
dibagi menjadi 3 menurut jenis pengkodeannya :
1.
Pulses coded
Jenis ini mengatur
panjang pulsanya, sehingga pulsanya divariasi untuk menunjukkan data itu
berlogic high atau low. Yang dijadikan variasi adalah pulsa highnya. Metode ini
dipakai oleh remote Sony.

Gambar 3 Pulses
Coded
2.
Space coded
Metode ini juga
mengatur panjang pulsanya untuk menunjukkan data tersebut berlogic low atau
high. Tetapi yang diatur adalah lebar pulsa lownya. Jenis ini diterapkan oleh
remote Panasonic

Gambar 4Space
Coded
3.
Shift coded
Metode ini yang
paling berbeda diantara kedua metode di atas. Metode ini menggunakan prinsip
perbedaan fase untuk menunjukkan data yang dikirim berlogic low atau high.
Metode pengiriman data ini diterapkan oleh remote Philips.

Gambar 5 Shift
Coded
Penggunaan infra red
sangat bagus dalam komunikasi dan kontrol suatu sistem. Infra red adalah
frekuensi radiasi yang bekerja di bawah tingkat sensitivitas mata manusia. Jadi
manusia tidak dapat melihat sinar tersebut. Gambaran sinyal yang dikirimkan oleh
transmitter dan diterima oleh IR demodulator dapat dilihat pada gambar 3 sebagai
contoh yang dikirimkan adalah header:

Gambar 6 Hubungan Antara Sinyal TX dan RX
Jika transmitter
mengirimkan sinyal on dan off maka pada receiver juga menerima sinyal on dan
off. Tetapi receiver hanya mendeteksi ada carrier atau tidak. Jika ada data
carrier maka pulsa yang dikirimkan adalah high sebaliknya jika tidak ada carrier
maka pulsa yang dikirimkan adalah low. Sinyal carrier sebesar 40 kHz yang
diterima oleh receiver akan hilang, karena pada receiver sudah dibatasi dengan
menggunakan rangkaian high pass filter dan low pass filter, frekuensi yang
kurang dari 159.23 Hz dan lebih dari 7.24 kHz tidak dilewatkan. Sedangkan sinyal
informasi sebesar 4T=2200ms
(454.54 Hz) akan diterima begitu juga pulsa lownya sebesar 1T=550ms
(1.82 kHz) akan diterima untuk diolah sebagai data header. Salah satu contoh
aplikasi dari penggunaan infra red adalah pada TV/VCR remote control. Infra red
ini bekerja pada range frekuensi antara 30-60 kHz.
Dengan melihat
karakteristik ini maka remote control menggunakan frekuensi carrier sekitar
36-40kHz. Untuk membangkitkan sinyal dengan frekuensi 40kHz tidak sulit tetapi
untuk menerima sinyal dengan frekuensi 40 kHZ itu membutuhkan filters, penguatan
sinyal, dan menghilangkan sinyal carrier sehingga data yang diterima benar-benar
valid.
Remote yang
digunakan dalam hal ini adalah remote TV Sony. Format data dari remote Sony
terdiri dari 12 bits data. Data yang dikirimkan pertama kali adalah header
selanjutnya baru data.
Format data:
Hxxxxxxyyyyyy


Header LSB MSB
xxxxxx : command
yyyyyy : address
Jarak antara data
dengan data adalah 25ms.
Remote Sony ini
memiliki karakteristik yaitu memiliki periode (1T)=550
ms
dan carrier 40Khz. Untuk remote Sony memiliki header high 4T dan low 1T,
untuk logic 1 memiliki pulsa high sepanjang 2T dan low 1T, dan untuk logic 0
memiliki pulsa high 1T dan low 1T. Ini merupakan format aslinya sedangkan jika
mengamati sinyal yang dikirimkan remote melalui IR modul kebalikannya karena
padda IR modul ada inverternya. Berikut contoh bentuk gambar pulsa dari header,
logic 1 dan logic 0 dari remote TV Sony yang sebenarnya (belum melalui gerbang
inverter).
Gambar 7 Pulsa
Remote Control Sony
Untuk dapat
mengamati bentuk sinyal yang dipancarkan oleh remote maka diperlukan osiloskop.
Dengan osiloskop akan diketahui bentuk sinyal dari masing-masing tombol pada
remote.
Berikut ini adalah
bentuk-bentuk sinyal dari remote Sony setelah keluar dari titik B pada gambar 2
(setelah melalui gerbang inverter).
Gambar 8 Format
Sinyal Remote Control Sony
Tabel 1 Tabel Fungsi
Tombol dan Data Yang Diterima oleh Rangkaian Penerima
|
Nama tombol |
Data Hexa |
Fungsi Tombol |
Data Hexa |
Fungsi Tombol |
Data Hexa |
|
Tombol 1 |
#080 |
Volume - |
#093 |
Sharpness - |
#0A3 |
|
Tombol 2 |
#081 |
Mute |
#094 |
TV/Video |
#0A5 |
|
Tombol 3 |
#082 |
Power(toggle) |
#095 |
Balance L |
#0A6 |
|
Tombol 4 |
#083 |
Normal value |
#096 |
Balance R |
#0A7 |
|
Tombol 5 |
#084 |
Picture + |
#098 |
Power on |
#0AE |
|
Tombol 6 |
#085 |
Picture -
|
#099 |
Power off
|
#0AF |
|
Tombol 7 |
#086 |
Colour + |
#09A |
Input line A |
#0C0 |
|
Tombol 8 |
#087 |
Colour - |
#09B |
Input line B |
#0C1 |
|
Tombol 9 |
#088 |
Brightness + |
#09E |
Input AV |
#0C3 |
|
Tombol 0 |
#089 |
Brightness - |
#09F |
Input digital |
#0C5 |
|
Ch + |
#090 |
Hue + |
#0A0 |
Input Vtr |
#0C7 |
|
Ch - |
#091 |
Hue - |
#0A1 |
Sharpness - |
#0A3 |
|
Volume + |
#092 |
Sharpness + |
#0A2 |
|
|
Untuk membaca berapa
besarnya header, logika1 dan logika 0, maka digunakan timer untuk menghitungnya
jadi yang dibaca high dan lownya.
Potongan Program 1:
Program Untuk Membaca Remote
1:
.DATA
2: TMP
DS 15
3:
4:
.CODE
5:
CLR EX0
;MATIKAN INTERUPT
6:
MOV R0,#TMP
;Isi R0 dengan alamat TMP
7:
MOV TH1,#0
;TH1 DIISI 0
8:
MOV TL1,#0
;TL1 DIISI 0
9:
SETB TR1
;JALANKAN TIMER 1
10:
LOP1:
11:
JNB P3.2,*
;CEK P3.2 LOW TETAP KE LOP1
12:
LOP2:
13:
JNB P3.2,LOP3
;P3.2, APAKAH SUDAH LOW ? JIKA SUDAH KE LOP3
14:
MOV
A,TH1 ;TH1
DIISIKAN KE A
15:
CJNE
A,#$0C,LOP2 ;TUNGGU SAMPAI OVERFLOW
16:
SJMP
EXIT
;DATA SELESAI DITERIMA SEMUA,
17:
;LOMPAT KE EXIT
18:
LOP3: CLR TR1
;MATIKAN TIMER 1
19:
MOV
@R0,TH1 ;TH1 DIMASUKKAN KE
ALAMAT DARI R0
20:
INC
R0
;NAIKKAN R0
21:
SJMP
IR
;KEMBALI AMBIL DATA
22:
EXIT:
Setelah datanya
diambil maka dilihat apakah datanya berupa header, logic 1, logic 0. Dengan
menggunakan timer maka dapat diketahui nilai dari headernya sebesar 0A, untuk
logika 1 sebesar 06, sedangkan data highnya sebesar 06 dan untuk data lownya
sebesar 04. Kemudian data yang masuk dikurangi oleh 05 jika ada carry berarti
data low sebaliknya jika tidak ada carry berarti data high. Kemudian carrynya
dikomplemen dan selanjutnya digeser dengan perintah RRC(rotate right dengan
carry). Proses ini akan dilakukan sebanyak 8 kali pergeseran. Berikut ini
program untuk mengolah data yang masuk. Proses ini akan dilakukan sebanyak 8
kali pergeseran.
Potongan Program 2 :
1:
EXIT:
2:
CLR TR1
;MATIKAN TIMER
3:
MOV
R0,#TMP ;ALAMAT TEMP DIISIKAN KE R0
4:
MOV
A,@R0 ;ISINYA R0 DIISIKAN KE A
5:
CLR C
;CLEAR CARRY
6:
SUBB A,#9
;CEK APAKAH HEADERNYA SONY
7:
;DENGAN DIKURANGI 9(HEADERNYA SONY=0A)
8:
JNC
SONY ;TIDAK ADA CARRY,BERARTI SONY
9:
SETB EX0
;ADA CARRY AKTIFKAN EXTERNAL INTERUPT
10:
SJMP
COBA
11:
SONY:
12: INC
R0 ;R0 DIINCREMENT
13:
DATA:
14: MOV
R7,#8 ;DIAMBIL 8 BIT DATA
15:
MOV
R6,#0 ;NILAI AWAL R6 DIISI 0
16:
LDATA:
17: MOV
A,@R0 ;ALAMAT DARI R1 DISIKAN KE A
18:
CEKBIT:
19: CLR
C ;CLEAR CARRY
20:
SUBB
A,#5 ;DIKURANGI 5(DATA HIGH SONY=06
21:
;DATA LOW SONY=04)
22:
CPL
C ;CARRY DIKOMPLEMEN
23:
MOV
A,R6 ;R6 DIISIKAN KE A
24:
RRC
A ;A DIGESER BERSAMA CARRY
25:
MOV
R6,A ;DISIMPAN DI R6
26:
INC
R0
27:
DJNZ
R7,LDATA ;TERUS SAMPAI 8 BIT DATA
Pengaturan Kecepatan Putar Kipas
Untuk menjalankan kipas digunakan rangkaian
transistor yang disusun secara Darlington. Transistor yang dipakai adalah
transistor jenis NPN tipe BC 547 yang memiliki faktor penguatan dc (hfe) sebesar
125 dan mampu mengalirkan sampai arus 100 mA DC. Rangkaian untuk menjalankan
transistor dapat dilihat pada gambar 9:

Gambar 9 Rangkaian Untuk Menjalankan Motor
Untuk mengatur kecepatan kipas digunakan teknik PWM(
Pulse Width Modulation), yakni mengatur besarnya dutycycle, frekuensinya tetap
tetapi lebar pulsa high dan lownya dapat diatur. Untuk itu digunakan timer untuk
mengatur pulsa high dan pulsa lownya. Jadi dutycyclenya akan dimulai dari
20%,30%,40%,50%,60%,70%,80%,90%. Semakin besar dutycyclenya maka semakin cepat
pula putaran dari motor. Berikut ini merupakan potongan program untuk
menjalankan kipas dengan prinsip PWM:
Potongan Program 3 :Pengaturan Kecepatan Kipas
1: PWM:
2:
MOV A,R4
;NILAI AWAL R4 DIISIKAN KE A
3:
MOV DPTR,#TABELH1
;ALAMAT TABELH1 DIISIKAN KE DPTR
4:
MOVC A,@A+DPTR
;A SEBAGAI PENUNJUK TABELH1 KEMUDIAN DIISIKAN KE A
5:
MOV TABH,A
;TABH DIISI A
6:
MOV A,R4
7:
MOV DPTR,#TABELH2
;ALAMAT TABELH2 DIISIKAN KE DPTR
8:
MOVC A,@A+DPTR
;A SEBAGAI PENUNJUK TABELH2 KEMUDIAN DIISIKAN KE A
9:
MOV
TABH+1,A
;A DIISIKAN KE TABH+1
10:
CLR TR0
11:
CJNE
R3,#0,LOW ;BANDINGKAN
R3 DENGAN 0 TIDAK SAMA KE LOW
12:
SETB P3.1
13:
MOV
TH0,TABH
;TABH DIISIKAN KE TH0
14:
MOV
TL0,TABH+1 ;TABH+1
DIISIKAN KE TL0
15:
MOV
R3,#1
;R3 DIISI 1
16:
SETB TR0
;JALANKAN TIMER
17:
SJMP SELESAI
18:
LOW:
19: MOV
A,R4
20:
MOV
DPTR,#TABELL1
21:
MOVC A,@A+DPTR
22:
MOV
TABL,A
23:
MOV
A,R4
24:
MOV
DPTR,#TABELL2
25:
MOVC A,@A+DPTR
26:
MOV
TABL+1,A
27:
CLR
P3.1
28:
MOV
TH0,TABL
29:
MOV
TL0,TABL+1
30:
SETB TR0
31:
RET
32:
TABELH1 DB $FF,$FF,$FE,$FE,$FE,$FD,$FD,$FC,$FC,$FC
33:
TABELH2 DB
$FF,$38,$D4,$70,$0C,$A8,$44,$E0,$7C,$19
34:
TABELL1 DB $FC,$FC,$FD,$FD,$FE,$FE,$FE,$FF,$FF,$FF
35:
TABELL2 DB
$19,$E0,$44,$A8,$0C,$70,$D4,$38,$9C,$FF
Penghitungan
Kecepatan Putar Kipas
Untuk menghitung kecepatan dari motor maka
digunakan rangkaian photo transistor. Prinsip dari photo transistor ini adalah
mirip dengan transistor lainnya. Wujud dari rangkaian photo transistor ini dapat
dilihat pada gambar 10:

Gambar 10
Rangkaian Photo Transistor Dan 74LS14
Prinsip dari rangkaian ini adalah :
Dengan mengetahui prinsip dari photo transistor ini maka harus dibuat penghalang
antara transistor dan LED, pada penghalang itu diberi lobang sedikit. Penghalang
itu harus dibuat seporos dengan kipas dc tersebut. Sehingga ketika berputar
output dari transistor akan mengalami high dan low. Agar output dari rangkaian
ini menjadi lebih akurat maka ditambahkan schmitt trigger (74LS14). Program
untuk menghitung kecepatan dapat dilihat sebagai berikut:
Potongan Program 3 : Menghitung kecepatan Putar
Kipas
1:
LOOP:
2:
JB
P3.4,*
3:
JNB
P3.4,*
4:
INC COUNT
5:
SJMP LOOP
Tampilan-SED1200
Tampilan yang dipakai adalah LCD Epson SED1200. LCD
ini digunakan untuk menampilkan kecepatan putaran dari kipas dalam satuan RPS
(Rotation per second). LCD Epson SED1200 ini dilengkapi dengan 4 jalur data
(DB0
DB3) yang dipakai untuk menampilkan kode ASCII maupun perintah untuk
mengatur kerjamya SED1200. Kode ASCII maupun perintah tersebut semuanya
merupakan kode 8 bit maka kode-kode itu dikirimkan dua kali, yang pertama
dikirimkan adalah 4 bit yang bernilai besar (D4..D7). baru kemudian 4 bit
sisanya(D0..D3). Selain dilengkapi dengan jalur data maka LCD Epson SED1200 ini
dilengkapi dengan CS,WR, dan A0. A0 digunakan untuk membedakan data yang
dikirimkan berupa perintah atau kode ASCII. Jika A0=0 maka data yang dikirimkan
adalah perintah untuk mengatur kerja SED1200 sebaliknya jika A0=1 maka data yang
dikirim adalah kode ASCII yang ingin ditampilkan.
·
Sinyal CS digunakan untuk mengaktifkan
proses pengiriman data, selama proses ini berlangsung CS diaktifkan pada level
tegangan 0
·
Data yang dikirimkan ke SED1200 disiapkan di
DB0..DB3, seperti yang telah dibicarakan dipecah menjadi 2 kali pengiriman yaitu
pengiriman D4..D7 dan selanjutnya D0..D3.
·
Sinyal WR dijadikan sebagai sinyal komando,
pengambilan data terjadi pada saat WR berubah dari 0 menjadi 1

Gambar 11 Hubungan SED1200 ke AT89C2051
Pada potongan program 4 ini akan ditunjukkan
bagaimana mengendalikan SED1200.
·
Subrutin KirimPerintah bekerja pada saat
A0=0 berarti data yang dikirimkan AT89C2051 ke SED1200
berupa perintah untuk mengatur tata kerja SED1200. Subrutin KirimASCII bekerja
pada saat A0=1 berarti
data yang dikirimkan AT89C2051 sebagai kode ASCII yang akan ditampilkan.
·
Selama proses pengiriman data CS diaktifkan
pada level tegangan 0.
·
Data pada Akumulator A dikirimkan sebanyak
dua kali yaitu 4 bit pertama A4..A7 dan 4 bit kedua A0..A3.
·
Karena AT89C2051 tidak mempunyai sinyal ALE
maka dibuat 16 pulsa clock yang dibutuhkan oleh SED1200
Potongan Program 4 : Mengatur Tampilan LCD
1:
;****DAFTAR PERINTAH PENGATUR SED1200*****
2:
RESETSED1200
EQU %00010000
3: TAMPILAN1BARIS
EQU %00010010
4: TAMPILAN2BARIS
EQU %00010011
5: DISPLAYOFF
EQU %00001100
6: DISPLAYON
EQU %00001101
7: TANPACURSOR
EQU %00001110
8: PAKAICURSOR
EQU %00001111
9: GARISBAWAH
EQU %00001000
10:
BLOK
EQU %00001001
11:
TIDAKKEDIP
EQU %00001010
12:
BERKEDIP
EQU %00001011
13:
CURSORKEKANAN
EQU %00000100
14:
CURSORKEKIRI
EQU %00000101
15:
KEBARISSATU
EQU %10000000
16:
KEBARISDUA
EQU %11000000
17:
18:
;****Konfigurasi PIN LCD****
19:
WRITE
BIT P1.4
20:
A0
BIT P1.5
21:
CS
BIT P1.6
22:
CLK
BIT P1.7
23:
LCD:
24:
ACALL
SIAPKANSED1200
25:
ACALL
HAPUSTAMPILAN
26:
MOV
A,#KEBARISSATU
27:
ACALL
KIRIMPERINTAH
28:
MOV
A,R1
29:
MOV
B,#100
30:
DIV AB
31:
ADD
A,#$30
32:
ACALL
TAMPILKANHURUF
33:
MOV
A,B
34:
MOV
B,#10
35:
DIV AB
36:
ADD
A,#$30
37:
ACALL
TAMPILKANHURUF
38:
MOV
A,B
39:
ADD
A,#$30
40:
ACALL
TAMPILKANHURUF
41:
MOV
A,#$52
42:
ACALL
TAMPILKANHURUF
43:
MOV
A,#$50
44:
ACALL
TAMPILKANHURUF
45:
MOV
A,#$53
46:
ACALL
TAMPILKANHURUF
47:
MOV
A,R4
48:
ADD
A,#$30
49:
ACALL
TAMPILKANHURUF
50:
MOV
A,#KEBARISDUA
51:
ACALL
KIRIMPERINTAH
52:
RET
53:
54:
;****MEMPERSIAPKAN TATA KERJA SED1200*****
55:
SIAPKANSED1200:
56:
SETB Write
;LEVEL TEGANGAN BAKU
57:
SETB CLK
58:
CLR CS
59:
MOV
A,#RESETSED1200
60:
ACALL
KIRIMPERINTAH
61:
MOV
A,#TAMPILAN2BARIS
62:
ACALL
KIRIMPERINTAH
63:
MOV
A,#KEBARISSATU
64:
ACALL
KIRIMPERINTAH
65:
MOV
A,#GARISBAWAH
66:
ACALL
KIRIMPERINTAH
67:
MOV
A,#PAKAICURSOR
68:
ACALL
KIRIMPERINTAH
69:
MOV
A,#BERKEDIP
70:
ACALL
KIRIMPERINTAH
71:
MOV
A,#DISPLAYON
72:
ACALL
KIRIMPERINTAH
73:
MOV
A,#KEBARISDUA
74:
ACALL
KIRIMPERINTAH
75:
MOV
A,#GARISBAWAH
76:
ACALL
KIRIMPERINTAH
77:
MOV
A,#PAKAICURSOR
78:
ACALL
KIRIMPERINTAH
79:
MOV
A,#BERKEDIP
80:
ACALL
KIRIMPERINTAH
81:
MOV
A,#DISPLAYON
82:
ACALL
KIRIMPERINTAH
83:
RET
84:
85:
; ***** Menghapus Tampilan SED1200 *****
86:
HapusTampilan:
87:
MOV
A,#KeBarisSatu ;BARIS SATU DIHAPUS
88:
ACALL HapusBaris
89:
MOV
A,#KEBARISDUA
90:
ACALL HAPUSBARIS
91:
HapusBaris:
92:
ACALL
KirimPerintah ;UNTUK PINDAH BARIS
93:
MOV
R7,#10
;10 HURUF PER BARIS
94:
HapusLagi:
95:
MOV
A,#' '
;MENAMPILKAN SPASI
96:
ACALL
TAMPILKANHURUF ;TAMPILKAN SPASI
97:
DJNZ
R7,HapusLagi
98:
RET
99:
100:
;***** Tampilkan String yang ada di Memori Program
*****
101:
TAMPILKANHURUF:
102:
ACALL KIRIMASCII
103:
RET
104:
105:
;*****SUBRUTIN SED1200****
106:
KirimPerintah:
107:
CLR A0
; A0=0 : COMMAND MODE
108:
SJMP OutByte
109:
KirimASCII:
110:
SETB A0
; A0=1 : CHARACTER MODE
111:
OutByte:
112:
CLR CS
113:
PUSH A
; SIMPAN DULU
114:
SWAP A
; A0..A3 DAN A4..A7 TUKAR TEMPAT
115:
ACALL OutNibble
; OUTPUTKAN A4..A7
116:
POP A
; AMBIL KEMBALI SIMPANAN
117:
ACALL OutNibble
; OUTPUTKAN A0..A3
118:
SETB CS
119:
120:
;***** Membuat 16 pulsa CLK ****
121:
MOV R6,#32
122:
Buat16CLK:
123:
CPL CLK
; CLK DIBALIK, '0'->'1' DAN '1'->'0'
124:
DJNZ R6,Buat16CLK
; SEBANYAK 32 KALI
125:
RET
126:
OutNibble:
127:
ANL A,#$0F
; HANYA A.0..A.3 YANG DIPAKAI
128:
MOV R6,A
; SIMPAN DULU
129:
MOV A,P1
; AMBIL NILAI YANG SUDAH ADA DI P1
130:
ANL A,#$F0
; PERTAHANKAN NILAI A.4..A.7
131:
ORL A,R6
; GABUNGKAN DENGAN SIMPANAN A.0..A.3
132:
MOV P1,A
; SIAPKAN KE SED1200
133:
CLR Write
; '0'-KAN DULU KAKI WR SEED1200
134:
SETB Write
; DATA DIAMBIL SED1200
135:
RET