Anda di halaman 1dari 362

Bahasa Pemrograman

Mikrokontroler
Materi ini diambil dari Bapak Ir. Sudjadi, MT
MK Teknik Mikroprosesor
Software
Text file
Text file
.LST
Hi Level COMPILER Text file
Language
.HEX
ASSEMBLER
Software
And
Intermediate Level
Language HEX to BIN
LINKER

.BIN
Bin File

PROGRAMMER
Software & Hardware

Machine Code to Chip


Hi Level Language

Ditulis dengan text editor (Notepad, wordpad)
– Biasanya sudah diintegrasikan sebagai IDE (Integrated
Development Environment) berisi editor text dan kompiler
(dan tool-chain lainnya)

Bahasa lebih mudah dipahami user

Menghasilkan code yang relatif besar

Mengikuti sintaks standar atau tambahan macro dari
compilernya

Kode bisa digunakan untuk berbagai arsitektur mikro
→ Memerlukan directive arsitektur targetnya

Contoh; BASIC52, Keil C, Franklin C, Intel PLM
Intermediate Level (Assembly)

Ditulis dengan text editor (Notepad, wordpad)
– Juga telah terintegrasi dalam IDE

Bahasa lebih sulit dipahami user daripada High Level Language

Menghasilkan code yang relatif kecil dan cepat
– Bersama linker, menggabungkan beberapa kode object
menjadi satu file hex atau biner

Mengikuti sintak standar atau tambahan macro dari
compilernya

Kode hanya bisa digunakan oleh arsitektur tertentu sesuai
kodenya. Misalnya: bahasa rakitan 8051 hanya untuk
mikrokontroler 8051, tidak bisa untuk AVR

Contoh Compiler Assembly; AMS51 (Metalink), Ad2500, ALDS
C Language Assembly
LOW LEVEL LANGUAGE
(Machine Code)

Hanya dimengerti mesin, berupa kode-
kode 010101

Ditulis dalam sistem bilangan Biner
Assembly Listing File

Hex File
Pemrograman uV EPROM
Pemrograman Flash/EEPROM
Programmer & Emulator
In Circuit Programming

Misalnya untuk AT89S51
(8051 dengan ISP)

Menggunakan USB-ASP
Simulator 8051: MCU51 IDE

http://www.8052.com
/tut8051.php
http://mcu8051ide.so
urceforge.net
Simulator 8051: MCU51 IDE
Memori Internal
Simulator 8051: MCU51 IDE
Memori Internal dan Register

Onchip memori: IRAM
dan SFR

AT89C51: 128 x 8-bit
memori internal

4 register bank: R0 –
R7

Bit memori

General IRAM

SP (stack pointer)

PC (program counter)

Index register
Simulator 8051: MCU51 IDE
Special Function Registers
Struktur dan Teknik
Pemrograman Assembler 8051
Materi ini diambil dari Bapak Ir. Sudjadi, MT
MK Teknik Mikroprosesor
Diolah oleh Eko Didik Widianto

Referensi: http://plit.de/asem-51/contents.htm
Bahasa Pemrograman Rakitan
;program 7.2 pengisian memori
;namafile : isimem.asm
;------ assembler control
$MOD51 ;mutlak untuk kompiler asm51
$NOPAGING ;tidak mutlak diperlukan
$TITLE (ASSEMBLER TEST) ;tidak mutlak diperlukan
;------ assembler directive
dtawl equ 0
almawl equ 40h
jmldata equ 5
;------ program utama
org 0000H ;start awal di memori 0000h
clr c ;nol kan carry
mov R0,#almawl ;R0 akan diisi 40h
mov a,#dtawl ;a diisi 0
mov b,#jmldata ;b diisi 5
loop5x:
add a,#1 ;a=a+1
mov @R0,a ;lokasi di <R0> diisi a
inc R0 ;R0=R0+1
djnz b,loop5x ;b=b-1,jika belum 0 ke loop5x
sjmp $ ;berhenti disini
Best Practice Pemrograman
Gunakan tab atau spasi untuk meletakkan
simbol-simbol, label, mnemonic, operand dan
komentar secara rapi, dengan anjuran berikut

Kolom pertama digunakan untuk assembler
kontrol, label dan komentar.

Selanjutnya agak menjorok kedalam, bisa 2
spasi atau 1 tab adalah simbol variabel,
menemonic, assembler directive.

Selanjutnya operand.

Terakhir adalah komentar pada baris tersebut,
komentar untuk beberapa instruksi diletakkan
diawal kolom.
Struktur Bahasa Rakitan
;Atas sendiri adalah identitas program
;kegunaan, nama pembuat, versi, tahun, dsb.
;************************
;------ assembler control Interrupt Vector 8051
$MOD51
$..
;------ assembler directive
;inisialisasi variabel
..
org ...
;tabel interupt vector
..
;------ program utama
org .. ;start awal program
ACALL .. ;biasanya awal prg adalah inisialisasi
ACALL .. ;peripheral, seperti serial, timer, counter
;interupsi, I/O yang lain.
..
..
;------- akhir program utama
Struktur Bahasa Rakitan (2)
;------ subrutin
;subrutin a
..
..
ret
;subrutin b
..
..
ret
;Interupt Service Routine(ISR)
..
..
reti
;akhir seluruh program diberi End
End
Akhir Program Rakitan

Dalam keadaan normal sistem MCU, biasanya


prosesor tidak pernah selesai bekerja atau berhenti,
tetapi bisa sebagai salah satu di bawah ini;

Looping atau kembali label/alamat tertentu,
begitu seterusnya

Melakukan scanning di penggal program
tertentu

Menunggu masukan pemakai

Menunggu interupsi
MCU8051 IDE: Kompiler C dan Assembler
Assembler: ASEM-51
Kompiler: SDCC
Simbol

jumlah equ 5
mem1 equ 40h
ORG 0000h
Start:
Mov R0,#jumlah ;isi R0 dengan 5
Mov R1,#mem1 ;isi R1 dengan 40h
mov a,#0
LOOP:
inc A
Mov @R1,A
Inc R1 ;R1=R1+1
DJNZ R0,LOOP
Sjmp $ ;usai
Simbol (2)

Yang sudah diketahui Compiler → tidak
perlu didefinisikan, misal A, R0, R1, DPTR

Yang belum diketahui Compiler harus
didefinisikan

Yang sering digunakan/umum untuk satu
jenis uP tertentu diberikan dalam bentuk
Module file, yang harus disertakan dalam
program; $MOD51, atau INCLUDE
(‘nama_file’)
Simbol dalam Bahasa Rakitan (3)

Simbol-simbol merupakan respresentasi dari
konstanta numerik, alamat dan register

Simbol-simbol bisa dibentuk dengan adjad A
hingga Z dan bisa dikombinasikan dengan angka
(0-9),

Tidak boleh menggunakan spasi, untuk spasi
gunakan garis bawah '_' (underscore)

Untuk abjad, tidak dibedakan antara huruf besar
dan kecil (case insensitive). Misalnya: Alabel dan
alabel menujukkan simbol yang sama.

Tidak boleh mengawali simbol dengan angka
Simbol dalam Bahasa Rakitan (4)
$MOD51
DATA1 DATA 064h
PIN1 BIT 0E0h

ENAM EQU 6
PENGHITUNG EQU R3 ;Penghitung identik dengan R3
ENAM_JUGA EQU ENAM ;Simbol = simbol yang sudah
;didefini­
;si­
kan sebelumnya
­
TIGA EQU ENAM/2;Simbol=suatu ekpresi aritmatika
A_REG EQU A ;A_REG identik dengan A
ASCII_D EQU 'D' ;Simbol=ASCII literal 'D'
StartPrg equ 0030h ;start program

Org starprg
;----
;----
end
$TITLE(MCS51 Program Ver. 1.0)
Mnemonic $MOD51 ;see modulo 51

MEMORY1 equ R1
MEMORY2 equ R2

MOV a,#234 MOD 2


DB 'MCS-51'
Tetapan1:
DB 127,13,54,0,99
• Kelompok assembler directives (Compiler). Misalnya: EQU, ORG, DB
• Kelompok assembler controls (Compiler). Misalnya: $TITLE, $INCLUDE
• Operation Code (kode perintah Mikroprosesor)
• Kelompok operand implisit, yaitu simbol-simbol A, AB, C, DPTR, PC,
R0, R1, R2, R3, R4, R5, R6, R7, PSW, DPH, DPL dst… nama-nama
Registers (Mikroprosesor)
• Operator asembler, yaitu; EQ,NE,GT,GE,LT,LE,HIGH,LOW, MOD,
SHR, SHL, NOT, AND, OR and XOR (Compiler)
Label
Label menunjukkan alamat lokasi memori fisik yang berkaitan
dengan pernyataan yang diberi label tersebut. Dalam
asembler, label adalah simbol, sedangkan setelah dikompile,
lokasi label akan menjadi lokasi memori di MCU. Dengan label,
programer tidak lagi bersusah payah menghitung jangkah
lompatan, menentukan atau mengubah lokasi instruksi, lokasi
data, dan lebih fleksibel dalam perubahan-perubahan program,
contoh label seperti diperlihatkan dibawah ini;

DATA_URUT: DB 0,1,2,3,4,5 ;Data storage


MCU_1: DB 'MCS-51' ;Data storage
VARIABEL: DS 20 ;Data reservation
BIT_VARIABEL: DBIT 16 ;Data reservation
MULAI: MOV A,#23 ;Assembly language
Simbol dan Label (2)

Ada baiknya gunakan bahasa indonesia saja untuk


simbol yang lain, misalnya; AWAL, MAJU, MUDUR,
LOKASI_MEMORI, PENAMPUNG dan sebagainya. Contoh
simbol yang salah adalah sebagai berikut;

1MEMOR_LUAR ;(Tidak boleh dimulai dengan angka)


KALANG# ;('#' tidak diperbolehkan)
ADD ;(tidak boleh, ini instruksi mnemonic)
LOW ;(tidak boleh, ini Assembler operator)
DATA ;(tidak boleh, ini Assembler directive)
Simbol Spesial 8051
Mendefinisikan nama
himpunan register x51

Lihat: http://plit.de/asem-51/append_c.htm
Assembler Directives
Assembler directives (pengarah program asembler)
digunakan untuk mendefinisikan simbol-simbol, konstanta,
atau variabel, melakukan reservasi tempat di memori,
menentukan lokasi penyimpanan program.
ORG (Set Origin)
ORG akan dibarengi dengan alamat secara eksplisit atau suatu ekpresi simbol
yang menunjukkan lokasi alamat di program memory untuk instruksi-instruksi atau
label dibawahnya. ORG akan meletakkan penggal-penggal program atau data
sesuai dengan keinginan pemrogram. Tidak mencantumkan ORG dalam program,
dianggap program dimulai dari alamat 0000h
END
END adalah akhir dari program, baris paling bawah dari program asembler
harus diberi assembler directive END.
USING
USING mengeset bank register ke <expr> antara 0..3. Hanya mempengaruhi
R0.. R7 di register bank saat ini

USING 1 ; set register bank ke 1


Assembler Directives (2)
EQU
EQU (Equate) adalah sama dengan atau identik, untuk menetapkan suatu nilai
numerik pada sebuah simbol, nilai numerik adalah data, alamat atau register.
SET
Seperti EQU, namun dapat didefinisikan kembali

MAXMONTH EQU 12
OCTOBER EQU MAXMONTH-2
COUNTREG EQU R5

CHAPTER SET 1
CHAPTER SET CHAPTER+1
CHAPTER SET A

Lihat: http://plit.de/asem-51/pseudo.htm
BIT
Assembler Directives (3)
BIT Directive menetapkan suatu alamat memori yang
dapat dialamati bit pada suatu simbol, alamatnya antara
0 hingga 127 adalah memory internal dan 128 hingga 255
adalah alamat register dengan fungsi khusus.

Int_Enabled BIT 0AFH ;Global interupt enable


EX0 BIT 0A8H ;IE.0 - EXTERNAL INT.0 ENABLE
ET0 BIT EX0+1 ;IE.1 - TIMER 0 INT.ENABLE
EX1 BIT ET0+1 ;IE.2 - EXTERNAL INT.1 ENABLE

DB
DB (Define Byte) adalah menetapkan satu atau lebih
nilai konstanta byte di program memory.

JENIS_MCU: DB 'MCS-51'
Tetapan1: DB 127,13,54,0,99
DB 17,32,239,163,49
Tetapan2: DB 2*8,'MPG',2*16,'abc'
Assembler Directives (4)
CODE, DATA, BIT, IDATA, XDATA
Directive ini menetapkan suatu alamat memori 8051.
DATA, IDATA, dan BIT nilainya tidak boleh melebihi 0FFH

EPROM CODE 08000H ; define ROM Address


STACK DATA 7 ; define direct RAM address
V24BUF IDATA 080H ; define indirect RAM address
REDLED BIT P1.5 ; define bit address
SAMPLER XDATA 0100H ; define external RAM address

CSEG, DSEG, ISEG, BSEG, XSEG


