ill . e>srki>roan.aal!if · 80c31 dan hanya membutuhkan tambahan komponen yang terdiri dari...
TRANSCRIPT
I l l . E>SRKI>rOAN.AAl!if
1. PENDAHULUAN
Untuk membuat suatu sistem remote control yang
terprogram, maka sebagai langkah awal harus ditentukan
sistem yang akan digunakan. Dalam tugas akhir ini digu-
nakan minimum sistem dengan mikrokontroler 80C31.
Untuk pengolahan dan penyimpanan data pada RAM
menggunakan sistem data paralel. Media transmitter
maupun receiver menggunakan sensor infra merah.
2. PERENCANAAN SISTEM
Seperti telah disebutkan diatas, untuk pengendalian
minimum sistem digunakan mikrokontroler 80C31. Adapun
dipilih mikrokontroler 80C31 sebagai pusat pengontrol
dan pengolah data, karena adanya fasilitas yang dimiliki
oleh mikrokontroler 80C31 yang akan mempermudah sistem
yang direncanakan, antara lain fasilitas timer / counter
dan input output port.
KEn'BOPRO MINIMUM 1 DRIVER TRANSMITTERSISTEM INFRfl IMT^ARED MERAH
OUTPUT CHPNNEL 1
OUTPt/T CHANNEL 2
OUTPUT CHftNNEL 10
HINIMUMSISTEM
KEYBOftRD
RECEIVERINFRAMERfiH
AMPLIFIER
GAMBAR 3-1 BLOK DIAGRAM PERANGRAT KERAS
Keyboard ditekan dideteksi oleh minimum sistem
80C31, untuk mendeteksi penekanan keyboard dilakukan
dengan sistem scan keyboard. Data hasil penekanan di
proses oleh mikrokontroler 80C31. Kemudian data dikirim
pada driver infra merah untuk dipancarkan oleh infra
merah.
Data yang dipancarkan oleh infra merah diterima
oleh bagian receiver infra merah, data tersebut difilter
dan dikuatkan oleh amplifier, kemudian data tersebut di
proses oleh mikrokontroler 80C31. Data hasil mikrokon
troler 80C31, dioutputkan pada output channel. Keyboard
pada minimum sistem receiver digunakan untuk setting
baik jam, maupun password.
3. PERENCANAAH PERANGKAT KERAS
Perencanaan perangkat keras untuk alat remote
control dengan basis mikrokontroler 80C31 yang dapat
dilihat pada gambar 3-2.
Diagram blok tersebut menggambarkan minimum sistem
dengan mikrokontroler 80C31 yang terdiri dari EPROM,
RAM, PPI 82C55, RTC MC 146818, dekoder beserta sinyal
kontrol, dan display.
EPROM yang, digunakan tipe 2764 berkapasitas 8
KByte, berfungsi untuk menyimpan program kontrol yang
akan mengendalikan semua aktifitas pada minimum sistem.
RAM yang digunakan tipe 6264 berkapasitas 8 KByte,
berfungsi untuk menyimpan dan proses data.
GAMBAR 3-2DIAGRAM BLOK MINIMUM SISTEM DENGAN 80C31
PPI 82C55 digunakan sebagai I/O port yang dihubung-
kan dengan display seven segment serta untuk scan key
board .
RTC MC 146818 digunakan untuk mengetahui tanggal,
bulan ,tahun, jam, menit, serta digunakan untuk proses
timer.
Dekoder dan sinyal kontrol. Dekoder berfungsi untuk
mengaktifkan piranti atau mengatur pengalaraatan piranti
(device), sedangkan sinyal kontrol berfungsi untuk
mengaktifkan buffer data dari piranti dan mengatur arah
perpindahan data antar mikrokontroler dan piranti
piranti.
Display yang digunakan adalah empat buah seven
segment yang berfungsi untuk menampilkan jam, menit,
tanggal, bulan, tahun serta tampilan channel yang aktif.
3.1 Rangkaian Eendukung Mikrp-kontroler—80C31Rangkaian pendukung operasi mikrokontroler 80C31
terdiri dari rangkaian pembangkit sinyal clock
dan rangkaian reset.
3.1.1 Rangkaian Clock. Rangkaian clock yang
digunakan dalam minimum sistem 80C31 ini merupa-
kan rangkaian clock yang dianjurkan oleh Intel
Co. selaku pembuat mikrokontroler. Rangkaian
clock ini mempergunakan fasilitas 'internal clock
generator' yang terdapat dalam mikrokontroler
80C31 dan hanya membutuhkan tambahan komponen
yang terdiri dari satu buah kristal atau 'ceramic
resonator' dan dua buah kapasitor untuk membentuk
rangkaian clock yang lengkap.
Wilai kapasitansi dari kapasitor dipakai 2 0 pF,
nilai 2 0 pF ini diambil dari buku data yang
menyatakan bahv?a nilai kapasitansi yang diperke-
nankan untuk oscillator kristal adalah 20 pF -
40 pF dan 30 pF - 50 pF jika menggunakan 'ceramic
resonator'. Karena oscillator yang digunakan
adalah kristal, maka nilai kapasitansi dari
k a p a s i t o r b e r k i s a r dari 20 pF - 40 pF^^.
Kristal yang digunakan untuk minimum sistem 80C31
mempunyai nilai 11 MHz, nilai ini diambil karena
frekuensi oscillator juga dipakai sebagai pem-
bangkit 'baud rate' sehingga harus dipilih suatu
frekuensi yang merupakan kelipatan dari nilai
'baud rate' dan juga mendekati frekuensi 12 MHz
yang merupakan frekuensi oscillator yang dianjur-
kan. Dari kedua alasan tersebut diatas, didapat
suatu harga yaitu 11,059 MHz, tetapi karena
kristal dengan nilai tersebut sukar didapat maka
diambil suatu pendekatan, dan kristal yang mem
punyai nilai terdekat adalah 11 MHz. Pendekatan
hicrocontroller Handbook (Sunnyvale: Advanced Micro Devices, 1988), p. 1-1.
ini masih diijinkan dalam komunikasi serial
karena selisih yang ada masih dibawah 1 0 %.
C10
i f
J 21
: c i isaoF
SIsw
D1
c ia
R1
jax.-X3.
U1ES5A/P PCS.a
ra . 1H I p e .s
ra .3P0.4
XH r e .5 ra .eP0.7
RESETp s.e p a , 1
INTO P2.2IN TI P S .3TO P2. 4T1 P2S.S
p a .sP2. -7
P I . aP I . 2 P I ,9 mP I ,-4. CP i . 7 HXD
.......
33
GAMBAR 3-3
ElAHGKAIAH CLOCK DAN RESET
3.1.2 Rangkaian Reset. Rangkaian reset untuk
minimum sistem 80C31 direncanakan agar mempunyai
kemampuan 'power on reset' disamping reset secara
manual dengan menggunakan saklar 'push on'. Untuk
dapat memenuhi kedua hal tersebut diatas, harus
dipenuhi beberapa syarat, yaitu :
1 . Lebar pulsa untuk sinyal reset harus lebih
besar dari 24 periode oscillator ( 2 siklus
mesin).
2. 'Rise time' dari Vcc tidak melebihi 1 ms.
3. Waktu 'start up' dari oscillator tidak mele
bihi 1 0 ms.
Syarat nomor 2 dan nomor 3 hanya berlaku bila
'power on reset' digunakan.
Rangkaian reset yang digunakan untuk minimum
sistem 80C31 ditunjukkan oleh gambar 3-3. Cara
kerja dari rangkaian tersebut adalah sebagai
berikut, bila tegangan supply Vec mulai diberi-
kan, maka ada arus yang melewati kapasitor se-
hingga menimbulkan beda tegangan pada resistor.
Tegangan pada pin RST merupakan beda tegangan
antara Vco dan tegangan pada kapasitor. Karena
sifat dari kapasitor maka tegangan pada pin RST
akan menurun sehingga akhirnya menoapai tegangan
lower threshold' dari internal schmitt trigger
(2,5 V). Untuk bisa memberikan efek 'power on
reset' maka waktu penurunan tegangan dari Voc
sampai mencapai tegangan 'lower threshold' dari
schmitt trigger harus lebih besar dari 2 siklus
mesin ditambah dengan waktu 'start up' dari
oscillator.
Saklar 'push on' digunakan untuk keperluan reset
secara manual, bila saklar ditekan maka pin RST
akan mendapat tegangan setara dengan Vco dan hal
ini menyebabkan mikrokontroler berada dalam
keadaan reset.
Dengan mengasumsikan waktu 'start up' dari oscil
lator 10 ms dan frekuensi oscillator 11 MHz maka
lebar pulsa untuk pin reset harus lebih besar
dari ((10xl0"3) + (2 xl2 xl0 “6 /ll)) detik atau
10,0021 ms. Dengan menggunakan ketentuan bahwa
tegangan 'lower threshold' dari pin RST sebesar
2,5 volt, t(lebar pulsa) sebesar 10,002 ms dan
rumus :
Vreset = Vco ( 1 - )
maka didapat iiilai RC sebesar 14,42998 ms.
Ada cukup banyak nilai resistor dan kapasitor
yang dapat memenuhi nilai konstanta RC tersebut
diatas, tetapi dengan memperhatikan nilai-nilai
komponen yang ada di pasaran maka nilai untuk
kapasitor diambil 10 uF dan nilai untuk resistor
diambil 4,7 KQ. Pengambilan nilai resistor dan
kapasitor tersebut masih dibenarkan karena dengan
kedua nilai tersebut didapatkan lebar pulsa reset
sebesar 47.00 ms dan nilai ini lebih besar dari
lebar pulsa reset minimum.
3.2 Dekoder Dan Sinyal KontrolUntuk menghubungkan mikrokontroler 80C31 dengan
piranti-piranti pendukung yang lain, seperti
piranti memori, piranti input atau output dan
sebagainya, maka dibutuhkan suatu rangkaian
dekoder dan sinyal kontrol. Berikut ini akan
dijelaskan rangkaian dekoder dan sinyal kontrol.
3.2.1 Rangkaian Dekoder. Mikrokontroler 80C31
mempunyai dua buah peta alamat memori, yaitu peta
alemat memori program dan peta alamat memori
data. Kedua peta alamat memori tersebut diakses
secara terpisah oleh program pengontrol. Pemben-
tukan peta alamat memori program tidak memakai
dekoder, karena peta alamat memori program hanya
ditempati satu buah EPROM dengan kapasitas 8
KByte. EPROM 2784 ditempatkan pada alamat 0000H -
IFFFH.
FFFFH
6000H5FFFH
4000H3FFFH
2000HIFFFH
0000H
K 0 S 0 N G
R T C
8 2 5 5
2 7 6 4 &
8 2 8 4
GAMBAR 3-4
PETA ALAMAT MEMORI
Dekoder digunakan untuk memberi peta alamat memo
ri data. Dekoder yang digunakan satu buah yaitu
IC 74LS138. Untuk memberikan interval 8 KByte
pada masing-masing outputnya, ketiga input alamat
A, B dan C dari IC dekoder 74LS138 masing-masing
dihubungkan dengan dan Aj g dari mikro-
kontroler 80C31. Agar IC dekoder selalu berada da-
lam keadaan aktif maka input 'enable' dihu
bungkan dengan Vcc, sedangkan kedua input
'enable' yang lain yaitu 6 2 ^ dan G 2 B dihubungkan
dengan 'ground'. Output dari dekoder (Y0 - Y2 )
dihubungkan dengan masing-masing pin CS dari
piranti.
TABEL 3-1 TABEL KEBENARAN DEKODER
A15 A14 A1374LS138
DeviceY7 Y6 Y5 Y4 Y3 Y2 Y1 Y0
0 0 0 1 1 1 1 1 1 1 0 6264
0 0 1 1 1 1 1 1 1 0 1 82C55
0 1 0 1 1 1 1 1 0 1 1 RTC
0 1 1 1 1 1 1 0 1 1 1
1 0 0 1 1 1 0 1 1 1 1
1 0 1 1 1 0 1 1 1 1 1 KOSONG
1 1 0 1 0 1 1 1 1 1 1
1 1 1 0 1 1 1 1 1 1 1
Dari hubungan ini , output Yq akan menempatkan
RAM 6264 pada alamat 0000H - IFFFH dan menem-
patkan PPI 82C55 pada alamat 2000H - 3FFFH, output
Y 2 menempatkan RTC MC 146818 pada alamat 4000H
5FFFH.
3.2.2 Sinyal Kontrol. Sinyal kontrol berfungsi
untuk mengaktifkan buffer data dari piranti-
piranti dan mengatur arah perpindahan data.
Sinyal WR dari mikrokontroler dihubungkan dengan
semua pin WR pada RAM 6264, PPI 82C55, RTC MC
146818, sedang pin RD dari mikrokontroler dihu
bungkan dengan pin OE pada RAM 6264, pin RD pada
PPI 82C55, dan pin DS pada RTC. Untuk sinyal
PSEN dari mikrokontroler hanya dihubungkan pada
pin OE dari EPROM 27C64.
3.3 Hubungan Mikrokontroler 80C31 Dengan EPROM 27C64Dalam mode pengalamatan eksternal, port 0 dipakai
sebagai jalur alamat bagian bawah (A0 -A7 ) dan
data bus seoara bergantian, sinyal ALE dipakai
untuk menandai saat port 0 berfungsi sebagai
jalur alamat. Output dari port 0 ini mempunyai
struktur 'open drain' sehingga perlu diberi
resistor 'pull-up' agar dapat bekerja dengan
baik. Nilai dari resistor 'pull-up' tersebut
diambil 10K, nilai ini merupakan nilai standard
yang sering dipakai untuk resistor 'pull-up'.
Untuk memisahkan kedua informasi yang ada pada
port 0 digunakan sebuah IC 'octal latch' dengan
tipe 74LS373. Dengan mendapatkan sinyal sinkro-
nisasi ALE dari mikrokontroler, maka output dari
IC latch 74LS373 akan berisi alamat bagian bawah
yang dikeluarkan dengan 'low byte' dari address
bus yang bersesuaian dengan EPROM 2764.
Informasi 'high byte' address bus (Ag-A^g) dise-
diakan oleh mikrokontroler melalui port 2 , seba-
gian dari address bus tersebut (Ag-Aj^2 ) dihubung-
kan dengan address bus 2764 yang bersesuaian,
sedangkan sisanya dihubungkan dengan input dari
IC dekoder 74LS136.
Sebagaimana telah dijelaskan di atas bahwa port 0
merupakan 'low byte' address bus yang di
multiplex dengan data bus sehingga dengan demiki-
an port 0 dapat langsung dihubungkan dengan data
bus dari 27C64.
Pin CE dari 27C64 dihubungkan dengan ground,
sedangkan pin Vpp dan PGM dihubungkan ke Vcc
dengan resistor 'pull-up' sebesar 10 KQ.
IBP1.0 Pl.l PI.2 PI.3 PI.4 PI.8 PI.6 PI.7
fcZHai*P2.2
P2.S ^ P2.6 P2.7
00 00DiDS 02D3 0304 04DE 06D6 06tn 07OCG
27C64
sacsi
GAMBAR 3-5HUBUNGAN MIKROKONTROLER 80C31 DEHGAN EPROM 27C64
3.4 Hubujifian Mikrokontroler 80C31.J)eD^an RAM 6264Untuk proses dan simpan data digunakan RAM 6264
yang mempunyai kapasitas 8 KByte. Hubungan antara
mikrokontroler 80C31 dengan RAM 6264 dilakukan
dengan menghubungkan port 0 ke latch 74LS373.
Eleperti pada EPROM, output dari latch merupakan
alamat bawah mikrokontroler Ag-A^. Informasi
'high byte' address bus (Ag-Aj^g) disediakan oleh
mikrokontroler melalui port 2 , sebagian dari
address bus tersebut (Ag-A-1 2 ) dihubungkan dengan
address bus 6264 yang berse-suaian, sedangkan
data bus RAM 6264 D0 -Dy langsung dihubungkan pada
port 0 mikrokontroler 80C31.
O0 Q0Di Qi02 0203 0304 0406 0606 0607 07OCQ
GAMBAR 3-6HUBUNGAN MIRROKONTROLER 80C31 DENGAN RAM 6264
Input CSl dihubungkan dengan output Yq dari
dekoder 74LS138. Input CS2 dihubungkan ke Vcc
melalui resistor 'pull-up' sebesar 10 KQ. Untuk
input WE dan OE, masing-masing dihubungkan dengan
pin WR dan RD dari mikrokontroler 80C31. Tegan-
gan supply untuk RAM dilengkapi dengan baterai
back-up sebesar 3,6 Volt, untuk menjamin kebera-
daan data didalam RAM bila power dimatikan.
3.5 Hubungan Mikrokontroler 80C31 Dengan PPI 82C55Dalam hubungan PPI 82C55 dengan mikrokontroler
80C31, maka PPI 82C55 diperlakukan sama dengan
piranti memori (memori map I/O). Dengan demikian
PPI 82C55 dapat dianggap sebagai memori baca tulis
yang raempunyai 4 buah lokasi, sehingga address
bus yang dihubungkan dengan PPI 82C55 adalah Ag
dan Pin input WR dan RD dari PPI 82C55 lang-
sung dihubungkan dengan pin WR dan RD dari mikro-
kontroler. Untuk sinyal CS dari PPI 82C55 dihu
bungkan dengan output dari dekoder 74LS138.
Jalur data bus D0 -Dy dari PPI 82C55 dihubungkan
dengan port 0 pada mikrokontroler 80C31.
Pin reset 82C55 dihubungkan secara langsung dengan
ground. Hal ini disebabkan struktur internal dari
pin reset tidak mempunyai schmitt trigger seperti
yang dimiliki oleh mikrokontroler, karena itu
tidak mungkin menghubungkan pin reset ini dengan
rangkaian reset dari mikrokontroler yang berupa
rangkaian RG. Salah satu cara pemecahannya adalah
dengan menambahkan sebuah schmitt trigger antara
rangkaian reset mikrokontroler dengan pin reset
dari PPI 82C55, tetapi cara ini jarang dipakai
karena PPI 82C55 mempunyai kemampuan untuk melaku-
kan proses reset yang dikontrol dengan software,
asalkan pin reset dari PPI 82C55 dihubungkan
dengan ground.
De oe01 Q1DS OS03 03D405 0506 QC07 07OCG
GAMBAR 3-7HUBUNGAH MIKROKOHTROLER 80C31 DENGAN PPI 82C55
3.6 Hubungan Mikrokontroler 80C31 Dengan MC 146818Real Time Clock yang dipakai tipe MC 146818 yang
mempunyai 8 jalur data/alamat (AD0 - ADy), yang
dapat langsung dihubungkan dengan port 0 dari
mikrokontroler 80C31. RTC pada tugas akhir ini
digunakan untuk jam, menit, tanggal, bulan dan
tahun.
Pin input DS (Data Strobe), R/W (Read/Write) dan
AS (Address Strobe) dari RTC masing-masing dihu
bungkan dengan pin RD, WR, dan ALE/P dari mikro
kontroler 80C31. Sedangkan pin CE (Chip Enable)
dihubungkan dengan output Y 2 dari dekoder
74LS138.
U7RST y P3
1g NC
06 ocetHAA ODlAS ADS«03CKF8 ftMNC AOSce A06
007oeciIRQ
1 CKOUToecs iS 8«M■¥ MC
GAMBAR 3-8HUBUN6AN HIKROKONTROLER 80C31 DKNGAN MC 146818
Untuk RESET tidak mempengaruhi jam,kalender atau
fungsi RAM.pada saat bekerja. Pada waktu aktif,
pin ini harus aktif Low, pin ini tidak dihubung-
kan dengan RESET mikrokontroler 80C31.
Rangkaian untuk baterai back-up melalui pin PS
(Power Sense), jika ada tegangan drop maka seoara
otomatis baterai akan bekerja.
Untuk rangkaian oscillator digunakan kristal
dengan frekuensi 32.768 KHz yang dihubungkan
dengan pin OSCl DAN 0SC2. Harga dari R dan C
berdasarkan data book.
GAMBAR 3-020)RANGRAIAN POWER SENSE DAN RESET
3.7 Display Dan KeyboardRangkaian display yang direncanakan disini mema-
kai 4 buah seven segment. Display tersebut digu-
nakan untuk mengeset atau menampilkan jam, menit,
tanggal, bulan, dan tahun, serta lamanya suatu
channel aktif ( timer ). Sedangkan keyboard
dipergunakan untuk setting jam, menit, tanggal,
bulan, tahun, setting timer, dan untuk memasukkan
kode sandi ( password ).
Seven segment yang dipergunakan adalah common
anoda, yang berarti seven segment akan menyala
Hotorola Microprocessor, MicrocQntrcller And Pheripheral Data, Motorola Seffliconductor Inc. p 3-1663.
bila anodanya mendapat tegangan level tinggi
sedangkan katodanya mendapat tegangan level
rendah.
GAMBAR 3-10 RAHGKAIAN DISPLAY
Untuk display digunakan empat buah seven segment,
dalam gambar 3-10 diambil hanya dua buah seven
segment.
Dalam mendrive seven segment ini digunakan IC
74LS47 yaitu decoder/driver BCD ke seven segment
common anoda, dimana input dari IC ini ada 4 bit
dihubungkan dengan port A dan port B PPI 82C55
sedangkan outputnya ada 7 bit melalui resistor
330 Q dihubungkan langsung ke kaki seven segment
yang bersesuaian. PA0 -PA3 digunakan untuk mengon-
trol seven segment pertama, PA^-PAy digunakan
untuk mengontrol seven segment yang kedua, PB0 -
PBg digunakan untuk mengontrol seven segment
ketiga, sedangkan PB^-PBy digunakan untuk mengon
trol seven segment keempat.
Besarnya resistor untuk membatasi arus yang lewat
LED didapat dari perhitungan sebagai berikut :
Vql 74LS47 = 0,25 V, Vled = V, Iql = 12 mA.
R = ( Vcc - VLED - Vq l ) / Iql
R = ( 5 - l , 8 - 0 , 2 5 ) / 1 2 m A
R = 245,8 Q
Dalam hal ini untuk membatasi supaya 7 Segment
jangan menyala terlalu terang dipilih R = 330 Q.
Rangkaian keyboard yang direncanakan terdiri dari
16 switch push button. Adapun untuk mendeteksi
penekanan keyboard dilakukan dengan oara scan
keyboard. Dalam hal ini digunakan port C PPI
82C55. Port C lower ( PCg - PC3 ) di - pull-up
dengan resistor 10 Kohm. Port C lower ini diguna
kan sebagai input port untuk membaca data, baik
ada keyboard yang ditekan maupun tidak. Port C
upper ( PC4 - PCy ) digunakan sebagai output port
untuk menjalankan scan tiap bit. Rangkaian
keyboard dapat dilihat pada gambar 3-11.
GAMBAR 3-11 RANGKAIAN KEYBOARD
3.8 Bangkaiaa Relay.Pada rangkaian output kontak 10 channel maka
diperlukan relay sebanyak 1 0 buah, dimana tiap
relay mewakili 1 channel output kontak. Untuk
mengendalikan 1 0 buah relay tersebut digunakan
Port 1, pin TXD dan RXD dari mikrokontroler 80C31
( port 1.0^ port 1.7 ). Pin TXD dan RXD dari
mikrokontroler 80C31 karena tidak digunakan
sebagai serial port ( transmit dan receive ) maka
dapat digunakan sebagai input atau output port.
Karena keistimewaan dari 80C31 ini sehingga input
output port tersebut dapat diakses tiap bit port.
Output port 80C31 dihubungkan dengan basis tran-
sistor NPN raelalui resistor 4K7, dimana resistor
ini digunakan sebagai pembatas arus yang masuk ke
basis transistor. Bila output port tegangan
logika '1 ' ( high ) maka ada arus yang melalui
basis transistor NPN sehingga transistor aktif.
Karena transistor aktif maka ada supply tegangan
6 V dc pada relay, sehingga relay tersebut aktif.
Device yang dihubungkan dengan output channel
dari relay tersebut mendapat tegangan ac.
Arus bias transistor Ig = Iq i dari mikrokontroler
80C31, dimana Iqh = 400 uA dan = 2,4 V,
sehingga besarnya resistor basis dapat ditentukan
dengan perhitungan sebagai berikut :
^OH ~ ^BE(sat)
^OH2,4 - 0,7
R = ----------- .— Ohm0,0004
R = 4250 Ohm
Dalam rangkaian dipilih resistor basis sebesar
4700 Ohm ( 4K7 ) karena dalam perhitungan diatas
digunakan nilai
Gambar rangkaian relay terlihat pada gambar 3-12.
KJLf=><Ssv/
f=?jL J f=?e :i_ ^ y eF=Q-r ■X;>P ___ ---------- <axTm rvJF=Tvl■ K~P‘
c a tv iP _______________
«-g»KJLO«=>Q:_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ o
. J REI^K-3^ IQtSIP
GAMBAR 3-12
RANGKAIAN RELAY
3.9 Rangkaian SensorPada rangkaian sensor yang dibahas akan dibedakan
menjadi 2 yaitu : rangkaiswi transmitter data dan
rangkaian penerima data ( receiver data ).
3.9.1 Rangkaian Transmitter Data. Rangkaian
ini terdiri dari 2 buah infra merah yang
diparalel, transistor npn dan resistor untuk
membatasi arus yang mengalir pada basis
transistor serta resistor yang digunakan untuk
membatasi arus yang lewat pada infra merah.
Rangkaian ini diperlihatkan pada gambar 3-13 di
bawah ini.
I M X O
GAMBAR 3-13 RAN6RAIAM TRANSMITTER DATA
Arus yang mengalir melalui infra merah = '0' jika
INT0 = '0', sehingga infra merah tidak menyala.
Jika INT0 = '1' maka :
^CC " ^CE(sat) " ^LED IMRt
)imana II - 2 .
Nilai RL dapat diperoleh :
^CC ■ ^CE(sat) ~ ^LED IM2.1 LED IM
Diperoleh dari pengukuran :
^LED IM
^LED IM -
^CE(sat) - 0-2 V5 - 0,2 - 1,8
2 . 0,01
= 150 Ohm
^LED IM Max = V
^LED IM Max =
5 - 0,2 - 2
2 . 0,015
Rj = 93,3 Ohm
Kesimpulan : 93 Ohm < Rj < 150 Ohm
Dipilih Rl = 100 Ohm
Resistor basis membias transistor untuk menjadi
aktif atau out off. Nilai Rg diperoleh dari
persamaan sebagai berikut :
INT0 = ^B(sat) * + ^BE(sat)
Rb - ^IH INT0 ~ ’BE(sat)
^B(sat)
Arus iB(sat) ~ ^OH dari mikrokontroler 80C31 sehingga :
Rb - INT0 " ’'^BE(sat)
^GH
Dari data book :
Iq H = 400 uA
^BE(sat) = 0>65 V
3 - 0,65
0,0004
Rg = 5875 Ohm
ViH Min = 2,5 V
^OH Max =
VBE(sat) = V
Rg -2,5 - 0,7
0,00045
Rg = 4000 Ohm
Kesimpulan : 4000 Ohm < Rg < 5875 Ohm
Dipilih Rg = 4700 Ohm
Jenis transistor Q1 : 2SC1815
3.9.2 Rangkaian Receiver Data. Rangkaian
receiver data terdiri dari 3 bagian yaitu :
rangkaian driver receiver dan filter, rangkaian
penguat 2 tingkat serta rangkaian komparator atau
pembanding.
Rangkaian driver receiver terlihat pada gambar
3-14 di bawah ini.
GAMBAR 3-14 RANGKAIAN DRIVER RECEIVER DAN FILTER
Vl = Vcc - Ic -R3
Vl = Vcc - B-Ib -R3
Arus bias Q 2 ( Ig2 ^^CC “ '' BE(act) " ^CE PT
R82
Arus basis Ig2 = ^PT’ sehingga nilai RB2 dapat
dihitung sebagai berikut :
R ^CC ■ ^BE(act) " ^CE PTB2 -
•PT
Kondisi maksimum :
-PT = 0,1 mA
VcE PT = 0.4 VVBE
^B25 - 0,6 - 0,4
0 , 0 0 0 1
Rb2 = 40 KOhm
Kondisi minimum :
IpT 2 uA
^CE PT - 1 V
Vbe = 0:,6 V
,//
5 - 0 , 6 - 1
0,000002
Rb2 - 1 > *? MOhm
Kesimpulan ; 40 KOhm < Rg2 < MOhm
Dipilih Rg2 = 1 MOhm
jwC2
1
jwC2+ (R5 +R3 )
Vccj WC2 • ( Rg' 'Rg ) + 1
Magnitude dari persaman tersebut adalah
iv.i ^ V'(1+(wC(R5 +R3 ))2 )
V2 I = A-lVccl
;tT;
//
Dimaiia : A =V(1 +(wC(R5 +R3 ))^)
Beda phase antara V2 dan Vqq dapat dinyatakan
sebagai berikut :
wC2<R5+R2)0 = arc tan -----------
1
Frekuensi half power terjadi pada saat :
1A = --- atau 0 = 45°
V2Dari kedua syarat diperoleh ;
wC2.(R5+R3) = 1
2 Ttf . C2 • ( R5 +R3 ) — 1
1f = ----------------
2ti . C 2 • ( )
Half power frekuensi : fj =1
fL = 200 Hz
Diambil batasan 200 Hz mengingat bahwa photo
transistor maksimum bekerja dengan baik sampai
dengan interval 2000 Hz ( 2 KHz) untuk faktor
keamanan diambil nilai 1 / 1 0 dari fmax, hal ini
didukung dari hasil eksperimen frekuensi terbaik
untuk transmiter - receiver menggunakan photo
transistor ( dengan tipe yang ada dipasaran )
supaya jarak yang dicapai bisa optimal.
( Rg + R5 )
Dipilih C2
( R 3 + R 5 )
Dipilih Rg
C 2 = 1 / ( f L )
1 uF
5 KOhm
1 KOhm , R5 = 4 KOhm
Output ( keluaran ) tegangan yang dihasilkan oleh
rangkaian driver receiver dS.n filter dikuatkan
oleh rangkaian penguat dua tingkat. Adapun gambar
dari rangkaian penguat dua tingkat dapat dilihat
pada gambar 3-15.
GAMBAR 3-15 ElANGKAIAN PENGUAT DUA TINGKAT
Karakteristik transfer dapat dinyatakan menurut
persamaan sebagai berikut :
Rc
R .
R .
Tingkat 1 : Gain = 5
R0 = 5 .R4
Syarat : 1 KOhm < R4 < 100 KOhm
Dipilih R4 = 10 KOhm
Rg = 50 KOhm, dipilih Rg = 56 KOhm
Tingkat 2 : Gain = 1 0
^8R?
Rg = 1 0 R7
Dipilih Ry = 1 KOhm
Rg = 10 KOhm
Dari karakteristik tersebut nampak bahwa dengan
penguatan dua tingkat tidak akan mengubah fase
sinyal input. Kapasitor Cg berfungsi meredam
sinyal dc, sehingga sinyal dc tersebut tidak akan
dikuatkan.
Rangkaian komparator dipakai secara efektif
apabila sinyal yang dihasilkan oleh amplifier
masih kecil. Untuk membuat rangkaian kebal
terhadap noise yang masuk, maka pada rangkaian
tersebut perlu ditentukan suatu level tegangan
pembanding yang optimum. Rangkaian komparator
atau pembanding dapat dilihat pada gambar 3-16 di
bawah ini.
6AMBAR 3-16 RAN6KAIAM ROHPARATOR
Karakteristik transfer dapat dinyatakan menurut
persamaan - persamaan sebagai berikut :
' U T 1 +n
. Vref +Vsat
n
1 +n
. Vref +Vsat
n
Rdimana : n = 10
R9
POTl;
POTl^ + POTlg
POT 1a. VCC
POTl
. VCC
Keterangan : POTl^ dan POTlg adalah bagian dari
potensiometer 1 .
2 .Vsat
n
Hysterisis ( ) menentukan kekebalan rangkaian
terhadap noise. Semakin besar hysterisis, maka
semakin kebal pula rangkaian terhadap noise.
Tegangan center dari rangkaian komparator :
'CT 1 +n
. Vref
Dari persamaan tersebut nampak bahwa variabel 'n'
sangat dominan menentukan kekebalan rangkaian
terhadap noise yang mungkin timbul.
Ditentukan : Vsat = 4,5 V
H = 3 V
2 . 4,5
1 KOhm < Rg < 100 ROhm
Dipilih Rg = 47 KOhra
Rl0 = 3 . R^ 0
R^ 0 — 3 47 KOhm
= 141 KOhm
Dipilih R10 yang ada dipasaran = 150 KOhm.
POTl dari range 10 KOhm sampai dengan 100 KOhm,
dipilih POTl = 10 KOhm.
4. PERBNCANAAN PERANGKAT LUNAK
Untuk mengendalikan perangkat keras maka diperlukan
perangkat lunak, dalam hal ini perangkat lunak dibuat
dalam bahasa assembly 80C31.
4.1 Perangknt. T.nnnk Mininim Sist.em 80C31
Program yang bekerja pada minimum sistem dengan
mikrokontroler 80C31 secara garis besar dapat
dibagi menjadi beberapa bagian, yaitu ;
- Program scanning keyboard
Program ini untuk mendeteksi penekanan serta
letak keyboard yang mehgalami penekanan.
- Program autorisasi
Program ini untuk mencocokan password yang
dientry dengan password yang sudah tersimpan.
- Program penggantian password
Program ini untuk mengganti password lama
dengan password yang terakhir dimasukkan.
- Program pengesetan device dan timer
Program ini untuk menentukan device yang perlu
diaktifkan, serta mengaktifkan waktu on dan
waktu off dari device yang diaktifkan.
Program deteksi device
Program ini digunakan untuk mengetahui device
yang aktif dan device yang tidak aktif.
Program pengesetan jam dan tanggal
Program ini digunakan untuk setting jam dan
tanggal dari sistem.
START
INISIALISASI8255,PfiSSH0RD
- ► 4 -
PERIKSASTATUS
INTERRUPT
ADA \ V INTERRUPT
SCAN 1rOKBOL
PERISTA1TOKf
[KSArus50L
GAMBAR 3-19FLOWCHART SUB ROUTINE SCAN TOMBOL
GAMBAR 3-20FLOWCHART SUB ROUTINE SETTING DEVICE
EKTRV 1 DATA 1
CHISTftl
FA<
:cKrus5E
JAH_0N=JftM_0N+1
(
BACA DATA JAH OH OARI
LO K A ?I HEMORV UNTUK NO LAHPU
VAH6 SESUAI
S in P A H DATA JAK ON KE
, LOKAST HEMORV fUNTUK HO LAHPU
VAN6 SESUAI
RET
o-«sr)<’(n4«N<i^<ia<t4Z<ia oxoooiaoom o o o u u u o u a.Q.C.CLCLO.ft.ft. 0. CLO.fi. 0.0.0.0. 0.0.4. *.0.0. 0.0.
3 o o o o o o o o
l i i
O O O O O O O O O-«M«TU>v0t-®C*
0 -«c4nvu><«f>. o-*Mn<(n<«N fcatezta-oo............... falZLiVXKo o o o o o o o t rJ<s(s<y<v<v<y «\u*.a:fl.aa.o.a.aQ.0. o. a o. a. 0.0.0. a o._i
§O ■H o< M V «»** r -
1/1 ^or-
>
c
rt
0 ♦- 0 ««
U £
H Ja ;c c
i l s3 Z .
hw ^0
• •i! ® :\H . Q
q r "
«< •4 UOM MXWI0 0 v z w « \ o Mvt M )C C K0 0 V
Xrtrt >00
3x o «9 ^ tt: o o o o o o o o(AU v< za.
OO-H
m i MllUMmm HI'•
HHi'-V(A
Qg>ou <t* (Sh— I -« H_J<N
T ” ^8
M<— Ili‘
«IU\-O O-
B. JC. ^ | | .
-MHi"
uJCD5 2|T - «S ^■l-_ IU|,
a.
XnHcnHwCO »'5’ ICO06<oaC5
ssHXM<
tuBE<ICH
M s
NICOai<3QQI
00 N1CQOS<CQ1CD
to 6IN (U
+ JCD
<u •HT3 COnJ<U
a : .9a XIg
. a_
0}NICOas<CO
o
oi
0rH1
6
oE - i o «
4.2 Listing Program Mininuit Sistem 80C3]
PORT A EQU 2000HPORT_B EQU 2001HPORT_C EQU 2002HCONTROL EQU 2003HDETIK EQU 4000HMENIT EQU 4002HJAM EQU 4004HREG A EQU 400AHREG_B EQU 400BHPOWER_CODE EQU 400EH
.DATAORG 0H
STATUSJLAMPl DB 0HORG 40H
LAMP12 DB 0HLAMP34 DB 0HPASSWORD1 DB 0HPASSW0RD2 DB • 0HDATAl DB 0HDATA2 DB 0HDATA3 DB 0HDATA4 DB 0HSTATUS_JASE DB 0HSTATUSJSNTER DB 0HSTATUS_J)0MAIN DB 0HC0UNTER_PASS DB 0HSTATUS^PASS DB 0HINPUT_DATA DB 0HALAMATl DB 0HC0UNTER_CHECK DB 0H
ORG 100HTIME_0N: DB 0H
ORG 200HCURRENT_PASS1 DB 0HCURRENT_PASS2 DB 0H
.CODEORG 0HLJMP MULAI
ORG 0BHLJMP INT_T0
P R O G R A M S U B R O U T I N E
INITIAL_PPI:
DELAYl:DE2:DEI:
INITIAL_RTC:
DELAY:
Dl:
SCAN KEY:
MOV DPTR,<^CONTR(MOV A,#81HMOVX @DPTR,ARET
MOV R1,#0FFHMOV R0,<t0FFHDEC R0CJNE R0,«0H,DE1DEC R1CJNE R1,#0H,DE2RET
MOV DPTR,i^REG_BMOV A,#8 EHMOVX @DPTR,AMOV DPTR,#REG_J^MOV A,#2FHMOVX @DPTR,AMOV A,#0CHMOV DPTR,*fJAMMOVX @DPTR,AMOV A,4t0HMOV DPTR,#MENITMOVX @DPTR,AMOV A,<*0HMOV DPTR,i*DETIKMOVX @DPTR,AMOV A,#0AAHMOV DPTR,#POWER.MOVX @DPTR,AMOV DPTR,#REG_BMOV k , m E HMOVX @DPTR,ARET
PUSH PSWMOV R1,#0FFHDEC R1CJNE R1,W0H,D1POP PSWRET
PUSH PSWPUSH APUSH DPLPUSH DPHMOV A,#0E0H
PUSH_OFF:
WAIT_OFF:
DETEKSI_C0L1:
END_DET_C0L1;FINISHl:
CHECK SLl;
MOV DPTR,#PORT_CMOVX @DPTR,AACALL DELAYACALL DETEKSI_C0L1MOV A,tt0D0HMOV DPTR,<tPORT_CMOVX @DPTR,AACALL DELAYACALL DETEKSI_C0L2MOV k , m m wMOV DPTR,#PORT_CMOVX @DPTR,AACALL DELAYACALL DETEKSI C0L3MOV A,<t70HMOV DPTR,^tPORT_CMOVX @DPTR,AACALL DELAYACALL DETEKSI_C0L4MOV A,#0F0HMOV DPTR,*tPORT_CMOVX @DPTR,APOP DPHPOP DPLPOP APOPRET
PSW
PUSH PSWPUSH AMOV DPTR,#PORT CMOVX A,@DPTRANL A,«0FHCJNE A,i»0FH,WAITJPOP APOPRET
PSW
PUSH PSWPUSH AMOVX A,@DPTRANL A,«0FHCJNE A,#0EH,CHECK.MOV INPUT_DATA,«IACALL ENTRY_J)ATAACALL PUSH_OFFPOP APOPRET
, PSW
CJNE A,«0DH.CHECKMOV INPUT_DATA,#ACALL ENTRY DATASJMP END DET COLl
CHECK_SL2: CJNE A,#0BH,CHECK_SL3MOV INPUT DATA,#8 HACALL ENTRY_DATASJMP ENDJDET COLl
CHECK_SL3; CJNE A,#7H,FINISH1MOV A,STATUS_FASECJNE A,#4H,END DET COLlMOV STATUS_ENTER,#0HMOV STATUSJFASE,#2HMOV DPTR,<IREG_BMOV A,4I8EHMOVX @DPTR,AACALL ENTRY_DATASJMP ENDJ)ET_C0L1
DETEKSI_C0L2: PUSH PSWPUSH AMOVX A,@DPTRANL A,<t0FHCJNE A,#0EH,CHECK_SL12MOV INPUT_DATA,1J1HACALL ENTRYJATA
END_DET_C0L2; ACALL PUSH_OFFFINISH2: POP A
POPRET
PSW
CHECK_SL12: CJNE A,#0DH,CHECK_SL22MOV INPUT_DATA,«5HACALL ENTRY_DATASJMP END_DET_C0L2
CHECK_SL22: CJNE A,#0BH,CHECK_SL32MOV INPUT_DATA,#9HACALL ENTRY_DATASJMP ENDJ)ET_C0L2
CHECK_SL32; CJNE A,tt7H,FINISH2MOV A,STATUS_JASECJNE A,#4H,END_DET_C0L1MOV STATUSJENTER,#0HMOV STATUS_FASE,#5H STATUSMOV DATA3,#0HACALL GET_STATUS_LMPSJMP END_DET_C0L2
DETEKSI_C0L3: PUSH PSWPUSH AMOVX A,@DPTRANL A,#0FHCJNE A,#0EH,CHECK_SL13MOV INPUT_DATA,«2HACALL ENTRYJ3ATA
END_DET_C0L3: ACALL PUSH_0FFFINISH3: POP A
POPRET
PSW
CHECK_SL23:
CHECK SL33:
DETEKSI_C0L4:
END_DET_C0L4: FINISH4:
CHECKSL14:
CHECK_SL24:
CJNE A,<t0DH,CHECK SL23MOV INPUT_DATA,#6 HACALL ENTRY_DATASJMP END_DET_C0L3CJNE A,tt0BH,CHECK SL33MOV A,STATUSJFASECJNE A,#4H,ENDJDET_C0L3MOV STATUS_ENTER,#0HMOV STATUS FASE,*flHMOV DATA1,#0HMOV DATA2,1^0HMOV DATA3,1*0HMOV DATA4, t0HACALL DISPLAY DATASJMP ENDJ)ET_C0L3CJNE A,*»7H,FINISH3MOV A,STATUSJB’ASECJNE A,#4H,END_DET COLSMOV STATUSJENTER,#0HMOV STATUS_JFASE,#7HMOV DATA1,<J0HMOV DATA2,#0FHMOV DATA3,#0FHMOV DATA4,#0FHACALL DISPLAY_DATASJMP END DET C0L3PUSH PSWPUSH AMOVX A,@DPTRANL A,4t0FHCJNE A,4*0EH,CHECK_SL14MOV INPUT_DATA,#3HACALL ENTRY_DATAACALL PUSH_OFFPOP APOP PSWRETCJNE A,#0DH,CHECK_SL24MOV INPUT _DATA,*t7HACALL ENTRY_DATASJMP END_DET_C0L4CJNE A,lt0BH,CHECK SL34MOV A,STATUS_FASECJNE A,#4H,END_DET_C0L4MOV STATUS_ENTER,#0HMOV STATUS_JASE,«0HMOV DATA1,#0HMOV DATA2,4I0HMOV DATA3,#0HMOV DATA4,#0HSJMP END_DET C0L4CJNE , A,#7H,FINISH4MOV A,STATUS_FASE
SET_ENTER:
ENTRY_DATA:
FILL_PASSWORD:
FILL_PASS:
END_ENTRY_DATA:
CHECKUP ASEl;
SHIFT.J’ASS:
CHECKJENTER:
CJNE a ,#0H,s e t j :n te rMOV STATUS_ENTER,#0HSJMP END DET C0L4MOV STATUS_ENTER,#1HACALL ENTRY_DATASJMP END_DET_C0L4
PUSH PSWPUSH AMOV A,STATUS EASECJNE A,#0H,CHECK_FASE1MOV A,COUNTER PASSCJNE A,#0H,FILL PASSWORDMOV DATA1,#0HMOV DATA2,*t0HMOV DATA3,«0HMOV DATA4,#0HMOV STATUS_PASS,#1HMOV A,INPUT_DATACJNE A,it0FH,FILL_PASSAJMP e n d j e n t r y_dataMOV DATA4,DATA3MOV DATA3,DATA2MOV DATA2 ,DATA1MOV DATA1,INPUT_PATAMOV INPUT J)ATA,#0FHINC c o u n t e r_passMOV a ,c o u n t e r_passCJNE A ,#4H,END JENTRY_DATAACALL a ut o r i s a s iMOV COUNTER_PASS,^J0HPOP APOP PSWRETCJNE A, »1H, CHECKS ASE2MOV A,INPUT_X)ATACJNE A,1*0FH,SHIFT_PASSSJMP CHECK_£NTERMOV DATA4,DATA3MOV DATA3,DATA2MOV DATA2,DATA1MOV DATA1,INPUT_DATAMOV INPUT_DATA,«0FHACALL DISPLAYJDATAMOV A,STATUS_ENTERCJNE A,itlH,END_ENTRY DATAMOV A,DATA4SWAP , AADD A,DATA3MOV DPTR, 1tCURRENT_P ASS 1MOVX @DPTR,AMOV A,DATA2SWAP A
ADD A,DATA1MOV DPTR,tfCURRENT_PASS2MOVX @DPTR,AMOV STATUS_pASE,<t4HMOV STATUS_ENTER,lt0HACALL BLANK_DISPSJMP END_ENTRYJ3ATA
CHECK_FASE2: CJNE A.^tZE.CHECKJASESMOV A,STATUS_ENTERCJNE A,#lH,CHECK_jCEY0MOV STATUS_pASE,#3HMOV s t a t u s_j :n t e r ,#0HAJMP ENDJENTRY _DATA
CHECK_KEY0: MOV A,INPUT_DATACJNE A,#0H,END CHECK F2MOV INPUT_DATA,tt0FHMOV DPTR,#JAMMOVX A,@DPTRCJNE A,#23,INC_JAMMOV A,<t0 HSJMP SAVE_JAM
INC_JAM: INC ASAVE_JAM: MOVX @DPTR,AEND_CHECK ; AJMP END^ENTRYJDATACHECKJFASE3: CJNE A,#3H,CHECKJFASE5
MOV A,STATUS_ENTERCJNE A,itlH,CHECKJCEY0MMOV STATUSJFASE,#4HMOV STATUS_ENTER,#0HMOV DPTR,#REG_BMOV A,#0EHMOVX @DPTR,AAJMP END_ENTRYJ)ATA
CHECK_KEY0M: MOV A,INPUTJDATACJNE A,<t0H,END_CHECK_F2MOV INPUT JDATA,<t0FHMOV DPTR,#MENITMOVX A,@DPTRCJNE A,1^59,INC MENITMOV A,#0HSJMP SAVE_MENIT
INCJMENIT: INC ASAVE_MENIT: MOVX @DPTR,AEND_CHECK F3: AJMP END_ENTRY_J)ATACHECK_FASE5: CJNE A,1*5H,CHECK_FASE6
MOV A,INPUTJDATACJNE A,4*0FH,ISI_DATA3SJMP . CHECK ENTERS
ISI_DATA3: MOV DATA3,INPUT_DATAMOV INPUT J)ATA,«0FHACALL GET_STATUS_JLMP
CHECK_ENTER5; MOV A,STATUS_ENTERCJNE A,4tlH,END_CHECK_F5
MOV STATUS_FASE,«6 HMOV STATUS_ENTER,^^0H
END_CHECK F5; AJMP END ENTRY DATACHECK_FASE6 : CJNE A,#6H,CHECK_FASE7
MOV A,INPUT DATACLR CSUBB A,#2HJNC check_^:nter6
ISIJ)ATA1; MOV DATA1,INPUT_DATAMOV INPUT_DATA,1*0FHMOV DPH,lt0HMOV DPL,DATA3MOV A,DATA1MOVX @DPTR,AACALL g e t _s t a t u s_jlmp
CHECK_ENTER6 : MOV A,STATUS_EHTERCJNE A,i*lH,END_CHECK_J5MOV STATUS_FASE,#4HMOV status enter,i*0 HACALL BLANKJ)ISPAJMP END_ENTRY_DATA
CHECK_FASE7: CJNE A,it7,CHECK_FASE8MOV A,INPUTJ)ATACJNE A,^t0FH,ISI_DATA01SJMP CHECK_ENTER7
ISI_DATA01: MOV DATA1,INPUT_DATAMOV INPUT_PATA,#0FHACALL DISPLAY_J)ATA
CHECRJENTER7: MOV A,STATUS_ENTERCJNE A,<»1H,END_CHECKJF7MOV STATUS_FASE,#8 HMOV STATUS_ENTER,lt0HACALL HITUNG_ALAMATMOV DPTR,itTIME_ONMOV DPL,ALAMAT1MOVX A,@DPTRACALL HEX2BCDSWAP AMOV LAMP12,AMOV LAMP34,#0FFHACALL DISP LAMP
END_CHECK_p7: AJMP e n d_j:n t r y_d ataCHECK_FASE8 : CJNE A,tf8 H,CHECK FASE9
MOV B,#9HACALL j a m _alatSJMP END_CHECK_F7
CHECK_FASE9: CJNE A,tf9H,CHECK FASE10MOV B,4tl0ACALL m e n i t ALATSJMP END_CHECK_F7
CHECK_FASE10: CJNE A,#10,CHECK_FASE11MOV B,#llACALL JAM_ALAT
CHECK_FASE11:
D I S P L A M P :
DATA_PASSWORD
J A M _ A L A T :
SJMP END_CHECK_F7CJNE A,#11,END CHECK F7MOV B,#4ACALL MENIT_ALATSJMP END_CHECK_F7
PUSH PSWPUSH APUSH DPLPUSH DPHMOV A,LAMP12MOV ■ DPTR,«PORT_AMOVX @DPTR,AMOV A,LAMP34MOV DPTR,#PORT_BMOVX @DPTR,APOP DPHPOP DPLPOP APOPRET
PSW
PUSH PSWPUSH AMOV PASSW0RD1,DATA1MOV A,DATA2SWAP AADD A,PASSW0RD1MOV PASSW0RD1,AMOV PASSW0RD2,DATA3MOV A,DATA4SWAP AADD A,PASSW0RD2MOV PASSW0RD2,APOP APOPRET
PSW
PUSH PSWPUSH APUSH DPHPUSH DPLMOV A,STATUS_ENTERCJNE A,4tlH,CHECK_KEY INCMOV STATUS_JASE,BMOV STATUS_ENTER,#0HMOV DPTR,JtTIME ONMOV DPL,ALAMAT1INC DPTRMOV ALAMATI,DPLMOVX A,@DPTRACALL HEX2BCDSWAP A
CHECK_KEY_INC;
INC_JAM_ALAT; SAVE_JAM_ALAT;
END_JAM^LAT:
MENIT_ALAT:
DISPLAYKAN
CHECK_PLUS
MOV LAMP34,AMOV LAMP12,lt0FFHACALL DISP_LAMPAJMP END_JAM_ALATMOV A,INPUT_DATACJNE A,#0H,END_JAM_ALATMOV INPUT_DATA,#0FHMOV DPTR,#TIME_ONMOV DPL,ALAMAT1MOVX A,@DPTRCJNE A,#23, INC JAM^LATMOV A,#0HSJMP SAVE_JAM ALATINC AMOV DPTR,#TIME_ONMOV DPL,ALAMAT1MOVX @DPTR,AACALL HEX2BCDSWAP AMOV LAMP12,AMOV LAMP34,#0FFHACALL DISPJLAMPPOP DPLPOP DPHPOP APOPRET
PSW
PUSH PSWPUSH APUSH DPHPUSH DPLMOV A,STATUS^NTERCJNE A,#1H,CHECK_PLUSMOV STATUS_FASE,BMOV STATUS_ENTER.#0HMOV A,STATUSJFASECJNE A, #4H,DISPLAYKANACALL BLANKJDISPAJMP END_MENIT_ALATMOV DPTR,#TIME_ONMOV DPL,ALAMAT1INC DPTRMOV ALAMATI,DPLMOVX A,@DPTRACALL HEX2BCDSWAP AMOV LAMP12,AMOV LAMP34,#0FFHACALL DISPJLAMPAJMP END_MENIT_ALATMOV A,INPUT_DATACJNE A , lt0H, END_MENIT^LAT
INCJ1ENIT_ALAT: SAVE_MNT_ALAT:
END_MENIT_JVLAT:
DISPLAY_DATA:
BLANKJDISP:
PROSES_DATA:
STATUS_CHECK:
MOV INPUT DATA,#0FHMOV DPTR,#TIME ONMOV DPL,ALAMAT1MOVX A,@DPTRCJNE A,#59,INC_MENIT_ALATMOV k . n mSJMP s a v e_m n t_alatINC AMOV DPTR,<*TIME_ONMOV DPL,ALAMAT1MOVX @DPTR,AACALL HEX2BCDSWAP AMOV LAMP34,AMOV LAMP12,*t0FFHACALL DISP LAMPPOP DPLPOP DPHPOP APOPRET
PSW
PUSH PSWPUSH AMOV A,DATA3SWAP AADD A,DATA4MOV LAMP12,AMOV A,DATA1SWAP AADD A,DATA2MOV LAMP34,AACALL DISP^LAMPPOP APOPRET
PSW
PUSH PSWMOV LAMP12,#0FFHMOV LAMP34,4*0FFHACALL DISPEL AMPPOPRET
PSW
PUSH PSWPUSH APUSH DPLPUSH DPHMOV R7,»10MOV DPTR,ttSTATUS LAMPlMOVX A,@DPTRCJNE A, *»0H, ACTIVE CHECKLCALL DET LAMP OFF
ACTIVECHECK:
CHK_LAMP2:
CHK_LAMP2A:
CHKJLAMP3:
CHK_JLAMP3A;
CHK_LAMP4:
CHK_LAMP4A:
CHK_LAMP5:
CHK_LAMP5A:
INC DPTRDEC R7CJNE R7,<t0H,STATUS_CHECKLJMP END_STATUS_CHKMOV COUNTER CHECK, lf0HMOV DPTR,#STATUS_LAMP1MOVX A,@DPTRCJNE A,I*1H,CHK_LAMP2LCALL SEARCH_^LAMATLCALL RANGE CHECKMOV A,STATUS J)OMAINCJNE A,#1H,CHK. T.AMP2LCALL LAMP1_0NSJMP CHKJ.AMP2ALCALL LAMP1_0FFINC COUNTER CHECKMOV DPH,#0HMOV DPL,COUNTER_CHECKMOVX A,@DPTRCJNE A,#1H,CHK_LAMP3LCALL SEARCH^LAMATLCALL RANGE_CHECKMOV A,STATUSJDOMAINCJNE A,#1H,CHK_J.AMP3LCALL LAHP2 ONSJMP CHK_iAMP3ALCALL LAMP2_0FFINC COUNTER_CHECRMOV DPH,#0HMOV DPL,COUNTER_CHECKMOVX A,@DPTRCJNE A,#1H,CHKJLAMP4LCALL SEARCH_ALAMATLCALL RANGE_CHECKMOV A,STATUS_J)OMAINCJNE A,<*lH,CHK_iAMP4LCALL LAMP3_0NSJMP CHKJ.AMP4ALCALL LAMP3_0FFINC COUNTER_CHECKMOV DPH,tf0HMOV DPL,COUNTER_CHECKMOVX A,@DPTRCJNE A,#1H,CHK_LAMP5LCALL SEARCH_ALAMATLCALL RANGE_CHECKMOV . A,STATUS J30MAINCJNE A,<*1H,CHKJLAMP5LCALL LAMP4_0NSJMP CHK_LAMP5ALCALL LAMP4_0FFINC COUNTER_CHECKMOV DPH,lt0H
CHK_LAMP6 :
CHK_LAMP6 A:
CHK_J.AMP7:
CHK_LAMP7A:
CHK_LAMP8 :
CHK_XAMP8 A:
CHK_XAMP9:
CHK_LAMP9A:
MOV DPL,COUNTER CHECKMOVX A,@DPTRCJNE A,#1H,CHKJ.AMP6LCALL SEARCH ALAMATLCALL RANGE_CHECKMOV A,STATUS DOMAINCJNE A,#1H,CHK_LAMP6LCALL LAMP5 ONSJMP CHK_XAMP6 ALCALL LAMPS OFFINC C0UNTER_CHECKMOV DPH,#0HMOV DPL,C0UNTER_CHECKMOVX A,@DPTRCJNE A,#1H,CHK_LAMP7LCALL SEARCH ALAMATLCALL RANGE_CHECKMOV A,STATUSJDOMAINCJNE a ,<*i h ,c h k l a m p?LCALL LAMP6_0NSJMP C H U A M P 7 ALCALL LAMP6_0FFINC C0UNTER_CHECKMOV DPH,#0HMOV DPL,COUNTER_CHECKMOVX A,@DPTRCJNE A,<*1H,CHKJLAMP8LCALL SEARCH_>^LAMATLCALL RANGE_CHECKMOV A,STATUS_pOMAINCJNE A,#1H,CHK_LAMP8LCALL LAMP7_0NSJMP CHK_LAMP8 ALCALL LAMP7 OFFINC COUNTER CHECKMOV DPH,#0HMOV DPL,COUNTER_CHECKMOVX A,@DPTRCJNE A,#1H,CHK_LAMP9LCALL SEARCH_ALAMATLCALL RANGE_CHECKMOV A,STATUS_DOMAINCJNE A,#1H,CHK_JLAMP9LCALL LAMPS ONSJMP CHK_LAMP9ALCALL LAMP8_0FFINC COUNTER_CHECKMOV . DPH,4t0HMOV DPL,COUNTER CHECKMOVX A,@DPTRCJNE A,#1H,CHK_LAMP10LCALL SEARCH_ALAMATLCALL RANGE CHECK
MOV A,STATUS_DOMAINCJNE A,#1H,CHR LAMP10LCALL LAMP9 ONSJMP CHK_LAMP10A
CHKJ.AMP10: LCALL LAMPg_OFFINC COUNTER CHECK
CHK,,J.AMP10A: MOV DPH,#0HMOV DPL,COUNTER_CHECKMOVX A,@DPTRCJNE A,#1H,LP10 OFFLCALL SEARCH_ALAMATLCALL RANGE_CHECKMOV A,STATUS_DOMAINCJNE A,#1H,LP10 OFFLCALL LAMP10_ONSJMP END_STATUS_CHK
LP10 OFF: LCALL LAMP10_OFFEND_STATUS_CHK: POP DPH
POP DPLPOP APOPRET
PSW
DET J.AMP_OFF: PUSH PSWCJNE R7,#10,CHECK_OF_9LCALL LAMPl OFF
END_DLO: POPRET
PSW
CHECK_0F_9: CJNE R7,#9,CHECK_0F_8LCALL LAMP2_0FFSJMP END_DLO
CHECK_0F_8: CJNE R7,#8,CHECK_0F_7LCALL LAMP3_0FFSJMP END_DLO
CHECK_0F_7: CJNE R7,#7,CHECK_0F_8LCALL LAMP4_0FFSJMP END_DLO
CHECK_0F_6; CJNE R7,#6,CHECK_0F 5LCALL LAMP5_0FFSJMP END_DLO
CHECK_0F_5: CJNE R7,#5,CHECK_0F 4LCALL LAMPS OFFSJMP END_DLO
CHECK_0F_4: CJNE R7,«4,CHECK_0F 3LCALL LAMP7_0FFSJMP END_DLO
CHECK_0F_3; CJNE R7,tf3,CHECK OF 2LCALL LAMP8_0FFSJMP END_DLO
CHECK_0F_2 : CJNE R7,tt2,CHECK OF 1LCALL LAMP9_0FFSJMP END_DL0
CHECK_0F_1: CJNE R7,#1,END DLOLCALL LAMP10_OFFSJMP END JDLO
INT_T0: PUSH PSWPUSH APUSH DPLPUSH DPHLCALL DELAYlMOV A,TL0CLR TR0MOV A,TL0
REMOTE1: CJNE A,^»2H,REM0TE1ASJMP REMOTEIB
REMOTElA: CJNE A,#3H,REM0TE2REMOTEIB: MOV A,STATUS_FASE
CJNE A,#4H,END_REM0TE1MOV STATUS_ENTER,^^0HMOV STATUS JFASE,#2HMOV DPTR,#REG_BMOV A,#8 EHMOVX @DPTR,ALCALL ENTRY_DATA
END_REM0TE1: AJMP END_INT_T0REM0TE2: CJNE A,lt4H,REM0TE2A
SJMP REM0TE2BREM0TE2A: CJNE A,it5H, REMOTESREM0TE2B; MOV A,STATUS_JFASE
CJNE A,#4H,END_REM0TE2MOV STATUSJENTER,#0HMOV STATUSJFASE,<*5HMOV DATA3,#0HLCALL GET_STATUSJ.MP
END_REM0TE2: AJMP END_INT_T0REM0TE3: CJNE A,4t6H,REM0TE3A
SJMP REM0TE3BREM0TE3A: CJNE A,#7H,REM0TE4REM0TE3B: MOV A, STATUS J-ASE
CJNE A,#4H,END_REM0TESMOV STATUS ENTER,#0HMOV STATUS_FASE,«7HMOV DATA1,#0HMOV DATA2,#0FHMOV DATAS,«0FHMOV DATA4,#0FH'LCALL DISPLAY^DATA
END REMOTES: AJMP END_INT_T0REM0TE4: CJNE A,tt8,REM0TE4A
SJMP REM0TE4BREM0TE4A: CJNE A,#9H,REM0TE5REM0TE4B; MOV A, STATUS JAS E
CJNE A,#0H,ENTER_REMOTEMOV STATUS ENTER,«0H
SJMP END REM0TE3ENTER_REMOTE: MOV STATUS_ENTER,itlH
LCALL ENTRY_DATAAJMP END INT T0
REMOTES: CJNE A,#10,REMOTE5ASJMP REM0TE5B
REM0TE5A: CJNE A,<J11,REM0TE6REM0TE5B: MOV INPUT_DATA,i»8 H
LCALL ENTRY_DATAAJMP END INT T0
REM0TE6: CJNE A,#12,REM0TE6ASJMP REM0TE6B
REM0TE6A: CJNE A,ttl3,REMOTE?REM0TE6B: MOV INPUT_DATA,J*9H
LCALL ENTRYJ)ATAAJMP END_INT_T0
REMOTE?: CJNE A,#14,REM0TE?ASJMP REM0TE7B
REM0TE7A: CJNE A,<tl5,REM0TE8REM0TE7B: MOV A,STATUS_FASE
CJNE A,#4H,END_REM0TE7MOV STATUS_JENTER,#0HMOV STATUS_FASE,#1HMOV DATA1,*»0HMOV DATA2,#0HMOV DATA3,#0HMOV DATA4,#0HLCALL DISPLAY_DATA
END_REM0TE7: AJMP END_INT T0REMOTES: CJNE A,#16,REM0TE8A
SJMP REM0TE8BREM0TE8A: CJNE A, 1*17, REMOTESREM0TE8B: MOV A,STATUS_FASE
CJNE A,if4H,END REMOTE?MOV STATUS_ENTER,#0HMOV STATUS_FASE,#0HMOV DATA1,#0HMOV DATA2,#0HMOV DATA3,^0HMOV DATA4,#0HAJMP END_INT T0
REM0TE9: CJNE A,#18,REM0TE9ASJMP REM0TE9B
REM0TE9A: CJNE A,#19,REMOTE10REM0TE9B: MOV INPUT_DATA,1*4H
LCALL ENTRY_DATAAJMP END_INT T0
REMOTE10: CJNE A,tf20,REMOTE10ASJMP REMOTE10B
REMOTE10A: CJNE A,#21,REM0TE11REMOTE10B: MOV INPUT_DATA,4#5H
LCALL ENTRY_DATAAJMP END_INT T0
REMOTEll: CJNE A,#22,REMOTEllA3JMP REMOTEllB
REMOTEllA; CJNE A,#23,REM0TE12REMOTE1IB: MOV INPUT _J)ATA,#6 H
LCALL ENTRY_DATAAJMP END INT T0
REM0TE12: CJNE A,#24,REM0TE12ASJMP REMOTE12B
REMOTE12A: CJNE A,#25,REM0TE13REMOTE12B; MOV INPUT_DATA,#7H
LCALL ENTRY_DATAAJMP END INT T0
REMOTE13; CJNE A,#26,REM0TE13ASJMP REM0TE13B
REM0TE13A: CJNE A,#27,REM0TE14REMOTE13B; MOV INPUT_DATA,#0H
LCALL ENTRY_J»ATAAJMP END_INT_T0
REMOTE14: CJNE A,#28,REM0TE14ASJMP REM0TE14B
REM0TE14A: CJNE A,#29,REM0TE15REMOTE14B: MOV INPUT_DATA,ttlH
LCALL ENTRYJDATAAJMP END_INT_T0
REMOTE15: CJNE A,#30,REMOTE15ASJMP REMOTE15B
REM0TE15A; CJNE A,#31,REM0TE16REMOTE15B: MOV INPUT_PATA,#2H
LCALL ENTRY_DATAAJMP END_INT_T0
REM0TE16: CJNE A, *»32, REMOTE 16ASJMP REMOTE16B
REM0TE16A: CJNE A,#33,END_INT_T0REMOTE16B: MOV INPUT_DATA,i»3H
LCALL ENTRY_DATAEND_INT_T0: POP DPH
POP DPLPOP APOP PSWMOV TH0,#0FFHMOV TL0,#0FFHSETB RET I
TR0
AUTORISASI: PUSH PSWPUSH AMOV A,CURRENT PASSlSUBB A,PASSW0RD1CJNE A,#0H,WRONG_PASSMOV A,CURRENT_PASS2SUBB A,PASSW0RD2CJNE A,#0H,WRONG_PASSMOV STATUS AUTORISASI
END_AUT: POP APOPRET
PSW
WRONG_PASS: MOV STATUS_AUTORISASI,#0HSJMP END_AUT
SET_HOURS: MOV R2,*f60BLANK; ACALL READ_DISP_RTC
MOV LAMP12,*f0FFHACALL DISP_LAMPDEC R2CJNE R2,*t0H, BLANKMOV R2,#60
NOT_BLANK: MOV DPTR,tfJAMMOV A,R3MOVX @DPTR,AACALL READ_DISP_RTCACALL DISPEL AMPDEC R2CJNERET
R2,4I0H,NOT_BLANK
SET_MINUTES: MOV R2,#60BLANKS: ACALL READ_DISP_RTC
MOV LAMP34,#0FFHACALL DISP_LAMPDEC R2CJNE R2,<J0H, BLANKSMOV R2,#60
NOT_BLANKS: MOV DPTR,#MENITMOV A,R3MOVX @DPTR,AACALL READ_DISP_RTCACALL DISP^LAMPDEC R2CJNERET
R2,<J0H,NOT_BLANKS
SET^ALL: MOV R2,^»60BLANK_ALL: ACALL READ_DISP_RTC
MOV LAMP12,#0FFHMOV LAMP34,4t0FFHACALL DISP^LAMPDEC R2CJNE R2,#0H,BLANK_ALLMOV R2,#60
ALL_NOT_BLANK; ACALL READ_DISP RTCACALL DISP LAMPDEC R2CJNERET
R2,#0H,ALL_NOT_BLANR
MINUTE_BLANK: MOV R2,#60
MB: MOV LAMP12,lt0FFHMOV LAMP34,#0FFHACALL DISP LAMPDEC R2CJNE R2,<^0H,MBMOV R2,*t60
MBl: MOV A,R3ACALL HEX2BCDMOV LAMP34,AACALL DISP_LAMPDEC R2CJNERET
R2,<*0H,MB1
HOUR_BLANK: MOVHB: MOV LAMP12,#0FFH
MOV LAMP34,#0FFHACALL DISP LAMPDEC R2CJNE R2,^*0H,HBMOV R2,#60
HBl: MOV A,R3ACALL HEX2BCDMOV LAMP12,A
HB2: ACALL DISP_XAMPDEC R2CJNERET
R2,#0H,HB1
HB3: MOV LAMPUl,i»0FHSJMP HB2
READ_DISP_RTC: MOV DPTR,#REG_J^WAIT_TO_READ: MOVX A,@DPTR
ANL A,*»80HCJNE A,#0H,WAIT TOMOV DPTR,#MENITMOVX A,@DPTRACALL HEX2BCDMOV B,AANL A,#0F0HSWAP AMOV LAMPU3,AMOV A,BANL A,#0FHMOV LAMPU4,AMOV DPTR,#JAMMOVX A,@DPTRACALL . HEX2BCDMOVRET
LAMP12,A
HEX2BCD: MOV B,tf 10DIV AB
COUNT_ADDRESS:
RANGE_CHECK:
DC:
DC0:
DCl:
DC2:DCS:
RESET SD:
SWAP AADDRET
A,B
MOV DPTR,lfSTATUS_SlMOV LAMPU2,R3MOV A,R3DEC AMOV B,#5HMUL ABADD A,DPLMOV DPL,AMOVX A,@DPTRMOVRET
LAMPU4,A
MOV STATUS DOMAIN,#0HINC DPTRMOVX A,@DPTRMOV R3,AINC DPTRMOVX A,@DPTRMOV R4,AINC DPTRMOVX A,@DPTRMOV R5,AINC DPTRMOVX A,@DPTRMOV R6 ,AMOV A,R3MOV B,R5CLR CSUBB A,BJC DClCJNE A,#0H,DC2MOV A,R4MOV B,R6CLR CSUBB A,BJC DC0CJNE A,#0H,DCSJMP RESET_SDACALL ON GT OFF_HOURSJMP DC4ACALL OFF_GT_ON_HOURSJMP DC4ACALL OFF_GT ON HOURSJMP DCSACALL ON_GT OFF_HOURMOV A,STATUS_DOMAINCJNE A,tt0H,DC7MOVRET
STATUS_DOMAIN,#0H
DC4: MOV A,STATUS_DOMAINCJNE A,«2H,DC4ASJMP DC4B
DC4A: CJNE A,#3H,DC6DC4B: MOV A,R4
MOV B,R6CLR CSUBB A,BJC DCS ,ACALLRET
0N_GT_0FFJ1IN
DC5: ACALL OFF_GT_ON_MINDC6 : RETDC7: CJNE
RETA,#1H,DC8
DCS: CJNE A,4t2H,DC9ACALLRET
CHECK_>1IN_0N
DC9: ACALLRET
CHECK_MIN_OFF
ON_GT_OFF_HOUR: ACALL READ_RTCMOV DPTR,4JJAMMOVX A,@DPTRMOV B,ACLR CSUBB A,R5JC ONOFFHlCJNE A,*t0H,ONOFFH0MOVRET
STATUSJ30MAIN,#3H
ONOFFH0: CLR CMOV A,BSUBB A,R3JNC 0N0FFH2MOVRET
STATUS_DOMAIN,4*0H
ONOFFHl: MOVRET
STATUS_DOMAIN,<tlH
0N0FFH2: CJNE A, #0H,ONOFFHlMOVRET
STATUS_D0MAIN,^J2H
OFF_GT_ON _HOUR: ACALL READ_RTCMOV DPTR,4tJAMMOVX A,@DPTRMOV B, ACLR CSUBB A,R3JC OFFONHlCJNE A,4*0H,OFFONH0MOVRET
STATUS DOMAIN, lt2H
OFFONH0: CLR CMOV A,BSUBB A, R5JNC 0FF0NH2MOVRET
STATUS_D0MAIN,*^1H
OFFONHl: MOVRET
STATUS_DOMAIN,<*0H
0FF0NH2: CJNE A,#0H,OFFONHlMOVRET
STATUS J)0MAIN,#3H
OFF_GT_ON_MIN: ACALL READ RTCMOV DPTR,#MENITMOVX A,@DPTRMOV B,ACLR CSUBB A,R4JC OFFONMlCLR CMOV A,BSUBB A,R6JNC OFFONMlMOVRET
STATUS_D0MAIN,1*1H
OFFONMl: MOVRET
STATUS_J)OMAIN,#0H
ON_GT_OFF_MIN: ACALL READ_RTCMOV DPTR,#MENITMOVX A,@DPTRMOV B,ACLR CSUBB A,R6JC ONOFFMl
• CLR CMOV A,BSUBB A,R4JNC ONOFFMlMOVRET
STATUS_DOMAIN,#0H
ONOFFMl; MOVRET
STATUS_DOMAIN,*tlH
CHECK_MIN_ON: ACALL READ_RTCMOV DPTR,ttMENITMOVX A,@DPTRCLR CSUBB A,R4JNC MIN ONMOVRET
STATUS_DOMAIN,«0H
MIN_ON: MOV STATUS_D0MAIN,J^1H
RET
CHECK_MIN_OFF:
M.INOFF;
ACALLMOVMOVXCLRSUBBJNCMOVRETMOVRET
READ_RTCDPTR,#MENITA,@DPTRCA,R6MIN_OFFSTATUS_D0MAIN,#1H
STATUS_DOMAIN,#0H
READ_RTC: UPDATE_NOT_YET:
MOVMOVXANLCJNERET
DPTR,#REG_AA,@DPTRA,lt80HA ,#0H,UPDATE_NOT_YET
PROGRAM_ON: MOVMOVXORLMOVXRET
DPTR,1*P0RT_BA,@DPTRA,#1H@DPTR,A
LAMP1_0N: MOVMOVXORLMOVXRET
DPTR,#PORT_BA,@DPTRA,lt2H@DPTR,A
LAMP20N; MOVMOVXORLMOVXRET
DPTR,#PORT_B A,@DPTR A,lt4H @DPTR,A
LAMP3_0N: MOVMOVXORLMOVXRET
DPTR,#PORT_BA,@DPTRA,<t8 H@DPTR,A
LAMP4 ON: MOVMOVXORLMOVXRET
DPTR,#PORT_BA,@DPTRA,#10H@DPTR,A
LAMP5_0N: MOV DPTR,#PORT_BMOVX A,@DPTRORL A,<t20HMOVX @DPTR,A
RET
MOVMOVXORLMOVXRET
DPTR,#PORTJA,@DPTRA,^t40H@DPTR,A
LAMP7_0N: MOVMOVXORLMOVXRET
DPTR,#PORT_BA,@DPTRA,#80H@DPTR,A
LAMP8_0N: MOVMOVMOVXMOVRET
DPTR,#PORT_A A,DATA JLAMP8 @DPTR,ASTATUS_LAMP8,ltlH
PROGRAM_OFF: MOVMOVXANLMOVXRET
DPTR,^tPORT_BA,@DPTRA,#0FEH@DPTR,A
LAMPIOFF: MOVMOVXANLMOVXRET
DPTR,**P0RT3A,@DPTRA,#0FDH@DPTR,A
LAMP2_0FF: MOVMOVXANLMOVXRET
DPTR,#P0RT3A,@DPTRA,«0FBH@DPTR,A
LAMP3_0FF: MOVMOVXANLMOVXRET
DPTR,#PORT_BA,@DPTRA,it0F7H@DPTR,A
LAMP40FF: MOVMOVXANLMOVXRET
DPTR,#PORT_BA,@DPTRA,*»0EFH@DPTR,A
LAMP50FF: MOV DPTR,#PORT_BMOVX A,@DPTR ANL A,i^0DFH
MOVX @DPTR,ARET
LAMP6_0FF: MOV DPTR,ttPORT_BMOVX A,@DPTRANL A,#0BFHMOVX @DPTR,ARET
LAMP7_0FF; MOV DPTR,#PORT BMOVX A,@DPTRANL A,#7FHMOVX @DPTR,ARET
LAMP8_0FF: MOV DPTR,#PORT_AMOV A,C0UNTER_LAMP8MOVX @DPTR,AMOV STATUS_LAMP8,#0HRET
P R O G R A M U T A M A R E C E I V E R J
MULAI: MOV>
IE,#82HMOV TM0D,<t5HSETB TR0MOV TH0,#0FFHMOV TL0,#0FFHLCALL DELAYlLCALL INITIAL_PPIMOV- DPTR,#POWER_CODEMOVX A,@DPTRCJNE A,#0AAH,CONT_INITSJMP AFTER_P DOWN
CONT_INIT: LCALL INITIAL_RTCLCALL RAM_CHECKLCALL CHECK_RELAYMOV DPTR,#CURRENT PASSlMOV A,#12HMOVX @DPTR,AMOV DPTR,1ICURRENT_PASS2MOV A,#34HMOVX @d p t r ;a
AFTER_P_DOWN: MOV COUNTER_i’ASS,#0HMOV DATAl,it0FHMOV DATA2,#0FHMOV DATA3,#0FHMOV DATA4,#0FHMOV STATUS_ENTER,#0HMOV STATUS_FASE,*t0HMOV STATUS_PASS,<t0H
CHECK_STF:
BLANKING:
CHECK_STF_COMM
CHECK_STF3:
CHECK_STF4:
LCALL READ_DISP RTCLCALL DISP LAMPMOV A,STATUS_FASE 'CJNE A ,#0H,CHECK_STF_COMMMOV A,STATUS PASSCJNE A,#0H,BLANKINGLCALL READ_DISP_RTCLCALL DISP_LAMPLCALL SCAN KEYLCALL PROSESJ)ATASJMP CHECK_STFLCALL READ_DISP_RTCLCALL DISP LAMPLCALL SCAN_KEYLCALL DELAYlLCALL BLANK_DISPLCALL SCAN_KEYLCALL DELAYlAJMP CHECK_STFCJNE A,lt2H,CHECK STF3LCALL SET_HOURSAJMP CHECK_STFCJNE A,#3H,CHECK_STF4LCALL SET_MINUTESAJMP CHECK STFLCALL SCAN_KEYAJMP CHECK_STF
P R O G R A M U T A M A T R A N S M I T T E R
.CODEORG 0HLJMP TRANSMIT
DELAY: PUSH PSWMOV R2,#3H
KURANGIl: MOV R1,#0FFHKURANGI: DEC R1
CJNE R1,#0H,KURANGIDEC R2CJNE R2,<t0H, KURANGIlPOP PSWRET
SCAN_KEY: PUSH PSWCLR PI.4SETB PI.5SETB PI.6SETB PI.7
END_SCAN_KEY:
KEYl;
KEY2:
KEY3:
KEY4:
KEYS:
KEY6 :
KEY7:
KEYS:
JNB P1.0,REY1JNB PI.1,KEY2JNB PI.2,KEYSJNB P1.3,KEY4SETB PI.4CLR PI.5SETB PI.6SETB PI.7JNB PI.0,KEYSJNB P1.1,KEY6JNB P1.2,KEY7JNB PI.3,KEYSSETB PI.4SETB Pl.SCLR PI.6SETB PI.7JNB P1.0,KEY9JNB P1.1,KEY10JNB P1.2,KEY11JNB P1.3,REY12SETB PI.4SETB Pl.SSETB PI.6CLR PI.7JNB P1.0,KEY13JNB P1.1,KEY14JNB P1.2,KEY15JNB P1.3,KEY16POPRET
PSW
MOV A,»7HACALL KIRIM_DATASJMP END SCAN_ZEYMOV A,#9HACALL KIRIMJ3ATASJMP END_SCAN_KEYMOV A,#11ACALL KIRIMJ3ATASJMP END_SCANJKEYMOV A,U13ACALL KIRIM_DATASJMP e n d_scanjk:eyMOV A,#15ACALL KIRIM DATASJMP END_SCAN_ZEYMOV A,#17ACALL KIRIM_DATASJMP END_SCAN_KEYMOV A,#19ACALL KIRIM_DATASJMP END_SCAN KEYMOV A,#21
ACALL KIRIM DATASJMP END_SCAN KEY
KEY9: MOV A,«23ACALL KIRIM DATASJMP END_SCAN_KEY
REY10: MOV A,#25ACALL RIRIM_DATASJMP END_SCAN KEY
KEni: MOV A,#27ACALL KIRIM_DATASJMP END_SCAN_KEY
KEY12: MOV A,#29ACALL KIRIM DATASJMP END_SCAN_KEY
KEY13: MOV A,#31ACALL KIRIM DATASJMP END_SCAN_KEY
KEY14: MOV A,#33ACALL KIRIM_DATASJMP END_SCAN_KEY
KEY15: MOV A,#35ACALL KIRIMJ)ATASJMP END_SCAN_KEY
KEY16: MOV A,#37ACALL KIRIMJDATASJMP END_SCAN_KEY
KIRIM_DATA; PUSH PSWPUSH ACLR P3.2
KIRIM: SETB P3.2ACALL DELAYCLR P3.2ACALL DELAYDEC ACJNE A,#0H,KIRIM
TUNGGUl: JHB PI.0,TUNGGUlTUNGGU2: JNB P1.1,TUNGGU2TUNGGU3: JNB P1.2,TUNGGU3TUNGGU4: JNB P1.3,TUNGGU4
POP APOPRET
■ PSW
TRANSMIT: CLR P3.2TRANSMIT1: ACALL SCANJCEY
ACALL DELAYSJMP TRANSMITl