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
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
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
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
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.
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
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.
Lihat: https://www.keil.com/support/man/docs/a51/a51_controls.htm
Operator Aritmetika
+ tambah
- kurang
* perkalian
/ pembagian
MOD modulo, atau sisa pembagian
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
●
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
Lihat: https://www.keil.com/support/man/docs/a51/a51_wp_operators.htm
Kontrol Tandon Air: Sistem
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
ya
sumur isi ya
tidak
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
●
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
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
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
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
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)
I/O I/O
8051 8051
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
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
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
●
Sumber sinyal:
– Counter → dari luar
– Timer → dari dalam (hasil pembagian sinyal clock)
Flag Control
1: overflow 1: aktif
T1
C/T
Misal:
TRx
Jika fosc = 11,0592 MHz,
maka frekuensi timer =
GATE
fosc/12 = 921,6 kHz →
INT1
Periode = 1,085 us
Timer TLx
Clock 8 bit
TFx
TH0
reload 1/12 frek clock
8bit TF1
THx
8bit
mode 3
mode 2
SelesaiInterupsi:
RETI
END (c)2020, Eko Didik Widianto, Universitas Diponegoro
Komunikasi Serial UART
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
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
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)
●
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
0 RS232
TTL
-15
RS232 LEVEL
CONVERTER
RS232 TTL
MCU
Personal Computer
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
●
Byte-> jumlah
byte yang
diperlukan
●
Siklus mesin ->
waktu untuk
menyelesaikan
satu perintah
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
mov p1,#00h NOP NOP mov p1,#0FFh sjmp start mov p1,#00h
P1.3
96us
Referensi:
●
http://plit.de/asem-51/contents.htm
●
MCS 51 Microcontroller Family User’s Manual
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
PSW 0
1 1 1 1 1 1 1 1
A 70 113??
mul AB B 7E 126
; AB=A*B
=
B 75 A A2 30114
div AB B 7E 126
; A=A/B, B=A mod B
=
A 01 B 71
Hasil bagi, 1 Sisa, 113
A 0 1 0 1 0 1 0 0
1
RRC
A 1 1 0 1 0 1 0 1 A 1 0 1 0 1 0 1 1
RL A
SWAP A
A 0 1 0 1 1 1 0 1
5 D
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
11 09
12 08 00
7A = 7E-4
ajmp page4
83 = 4-81
Perulangan
A=A+1
Ulang:
inc A
R0=R0-1 djnz R0,Ulang
mov @R1,A
T
R0<>0? ------
Y ------
mov @R1,A
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?
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
@2022,Eko Didik
Widianto
Antarmuka
Mikroprosesor
Peripheral I/O
Pemrograman I/O Sederhana
Lisensi
Kuliah#12 TKC211 - Teknik Mikroprosesor dan Antarmuka
Antarmuka
Mikroprosesor
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
Antarmuka
Mikroprosesor
Lisensi
Lisensi
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
Lisensi
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
Antarmuka
Mikroprosesor
Antarmuka Mikrokontroler
AT89C51/S51
Pin Antarmuka
Peripheral I/O
Sederhana
Lisensi
Antarmuka
Mikroprosesor
Antarmuka Mikrokontroler
AT89C51/S51
Pin Antarmuka
Peripheral I/O
Sederhana
Lisensi
Antarmuka
Mikroprosesor
Antarmuka Mikrokontroler
AT89C51/S51
Pin Antarmuka
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)
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
Peripheral I/O
Sederhana
Lisensi
Peripheral I/O
Sederhana
Lisensi
Peripheral I/O
Sederhana
Lisensi
Peripheral I/O
Sederhana
Lisensi
Antarmuka
Mikroprosesor
Antarmuka Mikrokontroler
AT89C51/S51
Pin Antarmuka
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)
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
Antarmuka
Mikroprosesor
Antarmuka Mikrokontroler
AT89C51/S51
Pin Antarmuka
Peripheral I/O
Sederhana
Lisensi
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
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
Lisensi
Antarmuka
Mikroprosesor
Antarmuka Mikrokontroler
AT89C51/S51
I Memori data (16-bit address) Pin Antarmuka
Antarmuka
Mikroprosesor
Peripheral I/O
Akses CPU - Memori Sederhana
Lisensi
Parameter Pewaktuan dan Siklus
Antarmuka AVR ATmega32A
Lisensi
Peripheral I/O
Sederhana
Lisensi
Peripheral I/O
Sederhana
Lisensi
Antarmuka
Mikroprosesor
I CPU membaca instruksi (opcode) dan data (operand) dari Antarmuka AVR
ATmega32A
Peripheral I/O
Sederhana
Lisensi
Antarmuka
Mikroprosesor
Antarmuka
Mikroprosesor
Peripheral I/O
Sederhana
Lisensi
Antarmuka
Mikroprosesor
Peripheral I/O
I Control lines are driven by the CPU to indicate the address Sederhana
Antarmuka
Mikroprosesor
Peripheral I/O
Sederhana
Lisensi
Antarmuka
Mikroprosesor
Peripheral I/O
Sederhana
Lisensi
Antarmuka
Mikroprosesor
Peripheral I/O
Sederhana
Lisensi
I MPU Antarmuka
Mikroprosesor
I Dekoder: Akses CPU - Memori
I ROM: program Parameter Pewaktuan dan
Siklus
Peripheral I/O
Sederhana
Lisensi
Antarmuka
Mikroprosesor
Peripheral I/O
Akses CPU - Memori Sederhana
Lisensi
Parameter Pewaktuan dan Siklus
Antarmuka AVR ATmega32A
Lisensi
Antarmuka
Mikroprosesor
Peripheral I/O
di ATMega32A: Sederhana
Antarmuka
Mikroprosesor
Peripheral I/O
Sederhana
Lisensi
Peripheral I/O
Sederhana
Lisensi
Peripheral I/O
Sederhana
Lisensi
Peripheral I/O
Sederhana
Lisensi
Peripheral I/O
Sederhana
Lisensi
Antarmuka
Mikroprosesor
Peripheral I/O
Sederhana
Lisensi
Antarmuka
Mikroprosesor
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
Antarmuka
I Port I/O 8051 dipetakan ke alamat SFR (Special Function Mikroprosesor
Antarmuka
Mikroprosesor
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
Antarmuka
Mikroprosesor
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
Antarmuka
Mikroprosesor
Peripheral I/O
Sederhana
Lisensi
Antarmuka
Mikroprosesor
Peripheral I/O
Sederhana
I Pull-up sebagai current source Lisensi
I Sekitar 50uA ke beban
eksternal
I Arus sink lebih besar,
beberapa mA
Antarmuka
Mikroprosesor
Antarmuka
Mikroprosesor
I Arus source= 50uA Akses CPU - Memori
Peripheral I/O
adalah 50u × β Sederhana
transistor NPN
I Kebutuhan arus besar:
transistor Darlington
Antarmuka
Mikroprosesor
Peripheral I/O
I Arus sink lebih besar daripada Sederhana
source Lisensi
Antarmuka
Mikroprosesor
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
Antarmuka
Mikroprosesor
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
Antarmuka
Mikroprosesor
Peripheral I/O
Sederhana
Lisensi
Antarmuka
Mikroprosesor
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
Antarmuka
I Termultipleks: 4 row, 4 Mikroprosesor
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
Peripheral I/O
Sederhana
Lisensi
Antarmuka
Mikroprosesor
Peripheral I/O
Sederhana
Lisensi
Antarmuka
Mikroprosesor
Peripheral I/O
Sederhana
Lisensi
Peripheral I/O
Sederhana
Lisensi
Antarmuka
Mikroprosesor
Peripheral I/O
Sederhana
Lisensi
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/
Referensi:
●
MCS 51 Microcontroller Family User’s Manual
●
ATMega32 8-bit AVR with 32 Kbytes ISP Flash
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
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
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
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
111
DIGITAL OUTPUT
110
101
100
011 1 LSB
010
001
ANALOG INPUT
1 LS B
Digital Output
●
10 0
terdapat 2N kode 011
●
1 LSB = FS/2N 01 0
00 1
●
Untuk ADC 3-bit, 00 0
A nalog Input
5 /8 3/4 7/8
●
Tiap langkah berpusat
di tiap 1/8 FS
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
Parallel converter
Successive-approximation
●
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.
https://www.ti.com/lit/ds/symlink/adc0804-n.pdf
●
Lainnya ADC0808
●
ADC has a dedicated
clock domain (clkADC)
– reduce noise
generated by digital
circuitry
– gives more accurate
ADC conversion
results
●
REFS[1:0]: memilih tegangan referensi
●
ADLAR: ADC Left Adjust Result (1: left; 0:right)
Single-ended conversion
Differential conversion
●
ADTS[2:0]: ADC Auto Trigger Source
hvoltage = ADCL;
lvoltage = (ADCH << 8);
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/
●
http://
extremeelectronics.co.in/
tools/visualize-adc-data-
on-pc-screen-using-usart-
avr-project/
fritzing.org Potensiometer
Photoresistor:
1M → gelap
10k → daylight (10lumen)
1k → terang (>100lumen)
Referensi:
●
MCS 51 Microcontroller Family User’s Manual
●
ATMega32 8-bit AVR with 32 Kbytes ISP Flash
●
SD/MMC
●
Audio codec
●
Microkontroler lain
●
Sensor
●
RTC
●
Modem
●
Modul jaringan
http://www.altera.com
DTE
●
DTE-DTE: cross cable atau null modem
Loopback
Spy/Monitor
●
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
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
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)
https://www.javatpoint.com/lcd-interfacing-avr
https://docs.arduino.cc/tutorials/communication/BarometricPressureSensor
→ Menggunakan pustaka SPI
https://en.wikipedia.org/
http://www.atmel.com/Images/doc1981.pdf
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)
●
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
●
Kecepatan
●
Antarmuka
●
Topologi
●
Endpoint
●
Tipe transfer
●
Hub
●
Host dan driver
●
Protokol OWI-535 Robotic Arm Edge
●
USB Mini/Micro 1.x/2.0
Panjang kabel: 5m
Perlu hub agar lebih jauh
●
Pin 1 : VCC (5V)
●
Pin 2 : Data -
●
Pin 3 : Data +
●
Pin 4 : Ground
Wikipedia.org
Receiver
Driver
●
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
Hub
P P
P
Hub
P P
P
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
●
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
1 msec frame
...
SOF
SOF
Video Audio Mouse Control Printer Printer
PC PC
USB USB USB USB
Hub
Device Device Device
USB USB USB USB
Device 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
PC Wall Wart
USB USB
500 500
Hub
Device
USB USB USB USB USB USB USB
500 500 500
Class Driver
IRP
USB Driver
Transaction List
PC Simple Embedded
Host Controller
http://www.bobhobby.com/2008/04/22/usb-physical-hit-counter-based-on-avr-attiny25/
Serial
Develop--Debug PC USB
Test USB
Full-speed USB
Development Board
Serial
Develop--Debug PC USB
Test Host
Transfers
Add-on board
contains USB host
plus 4-port hub
Full-speed USB
Development Board