Directive ini mengalihkan satu dari lima ruang alamat
8051 (Code, DATA, IDATA, BIT, and XDATA segment [at
address]

DSEG ;switch to previous DATA segment


CSEG AT 8000h ;start a new CODE segment at address 8000H
XSEG at 0 ;start a new XDATA segment at address 0
Assembler Controls
Perintah yang mengatur kompiler bagaimana dan apa saja file
input (source code) dan bagaimana bentuk-bentuk file outputnya.
$TITLE(MCS51 Program Ver. 1.0)
$NOPAGING
$PAGEWIDTH(132)
$INCLUDE (TEST.ASM)

Lengkapnya: http://plit.de/asem-51/controls.htm
Komentar / Comment
Komentar atau comment digunakan untuk memberi
keterangan pada program asembler, komentar bisa
ditempatkan di baris mana saja dengan memberi tanda
semicolon (';') diawalnya.

MOV a,#22 ;komentar apa saja


;disini juga boleh komentar
MOV b,#45
Ekspresi Operand
Nilai Operand dapat dituliskan dengan tiga cara, yaitu;
• Eksplisit, contoh di bawah a langsung diisi dengan nilai 23h
• Simbol (yang sudah didefinisikan lebih dahulu dinilai)
• Dengan ekpresi, contoh di bawah, a diisi sisa dari pembagian
155/2, ekpresi digunakan untuk mempermudah penulisan atau
pembacaan maksud dari program

MOV a,#23h ;isi a dengan 23h


MOV mtest,#JANGKAH ;isi memori mtest dengan
;nilai JANGKAH
MOV a,#(155 MOD 2) ;isi a dengan 01
;(155/2 = 77 sisa 1)
Bilangan Dasar
Bilangan dapat dinyatakan dengan
• Desimal (default)
• Hexadesimal
• Oktal
• Digunakan dalam memberikan nilai seketika (immediate) ke
operand / simbol

MOV a,#22 ;isi a dengan 22 desimal


MOV a,#23d ;isi a dengan 23 desimal
MOV a,#0Feh ;isi a dengan 0FEH
MOV a,#17Q ;isi a dengan 17 octal
Character Strings
Strings dapat didefinisikan ke dalam operand atau alamat
tertentu
• Strings dengan 2 karakter → bisa menggunakan DPTR
• Character menggunakan simbol ASCII dan dapat dilakukan operasi
aritmetika maupun logikal
• DB digunakan untuk menginisialisasi memori dengan satu atau
lebih nilai byte dalam segmen kode atau konstanta. Lainnya: DW
MOV DPTR,#'BC' ;isi DPH dengan 42h (ASCII 'B')
;dan DPL ;dengan 43h (ASCII 'C')

SUBB a,#'A' ;a=a-41h

MXDATA:DB 'MCS-51';tempatkan kode ASCII data string


;tersebut ;dimulai pada alamat MXDATA

Lihat: https://www.keil.com/support/man/docs/a51/a51_controls.htm
Operator Aritmetika
+ tambah
- kurang
* perkalian
/ pembagian
MOD modulo, atau sisa pembagian

MOV a,#0FFh-10d ;a diisi dengan 245d


MOV a,#20 MOD 3 ;a diisi dengan 2 (sisa pembagian 20/3)
MOV a,#(20 MOD 3) ;sda, boleh pakai kurung

Lihat: https://www.keil.com/support/man/docs/a51/a51_wp_operators.htm
Operator Bitwise
0 0 0 0 0 1 0 0 4
OR bitwise OR (atau) → |
AND bitwise AND (dan) → & NOT
XOR bitwise Exclusive OR → ^
1 1 1 1 1 0 1 1 251
NOT bitwise NOT (invers)
+1

1 1 1 1 1 1 0 0 252
empat equ 4
minempat equ -4
A
START:
Mov a,#(NOT empat)+1 ;a=komplemen 4 + 1
Mov a,#minempat ;a=2's komplemen dari 4
Mov a,#0FCh ;a=FCh, -4 dlm 2's compl
;adalah FCh=252d
Mov a,#11111100b ;atau 11111100b

Lihat: https://www.keil.com/support/man/docs/a51/a51_wp_operators.htm
Operator Logika
< kurang dari → LT
<= kurang dari atau sama dengan → LTE
> lebih dari → GT
>= lebih dari atau sama dengan → GTE
== sama dengan → EQ
<> tidak sama dengan → NE

Argument: operand1 OPERATOR operand2


Membandingkan operand1 dan operand2

Menghasilkan nilai 1 (true) jika sesuai dan 0
(false) jika tidak sesuai

Lihat: https://www.keil.com/support/man/docs/a51/a51_wp_operators.htm
Operator Spesial
SHR Shift right (geser kekanan) → >> 0 0 0 0 0 0 1 0
SHL Shift left (geser kekiri) → << SHL
HIGH hi-byte 16 bit
LOW lo-byte 16 bit A 0 0 0 0 0 1 0 0

Mov a,#1 SHL 2 ;a=4


Mov a,#4 SHR 2 ;a=1
Mov a,#11011011b SHL 1 ;a= 10110110b
Mov a,#HIGH 8765h ;a=87h
Angka equ 11001100b
Saringequ 11110000b

Mov a,#Angka ;a=11001100b


Mov b,#Angka OR Saring ;a=11111100b
Mov R0,#(Angka OR (Saring SHL 2))
;a=11001100b or 11000000b → a=11001100b
Lihat: https://www.keil.com/support/man/docs/a51/a51_wp_operators.htm
Level dan Urutan Operator

Lihat: https://www.keil.com/support/man/docs/a51/a51_wp_operators.htm
Kontrol Tandon Air: Sistem

Tandon air biasanya digunakan untuk mensuply air


ke rumah diletakkan di atas menara, sumur dan bak
PAM adalah penampungan air di tanah, merupakan
sumber air yang harus dipompa ke tandon terlebih TANDON
dahulu. Tiga buah sensor saklar mendeteksi
keadaan tandon air, sumur dan bak penampungan
air PAM. Kondisi kosong, switch akan kontak, atau P1.0
P1.3
memberikan logika ‘0’ ke P1.0, P1.1 dan P1.2 , atau P1.4 MK
logika '1' untuk keadaan isi. Port P1.0, P1.1 dan P1.2
ini disebut sebagai unit input, atau difungsikan

P1.2

P1.1
sebagai unit input. Selanjutnya, P1.3 dan P1.4
difungsikan sebagai unit output, dalam hal ini
mengendalikan rele, jika output port ini bernilai ‘1’,
maka rele bekerja, rele akan mengkontakkan pompa
ke catu daya (memperkerjakan pompa).
Kontrol Tandon Air: Algoritme
Algoritma yang lebih mengarah ke bahasa
pemrograman dibuat sebagai berikut;

Jika tandon isi, maka matikan kedua pompa air

Jika tandon kosong dan …
– Jika bak PAM kosong dan sumur kosong maka
matikan kedua pompa
– Jika bak PAM isi, maka jalankan pompa bak PAM,
matikan pompa sumur, sampai tandon isi
– Jika bak PAM kosong dan sumur isi, maka jalankan
pompa sumur dan matikan pompa bak PAM
Kontrol Tandon Air:
start

Diagram Alir
tandon isi? tidak

ya

tidak bak pam isi ?

ya

sumur isi ya

tidak

matikan kedua hidupkan pompa hidupkan pompa


pompa sumur PAM
;program 7.4, kontrol tandon air
;******************************
$MOD51
TANDON
BAKPAM
equ P1.0
equ P1.1
Kontrol Tandon Air: Kode
SUMUR equ P1.2
POMPA_SUMUR equ P1.3 Program (dari Diagram
POMPA_PAM
ORG 0000h
equ P1.4
Alir)
Start:
JB TANDON,MATIKANPOMPA ;jika Tandon isi matikan kedua pompa
JB BAKPAM,POMPAPAM_ON ;jika tandon kosong dan bak pam isi
;hidupkan pompa bak PAM
JB SUMUR,POMPASUMUR_ON ;jika tandon kosong, bak pam kosong
;dan sumur isi, hidupkan pompa sumur
AJMP MATIKANPOMPA ;jika tandon kosong, bak PAM kosong
;& sumur kosong, matikan kedua pompa
POMPASUMUR_ON:
SETB POMPA_SUMUR
AJMP Start
POMPAPAM_ON:
SETB POMPA_PAM
AJMP Start
MATIKANPOMPA: ;matikan semua pompa
CLR POMPA_SUMUR
CLR POMPA_PAM
AJMP Start
end
Kontrol Tandon Air:
FSM (Alternatif)
TANDON
RESET
~P1.0 && P1.1
P1.0
P1.3
P1.4 MK
POMPA_MATI POMPAPAM_ON
P1.3 = 0 P1.3 = 1

P1.2

P1.1
P1.4 = 0 P1.4 = 0
P1.0||(~P1.1&&~P1.2)
~P1.0 &&
~P1.0 && ~P1.1 P1.1
~P1.0 && ~P1.1 &&
P1.2 POMPASUMUR_ON
P1.3 = 0
P1.4 = 1
P1.0 || ~P1.2
Mode Pengalamatan dalam
Bahasa Rakitan 8051
MK Teknik Mikroprosesor
Eko Didik Widianto
Sudjadi

Referensi:

http://plit.de/asem-51/contents.htm

https://courses.cs.washington.edu/courses/cse466
/01au/Lab/A251.pdf
Tipe Memori 8051
SRAM
Flash RAM

Memori Kode: 4K

Memori Data Internal: 128B

Memori Eksternal

SFR (Special Function
Register)

Memori Bit
EPROM/Flash
Model Memori 8051

Lihat: https://courses.cs.washington.edu/courses/cse466/01au/Lab/A251.pdf
Segmen Memori 8051
CODE, DATA, BIT, IDATA, XDATA
Directive ini menetapkan suatu alamat memori 8051.
DATA, IDATA, dan BIT nilainya tidak boleh melebihi 0FFH

EPROM CODE 08000H ; define ROM Address


STACK DATA 7 ; define direct RAM address
V24BUF IDATA 080H ; define indirect RAM address: 80H-FFH
REDLED BIT P1.5 ; define bit address
SAMPLER XDATA 0100H ; define external RAM address

CSEG, DSEG, ISEG, BSEG, XSEG


Directive ini mengalihkan satu dari lima ruang alamat
8051 (Code, DATA, IDATA, BIT, and XDATA segment [at
address]

DSEG ;switch to previous DATA segment


CSEG AT 8000h ;start a new CODE segment at address 8000H
XSEG at 0 ;start a new XDATA segment at address 0
Memori Kode

Menyimpan kode program

Dibatasi sampai 64K
– Alamat: 0000H - FFFFH
– Dapat on-chip di mikrokontroler (ROM/EPROM)
– Off-chip ROM

AT89C51: 4K on-chip flash
– Endurance: 1000 Write/Erase cycle
Memori Internal & Register

Onchip memori:
IRAM dan SFR

AT89C51: 128 x 8-
bit memori internal

4 register bank: R0 –
R7

Bit memori

General IRAM

SFR
Register Bank


Lihat perubahan nilai memori internal, PC, dan register R
Memori Internal dan Bit-addressable
Memori Bit
MOV 20h,#0FFh

Merupakan bagian dari Ekivalen dengan:
RAM internal
SETB 00h
– Alamat: 20H - 2FH SETB 01h

Perintah: SETB, CLR SETB 02h

SFR juga ada yang bit- SETB 03h
addressable SETB 04h
SETB 05h
MOV P0,#01h
Ekivalen dengan: SETB 06h
SETB 80h SETB 07h
Special Function Register
Akses Port I/O (P0 sampai P3)

Dilakukan lewat SFR
– Bit-addressable
– P0 (80H)
– P1 (90H) ●
Lihat perubahan nilai
– P2 (A0H) SFR, akumulator
– P3 (B0H) dan
devais/peripheral
keluarannya
Mode Pengalamatan
Mode Pengalamatan

Immediate Constants
– mov A, #64H

Direct Addressing (Internal RAM & SFR)
– mov A, 64H

Indirect Addressing (Internal & Eksternal)
– mov A,@R0

Register-based Addressing
– xor A, cmp A

Indexed Addressing (Program memory)
– movc A,@A+DPTR
Immediate Constants
Nilai sebuah konstanta dapat diberikan pada
opcode dan tersimpan di memori program.

mov A, #100 ; isi A dengan 100 desimal


mov A, #64h
mov A, #01000100b

mov P1,#01010101b ;isi P1 dengan 01010101 biner


add a,#0Feh ;a=a+0Feh
Immediate Constants (2)
64h
Operand

mov a,#100

Op code (operational code)


instruksi
A AA
64
92
10010010
add A,#00101110b A=A+2Eh 64h+2Eh=92h

PSW 0
1 1 1 1 1 1 1 1
0

C P Even
Direct Addressing

In direct addressing, the operand is specified by an 8-bit
address field in the instruction.

Only internal data RAM and SFRs can be directly
addressed, 00H - FFH
Operand Internal memory

mov a,72h 70h 4A


71h 1B
Opcode (operational code) 72h 34
instruksi
73h FE
74h AA
A AA
34
75h BB
Direct Addressing (Move Data)
;move data (copy data)
Inbyte equ 70h ;source byte
Port1 equ 90h ;port 1 sfr's

org 8000h ;set the origin


mov a,Inbyte ;copy contens on inByte to a
mov port1,a ;acc to port 1
;equivalent to mov P1,a

70h 4A
71h 1B
72h 34
73h FE
74h AA
PORT1 CD
4A A EF
4A
75h BB
Direct Addressing (Move Data)
Direct Addressing (Arithmatic)
70h 4A

ADD A,73h 71h 1B


72h 34
73h FE
A=A+73h FEh+EFh=1EDh 74h AA
75h BB

PSW 1
0 1 1 1 1 1 1 0
1

A ED
EF
Direct Addressing (Bit Oriented)
;bit oriented data transfer
mov P1.0,C
mov C,P1.1
C
PSW 0
1 1 1 1 1 1 1 0
1

P1 0 1 1 1 1 1 0 0
1
Indirect Addressing

Internal dan External RAM dapat diakses dalam mode
ini, dimana address ditempatkan dalam register,
misalnya R0 atau R1 atau dalam stack pointer
mov r0,#73h 70h 4A
71h 1B
mov a,@R0 72h 34
inc R0 73h 82

mov b,@R0 74h 86

A EF
82 75h BB

B EF
86


Pada pengalamatan 16 bit ke memori movx a,@DPTR
eksternal digunakan DPTR (indexed) movx @DPTR,a
Register Addressing

Proses-proses yang hanya
melibatkan operasi dalam
R0 EF
7B A 7B
register bank, termasuk
operasinya dengan carry
mov r0,a
R7 4B
34 B 34
mov r7,b
Register-specific Addressing

Beberapa instruksi adalah cmp A
spesifik untuk register tertentu xor A

Proses-proses yang hanya A 000 1 1 0 1 0 1 35h
melibatkan operasi dalam
register khusus, seperti Acc, B

CMP A
register, data pointer, dimana
disini hanya diperlukan satu
byte perintah. A 101 0 0 1 0 1 0 CAh

;Exchange

XOR A
xch a,b
xch a,r0
A 000 0 0 0 0 0 0
xch a,@r1

A AA
BB B BB
AA
Register-specific Addressing
34h 4A
;Stack oriented Data Transfer
org 8000h 33h 1B
mov SP,#2Fh 32h 34
mov a,#45 31h 82
push acc 30h 2D
86
mov b,#0 2Fh BB
SP
pop b

B BB
2D
00
Indexed Addressing

Memori program hanya dapat diakses dengan indexed
addressing. Mode ini ditujukan untuk membaca tabel
look-up dalam memori program

Sebuah 16-bit base register (baik DPTR atau Program
Counter) menunjuk basis dari tabel tersebut dan ACC
diset berdasarkan nomor entry dalam tabel

Alamat dalam entry tabel di memori program dibentuk
dengan menambahkan data akumulator ke pointer basis

Bentuk lain dari indexed addressing adalah penggunaan
instruksi case jump.
– Alamat tujuan dari instruksi jum dihitung sebagai
jumlah dari pointer basis dan data ACC
Indexed Addressing
mov DPTR,#8100h
mov A,#2 8100h 4A
movc a,@a+DPTR 8101h 1B
8102h 34
DPTR 81 00 8103h 82
8104h 86

A 02 8105h BB

movc a,@a+DPTR
A 02
34
movc a,@a+PC
Indexed Addressing
org 0h
mov DPTR,#LookupTable
main: acall GetData
sjmp main

GetData:
clr A
movc A,@A+DPTR ;Ambil isi Array KombinasiRuas
inc DPTR
ret

; abfgcdet
LookupTable:
DB 00010001b ; 0 abcdef
DB 10110111b ; 1 bc
DB 00101001b ; 2 abged
...
DB 01000001b ; 6 acdefg
DB 00110111b ; 7 abc
DB 00000001b ; 8 abcdefg
DB 00000111b ; 9 abcfg
Teknik Pemrograman Assembly
8051
MK Teknik Mikroprosesor dan Antarmuka
Eko Didik Widianto
Dania Eridani

Referensi:

MCS 51 Microcontroller Family User’s Manual

Materi Teknik Mikro pak Sudjadi (T.Elektro)

(c)2020, Eko Didik Widianto, Universitas Diponegoro


Teknik Pemrograman Aplikasi

Interupsi

Timer dan Counter

Komunikasi Serial

Implementasi Delay

(c)2020, Eko Didik Widianto, Universitas Diponegoro


Interupsi

(c)2020, Eko Didik Widianto, Universitas Diponegoro


Mode Layanan I/O (Service Routine)

Polling

CPU aktif, I/O di’tanya’ satu persatu

Menggunakan perintah JB, JNB untuk melihat nilai bit register

Interrupt

CPU pasif, bisa mengerjakan program lain, I/O aktif
menginterupsi CPU

Mengaktifkan interupsi, menjalankan ISR di interrupt vector

I/O I/O

Data Ambil Data Ambil


siap? Data siap Data

8051 8051

(c)2020, Eko Didik Widianto, Universitas Diponegoro


Sistem Interupsi pada 8051

Interupt flag registers


TCON Timer 8F 8E 8D 8C 8B 8A 89 88 88H
Control TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
IE flag IE event
1: occur 1: negedge, 0: low level
(c)2020, Eko Didik Widianto, Universitas Diponegoro
Kendali Interupsi
IE Interrupt AF AE AD AC AB AA A9 A8 A8H
Enable EA - - ES ET1 EX1 ET0 EX0

• EA (Enabled Interupt) adalah bit yang menentukan


global enable, artinya bila bit ini di clearkan ('0'), maka
seluruh interupt diabaikan oleh MCU (interupt blocking).

Individual interupt enables, artinya masing-masing
sumber interupsi dapat diabaikan atau tidak tergantung
dari masing-masing bit kendalinya, jika bit kendali '0',
maka interupt dari sumber yang bersangkutan,
diabaikan oleh MCU (blocking), masing-masing adalah;
ES untuk serial interupt , ET1 untuk Timer 1, EX1 untuk
eksternal 1, ET0 untuk timer 0, EX0 untuk eksternal 0.

(c)2020, Eko Didik Widianto, Universitas Diponegoro


Operasi Interupsi: Vektor dan ISR

Jika diaktifkan, terjadinya interupsi akan memaksa PC
mengarah ke vektor interupsi (alamat interupsi) dan
menjalankan subrutin interupsi (ISR, interrrupt service routine)

ISR diakhiri dengan RETI dan sebaiknya waktu eksekusinya
secepat mungkin (mis: hanya mengeset flag saja, dan
eksekusi dilakukan di main loop)
Interrupt Vector Priorita Flag Flag clearing
s
RESET 0000h 1 - otomatis
Eksternal 0 0003h 2 IE0 otomatis
Timer 0 000Bh 3 TF0 otomatis
Eksternal 1 0013h 4 IE1 otomatis
Timer 1 001Bh 5 TF1 otomatis
Serial Port 0023h 6 TI/RI Oleh programmer
(c)2020, Eko Didik Widianto, Universitas Diponegoro
org 00h ; reset
sjmp awal ; awali kode dari alamat 30h
org 03h ; INT0 address
inc R7 ; ISR jika terjadi INT0
reti ; return interrupt Interupsi (2)
org 0Bh ; TF0 address
acall timer0ISR ; panggil subrutin ISR
reti ; return interrupt
org 13h ; INT1 address
reti ; return interrupt
org 1Bh ; TF1 address
reti ; return interrupt
org 23h ; RI and TI address in serial COM
reti ; return interrupt
; --- awal kode
org 30h
awal: mov A,#0 ; clear ACC
mov IE,#00111111B ; Aktifkan semua interrupt
setb IE.7 ; aktifkan global → bisa IE=10111111b
--- ; inisialisasi kode
ulang: add A,#04 ; tambah 4 ke akumulator
--- ;kode utama
sjmp loop ; loop
timer0ISR: --- ; ISR TF0. Pastikan eksekusi cepat
ret ; return

(c)2020, Eko Didik Widianto, Universitas Diponegoro


Sistem Deteksi Pulsa

Opsi: Polling atau Interupsi

Interupsi eksternal 0 (INT0) digunakan untuk deteksi pulsa

Pulsa terdeteksi (mengeset IE0 flag) saat transisi turun pulsa
VC C

VC C

U 29

VC C 2 12
3 P 3 . 0 / R XD P 1.0/A IN 0 13
6 P 3 . 1 / TXD P 1.1/A IN 1 14
7 P 3 . 2 / I N TO P1.2 15
8 P 3 . 3 / I N T1 P1.3 16
R ESET 9 P 3 . 4 / T0 P1.4 17
11 P 3 . 5 / T1 P1.5 18
P3.7 P1.6 19
5 P1.7
4 XTA L 1
XTA L 2
12 MH Z 1
R S T/ V P P
20
VC C
VC C
AT89C 2051

(c)2020, Eko Didik Widianto, Universitas Diponegoro


Sistem Deteksi Pulsa: Polling VC C

VC C

U 29
VC C 2 12
3 P 3 . 0 / R XD P1.0/A IN 0 13
6 P 3 . 1 / TXD P1.1/A IN 1 14
7 P 3 . 2 / I N TO P1.2 15
8 P 3 . 3 / I N T1 P1.3 16
R ESET 9 P 3 . 4 / T0 P1.4 17
11
;program
P 3 . 5 / T1 polling.asm
P1.5 18
P3.7
;test polling PPuntuk
1.6
1.7
1 9 deteksi pulsa
5
4;********************************
XTA L 1
XTA L 2
$MOD51
12 MH Z 1
input_pulsa
R S T/ V P P equ P3.2
20
output_port
VC C equ P1
VC C
AT89C 2051
ORG 0000h
mov output_port,#0ffh
Pulsa masukan
Start:
jnb input_pulsa,start;wait for hi
jb input_pulsa,$ ;wait for lo
inc output_port
sjmp start
end

(c)2020, Eko Didik Widianto, Universitas Diponegoro


Sistem Deteksi Pulsa: Interupsi
1 ;program 8.1, Pencacah pulsa masuk via INT0
2 ;****************************************
3
4 $MOD51
5
0000 6 Pstart equ 0000h ;start program
002F 7 stack equ 02fh ;di internal RAM
8
9 ;================== tabel interupt vectors
0000 10 org Pstart ; power up and reset vector
0000 802E 11 sjmp init
0003 12 org Pstart+03h ; interrupt 0 vector
0003 0590 13 inc P1
0005 32 14 reti
000B 15 org Pstart+0bh ; timer 0 interrupt vector
000B 020030 16 ljmp init
0013 17 org Pstart+13h ; interrupt 1 vector
0013 020030 18 ljmp init
001B 19 org Pstart+1bh ; timer 0 interrupt 1 vector
001B 020030 20 ljmp init
0023 21 org Pstart+23h ; serial port int. vector
0023 020030 22 ljmp init
002B 23 org Pstart+2bh ; 8052 extra interrupt vector
002B 020030 24 ljmp init

(c)2020, Eko Didik Widianto, Universitas Diponegoro


Sistem Deteksi Pulsa: Interupsi (2)
25
26 ;=================== main program
0030 27 org Pstart+30h
0030 28 init:
0030 759000 29 mov P1,#0 ;nolkan P1
0033 75812F 30 mov SP,#stack ;inisialisasi stack pointer
0036 D288 31 setb IT0 ;negative-edge activated int.
0038 D2AF 32 setb EA ;aktifkan global interupt
33
003A 34 start:
003A 901234 35 mov DPTR,#1234h ;contoh program utama
003D E0 36 movx A,@DPTR
003E F5F0 37 mov B,A
0040 A3 38 inc DPTR
0041 E0 39 movx A,@DPTR
0042 25F0 40 add A,B
0044 80F4 41 sjmp start ;looping
42 end
43

(c)2020, Eko Didik Widianto, Universitas Diponegoro


Sistem Deteksi Pulsa: Operasi Interupsi
0000 80 1 • Restart di 0000h -> Jump to 0030
0001 2E
• 0030h program init dan program utama.
0002
0003 05 • Int muncul dilokasi 003Bh;
0004 90 2 – Selesaikan 1 siklus mesin dahulu.
0005 32
– Penunjuk stack dinaikkan 1, menjadi 40h
0030 75 – PC low di push ke stack dalam hal ini data
0031 90 3Dh disimpan di lokasi 40h
4
0032 00
– Penunjuk stack dinaikkan 1, menjadi 41h
5
– PC hi di push ke stack dalam hal ini data 00
3

003A 90 disimpan ke lokasi 41h, 003D lokasi stl ISR.


003B 12 int • PC dimuati 0003h -> ISR (inc P1)
003C 34
003D E0
• Perintah RETI ;
003E F5 – POPing isi stack ke PC hi.
7
003F F0 – Penunjuk stack diturunkan 1, menjadi 40h
0040 A3
0041 E0
– POPing isi stack ke PC lo, selengkapnya PC
akan dimuati 003Dh, dan program kembali
6

0042 25
0043 F0 melanjutkan program utama
0044 80 – Penunjuk stack diturunkan 1, menjadi 3Fh.
0045 F4
(c)2020, Eko Didik Widianto, Universitas Diponegoro
Sistem Kontrol Tandon: Interupsi
;kontrol tandon air dilengkapi interupsi
;************************************************
$MOD51
; TANDON
;================== interupt vectors
org Pstart ; power up and reset vector
ljmp init
org Pstart+03h ; interrupt 0 vector
ljmp pompa_trouble
org Pstart+0bh ; timer 0 interrupt vector
ljmp init ; int yg tidak digunakan arahkan ke label
; init
org Pstart+13h ; interrupt 1 vector
ljmp pompa_trouble
org Pstart+1bh ; timer 0 interrupt 1 vector
ljmp init
org Pstart+23h ; serial port interrupt vector
ljmp init
org Pstart+2bh ; 8052 extra interrupt vector
ljmp init

(c)2020, Eko Didik Widianto, Universitas Diponegoro


Sistem Kontrol Tandon: Interupsi
;interupt service routine (ISR)
org 0200h
Pompa_trouble: ;matikan semua pompa & program seakan berhenti
clr Pompa_sumur
clr Pompa_pam
setb alarm ;hidupkan alarm
acall delay
reti

(c)2020, Eko Didik Widianto, Universitas Diponegoro


Timer dan Counter

(c)2020, Eko Didik Widianto, Universitas Diponegoro


Fungsi

Menghitung kejadian; mencacah pulsa masuk dari
luar, pencacah pulsa per detik -> Frequency Counter

Interval pewaktuan: pewaktu
– stopwatch/chronograph; mengukur interval waktu antara dua
kejadian
– sebagai timer, diset sekian detik, start dan setelah selesai
akan memberitahu bahwa waktunya sudah selesai.

Baud rate generator: untuk membangkitkan referensi
sinyal pada operasi serial port


Sumber sinyal:
– Counter → dari luar
– Timer → dari dalam (hasil pembagian sinyal clock)

(c)2020, Eko Didik Widianto, Universitas Diponegoro


Register Timer
TH1 Timer 1 Hi 8DH

TH0 Timer 0 Hi 8CH

TL1 Timer 1 Lo 8BH

TL0 Timer 0 Lo 8AH

TMOD Timer Mode 89H

TCON Timer 8F 8E 8D 8C 8B 8A 89 88 88H

Control TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0

(c)2020, Eko Didik Widianto, Universitas Diponegoro


Register Mode Timer (TMOD)
BIT NAMA DISKRIPSI

7 GATE Timer 1 Gate bit

6 C/T Counter/Timer 1 select bit

5 M1 Timer 1 Mode bit 1

4 M0 Timer 1 Mode bit 0

3 GATE Timer 0 Gate bit

2 C/T Counter/Timer 0 select bit

1 M1 Timer 1 Mode bit 1

0 M0 Timer 0 Mode bit 0

(c)2020, Eko Didik Widianto, Universitas Diponegoro


Mode Timer (dari M0 dan M1)
M1 M0 MODE DISKRIPSI
0 0 0 13-bit timer mode: 8-bit THx dan 5-bit
TLx
0 1 1 16-bit timer mode
1 0 2 8-bit auto-reload mode
1 1 3 Split timer mode:
Timer 0; TL0 8 bit timer dikontrol
oleh bit mode timer 0, TH0 8 bit timer
dikontrol oleh bit mode timer 1
Timer 1; berhenti

TCON Timer 8F 8E 8D 8C 8B 8A 89 88 88H


Control TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0

Flag Control
1: overflow 1: aktif

(c)2020, Eko Didik Widianto, Universitas Diponegoro


Mode Timer 1 (M1=0, M0=1)

Timer clock = clock_osc dibagi 12

Konfigurasi: M1=0 dan M0=1

Tfx akan set jika THx dan TLx timeout

Waktu timeout bisa lebih lama daripada mode 0 (13-bit)
osilator :12 TLx THx
8 bit 8bit TFx

T1
C/T
Misal:
TRx
Jika fosc = 11,0592 MHz,
maka frekuensi timer =
GATE
fosc/12 = 921,6 kHz →
INT1
Periode = 1,085 us

(c)2020, Eko Didik Widianto, Universitas Diponegoro


Mode Timer

Mode 2: Autoreload

Mode 3: Split-mode, Timer 0 menggunakan TL0
dan Timer 1 menggunakan TH0. T1 tidak aktif.

Timer TLx THx Timer TL1 TH1


Clock 5 bit 8bit TFx Clock 8 bit 8bit
mode 0 overflow
flag
Timer TL0
Timer TLx THx
TFx Clock 8 bit
TF0
Clock 8 bit 8bit
mode 1

Timer TLx
Clock 8 bit
TFx
TH0
reload 1/12 frek clock
8bit TF1

THx
8bit
mode 3
mode 2

(c)2020, Eko Didik Widianto, Universitas Diponegoro


Contoh Timer

Bangkitkan sinyal pulsa dengan periode 4 ms.
Frekuensi osilator 11.0592 MHz
2 ms

T_siklus = 12 / f_osc
= 12 / 11,0592x10 = 1,085 us 4 ms

Jumlah cacahan untuk membangkitkan delay 2 ms
Cacahan = 2x10-3 / 1,085x10-6 = 1843

Timer mode 0 (13-bit). Jumlah cacahan maksimum 213
atau 0-8191. THx dan TLx diberikan selisih 1843 dari 8191
Nilai = 8191 – 1843 = 6348 atau 18CCH

Timer mode 1 (16-bit). Jumlah cacahan maksimum 216
atau 0-65535. THx dan TLx diberikan selisih 1843 dari 8191
Nilai = 65535 – 1843 = 63692 atau F8CCH

(c)2020, Eko Didik Widianto, Universitas Diponegoro


Contoh Timer

T_siklus = 12 / f_osc 100us
= 12 / 11,0592x10 = 1,085 us
200us

Jumlah cacahan untuk membangkitkan delay 100 us
Cacahan = 100x10-6 / 1,085x10-6 = 92

Timer mode 1 (auto-reload, 8-bit). Mode 0, 1, dan 3
memerlukan pengesetan nilai THx dan TLx kembali. Mode
ini tidak diperlukan. THx dan TLx diisi dengan nilai yang
sama. Jumlah cacahan maksimum 28 atau 0-255.
Nilai = 255 – 92 = 163 = A3H

(c)2020, Eko Didik Widianto, Universitas Diponegoro


Program Timer
; Pembangkit gelombang kotak dengan frekuensi sekitar 10 Khz
pada port P1.0 (dengan anggapan kristal 12 MHz.);
;Program 9.2 Generator gelompang kotak pada P1.0
$MOD51
org 0000h
sjmp start
start:
org 0030h
MOV TMOD,#02H ;8 bit auto-reload mode
MOV TH0,#-50 ;nilai reload pada TH0, 50 uS
SETB TR0 ;start timer
BALIK:
JNB TF0,BALIK ;tunggu overflow
CLR TF0
CPL P1.0
SJMP BALIK
End

(c)2020, Eko Didik Widianto, Universitas Diponegoro


Membaca RegisterTtimer 16 Bit
Untuk membaca nilai THx dan TLx dapat dilakukan setiap saat oleh
MCU, meskipun timer sedang berjalan. Tetapi perlu diperhatikan
kemungkinan adanya phase error, dimana saat dibaca sedang
terjadi overflow byte rendah (TLx) ke byte tinggi (THx), untuk
menghindari kejadian ini, disarankan untuk membaca THx lebih
dahulu, kemudian baru TLx, kemudian THx lagi, jika THx terakhir
tidak sama dengan terdahulu, program perlu diulang, listing
programnya;

BACA: ;R6 R7 akan berisi TL1 dan TH1


MOV A,TH1
MOV R6,TL1
CJNE A,TH1,BACA
MOV R7,A

(c)2020, Eko Didik Widianto, Universitas Diponegoro


Pencacah Frekuensi
;Program 9.3, Frequency Counter
;T0 sebagai referensi waktu
;T1 sebagai masukan pulsa yang diukur
;------------------------------------
Kali20 equ 010h
T50mdetik EQU -50000
Pstart equ 0000h
$mod51 ;8051 module
ORG Pstart
AJMP init
org Pstart+3
ajmp init
org Pstart+0Bh
AJMP TimerInterrupt
org Pstart+13h
ajmp init
org Pstart+1Bh
ajmp init
org Pstart+23h
ajmp init

(c)2020, Eko Didik Widianto, Universitas Diponegoro


Pencacah Frekuensi (2)
ORG Pstart+30h
INIT:
mov sp,#2fh ; reinitialize stack pointer
mov psw,#0
MOV Kali20,#20 ;Nilai awal pengali=20
MOV TMOD,#01010001b
;timer 0 : mode 1 (16bit) - Timer
;timer 1 : mode 1 (16bit) – Counter
MOV TH0,#3Ch
MOV TL0,#0B0h ;3CB0=-50000
;Interupsi setiap 50mS
MOV TH1,#0 ;nilai awal counter
MOV TL1,#0
SETB ET0 ;Aktipkan interupsi Timer 0
SETB EA ;Aktipkan Sistem interupsi
SETB TR0 ;Jalankan Timer 0
SETB TR1 ;Jalankan Counter 1

(c)2020, Eko Didik Widianto, Universitas Diponegoro


START: Pencacah Frekuensi (3)
;program utama tampilkan data
sjmp START ;looping disini
TimerInterrupt: ;ISR setiap 50 uS
MOV TH0,#3Ch ;isi ulang TH0 dan TL0
MOV TL0,#0B0h
DJNZ Kali20,SelesaiInterupsi ;belum 1 detik

;jika sudah 20 x 50000 = 1 detik


BACA: ;R6 R7 akan berisi nilai cacahan pulsa dalam 1
detik
MOV A,TH1
MOV R6,TL1
CJNE A,TH1,BACA
MOV R7,A

MOV TH1,#0 ;clearkan counter


MOV TL1,#0
MOV Kali20,#20 ;isi ulang Kali20

SelesaiInterupsi:
RETI
END (c)2020, Eko Didik Widianto, Universitas Diponegoro
Komunikasi Serial UART

(c)2020, Eko Didik Widianto, Universitas Diponegoro


Fungsi Port Serial

Mengirim dan
menerima data
dari luar melalui
D0 D1 D2 D3 D4 D5 D6 D7

TX RX
cara serial (1 bit
per satuan waktu)

Tipe transfer: sinkron
dan asinkron D0 D1 D2 D3 D4 D5 D6 D7

TX RX

SINKRONISASI

START D0 D1 D2 D3 D4 D5 D6 D7 PARITY STOP


(c)2020, Eko Didik Widianto, Universitas Diponegoro
Format Sinyal Serial 8051 (UART)

START D0 D1 D2 D3 D4 D5 D6 D7 PARITY STOP



Kecepatan bit disebut sebagai baud rate atau laju bit disingkat bps (bit
per second), 1200, 4800, 9600 bps. Contoh: untuk laju bit 4800 bps
berarti lebar pulsa untuk 1 bit adalah 20.84 ms.

Makin besar pesat bit, makin cepat data ditransmisikan, tetapi
memerlukan bandwitdh jalur (‘jalan’) yang semakin lebar, penggunaan
kabel biasa atau kabel telpon kecepatan transmisi data dibatasi oleh
bandwidth kabel tersebut.

Saluran tanpa data bertegangan ‘1’, START bit selebar 1 pulsa, selalu ‘0’.

Setelah bit START, diikuti serial data, jumlah data dapat 7 atau 8.

Setelah data-data bit bisa diikuti (jika diperlukan) oleh PARITY BIT, jika
dipilih PARITY EVEN, maka bit parity akan menggenapkan jumlah bit ‘1’
nya, jika dipilih PARITY ODD, maka bit parity akan mengganjikan jumlah
bit ‘1’ nya, dalam contoh dipilih EVEN, jadi bit paritynya ‘0’

Akhir data adalah STOP bit, yang selalu ‘1’, dapat 1 atau 2 pulsa
lebarnya.

Setelah itu jalur kembali ‘1’ untuk siap dilalui oleh data yang lain.
(c)2020, Eko Didik Widianto, Universitas Diponegoro
Sistem Minimum

Menggunakan pin RxD (P3.0) dan TxD (P3.1)

RxD internal pull-up
VC C

VC C

U 29

VC C 2 12
3 P 3 . 0 / R XD P 1.0/A IN 0 13
6 P 3 . 1 / TXD P 1.1/A IN 1 14
7 P 3 . 2 / I N TO P1.2 15
8 P 3 . 3 / I N T1 P1.3 16
R ESET 9 P 3 . 4 / T0 P1.4 17
11 P 3 . 5 / T1 P1.5 18
P 3.7 P1.6 19
5 P1.7
4 XTA L 1
XTA L 2
12 MH Z 1
R S T/ V P P
20
VC C
VC C
AT89C 2051

(c)2020, Eko Didik Widianto, Universitas Diponegoro


Notasi, Mode, dan Register Serial

Notasi format : 4800,8,1,N

Laju bit 4800bps

START bit tidak ditulis karena lebar pulsa selalu 1 → Nilai ‘0’

8 bit data

1 Stop bit → Nilai ‘1’

dan tidak ada parity (Opsional, N=None, E=Even, O=Odd).
SM0 SM1 MODE Fungsi Baud Rate
0 0 0 Shift Register 1/12 Oscillator
0 1 1 8-bit UART Diset oleh Timer
1 0 2 9-bit UART 1/64 atau 1/32 Oscillator
1 1 3 9-bit UART Diset oleh Timer

SBUF SerialBuffer 99H

SCON Serial 9F 9E 9D 9C 9B 9A 99 98 98H

Control SM0 SM1 SM2 REN TB8 RB8 TI RI


(c)2020, Eko Didik Widianto, Universitas Diponegoro
Mode 0 – Shift Register
Mode tulis
ALE

Data (RXD)

D0 D1 D2 D3 D4 D5 D6 D7

Shift Clock
(TXD)

ALE
Mode baca

Data (RXD)
D0 D1 D2 D3 D4 D5 D6 D7

Shift Clock
(TXD)

(c)2020, Eko Didik Widianto, Universitas Diponegoro


Mode Serial 1

Mode 1 adalah 8-Bit UART dengan baud rate yang dapat
diatur
– Transmisi serial dengan format 1 bit start (‘0’), 8 bit data, 1 bit
stop (‘1’) dan tidak ada parity melalui port TXD
– Laju bit atau Baud rate variabel, ditentukan oleh overflow timer.

SMOD=0 → 1/32 dari timer overflow.

SMOD=1 → 1/16 dari timer overflow.
– Mode 1 sederhana dan sering digunakan untuk komunikasi
antara MCU dengan Komputer.
– Trasmisi dilakukan dengan menuliskan data ke SBUF. Akhir
transmisi dilakukan dengan mengeset nilai TI di register SCON
– Penerimaan data diinisiasi oleh bit START. Kondisi REN=1 dan
RI=0 harus dipenuhi. RI akan set jika penerimaan data selesai

(c)2020, Eko Didik Widianto, Universitas Diponegoro


Mode Serial 2, 3

Mode 2 adalah 9-Bit UART dengan baud rate tetap
– Baudrate 1/16 atau 1/32 frekuensi oscillator;

SMOD=0 → 1/64 frekuensi crystal.

SMOD=1 → 1/32 frekuensi crystal.
– Transmisi serial dengan format 8 bit plus bit ke-sembilan yang
ada pada TB8 dan 1 stop bit.
– Transmisi diinisiasi dengan menuliskan data ke SBUF. Akhir
transmisi diindikasikan dengan mengeset bit TI di register SCON
– Penerimaan data diinisiasi oleh bit START (‘0’). Kondisi REN=1
dan RI=0 harus dipenuhi. RI akan set jika penerimaan data
selesai

Mode 3 adalah 9-Bit UART seperti Mode 2 dengan baud rate
yang dapat diatur;
– Laju bit atau Baud rate variabel, ditentukan oleh overflow timer.

(c)2020, Eko Didik Widianto, Universitas Diponegoro


Menghitung Baud rate
PCON Power SMOD1 SMOD - POF GF1 GF0 PD IDL 87H
0
Control


SMOD digunakan sebagai bit mode serial untuk menentukan
baudrate dengan Timer 1 dalam mode 8-bit auto reload

Baudrate pengirim dan penerima harus sama

F osc
Baudrate= Dengan Fosc = 16 MHz:
N ×(256−TH 1)
SMOD1=0: Nilai TH1 untuk baudrate

F osc
TH 1=256−( ) 9600 adalah

SMOD1=1: 384×baudrate TH1 = 256-(16x106) /
F osc (192x9600)
TH 1=256−( ) = 247 = F7H
192×baudrate

(c)2020, Eko Didik Widianto, Universitas Diponegoro


Koneksi Port RS-232

Koneksi null-modem → cross-cable

Handshaking secara hardware

nama DB25 DB9


RD 3 2

RD, Receive Data (RXD).
TD 2 3

TD, Transmit Data.
SG 7 5

SG, Signal Ground.

DTR, Data Terminal Ready DTR 20 4

DSR, Data Set Ready DSR 6 6

CD, Carrier Detect CD 8 1

RTS, Request To Send. RTS 4 7

CTS, Clear To Send CTS 5 8

(c)2020, Eko Didik Widianto, Universitas Diponegoro


Level RS-232
+15

Memerlukan
konverter level dari
TTL ke RS-232 5

0 RS232

TTL

-15
RS232 LEVEL
CONVERTER
RS232 TTL

MCU
Personal Computer

(c)2020, Eko Didik Widianto, Universitas Diponegoro


Level Converter

Misalnya: MAX232 C8
VC C

S1 R ESET
10uF
U1
VC C 1
R ST R1
4 10K
R5 R4 X2
Y1
12MH z
10K 10K
5 C7 C7
X1 30pf 30pf
12 2
13 +P 1 . 0 P 3 . 0 / R XD 3
14 -P 1 . 1 P 3 . 1 / TXD 6
15 P 1.2 P 3 . 2 / I N T0 7
16 P 1.3 P 3 . 3 / I N T1 8
17 P 1.4 P 3 . 4 / T0 9
18 P 1.5 P 3 . 5 / T1
19 P 1.6 11
P 1.7 P3.7
AT89C 2051

U2
D B9
13 1 2 TTL RX 1
RS232 8 R 1IN R 1OU T 9 6
R 2IN R 2OU T 2
11 14 7
TTL 10 T1 I N T1 O U T 7 3
T2 I N T2 O U T RS232 TX 8
C4 1 4
22uF 3 C 1+ 9
4 C 1- 5
5 C 2+
C3 C 2- P1
22uF 2
6 V+
VC C V-
VC C C5 16
22uF 15 VC C
GN D

TC 2 3 2
C6
22uF IC LEVEL
CONVERTER

(c)2020, Eko Didik Widianto, Universitas Diponegoro


Kode Serial Register
;Tunggu karakter dari serial port
;echokan kembali dan kirim ke P1
$MOD51
$NOPAGING
org 0000
ljmp start
org 30h
start:
clr ea ; disable all interrupts
acall initser ; initialize serial 4800,8,1,N
loop:
acall getchr
acall sndchr
mov P1,a
sjmp loop

(c)2020, Eko Didik Widianto, Universitas Diponegoro


Kode Serial Register (2)
;inisialisi serial port 4800,8,1,N.crystal oscillator 12 MHz
initUART:
mov PCON,#80h ;set SMOD=1
mov TMOD,#22h ;timer 1 sebagai baud rate generator
;mode 2 (8 bit auto reload)
mov TH1,#0f4h ;menggunakan 12 MHz Crystal
setb TCON.6 ;jalankan timer 1 atau SETB TR1
mov SCON,#050h;serial port mode 1. aktifkan REN
ret
;kirim data di akumulator ke serial port
sndchr:
clr SCON.1 ; clear kan TI
mov SBUF,a ; kirim data ke sbuf
txloop:
jnb SCON.1, txloop ; tunggu hingga TI ‘1’
ret
; terima data dari serial port ke akumulator
getchr:
jnb RI, getchr ; tunggu hingga ri ‘1’
mov A, sbuf ; pindahkan data dari sbuf ke a
clr RI ; clear ri
ret (c)2020, Eko Didik Widianto, Universitas Diponegoro
Waktu Tunda / Delay

(c)2020, Eko Didik Widianto, Universitas Diponegoro


Delay / Waktu Tunda

Fungsi:
– Referensi waktu
– Menunggu IO stabil
– Sinkronisasi dengan IO
– Memperlambat jalan program

Teknik:
– Menggunakan perintah NOP (no operation) atau perulangan→
Blocking
– Menggunakan IO (Timer) untuk menunda. Perintahkan IO
Timer untuk menghitung waktu yang ditentukan, beritahu CPU
bila sudah selesai → Non Blocking

(c)2020, Eko Didik Widianto, Universitas Diponegoro


Waktu Eksekusi Instruksi


Byte-> jumlah
byte yang
diperlukan

Siklus mesin ->
waktu untuk
menyelesaikan
satu perintah

(c)2020, Eko Didik Widianto, Universitas Diponegoro


start: Perhitungan Waktu Tunda
-----
-----
Nop ;tunda 1 siklus mesin = 12 us untuk kristal 1 MHz
-----
-----

(c)2020, Eko Didik Widianto, Universitas Diponegoro


Perhitungan Waktu Tunda

mov p1,#00h mov p1,#0FFh sjmp start mov p1,#00h


P1.3

Sjmp loop

24 us 24 us 24 us

72 us

Loop:
mov p1,#00000000h ;hidupkan led (active low) 2 siklus
mov p1,#11111111h ;matikan led 2 siklus
sjmp loop ;2 siklus

(c)2020, Eko Didik Widianto, Universitas Diponegoro


Waktu Tunda Mikrodetik (Blocking)
Start:
mov P1,#00h ;hidupkan LED pada P1, 24uS
nop ;tunda 12 S
nop ;tunda 12 S
mov P1,#0FFh ;matikan LED pada P1, 24 uS
sjmp start ;kembali ke start, 24 uS
End

mov p1,#00h NOP NOP mov p1,#0FFh sjmp start mov p1,#00h
P1.3

96us

(c)2020, Eko Didik Widianto, Universitas Diponegoro


Waktu Tunda dalam Detik (Blocking)
;program 12.2a, Penundaan orde detik
;**************************************
$MOD51
Start:
mov P1,#00h ;hidupkan LED pada P1
acall tunda
mov P1,#0FFh ;matikan LED pada P1
acall tunda ; 24 us
sjmp start ;kembali ke start
Tunda: ;rutin tunda
; Total delay = (24 + 12 + 24x255 + 12x255x255 + 24x255x255+24x255+24) us
; = 2353200 us = 2,35 detik
mov a,#0FFh ; 12 us sebanyak 1
Loopa:
mov b,#0FFh ; 24 us sebanyak 255
Loopb:
nop ; 12 us sebanyak 255x255
djnz b,loopb ; 24 us sebanyak 255x255
djnz a,loopa ; 24 us sebanyak 255
ret ; 24 sebanyak 1
End
(c)2020, Eko Didik Widianto, Universitas Diponegoro
Tipe Instruksi Bahasa Rakitan
8051
MK Teknik Mikroprosesor
Eko Didik Widianto
Sudjadi

Referensi:

http://plit.de/asem-51/contents.htm

MCS 51 Microcontroller Family User’s Manual

(c)2020, Eko Didik Widianto, Universitas Diponegoro


Tipe Instruksi

Aritmatika

Bitwise

Transfer Data

Manipulasi dan Operasi Boolean

Program Flow
– Conditional Branching
– Direct Jump
– Direct Call --> Prosedur
– Interrupt

(c)2020, Eko Didik Widianto, Universitas Diponegoro


Memori 8051 dan Simbol Register
Rn Register serbaguna R0 sd R7 di register bank yang
diseleksi oleh PSW.
Direct 8 bit alamat internal RAM (0-127)atau SFR(128-255)
@Rn lokasi internal RAM yang alamatnya ditunjukkan oleh R0
atau R1, pengalamatan tak langsung deng­an R0 dan R1),
Perhatian; tidak untuk R2, R3, R4, R5, R6 dan R7
#Data konstanta 8 bit.
#Data16 konstanta 16 bit.
Addr11 alamat 11 bit (untuk akses memori hingga 2K).
Addr16 alamat 16 bit (untuk akses memori hingga 64K).
Rel 8 bit offset relatif bertanda (2’s complement),
digunakan untuk SJMP, lompat dalam jangkauan -128
(mundur) hingga +127 (maju).
Bit lokasi bit yang dialamati secara langsung pada
internal RAM dan SFR.

(c)2020, Eko Didik Widianto, Universitas Diponegoro


Tabel Instruksi 8051

https://cuuduongthancong.com/pvf/857894/ky-thuat-so//8051-instruction-set-summary.pdf
(c)2020, Eko Didik Widianto, Universitas Diponegoro
Besar Instruksi dan Waktu Eksekusi

Byte → jumlah
byte yang
diperlukan (besar
instruksi)

Siklus mesin →
waktu untuk
menyelesaikan
satu perintah

Optimasi rancangan aplikasi dilakukan untuk membuat
besar kode sekecil mungkin dan waktu eksekusi secepat
mungkin

(c)2020, Eko Didik Widianto, Universitas Diponegoro


Instruksi Aritmatika
Mnemonic Diskripsi
ADD A,<source> A=A+<source>
ADDC A,<source> A=A+<source>+C
SUBB A,<source> A=A-<source>-C
INC A A=A+1
INC <source> <source>=<source>+1
DEC A A=A-1
DEC <source> <source>=<source>-1
INC DPTR DPTR=DPTR+1
MUL AB AB=A x B
DIV AB A=hasil A/B; B=sisa A/B
DA A Decimal Adjust dalam operasi BCD
(c)2020, Eko Didik Widianto, Universitas Diponegoro
Operasi Pengurangan
A EF 239
;SUBB A,<SOURCE> Atau
subb A,B - -17
;A=A-B-C B 7E 126

PSW 0
1 1 1 1 1 1 1 1

A 70 113??

OV=1. Hasil tidak valid untuk


signed char
P = 0 → Ganjil

(c)2020, Eko Didik Widianto, Universitas Diponegoro


Operasi A EF 239
Perkalian X

mul AB B 7E 126
; AB=A*B
=

B 75 A A2 30114

(c)2020, Eko Didik Widianto, Universitas Diponegoro


Operasi A EF 239
Pembagian :

div AB B 7E 126
; A=A/B, B=A mod B
=

A 01 B 71
Hasil bagi, 1 Sisa, 113

(c)2020, Eko Didik Widianto, Universitas Diponegoro


Instruksi Bitwise dan Khusus
Mnemonic ARTI
ANL <dest>,<source> <dest>=<dest> AND <source>
ORL <dest>,<source> <dest>=<dest> OR <source>
XRL <dest>,<source> <dest>=<dest> XOR <source>
CLR A '0' kan A
CPL A Komplemenkan A
RL A Geser/Putar byte A kekanan
RLC A Geser byte A kekanan via C
RR A Geser byte A kekiri
RRC A Geser byte A kekiri via C
SWAP A Tukar nibble dari a

(c)2020, Eko Didik Widianto, Universitas Diponegoro


Operasi Bitwise
A 0 1 0 1 0 1 0 1
1
ANL A,B ; A ← A & B
ORL A,B ; A ← A | B AND
XRL A,B ; A ← A ^ B
B 0 1 1 1 1 1 1 0
1

A 0 1 0 1 0 1 0 0
1

(c)2020, Eko Didik Widianto, Universitas Diponegoro


Operasi Pergesaran / Perputaran
RL

A.7 A.6 A.5 A.4 A.3 A.2 A.1 A.0


RR

A.7 A.6 A.5 A.4 A.3 A.2 A.1 A.0


RLC

C A.7 A.6 A.5 A.4 A.3 A.2 A.1 A.0

RRC

A.7 A.6 A.5 A.4 A.3 A.2 A.1 A.0 C

A 1 1 0 1 0 1 0 1 A 1 0 1 0 1 0 1 1
RL A

(c)2020, Eko Didik Widianto, Universitas Diponegoro


Operasi Swap
D 5
SWAP A ; A[3:0;7:4] ← A[7:0]
A 0 1 0 1 0 1 0 1
1

SWAP A

A 0 1 0 1 1 1 0 1

5 D

(c)2020, Eko Didik Widianto, Universitas Diponegoro


Instruksi Transfer Data

Mnemonic Arti
MOV <dest>,<source> <dest> = <source>, memori int
MOV DPTR,#data16 Dptr = data16
MOVC A,@A+<base-reg> A=isi dilokasi A+<base-reg>
MOVX <dest>,<source> <dest> = <source>, data mem
PUSH direct Simpan data ke memori stack
POP direct Ambil data dari memori stack
XCH A,<register> Tukar nilai A dengan nilai reg
XCHD A,@Rn Tukar bit 0-3 akumulator
dengan bit 0-3 alamat iRAM
yang ditunjuk R0 atau R1

(c)2020, Eko Didik Widianto, Universitas Diponegoro


Transfer Data di Memori Internal

Mode transfer: immediate, register, direct, dan indirect
addressing
1: mov
R0,#30h;R0 berisi 30h
2: mov
A,@R0 ;A berisi data alamat 30h=40h
3: mov
R1,A ;R1 berisi 40h
4: mov
B,@R1 ;B berisi data alamat 40h=10h
5: mov
@R1,P1 ;RAM lokasi 40h
;= 11001010b
6: mov P2,P1 ;P2=P1=11001010b

30h 40h ACC 40h 40h 10h P1 CAh


1 2 3 4 5

R0 30h ACC 40h R1 40h B 10h 40h CAh

(c)2020, Eko Didik Widianto, Universitas Diponegoro


Transfer Memori Data
;Indexed Addressing → memori program
movc A,@A+DPTR
;copy isi program memory lokasi <A+DPTR> ke A,
movc A,@A+PC
;copy isi program memory lokasi <A+PC> ke A

;Indirect Addressing → memori data


mov A,@R1
;copy isi data memory lokasi <R1> ke A
mov @R0,A
;copy A ke data memory lokasi <R0>
movx A,@DPTR
;copy isi data memory lokasi <DPTR> ke A
movx @DPTR,A
;copy A ke data memory lokasi <DPTR>

(c)2020, Eko Didik Widianto, Universitas Diponegoro


Operasi Stack
First In Last Out

Mekanisme: push pop

First-in Last-out (FILO) atau LIFO 031h 0BBh

Saat reset, SP → 07h 0AAh
030h
02Fh
mov SP,#2Fh ;isi SP dengan 2Fh,
;menunjukkan bahwa stack ;pointer pada posisi
;memori internal alamat 2F
mov a,#0Aah ;isi a dengan AAh
mov b,#0BBh ;isi b dengan BBh
push acc ;memori lokasi 30h berisi Aah, SP=30h
;perhatian: beberapa assembler tidak mengerti
;Push A, tetapi Push Acc
push b ;memori lokasi 31h berisi BBh, SP=31h
push b ;memori lokasi 32h berisi BBh, SP=32h
pop acc ;a=memori lokasi 32h=BBh, SP=31h
;perhatian: beberapa kompiler tidak mengerti
;Pop A, tetapi Pop Acc
pop b ;b=memori lokasi 31h=aah, SP=30h

(c)2020, Eko Didik Widianto, Universitas Diponegoro


XCH dan XCHD

XCH: Exchange Bytes. Sintaks: XCH A,register

XCHD: Exchange Digit. Sintaks: XCHD A,@R0/@R1

; Tukar isi register


xch A,@R0/@R1 ;Tukar isi A dan data di alamat R0
xch A,R[0-7] ;Tukar isi A dan isi R[0-7]
xch A,iram_addr ;Tukar isi A dan data di iram_addr

; Tukar low-order nibble ACC dengan low-order nibble di alamat


; internal RAM. High-order nibble tidak terpengaruh.
xchd A,@R0/@R1 ; A3-0 swap (Ri)3-0

(c)2020, Eko Didik Widianto, Universitas Diponegoro


Operasi Percabangan
Mnemonic ARTI
ACALL addr11 Jalankan subrutin di addr11
LCALL addr16 Jalankan subrutin di addr16
RET Kembali dari subrutin
RETI Kembali dari servis interupsi
AJMP addr11 Lompat ke alamat addr11 (absolut)
LJMP addr16 Lompat ke alamat addr16 (absolut)
SJMP rel Lompat maju atau mundur sejauh rel (relatif)
JMP @A+DPTR Lompat ke alamat a+DPTR
JZ rel Lompat ke rel bila A=0
JNZ rel Lompat ke rel bila A#0
CJNE <dest-byte>, Bila <dest>#<source> lompat sejauh rel
(src-byte>,rel
CJNE A,#data,rel Bila A#data lompat sejauh rel
DJNZ direct,rel Direct=direct-1, bila # 0 lompat sejauh rel
NOP NO Operation, tidak ada operasi
(c)2020, Eko Didik Widianto, Universitas Diponegoro
ACALL dan LCALL

Digunakan untuk memanggil subrutin. Setiap rubrutin harus
diakhiri dengan RET

ACALL memanggil dalam jangkauan 11 bit alamat atau 2K-byte
→ instruksi 2 Byte

Jika sistem hanya menggunakan ROM internal (8051: 4K) dan
besar kode kurang dari 2K, sebaiknya menggunakan perintah ini
ACALL page0

11 09

(c)2020, Eko Didik Widianto, Universitas Diponegoro


LCALL

Digunakan untuk memanggil subrutin. Setiap rubrutin harus
diakhiri dengan RET

LCALL dapat memanggil subrutin yang terletak di sebarang
lokasi di ruang alamat program 64K-byte → instruksi 3 Byte

Digunakan jika lokasi subrutin > 2K (2048 ke atas atau 800H
ke atas)
ACALL 16-bit address

12 08 00

(c)2020, Eko Didik Widianto, Universitas Diponegoro


Percabangan Tak Bersyarat

Digunakan untuk memanggil instruksi di alamat tertentu,
yang ditandai dengan label

Alamat: relatif (sjmp) atau absolut (ajmp, ljmp)

sjmp: 2 Byte, ajmp: 11 bit alamat (2 Byte), ljmp: 16 bit alamat
(3 Byte)
sjmp dekat ;short jump relatif dengan
;jarak +127 dan -128
ajmp sedang ;absolute jump 11 bit alamat
ljmp jauh ;absolute long 16 bit alamat

(c)2020, Eko Didik Widianto, Universitas Diponegoro


Percabangan Tak Bersyarat

7A = 7E-4

ajmp page4

83 = 4-81

(c)2020, Eko Didik Widianto, Universitas Diponegoro


Percabangan Bersyarat
START:
cjne A,#040h,LABEL1
;bandingkan a dengan 40h, jika tak ;sama lompat ke LABEL1
cjne A,P1,LABEL1
;bandingkan a dengan P1, jika tak ;sama lompat ke LABEL1
cjne R1,#040h,LABEL1
;bandingkan R1 dengan 40h, jika tak ;sama lompat ke LABEL1
cjne @R1,#0CCh,LABEL1
;bandingkan indirect R1 dengan CCh,tak sama? lompat ke LABEL1
jz zero
;a bernilai 0? lompat ke ZERO (relatif address: +- 127)
jnz zero
;a bernilai <> 0? lompat ke ZERO (relatif address: +- 127)
LABEL1:
-----
ZERO:
-----
NOTZERO:
djnz A, NOTZERO ;A=A-1, A<>0?loop, jika =0, lompat ke zero
sjmp ZERO

(c)2020, Eko Didik Widianto, Universitas Diponegoro


Percabangan Bersyarat
T
A==2? start:
Y cjne a,#02,taksama
B=5 mov b,#10
B=10 sjmp Terus
taksama:
mov b,#5
Terus: ------
------

Perulangan
A=A+1
Ulang:
inc A
R0=R0-1 djnz R0,Ulang
mov @R1,A
T
R0<>0? ------
Y ------
mov @R1,A

(c)2020, Eko Didik Widianto, Universitas Diponegoro


Perulangan
Sebaiknya menggunakan djnz R[0-7] (2 Byte) daripada djnz
<direct> (3 Byte)

Menambahkan 4 ke akumulator 10 kali
mov A,#0 ; clear ACC
mov R2,#10 ; R2 sebagai counter
ulang: add A,#04 ; tambah 4 ke akumulator
djnz R2,ulang ;ulang sampai R2=0 (10 kali)
mov R3,A ; simpan A ke R3

Menggeser ke kiri isi akumulator 300 kali → butuh nested
loop mov A,#0 ; clear ACC
mov R3,#10 ; R3 sebagai counter 2
; karena perulangan lebih dari 255
ulang2: mov R2,#30 ; R2 sebagai counter
ulang: rlc A ; geser isi ACC ke kiri termasuk C
djnz R2,ulang ;ulang sampai R2=0 (30 kali)
djnz R3,ulang2 ;ulang sampai R3=0 (10 kali)

(c)2020, Eko Didik Widianto, Universitas Diponegoro


Perulangan (2) R0=5
R1=40h

Mengisi memori dengan 0Aah mulai dari
alamat 040h sampai 044h

Start: @R1=AAh
mov R0,#5 ;isi R0 dengan 5
mov R1,#40h ;isi R1 dengan 40h
Loop: R1=R1+1
mov @R1,#0Aah
inc R1 ;R1=R1+1
djnz R0,LOOP R0=R0-1
sjmp $ ;usai

R0=0?

(c)2020, Eko Didik Widianto, Universitas Diponegoro


Perulangan (3)
start:
jb ssg,ssgsatu ; jika ssg=‘1’ ke satu
jnb ssg,$ ;tunggu disini hingga ssg ‘1’
setb btmp
sjmp int_on
satu:
jb ssg,satu ;wait for low
clr btmp
int_on:
setb led
setb ET0 ;Aktifkan interupsi Timer 0
setb EA ;Aktifkan Sistem interupsi
setb TR0 ;Jalankan Timer 0
------
------

(c)2020, Eko Didik Widianto, Universitas Diponegoro


Mnemonic ARTI
CLR C '0' kan carry Operasi Boolean
CLR bit '0' kan bit
SETB C '1' kan C
SETB bit '1' kan bit
CPL C Komplemenkan carry
CPL bit Komplemenkan bit
ANL C,bit C=C AND bit
ANL C,/bit C=C AND NOT bit
ORL C,bit C=C OR bit
ORL C,/bit C=C OR NOT bit
MOV C,bit C=bit
MOV bit,C Bit=C
JC rel Lompat sejauh rel bila C='1'
JNC rel Lompat sejauh rel bila C='0'
JB bit,rel Lompat sejauh rel bila bit='1'
JNB bit,rel Lompat sejauh rel bila bit='0'
JBC bit,rel Bila bit='1' maka lompat sejauh rel kemudian
ganti bit menjadi'0'

(c)2020, Eko Didik Widianto, Universitas Diponegoro


Operasi Boolean (2)
clr C ;carry='0'
setb P1.3 ;P1.3 menjadi '1'
clr P1.4 ;P1.4 menjadi '0'
mov a,#10101010b ;isi a menjadi AAh
clr Acc.3 ;a menjadi 10100010b
setb Acc,6 ;a menjadi 11100010b
cpl 0E0h ;lokasi bit 0E0h dikomplemenkan,
;karena lokasi 0E0h = Acc.0
;maka a menjadi 11100011b
set P1.1 ;P1.1 ='1'
set C ;C='1'
anl C,/P1.1 ;C='1' AND '0', jadi C='0'

set C
mov P3,#11000101b
mov P1,#00110101b
mov P1.3,C ;P1.3 set (=carry)
mov C,P3.3 ;Carry clear ('0')
mov P1.2,C ;P1.2 clear
;setelah seluruh instruksi dijalankan,
;Carry clear ('0') dan Port1 menjadi 00111001b

(c)2020, Eko Didik Widianto, Universitas Diponegoro


Operasi Boolean (3)
Loop:
jB P1.3,kebakaran
START
sjmp aman
Kebakaran:
setb P1.1
setb P1.2
---
---
ajmp loop
P1.1='0'
aman: P1.3='1'?
P1.2='0'
clr p1.1
clr p1.2
--- P1.1='1'
--- P1.2='1'
ajmp loop

(c)2020, Eko Didik Widianto, Universitas Diponegoro


Operasi Interupsi

Jika diaktifkan, terjadinya interupsi akan memaksa PC
mengarah ke vektor interupsi (alamat interupsi) dan
menjalankan subrutin interupsi (ISR, interrrupt service routine)

ISR diakhiri dengan RETI dan sebaiknya waktu eksekusinya
secepat mungkin (mis: hanya mengeset flag saja, dan
eksekusi dilakukan di main loop)
Interrupt Vector Prioritas Flag Flag clearing
RESET 0000h 1 - otomatis
Eksternal 0 0003h 2 IE0 otomatis
Timer 0 000Bh 3 TF0 otomatis
Eksternal 1 0013h 4 IE1 otomatis
Timer 1 001Bh 5 TF1 otomatis
Serial Port 0023h 6 TI/RI Oleh programmer

(c)2020, Eko Didik Widianto, Universitas Diponegoro


org 00h ; reset
sjmp awal ; awali kode dari alamat 30h
org 03h ; INT0 address
inc R7 ; ISR jika terjadi INT0
reti ; return interrupt Interupsi (2)
org 0Bh ; TF0 address
acall timer0ISR ; panggil subrutin ISR
reti ; return interrupt
org 13h ; INT1 address
reti ; return interrupt
org 1Bh ; TF1 address
reti ; return interrupt
org 23h ; RI and TI address in serial COM
reti ; return interrupt
; --- awal kode
org 30h
awal: mov A,#0 ; clear ACC
mov IE,#00111111B ; Aktifkan semua interrupt
setb IE.7 ; aktifkan global → bisa IE=10111111b
--- ; inisialisasi kode
ulang: add A,#04 ; tambah 4 ke akumulator
--- ;kode utama
sjmp loop ; loop
timer0ISR: --- ; ISR TF0. Pastikan eksekusi cepat
ret ; return

(c)2020, Eko Didik Widianto, Universitas Diponegoro


Pemrograman I/O

@2022,Eko Didik
Widianto

Antarmuka
Mikroprosesor

Akses CPU - Memori

Antarmuka I/O Dasar

Peripheral I/O
Pemrograman I/O Sederhana

Lisensi
Kuliah#12 TKC211 - Teknik Mikroprosesor dan Antarmuka

Eko Didik Widianto, Dania Eridani

Teknik Komputer - Universitas Diponegoro

http://didik.blog.undip.ac.id/ @2022,Eko Didik Widianto 1


Pemrograman I/O
Tentang Kuliah @2022,Eko Didik
Widianto

Antarmuka
Mikroprosesor

I Sebelumnya: dasar-dasar mikroprosesor dan memori di Akses CPU - Memori

8051 Antarmuka I/O Dasar

Peripheral I/O
I Konfigurasi MPU: Pin kendali dan catu daya Sederhana
I Arsitektur Atmel AT89C dan AT89S Lisensi
I Struktur port 0, 1, 2, dan 3
I Teknologi memori
I Organisasi memori MCS51: memori program dan memori data,
register dan SFR (special function register)
I Register MCS51
I Arsitektur dan konfigurasi port I/O MCS51 dan AVR
I Referensi
I Atmel: Datasheet AT89C51/52 atau AT89S51/52
I doc4316: Atmel 8051 Microcontrollers Hardware Manual
I Link
I Email: didik@live.undip.ac.id

http://didik.blog.undip.ac.id/ @2022,Eko Didik Widianto 2


Pemrograman I/O
Bahasan @2022,Eko Didik
Widianto

Antarmuka
Mikroprosesor

Antarmuka Mikroprosesor Akses CPU - Memori

Antarmuka Mikrokontroler AT89C51/S51 Antarmuka I/O Dasar

Pin Antarmuka Peripheral I/O


Sederhana

Lisensi

Akses CPU - Memori


Parameter Pewaktuan dan Siklus
Antarmuka AVR ATmega32A

Antarmuka I/O Dasar

Peripheral I/O Sederhana

Lisensi

http://didik.blog.undip.ac.id/ @2022,Eko Didik Widianto 3


Pemrograman I/O
Bahasan @2022,Eko Didik
Widianto

Antarmuka
Mikroprosesor
Antarmuka Mikrokontroler
Antarmuka Mikroprosesor AT89C51/S51
Pin Antarmuka
Antarmuka Mikrokontroler AT89C51/S51
Akses CPU - Memori
Pin Antarmuka Antarmuka I/O Dasar

Peripheral I/O
Sederhana
Akses CPU - Memori Lisensi
Parameter Pewaktuan dan Siklus
Antarmuka AVR ATmega32A

Antarmuka I/O Dasar

Peripheral I/O Sederhana

Lisensi

http://didik.blog.undip.ac.id/ @2022,Eko Didik Widianto 4


Pemrograman I/O
Mikrokontroler AT89S51 @2022,Eko Didik
Widianto

Antarmuka
Mikroprosesor
Antarmuka Mikrokontroler
AT89C51/S51
Pin Antarmuka
I Mikrokontroler 8-bit dari Atmel (kompatible dengan Akses CPU - Memori
keluarga MCS-51) Antarmuka I/O Dasar
I Tegangan supply 4 - 5.5V Peripheral I/O
Sederhana
I Operasi 0 - 33 MHz
Lisensi
I Memori flash In-System Programmable (ISP) 4KB
I RAM internal 128 x 8-bit
I Programmable I/O 32 jalur
I 2 Buah Timer/Counter 16-bit
I 6 Buah Sumber Interrupt
I UART full duplex

http://didik.blog.undip.ac.id/ @2022,Eko Didik Widianto 5


Pemrograman I/O
Arsitektur AT89C @2022,Eko Didik
Widianto

Antarmuka
Mikroprosesor
Antarmuka Mikrokontroler
AT89C51/S51
Pin Antarmuka

Akses CPU - Memori

Antarmuka I/O Dasar

Peripheral I/O
Sederhana

Lisensi

http://didik.blog.undip.ac.id/ @2022,Eko Didik Widianto 6


Pemrograman I/O
Arsitektur AT89S @2022,Eko Didik
Widianto

Antarmuka
Mikroprosesor
Antarmuka Mikrokontroler
AT89C51/S51
Pin Antarmuka

Akses CPU - Memori

Antarmuka I/O Dasar

Peripheral I/O
Sederhana

Lisensi

http://didik.blog.undip.ac.id/ @2022,Eko Didik Widianto 7


Pemrograman I/O
Pin Antarmuka @2022,Eko Didik
Widianto

Antarmuka
Mikroprosesor
Antarmuka Mikrokontroler
AT89C51/S51
Pin Antarmuka

Akses CPU - Memori


I Pin antarmuka yang tersedia
Antarmuka I/O Dasar
di AT89S51: Peripheral I/O
1. Power: VCC (4-5.5V), GND Sederhana

Lisensi
2. Data I/O: Port 0, 1, 2 dan 3
3. Pasif: clock (XTAL1, XTAL2)
4. Kontrol: RST (I),
ALE/nPROG(I/O), nPSEN
(O) dan nEA/VPP (I)

http://didik.blog.undip.ac.id/ @2022,Eko Didik Widianto 8


Pemrograman I/O
Sinyal Kontrol @2022,Eko Didik
Widianto
ALE/PROG(I/O), PSEN (O) dan EA/VPP (I)
Antarmuka
Mikroprosesor
Antarmuka Mikrokontroler
AT89C51/S51

I ALE/PROG (Address Latch Enable), I/O Pin Antarmuka

Akses CPU - Memori


I Output: latch low-byte alamat saat akses ke memori Antarmuka I/O Dasar
eksternal Peripheral I/O
I Aktif hanya untuk perintah MOVX atau MOVC Sederhana

Lisensi
I Input: untuk memprogram flash
I PSEN (Program Store Enable), Output
I Read strobe untuk memori program eksternal
I EA/VPP (External Access Enable), Input
I EA dihubungkan ke GND, agar mikrokontroler dapat
mengambil kode (fetch) dari lokasi memori eksternal (0 -
0xFFFF)
I EA dihubungkan ke Vcc untuk eksekusi dari memori
program internal

http://didik.blog.undip.ac.id/ @2022,Eko Didik Widianto 9


Pemrograman I/O
Deskripsi Port I/O @2022,Eko Didik
Widianto
Port 0: I/O, Alamat low-byte, dan Program Flash
Antarmuka
Mikroprosesor
Antarmuka Mikrokontroler
AT89C51/S51
Pin Antarmuka

Akses CPU - Memori

Antarmuka I/O Dasar

Peripheral I/O
Sederhana

Lisensi

I Port I/O (P0.7-P0.0)


I Output: dapat mensuplai 8 masukan TTL
I Input: masukan high-impedance
I Alamat low-byte memori (A7-A0) / Data (D7-D0) termultipleks
I Untuk akses memori eksternal: program (fetch) dan data (R/W)
yang menggunakan 16-bit alamat (MOVX @DPTR)
I Data untuk flash program (D7-D0,paralel)
I Input: menerima byte kode saat memprogram flash
I Output: menuliskan byte kode saat verifikasi.
http://didik.blog.undip.ac.id/ @2022,Eko Didik Widianto 10
Pemrograman I/O
Deskripsi Port I/O @2022,Eko Didik
Widianto
Port 1: I/O, paralel flash program, Serial ISP
Antarmuka
Mikroprosesor
Antarmuka Mikrokontroler
AT89C51/S51
Pin Antarmuka

Akses CPU - Memori

Antarmuka I/O Dasar

Peripheral I/O
Sederhana

Lisensi

I Port I/O (P1.7-P1.0), bidi, internal pull-up


I Output: dapat mensuplai 4 masukan TTL
I Input: masukan, pulled high
I Alamat low-byte memori program (A7-A0)
I Untuk memprogram dan verifikasi flash
I Serial flash programming/ISP
I P1.5: MOSI (input, ISP)
I P1.6: MISO (output, ISP)
I P1.7: SCK (input, ISP)
http://didik.blog.undip.ac.id/ @2022,Eko Didik Widianto 11
Pemrograman I/O
Deskripsi Port I/O @2022,Eko Didik
Widianto
Port 2: I/O, Eksternal Memori, Paralel Flash
Antarmuka
Mikroprosesor
Antarmuka Mikrokontroler
AT89C51/S51
Pin Antarmuka

Akses CPU - Memori

Antarmuka I/O Dasar

Peripheral I/O
Sederhana

Lisensi

I Port I/O (P2.7-P2.0), bidi, internal pull-up


I Output: dapat mensuplai 4 masukan TTL
I Input: masukan, pulled high
I Alamat high-byte memori data dan program (A15-A8)
I Untuk akses memori program eksternal program (fetch)
I Akses memori data eksternal mode 16-bit, MOVX @DPTR
I Jalur data untuk menuliskan isi SFR (Special Function Register) P2,
MOVX @RI
http://didik.blog.undip.ac.id/ @2022,Eko Didik Widianto 12
Pemrograman I/O
Deskripsi Port I/O @2022,Eko Didik
Widianto
Port 3: I/O, Paralel Flash, Fungsi Khusus
Antarmuka
Mikroprosesor
Antarmuka Mikrokontroler
AT89C51/S51
Pin Antarmuka

Akses CPU - Memori

Antarmuka I/O Dasar

Peripheral I/O
Sederhana

Lisensi

I Port I/O (P2.7-P2.0), bidi, internal pull-up


I Output: dapat mensuplai 4 masukan TTL
I Input: masukan, pulled high
I Jalur kontrol untuk pemrograman dan verifikasi flash
I Kontrol WR dan RD (aktif-rendah)
I Fungsi-fungsi Spesial

http://didik.blog.undip.ac.id/ @2022,Eko Didik Widianto 13


Pemrograman I/O
Pin Antarmuka @2022,Eko Didik
Widianto

Antarmuka
Mikroprosesor
Antarmuka Mikrokontroler
AT89C51/S51
Pin Antarmuka

Akses CPU - Memori


I Pin antarmuka yang tersedia
Antarmuka I/O Dasar
di AT89S51: Peripheral I/O
1. Power: VCC (4-5.5V), GND Sederhana

Lisensi
2. Data I/O: Port 0, 1, 2 dan 3
3. Pasif: clock (XTAL1, XTAL2)
4. Kontrol: RST (I),
ALE/nPROG(I/O), nPSEN
(O) dan nEA/VPP (I)

http://didik.blog.undip.ac.id/ @2022,Eko Didik Widianto 14


Pemrograman I/O
Sinyal Kontrol @2022,Eko Didik
Widianto
ALE/PROG(I/O), PSEN (O) dan EA/VPP (I)
Antarmuka
Mikroprosesor
Antarmuka Mikrokontroler
AT89C51/S51

I ALE/PROG (Address Latch Enable), I/O Pin Antarmuka

Akses CPU - Memori


I Output: latch low-byte alamat saat akses ke memori Antarmuka I/O Dasar
eksternal Peripheral I/O
I Aktif hanya untuk perintah MOVX atau MOVC Sederhana

Lisensi
I Input: untuk memprogram flash
I PSEN (Program Store Enable), Output
I Read strobe untuk memori program eksternal
I EA/VPP (External Access Enable), Input
I EA dihubungkan ke GND, agar mikrokontroler dapat
mengambil kode (fetch) dari lokasi memori eksternal (0 -
0xFFFF)
I EA dihubungkan ke Vcc untuk eksekusi dari memori
program internal

http://didik.blog.undip.ac.id/ @2022,Eko Didik Widianto 15


Pemrograman I/O
Bus Mikrokomputer @2022,Eko Didik
Widianto

Antarmuka
Mikroprosesor
Antarmuka Mikrokontroler
AT89C51/S51
Pin Antarmuka

Akses CPU - Memori

Antarmuka I/O Dasar

Peripheral I/O
Sederhana

Lisensi

I Tipe data transfer yang dikontrol CPU:


I CPU reads data/instruction from memory (memory read)
I CPU writes data to memory (memory write)
I CPU reads data from I/O (I/O read)
I CPU writes data to I/O (I/O write)

http://didik.blog.undip.ac.id/ @2022,Eko Didik Widianto 16


Pemrograman I/O
Siklus Memori @2022,Eko Didik
Widianto
Operasi Memori
Antarmuka
Mikroprosesor
Antarmuka Mikrokontroler
AT89C51/S51
Pin Antarmuka

Akses CPU - Memori

Antarmuka I/O Dasar

Peripheral I/O
Sederhana

Lisensi

I Memori Read
I Prosesor meletakkan alamat ke bus alamat dan
mengaktifkan sinyal read (active-low)
I Memori meletakkan data sesuai alamat ke bus data
I Memori Write
I Prosesor meletakkan alamat ke bus alamat dan meletakkan
data ke bus data dan mengaktifkan sinyal write (active-low)
I Memori menyimpan data ke alamat yang ditunjuk

http://didik.blog.undip.ac.id/ @2022,Eko Didik Widianto 17


Pemrograman I/O
Bahasan @2022,Eko Didik
Widianto

Antarmuka
Mikroprosesor
Antarmuka Mikrokontroler
Antarmuka Mikroprosesor AT89C51/S51
Pin Antarmuka
Antarmuka Mikrokontroler AT89C51/S51
Akses CPU - Memori
Pin Antarmuka Antarmuka I/O Dasar

Peripheral I/O
Sederhana
Akses CPU - Memori Lisensi
Parameter Pewaktuan dan Siklus
Antarmuka AVR ATmega32A

Antarmuka I/O Dasar

Peripheral I/O Sederhana

Lisensi

http://didik.blog.undip.ac.id/ @2022,Eko Didik Widianto 18


Pemrograman I/O
Pin yang Dibutuhkan @2022,Eko Didik
Widianto

Antarmuka
Mikroprosesor
Antarmuka Mikrokontroler
AT89C51/S51
I Memori data (16-bit address) Pin Antarmuka

I Alamat: A15-A8(P2), A7-A0 (P0) Akses CPU - Memori

I Data: D7-D0 (P0) multipleks dengan A7-A0 Antarmuka I/O Dasar

I Kontrol: Peripheral I/O


Sederhana
I nCE = Memori mapped, misalnya A15 Lisensi
I nOE = nRD and nPSEN
I nWE = nWE
I Memori program
I Alamat: A15-A8 (P2), A7-A0 (P0)
I Data: D7-D0 (P0) multipleks dengan A7-A0
I Kontrol:
I nCE = Memori mapped, misalnya nA15
I nOE = nPSEN

http://didik.blog.undip.ac.id/ @2022,Eko Didik Widianto 19


Pemrograman I/O
Bahasan @2022,Eko Didik
Widianto

Antarmuka
Mikroprosesor

Antarmuka Mikroprosesor Akses CPU - Memori


Parameter Pewaktuan dan
Antarmuka Mikrokontroler AT89C51/S51 Siklus
Antarmuka AVR
Pin Antarmuka ATmega32A

Antarmuka I/O Dasar

Peripheral I/O
Akses CPU - Memori Sederhana

Lisensi
Parameter Pewaktuan dan Siklus
Antarmuka AVR ATmega32A

Antarmuka I/O Dasar

Peripheral I/O Sederhana

Lisensi

http://didik.blog.undip.ac.id/ @2022,Eko Didik Widianto 20


Pemrograman I/O
Parameter Pewaktuan @2022,Eko Didik
Widianto
Siklus Memory Read (Memori ke CPU)
Antarmuka
Mikroprosesor

Akses CPU - Memori


Parameter Pewaktuan dan
Siklus
Antarmuka AVR
ATmega32A

Antarmuka I/O Dasar

Peripheral I/O
Sederhana

Lisensi

I TAA (address access time): Valid Address to valid data delay


I TOE (output enable access time): Output Enable (OE) to valid
data delay
I TCE (chip enable access time): Chip Enable (CE) to valid data
delay

http://didik.blog.undip.ac.id/ @2022,Eko Didik Widianto 21


Pemrograman I/O
Parameter Pewaktuan @2022,Eko Didik
Widianto
Siklus Memory Write (CPU ke Memori)
Antarmuka
Mikroprosesor

Akses CPU - Memori


Parameter Pewaktuan dan
Siklus
Antarmuka AVR
ATmega32A

Antarmuka I/O Dasar

Peripheral I/O
Sederhana

Lisensi

I TWP : Write pulse width


I TAS : Address setup time
I TAH : Address hold time
I TDS : Data setup time
I TDH : Data hold time

http://didik.blog.undip.ac.id/ @2022,Eko Didik Widianto 22


Pemrograman I/O
Operasi R/W: Siklus Pembacaan Memori @2022,Eko Didik
Widianto

Antarmuka
Mikroprosesor

Akses CPU - Memori


Parameter Pewaktuan dan
Siklus

I CPU membaca instruksi (opcode) dan data (operand) dari Antarmuka AVR
ATmega32A

memori Antarmuka I/O Dasar

Peripheral I/O
Sederhana

Lisensi

http://didik.blog.undip.ac.id/ @2022,Eko Didik Widianto 23


Pemrograman I/O
Operasi Siklus Pembacaan Memori @2022,Eko Didik
Widianto

Antarmuka
Mikroprosesor

Akses CPU - Memori


I The CPU selects the memory location by driving the address on Parameter Pewaktuan dan
Siklus
the address bus Antarmuka AVR
ATmega32A
I Control lines are driven by the CPU to indicate the address Antarmuka I/O Dasar
space to use Peripheral I/O
Sederhana
I such as program memory, data memory, I/O, or special
Lisensi
cycles such as interrupts
I Read is activated on the control bus by the CPU to indicate that
the memory can drive the data bus with the contents of the
selected location
I The memory drives the contents of the selected location on the
data bus
I The CPU deactivates the address and control lines, turning off
the memory drivers

http://didik.blog.undip.ac.id/ @2022,Eko Didik Widianto 24


Pemrograman I/O
Operasi R/W: Siklus Penulisan Memori @2022,Eko Didik
Widianto

Antarmuka
Mikroprosesor

Akses CPU - Memori


Parameter Pewaktuan dan
Siklus

I CPU menulis instruksi (opcode) dan data (operand) ke Antarmuka AVR


ATmega32A

memori Antarmuka I/O Dasar

Peripheral I/O
Sederhana

Lisensi

http://didik.blog.undip.ac.id/ @2022,Eko Didik Widianto 25


Pemrograman I/O
Operasi Siklus Pembacaan Memori @2022,Eko Didik
Widianto

Antarmuka
Mikroprosesor

Akses CPU - Memori


Parameter Pewaktuan dan
Siklus
Antarmuka AVR
I The CPU selects the memory location by driving the address on ATmega32A

the ad- dress bus Antarmuka I/O Dasar

Peripheral I/O
I Control lines are driven by the CPU to indicate the address Sederhana

space to use Lisensi

I The CPU drives the data to be written on the data bus


I Write is activated on the control bus by the CPU to indicate that
the data on the data bus should be written into the selected
location
I The CPU deactivates the address, data, and control lines

http://didik.blog.undip.ac.id/ @2022,Eko Didik Widianto 26


Pemrograman I/O
Kapasitas dan Bandwidth @2022,Eko Didik
Widianto

Antarmuka
Mikroprosesor

Akses CPU - Memori


I Bus alamat Parameter Pewaktuan dan
Siklus
I Lokasi memori untuk transfer data Antarmuka AVR
ATmega32A
I Lokasi I/O
Antarmuka I/O Dasar

I Lebar bus alamat: 8-bit, 16-bit, 32-bit Peripheral I/O


Sederhana
I Prosesor dengan N-bit alamat, bisa mengalamatkan 2N Lisensi
lokasi memori
I Misalnya: 16-bit alamat bisa mengalamatkan 216 lokasi atau
65.536 ( 64KB)
I Lebar bus data menentukan jumlah data yang dapat ditransfer di
bus (data throuhtput)
I Bus data 8-bit dan periode T=1µs (atau f=1MHz), maka
untuk satu byte percycle, diperoleh througput 1 MBps atau
8 Mbps

http://didik.blog.undip.ac.id/ @2022,Eko Didik Widianto 27


Pemrograman I/O
Siklus Bus Termultipleks @2022,Eko Didik
Widianto
Di Arsitektur Von Neuman (Princeton)
Antarmuka
Mikroprosesor

Akses CPU - Memori


Parameter Pewaktuan dan
Siklus
Antarmuka AVR
ATmega32A

Antarmuka I/O Dasar

Peripheral I/O
Sederhana

Lisensi

http://didik.blog.undip.ac.id/ @2022,Eko Didik Widianto 28


Pemrograman I/O
Address Demux dengan Sebuah Latch @2022,Eko Didik
Widianto

Antarmuka
Mikroprosesor

Akses CPU - Memori


Parameter Pewaktuan dan
Siklus
Antarmuka AVR

I Latch: 74xx373 (active high latch) ATmega32A

Antarmuka I/O Dasar

Peripheral I/O
Sederhana

Lisensi

http://didik.blog.undip.ac.id/ @2022,Eko Didik Widianto 29


Contoh Aplikasi 8051
Pemrograman I/O
Memory-mapped I/O @2022,Eko Didik
Widianto

Antarmuka
Mikroprosesor

Akses CPU - Memori


Parameter Pewaktuan dan
Siklus
Antarmuka AVR
ATmega32A

Antarmuka I/O Dasar

Peripheral I/O
Sederhana

Lisensi

http://didik.blog.undip.ac.id/ @2022,Eko Didik Widianto 31


Pemrograman I/O
Konfigurasi Umum Sistem Mikroprosesor @2022,Eko Didik
Widianto

I MPU Antarmuka
Mikroprosesor
I Dekoder: Akses CPU - Memori
I ROM: program Parameter Pewaktuan dan
Siklus

I RAM: data Antarmuka AVR


ATmega32A
I I/O Antarmuka I/O Dasar

Peripheral I/O
Sederhana

Lisensi

http://didik.blog.undip.ac.id/ @2022,Eko Didik Widianto 32


Pemrograman I/O
Bahasan @2022,Eko Didik
Widianto

Antarmuka
Mikroprosesor

Antarmuka Mikroprosesor Akses CPU - Memori


Parameter Pewaktuan dan
Antarmuka Mikrokontroler AT89C51/S51 Siklus
Antarmuka AVR
Pin Antarmuka ATmega32A

Antarmuka I/O Dasar

Peripheral I/O
Akses CPU - Memori Sederhana

Lisensi
Parameter Pewaktuan dan Siklus
Antarmuka AVR ATmega32A

Antarmuka I/O Dasar

Peripheral I/O Sederhana

Lisensi

http://didik.blog.undip.ac.id/ @2022,Eko Didik Widianto 33


Mikrokontroler AVR ATMega32A

I Mikrokontroler 8-bit dari Atmel keluarga


MegaAVR
I Tegangan supply 2.7 - 5.5V
I Operasi 0 - 33 MHz
I Memori flash In-System Programmable (ISP) 32
KB
I SRAM internal 2K x 8-bit
I Data EEPROM 1K x 8-bit
I Programmable I/O 32 jalur
I 21 Buah Sumber Interrupt
I USART full duplex
Diagram Block
Pemrograman I/O
Pin Antarmuka @2022,Eko Didik
Widianto

Antarmuka
Mikroprosesor

Akses CPU - Memori


Parameter Pewaktuan dan
Siklus
Antarmuka AVR
ATmega32A

I Pin antarmuka yang tersedia Antarmuka I/O Dasar

Peripheral I/O
di ATMega32A: Sederhana

1. Power: VCC (4-5.5V), GND Lisensi

2. Data I/O: Port 0, 1, 2 dan 3


3. Pasif: clock (XTAL1, XTAL2)
4. Fungsi alternatif: ADC, SPI,
USART, TWI, Timer

http://didik.blog.undip.ac.id/ @2022,Eko Didik Widianto 36


Pemrograman I/O
Arsitektur AVR @2022,Eko Didik
Widianto

Antarmuka
Mikroprosesor

Akses CPU - Memori


Parameter Pewaktuan dan
Siklus
Antarmuka AVR
ATmega32A

Antarmuka I/O Dasar

Peripheral I/O
Sederhana

Lisensi

http://didik.blog.undip.ac.id/ @2022,Eko Didik Widianto 37


Pemrograman I/O
Port A @2022,Eko Didik
Widianto
I/O 8-bit, ADC
Antarmuka
Mikroprosesor

Akses CPU - Memori


Parameter Pewaktuan dan
Siklus
Antarmuka AVR
ATmega32A

Antarmuka I/O Dasar

Peripheral I/O
Sederhana

Lisensi

I Port I/O (PA7-PA0), bidirektional


I Output: dapat mensuplai 8 masukan TTL
I Input: masukan high-impedance
I Masukan analag ADC (analog-to-digital converter)

http://didik.blog.undip.ac.id/ @2022,Eko Didik Widianto 38


Pemrograman I/O
Port B @2022,Eko Didik
Widianto
I/O 8-bit, SPI, Komparator, Timer, Interupsi, Clock USART
Antarmuka
Mikroprosesor

Akses CPU - Memori


Parameter Pewaktuan dan
Siklus
Antarmuka AVR
ATmega32A

Antarmuka I/O Dasar

Peripheral I/O
Sederhana

Lisensi

I Port I/O (PB7-PB0), bidireksional


I Output: dapat mensuplai 4 masukan TTL
I Input: masukan, pulled high
I Fungsi alternatif

http://didik.blog.undip.ac.id/ @2022,Eko Didik Widianto 39


Pemrograman I/O
Port C @2022,Eko Didik
Widianto
I/O 8-bit, JTAG, Timer, TWI
Antarmuka
Mikroprosesor

Akses CPU - Memori


Parameter Pewaktuan dan
Siklus
Antarmuka AVR
ATmega32A

Antarmuka I/O Dasar

Peripheral I/O
Sederhana

Lisensi

I Port I/O (PC7-PC0), bidi, internal pull-up


I Output: dapat mensuplai 4 masukan TTL
I Input: masukan, pulled high
I Alternatif fungsi Port C

http://didik.blog.undip.ac.id/ @2022,Eko Didik Widianto 40


Pemrograman I/O
Port D @2022,Eko Didik
Widianto
I/O 8-bit, Timer/Counter, Interupsi, USART
Antarmuka
Mikroprosesor

Akses CPU - Memori


Parameter Pewaktuan dan
Siklus
Antarmuka AVR
ATmega32A

Antarmuka I/O Dasar

Peripheral I/O
Sederhana

Lisensi

I Port I/O (PD7-PD0), bidi, internal pull-up


I Output: dapat mensuplai 4 masukan TTL
I Input: masukan, pulled high
I Alternatif fungsi Port D

http://didik.blog.undip.ac.id/ @2022,Eko Didik Widianto 41


Pemrograman I/O
Contoh Aplikasi AVR @2022,Eko Didik
Widianto

Antarmuka
Mikroprosesor

Akses CPU - Memori


Parameter Pewaktuan dan
Siklus
Antarmuka AVR
ATmega32A

Antarmuka I/O Dasar

Peripheral I/O
Sederhana

Lisensi

http://didik.blog.undip.ac.id/ @2022,Eko Didik Widianto 42


Pemrograman I/O
Direct I/O @2022,Eko Didik
Widianto

Antarmuka
Mikroprosesor

Akses CPU - Memori

Antarmuka I/O Dasar


I Pin I/O prosesor dihubungkan langsung dengan
Peripheral I/O
peripheral, misalnya saklar, tombol, LED, sensor Sederhana

Lisensi
I Kadang perlu untuk mengkonversikan level tegangan dan
arus prosesor agar sesuai dengan peripheral
I Perlu menerjemahkan spesifikasi dan batasan kemampuan
rangkaian
I Misalnya spesifikasi DC dibandingkan dengan kebutuhan
untuk mendrive rangkaian LED sederhana
I Misalnya bounce (koneksi open dan close beberapa kali
dalam milidetik) yang terjadi untuk masukan tombol mekanik
perlu debouncer. Debouncer bisa diimplementasikan secara
software maupun hardware

http://didik.blog.undip.ac.id/ @2022,Eko Didik Widianto 43


Pemrograman I/O
Port I/O 8051 @2022,Eko Didik
Widianto

Antarmuka
I Port I/O 8051 dipetakan ke alamat SFR (Special Function Mikroprosesor

Register) Akses CPU - Memori

I Lokasi memori data internal di 80h - FFh Antarmuka I/O Dasar

I Menggunakan P1 sampai P4 Peripheral I/O


Sederhana
I Dapat memberikan arus 10-100 uA Lisensi
I Bersifat bit-addressable
I Misalnya Port 1 (P1) dipetakan ke alamat 90h. P1 juga
ada di lokasi bit addressable di lokasi 90h - 97h (P1.0
di alamat 90h, P1.7 ada di alamat 97h)

http://didik.blog.undip.ac.id/ @2022,Eko Didik Widianto 44


Pemrograman I/O
Reset dan Set Port I/O @2022,Eko Didik
Widianto

Antarmuka
Mikroprosesor

Akses CPU - Memori


I Perintah mereset port-port I/O mikrokontroler ke nilai 0 Antarmuka I/O Dasar

dan mengeset ke nilai 1 dapat dilakukan untuk semua jalur Peripheral I/O
Sederhana
dalam port tersebut atau setiap jalur/pin Lisensi
I Contoh untuk port P1 dengan alamat 90h:
I MOV 90h, #0 ; Reset semua jalur P1
I MOV P1, #0 ; P1 adalah nama simbol untuk port 1
I CLR 97h ; Clear jalur di alamat 97h (P1.7)
I CLR P1.7 ; Menggunakan simbol
I MOV 90h, #FFh ; Set semua jalur P1 dengan 1
I MOV P1, #0ffh ; P1 adalah nama simbol untuk port 1
I SETB 97h ; Set jalur di alamat 97h (P1.7)
I SETB P1.7 ; Menggunakan simbol
I JB P1.0,addr ; Jump ke <addr> jika bit P1.0 set

http://didik.blog.undip.ac.id/ @2022,Eko Didik Widianto 45


Pemrograman I/O
Transfer Data di Port I/O @2022,Eko Didik
Widianto

Antarmuka
Mikroprosesor

Akses CPU - Memori

Antarmuka I/O Dasar

Peripheral I/O
Sederhana

Lisensi
I Contoh:
I MOV 90h,A ; Data dari akumulator dikirimkan ke port 1
I MOV P1,A ; Menggunakan nama simbol
I MOV A,P1 ; ACC <= Port 1
I MOV C,P1.1 ; C <= P1.1

http://didik.blog.undip.ac.id/ @2022,Eko Didik Widianto 46


Pemrograman I/O
Rangkaian Port I/O @2022,Eko Didik
Widianto

Antarmuka
Mikroprosesor

Akses CPU - Memori

Antarmuka I/O Dasar

Peripheral I/O
Sederhana

Lisensi

I Operasi: masukan (I),


keluaran (O) atau
masukan/keluaran (I/O)
I Input: NMOSFET
dimatikan dengan
menulis 1
I Pull-up secara internal

http://didik.blog.undip.ac.id/ @2022,Eko Didik Widianto 47


Pemrograman I/O
Pin I/O Dua Arah @2022,Eko Didik
Widianto

Antarmuka
Mikroprosesor

Akses CPU - Memori

Antarmuka I/O Dasar

Peripheral I/O
Sederhana
I Pull-up sebagai current source Lisensi
I Sekitar 50uA ke beban
eksternal
I Arus sink lebih besar,
beberapa mA

http://didik.blog.undip.ac.id/ @2022,Eko Didik Widianto 48


Pemrograman I/O
Batasan Arus Keluaran @2022,Eko Didik
Widianto

Antarmuka
Mikroprosesor

Akses CPU - Memori

Antarmuka I/O Dasar


I Arus source? 50uA Peripheral I/O
Sederhana
I Arus output low: 15 mA (max),
Lisensi
absolute max
I Jika lebih akan merusak
chip
I Arus total sink untuk 8 port: 26
mA
I Jika semua LOW, maka
I LED butuh 10mA agar tiap port sekitar 3 mA
terang I Arus yang mengalir di LED
I Tegangan di kaki LED 1.5 - adalah 5−2
≈ 9mA
330
2 volt

http://didik.blog.undip.ac.id/ @2022,Eko Didik Widianto 49


Pemrograman I/O
Supply Lebih Banyak Arus @2022,Eko Didik
Widianto

Antarmuka
Mikroprosesor
I Arus source= 50uA Akses CPU - Memori

I Arus yang mengalir di LED Antarmuka I/O Dasar

Peripheral I/O
adalah 50u × β Sederhana

I β merupakan gain Lisensi

transistor NPN
I Kebutuhan arus besar:
transistor Darlington

I LED butuh 10-20mA agar


terang penuh
I Tegangan di kaki LED 1.5 - 2
volt
http://didik.blog.undip.ac.id/ @2022,Eko Didik Widianto 50
Pemrograman I/O
Driver Luaran PNP @2022,Eko Didik
Widianto

Antarmuka
Mikroprosesor

Akses CPU - Memori

Antarmuka I/O Dasar

Peripheral I/O
I Arus sink lebih besar daripada Sederhana
source Lisensi

I Untuk arus sink low 1.6mA


dan gain transistor 50, arus
LED 80mA

http://didik.blog.undip.ac.id/ @2022,Eko Didik Widianto 51


Pemrograman I/O
Saklar @2022,Eko Didik
Widianto

Antarmuka
Mikroprosesor

Akses CPU - Memori


I Mikrokontroler sudah mempunyai
Antarmuka I/O Dasar
resistor pullup Peripheral I/O
I Nilai masukan 1 saat saklar Sederhana

Lisensi
terbuka
I Nilai masukan 0 saat saklar
tertutup
I Problem: bouncing, osilasi antara 1
dan 0
I Berhenti setelah beberapa
mdetik
I Perlu debouncer
I Mengabaikan transisi 1 dan
0 untuk beberapa waktu

http://didik.blog.undip.ac.id/ @2022,Eko Didik Widianto 52


Pemrograman I/O
Debouncer @2022,Eko Didik
Widianto

Antarmuka
Mikroprosesor

Akses CPU - Memori

Antarmuka I/O Dasar

Peripheral I/O
Sederhana
I Tipe: Lisensi
I Rangkaian
I IC
I MAX6816,
MC14490
I Digital swictch (PLD)
I Software
I I Menggunakan inverter
http://www.labbookpages.co.uk/electronics/debounce.html

http://didik.blog.undip.ac.id/ @2022,Eko Didik Widianto 53


Pemrograman I/O
Operasi Debouncer @2022,Eko Didik
Widianto

Antarmuka
Mikroprosesor

Akses CPU - Memori

Antarmuka I/O Dasar

Peripheral I/O
Sederhana

Lisensi

http://didik.blog.undip.ac.id/ @2022,Eko Didik Widianto 54


Pemrograman I/O
Saklar Terisolasi dengan Opto-isolator @2022,Eko Didik
Widianto

Antarmuka
Mikroprosesor

Akses CPU - Memori


I Pertimbangan safety Antarmuka I/O Dasar

I menggunakan phototransistor Peripheral I/O


Sederhana
I MCT62: dual Lisensi

phototransistor
I Vin=0, maka masukan mikro
HIGH
I Arus sink: 500uA
I Vin maksimum: 61.5Volt =
1.5V + 60mA. 1k
I Vin minimum:
1+1.5V=2.5V, sehingga
arus yang mengalir
1/1k=1mA bisa membuat
LED aktif

http://didik.blog.undip.ac.id/ @2022,Eko Didik Widianto 55


Pemrograman I/O
Keyboard Matriks @2022,Eko Didik
Widianto

Antarmuka
I Termultipleks: 4 row, 4 Mikroprosesor

Akses CPU - Memori


column
Antarmuka I/O Dasar
I Menghemat pin: Peripheral I/O
I menggunakan Sederhana

Lisensi
4-ke-2 enkoder:
column
I menggunakan
2-ke-4 decoder:
row
I 64 kunci?
I 8-ke-3 enkoder
dan 3-ke-8
dekoder
I IC keypad: 74HC922
I Dapat dipetakan
di memori
eksternal
I Atau alamat I/O
http://didik.blog.undip.ac.id/ @2022,Eko Didik Widianto 56
Pemrograman I/O
Tampilan Matriks @2022,Eko Didik
Widianto

Antarmuka
Mikroprosesor

Akses CPU - Memori

Antarmuka I/O Dasar

Peripheral I/O
Sederhana

Lisensi

I Termultipleks: scanned/refreshed secara kolum dan baris

http://didik.blog.undip.ac.id/ @2022,Eko Didik Widianto 57


Pemrograman I/O
Driver dan Buffer @2022,Eko Didik
Widianto

Antarmuka
Mikroprosesor

Akses CPU - Memori

Antarmuka I/O Dasar

Peripheral I/O
Sederhana

Lisensi

I Operasi: masukan (I),


keluaran (O) atau
masukan/keluaran (I/O)
I Input: NMOSFET
dimatikan dengan
menulis 1
I Pull-up secara internal

http://didik.blog.undip.ac.id/ @2022,Eko Didik Widianto 58


Pemrograman I/O
Driver dan Buffer @2022,Eko Didik
Widianto

Antarmuka
Mikroprosesor

Akses CPU - Memori

Antarmuka I/O Dasar

Peripheral I/O
Sederhana

Lisensi

http://didik.blog.undip.ac.id/ @2022,Eko Didik Widianto 59


Pemrograman I/O
PPI 8255 @2022,Eko Didik
Widianto
Programmable Peripheral Adapter
Antarmuka
Mikroprosesor

Akses CPU - Memori

Antarmuka I/O Dasar

Peripheral I/O
Sederhana

Lisensi

http://didik.blog.undip.ac.id/ @2022,Eko Didik Widianto 60


Pemrograman I/O
PPI 8255: Register dan Kontrol @2022,Eko Didik
Widianto

Antarmuka
Mikroprosesor

Akses CPU - Memori

Antarmuka I/O Dasar

Peripheral I/O
Sederhana

Lisensi

I Mode: 0 (Basic I/O), 1


(Strobe) dan 2
(Bidirectional)

http://didik.blog.undip.ac.id/ @2022,Eko Didik Widianto 61


Pemrograman I/O
Lisensi @2022,Eko Didik
Widianto

Antarmuka
Mikroprosesor
Creative Common Attribution-ShareAlike 4.0 Unported (CC
Akses CPU - Memori
BY-SA 4.0)
Antarmuka I/O Dasar
I Anda bebas: Peripheral I/O
I untuk Membagikan — untuk menyalin, mendistribusikan, dan Sederhana

Lisensi
menyebarkan karya, dan
I untuk Remix — untuk mengadaptasikan karya
I Di bawah persyaratan berikut:
I Atribusi — Anda harus memberikan atribusi karya sesuai dengan
cara-cara yang diminta oleh pembuat karya tersebut atau pihak
yang mengeluarkan lisensi. Atribusi yang dimaksud adalah
mencantumkan alamat URL di bawah sebagai sumber.
I Pembagian Serupa — Jika Anda mengubah, menambah, atau
membuat karya lain menggunakan karya ini, Anda hanya boleh
menyebarkan karya tersebut hanya dengan lisensi yang sama,
serupa, atau kompatibel.
I Lihat: Creative Commons Attribution-ShareAlike 4.0 Unported License
I Alamat URL: http://didik.blog.undip.ac.id/buku/sistem-digital/

http://didik.blog.undip.ac.id/ @2022,Eko Didik Widianto 62


Teknik Pemrograman ADC
Analog-to-Digital Converter
MK Teknik Mikroprosesor dan Antarmuka
Eko Didik Widianto
Dania Eridani

Referensi:

MCS 51 Microcontroller Family User’s Manual

ATMega32 8-bit AVR with 32 Kbytes ISP Flash

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Aplikasi ADC

enterprise-europe.iwt.be

maximintegrated.com

cabonauts.com

Sistem
terkomputerisasi
(c)2022, Eko Didik Widianto, Universitas Diponegoro
Pokok Bahasan

Konversi analog ke digital

Arsitektur ADC di 8051 dan AVR ATMega

Register

Pemrograman

Aplikasi ADC dan DAC
Setelah mempelajari bab ini, mahasiswa akan mampu

[C2] memahami prinsip ADC dan DAC

[C5] mendesain mikrokomputer dengan antarmuka ADC untuk peripheral
sensor suhu dan kelembaban udara

[C5] mendesain mikrokomputer dengan antarmuka DAC untuk peripheral
speaker

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Konversi Analog ke Digital

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Pengolahan Sinyal

(c)2022, Eko Didik Widianto, Universitas Diponegoro


ADC dan DAC

ADC SAMPLED AND DAC RECONSTRUCTED


QUANTIZED WAVEFORM WAVEFORM

(c)2022, Eko Didik Widianto, Universitas Diponegoro


ADC: Konverter A/D
REFERENCE
INPUT RESOLUTION DIGITAL
N BITS OUTPUT
ANALOG
INPUT

Analog Input
DIGITAL OUTPUT CODE = x (2 N - 1)
Reference Input

Menghasilkan keluaran digital sesuai dengan nilai sinyal
analog masukan relatif terhadap tegangan referensi

Proses: sinyal analog --> digital
– Analog: amplitudo kontinyu, waktu kontinyu
– Digital: amplitudo diskrit, waktu diskrit
– Jumlah nilai diskrit terbatas: 2N , N=jumlah bit

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Proses Konversi

Proses konversi
– Pencuplikan (sampling)

Mengubah sinyal waktu kontinyu menjadi sinyal waktu
diskrit

Parameter: frekuensi sampling
– Kuantisasi

Mengubah sinyal amplitudo kontinyu menjadi sinyal
amplitudo diskrit

Parameter: jumlah representasi bit
– Pengkodean

Mengkodekan sinyal diskrit dalam representasi
binernya (digital)

(c)2022, Eko Didik Widianto, Universitas Diponegoro


1. Pencuplikan

Merepresentasikan sinyal waktu kontinyu ke
dalam waktu diskritnya

Menentukan bandwidth sinyal tercuplik
(kriteria Nyquist)
– Frekuensi sinyal Fs harus dari 1/2*Fsampling agar
tidak terjadi aliasing
y(t)

y(n)
y(n+1)

AMPLITUDE
QUANTIZATION

t
n-1 n n+1 n+3 ts
DISCRETE
TIME SAMPLING
(c)2022, Eko Didik Widianto, Universitas Diponegoro
Bandwidth Nyquist & Aliasing
fsignal fsampling - fsignal fsampling fsampling + fsignal

signal
(FSIGNAL < ½ FSAMPLING)
passband

1 MHz 3 MHz 4 MHz 5 MHz

fsignal fsampling - fsignal fsampling fsampling + fsignal

signal (FSIGNAL < ½ FSAMPLING)


passband

1 MHz 3 MHz 4 MHz 5 MHz

(c)2022, Eko Didik Widianto, Universitas Diponegoro


2. Kuantisasi

Merepresentasikan sebuah sinyal analog yang
mempunyai resolusi tak terbatas (kontinyu) ke
digital yang mempunyai resolusi terbatas

100 1LSB
11
Digital

10
01 Any Analog Input in this
Range Gives the Same
00 Digital Output Code
0 1/4 1/2 3/4 1 = FS
Analog

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Relasi Ideal Konverter A/D

111
DIGITAL OUTPUT

110

101

100

011 1 LSB

010

001

1/8 2/8 3/8 4/8 5/8 6/8 7/8

ANALOG INPUT

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Spesifikasi DC
A D C T ra nsfer Function
(Ideal)

Transisi kode ADC 111

ideal tepat 1 LSB 11 0

1 LS B

Untuk N-bit ADC,


10 1

Digital Output

10 0
terdapat 2N kode 011


1 LSB = FS/2N 01 0

00 1

Untuk ADC 3-bit, 00 0

FS=1Volt, 1 LSB=1V/8 0 1/8 1/4 3/8 1/2

A nalog Input
5 /8 3/4 7/8


Tiap langkah berpusat
di tiap 1/8 FS

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Vmax = 7.5V 1111
3. Pengkodean Digital 7.0V 1110
6.5V 1101
6.0V 1100

Mentranslasikan nilai analog 5.5V
1011

terkuantisasi menjadi kode 5.0V 1010

digital 4.5V
4.0V
1001

1000

a/FS = d/M 3.5V 0111

3.0V 0110
a=nilai analog, FS=Vmax 2.5V 0101

M=jumlah langkah=2N 2.0V 0100


1.5V 0011
d=nilai digital 1.0V 0010
0.5V 0001
0V
0000

(c)2022, Eko Didik Widianto, Universitas Diponegoro


proportionality
Metode Konversi

Parallel converter

Successive-approximation

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Resolusi ADC

Merupakan perubahan tegangan analog terkecil
yang menghasilkan perubahan 1 bit (=1 LSB)
– Jarak antara 2 level kuantisasi yang berdekatan

Resolusi ADC: r = FS / 2N

Sering dinyatakan langsung dalam bit

(c)2022, Eko Didik Widianto, Universitas Diponegoro


ADC dan Sistem Sensor


K dan B: rangkaian pengkondisi tranduser
– K = pengali tegangan skalar
– B = tegangan bias untuk menempatkan tegangan
di Vmin dan Vmax ADC

V2,max = (V1,max * K) + B
V2,min = (V1,min * K) + B
(c)2022, Eko Didik Widianto, Universitas Diponegoro
Contoh Rangkaian Pengkondisi

Sensor photodiode menyediakan tegangan 0V
untuk intensitas cahaya terbesar dan -2.50V
untuk intensitas cahaya terkecil. Hitung nilai K
dan B untuk tranduser ini sehingga dapat
mempunyai skala penuh di ADC dengan FS=5V
dengan referensi ke GND.

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Antarmuka ADC di 8051

(c)2022, Eko Didik Widianto, Universitas Diponegoro


ADC0804

ADC 8-bit successive approximation

https://www.ti.com/lit/ds/symlink/adc0804-n.pdf


Lainnya ADC0808

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Typical Application Schematic

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Span Adjustment

(c)2022, Eko Didik Widianto, Universitas Diponegoro


(c)2022, Eko Didik Widianto, Universitas Diponegoro
Cara Melakukan Konversi

Make CS=0 and send a low
to high pulse to WR pin to
start the conversion.

Now keep checking the
INTR pin. INTR will be 1 if
conversion is not finished
and INTR will be 0 if
conversion is finished.

If conversion is not finished
(INTR=1) , poll until it is
finished.

If conversion is finished
(INTR=0), go to the next
step.

Make CS=0 and send a
high to low pulse to RD pin
to read the data from the
ADC.

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Contoh Program
ORG 00H
MOV P1,#11111111B // initiates P1 as the input port
MAIN: CLR P3.7 // makes CS=0
SETB P3.6 // makes RD high
CLR P3.5 // makes WR low
SETB P3.5 // low to high pulse to WR for starting conversion
WAIT: JB P3.4,WAIT // polls until INTR=0
CLR P3.7 // ensures CS=0
CLR P3.6 // high to low pulse to RD for reading the data from ADC
MOV A,P1 // moves the digital data to accumulator
CPL A // complements the digital data (*see the notes)
MOV P0,A // outputs the data to P0 for the LEDs
SJMP MAIN // jumps back to the MAIN program
END

(c)2022, Eko Didik Widianto, Universitas Diponegoro


ADC di AVR ATMega

(c)2022, Eko Didik Widianto, Universitas Diponegoro


ADC di AVR ATMega16/32

8 Channel ADC
Multiplexed
– 8 Single-ended
– 2 Differential with
Programmable Gain at 1x,
10x, or 200x

8/10 bit resolution

Variable Clock Speed

Various Reference
Voltage

Polling/Interrupt EOC

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Fitur ADC di AVR

10-bit Resolution

0.5 LSB Integral Non-linearity

±2 LSB Absolute Accuracy

13 - 260 µs Conversion Time

Up to 15 kSPS at Maximum Resolution

8 Multiplexed Single Ended Input Channels

7 Differential Input Channels

2 Differential Input Channels with Optional Gain of 10x and 200x(1)

Optional Left adjustment for ADC Result Readout

0 - VCC ADC Input Voltage Range

Selectable 2.56V ADC Reference Voltage

Free Running or Single Conversion Mode

ADC Start Conversion by Auto Triggering on Interrupt Sources

Interrupt on ADC Conversion Complete

Sleep Mode Noise Canceler

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Arsitektur ADC di AVR

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Distribusi Clock di AVR


ADC has a dedicated
clock domain (clkADC)
– reduce noise
generated by digital
circuitry
– gives more accurate
ADC conversion
results

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Arsitektur
ADC

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Masukan Analog
dan Power

(c)2022, Eko Didik Widianto, Universitas Diponegoro


ADMUX: Register Pemilihan MUX


REFS[1:0]: memilih tegangan referensi


ADLAR: ADC Left Adjust Result (1: left; 0:right)

(c)2022, Eko Didik Widianto, Universitas Diponegoro


MUX[4:0]: Pemilihan Kanal Input dan Gain

Lihat tabel 22-4 di datasheet AVR8/16/32 untuk daftar lengkap

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Hasil Konversi

Setelah konversi selesai (ADIF=1), hasil
konversi disimpan dalam register hasil (ADCL,
dan ADCH)

Single-ended conversion

Differential conversion

(c)2022, Eko Didik Widianto, Universitas Diponegoro


ADCSRA: Register Kontrol dan Status

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Register Kontrol dan Status

(c)2022, Eko Didik Widianto, Universitas Diponegoro


ADPS[2:0]: ADC Prescaler Select Bit

(c)2022, Eko Didik Widianto, Universitas Diponegoro


ADC Prescaler

(c)2022, Eko Didik Widianto, Universitas Diponegoro


SFIOR – Special FunctionIO Register


ADTS[2:0]: ADC Auto Trigger Source

(c)2022, Eko Didik Widianto, Universitas Diponegoro


ADC Auto Trigger Logic

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Diagram Pewaktuan ADC
(Konversi Pertama, Mode Tunggal)

Waktu konversi: 25 cycle

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Konversi Mode Tunggal

Waktu Konversi: 13 cycle (single-ended)

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Konversi Auto-Triggered

Waktu konversi: 13.5 cycle

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Free-Running Conversion

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Pemrograman ADC

Hanya 1 kanal ADC yang bisa dikonversikan
dalam 1 waktu
– Memilih Prescaler ADC (pembagi frekuensi): set
ADPS[2:0] di register ADCSRA
– Memilih masukan analog MUX[4:0] di register
ADMUX
– Memilih sumber tegangan referensi REFS[1:0]
– Mengeset ADLAR
– Membaca hasil konversi dari ADCH dan ADCL

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Inisialisasi ADC
//*************************************************************
//InitADC: initialize analog-to-digital converter
//*************************************************************
void InitADC( void)
{
ADMUX = 0; //Select channel 0
ADCSRA = 0xC3; //Enable ADC & start 1st dummy conversion
//Set ADC module prescalar to 8 critical for
//accurate ADC results
while (!(ADCSRA & 0x10)); //Check if conversation is ready
ADCSRA |= 0x10; //Clear conv rdy flag - set the bit
}

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Pembacaan Data ADC
//*************************************************************
//ReadADC: read analog voltage
//*************************************************************
unsigned int ReadADC(unsigned char chan)
{
unsigned int result, hvoltage, lvoltage; //weighted binary voltage
ADMUX = chan; //Select channel
ADCSRA |= 0x43; // Start conversion, Set ADC module
// prescalar to 8 critical for accurate results

while (!(ADCSRA & 0x10)); //Check if converstion is ready

ADCSRA |= 0x10; //Clear Conv rdy flag – set the bit

hvoltage = ADCL;
lvoltage = (ADCH << 8);

result = hvoltage | lvoltage;


return result;
}

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Digital Termometer

Sensor Temperatur LM35

http://
extremeelectronics.co.i
n/avr-tutorials/
interfacing-
temperature-sensor-
lm35/
(c)2022, Eko Didik Widianto, Universitas Diponegoro
Antarmuka Accelerometer 3 Sumbu

ATMega32 + Accelerometer mma7260 + LCD

http://extremeelectronics.co.in/avr-tutorials/interfacing-mma7260-triple-axis-accelerometer-with-
atmega32-avr-tutorial/

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Antarmuka Accelerometer 3 Sumbu

(c)2022, Eko Didik Widianto, Universitas Diponegoro


ADC Graph


http://
extremeelectronics.co.in/
tools/visualize-adc-data-
on-pc-screen-using-usart-
avr-project/

(c)2022, Eko Didik Widianto, Universitas Diponegoro


ADC di Arduino Uno

(c)2022, Eko Didik Widianto, Universitas Diponegoro


ADC di AVR ATMega16/32

https://www.arduino.cc/en/Tutorial/BuiltInExamples/AnalogInput

fritzing.org Potensiometer

Photoresistor:
1M → gelap
10k → daylight (10lumen)
1k → terang (>100lumen)

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Kode

Fungsi: analogRead(sensorPin)

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Kode (Fungsi lebih Dalam)

https://github.com/arduino/ArduinoCore-avr/blob/master/cores/arduino/wirin
g_analog.c

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Bacaan Lebih Lanjut

https://classes.engineering.wustl.edu/ese205/core/index.php?title=Multi-Input_Analog
_Reading_with_Arduino_Uno

https://www.allaboutcircuits.com/projects/reading-sensors-with-an-arduino/

Ragam Sensor Analog:
– Light sensor
– Motion sensor
– Temperature sensor
– Magnetic fields sensor
– Gravity sensor
– Humidity sensor
– Moisture sensor
– Vibration sensor
– Pressure sensor
– Electrical fields sensor
– Sound sensor
– Position sensor
(c)2022, Eko Didik Widianto, Universitas Diponegoro
Antarmuka Serial
MK Teknik Mikroprosesor dan Antarmuka
Eko Didik Widianto
Dania Eridani

Referensi:

MCS 51 Microcontroller Family User’s Manual

ATMega32 8-bit AVR with 32 Kbytes ISP Flash

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Pokok Bahasan

Antarmuka Serial

Serial Asinkron RS-232
– Antarmuka dan interkoneksi
– Sinyal dan Protokol

Antarmuka Serial Sinkron: SPI, I2C/TWI

Setelah mempelajari bab ini, mahasiswa akan mampu



[C2] memahami antarmuka serial dan paralel

[C2] memahami serial asinkron dan asinkron

[C5] mendesain mikrokomputer dengan antarmukaserial asinkron dan
sinkron untuk beragam aplikasi dengan beragam peripheral

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Antarmuka Serial

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Bagaimana Menghubungkan Peripheral Berikut?


SD/MMC

Audio codec

Microkontroler lain

Sensor

RTC

Modem

Modul jaringan

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Taksonomi Mode Antarmuka

Paralel: n-bit dikirim dalam satu waktu

Serial: 1 bit dikirim dalam satu waktu
– Asinkron: data dikirimkan sewaktu-waktu
– Sinkron: transmisi data terjadi secara kontinyu, tidak
ada gap antar data
– Isochronous: transmisi data terjadi dalam interval
waktu tertentu, ada gap tetap antar data

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Mode Paralel

Data di semua jalur harus sinkron
– Kalau tidak sinkron? Tidak cocok untuk kecepatan data
tinggi

8 Jalur untuk mengirimkan data 8-bit


(c)2022, Eko Didik Widianto, Universitas Diponegoro
Mode Serial

Digunakan hampir semua komunikasi
– Lebih murah untuk jarak jauh
– Tidak ada masalah timing antar jalur (jitter antar jalur)
– Tidak ada cross-talk

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Mode Serial di Jalur Pendek

Bus serial juga digunakan untuk komunikasi jalur
pendek
– Didukung oleh peningkatan kehandalan dan kecepatan
sinyal
– Mengurangi kepadatan interkoneksi
– Di kecepatan tinggi, lebih tahan terhadap clock-skew
dan cross-talk daripada paralel
– Migrasi dari paralel ke serial:

PCI ke PCI Express

PATA ke SATA

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Clock Skew dan Cross
Talk di Paralel

NEXT dan FEXT

http://www.altera.com

(c)2022, Eko Didik Widianto, Universitas Diponegoro


UART dan USART

Sebuah hardware diperlukan untuk mengkonversi data
paralel ke serial dan sebaliknya
– UART (Universal Asynchronous Receiver and Transmitter):
asinkron
– USART (Universal Synchronous-Asynchronous Receiver and
Transmitter): sinkron dan asinkron
Serial sinkron

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Urutan Data Serial

Diberikan data, mana yang akan dikirim terlebih
dahulu? MSB (most significant bit) atau LSB (least
significant bit)
– Little-endian: sistem mengirimkan LSB terlebih dahulu
– Big-endian: sistem mengirimkan MSB terlebih dahulu

Pengirim dan penerima harus mempunyai urutan
yang sama

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Contoh Endianess

Ethernet mengirimkan serial data 32-bit
– Data dibagi dalam 4 byte, tiap byte terdiri atas 8 bit
– Data dikirimkan secara byte big-endian dan bit little
endian

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Mode Isochronous

Digunakan untuk aplikasi multimedia
– Mengirimkan data dengan rate tertentu dan tetap
(bitrate terjamin)
– Misalnya: transmisi audio dengan kecepatan 64000 bps

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Frame Data

Frame berisi satu
blok data byte
– Dimulai dengan deretan
bit khusus
– Atau sinyal khusus
sinkronisasi frame

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Simpleks dan Dupleks

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Antarmuka Serial Asinkron

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Serial Asinkron

Contoh: RS-232
– Tambahan bit untuk start, stop dan parity
– Terdapat jeda pengiriman (bit '1')

Pengiriman 8-bit data secara asinkron


(c)2022, Eko Didik Widianto, Universitas Diponegoro
Standar RS-232

Standar komunikasi serial yang menghubungkan DTE (Data
Terminal Equipment) dan DCE (Data Circuit-terminationg
Equipment)
– DTE: komputer, sistem mikrokomputer
– DCE: modem, modul GSM

Di komputer: serial port

Standar: TIA-232-F (1997)
– Interface Between Data Terminal Equipment and Data Circuit-
Terminating Equipment Employing Serial Binary Data Interchange
– Kecepatan 512kbps di jarak 15 m

RS-485 mempunyai kecepatan lebih tinggi (sampai 10 Mbps) dan
jarak lebih jauh (1200 m pada kecepatan rendah)
– Mendefinisikan:

karakteristik elektrik

diagram pewaktuan sinyal

nama-nama sinyal

ukuran fisik dan pinout dari konektor
(c)2022, Eko Didik Widianto, Universitas Diponegoro
Bitrate dan Jarak Transmisi

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Aplikasi Antarmuka Serial

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Aplikasi Antarmuka Serial

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Pinout RS-232

DTE

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Interkoneksi

DTE-DCE atau DCE-DTE: straight cable


DTE-DTE: cross cable atau null modem

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Loopback dan Spy/Monitor

Loopback

Spy/Monitor

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Handshaking

Metode mengontrol pentransmisian stream data
– Disebut juga flow control

Metode handshaking:
– Software Handshake: Xon/Xoff
– Hardware Handshake: RTS/CTS

Sofware handshaking: menggunakan 2 karakter tambahan Xon
(ASCII 17) dan Xoff (ASCII 19)
– Saat buffer modem penuh, modem (DCE) akan mengirim Xoff sehingga
DTE menghentikan pengiriman
– Saat buffer tersedia, modem mengirim Xon untuk memulai transmisi
kembali

Loopback Full handshake

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Frame Data

Frame data terdiri atas:
– Start bit: attention bit, logika 0
– Data Word

Jumlah bit : 5, 6, 7, 8

LSB dikirim dahulu
– Parity: dapat mendeteksi 1 bit error

even (genap) dan odd (ganjil)
– Stop bit

Jumlah bit: 1, 2 bit

memberikan periode jeda minimum untuk tiap word

8E1: 8 bit data, parity genap, dan 1 stop bit

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Level Tegangan

Sinyal data: bipolar, referensi terhadap ground
– Logika 0 (space): +3 sampai +12V
– Logika 1 (mark): -12v sampai -3v

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Konverter Level Tegangan

Dari level TTL ke RS-232 +15


TTL dari port UART Mikrokontroler
– Logika 0: 0v, Logika 1: +3.3v, 5V
5

MAX-232 0 RS232

TTL

-15

RS232 LEVEL
CONVERTER
RS232 TTL

MCU
Personal Computer

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Skematik: Antarmuka RS-232
VC C

C8 S1 R ESET
10uF
U1
VC C 1
R ST R1
4 10K
R5 R4 X2
Y1
12MH z
10K 10K
5 C7 C7
X1 30pf 30pf
12 2
13 +P 1 . 0 P 3 . 0 / R XD 3
14 -P 1 . 1 P 3 . 1 / TXD 6
15 P 1.2 P 3 . 2 / I N T0 7
16 P 1.3 P 3 . 3 / I N T1 8
17 P 1.4 P 3 . 4 / T0 9
18 P 1.5 P 3 . 5 / T1
P 1.6
19
P 1.7 P 3.7
11
http://www.ecomponentsguru.com
AT8 9C 2051

U2
D B9
13 1 2 TTL RX 1
RS232 8 R 1IN R 1O U T 9 6
R 2IN R 2O U T 2
11 14 7
TTL 10 T1 I N T1 O U T 7 3
T2 I N T2 O U T RS232 TX 8
C4 1 4
22uF 3 C 1+ 9
4 C 1- 5
5 C 2+
C3 C 2- P1
22uF 2
6 V+
VC C V-
VC C C5 16
22uF 15 VC C
GND

TC 2 3 2
C6
22uF IC LEVEL
CONVERTER (c)2022, Eko Didik Widianto, Universitas Diponegoro
8051: Mode Serial dan Register
SM0 SM1 MODE Fungsi Baud Rate

0 0 0 Shift Register 1/12 Oscillator


0 1 1 8-bit UART Diset oleh Timer
1 0 2 9-bit UART 1/64 atau 1/32
Oscillator
1 1 3 9-bit UART Diset oleh Timer

SBUF Serial 99H


Buffer

SCON Serial 9F 9E 9D 9C 9B 9A 99 98 98H

Control SM0 SM1 SM2 REN TB8 RB8 TI RI

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Mode 0 – Shift Register
Mode tulis
ALE

Data (RXD)

D0 D1 D2 D3 D4 D5 D6 D7

Shift Clock
(TXD)

Mode baca
ALE

Data (RXD)
D0 D1 D2 D3 D4 D5 D6 D7

Shift Clock
(TXD)

Baud rate adalah 1/12 frekuensi crystal.

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Mode 1, 2, 3

Mode 1 adalah 8-Bit UART dengan baud rate yang dapat diatur;
Transmisi serial dengan format 8 bit data, 1 bit stop dan tidak ada
parity. Pesat bit atau Baud rate variabel, ditentukan oleh timer.
Mode 1 sederhana dan sering digunakan untuk komunikasi antara
MCU dengan Komputer.

Mode 2 adalah 9-Bit UART dengan baud rate tetap; Transmisi serial
dengan format 8 bit plus bit kesembilan yang ada pada TB8 dan 1
stop bit.

Mode 3 adalah 9-Bit UART dengan baud rate yang dapat diatur;
Transmisi serial dengan format 8 bit plus bit kesembilan yang ada
pada TB8 dan 1 stop bit

Baud rate Mode 2: untuk SMOD=0 adalah 1/64 frekuensi crystal,
SMOD=1 adalah 1/32 frekuensi crystal

Baud rate Mode 1 dan 3: untuk SMOD=0 adalah 1/32 dari timer
overflow, SMOD=1 adalah 1/16 dari timer overflow

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Nilai Timer TH1 (Mode 1,3)

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Pemrograman Serial
;inisialisi serial port 4800,8,1,N
;crystal oscillator 12 MHz
initser:
mov pcon,#80h ;set SMOD=1
mov tmod,#22h ;timer 1 sebagai baud rate generator
;mode 2 (8 bit auto reload)
mov th1,#0f4h ;menggunakan 12 MHz Crystal
setb tcon.6 ;jalankan timer 1,
;juga dapat dg perintah SETB TR1
mov scon,#050h ;serial port mode 1
;aktifkan REN
ret
;kirim data di akumulator ke serial port
sndchr:
clr scon.1 ; clear kan TI
mov sbuf,a ; kirim data ke sbuf
txloop:
jnb scon.1, txloop ; tunggu hingga TI ‘1’
ret
; terima data dari serial port ke akumulator
getchr:
jnb ri, getchr ; tunggu hingga ri ‘1’
mov a, sbuf ; pindahkan data dari sbuf ke a
clr ri ; clear ri
ret (c)2022, Eko Didik Widianto, Universitas Diponegoro
Antarmuka Serial Sinkron

(c)2022, Eko Didik Widianto, Universitas Diponegoro


SPI (Serial Peripheral Interface)

Dikembangkan Motorola tahun 1979

Mode master-slave
– Master menginisiasi frame data

Full duplex

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Sinyal SPI

SCLK: serial clock (output dari master)

MOSI/SDO: master output, slave input (output dari
master)

MISO/SDI: master input, slave output (output dari
slave)

SS/CS: slave select (active low, output dari master)

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Komunikasi SPI

Setiap satu siklus clock SPI: transmisi data full
dupleks terjadi:
– Master mengirim sebuah bit di jalur MOSI; Slave
menerimanya dari MOSI
– Slave mengirim sebuah bit di jalur MISO; Master
menerimanya dari MISO

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Komunikasi SPI

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Diagram Pewaktuan

(c)2022, Eko Didik Widianto, Universitas Diponegoro


SPI Multi-slave

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Contoh Skematik

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Contoh Skematik

https://www.javatpoint.com/lcd-interfacing-avr

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Contoh Aplikasi (Arduino)

https://docs.arduino.cc/tutorials/communication/BarometricPressureSensor
→ Menggunakan pustaka SPI

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Serial Sinkron Lainnya

I2C (Inter-integrated Circuit) dari Philips atau TWI (Two-
wire Interface) dari Atmel

Mode: Master Slave

Terdiri dua kabel: untuk data dan clock

Kecepatan: 100 sampai 400 Kbps

Untuk antarmuka dengan mikrokontroler slave,
EEPROM, RTC, LCD, ADC

https://en.wikipedia.org/

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Contoh Project
https://mmdolze.users.sourceforge.net/use-a-lcd-
with-twi.html

http://www.atmel.com/Images/doc1981.pdf

(c)2022, Eko Didik Widianto, Universitas Diponegoro


c

USB (Universal Serial Bus)


Kuliah 14B (Tambahan)
MK Teknik Mikroprosesor dan Antarmuka
Eko Didik Widianto
Dania Eridani

Original logo USB 2.0 (2000) USB 3.0 (2008) USB 4.0 (2019)
Max 12 Mbps Max 480 Mbps Max 5 Gbps Max 40 Gbps
(wikipedia.org)

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Aplikasi USB

Serial, komunikasi berkecepatan tinggi


(c)2022, Eko Didik Widianto, Universitas Diponegoro
Pokok Bahasan: USB


Mengapa digunakan?

Dasar-dasar: kecepatan, topologi, endpoint,
tipe transfer, protokol

Antarmuka Host dan Driver (Software)

Aplikasi di sistem embedded
Setelah mempelajari bab ini, mahasiswa akan mampu

[C2] menjelaskan perkembangan antarmuka USB

[C2] menjelaskan topologi sistem USB

[C2] menjelaskan kelas USB terutama HID dan storage

[C5] mendesain sistem mikrokomputer dengan antarmuka USB sebagai
device Lane Hauck, “Embedding USB”, 2002

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Mengapa digunakan? Menawarkan
keunggulan

Many standardized, low cost devices are
available

Connectors and cables are standard

USB devices are compliance-tested to insure
compatibility and uniform performance

Using hubs, multiple USB devices can share
one connector

USB devices can tell you about their
capabilities

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Mengapa digunakan? Menawarkan
keunggulan

USB provides device power

USB devices can:
– Be put to sleep
– Be awakened
– Provide a system wakeup call

USB protocol takes care of low-level details
– Flow control
– Error checking

You decide how complex to make the firmware

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Dasar-dasar USB


Kecepatan

Antarmuka

Topologi

Endpoint

Tipe transfer

Hub

Host dan driver

Protokol OWI-535 Robotic Arm Edge

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Kecepatan Transfer

USB 1.0 (1996) and 1.1 (1998)
– Low speed is 1.5 Mbits/sec

Packet size is limited to 8 bytes
– Full speed is 12 Mbits/sec
– 12 Mb/s is great for embedded systems

USB 2.0 (2000)
– “Hi-speed” is 480 Mbits/sec

USB 3.0 (2008)
– Max speed is 5 Gbit/s

USB 4.0 (2019)
– Max speed is 40 Gbit/s

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Antarmuka USB

Standar USB 1.x/2.0


USB Mini/Micro 1.x/2.0

Panjang kabel: 5m
Perlu hub agar lebih jauh

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Pin USB (Standar)


Pin 1 : VCC (5V)

Pin 2 : Data -

Pin 3 : Data +

Pin 4 : Ground

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Pin USB micro-B 3.0

No.1: power (VBUS) No.6: USB 3.0 signal transmission


line (−)
No.2: USB 2.0 differential pair No.7: USB 3.0 signal transmission
(D−) line (+)
No.3: USB 2.0 differential pair No.8: GND
(D+) No.9: USB 3.0 signal receiving line
(−)
No.4: USB OTG ID for identifying No.10: USB 3.0 signal receiving
lines line (+)
No.5: GND

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Antarmuka Host

Wikipedia.org

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Kabel USB

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Sinyal USB

Jarak maksimal kabel 5 meter

Skema enkoding: NRZI (non return to zero invert)

Receiver
Driver

Kabel 1 kaki Kabel 5 meter

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Sinyal USB: Kode NRZI


a 0 bit is transmitted by toggling the data lines from J to K or
vice-versa

a 1 bit is transmitted by leaving the data lines as-is

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Topologi: Star

1 host dapat melayani PC
sampai 127 peripheral USB Host
Root Hub

Hub
P P
P
Hub
P P
P

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Endpoints

Up to 32
endpoints

Endpoints are logical channels inside a
peripheral device
– Diidentifikasi dengan tuple (device_address,
endpoint_number)

In hardware they’re addressable buffers (FIFOS)
– Every host transfer includes a 4-bit endpoint number and
a direction bit

CONTROL endpoint 0 is mandatory

All others are up to the design

Endpoints are handy for separating data types
(c)2022, Eko Didik Widianto, Universitas Diponegoro
Kelas Device

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Kelas Peripheral / Device

(c)2022, Eko Didik Widianto, Universitas Diponegoro


4 Tipe Transfer


Control
– Mission-critical, highest error protection
– Used to interrogate, configure and control devices

Bulk (easiest to use and the most flexible)
– Large, sporadic, use all remaining available bandwidth
– Ex: file transfer

Interrupt
– Guaranteed quick responses (bounded latency)
– Ex: pointing devices, keyboards

Isochronous
– Guaranteed data rate, but w/ possible data lost
– Ex: realtime audio or video

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Frame Data USB (Cypress)

1 msec frame

...
SOF

SOF
Video Audio Mouse Control Printer Printer

Isochronous Interrupt Control Bulk

• 12MHz = 1.5MB/s or 1500 bytes/ms (full speed)


• Isochronous/Interrupt traffic have guaranteed bandwidth
• Control traffic is “best-effort”
• Bulk uses what is left

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Hub USB

PC PC
USB USB USB USB

Hub
Device Device Device
USB USB USB USB

Device Device

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Hub: Memberikan Arus ke Device

PC PC Wall Wart
USB USB
USB USB

500 500
500 500

Hub Hub
Device Device
USB USB USB USB
USB USB USB USB
500 500
100 100

Device Device Device Device

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Hub: Device Lebih Banyak

PC Wall Wart
USB USB

500 500

Hub
Device
USB USB USB USB USB USB USB
500 500 500

Device Device Device

 Easy way to expand and power devices

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Kontroler Host dan Driver
Application Application

Class Driver

IRP

USB Driver

Host Controller Driver

Transaction List

Host Controller Host Controller

PC Simple Embedded

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Implementasi PC
 Apps or class drivers create IO
Application Request Packets (IRP)
 USB Driver
Class Driver
• Processes IRP’s
IRP
• Manages CONTROL pipe
• Division of duties between USBD and HCD
USB Driver is not defined
 Host Controller Driver (HCD)
Host Controller Driver • Provides abstraction
– Of host controller registers
Transaction List – Of data transfer specifics
• HCD creates a transaction list
– Schedule of transfers
Host Controller
 Host Controller turns transaction list
into packets

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Implementasi PC: Kompleks
 App needs no knowledge of
Application
• Which host controller is installed
• USB signaling details
Class Driver
• Bus utilization details
IRP • Transaction lists
USB Driver
 App talks to buffers in your device
using “pipes”
Host Controller Driver  Most of the HCD/HC complexity is due
Transaction List
to the flexible nature of USB
• 127 devices
• Devices appear and disappear at random
Host Controller
• Bandwidth must be fairly shared between
devices

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Implementasi Embedded
 Looks simple
Application
 The hardware is simple
 But software is “low-level”
• Detect USB device attachment
• Detect speed
• Enumerate devices
• Suspend and resume devices
• Manage error recovery
• Generate USB resets
Host Controller
• Conduct transfers
Simple Embedded

(c)2022, Eko Didik Widianto, Universitas Diponegoro


RTOS Menjembatasi Host - Driver

• Examples Application • Host Controller


– WinCE vendor may
– Linux provide a small
Class Driver driver to make
– VxWorks
the chip look like
something the
RTOS with a RTOS supports
USB
"Stack"

Host Controller

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Implementasi USB

(c)2022, Eko Didik Widianto, Universitas Diponegoro


USB Host/Device

(c)2022, Eko Didik Widianto, Universitas Diponegoro


USB On The Go (OTG), 2006

Connect two peripherals together
– PC is not required (but still
supported)

Allow peripherals to awaken each
other
– Session Request Protocol
(SRP)

Allow devices to exchange the host role
– Host Negotiation Protocol (HNP)

New OTG devices can tap into the existing 900 million
USB devices

(c)2022, Eko Didik Widianto, Universitas Diponegoro


USB On The Go (OTG)

Defines a new connector and cable
– “Mini-AB” receptacle
– Mini-A to Mini-B cable
– Cable establishes the default host

A-Device is the default host

Host turns on VBUS

Dual-role USB devices:
– Sometimes a peripheral, sometimes a host
– Must use the new AB connector
– Provide limited host capability
– Supply 8 mA (min) on VBUS
– Operate at full speed (high speed optional)

(c)2022, Eko Didik Widianto, Universitas Diponegoro


USB Physical Hit Counter (AVRTiny)

http://www.bobhobby.com/2008/04/22/usb-physical-hit-counter-based-on-avr-attiny25/

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Skematik

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Kelas Peripheral / Device

(c)2022, Eko Didik Widianto, Universitas Diponegoro


USB Peripheral Dev Tools

Serial

Develop--Debug PC USB

Test USB

Full-speed USB
Development Board

(c)2022, Eko Didik Widianto, Universitas Diponegoro


Embedded Host

Serial

Develop--Debug PC USB

Test Host
Transfers

Add-on board
contains USB host
plus 4-port hub

Full-speed USB
Development Board

(c)2022, Eko Didik Widianto, Universitas Diponegoro

Anda mungkin juga menyukai