Tutorial Mikrokontroller Part 1 (latihan 3)
Mudah-mudahan pengunjung mau mencoba tutorial yang saya tulis ini,sederhana dan mungkin sudah usang….
saya menggunakan compiler bahasa C- SDCC dan ASM51 untuk compiler Assembler…..Langsung ke TKP ….
tema latihan 3 adalah : Nyala Led Kanan Kiri (dengan Bahasa C dan assembler)
#include <at89x51.h>
void time (void) //fungsi tunda waktu
{
unsigned int i;for(i=0; i<0xffff;i++);
}
void main()
{
unsigned char a,rotate;while(1)
{
a = 0x01;
P1=~a; //inverst bit
time(); //panggil tunda waktu
for(rotate=1;rotate<8;rotate++) //Right Rotate
{
a = a*2; //nilai a dikalikan 2 ayoo brapa……/* penjelasannya : 0000 0001 = 1×2=2 , jadi 0000 0010 x 2 = 4(desimal) 0000 0100 (biner)….dst…hingga mentok …..
P1 = ~a; //nilai a disalin ke P1
time(); //panggil tunda waktu
}a = 0x80;
P1=~a;
time();
for(rotate=1;rotate<8;rotate++) //Right Rotate
{
a = a/2;
P1 = ~a;
time();
}
}}
Bila pengujung suka dengan Bahasa Asembler ini,…silahkan dicoba…yach jangan lupa header filenya…
; Lampu menyala pingpong kiri ke kanan, kanan ke kiri di port 1
;
;———————————————————————————
$mod51Org 0h
;
MOV A, #0FEh ; simpan data 11111110B ke akumulator (P1.0 menyala
; duluan)
MULAI:
MOV P1,A ; kirim data ke Port 1
ACALL DELAY ; tunda sebentar
RL A ; putar isi akumulator ke kiri 1 bit
CJNE A,#7FH,MULAI ; apakah A=01111111B ? Tidak, ulangi lagi!
MULAI1: ; Ya, lanjutkan ke proses berikut…
MOV P1,A ; kirim data ke Port 1
ACALL DELAY ; tunda sebentar
RR A ; putar isi akumulator ke kanan 1 bit
CJNE A,#0FEh,MULAI1 ; apakah A=11111110B ? Tidak, ulangi lagi!
SJMP MULAI ; Ya, ulangi lagi dari paling awal…
;
;-subrutin DELAY——————————————————————
;
; subrutin ini hanya sekedar melakukan penundaan sesaat dengan cara
; mengulangi proses (pengurangan isi register) hingga dicapai suatu
; kondisi tertentu
;
;———————————————————————————
Delay: Mov R0,#0 ; Isi Register R0 dengan 0 (256x ulang)
Delay1: Mov R1,#0 ; Isi Register R1 dengan 0 (256x ulang)
Djnz R1,$
Djnz R0,Delay1
Ret
End