Contoh program UKK elektronika industri 2016 “motor
stepper” menggunakan compiler M-IDE dan bahasa assembler
Cara kerja program
·
SW1
ditekan maka program akan direset
·
SW2
ditekan maka motor stepper akan
berputar 90O ke kanan (searah jarum jam)
·
SW3
ditekan maka motor stepper akan
berputar 180O ke kiri (berlawanan arah jarum jam)
·
SW4 ditekan maka motor stepper akan stop
Cara kerja motor stepper
Untuk memutar CW
STEPP
|
PIN4
|
PIN3
|
PIN2
|
PIN1
|
STEPP1
|
1
|
1
|
0
|
0
|
STEPP2
|
0
|
1
|
1
|
0
|
STEPP3
|
0
|
0
|
1
|
1
|
STEPP4
|
1
|
0
|
0
|
1
|
Untuk memutar CCW
STEPP
|
PIN4
|
PIN3
|
PIN2
|
PIN1
|
STEPP1
|
1
|
0
|
0
|
1
|
STEPP2
|
0
|
0
|
1
|
1
|
STEPP3
|
0
|
1
|
1
|
0
|
STEPP4
|
1
|
1
|
0
|
0
|
Contoh program
Sederhana
;*******************************************************
;mendefisinikan
i/o atau variable
;*******************************************************
SW2 equ p1.0 ;mengidentifikasi
SW2 sebagai P1.0
SW3 equ p1.1 ;mengidentifikasi
SW3 sebagai P1.1
SW4 equ p1.2 ;mengidentifikasi
SW4 sebagai P1.2
Org 0000H
;------------------------------------------------------
;*******************************************************
;MAIN
PROGRAM (pembacaan kondisi tombol)
;*******************************************************
main_prog: MOV Motor,#000H ;memindah
nilai 00h ke motor (semua kutup motor dimatikan)
JNB SW2,sub_90 ;jika SW2 sama dengan 0, maka membaca atau
loncat ke sub_90
JNB SW3,sub_180 ;jika SW2 sama dengan 0, maka membaca atau
loncat ke sub_180
sjmp main_prog ;lompat pendek ke main_program
;------------------------------------------------------
;*******************************************************
;SUB
PROGRAM (PEMBACAAN SW3 / PROGRAM MOTOR 90 DERAJAT)
;*******************************************************
sub_90: MOV R1,#3 ;R1
terisi dengan nilai 3 (mengalami pengulangan selama 3x)
loop_90: MOV motor,#00CH ;kondisi kutup motor 1100
call delay ;delay
JNB SW4,main_prog ;jika SW4 sama dengan 0, maka membaca atau
loncat main_prog
MOV motor,#006H ;kondisi kutup motor 0110
call delay ;delay
JNB SW4,main_prog ;jika SW4 sama dengan 0, maka membaca atau
loncat main_prog
MOV motor,#003H ;kondisi kutup motor 0011
call delay ;delay
JNB SW4,main_prog ;jika SW4 sama dengan 0, maka membaca atau
loncat main_prog
MOV motor,#009H ;kondisi kutup motor 1001
call delay ;delay
JNB SW4,main_prog ;jika SW4 sama dengan 0, maka membaca atau
loncat main_prog
DJNZ R1,loop_90 ;pengurangan hingga sama dengan 0, jika
tidak maka akan selalu membaca
loop_90
MOV motor,#000H ;kondisi kutup motor 0000
SJMP main_prog ;kembali ke main_program
RET
;------------------------------------------------------
;*******************************************************
;SUB
PROGRAM (PEMBACAAN SW4 / PROGRAM MOTOR 180 DERAJAT)
;*******************************************************
sub_180: MOV R1,#6 ;R1
terisi dengan nilai 6 (mengalami pengulangan selama 6x)
loop_180: MOV motor,#009H ;kondisi
kutup motor 1001
call delay ;delay
JNB SW4,main_prog ;jika SW4 sama dengan 0, maka membaca atau
loncat main_prog
MOV motor,#003H ;kondisi kutup motor 0011
call delay ;delay
JNB SW4,main_prog ;jika SW4 sama dengan 0, maka membaca atau
loncat main_prog
MOV motor,#006H ;kondisi kutup motor 0110
call delay ;delay
JNB SW4,main_prog ;jika SW4 sama dengan 0, maka membaca atau
loncat main_prog
MOV motor,#00CH ;kondisi kutup motor 1100
call delay ;delay
JNB SW4,main_prog ;jika SW4 sama dengan 0, maka membaca atau
loncat main_prog
DJNZ R1,loop_180 ;pengurangan hingga sama dengan 0, jika
tidak maka akan selalu membaca loop_180
MOV motor,#000H ;kondisi kutup motor 1001
SJMP main_prog ;kembali ke main_program
RET
;------------------------------------------------------
;*******************************************************
;tunda
;*******************************************************
delay: MOV R5,#0ffh ;mengisi R5 dengan nilai ff
MOV R6,#0ffH ;mengisi R6 dengan nilai ff
delay_loop: DJNZ R5,delay_loop ;pengurangan
R5 hingga sama dengan 0, jika tidak maka akan selalu membaca delay_loop
DJNZ R6,delay_loop ;pengurangan R6 hingga sama dengan 0, jika
tidak maka akan selalu membaca delay_loop
DJNZ R7,delay_loop ;pengurangan R7 hingga sama dengan 0, jika
tidak maka akan selalu membaca delay_loop
RET
END
;------------------------------------------------------
Informasi tambahan
- Jangan lupa saat membuat PCB, sediakan soket untuk input Power supply
- Berikan Pull Up pada P0 dengan menggunakan resistor 10K atau R pack 10K
Untuk mencoba contoh program, maka
sesiakan software sebagai berikut:
- M-IDE Compiler
- ISIS Proteus 8.2 ke atas